From 5e6352b0d4a4c648269fca58a4aee9947d65ad73 Mon Sep 17 00:00:00 2001
From: Arthur <dev@bi3d.com.br>
Date: Tue, 19 Nov 2019 17:22:08 -0300
Subject: [PATCH 001/138] A translation in brazilian portuguese has been added

---
 resources/localization/pt_br/PrusaSlicer.mo   |  Bin 0 -> 217077 bytes
 .../localization/pt_br/PrusaSlicer_pt_br.po   | 9386 +++++++++++++++++
 2 files changed, 9386 insertions(+)
 create mode 100644 resources/localization/pt_br/PrusaSlicer.mo
 create mode 100644 resources/localization/pt_br/PrusaSlicer_pt_br.po

diff --git a/resources/localization/pt_br/PrusaSlicer.mo b/resources/localization/pt_br/PrusaSlicer.mo
new file mode 100644
index 0000000000000000000000000000000000000000..a2f3e9789d18d81a6d15de4544a644d9d280221c
GIT binary patch
literal 217077
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

literal 0
HcmV?d00001

diff --git a/resources/localization/pt_br/PrusaSlicer_pt_br.po b/resources/localization/pt_br/PrusaSlicer_pt_br.po
new file mode 100644
index 000000000..e54f17ec3
--- /dev/null
+++ b/resources/localization/pt_br/PrusaSlicer_pt_br.po
@@ -0,0 +1,9386 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-09-09 16:39+0200\n"
+"PO-Revision-Date: 2019-11-18 16:39-0300\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 2.2.4\n"
+"Last-Translator: \n"
+"Language: pt_BR\n"
+
+#: src/slic3r/GUI/AboutDialog.cpp:39 src/slic3r/GUI/AboutDialog.cpp:291
+msgid "Portions copyright"
+msgstr "Direitos autorais das partes"
+
+#: src/slic3r/GUI/AboutDialog.cpp:127 src/slic3r/GUI/AboutDialog.cpp:256
+msgid "Copyright"
+msgstr "Direitos autorais"
+
+#. TRN "Slic3r _is licensed under the_ License"
+#: src/slic3r/GUI/AboutDialog.cpp:129
+msgid ""
+"License agreements of all following programs (libraries) are part of "
+"application license agreement"
+msgstr ""
+"Os contratos de licença de todos os seguintes programas (bibliotecas) são "
+"parte do contrato de licença de aplicativo"
+
+#: src/slic3r/GUI/AboutDialog.cpp:199
+#, c-format
+msgid "About %s"
+msgstr "Sobre %s"
+
+#: src/slic3r/GUI/AboutDialog.cpp:231 src/slic3r/GUI/MainFrame.cpp:62
+msgid "Version"
+msgstr "Versão"
+
+#. TRN "Slic3r _is licensed under the_ License"
+#: src/slic3r/GUI/AboutDialog.cpp:258
+msgid "is licensed under the"
+msgstr "está licenciado sobre o(a)"
+
+#: src/slic3r/GUI/AboutDialog.cpp:259
+msgid "GNU Affero General Public License, version 3"
+msgstr "Licensa GNU Affero General Public, versão 3"
+
+#: src/slic3r/GUI/AboutDialog.cpp:260
+msgid ""
+"PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap "
+"community."
+msgstr ""
+"PrusaSlicer é baseado no Slic3r criado por Alessandro Ranellucci e a "
+"comunidade RepRap."
+
+#: src/slic3r/GUI/AboutDialog.cpp:261
+msgid ""
+"Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, "
+"Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and "
+"numerous others."
+msgstr ""
+"Contribuições por Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, "
+"Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik e "
+"outros."
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:92
+msgid ""
+"Copying of the temporary G-code to the output G-code failed. Maybe the SD "
+"card is write locked?"
+msgstr ""
+"A cópia do G-código provisório G-código falhou na saída. Talvez o cartão SD "
+"está bloqueado para escrita?"
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:93
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:415
+msgid "Running post-processing scripts"
+msgstr "Aplicando scripts de pós-processamento"
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:95
+msgid "G-code file exported to %1%"
+msgstr "Arquivo G-code exportado para %1%"
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:99
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:117
+msgid "Slicing complete"
+msgstr "Fatiamento completo"
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:113
+msgid "Masked SLA file exported to %1%"
+msgstr "Arquivo SLA mascarado exportado para %1%"
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:155
+#, c-format
+msgid ""
+"%s has encountered an error. It was likely caused by running out of memory. "
+"If you are sure you have enough RAM on your system, this may also be a bug "
+"and we would be glad if you reported it."
+msgstr ""
+"%s encontrou um erro. Provavelmente foi causado por ficar sem memória. Se "
+"você tem certeza que você tem RAM suficiente em seu sistema, isso também "
+"pode ser um bug e nós estaríamos contentes se você relatou."
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:417
+msgid "Copying of the temporary G-code to the output G-code failed"
+msgstr "A cópia do G-código provisório G-código falhou na saída"
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:426
+msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
+msgstr "Agendando upload para ` %1%` . Veja a aba -> Print Host Upload Queue"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:65
+msgid "Shape"
+msgstr "Forma"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:72
+msgid "Rectangular"
+msgstr "Retangular"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:76
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:393 src/slic3r/GUI/Plater.cpp:145
+#: src/slic3r/GUI/Tab.cpp:2524
+msgid "Size"
+msgstr "Tamanho"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:77
+msgid "Size in X and Y of the rectangular plate."
+msgstr "Tamanho no X e Y na mesa retangular."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:83
+msgid "Origin"
+msgstr "Origem"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:84
+msgid ""
+"Distance of the 0,0 G-code coordinate from the front left corner of the "
+"rectangle."
+msgstr ""
+"Distância do ponto 0,0 da coordenada do G-code do canto esquerdo do "
+"retângulo."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:88
+msgid "Circular"
+msgstr "Circular"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:91 src/slic3r/GUI/ConfigWizard.cpp:123
+#: src/slic3r/GUI/ConfigWizard.cpp:576 src/slic3r/GUI/ConfigWizard.cpp:590
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:135
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:390
+#: src/slic3r/GUI/WipeTowerDialog.cpp:84 src/slic3r/GUI/wxExtensions.cpp:509
+#: src/libslic3r/PrintConfig.cpp:70 src/libslic3r/PrintConfig.cpp:77
+#: src/libslic3r/PrintConfig.cpp:86 src/libslic3r/PrintConfig.cpp:220
+#: src/libslic3r/PrintConfig.cpp:295 src/libslic3r/PrintConfig.cpp:303
+#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:363
+#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:499
+#: src/libslic3r/PrintConfig.cpp:517 src/libslic3r/PrintConfig.cpp:695
+#: src/libslic3r/PrintConfig.cpp:1215 src/libslic3r/PrintConfig.cpp:1276
+#: src/libslic3r/PrintConfig.cpp:1294 src/libslic3r/PrintConfig.cpp:1312
+#: src/libslic3r/PrintConfig.cpp:1364 src/libslic3r/PrintConfig.cpp:1374
+#: src/libslic3r/PrintConfig.cpp:1495 src/libslic3r/PrintConfig.cpp:1503
+#: src/libslic3r/PrintConfig.cpp:1544 src/libslic3r/PrintConfig.cpp:1552
+#: src/libslic3r/PrintConfig.cpp:1562 src/libslic3r/PrintConfig.cpp:1570
+#: src/libslic3r/PrintConfig.cpp:1578 src/libslic3r/PrintConfig.cpp:1661
+#: src/libslic3r/PrintConfig.cpp:1878 src/libslic3r/PrintConfig.cpp:1948
+#: src/libslic3r/PrintConfig.cpp:1982 src/libslic3r/PrintConfig.cpp:2176
+#: src/libslic3r/PrintConfig.cpp:2183 src/libslic3r/PrintConfig.cpp:2190
+#: src/libslic3r/PrintConfig.cpp:2220 src/libslic3r/PrintConfig.cpp:2230
+#: src/libslic3r/PrintConfig.cpp:2240 src/libslic3r/PrintConfig.cpp:2403
+#: src/libslic3r/PrintConfig.cpp:2510 src/libslic3r/PrintConfig.cpp:2519
+#: src/libslic3r/PrintConfig.cpp:2528 src/libslic3r/PrintConfig.cpp:2538
+#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2592
+#: src/libslic3r/PrintConfig.cpp:2604 src/libslic3r/PrintConfig.cpp:2624
+#: src/libslic3r/PrintConfig.cpp:2634 src/libslic3r/PrintConfig.cpp:2644
+#: src/libslic3r/PrintConfig.cpp:2662 src/libslic3r/PrintConfig.cpp:2677
+#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2704
+#: src/libslic3r/PrintConfig.cpp:2742 src/libslic3r/PrintConfig.cpp:2752
+#: src/libslic3r/PrintConfig.cpp:2761 src/libslic3r/PrintConfig.cpp:2771
+msgid "mm"
+msgstr "mm"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:92 src/libslic3r/PrintConfig.cpp:692
+msgid "Diameter"
+msgstr "Diâmetro"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:93
+msgid ""
+"Diameter of the print bed. It is assumed that origin (0,0) is located in the "
+"center."
+msgstr ""
+"Diâmetro da mesa de impressão. Se assume que a origem (0,0) seja localizado "
+"no centro."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:97 src/slic3r/GUI/GUI_Preview.cpp:247
+#: src/libslic3r/GCode/PreviewData.cpp:159
+msgid "Custom"
+msgstr "Customizado"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:101
+msgid "Load shape from STL..."
+msgstr "Carregar forma do STL..."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:154
+msgid "Settings"
+msgstr "config."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:171
+msgid "Texture"
+msgstr "Textura"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:181 src/slic3r/GUI/BedShapeDialog.cpp:249
+msgid "Load..."
+msgstr "Carregar..."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:189 src/slic3r/GUI/BedShapeDialog.cpp:257
+#: src/slic3r/GUI/Tab.cpp:3286
+msgid "Remove"
+msgstr "Remover"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:239
+msgid "Model"
+msgstr "Modelo"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:464
+msgid "Choose an STL file to import bed shape from:"
+msgstr "Escolha um arquivo STL para importar o formato da mesa:"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:471 src/slic3r/GUI/BedShapeDialog.cpp:520
+#: src/slic3r/GUI/BedShapeDialog.cpp:543
+msgid "Invalid file format."
+msgstr "Formato de arquivo inválido."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:482
+msgid "Error! Invalid model"
+msgstr "Erro! Modelo inválido"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:490
+msgid "The selected file contains no geometry."
+msgstr "O arquivo selecionado não contém geometria."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:494
+msgid ""
+"The selected file contains several disjoint areas. This is not supported."
+msgstr "O arquivo selecionado contém áreas não juntas. Isso não é suportado."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:509
+msgid "Choose a file to import bed texture from (PNG/SVG):"
+msgstr "Escolher um arquivo para importar a textura da mesa (PNG/SVG):"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:532
+msgid "Choose an STL file to import bed model from:"
+msgstr "Escolha um arquivo STL para importar o modelo da mesa:"
+
+#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:535
+msgid "Bed Shape"
+msgstr "Formato da mesa"
+
+#: src/slic3r/GUI/BonjourDialog.cpp:55
+msgid "Network lookup"
+msgstr "Pesquisa de rede"
+
+#: src/slic3r/GUI/BonjourDialog.cpp:72
+msgid "Address"
+msgstr "Endereço"
+
+#: src/slic3r/GUI/BonjourDialog.cpp:73
+msgid "Hostname"
+msgstr "Nome do Host"
+
+#: src/slic3r/GUI/BonjourDialog.cpp:74
+msgid "Service name"
+msgstr "Nome de serviços"
+
+#: src/slic3r/GUI/BonjourDialog.cpp:76
+msgid "OctoPrint version"
+msgstr "Versão do OctoPrint"
+
+#: src/slic3r/GUI/BonjourDialog.cpp:218
+msgid "Searching for devices"
+msgstr "Procurando por dispositivos"
+
+#: src/slic3r/GUI/BonjourDialog.cpp:225
+msgid "Finished"
+msgstr "Finalizado"
+
+#: src/slic3r/GUI/ButtonsDescription.cpp:16
+msgid "Buttons And Text Colors Description"
+msgstr "Descrição dos botões e cores de texto"
+
+#: src/slic3r/GUI/ButtonsDescription.cpp:36
+msgid "Value is the same as the system value"
+msgstr "O valor é o mesmo que o valor do sistema"
+
+#: src/slic3r/GUI/ButtonsDescription.cpp:53
+msgid ""
+"Value was changed and is not equal to the system value or the last saved "
+"preset"
+msgstr ""
+"O valor foi mudado e não é igual ao valor do sistema ou da última config. "
+"salva"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:18
+msgid "Upgrade"
+msgstr "Atualização"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:20
+msgid "Downgrade"
+msgstr "Desatualização"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:22
+msgid "Before roll back"
+msgstr "Antes de reverter"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24
+msgid "User"
+msgstr "Usuário"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:39
+msgid "Active"
+msgstr "Ativar"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:45
+msgid "slic3r version"
+msgstr "versão do slic3r"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:46 src/slic3r/GUI/Preset.cpp:1311
+msgid "print"
+msgstr "impressão"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:47
+msgid "filaments"
+msgstr "filamentos"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:48 src/slic3r/GUI/Preset.cpp:1315
+msgid "printer"
+msgstr "impressora"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:52 src/slic3r/GUI/Tab.cpp:961
+msgid "vendor"
+msgstr "fornecedor"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:52
+msgid "version"
+msgstr "versão"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53
+msgid "min slic3r version"
+msgstr "versão mínima do slic3r"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:55
+msgid "max slic3r version"
+msgstr "versão máxima do slic3r"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:58
+msgid "model"
+msgstr "modelo"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:58
+msgid "variants"
+msgstr "variantes"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:70
+#, c-format
+msgid "Incompatible with this %s"
+msgstr "Incompatível com isso %s"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:73
+msgid "Activate"
+msgstr "Ativar"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:99
+msgid "Configuration Snapshots"
+msgstr "config. das versões"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:123
+msgid "nozzle"
+msgstr "bico de impressão"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:127
+msgid "Alternate nozzles:"
+msgstr "Alternar bicos:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:193
+msgid "All standard"
+msgstr "Todos padrão"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:194 src/slic3r/GUI/Tab.cpp:3336
+msgid "All"
+msgstr "Todos"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:195 src/slic3r/GUI/Plater.cpp:469
+#: src/slic3r/GUI/Plater.cpp:607 src/libslic3r/GCode/PreviewData.cpp:146
+msgid "None"
+msgstr "Nenhum"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:301
+#, c-format
+msgid "Welcome to the %s Configuration Assistant"
+msgstr "Bem-vindo ao  %s Assistente de config."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:303
+#, c-format
+msgid "Welcome to the %s Configuration Wizard"
+msgstr "Bem-vindo ao  %s Assistente de config."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:305
+msgid "Welcome"
+msgstr "Bem-vindo(a)"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/GUI_App.cpp:793
+#, c-format
+msgid "Run %s"
+msgstr "Executar %s"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:311
+#, c-format
+msgid ""
+"Hello, welcome to %s! This %s helps you with the initial configuration; just "
+"a few settings and you will be ready to print."
+msgstr ""
+"Olá, bem-vindo  ao %s! Isso %s te ajuda com a config. inicial; com apenas "
+"algumas config. e você estará pronto para imprimir."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:316
+msgid ""
+"Remove user profiles - install from scratch (a snapshot will be taken "
+"beforehand)"
+msgstr ""
+"Remover perfis de usuário - instalar do zero (uma snapshot será salva antes)"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:347
+#, c-format
+msgid "%s Family"
+msgstr "%s Família"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:384
+msgid "Custom Printer Setup"
+msgstr "config. da impressora customizada"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:384
+msgid "Custom Printer"
+msgstr "Impressora customizada"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:386
+msgid "Define a custom printer profile"
+msgstr "Definir uma config. para a impressora customizada"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:388
+msgid "Custom profile name:"
+msgstr "Nome customizado da config.:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:412
+msgid "Automatic updates"
+msgstr "Atualizações automáticas"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:412
+msgid "Updates"
+msgstr "Atualizações"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:420 src/slic3r/GUI/Preferences.cpp:69
+msgid "Check for application updates"
+msgstr "Verificar atualizações nas aplicações"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:424
+#, c-format
+msgid ""
+"If enabled, %s checks for new application versions online. When a new "
+"version becomes available, a notification is displayed at the next "
+"application startup (never during program usage). This is only a "
+"notification mechanisms, no automatic installation is done."
+msgstr ""
+"Se ativada, %s verifica se há novas versões do aplicativo online. Quando uma "
+"nova versão se torna disponível, uma notificação é exibida na próxima "
+"inicialização do aplicativo (nunca durante o uso do programa). Este é apenas "
+"um mecanismos de notificação, nenhuma instalação automática é feita."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:430 src/slic3r/GUI/Preferences.cpp:77
+msgid "Update built-in Presets automatically"
+msgstr "Atualizar predefinições incorporadas automaticamente"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:434
+#, c-format
+msgid ""
+"If enabled, %s downloads updates of built-in system presets in the "
+"background.These updates are downloaded into a separate temporary location."
+"When a new preset version becomes available it is offered at application "
+"startup."
+msgstr ""
+"Se ativada, %s baixa atualizações de predefinições de sistema incorporadas "
+"em segundo plano. Essas atualizações são baixadas em um local temporário "
+"separado. Quando uma nova versão predefinida se torna disponível, ela é "
+"oferecida na inicialização do aplicativo."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:437
+msgid ""
+"Updates are never applied without user's consent and never overwrite user's "
+"customized settings."
+msgstr ""
+"Atualizações nunca são aplicadas sem a permissão do usuário e nunca sobre "
+"escrevem as config. do usuário."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:442
+msgid ""
+"Additionally a backup snapshot of the whole configuration is created before "
+"an update is applied."
+msgstr ""
+"Além disso, uma captura de backup de toda a config. é criado antes que uma "
+"atualização seja aplicada."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:449
+msgid "Other Vendors"
+msgstr "Outros fornecedores"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:451
+#, c-format
+msgid "Pick another vendor supported by %s:"
+msgstr "Escolha outro fornecedor suportado por %s:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:497
+msgid "Firmware Type"
+msgstr "Tipo de Firmware"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:497 src/slic3r/GUI/Tab.cpp:2149
+msgid "Firmware"
+msgstr "Firmware"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:501
+msgid "Choose the type of firmware used by your printer."
+msgstr "Escolha o tipo de firmware utilizado na sua impressora."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:535
+msgid "Bed Shape and Size"
+msgstr "Forma e tamanho da mesa"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:538
+msgid "Set the shape of your printer's bed."
+msgstr "Insira o formato da mesa de impressão."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:558
+msgid "Filament and Nozzle Diameters"
+msgstr "Diâmetro do bico e do filamento"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:558
+msgid "Print Diameters"
+msgstr "Diâmetros de impressão"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:572
+msgid "Enter the diameter of your printer's hot end nozzle."
+msgstr "Insira o diâmetro do bico de impressão."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:575
+msgid "Nozzle Diameter:"
+msgstr "Diâmetro do bico:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:585
+msgid "Enter the diameter of your filament."
+msgstr "Coloque o diâmetro do seu filamento."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:586
+msgid ""
+"Good precision is required, so use a caliper and do multiple measurements "
+"along the filament, then compute the average."
+msgstr ""
+"É necessário uma boa precisão, utilize um paquímetro e realize várias "
+"medições ao longo do filamento, faça uma média."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:589
+msgid "Filament Diameter:"
+msgstr "Diâmetro do filamento:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:623
+msgid "Extruder and Bed Temperatures"
+msgstr "Temperaturas da mesa e da extrusora"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:623
+msgid "Temperatures"
+msgstr "Temperaturas"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:639
+msgid "Enter the temperature needed for extruding your filament."
+msgstr "Coloque a temperatura necessária para extrusar seu filamento."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:640
+msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
+msgstr "A regra de ouro é 160 à 230°C para PLA, e 215 à 250°C para ABS."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:643
+msgid "Extrusion Temperature:"
+msgstr "Temperatura de extrusão:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:644 src/slic3r/GUI/ConfigWizard.cpp:658
+msgid "°C"
+msgstr "°C"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:653
+msgid ""
+"Enter the bed temperature needed for getting your filament to stick to your "
+"heated bed."
+msgstr ""
+"Coloque a temperatura da mesa necessária para fazer com que seu filamento "
+"grude na mesa."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:654
+msgid ""
+"A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have "
+"no heated bed."
+msgstr ""
+"A regra de ouro é 60°C para PLA, e 110°C para ABS. Deixe em zero se não há "
+"mesa aquecida."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:657
+msgid "Bed Temperature:"
+msgstr "Temperatura da mesa:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1138
+msgid "Select all standard printers"
+msgstr "Selecione todas as impressoras padrão"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1141
+msgid "< &Back"
+msgstr "< &Voltar"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1142
+msgid "&Next >"
+msgstr "&Próximo >"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1143
+msgid "&Finish"
+msgstr "&Final"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1144 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/ProgressStatusBar.cpp:27
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1158
+msgid "Prusa FFF Technology Printers"
+msgstr "Impressoras de tecnologia Prusa FFF"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1161
+msgid "Prusa MSLA Technology Printers"
+msgstr "Impressoras de tecnologia Prusa MSLA"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1230
+msgid "Configuration Assistant"
+msgstr "Assistente de config."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1231
+msgid "Configuration &Assistant"
+msgstr "Assistente &de config."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1233
+msgid "Configuration Wizard"
+msgstr "Assistente de config."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1234
+msgid "Configuration &Wizard"
+msgstr "Assistente &de config."
+
+#: src/slic3r/GUI/Field.cpp:125
+msgid "default value"
+msgstr "valor padrão"
+
+#: src/slic3r/GUI/Field.cpp:128
+msgid "parameter name"
+msgstr "nome do parâmetro"
+
+#: src/slic3r/GUI/Field.cpp:139 src/slic3r/GUI/OptionsGroup.cpp:569
+msgid "N/A"
+msgstr "N/D"
+
+#: src/slic3r/GUI/Field.cpp:158
+#, c-format
+msgid "%s doesn't support percentage"
+msgstr "%s não suporta porcentagem"
+
+#: src/slic3r/GUI/Field.cpp:174 src/slic3r/GUI/Field.cpp:197
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:337
+msgid "Invalid numeric input."
+msgstr "Entrada numérica não válida."
+
+#: src/slic3r/GUI/Field.cpp:179
+msgid "Input value is out of range"
+msgstr "Valor de entrada está fora do limite"
+
+#: src/slic3r/GUI/Field.cpp:206
+#, c-format
+msgid ""
+"Do you mean %s%% instead of %s %s?\n"
+"Select YES if you want to change this value to %s%%, \n"
+"or NO if you are sure that %s %s is a correct value."
+msgstr ""
+"Você quer dizer %s%% ao invés de %s %s?\n"
+"Selecione SIM se quiser trocar esse valor para %s%%, \n"
+"ou NÃO se você tem certeza que %s %s é o valor correto."
+
+#: src/slic3r/GUI/Field.cpp:209
+msgid "Parameter validation"
+msgstr "Validação do parâmetro"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:150
+msgid "Flash!"
+msgstr "Atualizando!"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:152
+msgid "Flashing in progress. Please do not disconnect the printer!"
+msgstr "Atualização em progresso. Favor não desconectar sua impressora!"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:199
+msgid "Flashing failed"
+msgstr "A atualização falhou"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:282
+msgid "Flashing succeeded!"
+msgstr "Atualizado com sucesso!"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:283
+msgid "Flashing failed. Please see the avrdude log below."
+msgstr "A atualização falhou. Favor verificar os registros abaixo."
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:284
+msgid "Flashing cancelled."
+msgstr "Atualização cancelada."
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:332
+#, c-format
+msgid ""
+"This firmware hex file does not match the printer model.\n"
+"The hex file is intended for: %s\n"
+"Printer reported: %s\n"
+"\n"
+"Do you want to continue and flash this hex file anyway?\n"
+"Please only continue if you are sure this is the right thing to do."
+msgstr ""
+"O arquivo hex do firmware não é o mesmo utilizado no modelo da impressora.\n"
+"O arquivo hex desejado para: %s\n"
+"Impressora relatada: %s\n"
+"\n"
+"Você gostaria de continuar e atualizar o arquivo hex mesmo assim?\n"
+"Favor continuar se tiver certeza que é a coisa certa a se fazer."
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:419 src/slic3r/GUI/FirmwareDialog.cpp:454
+#, c-format
+msgid ""
+"Multiple %s devices found. Please only connect one at a time for flashing."
+msgstr ""
+"Múltiplos %s dispositivos encontrados. Favor conectar um de cada vez para "
+"atualização."
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:436
+#, c-format
+msgid ""
+"The %s device was not found.\n"
+"If the device is connected, please press the Reset button next to the USB "
+"connector ..."
+msgstr ""
+"O %s dispositivo não foi encontrado.\n"
+"Se o dispositivo está conectado, favor utilizar o botão de Reset perto do "
+"conector USB ..."
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:548
+#, c-format
+msgid "The %s device could not have been found"
+msgstr "O %s dispositivo não pode ser encontrado"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:645
+#, c-format
+msgid "Error accessing port at %s: %s"
+msgstr "Erro ao acessa a porta em %s: %s"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:647
+#, c-format
+msgid "Error: %s"
+msgstr "Erro: %s"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:777
+msgid "Firmware flasher"
+msgstr "Atualizador de Firmware"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:802
+msgid "Firmware image:"
+msgstr "Imagem do Firmware:"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1870
+#: src/slic3r/GUI/Tab.cpp:1926
+msgid "Browse"
+msgstr "Procurar"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:807
+msgid "Serial port:"
+msgstr "Porte Serial:"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:809
+msgid "Autodetected"
+msgstr "Auto detectado"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:810
+msgid "Rescan"
+msgstr "Reescanear"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:817
+msgid "Progress:"
+msgstr "Progresso:"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:820
+msgid "Status:"
+msgstr "Status:"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:821
+msgid "Ready"
+msgstr "Pronto"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:841
+msgid "Advanced: Output log"
+msgstr "Avançado: log de Saída"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:852
+#: src/slic3r/GUI/PrintHostDialogs.cpp:161
+msgid "Close"
+msgstr "Fechar"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:903
+msgid ""
+"Are you sure you want to cancel firmware flashing?\n"
+"This could leave your printer in an unusable state!"
+msgstr ""
+"Você tem certeza que gostaria de cancelar a atualização de Firmware? \n"
+"Isso poderia deixar a sua impressora inutilizável!"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:904
+msgid "Confirmation"
+msgstr "Confirmação"
+
+#: src/slic3r/GUI/FirmwareDialog.cpp:907
+msgid "Cancelling..."
+msgstr "Cancelando..."
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:534
+msgid "Layers heights"
+msgstr "Altura de camada"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:631
+msgid "An object outside the print area was detected"
+msgstr "Um objeto foi detectado fora da área de impressão"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:632
+msgid "A toolpath outside the print area was detected"
+msgstr "Há movimentos fora da área de impressão"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:633
+msgid "SLA supports outside the print area were detected"
+msgstr "Suportes de SLA foram detectados fora da área de impressão"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:634
+msgid "Some objects are not visible when editing supports"
+msgstr "Alguns objetos não são visíveis quando editando suportes"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:636
+msgid ""
+"An object outside the print area was detected\n"
+"Resolve the current problem to continue slicing"
+msgstr ""
+"Um objeto foi encontrado fora da área de impressão\n"
+"Resolva o problema atual para continuar o fatiamento"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:1733
+msgid "Mirror Object"
+msgstr "Espelhar objeto"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:2970
+msgid "Move Object"
+msgstr "Mover objeto"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3506
+msgid "Undo History"
+msgstr "Desfazer histórico"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3506
+msgid "Redo History"
+msgstr "Refazer histórico"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3524
+#, c-format
+msgid "Undo %1$d Action"
+msgid_plural "Undo %1$d Actions"
+msgstr[0] "Desfazer ação de %1$d"
+msgstr[1] "Desfazer ações de %1$d"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3524
+#, c-format
+msgid "Redo %1$d Action"
+msgid_plural "Redo %1$d Actions"
+msgstr[0] "Refazer ação de %1$d"
+msgstr[1] "Refazer ações de %1$d"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3571
+msgid "Add..."
+msgstr "Adicionar..."
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3579 src/slic3r/GUI/GUI_ObjectList.cpp:1501
+#: src/slic3r/GUI/Plater.cpp:3520 src/slic3r/GUI/Plater.cpp:3539
+#: src/slic3r/GUI/Tab.cpp:3286
+msgid "Delete"
+msgstr "Deletar"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3588 src/slic3r/GUI/Plater.cpp:4172
+msgid "Delete all"
+msgstr "Deletar todos"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3597 src/slic3r/GUI/KBShortcutsDialog.cpp:137
+#: src/slic3r/GUI/Plater.cpp:2681
+msgid "Arrange"
+msgstr "Arranjar"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3597 src/slic3r/GUI/KBShortcutsDialog.cpp:138
+msgid "Arrange selection"
+msgstr "Arranjar seleção"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3609
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3618
+msgid "Paste"
+msgstr "Colar"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3630 src/slic3r/GUI/Plater.cpp:3400
+#: src/slic3r/GUI/Plater.cpp:3412 src/slic3r/GUI/Plater.cpp:3526
+msgid "Add instance"
+msgstr "Adicionar instância"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3641 src/slic3r/GUI/Plater.cpp:3528
+msgid "Remove instance"
+msgstr "Remover instância"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3654
+msgid "Split to objects"
+msgstr "Dividir em objetos"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3664 src/slic3r/GUI/GUI_ObjectList.cpp:1340
+msgid "Split to parts"
+msgstr "Dividir em partes"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3677 src/slic3r/GUI/GUI_ObjectList.cpp:2203
+msgid "Height ranges"
+msgstr "Limites de altura"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3728 src/slic3r/GUI/MainFrame.cpp:570
+msgid "Undo"
+msgstr "Desfazer"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3728 src/slic3r/GUI/GLCanvas3D.cpp:3761
+msgid "Click right mouse button to open History"
+msgstr "Clique no botão direito para abrir o Histórico"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3745
+msgid "Next Undo action: %1%"
+msgstr "Próxima ação de desfazer: %1%"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3761 src/slic3r/GUI/MainFrame.cpp:573
+msgid "Redo"
+msgstr "Refazer"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3777
+msgid "Next Redo action: %1%"
+msgstr "Próxima ação de refazer: %1%"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:5555
+msgid "Selection-Add from rectangle"
+msgstr "Seleção-Adicionar do retângulo"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:5574
+msgid "Selection-Remove from rectangle"
+msgstr "Seleção-remover do retângulo"
+
+#: src/slic3r/GUI/GLCanvas3DManager.cpp:273
+#, c-format
+msgid ""
+"PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n"
+"while OpenGL version %s, render %s, vendor %s was detected."
+msgstr ""
+"PrusaSlicer requer drivers capazes de executar OpenGL 2.0, \n"
+"enquanto a versão do OpenGL %s, renderização %s, fornecedor %s foi detectada."
+
+#: src/slic3r/GUI/GLCanvas3DManager.cpp:276
+msgid "You may need to update your graphics card driver."
+msgstr "Você pode ter que atualizar os drivers da sua placa de vídeo."
+
+#: src/slic3r/GUI/GLCanvas3DManager.cpp:279
+msgid ""
+"As a workaround, you may run PrusaSlicer with a software rendered 3D "
+"graphics by running prusa-slicer.exe with the --sw_renderer parameter."
+msgstr ""
+"Como solução alternativa, você pode executar o PrusaSlicer com um software "
+"renderizando gráficos 3D por executar Prusa-slicer.exe com o parâmetro--"
+"sw_renderer."
+
+#: src/slic3r/GUI/GLCanvas3DManager.cpp:281
+msgid "Unsupported OpenGL version"
+msgstr "Versão do OpenGL não suportada"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:40
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:145 src/libslic3r/PrintConfig.cpp:3212
+msgid "Cut"
+msgstr "Cortar"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:150
+msgid "Keep upper part"
+msgstr "Manter parte superior"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:151
+msgid "Keep lower part"
+msgstr "Manter parte inferior"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:152
+msgid "Rotate lower part upwards"
+msgstr "Rotacione as partes inferiores para cima"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:155
+msgid "Perform cut"
+msgstr "Aplicar o corte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:45
+msgid "Place on face"
+msgstr "Colocar em uma face"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:48
+msgid "Move"
+msgstr "Mover"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:177
+msgid "Position (mm)"
+msgstr "Posição (mm)"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:177
+msgid "Displacement (mm)"
+msgstr "Deslocamento (mm)"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:496
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:514
+#: src/libslic3r/PrintConfig.cpp:3261
+msgid "Rotate"
+msgstr "Rotacionar"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:482
+msgid "Rotation (deg)"
+msgstr "Rotacionar (graus)"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:47
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:392
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:497
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:515
+#: src/libslic3r/PrintConfig.cpp:3276
+msgid "Scale"
+msgstr "Escala"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:292
+msgid "Scale (%)"
+msgstr "Escala (%)"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:44
+msgid "Head diameter"
+msgstr "Diâmetro da cabeça"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:45
+msgid "Lock supports under new islands"
+msgstr "Travar suportes debaixo de novas ilhas"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1449
+msgid "Remove selected points"
+msgstr "Remover pontos selecionados"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47
+msgid "Remove all points"
+msgstr "Remover todos os pontos"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1452
+msgid "Apply changes"
+msgstr "Aplicar mudanças"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1453
+msgid "Discard changes"
+msgstr "Descartar mudanças"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
+msgid "Minimal points distance"
+msgstr "Distância mínima entre pontos"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/libslic3r/PrintConfig.cpp:2651
+msgid "Support points density"
+msgstr "Densidade dos pontos de suporte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1455
+msgid "Auto-generate points"
+msgstr "Pontos gerados automaticamente"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
+msgid "Manual editing"
+msgstr "Edição manual"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+msgid "Clipping of view"
+msgstr "Recorte de vista"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
+msgid "Reset direction"
+msgstr "Restabelecer direção"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:531
+msgid "Add support point"
+msgstr "Adicionar ponto de suporte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:719
+msgid "Delete support point"
+msgstr "Deletar ponto de suporte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:920
+msgid "Change point head diameter"
+msgstr "Mudar o diâmetro do ponto da cabeça"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:986
+msgid "Support parameter change"
+msgstr "Mudança de parâmetro de suporte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1094
+msgid "SLA Support Points"
+msgstr "Pontos de suporte SLA"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1115
+msgid "SLA gizmo turned on"
+msgstr "Gizmo de SLA ligado"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1137
+msgid "Do you want to save your manually edited support points?"
+msgstr "Você deseja salvar os pontos manualmente editados?"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1138
+msgid "Save changes?"
+msgstr "Salvar mudanças?"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1150
+msgid "SLA gizmo turned off"
+msgstr "Gizmo de SLA desligado"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1187
+msgid "Move support point"
+msgstr "Mover pontos de suporte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1286
+msgid "Support points edit"
+msgstr "Edição de pontos de suporte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1355
+msgid ""
+"Autogeneration will erase all manually edited points.\n"
+"\n"
+"Are you sure you want to do it?\n"
+msgstr ""
+"Gerar automaticamente irá apagar todos os pontos manualmente editados. Tem "
+"certeza que quer gerar?\n"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1357 src/slic3r/GUI/GUI.cpp:289
+#: src/slic3r/GUI/WipeTowerDialog.cpp:44 src/slic3r/GUI/WipeTowerDialog.cpp:328
+msgid "Warning"
+msgstr "Aviso"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1360
+msgid "Autogenerate support points"
+msgstr "Pontos de suporte gerados automaticamente"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1412
+msgid "SLA gizmo keyboard shortcuts"
+msgstr "Atalhos no teclado para gizmo SLA"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1423
+msgid "Note: some shortcuts work in (non)editing mode only."
+msgstr "Nota: alguns atalhos funcionam somente em modos que não editam."
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1441
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1444
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1445
+msgid "Left click"
+msgstr "Clique esquerdo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1441
+msgid "Add point"
+msgstr "Adicionar ponto"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1442
+msgid "Right click"
+msgstr "Clique direito"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1442
+msgid "Remove point"
+msgstr "Remover ponto"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1443
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1446
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1447
+msgid "Drag"
+msgstr "Arrastar"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1443
+msgid "Move point"
+msgstr "Mover ponto"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1444
+msgid "Add point to selection"
+msgstr "Adicionar ponto à seleção"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1445
+msgid "Remove point from selection"
+msgstr "Remover ponto da seleção"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1446
+msgid "Select by rectangle"
+msgstr "Selecionar por retângulo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1447
+msgid "Deselect by rectangle"
+msgstr "Desselecionar por retângulo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1448
+msgid "Select all points"
+msgstr "Selecionar todos os pontos"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1450
+msgid "Mouse wheel"
+msgstr "Scroll do mouse"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1450
+msgid "Move clipping plane"
+msgstr "Mover plano de recorte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1451
+msgid "Reset clipping plane"
+msgstr "Restabelecer plano de recorte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1454
+msgid "Switch to editing mode"
+msgstr "Alterar para modo de edição"
+
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:569
+msgid "Gizmo-Place on Face"
+msgstr "Gizmo-Colocar em uma face"
+
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:641
+msgid "Gizmo-Move"
+msgstr "Gizmo-Mover"
+
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:646
+msgid "Gizmo-Scale"
+msgstr "Gizmo-Escala"
+
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:651
+msgid "Gizmo-Rotate"
+msgstr "Gizmo-Rotacionar"
+
+#: src/slic3r/GUI/GUI.cpp:141 src/slic3r/GUI/Tab.cpp:3145
+msgid "It's impossible to print multi-part object(s) with SLA technology."
+msgstr ""
+"É impossível imprimir objetos com múltiplas partes com a tecnologia SLA."
+
+#: src/slic3r/GUI/GUI.cpp:142
+msgid "Please check and fix your object list."
+msgstr "Favor verificar e concertar sua lista de objetos."
+
+#: src/slic3r/GUI/GUI.cpp:143 src/slic3r/GUI/Plater.cpp:2246
+#: src/slic3r/GUI/Tab.cpp:3147
+msgid "Attention!"
+msgstr "Atenção!"
+
+#: src/slic3r/GUI/GUI.cpp:283
+msgid "Notice"
+msgstr "Aviso"
+
+#: src/slic3r/GUI/GUI_App.cpp:132
+#, c-format
+msgid ""
+"%s has encountered an error. It was likely caused by running out of memory. "
+"If you are sure you have enough RAM on your system, this may also be a bug "
+"and we would be glad if you reported it.\n"
+"\n"
+"The application will now terminate."
+msgstr ""
+"%s encontrou um erro. Provavelmente foi causado por ficar sem memória. Se "
+"você tem certeza que você tem RAM suficiente em seu sistema, isso também "
+"pode ser um bug e nós estaríamos contentes se você relatou.\n"
+"\n"
+"O aplicativo será encerrado agora."
+
+#: src/slic3r/GUI/GUI_App.cpp:135
+msgid "Fatal error"
+msgstr "Erro fatal"
+
+#: src/slic3r/GUI/GUI_App.cpp:442
+msgid "Changing of an application language"
+msgstr "Alteração de um idioma do aplicativo"
+
+#: src/slic3r/GUI/GUI_App.cpp:450 src/slic3r/GUI/GUI_App.cpp:459
+msgid "Recreating"
+msgstr "Recriando"
+
+#: src/slic3r/GUI/GUI_App.cpp:463
+msgid "Loading of current presets"
+msgstr "Carregando presets"
+
+#: src/slic3r/GUI/GUI_App.cpp:471
+msgid "Loading of a mode view"
+msgstr "Carregamento de um modelo de vista"
+
+#: src/slic3r/GUI/GUI_App.cpp:551
+msgid "Choose one file (3MF/AMF):"
+msgstr "Escolha um arquivo (3MF/AMF):"
+
+#: src/slic3r/GUI/GUI_App.cpp:563
+msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"
+msgstr "Escolha um ou mais arquivos (STL/OBJ/AMF/3MF/PRUSA):"
+
+#: src/slic3r/GUI/GUI_App.cpp:625
+msgid "Select the language"
+msgstr "Selecione a linguagem"
+
+#: src/slic3r/GUI/GUI_App.cpp:625
+msgid "Language"
+msgstr "Linguagem"
+
+#: src/slic3r/GUI/GUI_App.cpp:796
+msgid "&Configuration Snapshots"
+msgstr "&Captura das config."
+
+#: src/slic3r/GUI/GUI_App.cpp:796
+msgid "Inspect / activate configuration snapshots"
+msgstr "Inspecionar / ativar capturas de config."
+
+#: src/slic3r/GUI/GUI_App.cpp:797
+msgid "Take Configuration &Snapshot"
+msgstr "Capturar &config."
+
+#: src/slic3r/GUI/GUI_App.cpp:797
+msgid "Capture a configuration snapshot"
+msgstr "Capturar uma config."
+
+#: src/slic3r/GUI/GUI_App.cpp:800
+msgid "&Preferences"
+msgstr "&Preferências"
+
+#: src/slic3r/GUI/GUI_App.cpp:806
+msgid "Application preferences"
+msgstr "Preferências de aplicação"
+
+#: src/slic3r/GUI/GUI_App.cpp:809 src/slic3r/GUI/wxExtensions.cpp:3043
+msgid "Simple"
+msgstr "Simples"
+
+#: src/slic3r/GUI/GUI_App.cpp:809
+msgid "Simple View Mode"
+msgstr "Modo simples de visualização"
+
+#: src/slic3r/GUI/GUI_App.cpp:810 src/slic3r/GUI/GUI_ObjectList.cpp:97
+#: src/slic3r/GUI/GUI_ObjectList.cpp:620 src/slic3r/GUI/Tab.cpp:1061
+#: src/slic3r/GUI/Tab.cpp:1076 src/slic3r/GUI/Tab.cpp:1174
+#: src/slic3r/GUI/Tab.cpp:1177 src/slic3r/GUI/Tab.cpp:1685
+#: src/slic3r/GUI/Tab.cpp:2169 src/slic3r/GUI/Tab.cpp:3785
+#: src/slic3r/GUI/wxExtensions.cpp:3044 src/libslic3r/PrintConfig.cpp:83
+#: src/libslic3r/PrintConfig.cpp:197 src/libslic3r/PrintConfig.cpp:360
+#: src/libslic3r/PrintConfig.cpp:1013 src/libslic3r/PrintConfig.cpp:2226
+msgid "Advanced"
+msgstr "Avançado"
+
+#: src/slic3r/GUI/GUI_App.cpp:810
+msgid "Advanced View Mode"
+msgstr "Modo avançado de visualização"
+
+#: src/slic3r/GUI/GUI_App.cpp:811 src/slic3r/GUI/wxExtensions.cpp:3045
+msgid "Expert"
+msgstr "Especialista"
+
+#: src/slic3r/GUI/GUI_App.cpp:811
+msgid "Expert View Mode"
+msgstr "Modo especialista de visualização"
+
+#: src/slic3r/GUI/GUI_App.cpp:816
+msgid "Mode"
+msgstr "Modo"
+
+#: src/slic3r/GUI/GUI_App.cpp:816
+#, c-format
+msgid "%s View Mode"
+msgstr "%s Modo de visualização"
+
+#: src/slic3r/GUI/GUI_App.cpp:818
+msgid "Change Application &Language"
+msgstr "Mudar &idioma"
+
+#: src/slic3r/GUI/GUI_App.cpp:820
+msgid "Flash printer &firmware"
+msgstr "Atualizar firmware &da impressora"
+
+#: src/slic3r/GUI/GUI_App.cpp:820
+msgid "Upload a firmware image into an Arduino based printer"
+msgstr "Atualizar o firmware para uma impressora baseada em Arduino"
+
+#: src/slic3r/GUI/GUI_App.cpp:832
+msgid "Taking configuration snapshot"
+msgstr "Capturando a config."
+
+#: src/slic3r/GUI/GUI_App.cpp:832
+msgid "Snapshot name"
+msgstr "Nome da captura"
+
+#: src/slic3r/GUI/GUI_App.cpp:875
+msgid ""
+"Switching the language will trigger application restart.\n"
+"You will lose content of the plater."
+msgstr ""
+"Alterar a linguagem fará com que o aplicativo reinicie.\n"
+"Você irá perder conteúdo no prato."
+
+#: src/slic3r/GUI/GUI_App.cpp:877
+msgid "Do you want to proceed?"
+msgstr "Você quer prosseguir?"
+
+#: src/slic3r/GUI/GUI_App.cpp:878
+msgid "Language selection"
+msgstr "Seleção de linguagem"
+
+#: src/slic3r/GUI/GUI_App.cpp:901
+msgid "&Configuration"
+msgstr "&Configuração"
+
+#: src/slic3r/GUI/GUI_App.cpp:923
+msgid "The presets on the following tabs were modified"
+msgstr "Os presets seguintes foram modificados"
+
+#: src/slic3r/GUI/GUI_App.cpp:923 src/slic3r/GUI/Tab.cpp:3133
+msgid "Discard changes and continue anyway?"
+msgstr "Descartar mudanças e continuar assim mesmo?"
+
+#: src/slic3r/GUI/GUI_App.cpp:926
+msgid "Unsaved Presets"
+msgstr "config. não salvas"
+
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+msgid "Start at height"
+msgstr "Começar na altura"
+
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+msgid "Stop at height"
+msgstr "Parar na altura"
+
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1033
+#: src/libslic3r/PrintConfig.cpp:66
+msgid "Layer height"
+msgstr "Altura da camada"
+
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:153
+msgid "Remove layer range"
+msgstr "Remover limite da camada"
+
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:162
+msgid "Add layer range"
+msgstr "Adicionar limite da camada"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:88
+#: src/slic3r/GUI/GUI_ObjectList.cpp:611 src/libslic3r/PrintConfig.cpp:67
+#: src/libslic3r/PrintConfig.cpp:160 src/libslic3r/PrintConfig.cpp:392
+#: src/libslic3r/PrintConfig.cpp:453 src/libslic3r/PrintConfig.cpp:461
+#: src/libslic3r/PrintConfig.cpp:867 src/libslic3r/PrintConfig.cpp:1051
+#: src/libslic3r/PrintConfig.cpp:1354 src/libslic3r/PrintConfig.cpp:1420
+#: src/libslic3r/PrintConfig.cpp:1601 src/libslic3r/PrintConfig.cpp:2037
+#: src/libslic3r/PrintConfig.cpp:2095
+msgid "Layers and Perimeters"
+msgstr "Camadas e perímetros"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:89
+#: src/slic3r/GUI/GUI_ObjectList.cpp:612 src/slic3r/GUI/Plater.cpp:497
+#: src/slic3r/GUI/Tab.cpp:1065 src/slic3r/GUI/Tab.cpp:1066
+#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:400
+#: src/libslic3r/PrintConfig.cpp:420 src/libslic3r/PrintConfig.cpp:754
+#: src/libslic3r/PrintConfig.cpp:768 src/libslic3r/PrintConfig.cpp:805
+#: src/libslic3r/PrintConfig.cpp:958 src/libslic3r/PrintConfig.cpp:968
+#: src/libslic3r/PrintConfig.cpp:986 src/libslic3r/PrintConfig.cpp:1004
+#: src/libslic3r/PrintConfig.cpp:1023 src/libslic3r/PrintConfig.cpp:1708
+#: src/libslic3r/PrintConfig.cpp:1725
+msgid "Infill"
+msgstr "Preenchimento"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:90
+#: src/slic3r/GUI/GUI_ObjectList.cpp:613 src/slic3r/GUI/GUI_Preview.cpp:244
+#: src/slic3r/GUI/Tab.cpp:1094 src/slic3r/GUI/Tab.cpp:1095
+#: src/libslic3r/PrintConfig.cpp:344 src/libslic3r/PrintConfig.cpp:1481
+#: src/libslic3r/PrintConfig.cpp:1830 src/libslic3r/PrintConfig.cpp:1836
+#: src/libslic3r/PrintConfig.cpp:1844 src/libslic3r/PrintConfig.cpp:1856
+#: src/libslic3r/PrintConfig.cpp:1866 src/libslic3r/PrintConfig.cpp:1874
+#: src/libslic3r/PrintConfig.cpp:1889 src/libslic3r/PrintConfig.cpp:1910
+#: src/libslic3r/PrintConfig.cpp:1921 src/libslic3r/PrintConfig.cpp:1937
+#: src/libslic3r/PrintConfig.cpp:1946 src/libslic3r/PrintConfig.cpp:1955
+#: src/libslic3r/PrintConfig.cpp:1966 src/libslic3r/PrintConfig.cpp:1980
+#: src/libslic3r/PrintConfig.cpp:1988 src/libslic3r/PrintConfig.cpp:1989
+#: src/libslic3r/PrintConfig.cpp:1998 src/libslic3r/PrintConfig.cpp:2006
+#: src/libslic3r/PrintConfig.cpp:2020 src/libslic3r/GCode/PreviewData.cpp:156
+msgid "Support material"
+msgstr "Material de suporte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:94
+#: src/slic3r/GUI/GUI_ObjectList.cpp:617 src/libslic3r/PrintConfig.cpp:2202
+#: src/libslic3r/PrintConfig.cpp:2210
+msgid "Wipe options"
+msgstr "Opções de limpeza"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:45
+msgid "Pad and Support"
+msgstr "Bloco e suporte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:51
+msgid "Add part"
+msgstr "Adicionar parte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:52
+msgid "Add modifier"
+msgstr "Adicionar modificador"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:53
+msgid "Add support enforcer"
+msgstr "Adicionar reforço de suporte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:54
+msgid "Add support blocker"
+msgstr "Adicionar bloqueador de suporte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:91 src/slic3r/GUI/GUI_ObjectList.cpp:614
+#: src/slic3r/GUI/GUI_Preview.cpp:223 src/slic3r/GUI/Tab.cpp:1119
+#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:441
+#: src/libslic3r/PrintConfig.cpp:896 src/libslic3r/PrintConfig.cpp:1024
+#: src/libslic3r/PrintConfig.cpp:1410 src/libslic3r/PrintConfig.cpp:1647
+#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1747
+#: src/libslic3r/PrintConfig.cpp:2080
+msgid "Speed"
+msgstr "Velocidade"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:92 src/slic3r/GUI/GUI_ObjectList.cpp:615
+#: src/slic3r/GUI/Tab.cpp:1154 src/slic3r/GUI/Tab.cpp:2043
+#: src/libslic3r/PrintConfig.cpp:471 src/libslic3r/PrintConfig.cpp:979
+#: src/libslic3r/PrintConfig.cpp:1389 src/libslic3r/PrintConfig.cpp:1717
+#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1928
+msgid "Extruders"
+msgstr "Exrtrusoras"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:93 src/slic3r/GUI/GUI_ObjectList.cpp:616
+#: src/libslic3r/PrintConfig.cpp:431 src/libslic3r/PrintConfig.cpp:538
+#: src/libslic3r/PrintConfig.cpp:855 src/libslic3r/PrintConfig.cpp:987
+#: src/libslic3r/PrintConfig.cpp:1398 src/libslic3r/PrintConfig.cpp:1737
+#: src/libslic3r/PrintConfig.cpp:1911 src/libslic3r/PrintConfig.cpp:2069
+msgid "Extrusion Width"
+msgstr "Espessura da extrusão"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:622
+#: src/slic3r/GUI/Plater.cpp:465 src/slic3r/GUI/Tab.cpp:3737
+#: src/slic3r/GUI/Tab.cpp:3738 src/libslic3r/PrintConfig.cpp:2501
+#: src/libslic3r/PrintConfig.cpp:2508 src/libslic3r/PrintConfig.cpp:2517
+#: src/libslic3r/PrintConfig.cpp:2526 src/libslic3r/PrintConfig.cpp:2536
+#: src/libslic3r/PrintConfig.cpp:2562 src/libslic3r/PrintConfig.cpp:2569
+#: src/libslic3r/PrintConfig.cpp:2580 src/libslic3r/PrintConfig.cpp:2590
+#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2612
+#: src/libslic3r/PrintConfig.cpp:2622 src/libslic3r/PrintConfig.cpp:2631
+#: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2652
+#: src/libslic3r/PrintConfig.cpp:2660
+msgid "Supports"
+msgstr "Suportes"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:623
+#: src/slic3r/GUI/Plater.cpp:603 src/slic3r/GUI/Tab.cpp:3769
+#: src/slic3r/GUI/Tab.cpp:3770 src/libslic3r/PrintConfig.cpp:2668
+#: src/libslic3r/PrintConfig.cpp:2675 src/libslic3r/PrintConfig.cpp:2689
+#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2721
+#: src/libslic3r/PrintConfig.cpp:2732 src/libslic3r/PrintConfig.cpp:2739
+#: src/libslic3r/PrintConfig.cpp:2750 src/libslic3r/PrintConfig.cpp:2759
+#: src/libslic3r/PrintConfig.cpp:2768
+msgid "Pad"
+msgstr "Bloco"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:260
+msgid "Name"
+msgstr "Nome"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:271 src/slic3r/GUI/GUI_ObjectList.cpp:373
+msgid "Editing"
+msgstr "Edição"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:318
+#, c-format
+msgid "Auto-repaired (%d errors):\n"
+msgstr "Auto reparando (%d erros):\n"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:325
+msgid "degenerate facets"
+msgstr "facetas degeneradas"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:326
+msgid "edges fixed"
+msgstr "arestas fixadas"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:327
+msgid "facets removed"
+msgstr "facetas removidas"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:328
+msgid "facets added"
+msgstr "facetas adicionadas"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:329
+msgid "facets reversed"
+msgstr "facetas reversidas"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:330
+msgid "backwards edges"
+msgstr "arestas viradas para trás"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:338
+msgid "Right button click the icon to fix STL through Netfabb"
+msgstr ""
+"Clique com o botão direito no ícone para arrumar STL através do Netfabb"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:375
+msgid "Right button click the icon to change the object settings"
+msgstr "Clique com o botão direito no ícone para mudar as config. do objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:377
+msgid "Click the icon to change the object settings"
+msgstr "Clique no ícone para mudar as config. do objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:381
+msgid "Right button click the icon to change the object printable property"
+msgstr ""
+"Clique com o botão direito no ícone para mudar a propriedade de impressão do "
+"objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:383
+msgid "Click the icon to change the object printable property"
+msgstr "Clique no ícone para mudar a propriedade de impressão do objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:428 src/slic3r/GUI/GUI_ObjectList.cpp:449
+#: src/slic3r/GUI/GUI_ObjectList.cpp:461 src/slic3r/GUI/GUI_ObjectList.cpp:3642
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3652
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3684 src/slic3r/GUI/wxExtensions.cpp:603
+#: src/slic3r/GUI/wxExtensions.cpp:660 src/slic3r/GUI/wxExtensions.cpp:685
+#: src/slic3r/GUI/wxExtensions.cpp:893
+msgid "default"
+msgstr "padrão"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:433 src/slic3r/GUI/Tab.cpp:1649
+#: src/libslic3r/PrintConfig.cpp:470
+msgid "Extruder"
+msgstr "Extrusora"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:546
+msgid "Rename Object"
+msgstr "Renomear objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:546
+msgid "Rename Sub-object"
+msgstr "Renomear sub-objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:987 src/slic3r/GUI/GUI_ObjectList.cpp:3464
+msgid "Instances to Separated Objects"
+msgstr "Instâncias para separar objetos"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1005
+msgid "Volumes in Object reordered"
+msgstr "Volume reorganizados no objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1005
+msgid "Object reordered"
+msgstr "Objeto reorganizado"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1060
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1376
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1382
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1623
+#, c-format
+msgid "Quick Add Settings (%s)"
+msgstr "Adicionar config. rapidamente (%s)"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1137
+msgid "Select showing settings"
+msgstr "Selecionar config. mostradas"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1186
+msgid "Add Settings for Layers"
+msgstr "Adicionar config. para camadas"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1187
+msgid "Add Settings for Sub-object"
+msgstr "Adicionar config. para sub-objetos"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1188
+msgid "Add Settings for Object"
+msgstr "Adicionar config. para objetos"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1249
+msgid "Add Settings Bundle for Height range"
+msgstr "Adicionar pacote de config. para intervalo de altura"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1250
+msgid "Add Settings Bundle for Sub-object"
+msgstr "Adicionar pacote de config. para subobjeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1251
+msgid "Add Settings Bundle for Object"
+msgstr "Adicionar pacote de config. para objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1290
+msgid "Load"
+msgstr "Carregar"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1295
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1320
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1323
+msgid "Box"
+msgstr "Caixa"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1295
+msgid "Cylinder"
+msgstr "Cilindro"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1295
+msgid "Sphere"
+msgstr "Esfera"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1295
+msgid "Slab"
+msgstr "Placa"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1347
+msgid "Height range Modifier"
+msgstr "Modificador de intervalo de altura"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1355
+msgid "Add settings"
+msgstr "Adicionar config."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1422
+msgid "Change type"
+msgstr "Mudar o tipo"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1429
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1577
+msgid "Set as a Separated Object"
+msgstr "Configurar como objeto separado"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1435
+msgid "Printable"
+msgstr "Imprimível"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1442
+msgid "Rename"
+msgstr "Renomear"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1453
+msgid "Fix through the Netfabb"
+msgstr "Arrumar através do Netfabb"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1463 src/slic3r/GUI/Plater.cpp:3552
+msgid "Export as STL"
+msgstr "Exportar como STL"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1470
+msgid "Change extruder"
+msgstr "Mudar extrusora"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1489 src/libslic3r/PrintConfig.cpp:309
+msgid "Default"
+msgstr "Padrão"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1495
+msgid "Select new extruder for the object/part"
+msgstr "Selecionar nova extrusora para objeto/parte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1507
+msgid "Scale to print volume"
+msgstr "Escalar para volume de impressão"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1507
+msgid "Scale the selected object to fit the print volume"
+msgstr "Escale o objeto selecionado para se adequar ao volume de impressão"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1577
+msgid "Set as a Separated Objects"
+msgstr "Definir como objetos separados"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1652
+msgid "Load Part"
+msgstr "Carregar parte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1687
+msgid "Error!"
+msgstr "Erro!"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1732
+msgid "Add Generic Subobject"
+msgstr "Adicionar sub-objeto genérico"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1739
+msgid "Generic"
+msgstr "Genérico"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1843
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1945
+msgid "Last instance of an object cannot be deleted."
+msgstr "A última instância de um objeto não pode ser excluída."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1855
+msgid "Delete Settings"
+msgstr "Deletar config."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1879
+msgid "Delete All Instances from Object"
+msgstr "Excluir todas as instâncias do objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1895
+msgid "Delete Height Range"
+msgstr "Excluir limite de altura"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1926
+msgid "From Object List You can't delete the last solid part from object."
+msgstr ""
+"Na lista de objetos não é possível excluir a última parte sólida do objeto."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1930
+msgid "Delete Subobject"
+msgstr "Deletar sub-objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1949
+msgid "Delete Instance"
+msgstr "Deletar instância"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1973 src/slic3r/GUI/Plater.cpp:2838
+msgid ""
+"The selected object couldn't be split because it contains only one part."
+msgstr "O seguinte objeto não pode ser dividido pois contém uma parte."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1977
+msgid "Split to Parts"
+msgstr "Dividir em partes"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2025
+msgid "Add Layers"
+msgstr "Adicionar camadas"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2150
+msgid "Group manipulation"
+msgstr "Manipulação de grupos"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2162
+msgid "Object manipulation"
+msgstr "Manipulação de objetos"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2175
+msgid "Object Settings to modify"
+msgstr "config. do objeto para modificar"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2179
+msgid "Part Settings to modify"
+msgstr "config. da parte para modificar"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2184
+msgid "Layer range Settings to modify"
+msgstr "config. de intervalo de camada para modificar"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2190
+msgid "Part manipulation"
+msgstr "Manipulação da parte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2196
+msgid "Instance manipulation"
+msgstr "Manipulação da instância"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2203
+msgid "Settings for height range"
+msgstr "config. para intervalo de altura"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2388
+msgid "Delete Selected Item"
+msgstr "Excluir item selecionado"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2525
+msgid "Delete Selected"
+msgstr "Excluir seleção"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2584
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2613
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2631
+msgid "Add Height Range"
+msgstr "Adicionar intervalo de altura"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2690
+msgid "Edit Height Range"
+msgstr "Editar intervalo de altura"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2974
+msgid "Selection-Remove from list"
+msgstr "Seleção-Remover da lista"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2982
+msgid "Selection-Add from list"
+msgstr "Seleção-Adicionar da lista"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3100
+msgid "Object or Instance"
+msgstr "Objeto ou instância"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3101
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3234
+msgid "Part"
+msgstr "Parte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3101
+msgid "Layer"
+msgstr "Camada"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3103
+msgid "Unsupported selection"
+msgstr "Seleção não suportada"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3104
+#, c-format
+msgid "You started your selection with %s Item."
+msgstr "Você iniciou sua seleção com o item de %s."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3105
+#, c-format
+msgid "In this mode you can select only other %s Items%s"
+msgstr "Neste modo, você pode selecionar apenas outros %s itens%s"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3108
+msgid "of a current Object"
+msgstr "de um objeto atual"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3113
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3188 src/slic3r/GUI/Plater.cpp:126
+msgid "Info"
+msgstr "Informação"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3229
+msgid "You can't change a type of the last solid part of the object."
+msgstr "Não é possível alterar um tipo da última parte sólida do objeto."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3234
+msgid "Modifier"
+msgstr "Modificador"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3234
+msgid "Support Enforcer"
+msgstr "Reforçador de suporte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3234
+msgid "Support Blocker"
+msgstr "Bloqueador de suporte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3236
+msgid "Type:"
+msgstr "Tipo:"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3236
+msgid "Select type of part"
+msgstr "Selecione o tipo de parte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3241
+msgid "Change Part Type"
+msgstr "Mudar o tipo da parte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3486
+msgid "Enter new name"
+msgstr "Insira o novo nome"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3486
+msgid "Renaming"
+msgstr "Renomeando"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3502
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3608 src/slic3r/GUI/Tab.cpp:3618
+#: src/slic3r/GUI/Tab.cpp:3622
+msgid "The supplied name is not valid;"
+msgstr "O nome inserido não é valido;"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3503
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3609 src/slic3r/GUI/Tab.cpp:3619
+msgid "the following characters are not allowed:"
+msgstr "os seguintes caracteres não são permitidos:"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3632
+msgid "Set extruder for selected items"
+msgstr "Definir extrusora para itens selecionados"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3633
+msgid "Select extruder number for selected objects and/or parts"
+msgstr "Selecione o número da extrusora para objetos e/ou peças selecionados"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3646
+msgid "Select extruder number:"
+msgstr "Selecione o número da extrusora:"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3647
+msgid "This extruder will be set for selected items"
+msgstr "Esta extrusora será ajustada para artigos selecionados"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3759 src/slic3r/GUI/Selection.cpp:1473
+msgid "Set Printable"
+msgstr "Definir como imprimível"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3759 src/slic3r/GUI/Selection.cpp:1473
+msgid "Set Unprintable"
+msgstr "Definir não imprimível"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:62
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:105
+msgid "World coordinates"
+msgstr "Coordenadas mundiais"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:63
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:106
+msgid "Local coordinates"
+msgstr "Coordenadas locais"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:82
+msgid "Select coordinate space, in which the transformation will be performed."
+msgstr ""
+"Selecione o espaço de coordenadas, no qual a transformação será executada."
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:125
+msgid "Object Manipulation"
+msgstr "Manipulação de objeto"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:178
+msgid "Object name"
+msgstr "Nome do objeto"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:214
+#, c-format
+msgid "Toggle %c axis mirroring"
+msgstr "Ativar espelhamento do eixo %c"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:247
+msgid "Set Mirror"
+msgstr "Definir espelhamento"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:287
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:292
+msgid "Reset scale"
+msgstr "Restabelecer escala"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305
+msgid "Reset rotation"
+msgstr "Restabelecer rotação"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:330
+msgid "Reset Rotation"
+msgstr "Restabelecer Rotação"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:342
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357
+msgid "Drop to bed"
+msgstr "Soltar na mesa"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:390
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:454
+msgid "Position"
+msgstr "Posição"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:391
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:455
+msgid "Rotation"
+msgstr "Rotação"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:456
+msgid "Scale factors"
+msgstr "Fatores de escala"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:513
+msgid "Translate"
+msgstr "Tradução"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:565
+msgid ""
+"You cannot use non-uniform scaling mode for multiple objects/parts selection"
+msgstr ""
+"Não é possível usar o modo de dimensionamento não uniforme para vários "
+"objetos/seleção de peças"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:735
+msgid "Set Position"
+msgstr "Definir posição"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:766
+msgid "Set Orientation"
+msgstr "Definir orientação"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:831
+msgid "Set Scale"
+msgstr "Definir escala"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:915
+msgid ""
+"The currently manipulated object is tilted (rotation angles are not "
+"multiples of 90°).\n"
+"Non-uniform scaling of tilted objects is only possible in the World "
+"coordinate system,\n"
+"once the rotation is embedded into the object coordinates."
+msgstr ""
+"O objeto atualmente manipulado é inclinado (os ângulos de rotação não são "
+"múltiplos de 90 °).\n"
+"O dimensionamento não uniforme de objetos inclinados só é possível no "
+"sistema de coordenadas do mundo,\n"
+"uma vez que a rotação é incorporada nas coordenadas do objeto."
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:918
+msgid ""
+"This operation is irreversible.\n"
+"Do you want to proceed?"
+msgstr ""
+"Esta operação é irreversível.\n"
+"Você quer prosseguir?"
+
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:59
+msgid "Additional Settings"
+msgstr "config. Adicionais"
+
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:95
+msgid "Remove parameter"
+msgstr "Remover parâmetro"
+
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:101
+#, c-format
+msgid "Delete Option %s"
+msgstr "Excluir opção %s"
+
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:146
+#, c-format
+msgid "Change Option %s"
+msgstr "Alterar opção %s"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:217
+msgid "View"
+msgstr "Vista"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:220 src/slic3r/GUI/GUI_Preview.cpp:569
+#: src/libslic3r/GCode/PreviewData.cpp:378
+msgid "Feature type"
+msgstr "Tipo de recurso"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:221 src/libslic3r/PrintConfig.cpp:483
+msgid "Height"
+msgstr "Altura"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:222 src/libslic3r/PrintConfig.cpp:2188
+msgid "Width"
+msgstr "Espessura"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:224
+msgid "Volumetric flow rate"
+msgstr "Taxa de fluxo volumétrico"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/GUI_Preview.cpp:333
+#: src/slic3r/GUI/GUI_Preview.cpp:515 src/slic3r/GUI/GUI_Preview.cpp:568
+#: src/slic3r/GUI/GUI_Preview.cpp:774 src/libslic3r/GCode/PreviewData.cpp:388
+msgid "Tool"
+msgstr "Ferramenta"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:226 src/slic3r/GUI/GUI_Preview.cpp:566
+#: src/libslic3r/GCode/PreviewData.cpp:390
+msgid "Color Print"
+msgstr "Impressão colorida"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:229
+msgid "Show"
+msgstr "Mostrar"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:232 src/slic3r/GUI/GUI_Preview.cpp:233
+msgid "Feature types"
+msgstr "Tipos de características"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:235 src/libslic3r/GCode/PreviewData.cpp:147
+msgid "Perimeter"
+msgstr "Perímetro"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:236 src/libslic3r/GCode/PreviewData.cpp:148
+msgid "External perimeter"
+msgstr "Perímetro externo"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:237 src/libslic3r/GCode/PreviewData.cpp:149
+msgid "Overhang perimeter"
+msgstr "Perímetro de angulação"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/GCode/PreviewData.cpp:150
+msgid "Internal infill"
+msgstr "Preenchimento interno"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/PrintConfig.cpp:1736
+#: src/libslic3r/PrintConfig.cpp:1746 src/libslic3r/GCode/PreviewData.cpp:151
+msgid "Solid infill"
+msgstr "Preenchimento sólido"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:240 src/libslic3r/PrintConfig.cpp:2068
+#: src/libslic3r/PrintConfig.cpp:2079 src/libslic3r/GCode/PreviewData.cpp:152
+msgid "Top solid infill"
+msgstr "Preenchimento do sólido do topo"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/GCode/PreviewData.cpp:153
+msgid "Bridge infill"
+msgstr "Preenchimento de pontes"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:242 src/libslic3r/PrintConfig.cpp:895
+#: src/libslic3r/GCode/PreviewData.cpp:154
+msgid "Gap fill"
+msgstr "Preenchimento de vão"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:243 src/slic3r/GUI/Tab.cpp:1085
+#: src/libslic3r/GCode/PreviewData.cpp:155
+msgid "Skirt"
+msgstr "Saia"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:245 src/libslic3r/PrintConfig.cpp:1954
+#: src/libslic3r/GCode/PreviewData.cpp:157
+msgid "Support material interface"
+msgstr "Interface do material de suporte"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:246 src/slic3r/GUI/Tab.cpp:1165
+#: src/libslic3r/GCode/PreviewData.cpp:158
+msgid "Wipe tower"
+msgstr "Torre de limpeza"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:251 src/libslic3r/PrintConfig.cpp:2102
+msgid "Travel"
+msgstr "Viagem"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:252
+msgid "Retractions"
+msgstr "Retrações"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:253
+msgid "Unretractions"
+msgstr "Retorno da retração"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:254
+msgid "Shells"
+msgstr "Paredes"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:255
+msgid "Legend"
+msgstr "Legenda"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:14 src/slic3r/GUI/MainFrame.cpp:683
+msgid "Keyboard Shortcuts"
+msgstr "Atalhos do teclado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:107
+msgid "Open project STL/OBJ/AMF/3MF with config, delete bed"
+msgstr "Abra o projeto STL/OBJ/AMF/3MF com config., excluir mesa"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:108
+msgid "Import STL/OBJ/AMF/3MF without config, keep bed"
+msgstr "Importação STL/OBJ/AMF/3MF sem config., manter a mesa"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:109
+msgid "Load Config from .ini/amf/3mf/gcode"
+msgstr "Carregar config. de um .ini/AMF/3mf/Gcode"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 src/slic3r/GUI/Plater.cpp:837
+#: src/slic3r/GUI/Plater.cpp:4822 src/libslic3r/PrintConfig.cpp:3163
+msgid "Export G-code"
+msgstr "Exportar G-code"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:111
+msgid "Save project (3MF)"
+msgstr "Salvar projeto (3MF)"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
+msgid "Load Config from .ini/amf/3mf/gcode and merge"
+msgstr "Carregar config. de um. ini/AMF/3mf/Gcode e mesclar"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
+msgid "(Re)slice"
+msgstr "(Re)fatiar"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:116
+msgid "Select Plater Tab"
+msgstr "Selecione a guia de prato"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:118
+msgid "Select Print Settings Tab"
+msgstr "Selecione a guia config. de impressão"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+msgid "Select Filament Settings Tab"
+msgstr "Selecione a guia config. de filamento"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:120
+msgid "Select Printer Settings Tab"
+msgstr "Selecione a guia config. da impressora"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:121
+msgid "Switch to 3D"
+msgstr "Mude para 3D"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:122
+msgid "Switch to Preview"
+msgstr "Mudar para pré-visualização"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Preferences.cpp:10
+msgid "Preferences"
+msgstr "Preferências"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/PrintHostDialogs.cpp:136
+msgid "Print host upload queue"
+msgstr "Fila de carregamento do host de impressão"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:125
+msgid "Camera view"
+msgstr "Vista da câmera"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+msgid "Add Instance of the selected object"
+msgstr "Adicionar instância do objeto selecionado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
+msgid "Remove Instance of the selected object"
+msgstr "Remover instância do objeto selecionado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
+msgid "Show keyboard shortcuts list"
+msgstr "Mostrar lista dos atalhos no teclado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:129
+msgid "Press to select multiple object or move multiple object with mouse"
+msgstr ""
+"Aperte para selecionar múltiplos objetos ou mover múltiplos objetos com o "
+"mouse"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:131
+msgid "Main Shortcuts"
+msgstr "Atalhos principais"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:139
+msgid "Select All objects"
+msgstr "Selecionar todos os objetos"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
+msgid "Delete selected"
+msgstr "Deletar seleção"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
+msgid "Delete All"
+msgstr "Deletar todos"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:142
+msgid "Copy to clipboard"
+msgstr "Copiar para a área de transferência"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:143
+msgid "Paste from clipboard"
+msgstr "Colar da área de transferência"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:144
+msgid "Gizmo move"
+msgstr "Gizmo-Mover"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:145
+msgid "Gizmo scale"
+msgstr "Gizmo-Escala"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:146
+msgid "Gizmo rotate"
+msgstr "Gizmo-Rotacionar"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:147
+msgid "Gizmo cut"
+msgstr "Gizmo-Cortar"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:148
+msgid "Gizmo Place face on bed"
+msgstr "Colocar face do Gizmo na mesa"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:149
+msgid "Gizmo SLA support points"
+msgstr "Pontos de suporte do Gizmo SLA"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:150
+#, c-format
+msgid ""
+"Press to activate selection rectangle\n"
+"or to snap by 5% in Gizmo scale\n"
+"or to snap by 1mm in Gizmo move"
+msgstr ""
+"Pressione para ativar o retângulo de seleção\n"
+"ou para encaixar em 5% i na escala Gizmo\n"
+"ou para encaixar por 1mm em Gizmo mover"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:151
+msgid ""
+"Press to scale selection to fit print volume\n"
+"in Gizmo scale"
+msgstr ""
+"Pressione para dimensionar a seleção ao volume de impressão\n"
+"na escala Gizmo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:152
+msgid ""
+"Press to activate deselection rectangle\n"
+"or to scale or rotate selected objects\n"
+"around their own center"
+msgstr ""
+"Pressione para ativar o retângulo de deseleção\n"
+"ou para dimensionar ou girar objetos selecionados\n"
+"em torno de seu próprio centro"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:153
+msgid "Press to activate one direction scaling in Gizmo scale"
+msgstr "Pressione para ativar um dimensionamento de direção na escala Gizmo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
+msgid "Change camera type (perspective, orthographic)"
+msgstr "Alterar tipo de câmera (perspectiva, ortográfica)"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:155
+msgid "Zoom to Bed"
+msgstr "Ampliar para a mesa"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:156
+msgid "Zoom to all objects in scene, if none selected"
+msgstr "Ampliar para todos os objetos na cena, se nenhum selecionado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
+msgid "Zoom to selected object"
+msgstr "Ampliar para o objeto selecionado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
+msgid "Zoom in"
+msgstr "Ampliar"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+msgid "Zoom out"
+msgstr "Dimiuir"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+msgid "Unselect gizmo / Clear selection"
+msgstr "Desmarcar Gizmo/limpar seleção"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
+msgid "Plater Shortcuts"
+msgstr "Atalhos do prato"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:193
+msgid "Arrow Up"
+msgstr "Seta para cima"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:183
+msgid "Upper Layer"
+msgstr "Camada superior"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:194
+msgid "Arrow Down"
+msgstr "Seta para baixo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:184
+msgid "Lower Layer"
+msgstr "Camada inferior"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:185
+msgid "Show/Hide (L)egend"
+msgstr "Mostrar/ocultar (L) egenda"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:187
+msgid "Preview Shortcuts"
+msgstr "Atalhos de visualização"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:193
+msgid "Move current slider thumb Up"
+msgstr "Mover a barra de rolagem para cima"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:194
+msgid "Move current slider thumb Down"
+msgstr "Mover a barra de rolagem para baixo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
+msgid "Arrow Left"
+msgstr "Seta esquerda"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
+msgid "Set upper thumb to current slider thumb"
+msgstr "Definir o polegar superior para o polegar deslizante atual"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
+msgid "Arrow Right"
+msgstr "Seta direita"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
+msgid "Set lower thumb to current slider thumb"
+msgstr "Definir o polegar inferior para o polegar deslizante atual"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
+msgid "Add color change marker for current layer"
+msgstr "Adicionar mudança de cor para a camada atual"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
+msgid "Delete color change marker for current layer"
+msgstr "Excluir mudança de cor para a camada atual"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:200
+msgid "Layers Slider Shortcuts"
+msgstr "Atalhos da barra de rolagem de camadas"
+
+#: src/slic3r/GUI/MainFrame.cpp:64
+msgid ""
+" - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/"
+"releases"
+msgstr ""
+" - Lembre-se de verificar por atualizações em http://github.com/prusa3d/"
+"PrusaSlicer/releases"
+
+#: src/slic3r/GUI/MainFrame.cpp:159
+msgid "based on Slic3r"
+msgstr "baseado no Slic3r"
+
+#: src/slic3r/GUI/MainFrame.cpp:189
+msgid "Plater"
+msgstr "Prato"
+
+#: src/slic3r/GUI/MainFrame.cpp:400
+msgid "&New Project"
+msgstr "&Novo projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:400
+msgid "Start a new project"
+msgstr "Começar um novo projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:403
+msgid "&Open Project"
+msgstr "&Abrir projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:403
+msgid "Open a project file"
+msgstr "Abrir novo projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:408
+msgid "Recent projects"
+msgstr "Projetos recentes"
+
+#: src/slic3r/GUI/MainFrame.cpp:417
+msgid "The selected project is no more available"
+msgstr "O projeto selecionado não está mais disponível"
+
+#: src/slic3r/GUI/MainFrame.cpp:417 src/slic3r/GUI/MainFrame.cpp:755
+#: src/slic3r/GUI/PrintHostDialogs.cpp:231
+msgid "Error"
+msgstr "Erro"
+
+#: src/slic3r/GUI/MainFrame.cpp:441
+msgid "&Save Project"
+msgstr "&Salvar projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:441
+msgid "Save current project file"
+msgstr "Salvar arquivo"
+
+#: src/slic3r/GUI/MainFrame.cpp:445 src/slic3r/GUI/MainFrame.cpp:447
+msgid "Save Project &as"
+msgstr "Salvar projeto &como"
+
+#: src/slic3r/GUI/MainFrame.cpp:445 src/slic3r/GUI/MainFrame.cpp:447
+msgid "Save current project file as"
+msgstr "Salvar arquivo atual como"
+
+#: src/slic3r/GUI/MainFrame.cpp:455
+msgid "Import STL/OBJ/AM&F/3MF"
+msgstr "Import STL/OBJ/AM&F/3MF"
+
+#: src/slic3r/GUI/MainFrame.cpp:455
+msgid "Load a model"
+msgstr "Carregar um modelo"
+
+#: src/slic3r/GUI/MainFrame.cpp:459
+msgid "Import &Config"
+msgstr "Importar &config."
+
+#: src/slic3r/GUI/MainFrame.cpp:459
+msgid "Load exported configuration file"
+msgstr "Carregar config. de arquivo exportado"
+
+#: src/slic3r/GUI/MainFrame.cpp:461
+msgid "Import Config from &project"
+msgstr "Importar Config do &projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:461
+msgid "Load configuration from project file"
+msgstr "Carregar config. de arquivo de projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:464
+msgid "Import Config &Bundle"
+msgstr "Importar coleção &de config."
+
+#: src/slic3r/GUI/MainFrame.cpp:464
+msgid "Load presets from a bundle"
+msgstr "Carregar predefinições de um pacote"
+
+#: src/slic3r/GUI/MainFrame.cpp:466
+msgid "&Import"
+msgstr "&Importar"
+
+#: src/slic3r/GUI/MainFrame.cpp:469 src/slic3r/GUI/MainFrame.cpp:719
+msgid "Export &G-code"
+msgstr "Exportar &G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:469
+msgid "Export current plate as G-code"
+msgstr "Exporte o prato atual como o G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:473 src/slic3r/GUI/MainFrame.cpp:720
+msgid "S&end G-code"
+msgstr "E&nviar G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:473
+msgid "Send to print current plate as G-code"
+msgstr "Enviar para imprimir prato atual como G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:478
+msgid "Export plate as &STL"
+msgstr "Exportar prato como &STL"
+
+#: src/slic3r/GUI/MainFrame.cpp:478
+msgid "Export current plate as STL"
+msgstr "Exporte o prato atual como STL"
+
+#: src/slic3r/GUI/MainFrame.cpp:481
+msgid "Export plate as STL &including supports"
+msgstr "Exportar prato como STL &incluindo suportes"
+
+#: src/slic3r/GUI/MainFrame.cpp:481
+msgid "Export current plate as STL including supports"
+msgstr "Exporte o prato atual como o STL que inclui suportes"
+
+#: src/slic3r/GUI/MainFrame.cpp:484
+msgid "Export plate as &AMF"
+msgstr "Exportar prato como &AMF"
+
+#: src/slic3r/GUI/MainFrame.cpp:484
+msgid "Export current plate as AMF"
+msgstr "Exporte o prato atual como o AMF"
+
+#: src/slic3r/GUI/MainFrame.cpp:488
+msgid "Export &toolpaths as OBJ"
+msgstr "Exportar &percurso da ferramenta como OBJ"
+
+#: src/slic3r/GUI/MainFrame.cpp:488
+msgid "Export toolpaths as OBJ"
+msgstr "Exportar percursos como OBJ"
+
+#: src/slic3r/GUI/MainFrame.cpp:492
+msgid "Export &Config"
+msgstr "Exportar &config."
+
+#: src/slic3r/GUI/MainFrame.cpp:492
+msgid "Export current configuration to file"
+msgstr "Exporte a config. atual para o arquivo"
+
+#: src/slic3r/GUI/MainFrame.cpp:494
+msgid "Export Config &Bundle"
+msgstr "Exportar coleção &de config."
+
+#: src/slic3r/GUI/MainFrame.cpp:494
+msgid "Export all presets to file"
+msgstr "Exporte todas as predefinições para o arquivo"
+
+#: src/slic3r/GUI/MainFrame.cpp:496
+msgid "&Export"
+msgstr "&Exportar"
+
+#: src/slic3r/GUI/MainFrame.cpp:502
+msgid "Quick Slice"
+msgstr "Fatiamento rápido"
+
+#: src/slic3r/GUI/MainFrame.cpp:502
+msgid "Slice a file into a G-code"
+msgstr "Fatiar um arquivo em um G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:508
+msgid "Quick Slice and Save As"
+msgstr "Salvamento rápido e salvar como"
+
+#: src/slic3r/GUI/MainFrame.cpp:508
+msgid "Slice a file into a G-code, save as"
+msgstr "Fatiar um arquivo em um G-code, salvar como"
+
+#: src/slic3r/GUI/MainFrame.cpp:514
+msgid "Repeat Last Quick Slice"
+msgstr "Repetir Último Fatiamento Rápido"
+
+#: src/slic3r/GUI/MainFrame.cpp:514
+msgid "Repeat last quick slice"
+msgstr "Repetir último fatiamento rápido"
+
+#: src/slic3r/GUI/MainFrame.cpp:522
+msgid "(Re)Slice No&w"
+msgstr "(Re)Fatiar ago&ra"
+
+#: src/slic3r/GUI/MainFrame.cpp:522
+msgid "Start new slicing process"
+msgstr "Começar novo processo de fatiamento"
+
+#: src/slic3r/GUI/MainFrame.cpp:526
+msgid "&Repair STL file"
+msgstr "&Reparar arquivo STL"
+
+#: src/slic3r/GUI/MainFrame.cpp:526
+msgid "Automatically repair an STL file"
+msgstr "Reparar automaticamente um arquivo STL"
+
+#: src/slic3r/GUI/MainFrame.cpp:529
+msgid "&Quit"
+msgstr "&Sair"
+
+#: src/slic3r/GUI/MainFrame.cpp:529
+#, c-format
+msgid "Quit %s"
+msgstr "Sair %s"
+
+#: src/slic3r/GUI/MainFrame.cpp:554
+msgid "&Select all"
+msgstr "&Selecionar todos"
+
+#: src/slic3r/GUI/MainFrame.cpp:555
+msgid "Selects all objects"
+msgstr "Selecionar todos os objetos"
+
+#: src/slic3r/GUI/MainFrame.cpp:557
+msgid "D&eselect all"
+msgstr "D&eselecionar todos"
+
+#: src/slic3r/GUI/MainFrame.cpp:558
+msgid "Deselects all objects"
+msgstr "Deselecionar todos os objetos"
+
+#: src/slic3r/GUI/MainFrame.cpp:561
+msgid "&Delete selected"
+msgstr "&Excluir seleção"
+
+#: src/slic3r/GUI/MainFrame.cpp:562
+msgid "Deletes the current selection"
+msgstr "Excluir a seleção atual"
+
+#: src/slic3r/GUI/MainFrame.cpp:564
+msgid "Delete &all"
+msgstr "Excluir &todos"
+
+#: src/slic3r/GUI/MainFrame.cpp:565
+msgid "Deletes all objects"
+msgstr "Excluir todos os objetos"
+
+#: src/slic3r/GUI/MainFrame.cpp:569
+msgid "&Undo"
+msgstr "&Desfazer"
+
+#: src/slic3r/GUI/MainFrame.cpp:572
+msgid "&Redo"
+msgstr "&Refazer"
+
+#: src/slic3r/GUI/MainFrame.cpp:577
+msgid "&Copy"
+msgstr "&Copiar"
+
+#: src/slic3r/GUI/MainFrame.cpp:578
+msgid "Copy selection to clipboard"
+msgstr "Copiar seleção para a área de transferência"
+
+#: src/slic3r/GUI/MainFrame.cpp:580
+msgid "&Paste"
+msgstr "&Colar"
+
+#: src/slic3r/GUI/MainFrame.cpp:581
+msgid "Paste clipboard"
+msgstr "Colar área de transferência"
+
+#: src/slic3r/GUI/MainFrame.cpp:590
+msgid "&Plater Tab"
+msgstr "&Prato"
+
+#: src/slic3r/GUI/MainFrame.cpp:590
+msgid "Show the plater"
+msgstr "Mostrar o prato"
+
+#: src/slic3r/GUI/MainFrame.cpp:597
+msgid "P&rint Settings Tab"
+msgstr "C&onfig. de impressão"
+
+#: src/slic3r/GUI/MainFrame.cpp:597
+msgid "Show the print settings"
+msgstr "Mostrar as config. de impressão"
+
+#: src/slic3r/GUI/MainFrame.cpp:599 src/slic3r/GUI/MainFrame.cpp:722
+msgid "&Filament Settings Tab"
+msgstr "&config. de filamentos"
+
+#: src/slic3r/GUI/MainFrame.cpp:599
+msgid "Show the filament settings"
+msgstr "Mostrar as config. de filamento"
+
+#: src/slic3r/GUI/MainFrame.cpp:602
+msgid "Print&er Settings Tab"
+msgstr "A&ba de config. da impressora"
+
+#: src/slic3r/GUI/MainFrame.cpp:602
+msgid "Show the printer settings"
+msgstr "Mostrar as config. da impressora"
+
+#: src/slic3r/GUI/MainFrame.cpp:606
+msgid "3&D"
+msgstr "3&D"
+
+#: src/slic3r/GUI/MainFrame.cpp:606
+msgid "Show the 3D editing view"
+msgstr "Mostrar a vista de edição 3D"
+
+#: src/slic3r/GUI/MainFrame.cpp:609
+msgid "Pre&view"
+msgstr "Pre&visualização"
+
+#: src/slic3r/GUI/MainFrame.cpp:609
+msgid "Show the 3D slices preview"
+msgstr "Mostrar a pré-visualização do fatiamento 3D"
+
+#: src/slic3r/GUI/MainFrame.cpp:628
+msgid "Print &Host Upload Queue"
+msgstr "Imprimir &Fila de upload do Host"
+
+#: src/slic3r/GUI/MainFrame.cpp:628
+msgid "Display the Print Host Upload Queue window"
+msgstr "Exibir a janela fila de upload do host de impressão"
+
+#: src/slic3r/GUI/MainFrame.cpp:637
+msgid "Iso"
+msgstr "Isométrico"
+
+#: src/slic3r/GUI/MainFrame.cpp:637
+msgid "Iso View"
+msgstr "Vista isométrica"
+
+#. TRN To be shown in the main menu View->Top
+#. TRN To be shown in Print Settings "Top solid layers"
+#: src/slic3r/GUI/MainFrame.cpp:641 src/libslic3r/PrintConfig.cpp:2094
+msgid "Top"
+msgstr "Topo"
+
+#: src/slic3r/GUI/MainFrame.cpp:641
+msgid "Top View"
+msgstr "Vista do topo"
+
+#. TRN To be shown in the main menu View->Bottom
+#. TRN To be shown in Print Settings "Bottom solid layers"
+#: src/slic3r/GUI/MainFrame.cpp:644 src/libslic3r/PrintConfig.cpp:159
+msgid "Bottom"
+msgstr "Base"
+
+#: src/slic3r/GUI/MainFrame.cpp:644
+msgid "Bottom View"
+msgstr "Vista da base"
+
+#: src/slic3r/GUI/MainFrame.cpp:646
+msgid "Front"
+msgstr "Frente"
+
+#: src/slic3r/GUI/MainFrame.cpp:646
+msgid "Front View"
+msgstr "Vista da frente"
+
+#: src/slic3r/GUI/MainFrame.cpp:648 src/libslic3r/PrintConfig.cpp:1611
+msgid "Rear"
+msgstr "Traseira"
+
+#: src/slic3r/GUI/MainFrame.cpp:648
+msgid "Rear View"
+msgstr "Vista traseira"
+
+#: src/slic3r/GUI/MainFrame.cpp:650
+msgid "Left"
+msgstr "Esquerda"
+
+#: src/slic3r/GUI/MainFrame.cpp:650
+msgid "Left View"
+msgstr "Vista esquerda"
+
+#: src/slic3r/GUI/MainFrame.cpp:652
+msgid "Right"
+msgstr "Direita"
+
+#: src/slic3r/GUI/MainFrame.cpp:652
+msgid "Right View"
+msgstr "Vista direita"
+
+#: src/slic3r/GUI/MainFrame.cpp:659
+msgid "Prusa 3D &Drivers"
+msgstr "Drivers 3D &Prusa"
+
+#: src/slic3r/GUI/MainFrame.cpp:659
+msgid "Open the Prusa3D drivers download page in your browser"
+msgstr "Abrir a página para baixar os drivers da Prusa3D no seu navegador"
+
+#: src/slic3r/GUI/MainFrame.cpp:661
+msgid "Software &Releases"
+msgstr "Lançamentos de &software"
+
+#: src/slic3r/GUI/MainFrame.cpp:661
+msgid "Open the software releases page in your browser"
+msgstr "Abrir a página de lançamentos de software no seu navegador"
+
+#: src/slic3r/GUI/MainFrame.cpp:667
+#, c-format
+msgid "%s &Website"
+msgstr "%s &Site"
+
+#: src/slic3r/GUI/MainFrame.cpp:668
+#, c-format
+msgid "Open the %s website in your browser"
+msgstr "Abra o site do %s no seu navegador"
+
+#: src/slic3r/GUI/MainFrame.cpp:674
+msgid "System &Info"
+msgstr "Informação &do sistema"
+
+#: src/slic3r/GUI/MainFrame.cpp:674
+msgid "Show system information"
+msgstr "Mostrar a informação do sistema"
+
+#: src/slic3r/GUI/MainFrame.cpp:676
+msgid "Show &Configuration Folder"
+msgstr "Mostrar &pasta de config."
+
+#: src/slic3r/GUI/MainFrame.cpp:676
+msgid "Show user configuration folder (datadir)"
+msgstr "Mostrar pasta de config. do usuário (datadir)"
+
+#: src/slic3r/GUI/MainFrame.cpp:678
+msgid "Report an I&ssue"
+msgstr "Reportar um p&roblema"
+
+#: src/slic3r/GUI/MainFrame.cpp:678
+#, c-format
+msgid "Report an issue on %s"
+msgstr "Relatar um problema em %s"
+
+#: src/slic3r/GUI/MainFrame.cpp:680
+#, c-format
+msgid "&About %s"
+msgstr "&Sobre %s"
+
+#: src/slic3r/GUI/MainFrame.cpp:680
+msgid "Show about dialog"
+msgstr "Mostrar diálogo sobre"
+
+#: src/slic3r/GUI/MainFrame.cpp:683
+msgid "Show the list of the keyboard shortcuts"
+msgstr "Mostrar lista dos atalhos no teclado"
+
+#: src/slic3r/GUI/MainFrame.cpp:691
+msgid "&File"
+msgstr "&Arquivo"
+
+#: src/slic3r/GUI/MainFrame.cpp:692
+msgid "&Edit"
+msgstr "&Editar"
+
+#: src/slic3r/GUI/MainFrame.cpp:693
+msgid "&Window"
+msgstr "&Janela"
+
+#: src/slic3r/GUI/MainFrame.cpp:694
+msgid "&View"
+msgstr "&Vista"
+
+#: src/slic3r/GUI/MainFrame.cpp:697
+msgid "&Help"
+msgstr "&Ajuda"
+
+#: src/slic3r/GUI/MainFrame.cpp:719
+msgid "E&xport"
+msgstr "E&xportar"
+
+#: src/slic3r/GUI/MainFrame.cpp:720
+msgid "S&end to print"
+msgstr "E&nviar para impressora"
+
+#: src/slic3r/GUI/MainFrame.cpp:722
+msgid "Mate&rial Settings Tab"
+msgstr "A&ba de config. de material"
+
+#: src/slic3r/GUI/MainFrame.cpp:743
+msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):"
+msgstr "Escolha um arquivo para fatiar (STL/OBJ/AMF/3MF/PRUSA):"
+
+#: src/slic3r/GUI/MainFrame.cpp:754
+msgid "No previously sliced file."
+msgstr "Sem arquivo fatiado anteriormente."
+
+#: src/slic3r/GUI/MainFrame.cpp:760
+msgid "Previously sliced file ("
+msgstr "Arquivo fatiado anteriormente ("
+
+#: src/slic3r/GUI/MainFrame.cpp:760
+msgid ") not found."
+msgstr ") não encontrado."
+
+#: src/slic3r/GUI/MainFrame.cpp:761
+msgid "File Not Found"
+msgstr "Arquivo não encontrado"
+
+#: src/slic3r/GUI/MainFrame.cpp:796
+#, c-format
+msgid "Save %s file as:"
+msgstr "Salve o arquivo %s como:"
+
+#: src/slic3r/GUI/MainFrame.cpp:796
+msgid "SVG"
+msgstr "SVG"
+
+#: src/slic3r/GUI/MainFrame.cpp:796
+msgid "G-code"
+msgstr "G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:808
+msgid "Save zip file as:"
+msgstr "Salvar arquivo compactado(zip) como:"
+
+#: src/slic3r/GUI/MainFrame.cpp:817 src/slic3r/GUI/Plater.cpp:2981
+#: src/slic3r/GUI/Plater.cpp:4533 src/slic3r/GUI/Tab.cpp:1194
+#: src/slic3r/GUI/Tab.cpp:3786
+msgid "Slicing"
+msgstr "Fatiamento"
+
+#. TRN "Processing input_file_basename"
+#: src/slic3r/GUI/MainFrame.cpp:819
+#, c-format
+msgid "Processing %s"
+msgstr "Processando %s"
+
+#: src/slic3r/GUI/MainFrame.cpp:842
+msgid " was successfully sliced."
+msgstr " foi fatiado com sucesso."
+
+#: src/slic3r/GUI/MainFrame.cpp:844
+msgid "Slicing Done!"
+msgstr "Fatiamento completo!"
+
+#: src/slic3r/GUI/MainFrame.cpp:859
+msgid "Select the STL file to repair:"
+msgstr "Selecione o arquivo STL para corrigir:"
+
+#: src/slic3r/GUI/MainFrame.cpp:869
+msgid "Save OBJ file (less prone to coordinate errors than STL) as:"
+msgstr ""
+"Salvar arquivo OBJ (menos propenso a erros de coordenada que STL) como:"
+
+#: src/slic3r/GUI/MainFrame.cpp:881
+msgid "Your file was repaired."
+msgstr "Seu arquivo foi corrigido."
+
+#: src/slic3r/GUI/MainFrame.cpp:881 src/libslic3r/PrintConfig.cpp:3257
+msgid "Repair"
+msgstr "Corrigir"
+
+#: src/slic3r/GUI/MainFrame.cpp:895
+msgid "Save configuration as:"
+msgstr "Salvar config. como:"
+
+#: src/slic3r/GUI/MainFrame.cpp:914 src/slic3r/GUI/MainFrame.cpp:976
+msgid "Select configuration to load:"
+msgstr "Selecionar config. para carregar:"
+
+#: src/slic3r/GUI/MainFrame.cpp:950
+msgid "Save presets bundle as:"
+msgstr "Salvar pacote de predefinições como:"
+
+#: src/slic3r/GUI/MainFrame.cpp:997
+#, c-format
+msgid "%d presets successfully imported."
+msgstr "%d predefinições importadas com êxito."
+
+#: src/slic3r/GUI/MsgDialog.cpp:73
+#, c-format
+msgid "%s error"
+msgstr "%s erro"
+
+#: src/slic3r/GUI/MsgDialog.cpp:74
+#, c-format
+msgid "%s has encountered an error"
+msgstr "%s encontrou um erro"
+
+#: src/slic3r/GUI/OptionsGroup.cpp:249
+msgctxt "Layers"
+msgid "Top"
+msgstr "Topo"
+
+#: src/slic3r/GUI/OptionsGroup.cpp:249
+msgctxt "Layers"
+msgid "Bottom"
+msgstr "Base"
+
+#: src/slic3r/GUI/Plater.cpp:146
+msgid "Volume"
+msgstr "Volume"
+
+#: src/slic3r/GUI/Plater.cpp:147
+msgid "Facets"
+msgstr "Facetas"
+
+#: src/slic3r/GUI/Plater.cpp:148
+msgid "Materials"
+msgstr "Materiais"
+
+#: src/slic3r/GUI/Plater.cpp:151
+msgid "Manifold"
+msgstr "Múltiplo"
+
+#: src/slic3r/GUI/Plater.cpp:201
+msgid "Sliced Info"
+msgstr "Informações fatiadas"
+
+#: src/slic3r/GUI/Plater.cpp:220 src/slic3r/GUI/Plater.cpp:1150
+msgid "Used Filament (m)"
+msgstr "Filamento utilizado (m)"
+
+#: src/slic3r/GUI/Plater.cpp:221
+msgid "Used Filament (mm³)"
+msgstr "Filamento utilizado (mm³)"
+
+#: src/slic3r/GUI/Plater.cpp:222
+msgid "Used Filament (g)"
+msgstr "Filamento utilizado (g)"
+
+#: src/slic3r/GUI/Plater.cpp:223
+msgid "Used Material (unit)"
+msgstr "Material utilizado (unidade)"
+
+#: src/slic3r/GUI/Plater.cpp:224 src/slic3r/GUI/Plater.cpp:1165
+#: src/libslic3r/PrintConfig.cpp:742
+msgid "Cost"
+msgstr "Custo"
+
+#: src/slic3r/GUI/Plater.cpp:225 src/slic3r/GUI/Plater.cpp:1137
+#: src/slic3r/GUI/Plater.cpp:1179
+msgid "Estimated printing time"
+msgstr "Tempo estimado de impressão"
+
+#: src/slic3r/GUI/Plater.cpp:226
+msgid "Number of tool changes"
+msgstr "Número de mudanças de ferramenta"
+
+#: src/slic3r/GUI/Plater.cpp:316
+msgid "Click to edit preset"
+msgstr "Clique para editar a predefinição"
+
+#: src/slic3r/GUI/Plater.cpp:468
+msgid "Select what kind of support do you need"
+msgstr "Selecione o tipo de suporte que você precisa"
+
+#: src/slic3r/GUI/Plater.cpp:470 src/libslic3r/PrintConfig.cpp:1865
+#: src/libslic3r/PrintConfig.cpp:2561
+msgid "Support on build plate only"
+msgstr "Suportes somente na mesa de impressão"
+
+#: src/slic3r/GUI/Plater.cpp:471 src/slic3r/GUI/Plater.cpp:592
+msgid "For support enforcers only"
+msgstr "Para apenas reforçadores de suporte"
+
+#: src/slic3r/GUI/Plater.cpp:472
+msgid "Everywhere"
+msgstr "Em toda parte"
+
+#: src/slic3r/GUI/Plater.cpp:504 src/slic3r/GUI/Tab.cpp:1091
+msgid "Brim"
+msgstr "Aba"
+
+#: src/slic3r/GUI/Plater.cpp:506
+msgid ""
+"This flag enables the brim that will be printed around each object on the "
+"first layer."
+msgstr ""
+"Este sinalizador permite que a aba que será impressa em torno de cada objeto "
+"na primeira camada."
+
+#: src/slic3r/GUI/Plater.cpp:514
+msgid "Purging volumes"
+msgstr "Volumes de purga"
+
+#: src/slic3r/GUI/Plater.cpp:606
+msgid "Select what kind of pad do you need"
+msgstr "Selecione o tipo de bloco que você precisa"
+
+#: src/slic3r/GUI/Plater.cpp:608
+msgid "Below object"
+msgstr "Abaixo do objeto"
+
+#: src/slic3r/GUI/Plater.cpp:609
+msgid "Around object"
+msgstr "Em torno do objeto"
+
+#: src/slic3r/GUI/Plater.cpp:781
+msgid "Print settings"
+msgstr "Config. de impressão"
+
+#: src/slic3r/GUI/Plater.cpp:782 src/slic3r/GUI/Tab.cpp:1640
+#: src/slic3r/GUI/Tab.cpp:1641
+msgid "Filament"
+msgstr "Filamento"
+
+#: src/slic3r/GUI/Plater.cpp:783
+msgid "SLA print settings"
+msgstr "Config. de impressão de SLA"
+
+#: src/slic3r/GUI/Plater.cpp:784 src/slic3r/GUI/Preset.cpp:1314
+msgid "SLA material"
+msgstr "Material de SLA"
+
+#: src/slic3r/GUI/Plater.cpp:785
+msgid "Printer"
+msgstr "Impressora"
+
+#: src/slic3r/GUI/Plater.cpp:835 src/slic3r/GUI/Plater.cpp:4823
+msgid "Send to printer"
+msgstr "Enviar para a impressora"
+
+#: src/slic3r/GUI/Plater.cpp:838 src/slic3r/GUI/Plater.cpp:2981
+#: src/slic3r/GUI/Plater.cpp:4536
+msgid "Slice now"
+msgstr "Fatiar agora"
+
+#: src/slic3r/GUI/Plater.cpp:978
+msgid "Hold Shift to Slice & Export G-code"
+msgstr "Hold Shift to Slice & Export G-code"
+
+#: src/slic3r/GUI/Plater.cpp:1083
+#, c-format
+msgid "%d (%d shells)"
+msgstr "%d (%d paredes)"
+
+#: src/slic3r/GUI/Plater.cpp:1088
+#, c-format
+msgid "Auto-repaired (%d errors)"
+msgstr "Auto reparando (%d erros):"
+
+#: src/slic3r/GUI/Plater.cpp:1091
+#, c-format
+msgid ""
+"%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d "
+"facets reversed, %d backwards edges"
+msgstr ""
+"%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d "
+"facets reversed, %d backwards edges"
+
+#: src/slic3r/GUI/Plater.cpp:1101
+msgid "Yes"
+msgstr "Sim"
+
+#: src/slic3r/GUI/Plater.cpp:1124
+msgid "Used Material (ml)"
+msgstr "Material usado (ml)"
+
+#: src/slic3r/GUI/Plater.cpp:1127
+msgid "object(s)"
+msgstr "objeto(s)"
+
+#: src/slic3r/GUI/Plater.cpp:1127
+msgid "supports and pad"
+msgstr "suportes e bloco"
+
+#: src/slic3r/GUI/Plater.cpp:1152 src/slic3r/GUI/Plater.cpp:1167
+msgid "objects"
+msgstr "objetos"
+
+#: src/slic3r/GUI/Plater.cpp:1152 src/slic3r/GUI/Plater.cpp:1167
+msgid "wipe tower"
+msgstr "torre de limpeza"
+
+#: src/slic3r/GUI/Plater.cpp:1182
+msgid "normal mode"
+msgstr "modo normal"
+
+#: src/slic3r/GUI/Plater.cpp:1186 src/slic3r/GUI/Plater.cpp:1195
+#: src/libslic3r/PrintConfig.cpp:565
+msgid "Color"
+msgstr "Cor"
+
+#: src/slic3r/GUI/Plater.cpp:1191
+msgid "stealth mode"
+msgstr "modo silencioso"
+
+#: src/slic3r/GUI/Plater.cpp:1286
+msgid "Load File"
+msgstr "Carregar arquivo"
+
+#: src/slic3r/GUI/Plater.cpp:1290
+msgid "Load Files"
+msgstr "Carregar arquivos"
+
+#: src/slic3r/GUI/Plater.cpp:1519
+msgid "ERROR: not enough resources to execute a new job."
+msgstr "ERRO: não há recursos suficientes para executar um novo trabalho."
+
+#: src/slic3r/GUI/Plater.cpp:2089
+msgid "New Project"
+msgstr "Novo projeto"
+
+#: src/slic3r/GUI/Plater.cpp:2206
+msgid "Loading"
+msgstr "Carregando"
+
+#: src/slic3r/GUI/Plater.cpp:2216
+#, c-format
+msgid "Processing input file %s\n"
+msgstr "Processando o arquivo de entrada %s\n"
+
+#: src/slic3r/GUI/Plater.cpp:2244
+msgid ""
+"You can't load SLA project if there is at least one multi-part object on the "
+"bed"
+msgstr ""
+"Não é possível carregar o projeto de SLA se houver pelo menos um objeto de "
+"várias partes na mesa"
+
+#: src/slic3r/GUI/Plater.cpp:2245 src/slic3r/GUI/Tab.cpp:3146
+msgid "Please check your object list before preset changing."
+msgstr "Verifique a lista de objetos antes de alterar a predefinição."
+
+#: src/slic3r/GUI/Plater.cpp:2288
+msgid ""
+"This file contains several objects positioned at multiple heights. Instead "
+"of considering them as multiple objects, should I consider\n"
+"this file as a single object having multiple parts?\n"
+msgstr ""
+"Este arquivo contém vários objetos posicionados em várias alturas. Em vez de "
+"considerá-los como múltiplos objetos, devo considerar\n"
+"Este arquivo como um único objeto com várias partes?\n"
+
+#: src/slic3r/GUI/Plater.cpp:2291 src/slic3r/GUI/Plater.cpp:2343
+msgid "Multi-part object detected"
+msgstr "Objeto de várias partes detectado"
+
+#: src/slic3r/GUI/Plater.cpp:2298
+msgid ""
+"This file cannot be loaded in a simple mode. Do you want to switch to an "
+"advanced mode?\n"
+msgstr ""
+"Este arquivo não pode ser carregado em um modo simples. Deseja mudar para um "
+"modo avançado?\n"
+
+#: src/slic3r/GUI/Plater.cpp:2299
+msgid "Detected advanced data"
+msgstr "Dados avançados detectados"
+
+#: src/slic3r/GUI/Plater.cpp:2320
+#, c-format
+msgid ""
+"You can't to add the object(s) from %s because of one or some of them "
+"is(are) multi-part"
+msgstr ""
+"Você não pode adicionar o objeto (s) %s por causa de um ou alguns deles é "
+"(são) de várias partes"
+
+#: src/slic3r/GUI/Plater.cpp:2340
+msgid ""
+"Multiple objects were loaded for a multi-material printer.\n"
+"Instead of considering them as multiple objects, should I consider\n"
+"these files to represent a single object having multiple parts?\n"
+msgstr ""
+"Vários objetos foram carregados para uma impressora de vários materiais.\n"
+"Em vez de considerá-los como múltiplos objetos, devo considerar\n"
+"esses arquivos para representar um único objeto com várias partes?\n"
+
+#: src/slic3r/GUI/Plater.cpp:2356
+msgid "Loaded"
+msgstr "Carregado"
+
+#: src/slic3r/GUI/Plater.cpp:2458
+msgid ""
+"Your object appears to be too large, so it was automatically scaled down to "
+"fit your print bed."
+msgstr ""
+"Seu objeto parece ser muito grande, por isso foi automaticamente "
+"dimensionado para baixo para caber sua mesa de impressão."
+
+#: src/slic3r/GUI/Plater.cpp:2459
+msgid "Object too large?"
+msgstr "Objeto muito grande?"
+
+#: src/slic3r/GUI/Plater.cpp:2517
+msgid "Export STL file:"
+msgstr "Exportar arquivo STL:"
+
+#: src/slic3r/GUI/Plater.cpp:2524
+msgid "Export AMF file:"
+msgstr "Exportar arquivo AMF:"
+
+#: src/slic3r/GUI/Plater.cpp:2530
+msgid "Save file as:"
+msgstr "Salvar arquivo como:"
+
+#: src/slic3r/GUI/Plater.cpp:2536
+msgid "Export OBJ file:"
+msgstr "Exportar arquivo OBJ:"
+
+#: src/slic3r/GUI/Plater.cpp:2638
+msgid "Delete Object"
+msgstr "Excluir objeto"
+
+#: src/slic3r/GUI/Plater.cpp:2649
+msgid "Reset Project"
+msgstr "Redefinir projeto"
+
+#: src/slic3r/GUI/Plater.cpp:2688
+msgid "Optimize Rotation"
+msgstr "Otimize a rotação"
+
+#: src/slic3r/GUI/Plater.cpp:2734
+msgid "Arranging"
+msgstr "Organizar"
+
+#: src/slic3r/GUI/Plater.cpp:2757
+msgid "Could not arrange model objects! Some geometries may be invalid."
+msgstr ""
+"Não foi possível organizar objetos de modelo! Algumas geometrias podem ser "
+"inválidas."
+
+#: src/slic3r/GUI/Plater.cpp:2763
+msgid "Arranging canceled."
+msgstr "Arranjo cancelado."
+
+#: src/slic3r/GUI/Plater.cpp:2764
+msgid "Arranging done."
+msgstr "Arranjo feito."
+
+#: src/slic3r/GUI/Plater.cpp:2780
+msgid "Searching for optimal orientation"
+msgstr "Procurando orientação ideal"
+
+#: src/slic3r/GUI/Plater.cpp:2813
+msgid "Orientation search canceled."
+msgstr "Pesquisa de orientação cancelada."
+
+#: src/slic3r/GUI/Plater.cpp:2814
+msgid "Orientation found."
+msgstr "Orientação encontrada."
+
+#: src/slic3r/GUI/Plater.cpp:2830
+msgid ""
+"The selected object can't be split because it contains more than one volume/"
+"material."
+msgstr ""
+"O objeto selecionado não pode ser dividido porque contém mais de um volume/"
+"material."
+
+#: src/slic3r/GUI/Plater.cpp:2841
+msgid "Split to Objects"
+msgstr "Dividir em objetos"
+
+#: src/slic3r/GUI/Plater.cpp:2966
+msgid "Invalid data"
+msgstr "Dados inválidos"
+
+#: src/slic3r/GUI/Plater.cpp:2975
+msgid "Ready to slice"
+msgstr "Pronto para fatiar"
+
+#: src/slic3r/GUI/Plater.cpp:3013 src/slic3r/GUI/PrintHostDialogs.cpp:232
+msgid "Cancelling"
+msgstr "Cancelar"
+
+#: src/slic3r/GUI/Plater.cpp:3030
+msgid "Another export job is currently running."
+msgstr "Outro trabalho de exportação está em execução no momento."
+
+#: src/slic3r/GUI/Plater.cpp:3084 src/slic3r/GUI/Plater.cpp:3549
+msgid "Reload from Disk"
+msgstr "Recarregar a partir do disco"
+
+#: src/slic3r/GUI/Plater.cpp:3120
+msgid "Fix Throught NetFabb"
+msgstr "Arrumar através do  NetFabb"
+
+#: src/slic3r/GUI/Plater.cpp:3307
+msgid "Export failed"
+msgstr "Falha na exportação"
+
+#: src/slic3r/GUI/Plater.cpp:3312 src/slic3r/GUI/PrintHostDialogs.cpp:233
+msgid "Cancelled"
+msgstr "Cancelado"
+
+#: src/slic3r/GUI/Plater.cpp:3520 src/slic3r/GUI/Plater.cpp:3539
+msgid "Remove the selected object"
+msgstr "Remover o objeto selecionado"
+
+#: src/slic3r/GUI/Plater.cpp:3526
+msgid "Add one more instance of the selected object"
+msgstr "Adicionar mais uma instância do objeto selecionado"
+
+#: src/slic3r/GUI/Plater.cpp:3528
+msgid "Remove one instance of the selected object"
+msgstr "Remover uma instância do objeto selecionado"
+
+#: src/slic3r/GUI/Plater.cpp:3530
+msgid "Set number of instances"
+msgstr "Definir o número de instâncias"
+
+#: src/slic3r/GUI/Plater.cpp:3530
+msgid "Change the number of instances of the selected object"
+msgstr "Alterar o número de instâncias do objeto selecionado"
+
+#: src/slic3r/GUI/Plater.cpp:3549
+msgid "Reload the selected file from Disk"
+msgstr "Recarregar o arquivo selecionado a partir do disco"
+
+#: src/slic3r/GUI/Plater.cpp:3552
+msgid "Export the selected object as STL file"
+msgstr "Exportar o objeto selecionado como arquivo STL"
+
+#: src/slic3r/GUI/Plater.cpp:3577
+msgid "Along X axis"
+msgstr "Ao longo do eixo X"
+
+#: src/slic3r/GUI/Plater.cpp:3577
+msgid "Mirror the selected object along the X axis"
+msgstr "Espelhar o objeto selecionado ao longo do eixo X"
+
+#: src/slic3r/GUI/Plater.cpp:3579
+msgid "Along Y axis"
+msgstr "Ao longo do eixo Y"
+
+#: src/slic3r/GUI/Plater.cpp:3579
+msgid "Mirror the selected object along the Y axis"
+msgstr "Espelhar o objeto selecionado ao longo do eixo Y"
+
+#: src/slic3r/GUI/Plater.cpp:3581
+msgid "Along Z axis"
+msgstr "Ao longo do eixo Z"
+
+#: src/slic3r/GUI/Plater.cpp:3581
+msgid "Mirror the selected object along the Z axis"
+msgstr "Espelhar o objeto selecionado ao longo do eixo Z"
+
+#: src/slic3r/GUI/Plater.cpp:3584
+msgid "Mirror"
+msgstr "Espelhar"
+
+#: src/slic3r/GUI/Plater.cpp:3584
+msgid "Mirror the selected object"
+msgstr "Espelhar o objeto selecionado"
+
+#: src/slic3r/GUI/Plater.cpp:3596
+msgid "To objects"
+msgstr "Para objetos"
+
+#: src/slic3r/GUI/Plater.cpp:3596 src/slic3r/GUI/Plater.cpp:3616
+msgid "Split the selected object into individual objects"
+msgstr "Dividir o objeto selecionado em objetos individuais"
+
+#: src/slic3r/GUI/Plater.cpp:3598
+msgid "To parts"
+msgstr "Para peças"
+
+#: src/slic3r/GUI/Plater.cpp:3598 src/slic3r/GUI/Plater.cpp:3630
+msgid "Split the selected object into individual sub-parts"
+msgstr "Dividir o objeto selecionado em subpartes individuais"
+
+#: src/slic3r/GUI/Plater.cpp:3601 src/slic3r/GUI/Plater.cpp:3616
+#: src/slic3r/GUI/Plater.cpp:3630 src/libslic3r/PrintConfig.cpp:3281
+msgid "Split"
+msgstr "Dividir"
+
+#: src/slic3r/GUI/Plater.cpp:3601
+msgid "Split the selected object"
+msgstr "Dividir o objeto selecionado"
+
+#: src/slic3r/GUI/Plater.cpp:3622
+msgid "Optimize orientation"
+msgstr "Otimize a orientação"
+
+#: src/slic3r/GUI/Plater.cpp:3622
+msgid "Optimize the rotation of the object for better print results."
+msgstr ""
+"Otimize a rotação do objeto para obter melhores resultados de impressão."
+
+#: src/slic3r/GUI/Plater.cpp:3662
+msgid "3D editor view"
+msgstr "vista do editor 3D"
+
+#: src/slic3r/GUI/Plater.cpp:3670 src/slic3r/GUI/Tab.cpp:2590
+msgid "Preview"
+msgstr "Visualização"
+
+#: src/slic3r/GUI/Plater.cpp:3907
+msgid ""
+"%1% printer was active at the time the target Undo / Redo snapshot was "
+"taken. Switching to %1% printer requires reloading of %1% presets."
+msgstr ""
+"a impressora %1% estava ativa no momento em que a captura de desfazer/"
+"refazer de destino foi tirado. Mudar para %1% impressora requer recarga de "
+"%1% predefinições."
+
+#: src/slic3r/GUI/Plater.cpp:4081
+msgid "Load Project"
+msgstr "Carregar projeto"
+
+#: src/slic3r/GUI/Plater.cpp:4109
+msgid "Import Object"
+msgstr "Importar objeto"
+
+#: src/slic3r/GUI/Plater.cpp:4113
+msgid "Import Objects"
+msgstr "Importar objetos"
+
+#: src/slic3r/GUI/Plater.cpp:4172
+msgid "All objects will be removed, continue ?"
+msgstr "Todos os objetos serão removidos, continuar?"
+
+#: src/slic3r/GUI/Plater.cpp:4180
+msgid "Delete Selected Objects"
+msgstr "Excluir objetos selecionados"
+
+#: src/slic3r/GUI/Plater.cpp:4188
+msgid "Increase Instances"
+msgstr "Aumentar instâncias"
+
+#: src/slic3r/GUI/Plater.cpp:4224
+msgid "Decrease Instances"
+msgstr "Diminuir instâncias"
+
+#: src/slic3r/GUI/Plater.cpp:4260
+#, c-format
+msgid "Set numbers of copies to %d"
+msgstr "Definir números de cópias para %d"
+
+#: src/slic3r/GUI/Plater.cpp:4290
+msgid "Cut by Plane"
+msgstr "Cortado por plano"
+
+#: src/slic3r/GUI/Plater.cpp:4322
+msgid "Save G-code file as:"
+msgstr "Salve o arquivo G-code como:"
+
+#: src/slic3r/GUI/Plater.cpp:4322
+msgid "Save SL1 file as:"
+msgstr "Salvar SL1 arquivo como:"
+
+#: src/slic3r/GUI/Plater.cpp:4434
+#, c-format
+msgid "STL file exported to %s"
+msgstr "Arquivo STL exportado para %s"
+
+#: src/slic3r/GUI/Plater.cpp:4450
+#, c-format
+msgid "AMF file exported to %s"
+msgstr "Arquivo AMF exportado para %s"
+
+#: src/slic3r/GUI/Plater.cpp:4453
+#, c-format
+msgid "Error exporting AMF file %s"
+msgstr "Erro ao exportar arquivo AMF %s"
+
+#: src/slic3r/GUI/Plater.cpp:4479
+#, c-format
+msgid "3MF file exported to %s"
+msgstr "Arquivo 3MF exportado para %s"
+
+#: src/slic3r/GUI/Plater.cpp:4484
+#, c-format
+msgid "Error exporting 3MF file %s"
+msgstr "Erro ao exportar arquivo 3MF %s"
+
+#: src/slic3r/GUI/Plater.cpp:4822
+msgid "Export"
+msgstr "Exportar"
+
+#: src/slic3r/GUI/Plater.cpp:4823
+msgid "Send G-code"
+msgstr "Enviar G-code"
+
+#: src/slic3r/GUI/Plater.cpp:4907
+msgid "Paste From Clipboard"
+msgstr "Colar da área de transferência"
+
+#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:2001
+#: src/slic3r/GUI/Tab.cpp:2242
+msgid "General"
+msgstr "Geral"
+
+#: src/slic3r/GUI/Preferences.cpp:44
+msgid "Remember output directory"
+msgstr "Lembrar diretório de saída"
+
+#: src/slic3r/GUI/Preferences.cpp:46
+msgid ""
+"If this is enabled, Slic3r will prompt the last output directory instead of "
+"the one containing the input files."
+msgstr ""
+"Se isso estiver habilitado, Slic3r solicitará o último diretório de saída em "
+"vez de um contendo os arquivos de entrada."
+
+#: src/slic3r/GUI/Preferences.cpp:52
+msgid "Auto-center parts"
+msgstr "Centrar automaticamente as partes"
+
+#: src/slic3r/GUI/Preferences.cpp:54
+msgid ""
+"If this is enabled, Slic3r will auto-center objects around the print bed "
+"center."
+msgstr ""
+"Se isso estiver habilitado, o Slic3r irá centralizar objetos automaticamente "
+"ao redor do centro de mesa de impressão."
+
+#: src/slic3r/GUI/Preferences.cpp:60
+msgid "Background processing"
+msgstr "Processamento em segundo plano"
+
+#: src/slic3r/GUI/Preferences.cpp:62
+msgid ""
+"If this is enabled, Slic3r will pre-process objects as soon as they're "
+"loaded in order to save time when exporting G-code."
+msgstr ""
+"Se isso estiver ativado, o Slic3r irá pré-processar objetos assim que eles "
+"forem carregados para economizar tempo ao exportar o G-code."
+
+#: src/slic3r/GUI/Preferences.cpp:71
+msgid ""
+"If enabled, PrusaSlicer will check for the new versions of itself online. "
+"When a new version becomes available a notification is displayed at the next "
+"application startup (never during program usage). This is only a "
+"notification mechanisms, no automatic installation is done."
+msgstr ""
+"Se habilitado, PrusaSlicer irá verificar as novas versões de si mesmo on-"
+"line. Quando uma nova versão se torna disponível, uma notificação é exibida "
+"na próxima inicialização do aplicativo (nunca durante o uso do programa). "
+"Este é apenas um mecanismos de notificação, nenhuma instalação automática é "
+"feita."
+
+#: src/slic3r/GUI/Preferences.cpp:79
+msgid ""
+"If enabled, Slic3r downloads updates of built-in system presets in the "
+"background. These updates are downloaded into a separate temporary location. "
+"When a new preset version becomes available it is offered at application "
+"startup."
+msgstr ""
+"Se ativada, o Slic3r baixa atualizações de predefinições de sistema "
+"incorporadas em segundo plano. Essas atualizações são baixadas em um local "
+"temporário separado. Quando uma nova versão predefinida se torna disponível, "
+"ela é oferecida na inicialização do aplicativo."
+
+#: src/slic3r/GUI/Preferences.cpp:84
+msgid "Suppress \" - default - \" presets"
+msgstr "Suprimir predefinições \"-padrão-\""
+
+#: src/slic3r/GUI/Preferences.cpp:86
+msgid ""
+"Suppress \" - default - \" presets in the Print / Filament / Printer "
+"selections once there are any other valid presets available."
+msgstr ""
+"Suprimir predefinições \"-padrão-\" em impressão/filamento/impressora, uma "
+"vez que existam outras predefinições válidas disponíveis."
+
+#: src/slic3r/GUI/Preferences.cpp:92
+msgid "Show incompatible print and filament presets"
+msgstr "Mostrar predefinições de impressão e filamento incompatíveis"
+
+#: src/slic3r/GUI/Preferences.cpp:94
+msgid ""
+"When checked, the print and filament presets are shown in the preset editor "
+"even if they are marked as incompatible with the active printer"
+msgstr ""
+"Quando marcada, as predefinições de impressão e filamento são mostradas no "
+"editor de predefinições, mesmo que estejam marcadas como incompatíveis com a "
+"impressora ativa"
+
+#: src/slic3r/GUI/Preferences.cpp:101
+msgid "Use Retina resolution for the 3D scene"
+msgstr "Usar a resolução retina para a cena 3D"
+
+#: src/slic3r/GUI/Preferences.cpp:103
+msgid ""
+"If enabled, the 3D scene will be rendered in Retina resolution. If you are "
+"experiencing 3D performance problems, disabling this option may help."
+msgstr ""
+"Se ativada, a cena 3D será renderizada na resolução retina. Se você estiver "
+"enfrentando problemas de desempenho 3D, desabilitar essa opção pode ajudar."
+
+#: src/slic3r/GUI/Preferences.cpp:110
+msgid "Use perspective camera"
+msgstr "Usar a câmera em perspectiva"
+
+#: src/slic3r/GUI/Preferences.cpp:112
+msgid ""
+"If enabled, use perspective camera. If not enabled, use orthographic camera."
+msgstr ""
+"Se ativada, use a câmera em perspectiva. Se não estiver ativada, use a "
+"câmera ortográfica."
+
+#: src/slic3r/GUI/Preferences.cpp:117
+msgid "Use custom size for toolbar icons"
+msgstr "Usar tamanho personalizado para ícones da barra de ferramentas"
+
+#: src/slic3r/GUI/Preferences.cpp:119
+msgid "If enabled, you can change size of toolbar icons manually."
+msgstr ""
+"Se ativado, você pode alterar o tamanho dos ícones da barra de ferramentas "
+"manualmente."
+
+#: src/slic3r/GUI/Preferences.cpp:144
+#, c-format
+msgid "You need to restart %s to make the changes effective."
+msgstr "Você precisa reiniciar %s para tornar as alterações efetivas."
+
+#: src/slic3r/GUI/Preferences.cpp:192
+msgid "Icon size in a respect to the default size"
+msgstr "Tamanho do ícone em relação ao tamanho padrão"
+
+#: src/slic3r/GUI/Preferences.cpp:207
+msgid "Select toolbar icon size in respect to the default one."
+msgstr ""
+"Selecione o tamanho do ícone da barra de ferramentas em relação ao padrão."
+
+#: src/slic3r/GUI/Preset.cpp:212
+msgid "modified"
+msgstr "modificado"
+
+#: src/slic3r/GUI/Preset.cpp:967 src/slic3r/GUI/Preset.cpp:1007
+#: src/slic3r/GUI/Preset.cpp:1072 src/slic3r/GUI/Preset.cpp:1104
+#: src/slic3r/GUI/PresetBundle.cpp:1484 src/slic3r/GUI/PresetBundle.cpp:1559
+msgid "System presets"
+msgstr "Predefinições do sistema"
+
+#: src/slic3r/GUI/Preset.cpp:1011 src/slic3r/GUI/Preset.cpp:1108
+#: src/slic3r/GUI/PresetBundle.cpp:1564
+msgid "User presets"
+msgstr "Predefinições do usuário"
+
+#: src/slic3r/GUI/Preset.cpp:1040 src/slic3r/GUI/Tab.cpp:243
+msgid "Add a new printer"
+msgstr "Adicionar uma nova impressora"
+
+#: src/slic3r/GUI/Preset.cpp:1312
+msgid "filament"
+msgstr "filamento"
+
+#: src/slic3r/GUI/Preset.cpp:1313
+msgid "SLA print"
+msgstr "Impressão de SLA"
+
+#: src/slic3r/GUI/PresetHints.cpp:28
+msgid ""
+"If estimated layer time is below ~%1%s, fan will run at %2%%% and print "
+"speed will be reduced so that no less than %3%s are spent on that layer "
+"(however, speed will never be reduced below %4%mm/s)."
+msgstr ""
+"Se o tempo estimado da camada estiver abaixo de ~%1%s, o ventoinha será "
+"executado em %2%%% e a velocidade de impressão será reduzida para que não "
+"menos de %3%s sejam gastos nessa camada (no entanto, a velocidade nunca será "
+"reduzida abaixo de %4% mm/s)."
+
+#: src/slic3r/GUI/PresetHints.cpp:35
+msgid ""
+"\n"
+"If estimated layer time is greater, but still below ~%1%s, fan will run at a "
+"proportionally decreasing speed between %2%%% and %3%%%."
+msgstr ""
+"\n"
+"Se o tempo estimado da camada for maior, mas ainda abaixo de ~%1%s, o "
+"ventoinha será executado em uma velocidade proporcionalmente decrescente "
+"entre %2%%% e %3%%%."
+
+#: src/slic3r/GUI/PresetHints.cpp:39
+msgid ""
+"\n"
+"During the other layers, fan"
+msgstr ""
+"\n"
+"Durante as outras camadas, o ventoinha"
+
+#: src/slic3r/GUI/PresetHints.cpp:41
+msgid "Fan"
+msgstr "Ventoinha"
+
+#: src/slic3r/GUI/PresetHints.cpp:47
+msgid "will always run at %1%%%"
+msgstr "será sempre executado em %1%%%"
+
+#: src/slic3r/GUI/PresetHints.cpp:50
+msgid "except for the first %1% layers."
+msgstr "exceto para as primeiras camadas %1%."
+
+#: src/slic3r/GUI/PresetHints.cpp:52
+msgid "except for the first layer."
+msgstr "exceto para a primeira camada."
+
+#: src/slic3r/GUI/PresetHints.cpp:54
+msgid "will be turned off."
+msgstr "será desligado."
+
+#: src/slic3r/GUI/PresetHints.cpp:155
+msgid "external perimeters"
+msgstr "perímetros externos"
+
+#: src/slic3r/GUI/PresetHints.cpp:164
+msgid "perimeters"
+msgstr "perímetros"
+
+#: src/slic3r/GUI/PresetHints.cpp:173
+msgid "infill"
+msgstr "preenchimento"
+
+#: src/slic3r/GUI/PresetHints.cpp:183
+msgid "solid infill"
+msgstr "preenchimento sólido"
+
+#: src/slic3r/GUI/PresetHints.cpp:191
+msgid "top solid infill"
+msgstr "preenchimento sólido do topo"
+
+#: src/slic3r/GUI/PresetHints.cpp:202
+msgid "support"
+msgstr "suporte"
+
+#: src/slic3r/GUI/PresetHints.cpp:212
+msgid "support interface"
+msgstr "interface de suporte"
+
+#: src/slic3r/GUI/PresetHints.cpp:218
+msgid "First layer volumetric"
+msgstr "Primeira camada volumétrica"
+
+#: src/slic3r/GUI/PresetHints.cpp:218
+msgid "Bridging volumetric"
+msgstr "Ponteamento volumétrico"
+
+#: src/slic3r/GUI/PresetHints.cpp:218
+msgid "Volumetric"
+msgstr "Volumétrica"
+
+#: src/slic3r/GUI/PresetHints.cpp:219
+msgid "flow rate is maximized"
+msgstr "a taxa de fluxo é maximizada"
+
+#: src/slic3r/GUI/PresetHints.cpp:222
+msgid "by the print profile maximum"
+msgstr "pelo perfil de impressão máximo"
+
+#: src/slic3r/GUI/PresetHints.cpp:223
+msgid "when printing"
+msgstr "ao imprimir"
+
+#: src/slic3r/GUI/PresetHints.cpp:224
+msgid "with a volumetric rate"
+msgstr "com uma taxa volumétrica"
+
+#: src/slic3r/GUI/PresetHints.cpp:228
+#, c-format
+msgid "%3.2f mm³/s at filament speed %3.2f mm/s."
+msgstr "%3.2f mm ³/s na velocidade do filamento %3.2f mm/s."
+
+#: src/slic3r/GUI/PresetHints.cpp:246
+msgid ""
+"Recommended object thin wall thickness: Not available due to invalid layer "
+"height."
+msgstr ""
+"Espessura de parede fina do objeto recomendado: não disponível devido à "
+"altura da camada inválida."
+
+#: src/slic3r/GUI/PresetHints.cpp:262
+#, c-format
+msgid "Recommended object thin wall thickness for layer height %.2f and"
+msgstr ""
+"Espessura de parede fina do objeto recomendado para a altura da camada %.2f e"
+
+#: src/slic3r/GUI/PresetHints.cpp:268
+#, c-format
+msgid "%d lines: %.2f mm"
+msgstr "%d linhas: %.2f mm"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:33
+msgid "Send G-Code to printer host"
+msgstr "Enviar G-code para o host da impressora"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:33
+msgid "Upload to Printer Host with the following filename:"
+msgstr "Carregue para o host da impressora com o seguinte nome de arquivo:"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:35
+msgid "Start printing after upload"
+msgstr "Iniciar a impressão após o envio"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:42
+msgid "Use forward slashes ( / ) as a directory separator if needed."
+msgstr "Use barras (/) como um separador de diretório, se necessário."
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:149
+msgid "ID"
+msgstr "ID"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:150
+msgid "Progress"
+msgstr "Progresso"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:151
+msgid "Status"
+msgstr "Status"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:152
+msgid "Host"
+msgstr "Servidor"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:153
+msgid "Filename"
+msgstr "Nome do arquivo"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:154
+msgid "Error Message"
+msgstr "Mensagem de Erro"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:157
+msgid "Cancel selected"
+msgstr "Cancelar selecionado"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:159
+msgid "Show error message"
+msgstr "Exibir mensagem de erro"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:198
+#: src/slic3r/GUI/PrintHostDialogs.cpp:229
+msgid "Enqueued"
+msgstr "Enfileirado"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:230
+msgid "Uploading"
+msgstr "Enviando"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:234
+msgid "Completed"
+msgstr "Concluído"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:272
+msgid "Error uploading to print host:"
+msgstr "Erro ao carregar para o host de impressão:"
+
+#: src/slic3r/GUI/RammingChart.cpp:23
+msgid "NO RAMMING AT ALL"
+msgstr "Não usar Ramming"
+
+#: src/slic3r/GUI/RammingChart.cpp:76
+msgid "Time"
+msgstr "Tempo"
+
+#: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:82
+#: src/libslic3r/PrintConfig.cpp:627 src/libslic3r/PrintConfig.cpp:671
+#: src/libslic3r/PrintConfig.cpp:686 src/libslic3r/PrintConfig.cpp:2349
+#: src/libslic3r/PrintConfig.cpp:2358 src/libslic3r/PrintConfig.cpp:2418
+#: src/libslic3r/PrintConfig.cpp:2426 src/libslic3r/PrintConfig.cpp:2434
+#: src/libslic3r/PrintConfig.cpp:2441 src/libslic3r/PrintConfig.cpp:2449
+#: src/libslic3r/PrintConfig.cpp:2457
+msgid "s"
+msgstr "s"
+
+#: src/slic3r/GUI/RammingChart.cpp:81
+msgid "Volumetric speed"
+msgstr "Velocidade volumétrica"
+
+#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:584
+#: src/libslic3r/PrintConfig.cpp:1234
+msgid "mm³/s"
+msgstr "mm ³/s"
+
+#: src/slic3r/GUI/Selection.cpp:146
+msgid "Selection-Add"
+msgstr "Seleção-Adicionar"
+
+#: src/slic3r/GUI/Selection.cpp:187
+msgid "Selection-Remove"
+msgstr "Seleção-remover"
+
+#: src/slic3r/GUI/Selection.cpp:219
+msgid "Selection-Add Object"
+msgstr "Seleção-Adicionar objeto"
+
+#: src/slic3r/GUI/Selection.cpp:238
+msgid "Selection-Remove Object"
+msgstr "Seleção-remover objeto"
+
+#: src/slic3r/GUI/Selection.cpp:256
+msgid "Selection-Add Instance"
+msgstr "Instância de seleção-Adicionar"
+
+#: src/slic3r/GUI/Selection.cpp:275
+msgid "Selection-Remove Instance"
+msgstr "Seleção-remover instância"
+
+#: src/slic3r/GUI/Selection.cpp:376
+msgid "Selection-Add All"
+msgstr "Seleção-adicionar todos"
+
+#: src/slic3r/GUI/Selection.cpp:402
+msgid "Selection-Remove All"
+msgstr "Seleção-remover todos"
+
+#: src/slic3r/GUI/Selection.cpp:939
+msgid "Scale To Fit"
+msgstr "Dimensionar para caber"
+
+#: src/slic3r/GUI/Selection.cpp:1474
+msgid "Set Printable Instance"
+msgstr "Definir instância imprimível"
+
+#: src/slic3r/GUI/Selection.cpp:1474
+msgid "Set Unprintable Instance"
+msgstr "Definir instância não imprimível"
+
+#: src/slic3r/GUI/SysInfoDialog.cpp:78
+msgid "System Information"
+msgstr "Informações do sistema"
+
+#: src/slic3r/GUI/SysInfoDialog.cpp:154
+msgid "Copy to Clipboard"
+msgstr "Copiar para a Área de Transferência"
+
+#: src/slic3r/GUI/Tab.cpp:52 src/libslic3r/PrintConfig.cpp:239
+msgid "Compatible printers"
+msgstr "Impressoras compatíveis"
+
+#: src/slic3r/GUI/Tab.cpp:53
+msgid "Select the printers this profile is compatible with."
+msgstr "Selecione as impressoras com as quais este perfil é compatível."
+
+#: src/slic3r/GUI/Tab.cpp:58 src/libslic3r/PrintConfig.cpp:254
+msgid "Compatible print profiles"
+msgstr "Perfis de impressão compatíveis"
+
+#: src/slic3r/GUI/Tab.cpp:59
+msgid "Select the print profiles this profile is compatible with."
+msgstr ""
+"Selecione os perfis de impressão com os quais este perfil é compatível."
+
+#. TRN "Save current Settings"
+#: src/slic3r/GUI/Tab.cpp:135
+#, c-format
+msgid "Save current %s"
+msgstr "Salvar %s atual"
+
+#: src/slic3r/GUI/Tab.cpp:136
+msgid "Delete this preset"
+msgstr "Exclua esta predefinição"
+
+#: src/slic3r/GUI/Tab.cpp:141
+msgid ""
+"Hover the cursor over buttons to find more information \n"
+"or click this button."
+msgstr ""
+"Passe o cursor sobre os botões para encontrar mais informações \n"
+"ou clique neste botão."
+
+#: src/slic3r/GUI/Tab.cpp:943
+msgid "This is a default preset."
+msgstr "Esta é uma predefinição padrão."
+
+#: src/slic3r/GUI/Tab.cpp:945
+msgid "This is a system preset."
+msgstr "Esta é uma predefinição do sistema."
+
+#: src/slic3r/GUI/Tab.cpp:947
+msgid "Current preset is inherited from the default preset."
+msgstr "Predefinição atual é herdada da predefinição padrão."
+
+#: src/slic3r/GUI/Tab.cpp:950
+#, c-format
+msgid ""
+"Current preset is inherited from:\n"
+"\t%s"
+msgstr ""
+"Predefinição atual é herdada de:\n"
+"\t%s"
+
+#: src/slic3r/GUI/Tab.cpp:954
+msgid "It can't be deleted or modified."
+msgstr "Ele não pode ser excluído ou modificado."
+
+#: src/slic3r/GUI/Tab.cpp:955
+msgid ""
+"Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+"Todas as modificações devem ser salvas como uma nova predefinição herdada de "
+"uma presente."
+
+#: src/slic3r/GUI/Tab.cpp:956
+msgid "To do that please specify a new name for the preset."
+msgstr "Para fazer isso, especifique um novo nome para a predefinição."
+
+#: src/slic3r/GUI/Tab.cpp:960
+msgid "Additional information:"
+msgstr "Informações adicionais:"
+
+#: src/slic3r/GUI/Tab.cpp:966
+msgid "printer model"
+msgstr "modelo de impressora"
+
+#: src/slic3r/GUI/Tab.cpp:974
+msgid "default print profile"
+msgstr "perfil de impressão padrão"
+
+#: src/slic3r/GUI/Tab.cpp:977
+msgid "default filament profile"
+msgstr "perfil de filamento padrão"
+
+#: src/slic3r/GUI/Tab.cpp:991
+msgid "default SLA material profile"
+msgstr "perfil de material SLA padrão"
+
+#: src/slic3r/GUI/Tab.cpp:995
+msgid "default SLA print profile"
+msgstr "perfil de impressão padrão do SLA"
+
+#: src/slic3r/GUI/Tab.cpp:1032 src/slic3r/GUI/Tab.cpp:3731
+msgid "Layers and perimeters"
+msgstr "Camadas e perímetros"
+
+#: src/slic3r/GUI/Tab.cpp:1037
+msgid "Vertical shells"
+msgstr "Paredes verticais"
+
+#: src/slic3r/GUI/Tab.cpp:1048
+msgid "Horizontal shells"
+msgstr "Paredes horizontais"
+
+#: src/slic3r/GUI/Tab.cpp:1049 src/libslic3r/PrintConfig.cpp:1759
+msgid "Solid layers"
+msgstr "Camadas sólidas"
+
+#: src/slic3r/GUI/Tab.cpp:1054
+msgid "Quality (slower slicing)"
+msgstr "Qualidade (fatiamento mais lento)"
+
+#: src/slic3r/GUI/Tab.cpp:1072
+msgid "Reducing printing time"
+msgstr "Reduzindo o tempo de impressão"
+
+#: src/slic3r/GUI/Tab.cpp:1084
+msgid "Skirt and brim"
+msgstr "Saia e aba"
+
+#: src/slic3r/GUI/Tab.cpp:1101
+msgid "Raft"
+msgstr "Estrado"
+
+#: src/slic3r/GUI/Tab.cpp:1105
+msgid "Options for support material and raft"
+msgstr "Opções para material de suporte e estrado"
+
+#: src/slic3r/GUI/Tab.cpp:1120
+msgid "Speed for print moves"
+msgstr "Velocidade para movimentos de impressão"
+
+#: src/slic3r/GUI/Tab.cpp:1132
+msgid "Speed for non-print moves"
+msgstr "Velocidade para movimentos não impressos"
+
+#: src/slic3r/GUI/Tab.cpp:1135
+msgid "Modifiers"
+msgstr "Modificadores"
+
+#: src/slic3r/GUI/Tab.cpp:1138
+msgid "Acceleration control (advanced)"
+msgstr "Controle de aceleração (avançado)"
+
+#: src/slic3r/GUI/Tab.cpp:1145
+msgid "Autospeed (advanced)"
+msgstr "Velocidade automática (avançado)"
+
+#: src/slic3r/GUI/Tab.cpp:1153
+msgid "Multiple Extruders"
+msgstr "Extrusoras múltiplas"
+
+#: src/slic3r/GUI/Tab.cpp:1161
+msgid "Ooze prevention"
+msgstr "Prevenção de vazão"
+
+#: src/slic3r/GUI/Tab.cpp:1178
+msgid "Extrusion width"
+msgstr "Espessura da extrusão"
+
+#: src/slic3r/GUI/Tab.cpp:1188
+msgid "Overlap"
+msgstr "Cobrir"
+
+#: src/slic3r/GUI/Tab.cpp:1191
+msgid "Flow"
+msgstr "Fluxo"
+
+#: src/slic3r/GUI/Tab.cpp:1200
+msgid "Other"
+msgstr "Outro"
+
+#: src/slic3r/GUI/Tab.cpp:1203 src/slic3r/GUI/Tab.cpp:3789
+msgid "Output options"
+msgstr "Opções de saída"
+
+#: src/slic3r/GUI/Tab.cpp:1204
+msgid "Sequential printing"
+msgstr "Impressão sequencial"
+
+#: src/slic3r/GUI/Tab.cpp:1206
+msgid "Extruder clearance (mm)"
+msgstr "Folga da extrusora (milímetro)"
+
+#: src/slic3r/GUI/Tab.cpp:1215 src/slic3r/GUI/Tab.cpp:3790
+msgid "Output file"
+msgstr "Arquivo de saída"
+
+#: src/slic3r/GUI/Tab.cpp:1222 src/libslic3r/PrintConfig.cpp:1432
+msgid "Post-processing scripts"
+msgstr "Scripts de pós-processamento"
+
+#: src/slic3r/GUI/Tab.cpp:1228 src/slic3r/GUI/Tab.cpp:1229
+#: src/slic3r/GUI/Tab.cpp:1752 src/slic3r/GUI/Tab.cpp:1753
+#: src/slic3r/GUI/Tab.cpp:2214 src/slic3r/GUI/Tab.cpp:2215
+#: src/slic3r/GUI/Tab.cpp:2328 src/slic3r/GUI/Tab.cpp:2329
+#: src/slic3r/GUI/Tab.cpp:3668 src/slic3r/GUI/Tab.cpp:3669
+msgid "Notes"
+msgstr "Notas"
+
+#: src/slic3r/GUI/Tab.cpp:1235 src/slic3r/GUI/Tab.cpp:1760
+#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2335
+#: src/slic3r/GUI/Tab.cpp:3676 src/slic3r/GUI/Tab.cpp:3795
+msgid "Dependencies"
+msgstr "Dependências"
+
+#: src/slic3r/GUI/Tab.cpp:1236 src/slic3r/GUI/Tab.cpp:1761
+#: src/slic3r/GUI/Tab.cpp:2222 src/slic3r/GUI/Tab.cpp:2336
+#: src/slic3r/GUI/Tab.cpp:3677 src/slic3r/GUI/Tab.cpp:3796
+msgid "Profile dependencies"
+msgstr "Dependências de perfil"
+
+#: src/slic3r/GUI/Tab.cpp:1538 src/slic3r/GUI/Tab.cpp:1593
+msgid "Filament Overrides"
+msgstr "Sobrescrever config."
+
+#: src/slic3r/GUI/Tab.cpp:1539 src/slic3r/GUI/Tab.cpp:1598
+#: src/slic3r/GUI/Tab.cpp:2570
+msgid "Retraction"
+msgstr "Retração"
+
+#: src/slic3r/GUI/Tab.cpp:1648 src/libslic3r/PrintConfig.cpp:2030
+msgid "Temperature"
+msgstr "Temperatura"
+
+#: src/slic3r/GUI/Tab.cpp:1654
+msgid "Bed"
+msgstr "Mesa"
+
+#: src/slic3r/GUI/Tab.cpp:1659
+msgid "Cooling"
+msgstr "Resfriamento"
+
+#: src/slic3r/GUI/Tab.cpp:1660 src/libslic3r/PrintConfig.cpp:1335
+#: src/libslic3r/PrintConfig.cpp:2150
+msgid "Enable"
+msgstr "Habilitar"
+
+#: src/slic3r/GUI/Tab.cpp:1671
+msgid "Fan settings"
+msgstr "Config. da ventoinha"
+
+#: src/slic3r/GUI/Tab.cpp:1672
+msgid "Fan speed"
+msgstr "Velocidade do ventoinha"
+
+#: src/slic3r/GUI/Tab.cpp:1680
+msgid "Cooling thresholds"
+msgstr "Limiares de resfriamento"
+
+#: src/slic3r/GUI/Tab.cpp:1686
+msgid "Filament properties"
+msgstr "Propriedades de filamento"
+
+#: src/slic3r/GUI/Tab.cpp:1690
+msgid "Print speed override"
+msgstr "Substituição da velocidade de impressão"
+
+#: src/slic3r/GUI/Tab.cpp:1700
+msgid "Wipe tower parameters"
+msgstr "Parâmetros da torre de limpeza"
+
+#: src/slic3r/GUI/Tab.cpp:1703
+msgid "Toolchange parameters with single extruder MM printers"
+msgstr ""
+"Parâmetros de mudança de ferramenta com impressoras de multi material com "
+"apenas uma extrusora"
+
+#: src/slic3r/GUI/Tab.cpp:1717
+msgid "Ramming settings"
+msgstr "config. de Ramming"
+
+#: src/slic3r/GUI/Tab.cpp:1739 src/slic3r/GUI/Tab.cpp:2177
+msgid "Custom G-code"
+msgstr "G-code customizado"
+
+#: src/slic3r/GUI/Tab.cpp:1740 src/slic3r/GUI/Tab.cpp:2178
+#: src/libslic3r/PrintConfig.cpp:1785 src/libslic3r/PrintConfig.cpp:1800
+msgid "Start G-code"
+msgstr "G-code de início"
+
+#: src/slic3r/GUI/Tab.cpp:1746 src/slic3r/GUI/Tab.cpp:2184
+#: src/libslic3r/PrintConfig.cpp:369 src/libslic3r/PrintConfig.cpp:379
+msgid "End G-code"
+msgstr "G-code de finalização"
+
+#: src/slic3r/GUI/Tab.cpp:1803
+msgid "Volumetric flow hints not available"
+msgstr "Dicas de fluxo volumétrico não disponíveis"
+
+#: src/slic3r/GUI/Tab.cpp:1889 src/slic3r/GUI/Tab.cpp:2117
+msgid "Test"
+msgstr "Teste"
+
+#: src/slic3r/GUI/Tab.cpp:1899
+msgid "Could not get a valid Printer Host reference"
+msgstr "Não foi possível obter uma referência de host de impressora válida"
+
+#: src/slic3r/GUI/Tab.cpp:1905 src/slic3r/GUI/Tab.cpp:2130
+msgid "Success!"
+msgstr "Sucesso!"
+
+#: src/slic3r/GUI/Tab.cpp:1920
+msgid ""
+"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-"
+"signed certificate."
+msgstr ""
+"O arquivo HTTPS CA é opcional. Só é necessário se você usar HTTPS com um "
+"certificado auto-assinado."
+
+#: src/slic3r/GUI/Tab.cpp:1933
+msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
+msgstr ""
+"Arquivos de certificado (*. CRT, *. pem) | *. CRT; *. pem | Todos os "
+"arquivos | *. *"
+
+#: src/slic3r/GUI/Tab.cpp:1934
+msgid "Open CA certificate file"
+msgstr "Abra o arquivo de certificado da CA"
+
+#: src/slic3r/GUI/Tab.cpp:1962
+#, c-format
+msgid ""
+"HTTPS CA File:\n"
+"    \tOn this system, %s uses HTTPS certificates from the system Certificate "
+"Store or Keychain.\n"
+"    \tTo use a custom CA file, please import your CA file into Certificate "
+"Store / Keychain."
+msgstr ""
+"Arquivo HTTPS CA:\n"
+"    \tNeste sistema, %s usa certificados HTTPS do sistema Certificate Store "
+"ou keychain.\n"
+"    \tPara usar um arquivo de CA personalizado, importe seu arquivo de CA "
+"para o repositório de certificados/chaveiro."
+
+#: src/slic3r/GUI/Tab.cpp:2002 src/slic3r/GUI/Tab.cpp:2243
+msgid "Size and coordinates"
+msgstr "Tamanho e coordenadas"
+
+#: src/slic3r/GUI/Tab.cpp:2007 src/slic3r/GUI/Tab.cpp:2248
+#: src/slic3r/GUI/Tab.cpp:3338
+msgid "Set"
+msgstr "Definir"
+
+#: src/slic3r/GUI/Tab.cpp:2039
+msgid "Capabilities"
+msgstr "Capacidades"
+
+#: src/slic3r/GUI/Tab.cpp:2044
+msgid "Number of extruders of the printer."
+msgstr "Número de extrusoras da impressora."
+
+#: src/slic3r/GUI/Tab.cpp:2069
+msgid ""
+"Single Extruder Multi Material is selected, \n"
+"and all extruders must have the same diameter.\n"
+"Do you want to change the diameter for all extruders to first extruder "
+"nozzle diameter value?"
+msgstr ""
+"A extrusora multi material é selecionada, \n"
+"e todas as extrusoras devem ter o mesmo diâmetro.\n"
+"Você quer mudar o diâmetro para todas as extrusoras ao primeiro valor do "
+"diâmetro da ponteira da extrusora?"
+
+#: src/slic3r/GUI/Tab.cpp:2072 src/slic3r/GUI/Tab.cpp:2540
+#: src/libslic3r/PrintConfig.cpp:1310
+msgid "Nozzle diameter"
+msgstr "Diâmetro do bico"
+
+#: src/slic3r/GUI/Tab.cpp:2102
+msgid "USB/Serial connection"
+msgstr "Conexão USB/serial"
+
+#: src/slic3r/GUI/Tab.cpp:2103 src/libslic3r/PrintConfig.cpp:1640
+msgid "Serial port"
+msgstr "Porte Serial"
+
+#: src/slic3r/GUI/Tab.cpp:2108
+msgid "Rescan serial ports"
+msgstr "Portas seriais de Rescan"
+
+#: src/slic3r/GUI/Tab.cpp:2130
+msgid "Connection to printer works correctly."
+msgstr "A ligação à impressora funciona corretamente."
+
+#: src/slic3r/GUI/Tab.cpp:2133
+msgid "Connection failed."
+msgstr "A conexão falhou."
+
+#: src/slic3r/GUI/Tab.cpp:2146 src/slic3r/GUI/Tab.cpp:2323
+msgid "Print Host upload"
+msgstr "Upload do host de impressão"
+
+#: src/slic3r/GUI/Tab.cpp:2190 src/libslic3r/PrintConfig.cpp:138
+msgid "Before layer change G-code"
+msgstr "Antes da mudança de camada G-code"
+
+#: src/slic3r/GUI/Tab.cpp:2196 src/libslic3r/PrintConfig.cpp:1056
+msgid "After layer change G-code"
+msgstr "Após a mudança da camada do G-code"
+
+#: src/slic3r/GUI/Tab.cpp:2202 src/libslic3r/PrintConfig.cpp:2056
+msgid "Tool change G-code"
+msgstr "G-code de troca de ferramenta"
+
+#: src/slic3r/GUI/Tab.cpp:2208
+msgid "Between objects G-code (for sequential printing)"
+msgstr "G-code entre objetos (para impressão sequencial)"
+
+#: src/slic3r/GUI/Tab.cpp:2280
+msgid "Display"
+msgstr "Exibição"
+
+#: src/slic3r/GUI/Tab.cpp:2295
+msgid "Tilt"
+msgstr "Inclinar"
+
+#: src/slic3r/GUI/Tab.cpp:2296
+msgid "Tilt time"
+msgstr "Tempo de inclinação"
+
+#: src/slic3r/GUI/Tab.cpp:2302 src/slic3r/GUI/Tab.cpp:3650
+msgid "Corrections"
+msgstr "Correções"
+
+#: src/slic3r/GUI/Tab.cpp:2317 src/slic3r/GUI/Tab.cpp:3646
+msgid "Exposure"
+msgstr "Exposição"
+
+#: src/slic3r/GUI/Tab.cpp:2388 src/slic3r/GUI/Tab.cpp:2473
+#: src/libslic3r/PrintConfig.cpp:1106 src/libslic3r/PrintConfig.cpp:1124
+#: src/libslic3r/PrintConfig.cpp:1142 src/libslic3r/PrintConfig.cpp:1159
+#: src/libslic3r/PrintConfig.cpp:1170 src/libslic3r/PrintConfig.cpp:1181
+#: src/libslic3r/PrintConfig.cpp:1192
+msgid "Machine limits"
+msgstr "Limites da máquina"
+
+#: src/slic3r/GUI/Tab.cpp:2402
+msgid "Values in this column are for Normal mode"
+msgstr "Valores nesta coluna são para o modo normal"
+
+#: src/slic3r/GUI/Tab.cpp:2403
+msgid "Normal"
+msgstr "Normal"
+
+#: src/slic3r/GUI/Tab.cpp:2408
+msgid "Values in this column are for Stealth mode"
+msgstr "Valores nesta coluna são para o modo furtivo"
+
+#: src/slic3r/GUI/Tab.cpp:2409
+msgid "Stealth"
+msgstr "Furtivo"
+
+#: src/slic3r/GUI/Tab.cpp:2417
+msgid "Maximum feedrates"
+msgstr "Velocidade máxima de alimentação"
+
+#: src/slic3r/GUI/Tab.cpp:2422
+msgid "Maximum accelerations"
+msgstr "Acelerações máximas"
+
+#: src/slic3r/GUI/Tab.cpp:2429
+msgid "Jerk limits"
+msgstr "Limites de empurrão"
+
+#: src/slic3r/GUI/Tab.cpp:2434
+msgid "Minimum feedrates"
+msgstr "Velocidades alimentação mínimos"
+
+#: src/slic3r/GUI/Tab.cpp:2498 src/slic3r/GUI/Tab.cpp:2506
+msgid "Single extruder MM setup"
+msgstr "config. de extrusora multi material"
+
+#: src/slic3r/GUI/Tab.cpp:2507
+msgid "Single extruder multimaterial parameters"
+msgstr "Parâmetros para extrusora única multimaterial"
+
+#: src/slic3r/GUI/Tab.cpp:2520 src/libslic3r/GCode/PreviewData.cpp:461
+#, c-format
+msgid "Extruder %d"
+msgstr "Extrusora %d"
+
+#: src/slic3r/GUI/Tab.cpp:2538
+msgid ""
+"This is a single extruder multimaterial printer, diameters of all extruders "
+"will be set to the new value. Do you want to proceed?"
+msgstr ""
+"Esta é uma única impressora multimaterial extrusora, diâmetros de todas as "
+"extrusoras será definido para o novo valor. Você quer prosseguir?"
+
+#: src/slic3r/GUI/Tab.cpp:2562
+msgid "Layer height limits"
+msgstr "Limites de altura da camada"
+
+#: src/slic3r/GUI/Tab.cpp:2567
+msgid "Position (for multi-extruder printers)"
+msgstr "Posição (para impressoras multiextrusoras)"
+
+#: src/slic3r/GUI/Tab.cpp:2573
+msgid "Only lift Z"
+msgstr "Apenas elevar Z"
+
+#: src/slic3r/GUI/Tab.cpp:2586
+msgid ""
+"Retraction when tool is disabled (advanced settings for multi-extruder "
+"setups)"
+msgstr ""
+"Retração quando a ferramenta está desativada (config. avançadas para "
+"instalações multiextrusoras)"
+
+#: src/slic3r/GUI/Tab.cpp:2594
+msgid "Reset to Filament Color"
+msgstr "Restabelecer cor do filamento"
+
+#: src/slic3r/GUI/Tab.cpp:2775
+msgid ""
+"The Wipe option is not available when using the Firmware Retraction mode.\n"
+"\n"
+"Shall I disable it in order to enable Firmware Retraction?"
+msgstr ""
+"A opção limpar não está disponível ao usar o modo de retração de firmware.\n"
+"\n"
+"Devo desativá-lo, a fim de permitir a retração de firmware?"
+
+#: src/slic3r/GUI/Tab.cpp:2777
+msgid "Firmware Retraction"
+msgstr "Retração do firmware"
+
+#: src/slic3r/GUI/Tab.cpp:3106
+#, c-format
+msgid "Default preset (%s)"
+msgstr "Predefinição padrão ( %s)"
+
+#: src/slic3r/GUI/Tab.cpp:3107
+#, c-format
+msgid "Preset (%s)"
+msgstr "Predefinição ( %s)"
+
+#: src/slic3r/GUI/Tab.cpp:3124
+msgid "has the following unsaved changes:"
+msgstr "tem as seguintes alterações não salvas:"
+
+#: src/slic3r/GUI/Tab.cpp:3127
+msgid "is not compatible with printer"
+msgstr "não é compatível com a impressora"
+
+#: src/slic3r/GUI/Tab.cpp:3128
+msgid "is not compatible with print profile"
+msgstr "não é compatível com o perfil de impressão"
+
+#: src/slic3r/GUI/Tab.cpp:3130
+msgid "and it has the following unsaved changes:"
+msgstr "e tem as seguintes alterações não salvas:"
+
+#: src/slic3r/GUI/Tab.cpp:3134
+msgid "Unsaved Changes"
+msgstr "Alterações não salvas"
+
+#: src/slic3r/GUI/Tab.cpp:3225
+msgid "%1% - Copy"
+msgstr "%1% - cópia"
+
+#: src/slic3r/GUI/Tab.cpp:3248
+msgid "The supplied name is empty. It can't be saved."
+msgstr "O nome fornecido está vazio. Não pode ser salvo."
+
+#: src/slic3r/GUI/Tab.cpp:3253
+msgid "Cannot overwrite a system profile."
+msgstr "Não é possível substituir um perfil de sistema."
+
+#: src/slic3r/GUI/Tab.cpp:3257
+msgid "Cannot overwrite an external profile."
+msgstr "Não é possível substituir um perfil externo."
+
+#: src/slic3r/GUI/Tab.cpp:3283
+msgid "remove"
+msgstr "remover"
+
+#: src/slic3r/GUI/Tab.cpp:3283
+msgid "delete"
+msgstr "excluir"
+
+#. TRN  remove/delete
+#: src/slic3r/GUI/Tab.cpp:3285
+msgid "Are you sure you want to %1% the selected preset?"
+msgstr "Tem certeza de que deseja %1% da predefinição selecionada?"
+
+#. TRN  Remove/Delete
+#: src/slic3r/GUI/Tab.cpp:3288
+msgid "%1% Preset"
+msgstr "%1% Predefinição"
+
+#: src/slic3r/GUI/Tab.cpp:3414
+msgid "LOCKED LOCK"
+msgstr "CADEADO FECHADO"
+
+#. TRN Description for "LOCKED LOCK"
+#: src/slic3r/GUI/Tab.cpp:3416
+msgid ""
+"indicates that the settings are the same as the system (or default) values "
+"for the current option group"
+msgstr ""
+"indica que as config. são as mesmas que os valores do sistema (ou padrão) "
+"para o grupo de opções atual"
+
+#: src/slic3r/GUI/Tab.cpp:3418
+msgid "UNLOCKED LOCK"
+msgstr "CADEADO ABERTO"
+
+#. TRN Description for "UNLOCKED LOCK"
+#: src/slic3r/GUI/Tab.cpp:3420
+msgid ""
+"indicates that some settings were changed and are not equal to the system "
+"(or default) values for the current option group.\n"
+"Click the UNLOCKED LOCK icon to reset all settings for current option group "
+"to the system (or default) values."
+msgstr ""
+"indica que algumas config. foram alteradas e não são iguais aos valores do "
+"sistema (ou padrão) para o grupo de opções atual.\n"
+"Clique no ícone DESBLOQUEAR para redefinir todas as config. do grupo de "
+"opções atual para os valores do sistema (ou padrão)."
+
+#: src/slic3r/GUI/Tab.cpp:3425
+msgid "WHITE BULLET"
+msgstr "PONTO BRANCO"
+
+#. TRN Description for "WHITE BULLET"
+#: src/slic3r/GUI/Tab.cpp:3427
+msgid ""
+"for the left button: \tindicates a non-system (or non-default) preset,\n"
+"for the right button: \tindicates that the settings hasn't been modified."
+msgstr ""
+"para o botão esquerdo: \t indica uma predefinição que não é do sistema (ou "
+"não-padrão),\n"
+"para o botão direito: \t indica que as config. não foram modificadas."
+
+#: src/slic3r/GUI/Tab.cpp:3430
+msgid "BACK ARROW"
+msgstr "REDEFINIR"
+
+#. TRN Description for "BACK ARROW"
+#: src/slic3r/GUI/Tab.cpp:3432
+msgid ""
+"indicates that the settings were changed and are not equal to the last saved "
+"preset for the current option group.\n"
+"Click the BACK ARROW icon to reset all settings for the current option group "
+"to the last saved preset."
+msgstr ""
+"indica que as config. foram alteradas e não são iguais à última predefinição "
+"salva para o grupo de opções atual.\n"
+"Clique no ícone REDEFINIR para redefinir todas as config. do grupo de opções "
+"atual para a última predefinição salva."
+
+#: src/slic3r/GUI/Tab.cpp:3442
+msgid ""
+"LOCKED LOCK icon indicates that the settings are the same as the system (or "
+"default) values for the current option group"
+msgstr ""
+"O ícone CADEADO FECHADO indica que as config. são as mesmas que os valores "
+"do sistema (ou padrão) para o grupo de opções atual"
+
+#: src/slic3r/GUI/Tab.cpp:3444
+msgid ""
+"UNLOCKED LOCK icon indicates that some settings were changed and are not "
+"equal to the system (or default) values for the current option group.\n"
+"Click to reset all settings for current option group to the system (or "
+"default) values."
+msgstr ""
+"O ícone de CADEADO ABERTO indica que algumas config. foram alteradas e não "
+"são iguais aos valores do sistema (ou padrão) para o grupo de opções atual.\n"
+"Clique para redefinir todas as config. para o grupo de opções atual para os "
+"valores do sistema (ou padrão)."
+
+#: src/slic3r/GUI/Tab.cpp:3447
+msgid "WHITE BULLET icon indicates a non system (or non default) preset."
+msgstr ""
+"O ícone PONTO BRANCO indica uma predefinição que não é do sistema (ou não "
+"predefinida)."
+
+#: src/slic3r/GUI/Tab.cpp:3450
+msgid ""
+"WHITE BULLET icon indicates that the settings are the same as in the last "
+"saved preset for the current option group."
+msgstr ""
+"O ícone PONTO BRANCO indica que as config. são as mesmas da última "
+"predefinição salva para o grupo de opções atual."
+
+#: src/slic3r/GUI/Tab.cpp:3452
+msgid ""
+"BACK ARROW icon indicates that the settings were changed and are not equal "
+"to the last saved preset for the current option group.\n"
+"Click to reset all settings for the current option group to the last saved "
+"preset."
+msgstr ""
+"O ícone de REDEFINIR indica que as config. foram alteradas e não são iguais "
+"à última predefinição salva para o grupo de opções atual.\n"
+"Clique para redefinir todas as config. do grupo de opções atual para a "
+"última predefinição salva."
+
+#: src/slic3r/GUI/Tab.cpp:3458
+msgid ""
+"LOCKED LOCK icon indicates that the value is the same as the system (or "
+"default) value."
+msgstr ""
+"O ícone CADEADO FECHADO indica que o valor é o mesmo que o valor do sistema "
+"(ou padrão)."
+
+#: src/slic3r/GUI/Tab.cpp:3459
+msgid ""
+"UNLOCKED LOCK icon indicates that the value was changed and is not equal to "
+"the system (or default) value.\n"
+"Click to reset current value to the system (or default) value."
+msgstr ""
+"O ícone de CADEADO ABERTO indica que o valor foi alterado e não é igual ao "
+"valor do sistema (ou padrão).\n"
+"Clique para redefinir o valor atual para o valor do sistema (ou padrão)."
+
+#: src/slic3r/GUI/Tab.cpp:3465
+msgid ""
+"WHITE BULLET icon indicates that the value is the same as in the last saved "
+"preset."
+msgstr ""
+"O ícone PONTO BRANCO indica que o valor é o mesmo da última predefinição "
+"guardada."
+
+#: src/slic3r/GUI/Tab.cpp:3466
+msgid ""
+"BACK ARROW icon indicates that the value was changed and is not equal to the "
+"last saved preset.\n"
+"Click to reset current value to the last saved preset."
+msgstr ""
+"O ícone de REDEFINIR indica que o valor foi alterado e não é igual à última "
+"predefinição salva.\n"
+"Clique para redefinir o valor atual para a última predefinição salva."
+
+#. TRN Preset
+#: src/slic3r/GUI/Tab.cpp:3579
+#, c-format
+msgid "Save %s as:"
+msgstr "Salvar %s como:"
+
+#: src/slic3r/GUI/Tab.cpp:3623
+msgid "the following suffix is not allowed:"
+msgstr "o sufixo seguinte não é permitido:"
+
+#: src/slic3r/GUI/Tab.cpp:3627
+msgid "The supplied name is not available."
+msgstr "O nome fornecido não está disponível."
+
+#: src/slic3r/GUI/Tab.cpp:3640
+msgid "Material"
+msgstr "Material"
+
+#: src/slic3r/GUI/Tab.cpp:3642 src/slic3r/GUI/Tab.cpp:3733
+#: src/slic3r/GUI/wxExtensions.cpp:482
+msgid "Layers"
+msgstr "Camadas"
+
+#: src/slic3r/GUI/Tab.cpp:3741
+msgid "Support head"
+msgstr "Cabeça de suporte"
+
+#: src/slic3r/GUI/Tab.cpp:3746
+msgid "Support pillar"
+msgstr "Pilar de suporte"
+
+#: src/slic3r/GUI/Tab.cpp:3760
+msgid "Connection of the support sticks and junctions"
+msgstr "Conexão das varas de suporte e junções"
+
+#: src/slic3r/GUI/Tab.cpp:3765
+msgid "Automatic generation"
+msgstr "Geração Automática"
+
+#: src/slic3r/GUI/Tab.hpp:328 src/slic3r/GUI/Tab.hpp:428
+msgid "Print Settings"
+msgstr "Config. de impressão"
+
+#: src/slic3r/GUI/Tab.hpp:353
+msgid "Filament Settings"
+msgstr "Config. de filamento"
+
+#: src/slic3r/GUI/Tab.hpp:389
+msgid "Printer Settings"
+msgstr "Config. da impressora"
+
+#: src/slic3r/GUI/Tab.hpp:413
+msgid "Material Settings"
+msgstr "Config. de material"
+
+#: src/slic3r/GUI/Tab.hpp:440
+msgid "Save preset"
+msgstr "Salvar predefinição"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:38
+msgid "Update available"
+msgstr "Atualização disponível"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:38
+#, c-format
+msgid "New version of %s is available"
+msgstr "Nova versão do %s está disponível"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:45
+msgid "Current version:"
+msgstr "Versão atual:"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:47
+msgid "New version:"
+msgstr "Nova versão:"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:55
+msgid "Changelog && Download"
+msgstr "Changelog && Download"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:62 src/slic3r/GUI/UpdateDialogs.cpp:127
+msgid "Open changelog page"
+msgstr "Abra a página do changelog"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:67
+msgid "Open download page"
+msgstr "Abrir página de download"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:73
+msgid "Don't notify about new releases any more"
+msgstr "Não notifique mais sobre novas versões"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:91 src/slic3r/GUI/UpdateDialogs.cpp:207
+msgid "Configuration update"
+msgstr "Atualização de config."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:91
+msgid "Configuration update is available"
+msgstr "A atualização de config. está disponível"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:94
+msgid ""
+"Would you like to install it?\n"
+"\n"
+"Note that a full configuration snapshot will be created first. It can then "
+"be restored at any time should there be a problem with the new version.\n"
+"\n"
+"Updated configuration bundles:"
+msgstr ""
+"Gostaria de instalá-lo?\n"
+"\n"
+"Observe que uma captura da config. completa será criado primeiro. Ele pode "
+"então ser restaurado a qualquer momento se houver um problema com a nova "
+"versão.\n"
+"\n"
+"Pacotes de config. atualizados:"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:115
+msgid "Comment:"
+msgstr "Comentário:"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:151
+#, c-format
+msgid "%s incompatibility"
+msgstr "%s incompatibilidade"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:152
+#, c-format
+msgid "%s configuration is incompatible"
+msgstr "%s config. é incompatível"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:157
+#, c-format
+msgid ""
+"This version of %s is not compatible with currently installed configuration "
+"bundles.\n"
+"This probably happened as a result of running an older %s after using a "
+"newer one.\n"
+"\n"
+"You may either exit %s and try again with a newer version, or you may re-run "
+"the initial configuration. Doing so will create a backup snapshot of the "
+"existing configuration before installing files compatible with this %s.\n"
+msgstr ""
+"Esta versão do %s não é compatível com pacotes de config. atualmente "
+"instalados.\n"
+"Isso provavelmente aconteceu como resultado da execução de um %s mais antigo "
+"depois de usar um mais recente.\n"
+"\n"
+"Você pode sair %s e tente novamente com uma versão mais recente, ou você "
+"pode executar novamente a config. inicial. Isso criará um instantâneo de "
+"backup da config. existente antes de instalar os arquivos compatíveis com "
+"este %s.\n"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:166
+#, c-format
+msgid "This %s version: %s"
+msgstr "Esta versão %s : %s"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:171
+msgid "Incompatible bundles:"
+msgstr "Pacotes incompatíveis:"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:187
+#, c-format
+msgid "Exit %s"
+msgstr "Saída %s"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:190
+msgid "Re-configure"
+msgstr "Re-config.urar"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:211
+#, c-format
+msgid ""
+"%s now uses an updated configuration structure.\n"
+"\n"
+"So called 'System presets' have been introduced, which hold the built-in "
+"default settings for various printers. These System presets cannot be "
+"modified, instead, users now may create their own presets inheriting "
+"settings from one of the System presets.\n"
+"An inheriting preset may either inherit a particular value from its parent "
+"or override it with a customized value.\n"
+"\n"
+"Please proceed with the %s that follows to set up the new presets and to "
+"choose whether to enable automatic preset updates."
+msgstr ""
+"%s agora usa uma estrutura de config. atualizada.\n"
+"\n"
+"Assim chamado ' Predefinições do sistema ' foram introduzidas, que mantêm as "
+"config. padrão internas para várias impressoras. Essas predefinições do "
+"sistema não podem ser modificadas, em vez disso, os usuários agora podem "
+"criar suas próprias predefinições herdando as config. de uma das "
+"predefinições do sistema.\n"
+"Uma predefinição herdada pode herdar um valor específico de seu pai ou "
+"substituí-lo por um valor personalizado.\n"
+"\n"
+"Por favor, prossiga com o %s que se segue para config.urar as novas "
+"predefinições e para escolher se deseja ativar as atualizações automáticas "
+"predefinidas."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:227
+msgid "For more information please visit our wiki page:"
+msgstr "Para mais informações, visite a nossa página wiki:"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:14
+msgid "Ramming customization"
+msgstr "Personalização de Ramming"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:40
+msgid ""
+"Ramming denotes the rapid extrusion just before a tool change in a single-"
+"extruder MM printer. Its purpose is to properly shape the end of the "
+"unloaded filament so it does not prevent insertion of the new filament and "
+"can itself be reinserted later. This phase is important and different "
+"materials can require different extrusion speeds to get the good shape. For "
+"this reason, the extrusion rates during ramming are adjustable.\n"
+"\n"
+"This is an expert-level setting, incorrect adjustment will likely lead to "
+"jams, extruder wheel grinding into filament etc."
+msgstr ""
+"O Ramming denota a extrusão rápida apenas antes que uma mudança da "
+"ferramenta em uma única-extrusora a impressora de multifilamentos Sua "
+"finalidade é moldar corretamente a extremidade do filamento descarregado "
+"assim que não impede a inserção do filamento novo e pode próprio ser "
+"reintroduzido mais tarde. Esta fase é importante e os materiais diferentes "
+"podem exigir velocidades diferentes da extrusão para começ a boa forma. Por "
+"esta razão, as taxas de extrusão durante a batendo são ajustáveis.\n"
+"\n"
+"Esta é uma config. de nível especialista, ajuste incorreto provavelmente "
+"levará a compotas, roda extrusora moagem em filamento etc."
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:82
+msgid "Total ramming time"
+msgstr "Tempo total de Ramming"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:84
+msgid "Total rammed volume"
+msgstr "Volume total de Ramming"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:88
+msgid "Ramming line width"
+msgstr "Largura da linha de Ramming"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:90
+msgid "Ramming line spacing"
+msgstr "Espaçamento de linha de Ramming"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:141
+msgid "Wipe tower - Purging volume adjustment"
+msgstr "Torre de limpeza - Ajuste de volume de purga"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:225
+msgid ""
+"Here you can adjust required purging volume (mm³) for any given pair of "
+"tools."
+msgstr ""
+"Aqui você pode ajustar o volume de purga necessário (mm ³) para qualquer par "
+"dado de ferramentas."
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:226
+msgid "Extruder changed to"
+msgstr "Extrusora alterada para"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:234
+msgid "unloaded"
+msgstr "descarregado"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:235
+msgid "loaded"
+msgstr "carregado"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:240
+msgid "Tool #"
+msgstr "Ferramenta #"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:247
+msgid ""
+"Total purging volume is calculated by summing two values below, depending on "
+"which tools are loaded/unloaded."
+msgstr ""
+"O volume de purga total é calculado somando-se dois valores abaixo, "
+"dependendo de quais ferramentas são carregadas/descarregadas."
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:248
+msgid "Volume to purge (mm³) when the filament is being"
+msgstr "Volume a purgar (mm ³) quando o filamento está a ser"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:262
+msgid "From"
+msgstr "De"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:327
+msgid ""
+"Switching to simple settings will discard changes done in the advanced "
+"mode!\n"
+"\n"
+"Do you want to proceed?"
+msgstr ""
+"Mudar para config. simples irá descartar as alterações feitas no modo "
+"avançado!\n"
+"\n"
+"Você quer prosseguir?"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:339
+msgid "Show simplified settings"
+msgstr "Mostrar config. simplificadas"
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:339
+msgid "Show advanced settings"
+msgstr "Mostrar opções avançadas"
+
+#: src/slic3r/GUI/wxExtensions.cpp:471
+msgid "Instances"
+msgstr "Instâncias"
+
+#: src/slic3r/GUI/wxExtensions.cpp:475 src/slic3r/GUI/wxExtensions.cpp:619
+#, c-format
+msgid "Instance %d"
+msgstr "Instância %d"
+
+#: src/slic3r/GUI/wxExtensions.cpp:509
+msgid "Range"
+msgstr "Intervalo"
+
+#: src/slic3r/GUI/wxExtensions.cpp:2731
+msgid "One layer mode"
+msgstr "Modo de uma camada"
+
+#: src/slic3r/GUI/wxExtensions.cpp:2732
+msgid "Add/Del color change"
+msgstr "Add/Excluir mudança de cor"
+
+#: src/slic3r/GUI/wxExtensions.cpp:2733
+msgid "Discard all color changes"
+msgstr "Descartar todas as alterações de cor"
+
+#: src/slic3r/GUI/wxExtensions.cpp:2993
+#, c-format
+msgid "Switch to the %s mode"
+msgstr "Mude para o modo %s"
+
+#: src/slic3r/GUI/wxExtensions.cpp:2994
+#, c-format
+msgid "Current mode is %s"
+msgstr "O modo atual é %s"
+
+#: src/slic3r/Utils/Duet.cpp:51
+msgid "Connection to Duet works correctly."
+msgstr "A conexão com o Duet funciona corretamente."
+
+#: src/slic3r/Utils/Duet.cpp:56
+msgid "Could not connect to Duet"
+msgstr "Não foi possível conectar-se ao Duet"
+
+#: src/slic3r/Utils/Duet.cpp:84 src/slic3r/Utils/Duet.cpp:154
+msgid "Unknown error occured"
+msgstr "Ocorreu um erro desconhecido"
+
+#: src/slic3r/Utils/Duet.cpp:148
+msgid "Wrong password"
+msgstr "Senha incorreta"
+
+#: src/slic3r/Utils/Duet.cpp:151
+msgid "Could not get resources to create a new connection"
+msgstr "Não foi possível obter recursos para criar uma nova conexão"
+
+#: src/slic3r/Utils/OctoPrint.cpp:70
+#, c-format
+msgid "Mismatched type of print host: %s"
+msgstr "Tipo incompatível de host de impressão: %s"
+
+#: src/slic3r/Utils/OctoPrint.cpp:85
+msgid "Connection to OctoPrint works correctly."
+msgstr "A ligação ao OctoPrint funciona correctamente."
+
+#: src/slic3r/Utils/OctoPrint.cpp:91
+msgid "Could not connect to OctoPrint"
+msgstr "Não foi possível conectar-se ao OctoPrint"
+
+#: src/slic3r/Utils/OctoPrint.cpp:91
+msgid "Note: OctoPrint version at least 1.1.0 is required."
+msgstr "Nota: OctoPrint versão pelo menos 1.1.0 é necessária."
+
+#: src/slic3r/Utils/OctoPrint.cpp:196
+msgid "Connection to Prusa SL1 works correctly."
+msgstr "A conexão com o Prusa SL1 funciona corretamente."
+
+#: src/slic3r/Utils/OctoPrint.cpp:201
+msgid "Could not connect to Prusa SLA"
+msgstr "Não foi possível conectar-se a Prusa SLA"
+
+#: src/slic3r/Utils/PresetUpdater.cpp:614
+#, c-format
+msgid "requires min. %s and max. %s"
+msgstr "requer min . %s e máx.  %s"
+
+#: src/slic3r/Utils/PresetUpdater.cpp:619
+#, c-format
+msgid "requires min. %s"
+msgstr "requer min . %s"
+
+#: src/slic3r/Utils/PresetUpdater.cpp:621
+#, c-format
+msgid "requires max. %s"
+msgstr "requer Max.  %s"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:219
+#: src/slic3r/Utils/FixModelByWin10.cpp:359
+msgid "Exporting source model"
+msgstr "Exportando o modelo de origem"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:235
+msgid "Failed loading the input model."
+msgstr "Falha ao carregar o modelo de entrada."
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:242
+msgid "Repairing model by the Netfabb service"
+msgstr "Modelo de reparação pelo serviço Netfabb"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:248
+msgid "Mesh repair failed."
+msgstr "Falha na reparação de malha."
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:251
+#: src/slic3r/Utils/FixModelByWin10.cpp:378
+msgid "Loading repaired model"
+msgstr "Carregando o modelo reparado"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:263
+#: src/slic3r/Utils/FixModelByWin10.cpp:270
+#: src/slic3r/Utils/FixModelByWin10.cpp:302
+msgid "Saving mesh into the 3MF container failed."
+msgstr "Falha ao salvar a malha 3MF no contêiner."
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:340
+msgid "Model fixing"
+msgstr "Fixação do modelo"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:341
+msgid "Exporting model..."
+msgstr "Exportando o modelo..."
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:368
+msgid "Export of a temporary 3mf file failed"
+msgstr "Falha na exportação de um arquivo 3mf temporário"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:383
+msgid "Import of the repaired 3mf file failed"
+msgstr "Falha na importação do arquivo 3mf reparado"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:385
+msgid "Repaired 3MF file does not contain any object"
+msgstr "O arquivo 3MF reparado não contém nenhum objeto"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:387
+msgid "Repaired 3MF file contains more than one object"
+msgstr "O arquivo 3MF reparado contém mais de um objeto"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:389
+msgid "Repaired 3MF file does not contain any volume"
+msgstr "O arquivo 3MF reparado não contém nenhum volume"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:391
+msgid "Repaired 3MF file contains more than one volume"
+msgstr "O arquivo 3MF reparado contém mais de um volume"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:400
+msgid "Model repair finished"
+msgstr "Reparo do modelo terminado"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:406
+msgid "Model repair canceled"
+msgstr "Reparo do modelo cancelado"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:423
+msgid "Model repaired successfully"
+msgstr "Modelo reparado com sucesso"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:423
+#: src/slic3r/Utils/FixModelByWin10.cpp:426
+msgid "Model Repair by the Netfabb service"
+msgstr "Reparação de modelos pelo serviço Netfabb"
+
+#: src/slic3r/Utils/FixModelByWin10.cpp:426
+msgid "Model repair failed: \n"
+msgstr "Falha no reparo do modelo:\n"
+
+#: src/libslic3r/Zipper.cpp:32
+msgid "undefined error"
+msgstr "erro indefinido"
+
+#: src/libslic3r/Zipper.cpp:34
+msgid "too many files"
+msgstr "muitos arquivos"
+
+#: src/libslic3r/Zipper.cpp:36
+msgid "file too large"
+msgstr "arquivo muito grande"
+
+#: src/libslic3r/Zipper.cpp:38
+msgid "unsupported method"
+msgstr "método não suportado"
+
+#: src/libslic3r/Zipper.cpp:40
+msgid "unsupported encryption"
+msgstr "criptografia sem suporte"
+
+#: src/libslic3r/Zipper.cpp:42
+msgid "unsupported feature"
+msgstr "recurso não suportado"
+
+#: src/libslic3r/Zipper.cpp:44
+msgid "failed finding central directory"
+msgstr "falha ao encontrar o diretório central"
+
+#: src/libslic3r/Zipper.cpp:46
+msgid "not a ZIP archive"
+msgstr "não um arquivo ZIP"
+
+#: src/libslic3r/Zipper.cpp:48
+msgid "invalid header or archive is corrupted"
+msgstr "cabeçalho ou arquivo inválido está corrompido"
+
+#: src/libslic3r/Zipper.cpp:50
+msgid "unsupported multidisk archive"
+msgstr "arquivo Multidisk sem suporte"
+
+#: src/libslic3r/Zipper.cpp:52
+msgid "decompression failed or archive is corrupted"
+msgstr "descompressão falhou ou arquivo está corrompido"
+
+#: src/libslic3r/Zipper.cpp:54
+msgid "compression failed"
+msgstr "falha na compactação"
+
+#: src/libslic3r/Zipper.cpp:56
+msgid "unexpected decompressed size"
+msgstr "tamanho descomprimido inesperado"
+
+#: src/libslic3r/Zipper.cpp:58
+msgid "CRC-32 check failed"
+msgstr "Verificação CRC-32 falhou"
+
+#: src/libslic3r/Zipper.cpp:60
+msgid "unsupported central directory size"
+msgstr "tamanho do diretório central não suportado"
+
+#: src/libslic3r/Zipper.cpp:62
+msgid "allocation failed"
+msgstr "alocação falhou"
+
+#: src/libslic3r/Zipper.cpp:64
+msgid "file open failed"
+msgstr "falha na abertura do arquivo"
+
+#: src/libslic3r/Zipper.cpp:66
+msgid "file create failed"
+msgstr "falha na criação do arquivo"
+
+#: src/libslic3r/Zipper.cpp:68
+msgid "file write failed"
+msgstr "falha na gravação do arquivo"
+
+#: src/libslic3r/Zipper.cpp:70
+msgid "file read failed"
+msgstr "falha na leitura do arquivo"
+
+#: src/libslic3r/Zipper.cpp:72
+msgid "file close failed"
+msgstr "falha ao fechar o arquivo"
+
+#: src/libslic3r/Zipper.cpp:74
+msgid "file seek failed"
+msgstr "falha na busca de arquivo"
+
+#: src/libslic3r/Zipper.cpp:76
+msgid "file stat failed"
+msgstr "falha no status do arquivo"
+
+#: src/libslic3r/Zipper.cpp:78
+msgid "invalid parameter"
+msgstr "parâmetro inválido"
+
+#: src/libslic3r/Zipper.cpp:80
+msgid "invalid filename"
+msgstr "nome de arquivo inválido"
+
+#: src/libslic3r/Zipper.cpp:82
+msgid "buffer too small"
+msgstr "buffer muito pequeno"
+
+#: src/libslic3r/Zipper.cpp:84
+msgid "internal error"
+msgstr "erro interno"
+
+#: src/libslic3r/Zipper.cpp:86
+msgid "file not found"
+msgstr "arquivo não encontrado"
+
+#: src/libslic3r/Zipper.cpp:88
+msgid "archive is too large"
+msgstr "arquivo é muito grande"
+
+#: src/libslic3r/Zipper.cpp:90
+msgid "validation failed"
+msgstr "falha na validação"
+
+#: src/libslic3r/Zipper.cpp:92
+msgid "write calledback failed"
+msgstr "write calledback falhou"
+
+#: src/libslic3r/Zipper.cpp:102
+msgid "Error with zip archive"
+msgstr "Erro com arquivo zip"
+
+#: src/libslic3r/Print.cpp:1112
+msgid "All objects are outside of the print volume."
+msgstr "Todos os objetos estão fora do volume de impressão."
+
+#: src/libslic3r/Print.cpp:1139
+msgid "Some objects are too close; your extruder will collide with them."
+msgstr "Alguns objetos são muito próximos; sua extrusora irá colidir com eles."
+
+#: src/libslic3r/Print.cpp:1154
+msgid ""
+"Some objects are too tall and cannot be printed without extruder collisions."
+msgstr ""
+"Alguns objetos são muito altos e não podem ser impressos sem colisões de "
+"extrusoras."
+
+#: src/libslic3r/Print.cpp:1164
+msgid "The Spiral Vase option can only be used when printing a single object."
+msgstr "A opção vaso espiral só pode ser usada ao imprimir um único objeto."
+
+#: src/libslic3r/Print.cpp:1171
+msgid ""
+"The Spiral Vase option can only be used when printing single material "
+"objects."
+msgstr ""
+"A opção vaso espiral só pode ser usada ao imprimir objetos de material único."
+
+#: src/libslic3r/Print.cpp:1184
+msgid ""
+"The wipe tower is only supported if all extruders have the same nozzle "
+"diameter and use filaments of the same diameter."
+msgstr ""
+"A torre de limpeza só é suportada se todas as extrusoras tiverem o mesmo "
+"diâmetro da ponteira e usarem filamentos do mesmo diâmetro."
+
+#: src/libslic3r/Print.cpp:1189
+msgid ""
+"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter "
+"and Repetier G-code flavors."
+msgstr ""
+"A Wipe Tower é atualmente suportada apenas para os firmwares Marlin, RepRap/"
+"Sprinter e Repetier G-code."
+
+#: src/libslic3r/Print.cpp:1191
+msgid ""
+"The Wipe Tower is currently only supported with the relative extruder "
+"addressing (use_relative_e_distances=1)."
+msgstr ""
+"A torre da limpeza é suportada atualmente somente com o endereçamento "
+"relativo da extrusora (use_relative_e_distances = 1)."
+
+#: src/libslic3r/Print.cpp:1193
+msgid "Ooze prevention is currently not supported with the wipe tower enabled."
+msgstr ""
+"A prevenção de escorrimento não é suportada atualmente com a torre da "
+"limpeza permitida."
+
+#: src/libslic3r/Print.cpp:1214
+msgid ""
+"The Wipe Tower is only supported for multiple objects if they have equal "
+"layer heights"
+msgstr ""
+"A torre de limpeza só é suportada para vários objetos se eles tiverem "
+"alturas de camada iguais"
+
+#: src/libslic3r/Print.cpp:1216
+msgid ""
+"The Wipe Tower is only supported for multiple objects if they are printed "
+"over an equal number of raft layers"
+msgstr ""
+"A torre de limpeza só é suportada para vários objetos se elas forem "
+"impressas em um número igual de camadas de estrado"
+
+#: src/libslic3r/Print.cpp:1218
+msgid ""
+"The Wipe Tower is only supported for multiple objects if they are printed "
+"with the same support_material_contact_distance"
+msgstr ""
+"A torre de limpeza só é suportado para vários objetos se eles são impressos "
+"com a mesma distância de contato do suporte"
+
+#: src/libslic3r/Print.cpp:1220
+msgid ""
+"The Wipe Tower is only supported for multiple objects if they are sliced "
+"equally."
+msgstr ""
+"A torre de limpeza só é suportada para vários objetos se eles são fatiados "
+"igualmente."
+
+#: src/libslic3r/Print.cpp:1248
+msgid ""
+"The Wipe tower is only supported if all objects have the same layer height "
+"profile"
+msgstr ""
+"A torre de limpeza só é suportada se todos os objetos tiverem o mesmo perfil "
+"de altura da camada"
+
+#: src/libslic3r/Print.cpp:1258
+msgid "The supplied settings will cause an empty print."
+msgstr "As config. fornecidas causarão uma impressão vazia."
+
+#: src/libslic3r/Print.cpp:1275
+msgid ""
+"One or more object were assigned an extruder that the printer does not have."
+msgstr ""
+"Um ou mais objetos foram atribuídos a uma extrusora que a impressora não tem."
+
+#: src/libslic3r/Print.cpp:1284
+msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm"
+msgstr ""
+"%1% = %2% mm é muito baixo para ser impresso a uma altura de camada %3% mm"
+
+#: src/libslic3r/Print.cpp:1287
+msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm"
+msgstr ""
+"Excesso %1%=%2% milímetro a ser imprimível com um diâmetro da ponteira %3% "
+"milímetro"
+
+#: src/libslic3r/Print.cpp:1298
+msgid ""
+"Printing with multiple extruders of differing nozzle diameters. If support "
+"is to be printed with the current extruder (support_material_extruder == 0 "
+"or support_material_interface_extruder == 0), all nozzles have to be of the "
+"same diameter."
+msgstr ""
+"Impressão com múltiplas extrusoras de diferentes diâmetros de bicos. Se a "
+"sustentação deve ser imprimida com a extrusora atual "
+"(support_material_extruder = = 0 ou support_material_interface_extruder = = "
+"0), todos as ponteiras têm que ser do mesmo diâmetro."
+
+#: src/libslic3r/Print.cpp:1306
+msgid ""
+"For the Wipe Tower to work with the soluble supports, the support layers "
+"need to be synchronized with the object layers."
+msgstr ""
+"Para que a torre de limpeza funcione com os suportes solúveis, as camadas de "
+"suporte precisam ser sincronizadas com as camadas de objeto."
+
+#: src/libslic3r/Print.cpp:1310
+msgid ""
+"The Wipe Tower currently supports the non-soluble supports only if they are "
+"printed with the current extruder without triggering a tool change. (both "
+"support_material_extruder and support_material_interface_extruder need to be "
+"set to 0)."
+msgstr ""
+"A torre de limpeza suporta atualmente os suportes não-solúveis somente se "
+"são imprimidos com o extrusor atual sem provocar uma mudança da ferramenta. "
+"(ambos support_material_extruder e support_material_interface_extruder "
+"precisam ser definidos como 0)."
+
+#: src/libslic3r/Print.cpp:1332
+msgid "First layer height can't be greater than nozzle diameter"
+msgstr ""
+"A primeira altura da camada não pode ser maior do que o diâmetro da ponteira"
+
+#: src/libslic3r/Print.cpp:1337
+msgid "Layer height can't be greater than nozzle diameter"
+msgstr "A altura da camada não pode ser maior do que o diâmetro da ponteira"
+
+#: src/libslic3r/Print.cpp:1492
+msgid "Infilling layers"
+msgstr "Camadas de preenchimento"
+
+#: src/libslic3r/Print.cpp:1500
+msgid "Generating skirt"
+msgstr "Gerando saia"
+
+#: src/libslic3r/Print.cpp:1508
+msgid "Generating brim"
+msgstr "Gerando a aba"
+
+#: src/libslic3r/Print.cpp:1536
+msgid "Exporting G-code"
+msgstr "Exportando o G-code"
+
+#: src/libslic3r/Print.cpp:1540
+msgid "Generating G-code"
+msgstr "Gerando G-code"
+
+#: src/libslic3r/SLAPrint.cpp:64
+msgid "Slicing model"
+msgstr "Modelo de fatiamento"
+
+#: src/libslic3r/SLAPrint.cpp:65 src/libslic3r/SLAPrint.cpp:899
+msgid "Generating support points"
+msgstr "Gerando pontos de suporte"
+
+#: src/libslic3r/SLAPrint.cpp:66
+msgid "Generating support tree"
+msgstr "Gerando suporte em árvore"
+
+#: src/libslic3r/SLAPrint.cpp:67
+msgid "Generating pad"
+msgstr "Gerando pad"
+
+#: src/libslic3r/SLAPrint.cpp:68
+msgid "Slicing supports"
+msgstr "Fatiando suportes"
+
+#: src/libslic3r/SLAPrint.cpp:85
+msgid "Merging slices and calculating statistics"
+msgstr "Mesclando camadas e calculando estatísticas"
+
+#: src/libslic3r/SLAPrint.cpp:86
+msgid "Rasterizing layers"
+msgstr "Rasterizando camadas"
+
+#: src/libslic3r/SLAPrint.cpp:661
+msgid ""
+"Cannot proceed without support points! Add support points or disable support "
+"generation."
+msgstr ""
+"Não pode prosseguir sem pontos de suporte! Adicione pontos de suporte ou "
+"desative a geração de suporte."
+
+#: src/libslic3r/SLAPrint.cpp:678
+msgid ""
+"Elevation is too low for object. Use the \"Pad around object\" feature to "
+"print the object without elevation."
+msgstr ""
+"A elevação é muito baixa para o objeto. Use o recurso \"pad ao redor do "
+"objeto\" para imprimir o objeto sem elevação."
+
+#: src/libslic3r/SLAPrint.cpp:684
+msgid ""
+"The endings of the support pillars will be deployed on the gap between the "
+"object and the pad. 'Support base safety distance' has to be greater than "
+"the 'Pad object gap' parameter to avoid this."
+msgstr ""
+"As terminações dos pilares de suporte serão implantadas na lacuna entre o "
+"objeto e o pad. ' Distância de segurança de base de suporte ' tem de ser "
+"maior do que o parâmetro ' pad objecto Gap ' para evitar este."
+
+#: src/libslic3r/SLAPrint.cpp:696
+msgid "Exposition time is out of printer profile bounds."
+msgstr "O tempo de exposição está fora dos limites do perfil da impressora."
+
+#: src/libslic3r/SLAPrint.cpp:703
+msgid "Initial exposition time is out of printer profile bounds."
+msgstr ""
+"O tempo de exposição inicial está fora dos limites do perfil da impressora."
+
+#: src/libslic3r/SLAPrint.cpp:787
+msgid ""
+"Slicing had to be stopped due to an internal error: Inconsistent slice index."
+msgstr ""
+"O fatiamento teve que ser parado devido a um erro interno: índice de "
+"fatiamento inconsistente."
+
+#: src/libslic3r/SLAPrint.cpp:982 src/libslic3r/SLAPrint.cpp:992
+#: src/libslic3r/SLAPrint.cpp:1033
+msgid "Visualizing supports"
+msgstr "Visualizando suportes"
+
+#: src/libslic3r/SLAPrint.cpp:1566
+msgid "Slicing done"
+msgstr "Fatiamento pronto"
+
+#: src/libslic3r/PrintBase.cpp:71
+msgid "Failed processing of the output_filename_format template."
+msgstr "Falha no processamento do modelo output_filename_format."
+
+#: src/libslic3r/PrintConfig.cpp:43 src/libslic3r/PrintConfig.cpp:44
+msgid "Printer technology"
+msgstr "Tecnologia da impressora"
+
+#: src/libslic3r/PrintConfig.cpp:51
+msgid "Bed shape"
+msgstr "Formato da mesa"
+
+#: src/libslic3r/PrintConfig.cpp:56
+msgid "Bed custom texture"
+msgstr "Textura customizada da mesa"
+
+#: src/libslic3r/PrintConfig.cpp:61
+msgid "Bed custom model"
+msgstr "Modelo customizado da mesa"
+
+#: src/libslic3r/PrintConfig.cpp:68
+msgid ""
+"This setting controls the height (and thus the total number) of the slices/"
+"layers. Thinner layers give better accuracy but take more time to print."
+msgstr ""
+"Essa config. controla a altura (e, portanto, o número total) das fatias/"
+"camadas. Camadas mais finas dão melhor precisão, mas levam mais tempo para "
+"imprimir."
+
+#: src/libslic3r/PrintConfig.cpp:75
+msgid "Max print height"
+msgstr "Altura máxima de impressão"
+
+#: src/libslic3r/PrintConfig.cpp:76
+msgid ""
+"Set this to the maximum height that can be reached by your extruder while "
+"printing."
+msgstr ""
+"Defina isto para a altura máxima que pode ser alcançada pela sua extrusora "
+"durante a impressão."
+
+#: src/libslic3r/PrintConfig.cpp:82
+msgid "Slice gap closing radius"
+msgstr "Raio de fechamento da abertura da fatia"
+
+#: src/libslic3r/PrintConfig.cpp:84
+msgid ""
+"Cracks smaller than 2x gap closing radius are being filled during the "
+"triangle mesh slicing. The gap closing operation may reduce the final print "
+"resolution, therefore it is advisable to keep the value reasonably low."
+msgstr ""
+"As rachaduras menores do que duas vezes o  raio de fechamento estão sendo "
+"preenchidas durante o fatiamento da malha triangular. A operação de "
+"fechamento de vão pode reduzir a resolução final de impressão, portanto, é "
+"aconselhável manter o valor razoavelmente baixo."
+
+#: src/libslic3r/PrintConfig.cpp:92
+msgid "Hostname, IP or URL"
+msgstr "Hostname, IP ou URL"
+
+#: src/libslic3r/PrintConfig.cpp:93
+msgid ""
+"Slic3r can upload G-code files to a printer host. This field should contain "
+"the hostname, IP address or URL of the printer host instance."
+msgstr ""
+"Slic3r pode carregar arquivos de G-code para um host de impressora. Este "
+"campo deve conter o nome de host, o endereço IP ou a URL da instância de "
+"host da impressora."
+
+#: src/libslic3r/PrintConfig.cpp:99
+msgid "API Key / Password"
+msgstr "Chave de API/senha"
+
+#: src/libslic3r/PrintConfig.cpp:100
+msgid ""
+"Slic3r can upload G-code files to a printer host. This field should contain "
+"the API Key or the password required for authentication."
+msgstr ""
+"Slic3r pode carregar arquivos de G-code para um host de impressora. Este "
+"campo deve conter a chave de API ou a senha exigida para a autenticação."
+
+#: src/libslic3r/PrintConfig.cpp:106
+msgid "HTTPS CA File"
+msgstr "Arquivo de CA HTTPS"
+
+#: src/libslic3r/PrintConfig.cpp:107
+msgid ""
+"Custom CA certificate file can be specified for HTTPS OctoPrint connections, "
+"in crt/pem format. If left blank, the default OS CA certificate repository "
+"is used."
+msgstr ""
+"O arquivo de certificado de CA personalizado pode ser especificado para "
+"conexões HTTPS OctoPrint, no formato CRT/PEM. Se deixado em branco, o "
+"repositório de certificados do OS CA padrão é usado."
+
+#: src/libslic3r/PrintConfig.cpp:121
+msgid "Avoid crossing perimeters"
+msgstr "Evitar cruzamento de perímetros"
+
+#: src/libslic3r/PrintConfig.cpp:122
+msgid ""
+"Optimize travel moves in order to minimize the crossing of perimeters. This "
+"is mostly useful with Bowden extruders which suffer from oozing. This "
+"feature slows down both the print and the G-code generation."
+msgstr ""
+"Otimize os movimentos de viagem para minimizar o cruzamento de perímetros. "
+"Isto é principalmente útil com extrusoras Bowden que sofrem de escorrimento. "
+"Este recurso retarda a impressão e a geração de G-code."
+
+#: src/libslic3r/PrintConfig.cpp:129 src/libslic3r/PrintConfig.cpp:2027
+msgid "Other layers"
+msgstr "Outras camadas"
+
+#: src/libslic3r/PrintConfig.cpp:130
+msgid ""
+"Bed temperature for layers after the first one. Set this to zero to disable "
+"bed temperature control commands in the output."
+msgstr ""
+"Temperatura da mesa para camadas após o primeiro. Defina isso como zero para "
+"desabilitar os comandos de controle de temperatura da mesa na saída."
+
+#: src/libslic3r/PrintConfig.cpp:132
+msgid "Bed temperature"
+msgstr "Temperatura da mesa"
+
+#: src/libslic3r/PrintConfig.cpp:139
+msgid ""
+"This custom code is inserted at every layer change, right before the Z move. "
+"Note that you can use placeholder variables for all Slic3r settings as well "
+"as [layer_num] and [layer_z]."
+msgstr ""
+"Esse código personalizado é inserido em cada alteração de camada, logo antes "
+"da movimentação Z. Observe que você pode usar variáveis de espaço reservado "
+"para todas as config. Slic3r, bem como [layer_num] e [layer_z]."
+
+#: src/libslic3r/PrintConfig.cpp:149
+msgid "Between objects G-code"
+msgstr "G-code entre objetos"
+
+#: src/libslic3r/PrintConfig.cpp:150
+msgid ""
+"This code is inserted between objects when using sequential printing. By "
+"default extruder and bed temperature are reset using non-wait command; "
+"however if M104, M109, M140 or M190 are detected in this custom code, Slic3r "
+"will not add temperature commands. Note that you can use placeholder "
+"variables for all Slic3r settings, so you can put a \"M109 "
+"S[first_layer_temperature]\" command wherever you want."
+msgstr ""
+"Esse código é inserido entre objetos ao usar a impressão sequencial. Por "
+"padrão, a extrusora e a temperatura da mesa são redefinidas usando o comando "
+"não esperar; no entanto, se M104, M109, M140 ou M190 são detectados neste "
+"código personalizado, Slic3r não adicionará comandos de temperatura. Observe "
+"que você pode usar variáveis de espaço reservado para todas as config. de "
+"Slic3r, para que você possa colocar um comando \"M109 S "
+"[temperatura_primeira_camada]\" onde quiser."
+
+#: src/libslic3r/PrintConfig.cpp:161
+msgid "Number of solid layers to generate on bottom surfaces."
+msgstr "Número de camadas sólidas para gerar em superfícies inferiores."
+
+#: src/libslic3r/PrintConfig.cpp:162
+msgid "Bottom solid layers"
+msgstr "Camadas sólidas inferiores"
+
+#: src/libslic3r/PrintConfig.cpp:167
+msgid "Bridge"
+msgstr "Ponte"
+
+#: src/libslic3r/PrintConfig.cpp:168
+msgid ""
+"This is the acceleration your printer will use for bridges. Set zero to "
+"disable acceleration control for bridges."
+msgstr ""
+"Esta é a aceleração que sua impressora usará para pontes. Defina zero para "
+"desabilitar o controle de aceleração para pontes."
+
+#: src/libslic3r/PrintConfig.cpp:170 src/libslic3r/PrintConfig.cpp:313
+#: src/libslic3r/PrintConfig.cpp:840 src/libslic3r/PrintConfig.cpp:961
+#: src/libslic3r/PrintConfig.cpp:1130 src/libslic3r/PrintConfig.cpp:1183
+#: src/libslic3r/PrintConfig.cpp:1194 src/libslic3r/PrintConfig.cpp:1383
+msgid "mm/s²"
+msgstr "mm/s²"
+
+#: src/libslic3r/PrintConfig.cpp:176
+msgid "Bridging angle"
+msgstr "Ângulo de ponte"
+
+#: src/libslic3r/PrintConfig.cpp:178
+msgid ""
+"Bridging angle override. If left to zero, the bridging angle will be "
+"calculated automatically. Otherwise the provided angle will be used for all "
+"bridges. Use 180° for zero angle."
+msgstr ""
+"Sobreposição de ângulo de ponte. Se deixado em zero, o ângulo de ponte será "
+"calculado automaticamente. Caso contrário, o ângulo fornecido será usado "
+"para todas as pontes. Use 180 ° para o ângulo zero."
+
+#: src/libslic3r/PrintConfig.cpp:181 src/libslic3r/PrintConfig.cpp:758
+#: src/libslic3r/PrintConfig.cpp:1619 src/libslic3r/PrintConfig.cpp:1629
+#: src/libslic3r/PrintConfig.cpp:1858 src/libslic3r/PrintConfig.cpp:2012
+#: src/libslic3r/PrintConfig.cpp:2197 src/libslic3r/PrintConfig.cpp:2614
+#: src/libslic3r/PrintConfig.cpp:2724
+msgid "°"
+msgstr "°"
+
+#: src/libslic3r/PrintConfig.cpp:187
+msgid "Bridges fan speed"
+msgstr "Velocidade da ventoinha nas pontes"
+
+#: src/libslic3r/PrintConfig.cpp:188
+msgid "This fan speed is enforced during all bridges and overhangs."
+msgstr ""
+"Esta velocidade da ventoinha é imposta durante todas as pontes e angulações."
+
+#: src/libslic3r/PrintConfig.cpp:189 src/libslic3r/PrintConfig.cpp:770
+#: src/libslic3r/PrintConfig.cpp:1203 src/libslic3r/PrintConfig.cpp:1266
+#: src/libslic3r/PrintConfig.cpp:1511 src/libslic3r/PrintConfig.cpp:2366
+#: src/libslic3r/PrintConfig.cpp:2654
+msgid "%"
+msgstr "%"
+
+#: src/libslic3r/PrintConfig.cpp:196
+msgid "Bridge flow ratio"
+msgstr "Relação de fluxo da ponte"
+
+#: src/libslic3r/PrintConfig.cpp:198
+msgid ""
+"This factor affects the amount of plastic for bridging. You can decrease it "
+"slightly to pull the extrudates and prevent sagging, although default "
+"settings are usually good and you should experiment with cooling (use a fan) "
+"before tweaking this."
+msgstr ""
+"Esse fator afeta a quantidade de plástico para a ponte. Você pode diminuí-lo "
+"um pouco para puxar as extrusões e evitar a flacidez, embora as config. "
+"padrão são geralmente boas e você deve experimentar com refrigeração (use "
+"uma ventoinha) antes de ajustes isso."
+
+#: src/libslic3r/PrintConfig.cpp:208
+msgid "Bridges"
+msgstr "Pontes"
+
+#: src/libslic3r/PrintConfig.cpp:210
+msgid "Speed for printing bridges."
+msgstr "Velocidade para a impressão de pontes."
+
+#: src/libslic3r/PrintConfig.cpp:211 src/libslic3r/PrintConfig.cpp:592
+#: src/libslic3r/PrintConfig.cpp:600 src/libslic3r/PrintConfig.cpp:609
+#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:644
+#: src/libslic3r/PrintConfig.cpp:663 src/libslic3r/PrintConfig.cpp:899
+#: src/libslic3r/PrintConfig.cpp:1026 src/libslic3r/PrintConfig.cpp:1112
+#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1161
+#: src/libslic3r/PrintConfig.cpp:1172 src/libslic3r/PrintConfig.cpp:1225
+#: src/libslic3r/PrintConfig.cpp:1284 src/libslic3r/PrintConfig.cpp:1412
+#: src/libslic3r/PrintConfig.cpp:1586 src/libslic3r/PrintConfig.cpp:1595
+#: src/libslic3r/PrintConfig.cpp:1991 src/libslic3r/PrintConfig.cpp:2104
+msgid "mm/s"
+msgstr "mm/s"
+
+#: src/libslic3r/PrintConfig.cpp:218
+msgid "Brim width"
+msgstr "Largura da aba"
+
+#: src/libslic3r/PrintConfig.cpp:219
+msgid ""
+"Horizontal width of the brim that will be printed around each object on the "
+"first layer."
+msgstr ""
+"Largura horizontal da aba que será impressa em torno de cada objeto na "
+"primeira camada."
+
+#: src/libslic3r/PrintConfig.cpp:226
+msgid "Clip multi-part objects"
+msgstr "Clip objetos de várias partes"
+
+#: src/libslic3r/PrintConfig.cpp:227
+msgid ""
+"When printing multi-material objects, this settings will make Slic3r to clip "
+"the overlapping object parts one by the other (2nd part will be clipped by "
+"the 1st, 3rd part will be clipped by the 1st and 2nd etc)."
+msgstr ""
+"Ao imprimir objetos de vários materiais, essas config. farão com que o "
+"Slic3r recorte as partes do objeto sobrepostas uma pela outra (2ª parte será "
+"cortada pela 1ª, 3ª parte será cortada pela 1ª e 2ª, etc.)."
+
+#: src/libslic3r/PrintConfig.cpp:234
+msgid "Colorprint height"
+msgstr "Altura da impressão colorida"
+
+#: src/libslic3r/PrintConfig.cpp:235
+msgid "Heights at which a filament change is to occur."
+msgstr "Alturas em que uma mudança do filamento ocorre."
+
+#: src/libslic3r/PrintConfig.cpp:245
+msgid "Compatible printers condition"
+msgstr "Condição de impressoras compatíveis"
+
+#: src/libslic3r/PrintConfig.cpp:246
+msgid ""
+"A boolean expression using the configuration values of an active printer "
+"profile. If this expression evaluates to true, this profile is considered "
+"compatible with the active printer profile."
+msgstr ""
+"Uma expressão booleana usando os valores de config. de um perfil de "
+"impressora ativo. Se essa expressão for avaliada como verdadeira, esse "
+"perfil será considerado compatível com o perfil de impressora ativo."
+
+#: src/libslic3r/PrintConfig.cpp:260
+msgid "Compatible print profiles condition"
+msgstr "Condição de perfis de impressão compatíveis"
+
+#: src/libslic3r/PrintConfig.cpp:261
+msgid ""
+"A boolean expression using the configuration values of an active print "
+"profile. If this expression evaluates to true, this profile is considered "
+"compatible with the active print profile."
+msgstr ""
+"Uma expressão booleana usando os valores de config. de um perfil de "
+"impressão ativo. Se essa expressão for avaliada como verdadeira, esse perfil "
+"será considerado compatível com o perfil de impressão ativo."
+
+#: src/libslic3r/PrintConfig.cpp:278
+msgid "Complete individual objects"
+msgstr "Complete objetos individuais"
+
+#: src/libslic3r/PrintConfig.cpp:279
+msgid ""
+"When printing multiple objects or copies, this feature will complete each "
+"object before moving onto next one (and starting it from its bottom layer). "
+"This feature is useful to avoid the risk of ruined prints. Slic3r should "
+"warn and prevent you from extruder collisions, but beware."
+msgstr ""
+"Ao imprimir vários objetos ou cópias, esse recurso concluirá cada objeto "
+"antes de passar para o próximo (e iniciando-o de sua camada inferior). Este "
+"recurso é útil para evitar o risco de impressões arruinadas. Slic3r deve "
+"avisar e impedi-lo de colisões de extrusoras, mas cuidado."
+
+#: src/libslic3r/PrintConfig.cpp:287
+msgid "Enable auto cooling"
+msgstr "Ativar o resfriamento automático"
+
+#: src/libslic3r/PrintConfig.cpp:288
+msgid ""
+"This flag enables the automatic cooling logic that adjusts print speed and "
+"fan speed according to layer printing time."
+msgstr ""
+"Esse sinalizador permite a lógica de resfriamento automática que ajusta a "
+"velocidade de impressão e a velocidade do ventoinha de acordo com o tempo de "
+"impressão da camada."
+
+#: src/libslic3r/PrintConfig.cpp:293
+msgid "Cooling tube position"
+msgstr "Posição do tubo de resfriamento"
+
+#: src/libslic3r/PrintConfig.cpp:294
+msgid "Distance of the center-point of the cooling tube from the extruder tip."
+msgstr ""
+"Distância do ponto central do tubo de resfriamento da ponta da extrusora."
+
+#: src/libslic3r/PrintConfig.cpp:301
+msgid "Cooling tube length"
+msgstr "Comprimento do tubo de resfriamento"
+
+#: src/libslic3r/PrintConfig.cpp:302
+msgid "Length of the cooling tube to limit space for cooling moves inside it."
+msgstr ""
+"Comprimento do tubo de resfriamento para limitar o espaço para movimentos de "
+"resfriamento dentro dele."
+
+#: src/libslic3r/PrintConfig.cpp:310
+msgid ""
+"This is the acceleration your printer will be reset to after the role-"
+"specific acceleration values are used (perimeter/infill). Set zero to "
+"prevent resetting acceleration at all."
+msgstr ""
+"Esta é a aceleração que sua impressora será redefinida para depois que os "
+"valores de aceleração específicos da função forem usados (perímetro/"
+"preenchimento). Defina zero para evitar redefinir a aceleração em tudo."
+
+#: src/libslic3r/PrintConfig.cpp:319
+msgid "Default filament profile"
+msgstr "Perfil de filamento padrão"
+
+#: src/libslic3r/PrintConfig.cpp:320
+msgid ""
+"Default filament profile associated with the current printer profile. On "
+"selection of the current printer profile, this filament profile will be "
+"activated."
+msgstr ""
+"Perfil de filamento padrão associado ao perfil de impressora atual. Na "
+"seleção do perfil da impressora atual, este perfil de filamento será ativado."
+
+#: src/libslic3r/PrintConfig.cpp:326
+msgid "Default print profile"
+msgstr "Perfil de impressão padrão"
+
+#: src/libslic3r/PrintConfig.cpp:327 src/libslic3r/PrintConfig.cpp:2479
+#: src/libslic3r/PrintConfig.cpp:2490
+msgid ""
+"Default print profile associated with the current printer profile. On "
+"selection of the current printer profile, this print profile will be "
+"activated."
+msgstr ""
+"Perfil de impressão padrão associado ao perfil de impressora atual. Na "
+"seleção do perfil de impressora atual, este perfil de impressão será ativado."
+
+#: src/libslic3r/PrintConfig.cpp:333
+msgid "Disable fan for the first"
+msgstr "Desabilite o ventoinha para a(s) primeira(s)"
+
+#: src/libslic3r/PrintConfig.cpp:334
+msgid ""
+"You can set this to a positive value to disable fan at all during the first "
+"layers, so that it does not make adhesion worse."
+msgstr ""
+"Você pode ajustar isto a um valor positivo para desabilitar a ventoinha "
+"durante as primeiras camadas, de modo que melhore a adesão."
+
+#: src/libslic3r/PrintConfig.cpp:336 src/libslic3r/PrintConfig.cpp:971
+#: src/libslic3r/PrintConfig.cpp:1484 src/libslic3r/PrintConfig.cpp:1669
+#: src/libslic3r/PrintConfig.cpp:1730 src/libslic3r/PrintConfig.cpp:1894
+#: src/libslic3r/PrintConfig.cpp:1939
+msgid "layers"
+msgstr "camadas"
+
+#: src/libslic3r/PrintConfig.cpp:343
+msgid "Don't support bridges"
+msgstr "Não suporte pontes"
+
+#: src/libslic3r/PrintConfig.cpp:345
+msgid ""
+"Experimental option for preventing support material from being generated "
+"under bridged areas."
+msgstr ""
+"Opção experimental para impedir que o material de suporte seja gerado em "
+"áreas com ponte."
+
+#: src/libslic3r/PrintConfig.cpp:351
+msgid "Distance between copies"
+msgstr "Distância entre cópias"
+
+#: src/libslic3r/PrintConfig.cpp:352
+msgid "Distance used for the auto-arrange feature of the plater."
+msgstr "Distância usada para o recurso de organizar automaticamente o prato."
+
+#: src/libslic3r/PrintConfig.cpp:359
+msgid "Elephant foot compensation"
+msgstr "Compensação do pé do elefante"
+
+#: src/libslic3r/PrintConfig.cpp:361
+msgid ""
+"The first layer will be shrunk in the XY plane by the configured value to "
+"compensate for the 1st layer squish aka an Elephant Foot effect."
+msgstr ""
+"A primeira camada será encolhido no plano XY pelo valor config.urado para "
+"compensar a 1ª camada esmagada, também conhecida como pé de elefante."
+
+#: src/libslic3r/PrintConfig.cpp:370
+msgid ""
+"This end procedure is inserted at the end of the output file. Note that you "
+"can use placeholder variables for all PrusaSlicer settings."
+msgstr ""
+"Este procedimento final é inserido no final do arquivo de saída. Observe que "
+"você pode usar variáveis de espaço reservado para todas as config. de "
+"PrusaSlicer."
+
+#: src/libslic3r/PrintConfig.cpp:380
+msgid ""
+"This end procedure is inserted at the end of the output file, before the "
+"printer end gcode (and before any toolchange from this filament in case of "
+"multimaterial printers). Note that you can use placeholder variables for all "
+"PrusaSlicer settings. If you have multiple extruders, the gcode is processed "
+"in extruder order."
+msgstr ""
+"Este procedimento final é inserido no final do arquivo de saída, antes da "
+"extremidade da impressora Gcode (e antes de qualquer troca de ferramenta "
+"deste filamento em caso de impressoras multimaterial). Observe que você pode "
+"usar variáveis de espaço reservado para todas as config. de PrusaSlicer. Se "
+"você tiver várias extrusoras, o Gcode é processado em ordem de extrusora."
+
+#: src/libslic3r/PrintConfig.cpp:391
+msgid "Ensure vertical shell thickness"
+msgstr "Assegure a espessura vertical da parede"
+
+#: src/libslic3r/PrintConfig.cpp:393
+msgid ""
+"Add solid infill near sloping surfaces to guarantee the vertical shell "
+"thickness (top+bottom solid layers)."
+msgstr ""
+"Adicionar preenchimento sólido perto de superfícies inclinadas para garantir "
+"a espessura do escudo vertical (camadas sólidas no topo + base )."
+
+#: src/libslic3r/PrintConfig.cpp:399
+msgid "Top fill pattern"
+msgstr "Padrão de preenchimento do topo"
+
+#: src/libslic3r/PrintConfig.cpp:401
+msgid ""
+"Fill pattern for top infill. This only affects the top visible layer, and "
+"not its adjacent solid shells."
+msgstr ""
+"Padrão de preenchimento para preenchimento do topo. Isto afeta somente a "
+"camada visível superior, e não suas paredes adjacentes."
+
+#: src/libslic3r/PrintConfig.cpp:409 src/libslic3r/PrintConfig.cpp:821
+#: src/libslic3r/PrintConfig.cpp:1972
+msgid "Rectilinear"
+msgstr "Rectilíneo"
+
+#: src/libslic3r/PrintConfig.cpp:410 src/libslic3r/PrintConfig.cpp:827
+msgid "Concentric"
+msgstr "Concêntrico"
+
+#: src/libslic3r/PrintConfig.cpp:411 src/libslic3r/PrintConfig.cpp:831
+msgid "Hilbert Curve"
+msgstr "Curva de Hilbert"
+
+#: src/libslic3r/PrintConfig.cpp:412 src/libslic3r/PrintConfig.cpp:832
+msgid "Archimedean Chords"
+msgstr "Cordas Archimedean"
+
+#: src/libslic3r/PrintConfig.cpp:413 src/libslic3r/PrintConfig.cpp:833
+msgid "Octagram Spiral"
+msgstr "Espiral estrelado"
+
+#: src/libslic3r/PrintConfig.cpp:419
+msgid "Bottom fill pattern"
+msgstr "Padrão de preenchimento da base"
+
+#: src/libslic3r/PrintConfig.cpp:421
+msgid ""
+"Fill pattern for bottom infill. This only affects the bottom external "
+"visible layer, and not its adjacent solid shells."
+msgstr ""
+"Padrão de preenchimento para preenchimento da base. Isto afeta somente a "
+"camada visível externa inferior, e não suas paredes adjacentes."
+
+#: src/libslic3r/PrintConfig.cpp:430 src/libslic3r/PrintConfig.cpp:440
+msgid "External perimeters"
+msgstr "Perímetros externos"
+
+#: src/libslic3r/PrintConfig.cpp:432
+msgid ""
+"Set this to a non-zero value to set a manual extrusion width for external "
+"perimeters. If left zero, default extrusion width will be used if set, "
+"otherwise 1.125 x nozzle diameter will be used. If expressed as percentage "
+"(for example 200%), it will be computed over layer height."
+msgstr ""
+"Defina isso como um valor diferente de zero para definir uma largura de "
+"extrusão manual para perímetros externos. Se for deixado zero, a largura de "
+"extrusão padrão será usada se definido, caso contrário, 1,125 x diâmetro da "
+"ponteira será usado. Se expresso em porcentagem(por exemplo 200%), será "
+"calculado sobre a altura da camada."
+
+#: src/libslic3r/PrintConfig.cpp:435 src/libslic3r/PrintConfig.cpp:543
+#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:872
+#: src/libslic3r/PrintConfig.cpp:992 src/libslic3r/PrintConfig.cpp:1017
+#: src/libslic3r/PrintConfig.cpp:1403 src/libslic3r/PrintConfig.cpp:1741
+#: src/libslic3r/PrintConfig.cpp:1847 src/libslic3r/PrintConfig.cpp:1915
+#: src/libslic3r/PrintConfig.cpp:2074
+msgid "mm or %"
+msgstr "mm ou %"
+
+#: src/libslic3r/PrintConfig.cpp:442
+msgid ""
+"This separate setting will affect the speed of external perimeters (the "
+"visible ones). If expressed as percentage (for example: 80%) it will be "
+"calculated on the perimeters speed setting above. Set to zero for auto."
+msgstr ""
+"Esta config. separada afetará a velocidade dos perímetros externos (os "
+"visíveis). Se expresso em porcentagem(por exemplo: 80%) Ele será calculado "
+"sobre a velocidade de perímetros config. acima. Defina como zero para auto."
+
+#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:881
+#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1751
+#: src/libslic3r/PrintConfig.cpp:1958 src/libslic3r/PrintConfig.cpp:2086
+msgid "mm/s or %"
+msgstr "mm/s ou %"
+
+#: src/libslic3r/PrintConfig.cpp:452
+msgid "External perimeters first"
+msgstr "Perímetros externos primeiro"
+
+#: src/libslic3r/PrintConfig.cpp:454
+msgid ""
+"Print contour perimeters from the outermost one to the innermost one instead "
+"of the default inverse order."
+msgstr ""
+"Imprima perímetros de contorno do mais externo para o mais interno em vez da "
+"ordem inversa padrão."
+
+#: src/libslic3r/PrintConfig.cpp:460
+msgid "Extra perimeters if needed"
+msgstr "Perímetros extras se necessário"
+
+#: src/libslic3r/PrintConfig.cpp:462
+#, c-format
+msgid ""
+"Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r "
+"keeps adding perimeters, until more than 70% of the loop immediately above "
+"is supported."
+msgstr ""
+"Adicione mais perímetros quando necessário para evitar lacunas em paredes "
+"inclinados. Slic3r continua adicionando perímetros, até que mais de 70% o do "
+"loop imediatamente acima é suportado."
+
+#: src/libslic3r/PrintConfig.cpp:472
+msgid ""
+"The extruder to use (unless more specific extruder settings are specified). "
+"This value overrides perimeter and infill extruders, but not the support "
+"extruders."
+msgstr ""
+"A extrusora a ser usada (a menos que config. de extrusoras mais específicas "
+"sejam especificadas). Esse valor substitui as extrusoras de perímetro e "
+"preenchimento, mas não as extrusoras de suporte."
+
+#: src/libslic3r/PrintConfig.cpp:484
+msgid ""
+"Set this to the vertical distance between your nozzle tip and (usually) the "
+"X carriage rods. In other words, this is the height of the clearance "
+"cylinder around your extruder, and it represents the maximum depth the "
+"extruder can peek before colliding with other printed objects."
+msgstr ""
+"Defina isto para a distância vertical entre a ponta do bico e (normalmente) "
+"as hastes do X. Em outras palavras, esta é a altura do cilindro de folga em "
+"torno de sua extrusora, e representa a profundidade máxima que a extrusora "
+"pode espreitar antes de colidir com outros objetos impressos."
+
+#: src/libslic3r/PrintConfig.cpp:494
+msgid "Radius"
+msgstr "Raio"
+
+#: src/libslic3r/PrintConfig.cpp:495
+msgid ""
+"Set this to the clearance radius around your extruder. If the extruder is "
+"not centered, choose the largest value for safety. This setting is used to "
+"check for collisions and to display the graphical preview in the plater."
+msgstr ""
+"Defina isso para o raio de folga em torno de sua extrusora. Se a extrusora "
+"não estiver centralizada, escolha o maior valor para a segurança. Essa "
+"config. é usada para verificar colisões e exibir a visualização gráfica no "
+"prato."
+
+#: src/libslic3r/PrintConfig.cpp:505
+msgid "Extruder Color"
+msgstr "Cor da extrusora"
+
+#: src/libslic3r/PrintConfig.cpp:506 src/libslic3r/PrintConfig.cpp:566
+msgid "This is only used in the Slic3r interface as a visual help."
+msgstr "Isso é usado apenas na interface Slic3r como uma ajuda visual."
+
+#: src/libslic3r/PrintConfig.cpp:512
+msgid "Extruder offset"
+msgstr "Compensamento da extrusora"
+
+#: src/libslic3r/PrintConfig.cpp:513
+msgid ""
+"If your firmware doesn't handle the extruder displacement you need the G-"
+"code to take it into account. This option lets you specify the displacement "
+"of each extruder with respect to the first one. It expects positive "
+"coordinates (they will be subtracted from the XY coordinate)."
+msgstr ""
+"Se o seu firmware não manipula o deslocamento da extrusora, você precisa do "
+"G-code para levá-lo em conta. Esta opção permite especificar o deslocamento "
+"de cada extrusora em relação à primeira. Ele espera coordenadas positivas "
+"(eles serão subtraída da coordenada XY)."
+
+#: src/libslic3r/PrintConfig.cpp:522
+msgid "Extrusion axis"
+msgstr "Eixo de extrusão"
+
+#: src/libslic3r/PrintConfig.cpp:523
+msgid ""
+"Use this option to set the axis letter associated to your printer's extruder "
+"(usually E but some printers use A)."
+msgstr ""
+"Use esta opção para definir a letra do eixo associada à extrusora da sua "
+"impressora (geralmente E, mas algumas impressoras usam A)."
+
+#: src/libslic3r/PrintConfig.cpp:528
+msgid "Extrusion multiplier"
+msgstr "Multiplicador de extrusão"
+
+#: src/libslic3r/PrintConfig.cpp:529
+msgid ""
+"This factor changes the amount of flow proportionally. You may need to tweak "
+"this setting to get nice surface finish and correct single wall widths. "
+"Usual values are between 0.9 and 1.1. If you think you need to change this "
+"more, check filament diameter and your firmware E steps."
+msgstr ""
+"Esse fator altera a quantidade de fluxo proporcionalmente. Você pode "
+"precisar de ajustar esta config. para obter acabamento de superfície "
+"agradável e corrigir larguras de parede única. Os valores usuais são entre "
+"0,9 e 1,1. Se você acha que precisa mudar isso mais, verifique o diâmetro do "
+"filamento e os passos configurados no firmware da extrusora."
+
+#: src/libslic3r/PrintConfig.cpp:537
+msgid "Default extrusion width"
+msgstr "Largura de extrusão padrão"
+
+#: src/libslic3r/PrintConfig.cpp:539
+msgid ""
+"Set this to a non-zero value to allow a manual extrusion width. If left to "
+"zero, Slic3r derives extrusion widths from the nozzle diameter (see the "
+"tooltips for perimeter extrusion width, infill extrusion width etc). If "
+"expressed as percentage (for example: 230%), it will be computed over layer "
+"height."
+msgstr ""
+"Defina isso como um valor diferente de zero para permitir uma largura de "
+"extrusão manual. Se deixado a zero, Slic3r deriva larguras da extrusão do "
+"diâmetro da ponteira (veja as dicas ferramentas para a largura da extrusão "
+"do perímetro, a largura de extrusão do preenchimento etc.). Se expresso como "
+"porcentagem (por exemplo: 230%), ele será calculado sobre a altura da camada."
+
+#: src/libslic3r/PrintConfig.cpp:548
+msgid "Keep fan always on"
+msgstr "Mantenha a ventoinha sempre ligada"
+
+#: src/libslic3r/PrintConfig.cpp:549
+msgid ""
+"If this is enabled, fan will never be disabled and will be kept running at "
+"least at its minimum speed. Useful for PLA, harmful for ABS."
+msgstr ""
+"Se isso estiver ativado, a ventoinha nunca será desativada e será mantida "
+"funcionando pelo menos em sua velocidade mínima. Útil para o PLA, "
+"prejudicial para o ABS."
+
+#: src/libslic3r/PrintConfig.cpp:554
+msgid "Enable fan if layer print time is below"
+msgstr "Ative o ventoinha se o tempo de impressão da camada estiver abaixo"
+
+#: src/libslic3r/PrintConfig.cpp:555
+msgid ""
+"If layer print time is estimated below this number of seconds, fan will be "
+"enabled and its speed will be calculated by interpolating the minimum and "
+"maximum speeds."
+msgstr ""
+"Se o tempo de impressão da camada for estimado abaixo desse número de "
+"segundos, a ventoinha será ativada e sua velocidade será calculada "
+"interpolando as velocidades mínima e máxima."
+
+#: src/libslic3r/PrintConfig.cpp:557 src/libslic3r/PrintConfig.cpp:1687
+msgid "approximate seconds"
+msgstr "segundos aproximados"
+
+#: src/libslic3r/PrintConfig.cpp:571
+msgid "Filament notes"
+msgstr "Notas de filamento"
+
+#: src/libslic3r/PrintConfig.cpp:572
+msgid "You can put your notes regarding the filament here."
+msgstr "Você pode colocar suas anotações sobre o filamento aqui."
+
+#: src/libslic3r/PrintConfig.cpp:580 src/libslic3r/PrintConfig.cpp:1231
+msgid "Max volumetric speed"
+msgstr "Máxima velocidade volumétrica"
+
+#: src/libslic3r/PrintConfig.cpp:581
+msgid ""
+"Maximum volumetric speed allowed for this filament. Limits the maximum "
+"volumetric speed of a print to the minimum of print and filament volumetric "
+"speed. Set to zero for no limit."
+msgstr ""
+"Velocidade máxima volumétrica permitida para este filamento. Limita a "
+"velocidade volumétrica máxima de uma impressão ao mínimo de velocidade "
+"volumétrica de impressão e de filamento. Defina como zero para nenhum limite."
+
+#: src/libslic3r/PrintConfig.cpp:590
+msgid "Loading speed"
+msgstr "Velocidade de carregamento"
+
+#: src/libslic3r/PrintConfig.cpp:591
+msgid "Speed used for loading the filament on the wipe tower."
+msgstr "Velocidade utilizada para carregar o filamento na torre de limpeza."
+
+#: src/libslic3r/PrintConfig.cpp:598
+msgid "Loading speed at the start"
+msgstr "Velocidade de carregamento no início"
+
+#: src/libslic3r/PrintConfig.cpp:599
+msgid "Speed used at the very beginning of loading phase."
+msgstr "Velocidade utilizada no início da fase de carregamento."
+
+#: src/libslic3r/PrintConfig.cpp:606
+msgid "Unloading speed"
+msgstr "Velocidade de descarregamento"
+
+#: src/libslic3r/PrintConfig.cpp:607
+msgid ""
+"Speed used for unloading the filament on the wipe tower (does not affect  "
+"initial part of unloading just after ramming)."
+msgstr ""
+"Velocidade utilizada para descarregar o filamento na torre de limpeza (não "
+"afeta a parte inicial do descarregamento logo após o Ramming)."
+
+#: src/libslic3r/PrintConfig.cpp:615
+msgid "Unloading speed at the start"
+msgstr "Velocidade de descarregamento no início"
+
+#: src/libslic3r/PrintConfig.cpp:616
+msgid ""
+"Speed used for unloading the tip of the filament immediately after ramming."
+msgstr ""
+"Velocidade usada para descarregar a ponta do filamento imediatamente após o "
+"Ramming."
+
+#: src/libslic3r/PrintConfig.cpp:623
+msgid "Delay after unloading"
+msgstr "Atraso após o descarregamento"
+
+#: src/libslic3r/PrintConfig.cpp:624
+msgid ""
+"Time to wait after the filament is unloaded. May help to get reliable "
+"toolchanges with flexible materials that may need more time to shrink to "
+"original dimensions."
+msgstr ""
+"Tempo de espera após o filamento ser descarregado. Pode ajudar a obter "
+"trocas de ferramenta confiáveis com materiais flexíveis que podem precisar "
+"de mais tempo para reduzir as dimensões originais."
+
+#: src/libslic3r/PrintConfig.cpp:633
+msgid "Number of cooling moves"
+msgstr "Número de movimentos de resfriamento"
+
+#: src/libslic3r/PrintConfig.cpp:634
+msgid ""
+"Filament is cooled by being moved back and forth in the cooling tubes. "
+"Specify desired number of these moves."
+msgstr ""
+"O filamento é resfriado por ser movido para frente e para trás nos tubos de "
+"resfriamento. Especifique o número desejado desses movimentos."
+
+#: src/libslic3r/PrintConfig.cpp:642
+msgid "Speed of the first cooling move"
+msgstr "Velocidade do primeiro movimento de resfriamento"
+
+#: src/libslic3r/PrintConfig.cpp:643
+msgid "Cooling moves are gradually accelerating beginning at this speed."
+msgstr ""
+"Movimentos de resfriamento estão gradualmente acelerando a partir desta "
+"velocidade."
+
+#: src/libslic3r/PrintConfig.cpp:650
+msgid "Minimal purge on wipe tower"
+msgstr "Remoção mínima na torre da limpeza"
+
+#: src/libslic3r/PrintConfig.cpp:651
+msgid ""
+"After a tool change, the exact position of the newly loaded filament inside "
+"the nozzle may not be known, and the filament pressure is likely not yet "
+"stable. Before purging the print head into an infill or a sacrificial "
+"object, Slic3r will always prime this amount of material into the wipe tower "
+"to produce successive infill or sacrificial object extrusions reliably."
+msgstr ""
+"Após uma mudança da ferramenta, a posição exata do filamento recentemente "
+"carregado dentro da ponteira pode não ser conhecida, e a pressão do "
+"filamento provavelmente ainda não esteja estável. Antes de purgar a cabeça "
+"de impressão em um preenchimento ou um objeto sacrificial, Slic3r sempre "
+"Prime esta quantidade de material para a torre de limpeza para produzir "
+"sucessivas preenchimento ou sacrificial objeto extrusões de forma confiável."
+
+#: src/libslic3r/PrintConfig.cpp:655
+msgid "mm³"
+msgstr "mm³"
+
+#: src/libslic3r/PrintConfig.cpp:661
+msgid "Speed of the last cooling move"
+msgstr "Velocidade do último movimento de resfriamento"
+
+#: src/libslic3r/PrintConfig.cpp:662
+msgid "Cooling moves are gradually accelerating towards this speed."
+msgstr ""
+"Movimentos de resfriamento estão gradualmente acelerando para esta "
+"velocidade."
+
+#: src/libslic3r/PrintConfig.cpp:669
+msgid "Filament load time"
+msgstr "Tempo de carga do filamento"
+
+#: src/libslic3r/PrintConfig.cpp:670
+msgid ""
+"Time for the printer firmware (or the Multi Material Unit 2.0) to load a new "
+"filament during a tool change (when executing the T code). This time is "
+"added to the total print time by the G-code time estimator."
+msgstr ""
+"Tempo para o firmware da impressora (ou a Multi Material Unit 2.0 para "
+"carregar um novo filamento durante uma mudança de ferramenta (ao executar o "
+"código T). Esse tempo é adicionado ao tempo total de impressão pelo "
+"estimador de tempo do G-code."
+
+#: src/libslic3r/PrintConfig.cpp:677
+msgid "Ramming parameters"
+msgstr "Parâmetros de Ramming"
+
+#: src/libslic3r/PrintConfig.cpp:678
+msgid ""
+"This string is edited by RammingDialog and contains ramming specific "
+"parameters."
+msgstr ""
+"Essa cadeia de caracteres é editada por rammingdialog e contém parâmetros "
+"específicos de Ramming."
+
+#: src/libslic3r/PrintConfig.cpp:684
+msgid "Filament unload time"
+msgstr "Tempo de descarregamento do filamento"
+
+#: src/libslic3r/PrintConfig.cpp:685
+msgid ""
+"Time for the printer firmware (or the Multi Material Unit 2.0) to unload a "
+"filament during a tool change (when executing the T code). This time is "
+"added to the total print time by the G-code time estimator."
+msgstr ""
+"Tempo para o firmware da impressora (ou a unidade de material multi 2,0) "
+"para descarregar um filamento durante uma mudança de ferramenta (ao executar "
+"o código T). Esse tempo é adicionado ao tempo total de impressão pelo "
+"estimador de tempo do G-code."
+
+#: src/libslic3r/PrintConfig.cpp:693
+msgid ""
+"Enter your filament diameter here. Good precision is required, so use a "
+"caliper and do multiple measurements along the filament, then compute the "
+"average."
+msgstr ""
+"Insira o diâmetro do filamento aqui. Boa precisão é necessária, então use um "
+"paquímetro e fazer várias medições ao longo do filamento, em seguida, "
+"calcular a média."
+
+#: src/libslic3r/PrintConfig.cpp:700
+msgid "Density"
+msgstr "Densidade"
+
+#: src/libslic3r/PrintConfig.cpp:701
+msgid ""
+"Enter your filament density here. This is only for statistical information. "
+"A decent way is to weigh a known length of filament and compute the ratio of "
+"the length to volume. Better is to calculate the volume directly through "
+"displacement."
+msgstr ""
+"Insira sua densidade de filamento aqui. Isto é apenas para informação "
+"estatística. Uma maneira decente é pesar um comprimento conhecido do "
+"filamento e computar a relação do comprimento ao volume. Melhor é calcular o "
+"volume diretamente através do deslocamento."
+
+#: src/libslic3r/PrintConfig.cpp:704
+msgid "g/cm³"
+msgstr "g/cm³"
+
+#: src/libslic3r/PrintConfig.cpp:709
+msgid "Filament type"
+msgstr "Tipo de filamento"
+
+#: src/libslic3r/PrintConfig.cpp:710
+msgid "The filament material type for use in custom G-codes."
+msgstr "O tipo de material de filamento para uso em G-code customizados."
+
+#: src/libslic3r/PrintConfig.cpp:736
+msgid "Soluble material"
+msgstr "Material solúvel"
+
+#: src/libslic3r/PrintConfig.cpp:737
+msgid "Soluble material is most likely used for a soluble support."
+msgstr "O material solúvel é mais provável usado para um suporte solúvel."
+
+#: src/libslic3r/PrintConfig.cpp:743
+msgid ""
+"Enter your filament cost per kg here. This is only for statistical "
+"information."
+msgstr ""
+"Insira o seu custo de filamento por kg aqui. Isto é apenas para informação "
+"estatística."
+
+#: src/libslic3r/PrintConfig.cpp:744
+msgid "money/kg"
+msgstr "dinheiro/kg"
+
+#: src/libslic3r/PrintConfig.cpp:753
+msgid "Fill angle"
+msgstr "Ângulo de preenchimento"
+
+#: src/libslic3r/PrintConfig.cpp:755
+msgid ""
+"Default base angle for infill orientation. Cross-hatching will be applied to "
+"this. Bridges will be infilled using the best direction Slic3r can detect, "
+"so this setting does not affect them."
+msgstr ""
+"Ângulo padrão para a orientação de preenchimento. A hachura cruzada será "
+"aplicada a isso. Pontes serão preenchidas usando a melhor direção Slic3r "
+"pode detectar, portanto, essa config. não vai afeta-los."
+
+#: src/libslic3r/PrintConfig.cpp:767
+msgid "Fill density"
+msgstr "Densidade de preenchimento"
+
+#: src/libslic3r/PrintConfig.cpp:769
+msgid "Density of internal infill, expressed in the range 0% - 100%."
+msgstr "Densidade de preenchimento interno, expresso na faixa de 0%-100%."
+
+#: src/libslic3r/PrintConfig.cpp:804
+msgid "Fill pattern"
+msgstr "Padrão de preenchimento"
+
+#: src/libslic3r/PrintConfig.cpp:806
+msgid "Fill pattern for general low-density infill."
+msgstr "Padrão de preenchimento para preenchimento de baixa densidade."
+
+#: src/libslic3r/PrintConfig.cpp:822
+msgid "Grid"
+msgstr "Grade"
+
+#: src/libslic3r/PrintConfig.cpp:823
+msgid "Triangles"
+msgstr "Triângulos"
+
+#: src/libslic3r/PrintConfig.cpp:824
+msgid "Stars"
+msgstr "Estrelas"
+
+#: src/libslic3r/PrintConfig.cpp:825
+msgid "Cubic"
+msgstr "Cúbico"
+
+#: src/libslic3r/PrintConfig.cpp:826
+msgid "Line"
+msgstr "Linha"
+
+#: src/libslic3r/PrintConfig.cpp:828 src/libslic3r/PrintConfig.cpp:1974
+msgid "Honeycomb"
+msgstr "Hexágono"
+
+#: src/libslic3r/PrintConfig.cpp:829
+msgid "3D Honeycomb"
+msgstr "Hexágono 3D"
+
+#: src/libslic3r/PrintConfig.cpp:830
+msgid "Gyroid"
+msgstr "Giróide"
+
+#: src/libslic3r/PrintConfig.cpp:837 src/libslic3r/PrintConfig.cpp:846
+#: src/libslic3r/PrintConfig.cpp:854 src/libslic3r/PrintConfig.cpp:887
+msgid "First layer"
+msgstr "Primeira camada"
+
+#: src/libslic3r/PrintConfig.cpp:838
+msgid ""
+"This is the acceleration your printer will use for first layer. Set zero to "
+"disable acceleration control for first layer."
+msgstr ""
+"Esta é a aceleração que sua impressora usará para a primeira camada. Defina "
+"zero para desabilitar o controle de aceleração para a primeira camada."
+
+#: src/libslic3r/PrintConfig.cpp:847
+msgid ""
+"Heated build plate temperature for the first layer. Set this to zero to "
+"disable bed temperature control commands in the output."
+msgstr ""
+"Temperatura da mesa aquecida para a primeira camada. Defina isso como zero "
+"para desabilitar os comandos de controle de temperatura da mesa na saída."
+
+#: src/libslic3r/PrintConfig.cpp:856
+msgid ""
+"Set this to a non-zero value to set a manual extrusion width for first "
+"layer. You can use this to force fatter extrudates for better adhesion. If "
+"expressed as percentage (for example 120%) it will be computed over first "
+"layer height. If set to zero, it will use the default extrusion width."
+msgstr ""
+"Defina isso como um valor diferente de zero para definir uma largura de "
+"extrusão manual para a primeira camada. Você pode usar este para forçar "
+"extrusões maiores para a melhor adesão. Se expresso em porcentagem(por "
+"exemplo, 120%) será computado sobre a primeira altura da camada. Se definido "
+"como zero, ele usará a largura de extrusão padrão."
+
+#: src/libslic3r/PrintConfig.cpp:866
+msgid "First layer height"
+msgstr "Altura da primeira camada"
+
+#: src/libslic3r/PrintConfig.cpp:868
+msgid ""
+"When printing with very low layer heights, you might still want to print a "
+"thicker bottom layer to improve adhesion and tolerance for non perfect build "
+"plates. This can be expressed as an absolute value or as a percentage (for "
+"example: 150%) over the default layer height."
+msgstr ""
+"Ao imprimir com alturas muito baixas da camada, você pode ainda querer "
+"imprimir uma camada inferior mais grossa para melhorar a adesão e a "
+"tolerância para mesas não perfeitas. Isso pode ser expresso como um valor "
+"absoluto ou como uma porcentagem (por exemplo: 150%) sobre a altura da "
+"camada padrão."
+
+#: src/libslic3r/PrintConfig.cpp:877
+msgid "First layer speed"
+msgstr "Velocidade da primeira camada"
+
+#: src/libslic3r/PrintConfig.cpp:878
+msgid ""
+"If expressed as absolute value in mm/s, this speed will be applied to all "
+"the print moves of the first layer, regardless of their type. If expressed "
+"as a percentage (for example: 40%) it will scale the default speeds."
+msgstr ""
+"Se expresso como valor absoluto em mm/s, esta velocidade será aplicada a "
+"todos os movimentos de impressão da primeira camada, independentemente do "
+"seu tipo. Se expresso em porcentagem(por exemplo: 40%) Ele dimensionará as "
+"velocidades padrão."
+
+#: src/libslic3r/PrintConfig.cpp:888
+msgid ""
+"Extruder temperature for first layer. If you want to control temperature "
+"manually during print, set this to zero to disable temperature control "
+"commands in the output file."
+msgstr ""
+"Temperatura da extrusora para a primeira camada. Se você quiser controlar a "
+"temperatura manualmente durante a impressão, defina isso como zero para "
+"desabilitar os comandos de controle de temperatura no arquivo de saída."
+
+#: src/libslic3r/PrintConfig.cpp:897
+msgid ""
+"Speed for filling small gaps using short zigzag moves. Keep this reasonably "
+"low to avoid too much shaking and resonance issues. Set zero to disable gaps "
+"filling."
+msgstr ""
+"Velocidade para encher pequenas lacunas usando movimentos de ziguezague "
+"curtos. Mantenha este razoavelmente baixo para evitar demasiada agitação e "
+"problemas de ressonância. Defina zero para desabilitar o preenchimento de "
+"lacunas."
+
+#: src/libslic3r/PrintConfig.cpp:905
+msgid "Verbose G-code"
+msgstr "Gcode detalhado"
+
+#: src/libslic3r/PrintConfig.cpp:906
+msgid ""
+"Enable this to get a commented G-code file, with each line explained by a "
+"descriptive text. If you print from SD card, the additional weight of the "
+"file could make your firmware slow down."
+msgstr ""
+"Habilite isso para obter um arquivo de G-code comentado, com cada linha "
+"explicada por um texto descritivo. Se você imprimir a partir do cartão SD, o "
+"peso adicional do arquivo pode fazer o seu firmware ficar mais lento."
+
+#: src/libslic3r/PrintConfig.cpp:913
+msgid "G-code flavor"
+msgstr "Tipo de G-code"
+
+#: src/libslic3r/PrintConfig.cpp:914
+msgid ""
+"Some G/M-code commands, including temperature control and others, are not "
+"universal. Set this option to your printer's firmware to get a compatible "
+"output. The \"No extrusion\" flavor prevents PrusaSlicer from exporting any "
+"extrusion value at all."
+msgstr ""
+"Alguns comandos G/M-code, incluindo controle de temperatura e outros, não "
+"são universais. Defina esta opção para o firmware da impressora para obter "
+"uma saída compatível. O \"sem extrusão\" tipo impede PrusaSlicer de exportar "
+"qualquer valor de extrusão em tudo."
+
+#: src/libslic3r/PrintConfig.cpp:937
+msgid "No extrusion"
+msgstr "Sem extrusão"
+
+#: src/libslic3r/PrintConfig.cpp:942
+msgid "Label objects"
+msgstr "Rotular objetos"
+
+#: src/libslic3r/PrintConfig.cpp:943
+msgid ""
+"Enable this to add comments into the G-Code labeling print moves with what "
+"object they belong to, which is useful for the Octoprint CancelObject "
+"plugin. This settings is NOT compatible with Single Extruder Multi Material "
+"setup and Wipe into Object / Wipe into Infill."
+msgstr ""
+"Habilite isso para adicionar comentários aos movimentos de impressão de "
+"rotulagem do G-code com o objeto ao qual eles pertencem, o que é útil para o "
+"plugin Octoprint CancelObject. Essas config. não são compatíveis com a "
+"config. de multi material de extrusora única e limpe em objeto/limpar em "
+"preenchimento."
+
+#: src/libslic3r/PrintConfig.cpp:950
+msgid "High extruder current on filament swap"
+msgstr "Corrente elevada da extrusora na troca do filamento"
+
+#: src/libslic3r/PrintConfig.cpp:951
+msgid ""
+"It may be beneficial to increase the extruder motor current during the "
+"filament exchange sequence to allow for rapid ramming feed rates and to "
+"overcome resistance when loading a filament with an ugly shaped tip."
+msgstr ""
+"Pode ser benéfico aumentar a corrente do motor da extrusora durante a "
+"seqüência da troca do filamento para permitir taxas de alimentação de "
+"Ramming rápidas e para superar a resistência ao carregar um filamento com "
+"uma ponta feia."
+
+#: src/libslic3r/PrintConfig.cpp:959
+msgid ""
+"This is the acceleration your printer will use for infill. Set zero to "
+"disable acceleration control for infill."
+msgstr ""
+"Esta é a aceleração que sua impressora usará para preenchimento. Defina zero "
+"para desabilitar o controle de aceleração para preenchimento."
+
+#: src/libslic3r/PrintConfig.cpp:967
+msgid "Combine infill every"
+msgstr "Combine preenchimento a cada"
+
+#: src/libslic3r/PrintConfig.cpp:969
+msgid ""
+"This feature allows to combine infill and speed up your print by extruding "
+"thicker infill layers while preserving thin perimeters, thus accuracy."
+msgstr ""
+"Este recurso permite combinar preenchimento e acelerar a sua impressão por "
+"extrusão camadas de preenchimento mais espessa, preservando perímetros "
+"finos, assim, a precisão."
+
+#: src/libslic3r/PrintConfig.cpp:972
+msgid "Combine infill every n layers"
+msgstr "Combine preenchimento cada n camadas"
+
+#: src/libslic3r/PrintConfig.cpp:978
+msgid "Infill extruder"
+msgstr "Extrusora de preenchimento"
+
+#: src/libslic3r/PrintConfig.cpp:980
+msgid "The extruder to use when printing infill."
+msgstr ""
+"A extrusora a ser utilizada quando estiver imprimindo preenchimento sólido."
+
+#: src/libslic3r/PrintConfig.cpp:988
+msgid ""
+"Set this to a non-zero value to set a manual extrusion width for infill. If "
+"left zero, default extrusion width will be used if set, otherwise 1.125 x "
+"nozzle diameter will be used. You may want to use fatter extrudates to speed "
+"up the infill and make your parts stronger. If expressed as percentage (for "
+"example 90%) it will be computed over layer height."
+msgstr ""
+"Defina isso como um valor diferente de zero para definir uma largura de "
+"extrusão manual para preenchimento. Se for deixado zero, a largura de "
+"extrusão padrão será usada se definido, caso contrário, 1,125 x diâmetro da "
+"ponteira será usado. Você pode querer usar extrusora mais larga para "
+"acelerar o preenchimento e tornar suas peças mais fortes. Se expresso em "
+"porcentagem(por exemplo, 90%) Ele será calculado sobre a altura da camada."
+
+#: src/libslic3r/PrintConfig.cpp:997
+msgid "Infill before perimeters"
+msgstr "Preenchimento antes dos perímetros"
+
+#: src/libslic3r/PrintConfig.cpp:998
+msgid ""
+"This option will switch the print order of perimeters and infill, making the "
+"latter first."
+msgstr ""
+"Esta opção irá mudar a ordem de impressão de perímetros e preenchimento, "
+"tornando o último primeiro."
+
+#: src/libslic3r/PrintConfig.cpp:1003
+msgid "Only infill where needed"
+msgstr "Somente preenchimento onde necessário"
+
+#: src/libslic3r/PrintConfig.cpp:1005
+msgid ""
+"This option will limit infill to the areas actually needed for supporting "
+"ceilings (it will act as internal support material). If enabled, slows down "
+"the G-code generation due to the multiple checks involved."
+msgstr ""
+"Esta opção limitará a preenchimento às áreas realmente necessárias para "
+"suportar tetos (atuará como o material de sustentação interno). Se "
+"habilitada, retarda a geração de G-code devido às várias verificações "
+"envolvidas."
+
+#: src/libslic3r/PrintConfig.cpp:1012
+msgid "Infill/perimeters overlap"
+msgstr "Sobreposição de preenchimento/perímetros"
+
+#: src/libslic3r/PrintConfig.cpp:1014
+msgid ""
+"This setting applies an additional overlap between infill and perimeters for "
+"better bonding. Theoretically this shouldn't be needed, but backlash might "
+"cause gaps. If expressed as percentage (example: 15%) it is calculated over "
+"perimeter extrusion width."
+msgstr ""
+"Esta config. aplica uma sobreposição adicional entre preenchimento e "
+"perímetros para melhor colagem. Teoricamente isso não deveria ser "
+"necessário, mas a folga pode causar lacunas. Se expresso em "
+"porcentagem(exemplo: 15%) é calculado sobre a largura da extrusão do "
+"perímetro."
+
+#: src/libslic3r/PrintConfig.cpp:1025
+msgid "Speed for printing the internal fill. Set to zero for auto."
+msgstr ""
+"Velocidade para imprimir o preenchimento interno. Defina como zero para auto."
+
+#: src/libslic3r/PrintConfig.cpp:1033
+msgid "Inherits profile"
+msgstr "Herda o perfil"
+
+#: src/libslic3r/PrintConfig.cpp:1034
+msgid "Name of the profile, from which this profile inherits."
+msgstr "Nome do perfil, a partir do qual este perfil herda."
+
+#: src/libslic3r/PrintConfig.cpp:1047
+msgid "Interface shells"
+msgstr "Interface dos perímetros externos."
+
+#: src/libslic3r/PrintConfig.cpp:1048
+msgid ""
+"Force the generation of solid shells between adjacent materials/volumes. "
+"Useful for multi-extruder prints with translucent materials or manual "
+"soluble support material."
+msgstr ""
+"Force a geração de perímetros externos sólidas entre materiais/volumes "
+"adjacentes. Útil para cópias da multi-extrusora com materiais translúcidos "
+"ou material de sustentação solúvel manual."
+
+#: src/libslic3r/PrintConfig.cpp:1057
+msgid ""
+"This custom code is inserted at every layer change, right after the Z move "
+"and before the extruder moves to the first layer point. Note that you can "
+"use placeholder variables for all Slic3r settings as well as [layer_num] and "
+"[layer_z]."
+msgstr ""
+"Este código personalizado é inserido em cada mudança de camada, logo após o "
+"movimento Z e antes que a extrusora se mova para o primeiro ponto de camada. "
+"Observe que você pode usar variáveis de espaço reservado para todas as "
+"config. Slic3r, bem como [layer_num] e [layer_z]."
+
+#: src/libslic3r/PrintConfig.cpp:1068
+msgid "Supports remaining times"
+msgstr "Tempo de impressão restante"
+
+#: src/libslic3r/PrintConfig.cpp:1069
+msgid ""
+"Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute "
+"intervals into the G-code to let the firmware show accurate remaining time. "
+"As of now only the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 "
+"firmware supports M73 Qxx Sxx for the silent mode."
+msgstr ""
+"Emita M73 P [porcentagem impressa] R [tempo restante em minutos] em "
+"intervalos de 1 minuto no G-code para permitir que o firmware mostre o tempo "
+"restante exato. A partir de agora apenas o firmware Prusa i3 MK3 reconhece "
+"M73. Além disso, o firmware i3 MK3 suporta M73 QXX Sxx para o modo "
+"silencioso."
+
+#: src/libslic3r/PrintConfig.cpp:1077
+msgid "Supports stealth mode"
+msgstr "Suporta o modo silencioso"
+
+#: src/libslic3r/PrintConfig.cpp:1078
+msgid "The firmware supports stealth mode"
+msgstr "O firmware suporta o modo silencioso"
+
+#: src/libslic3r/PrintConfig.cpp:1102
+msgid "Maximum feedrate X"
+msgstr "Máxima taxa de alimentação do X"
+
+#: src/libslic3r/PrintConfig.cpp:1103
+msgid "Maximum feedrate Y"
+msgstr "Máxima taxa de alimentação do Y"
+
+#: src/libslic3r/PrintConfig.cpp:1104
+msgid "Maximum feedrate Z"
+msgstr "Máxima taxa de alimentação do Z"
+
+#: src/libslic3r/PrintConfig.cpp:1105
+msgid "Maximum feedrate E"
+msgstr "Máxima taxa de alimentação do E"
+
+#: src/libslic3r/PrintConfig.cpp:1108
+msgid "Maximum feedrate of the X axis"
+msgstr "Máxima taxa de alimentação do eixo X"
+
+#: src/libslic3r/PrintConfig.cpp:1109
+msgid "Maximum feedrate of the Y axis"
+msgstr "Máxima taxa de alimentação do eixo Y"
+
+#: src/libslic3r/PrintConfig.cpp:1110
+msgid "Maximum feedrate of the Z axis"
+msgstr "Máxima taxa de alimentação do eixo Z"
+
+#: src/libslic3r/PrintConfig.cpp:1111
+msgid "Maximum feedrate of the E axis"
+msgstr "Máxima taxa de alimentação do eixo E"
+
+#: src/libslic3r/PrintConfig.cpp:1120
+msgid "Maximum acceleration X"
+msgstr "Aceleração máxima do X"
+
+#: src/libslic3r/PrintConfig.cpp:1121
+msgid "Maximum acceleration Y"
+msgstr "Aceleração máxima do Y"
+
+#: src/libslic3r/PrintConfig.cpp:1122
+msgid "Maximum acceleration Z"
+msgstr "Aceleração máxima do Z"
+
+#: src/libslic3r/PrintConfig.cpp:1123
+msgid "Maximum acceleration E"
+msgstr "Aceleração máxima do E"
+
+#: src/libslic3r/PrintConfig.cpp:1126
+msgid "Maximum acceleration of the X axis"
+msgstr "Aceleração máxima do eixo X"
+
+#: src/libslic3r/PrintConfig.cpp:1127
+msgid "Maximum acceleration of the Y axis"
+msgstr "Aceleração máxima do eixo Y"
+
+#: src/libslic3r/PrintConfig.cpp:1128
+msgid "Maximum acceleration of the Z axis"
+msgstr "Aceleração máxima do eixo Z"
+
+#: src/libslic3r/PrintConfig.cpp:1129
+msgid "Maximum acceleration of the E axis"
+msgstr "Aceleração máxima do eixo E"
+
+#: src/libslic3r/PrintConfig.cpp:1138
+msgid "Maximum jerk X"
+msgstr "Máximo empurrão X"
+
+#: src/libslic3r/PrintConfig.cpp:1139
+msgid "Maximum jerk Y"
+msgstr "Máximo empurrão Y"
+
+#: src/libslic3r/PrintConfig.cpp:1140
+msgid "Maximum jerk Z"
+msgstr "Máximo empurrão Z"
+
+#: src/libslic3r/PrintConfig.cpp:1141
+msgid "Maximum jerk E"
+msgstr "Máximo empurrão E"
+
+#: src/libslic3r/PrintConfig.cpp:1144
+msgid "Maximum jerk of the X axis"
+msgstr "Máximo empurrão do eixo X"
+
+#: src/libslic3r/PrintConfig.cpp:1145
+msgid "Maximum jerk of the Y axis"
+msgstr "Máximo empurrão do eixo Y"
+
+#: src/libslic3r/PrintConfig.cpp:1146
+msgid "Maximum jerk of the Z axis"
+msgstr "Máximo empurrão do eixo Z"
+
+#: src/libslic3r/PrintConfig.cpp:1147
+msgid "Maximum jerk of the E axis"
+msgstr "Máximo empurrão do eixo E"
+
+#: src/libslic3r/PrintConfig.cpp:1158
+msgid "Minimum feedrate when extruding"
+msgstr "Taxa de alimentação mínima ao extrudar"
+
+#: src/libslic3r/PrintConfig.cpp:1160
+msgid "Minimum feedrate when extruding (M205 S)"
+msgstr "Taxa de alimentação mínima ao extrudar (M205 S)"
+
+#: src/libslic3r/PrintConfig.cpp:1169
+msgid "Minimum travel feedrate"
+msgstr "Taxa de alimentação mínima ao viajar"
+
+#: src/libslic3r/PrintConfig.cpp:1171
+msgid "Minimum travel feedrate (M205 T)"
+msgstr "Taxa de alimentação mínima ao viajar (M205 T)"
+
+#: src/libslic3r/PrintConfig.cpp:1180
+msgid "Maximum acceleration when extruding"
+msgstr "Aceleração máxima quando expurgando"
+
+#: src/libslic3r/PrintConfig.cpp:1182
+msgid "Maximum acceleration when extruding (M204 S)"
+msgstr "Aceleração máxima quando extrudando (M204 S)"
+
+#: src/libslic3r/PrintConfig.cpp:1191
+msgid "Maximum acceleration when retracting"
+msgstr "Aceleração máxima durante a retração"
+
+#: src/libslic3r/PrintConfig.cpp:1193
+msgid "Maximum acceleration when retracting (M204 T)"
+msgstr "Aceleração máxima quando retração (M204 T)"
+
+#: src/libslic3r/PrintConfig.cpp:1201 src/libslic3r/PrintConfig.cpp:1210
+msgid "Max"
+msgstr "Máx"
+
+#: src/libslic3r/PrintConfig.cpp:1202
+msgid "This setting represents the maximum speed of your fan."
+msgstr "Esta config. representa a velocidade máxima da sua ventoinha."
+
+#: src/libslic3r/PrintConfig.cpp:1211
+#, c-format
+msgid ""
+"This is the highest printable layer height for this extruder, used to cap "
+"the variable layer height and support layer height. Maximum recommended "
+"layer height is 75% of the extrusion width to achieve reasonable inter-layer "
+"adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter."
+msgstr ""
+"Esta é a altura mais alta imprimível para esta extrusora, usada para tampar "
+"a altura variável da camada e suportar a altura da camada. A altura "
+"recomendada máxima da camada é 75% o da largura da extrusão para conseguir a "
+"adesão razoável entre camadas. Se definido como 0, a altura da camada é "
+"limitada a 75% o do diâmetro da ponteira."
+
+#: src/libslic3r/PrintConfig.cpp:1221
+msgid "Max print speed"
+msgstr "Velocidade máxima de impressão"
+
+#: src/libslic3r/PrintConfig.cpp:1222
+msgid ""
+"When setting other speed settings to 0 Slic3r will autocalculate the optimal "
+"speed in order to keep constant extruder pressure. This experimental setting "
+"is used to set the highest print speed you want to allow."
+msgstr ""
+"Ao definir outras config. de velocidade para 0, o Slic3r irá calcular "
+"automaticamente a velocidade ideal, a fim de manter a pressão constante da "
+"extrusora. Esta config. experimental é usada para definir a velocidade de "
+"impressão mais alta que você deseja permitir."
+
+#: src/libslic3r/PrintConfig.cpp:1232
+msgid ""
+"This experimental setting is used to set the maximum volumetric speed your "
+"extruder supports."
+msgstr ""
+"Esta config. experimental é usada para definir a velocidade máxima "
+"volumétrica que sua extrusora suporta."
+
+#: src/libslic3r/PrintConfig.cpp:1241
+msgid "Max volumetric slope positive"
+msgstr "Inclinação volumétrica máx positiva"
+
+#: src/libslic3r/PrintConfig.cpp:1242 src/libslic3r/PrintConfig.cpp:1253
+msgid ""
+"This experimental setting is used to limit the speed of change in extrusion "
+"rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
+"of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/"
+"s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."
+msgstr ""
+"Esta config. experimental é usada para limitar a velocidade de mudança na "
+"taxa de extrusão. Um valor de 1,8 mm ³/s ² assegura que uma alteração da "
+"taxa de extrusão de 1,8 mm ³/s (largura de extrusão de 0,45 mm, altura de "
+"extrusão de 0,2 mm, avanço de 20 mm/s) para 5,4 mm ³/s (avanço 60 mm/s) "
+"levará pelo menos 2 segundos."
+
+#: src/libslic3r/PrintConfig.cpp:1246 src/libslic3r/PrintConfig.cpp:1257
+msgid "mm³/s²"
+msgstr "mm ³/s ²"
+
+#: src/libslic3r/PrintConfig.cpp:1252
+msgid "Max volumetric slope negative"
+msgstr "Inclinação volumétrica máx negativa"
+
+#: src/libslic3r/PrintConfig.cpp:1264 src/libslic3r/PrintConfig.cpp:1273
+msgid "Min"
+msgstr "Min"
+
+#: src/libslic3r/PrintConfig.cpp:1265
+msgid "This setting represents the minimum PWM your fan needs to work."
+msgstr ""
+"Esta config. representa o PWM mínimo que seu ventoinha precisa para "
+"trabalhar."
+
+#: src/libslic3r/PrintConfig.cpp:1274
+msgid ""
+"This is the lowest printable layer height for this extruder and limits the "
+"resolution for variable layer height. Typical values are between 0.05 mm and "
+"0.1 mm."
+msgstr ""
+"Esta é a altura mais baixa imprimível para esta extrusora e limita a "
+"definição para a altura variável da camada. Os valores típicos são entre 0, "
+"5 mm e 0,1 mm."
+
+#: src/libslic3r/PrintConfig.cpp:1282
+msgid "Min print speed"
+msgstr "Velocidade mínima de impressão"
+
+#: src/libslic3r/PrintConfig.cpp:1283
+msgid "Slic3r will not scale speed down below this speed."
+msgstr "Slic3r não vai escalar a velocidade abaixo desta velocidade."
+
+#: src/libslic3r/PrintConfig.cpp:1290
+msgid "Minimal filament extrusion length"
+msgstr "Comprimento mínimo da extrusão do filamento"
+
+#: src/libslic3r/PrintConfig.cpp:1291
+msgid ""
+"Generate no less than the number of skirt loops required to consume the "
+"specified amount of filament on the bottom layer. For multi-extruder "
+"machines, this minimum applies to each extruder."
+msgstr ""
+"Gerar não menos do que o número de voltas de saia necessários para consumir "
+"a quantidade especificada de filamento na camada inferior. Para máquinas "
+"multiextrusoras, este mínimo aplica-se a cada extrusora."
+
+#: src/libslic3r/PrintConfig.cpp:1300
+msgid "Configuration notes"
+msgstr "Notas de config."
+
+#: src/libslic3r/PrintConfig.cpp:1301
+msgid ""
+"You can put here your personal notes. This text will be added to the G-code "
+"header comments."
+msgstr ""
+"Você pode colocar aqui suas anotações pessoais. Este texto será adicionado "
+"aos comentários do cabeçalho do G-code."
+
+#: src/libslic3r/PrintConfig.cpp:1311
+msgid ""
+"This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"
+msgstr ""
+"Este é o diâmetro da ponteira da extrusora (por exemplo: 0.5, 0.35 etc.)"
+
+#: src/libslic3r/PrintConfig.cpp:1316
+msgid "Host Type"
+msgstr "Tipo de host"
+
+#: src/libslic3r/PrintConfig.cpp:1317
+msgid ""
+"Slic3r can upload G-code files to a printer host. This field must contain "
+"the kind of the host."
+msgstr ""
+"Slic3r pode carregar arquivos de G-code para um host de impressora. Este "
+"campo deve conter o tipo do host."
+
+#: src/libslic3r/PrintConfig.cpp:1328
+msgid "Only retract when crossing perimeters"
+msgstr "Apenas retrair quando cruzar perímetros"
+
+#: src/libslic3r/PrintConfig.cpp:1329
+msgid ""
+"Disables retraction when the travel path does not exceed the upper layer's "
+"perimeters (and thus any ooze will be probably invisible)."
+msgstr ""
+"Desativa a retração quando o caminho de viagem não excede os perímetros da "
+"camada superior (e, portanto, qualquer escorrimento será provavelmente "
+"invisível)."
+
+#: src/libslic3r/PrintConfig.cpp:1336
+msgid ""
+"This option will drop the temperature of the inactive extruders to prevent "
+"oozing. It will enable a tall skirt automatically and move extruders outside "
+"such skirt when changing temperatures."
+msgstr ""
+"Esta opção irá descartar a temperatura das extrusoras inativas para evitar a "
+"escorrimento. Ele vai permitir uma saia alta automaticamente e mover "
+"extrusoras fora de tal saia quando a mudança de temperatura."
+
+#: src/libslic3r/PrintConfig.cpp:1343
+msgid "Output filename format"
+msgstr "Formato de nome de arquivo de saída"
+
+#: src/libslic3r/PrintConfig.cpp:1344
+msgid ""
+"You can use all configuration options as variables inside this template. For "
+"example: [layer_height], [fill_density] etc. You can also use [timestamp], "
+"[year], [month], [day], [hour], [minute], [second], [version], "
+"[input_filename], [input_filename_base]."
+msgstr ""
+"Você pode usar todas as opções de config. como variáveis dentro deste "
+"modelo. Por exemplo: [camada_altura], [densidade_preenchimento] etc. Você "
+"também pode usar [tempo], [ano], [mês], [dia], [hora], [minuto], [segundo], "
+"[versão], [nome_entrada], [nome_entrada_base]."
+
+#: src/libslic3r/PrintConfig.cpp:1353
+msgid "Detect bridging perimeters"
+msgstr "Detectar perímetros de ponte"
+
+#: src/libslic3r/PrintConfig.cpp:1355
+msgid ""
+"Experimental option to adjust flow for overhangs (bridge flow will be used), "
+"to apply bridge speed to them and enable fan."
+msgstr ""
+"Opção experimental para ajustar o fluxo para angulações (o fluxo da ponte "
+"será usado), para aplicar a velocidade da ponte a eles e para habilitar a "
+"ventoinha."
+
+#: src/libslic3r/PrintConfig.cpp:1361
+msgid "Filament parking position"
+msgstr "Posição de estacionamento do filamento"
+
+#: src/libslic3r/PrintConfig.cpp:1362
+msgid ""
+"Distance of the extruder tip from the position where the filament is parked "
+"when unloaded. This should match the value in printer firmware."
+msgstr ""
+"Distância da ponta da extrusora da posição onde o filamento está estacionado "
+"quando descarregado. Isso deve corresponder ao valor no firmware da "
+"impressora."
+
+#: src/libslic3r/PrintConfig.cpp:1370
+msgid "Extra loading distance"
+msgstr "Distância de carregamento extra"
+
+#: src/libslic3r/PrintConfig.cpp:1371
+msgid ""
+"When set to zero, the distance the filament is moved from parking position "
+"during load is exactly the same as it was moved back during unload. When "
+"positive, it is loaded further,  if negative, the loading move is shorter "
+"than unloading."
+msgstr ""
+"Quando ajustado a zero, a distância que o filamento é movida da posição do "
+"estacionamento durante a carga é exatamente a mesma que foi movida para trás "
+"durante o descarregamento. Quando positivo, ele é carregado ainda mais, se "
+"negativo, o movimento de carga é menor do que o descarregamento."
+
+#: src/libslic3r/PrintConfig.cpp:1379 src/libslic3r/PrintConfig.cpp:1397
+#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1419
+msgid "Perimeters"
+msgstr "Perímetros"
+
+#: src/libslic3r/PrintConfig.cpp:1380
+msgid ""
+"This is the acceleration your printer will use for perimeters. A high value "
+"like 9000 usually gives good results if your hardware is up to the job. Set "
+"zero to disable acceleration control for perimeters."
+msgstr ""
+"Esta é a aceleração que sua impressora usará para perímetros. Um alto valor "
+"como 9000 geralmente dá bons resultados se o seu hardware suporta. Defina "
+"zero para desabilitar o controle de aceleração para perímetros."
+
+#: src/libslic3r/PrintConfig.cpp:1388
+msgid "Perimeter extruder"
+msgstr "Extrusora de perímetro"
+
+#: src/libslic3r/PrintConfig.cpp:1390
+msgid ""
+"The extruder to use when printing perimeters and brim. First extruder is 1."
+msgstr ""
+"A extrusora para usar ao imprimir perímetros e aba. A primeira extrusora é 1."
+
+#: src/libslic3r/PrintConfig.cpp:1399
+msgid ""
+"Set this to a non-zero value to set a manual extrusion width for perimeters. "
+"You may want to use thinner extrudates to get more accurate surfaces. If "
+"left zero, default extrusion width will be used if set, otherwise 1.125 x "
+"nozzle diameter will be used. If expressed as percentage (for example 200%) "
+"it will be computed over layer height."
+msgstr ""
+"Defina isso como um valor diferente de zero para definir uma largura de "
+"extrusão manual para perímetros. Você pode querer usar extrusões mais finos "
+"para obter superfícies mais precisas. Se for deixado zero, a largura de "
+"extrusão padrão será usada se definido, caso contrário, 1,125 x diâmetro da "
+"ponteira será usado. Se expresso em porcentagem(por exemplo, 200%) Ele será "
+"calculado sobre a altura da camada."
+
+#: src/libslic3r/PrintConfig.cpp:1411
+msgid ""
+"Speed for perimeters (contours, aka vertical shells). Set to zero for auto."
+msgstr ""
+"Velocidade para perímetros (contornos, também chamadas de perímetros "
+"externos verticais). Defina como zero para auto."
+
+#: src/libslic3r/PrintConfig.cpp:1421
+msgid ""
+"This option sets the number of perimeters to generate for each layer. Note "
+"that Slic3r may increase this number automatically when it detects sloping "
+"surfaces which benefit from a higher number of perimeters if the Extra "
+"Perimeters option is enabled."
+msgstr ""
+"Esta opção define o número de perímetros a gerar para cada camada. Observe "
+"que o Slic3r pode aumentar esse número automaticamente quando detecta "
+"superfícies inclinadas que se beneficiam de um número maior de perímetros se "
+"a opção extra perímetros estiver habilitada."
+
+#: src/libslic3r/PrintConfig.cpp:1425
+msgid "(minimum)"
+msgstr "(mínimo)"
+
+#: src/libslic3r/PrintConfig.cpp:1433
+msgid ""
+"If you want to process the output G-code through custom scripts, just list "
+"their absolute paths here. Separate multiple scripts with a semicolon. "
+"Scripts will be passed the absolute path to the G-code file as the first "
+"argument, and they can access the Slic3r config settings by reading "
+"environment variables."
+msgstr ""
+"Se você quiser processar o G-code de saída por meio de scripts "
+"personalizados, basta listar seus caminhos absolutos aqui. Separe vários "
+"scripts com um ponto-e-vírgula. Os scripts serão passados o caminho absoluto "
+"para o arquivo de G-code como o primeiro argumento, e eles poderão acessar "
+"as config. de config. do Slic3r lendo variáveis de ambiente."
+
+#: src/libslic3r/PrintConfig.cpp:1445
+msgid "Printer type"
+msgstr "Tipo de impressora"
+
+#: src/libslic3r/PrintConfig.cpp:1446
+msgid "Type of the printer."
+msgstr "Tipo da impressora."
+
+#: src/libslic3r/PrintConfig.cpp:1451
+msgid "Printer notes"
+msgstr "Notas da impressora"
+
+#: src/libslic3r/PrintConfig.cpp:1452
+msgid "You can put your notes regarding the printer here."
+msgstr "Você pode colocar suas anotações sobre a impressora aqui."
+
+#: src/libslic3r/PrintConfig.cpp:1460
+msgid "Printer vendor"
+msgstr "Fornecedor da impressora"
+
+#: src/libslic3r/PrintConfig.cpp:1461
+msgid "Name of the printer vendor."
+msgstr "Nome do fornecedor da impressora."
+
+#: src/libslic3r/PrintConfig.cpp:1466
+msgid "Printer variant"
+msgstr "Variante da impressora"
+
+#: src/libslic3r/PrintConfig.cpp:1467
+msgid ""
+"Name of the printer variant. For example, the printer variants may be "
+"differentiated by a nozzle diameter."
+msgstr ""
+"Nome da variante da impressora. Por exemplo, as variantes da impressora "
+"podem ser diferenciadas por um diâmetro da ponteira."
+
+#: src/libslic3r/PrintConfig.cpp:1480
+msgid "Raft layers"
+msgstr "Camadas da estrado"
+
+#: src/libslic3r/PrintConfig.cpp:1482
+msgid ""
+"The object will be raised by this number of layers, and support material "
+"will be generated under it."
+msgstr ""
+"O objeto será elevado por este número de camadas, e o material de suporte "
+"será gerado em baixo dele."
+
+#: src/libslic3r/PrintConfig.cpp:1490
+msgid "Resolution"
+msgstr "Resolução"
+
+#: src/libslic3r/PrintConfig.cpp:1491
+msgid ""
+"Minimum detail resolution, used to simplify the input file for speeding up "
+"the slicing job and reducing memory usage. High-resolution models often "
+"carry more detail than printers can render. Set to zero to disable any "
+"simplification and use full resolution from input."
+msgstr ""
+"Resolução de detalhes mínimos, usada para simplificar o arquivo de entrada "
+"para acelerar o trabalho de fatiamento e reduzir o uso de memória. Modelos "
+"de alta resolução geralmente carregam mais detalhes do que as impressoras "
+"podem renderizar. Defina como zero para desabilitar qualquer simplificação e "
+"usar a resolução completa da entrada."
+
+#: src/libslic3r/PrintConfig.cpp:1501
+msgid "Minimum travel after retraction"
+msgstr "Retração em viagens acima de"
+
+#: src/libslic3r/PrintConfig.cpp:1502
+msgid ""
+"Retraction is not triggered when travel moves are shorter than this length."
+msgstr ""
+"A retração não é acionada quando os movimentos de viagem são mais curtos que "
+"esse comprimento."
+
+#: src/libslic3r/PrintConfig.cpp:1508
+msgid "Retract amount before wipe"
+msgstr "Quantidade de retração antes da limpeza"
+
+#: src/libslic3r/PrintConfig.cpp:1509
+msgid ""
+"With bowden extruders, it may be wise to do some amount of quick retract "
+"before doing the wipe movement."
+msgstr ""
+"Com extrusoras Bowden, pode ser sábio fazer alguma quantidade de retração "
+"rápida antes de fazer o movimento da limpeza."
+
+#: src/libslic3r/PrintConfig.cpp:1516
+msgid "Retract on layer change"
+msgstr "Retrair na mudança de camada"
+
+#: src/libslic3r/PrintConfig.cpp:1517
+msgid "This flag enforces a retraction whenever a Z move is done."
+msgstr "Este sinalizador impõe uma retração sempre que um movimento Z é feito."
+
+#: src/libslic3r/PrintConfig.cpp:1522 src/libslic3r/PrintConfig.cpp:1530
+msgid "Length"
+msgstr "Comprimento"
+
+#: src/libslic3r/PrintConfig.cpp:1523
+msgid "Retraction Length"
+msgstr "Comprimento de retração"
+
+#: src/libslic3r/PrintConfig.cpp:1524
+msgid ""
+"When retraction is triggered, filament is pulled back by the specified "
+"amount (the length is measured on raw filament, before it enters the "
+"extruder)."
+msgstr ""
+"Quando a retração é acionada, o filamento é puxado para trás pela quantidade "
+"especificada (o comprimento é medido em filamento cru, antes de entrar na "
+"extrusora)."
+
+#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1535
+msgid "mm (zero to disable)"
+msgstr "mm (zero para desativar)"
+
+#: src/libslic3r/PrintConfig.cpp:1531
+msgid "Retraction Length (Toolchange)"
+msgstr "Comprimento de retração (mudança de ferramenta)"
+
+#: src/libslic3r/PrintConfig.cpp:1532
+msgid ""
+"When retraction is triggered before changing tool, filament is pulled back "
+"by the specified amount (the length is measured on raw filament, before it "
+"enters the extruder)."
+msgstr ""
+"Quando a retração é acionada antes de mudar de ferramenta, o filamento é "
+"puxado para trás pela quantidade especificada (o comprimento é medido em "
+"filamento cru, antes de entrar na extrusora)."
+
+#: src/libslic3r/PrintConfig.cpp:1540
+msgid "Lift Z"
+msgstr "Elevar Z"
+
+#: src/libslic3r/PrintConfig.cpp:1541
+msgid ""
+"If you set this to a positive value, Z is quickly raised every time a "
+"retraction is triggered. When using multiple extruders, only the setting for "
+"the first extruder will be considered."
+msgstr ""
+"Se você definir isso como um valor positivo, Z é rapidamente elevado sempre "
+"que uma retração é acionada. Ao usar várias extrusoras, somente a config. "
+"para a primeira extrusora será considerada."
+
+#: src/libslic3r/PrintConfig.cpp:1548
+msgid "Above Z"
+msgstr "Acima de Z"
+
+#: src/libslic3r/PrintConfig.cpp:1549
+msgid "Only lift Z above"
+msgstr "Apenas elevar Z acima"
+
+#: src/libslic3r/PrintConfig.cpp:1550
+msgid ""
+"If you set this to a positive value, Z lift will only take place above the "
+"specified absolute Z. You can tune this setting for skipping lift on the "
+"first layers."
+msgstr ""
+"Se você definir isso como um valor positivo, o levante do Z só ocorrerá "
+"acima do Z absoluto especificado. Você pode ajustar essa config. para pular "
+"o elevador nas primeiras camadas."
+
+#: src/libslic3r/PrintConfig.cpp:1557
+msgid "Below Z"
+msgstr "Abaixo de Z"
+
+#: src/libslic3r/PrintConfig.cpp:1558
+msgid "Only lift Z below"
+msgstr "Apenas elevar Z abaixo"
+
+#: src/libslic3r/PrintConfig.cpp:1559
+msgid ""
+"If you set this to a positive value, Z lift will only take place below the "
+"specified absolute Z. You can tune this setting for limiting lift to the "
+"first layers."
+msgstr ""
+"Se você definir isso como um valor positivo, o levante do Z só ocorrerá "
+"abaixo do Z absoluto especificado. Você pode ajustar essa config. para "
+"limitar a elevação às primeiras camadas."
+
+#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575
+msgid "Extra length on restart"
+msgstr "Comprimento extra no reinício"
+
+#: src/libslic3r/PrintConfig.cpp:1568
+msgid ""
+"When the retraction is compensated after the travel move, the extruder will "
+"push this additional amount of filament. This setting is rarely needed."
+msgstr ""
+"Quando a retração é compensada após o movimento de viagem, a extrusora vai "
+"empurrar esta quantidade adicional de filamento. Essa config. raramente é "
+"necessária."
+
+#: src/libslic3r/PrintConfig.cpp:1576
+msgid ""
+"When the retraction is compensated after changing tool, the extruder will "
+"push this additional amount of filament."
+msgstr ""
+"Quando a retração é compensada após a ferramenta de mudança, a extrusora "
+"empurrará esta quantidade adicional de filamento."
+
+#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1584
+msgid "Retraction Speed"
+msgstr "Velocidade da retração"
+
+#: src/libslic3r/PrintConfig.cpp:1585
+msgid "The speed for retractions (it only applies to the extruder motor)."
+msgstr "A velocidade para retrações (aplica-se somente ao motor da extrusora)."
+
+#: src/libslic3r/PrintConfig.cpp:1591 src/libslic3r/PrintConfig.cpp:1592
+msgid "Deretraction Speed"
+msgstr "Velocidade de retorno de retração"
+
+#: src/libslic3r/PrintConfig.cpp:1593
+msgid ""
+"The speed for loading of a filament into extruder after retraction (it only "
+"applies to the extruder motor). If left to zero, the retraction speed is "
+"used."
+msgstr ""
+"A velocidade para o carregamento de um filamento na extrusora após a "
+"retração (aplica-se somente ao motor da extrusora). Se deixada como zero, a "
+"velocidade de retração é usada."
+
+#: src/libslic3r/PrintConfig.cpp:1600
+msgid "Seam position"
+msgstr "Posição da costura"
+
+#: src/libslic3r/PrintConfig.cpp:1602
+msgid "Position of perimeters starting points."
+msgstr "Posição inicial dos pontos do perímetro."
+
+#: src/libslic3r/PrintConfig.cpp:1608
+msgid "Random"
+msgstr "Aleatório"
+
+#: src/libslic3r/PrintConfig.cpp:1609
+msgid "Nearest"
+msgstr "Próximo"
+
+#: src/libslic3r/PrintConfig.cpp:1610
+msgid "Aligned"
+msgstr "Alinhado(a)"
+
+#: src/libslic3r/PrintConfig.cpp:1618
+msgid "Direction"
+msgstr "Direção"
+
+#: src/libslic3r/PrintConfig.cpp:1620
+msgid "Preferred direction of the seam"
+msgstr "Direção preferida da costura"
+
+#: src/libslic3r/PrintConfig.cpp:1621
+msgid "Seam preferred direction"
+msgstr "Direção de preferência da costura"
+
+#: src/libslic3r/PrintConfig.cpp:1628
+msgid "Jitter"
+msgstr "Jitter"
+
+#: src/libslic3r/PrintConfig.cpp:1630
+msgid "Seam preferred direction jitter"
+msgstr "Direção da costura preferencial para Jitter"
+
+#: src/libslic3r/PrintConfig.cpp:1631
+msgid "Preferred direction of the seam - jitter"
+msgstr "Direção preferida da costura-jitter"
+
+#: src/libslic3r/PrintConfig.cpp:1641
+msgid "USB/serial port for printer connection."
+msgstr "USB/porta serial para conexão da impressora."
+
+#: src/libslic3r/PrintConfig.cpp:1648
+msgid "Serial port speed"
+msgstr "Velocidade da porta serial"
+
+#: src/libslic3r/PrintConfig.cpp:1649
+msgid "Speed (baud) of USB/serial port for printer connection."
+msgstr "Velocidade (baud) do USB/porta serial para conexão da impressora."
+
+#: src/libslic3r/PrintConfig.cpp:1658
+msgid "Distance from object"
+msgstr "Distância do objeto"
+
+#: src/libslic3r/PrintConfig.cpp:1659
+msgid ""
+"Distance between skirt and object(s). Set this to zero to attach the skirt "
+"to the object(s) and get a brim for better adhesion."
+msgstr ""
+"Distância entre a saia e o objeto (s). Defina isso como zero para anexar a "
+"saia para o objeto (s) e obter uma aba para uma melhor aderência."
+
+#: src/libslic3r/PrintConfig.cpp:1666
+msgid "Skirt height"
+msgstr "Altura da saia"
+
+#: src/libslic3r/PrintConfig.cpp:1667
+msgid ""
+"Height of skirt expressed in layers. Set this to a tall value to use skirt "
+"as a shield against drafts."
+msgstr ""
+"Altura da saia expressa em camadas. Defina isso como um valor alto para usar "
+"a saia como um escudo contra rascunhos."
+
+#: src/libslic3r/PrintConfig.cpp:1674
+msgid "Loops (minimum)"
+msgstr "Voltas (mínimo)"
+
+#: src/libslic3r/PrintConfig.cpp:1675
+msgid "Skirt Loops"
+msgstr "Voltas de saia"
+
+#: src/libslic3r/PrintConfig.cpp:1676
+msgid ""
+"Number of loops for the skirt. If the Minimum Extrusion Length option is "
+"set, the number of loops might be greater than the one configured here. Set "
+"this to zero to disable skirt completely."
+msgstr ""
+"Número de voltas para a saia. Se a opção comprimento mínimo de extrusão "
+"estiver definida, o número de voltas pode ser maior do que aquele "
+"configurado aqui. Defina isso como zero para desabilitar a saia "
+"completamente."
+
+#: src/libslic3r/PrintConfig.cpp:1684
+msgid "Slow down if layer print time is below"
+msgstr "Diminuir a velocidade quando o tempo de impressão for menor que"
+
+#: src/libslic3r/PrintConfig.cpp:1685
+msgid ""
+"If layer print time is estimated below this number of seconds, print moves "
+"speed will be scaled down to extend duration to this value."
+msgstr ""
+"Se o tempo de impressão da camada for estimado abaixo desse número de "
+"segundos, a velocidade de impressão será reduzida para estender a duração a "
+"esse valor."
+
+#: src/libslic3r/PrintConfig.cpp:1695
+msgid "Small perimeters"
+msgstr "Perímetro pequeno"
+
+#: src/libslic3r/PrintConfig.cpp:1697
+msgid ""
+"This separate setting will affect the speed of perimeters having radius <= "
+"6.5mm (usually holes). If expressed as percentage (for example: 80%) it will "
+"be calculated on the perimeters speed setting above. Set to zero for auto."
+msgstr ""
+"Este ajuste separado afetará a velocidade dos perímetros que têm o raio < = "
+"6.5 mm (geralmente furos). Se expresso em porcentagem(por exemplo: 80%) Ele "
+"será calculado sobre a velocidade de perímetros configurados acima. Defina "
+"como zero para auto."
+
+#: src/libslic3r/PrintConfig.cpp:1707
+msgid "Solid infill threshold area"
+msgstr "Área de limiar de preenchimento sólido"
+
+#: src/libslic3r/PrintConfig.cpp:1709
+msgid ""
+"Force solid infill for regions having a smaller area than the specified "
+"threshold."
+msgstr ""
+"Forçar preenchimento sólido para regiões com uma área menor do que o limite "
+"especificado."
+
+#: src/libslic3r/PrintConfig.cpp:1710
+msgid "mm²"
+msgstr "mm²"
+
+#: src/libslic3r/PrintConfig.cpp:1716
+msgid "Solid infill extruder"
+msgstr "Extrusora de preenchimento sólido"
+
+#: src/libslic3r/PrintConfig.cpp:1718
+msgid "The extruder to use when printing solid infill."
+msgstr ""
+"A extrusora a ser utilizada quando estiver imprimindo preenchimento sólido."
+
+#: src/libslic3r/PrintConfig.cpp:1724
+msgid "Solid infill every"
+msgstr "Preenchimento sólido a cada"
+
+#: src/libslic3r/PrintConfig.cpp:1726
+msgid ""
+"This feature allows to force a solid layer every given number of layers. "
+"Zero to disable. You can set this to any value (for example 9999); Slic3r "
+"will automatically choose the maximum possible number of layers to combine "
+"according to nozzle diameter and layer height."
+msgstr ""
+"Este recurso permite forçar uma camada sólida a cada número determinado de "
+"camadas. Zero para desabilitar. Você pode definir isso para qualquer valor "
+"(por exemplo 9999); Slic3r escolherá automaticamente o número máximo "
+"possível de camadas para combinar de acordo com o diâmetro da ponteira e a "
+"altura da camada."
+
+#: src/libslic3r/PrintConfig.cpp:1738
+msgid ""
+"Set this to a non-zero value to set a manual extrusion width for infill for "
+"solid surfaces. If left zero, default extrusion width will be used if set, "
+"otherwise 1.125 x nozzle diameter will be used. If expressed as percentage "
+"(for example 90%) it will be computed over layer height."
+msgstr ""
+"Defina isso como um valor diferente de zero para definir uma largura de "
+"extrusão manual para preenchimento de superfícies sólidas. Se for deixado "
+"zero, a largura de extrusão padrão será usada se definido, caso contrário, "
+"1,125 x diâmetro da ponteira será usado. Se expresso em porcentagem(por "
+"exemplo, 90%) Ele será calculado sobre a altura da camada."
+
+#: src/libslic3r/PrintConfig.cpp:1748
+msgid ""
+"Speed for printing solid regions (top/bottom/internal horizontal shells). "
+"This can be expressed as a percentage (for example: 80%) over the default "
+"infill speed above. Set to zero for auto."
+msgstr ""
+"Velocidade para imprimir regiões sólidas (topo/fundo/perímetros externos "
+"horizontais internas). Isto pode ser expresso em porcentagem(por exemplo: "
+"80%) sobre a velocidade de preenchimento padrão acima. Defina como zero para "
+"auto."
+
+#: src/libslic3r/PrintConfig.cpp:1760
+msgid "Number of solid layers to generate on top and bottom surfaces."
+msgstr ""
+"Número de camadas sólidas a serem geradas nas interfaces do topo e base."
+
+#: src/libslic3r/PrintConfig.cpp:1766
+msgid "Spiral vase"
+msgstr "Vaso espiral"
+
+#: src/libslic3r/PrintConfig.cpp:1767
+msgid ""
+"This feature will raise Z gradually while printing a single-walled object in "
+"order to remove any visible seam. This option requires a single perimeter, "
+"no infill, no top solid layers and no support material. You can still set "
+"any number of bottom solid layers as well as skirt/brim loops. It won't work "
+"when printing more than an object."
+msgstr ""
+"Este recurso irá elevar Z gradualmente durante a impressão de um objeto de "
+"parede única, a fim de remover qualquer costura visível. Esta opção exige um "
+"único perímetro, nenhum preenchimento, nenhumas camadas contínuas superiores "
+"e nenhum material de sustentação. Você ainda pode definir qualquer número de "
+"camadas sólidas de fundo, bem como saia/aba voltas. Ele não funcionará ao "
+"imprimir mais de um objeto."
+
+#: src/libslic3r/PrintConfig.cpp:1775
+msgid "Temperature variation"
+msgstr "Variação de temperatura"
+
+#: src/libslic3r/PrintConfig.cpp:1776
+msgid ""
+"Temperature difference to be applied when an extruder is not active. Enables "
+"a full-height \"sacrificial\" skirt on which the nozzles are periodically "
+"wiped."
+msgstr ""
+"Diferença de temperatura a ser aplicada quando uma extrusora não está ativa. "
+"Permite uma saia \"sacrificial\" em que as ponteiras são limpadas "
+"periodicamente."
+
+#: src/libslic3r/PrintConfig.cpp:1786
+msgid ""
+"This start procedure is inserted at the beginning, after bed has reached the "
+"target temperature and extruder just started heating, and before extruder "
+"has finished heating. If PrusaSlicer detects M104 or M190 in your custom "
+"codes, such commands will not be prepended automatically so you're free to "
+"customize the order of heating commands and other custom actions. Note that "
+"you can use placeholder variables for all PrusaSlicer settings, so you can "
+"put a \"M109 S[first_layer_temperature]\" command wherever you want."
+msgstr ""
+"Este procedimento do começo é introduzido no início, depois que a mesa "
+"alcançou a temperatura alvo e a extrusora apenas começou o aquecimento, e "
+"antes que a extrusora terminasse o aquecimento. Se PrusaSlicer detecta M104 "
+"ou M190 em seus códigos personalizados, esses comandos não serão precedidos "
+"automaticamente para que você esteja livre para personalizar a ordem dos "
+"comandos de aquecimento e outras ações personalizadas. Observe que você pode "
+"usar variáveis de espaço reservado para todas as config. de PrusaSlicer, "
+"para que você possa colocar um comando \"M109 S "
+"[temperatura_primeira_camada]\" onde quiser."
+
+#: src/libslic3r/PrintConfig.cpp:1801
+msgid ""
+"This start procedure is inserted at the beginning, after any printer start "
+"gcode (and after any toolchange to this filament in case of multi-material "
+"printers). This is used to override settings for a specific filament. If "
+"PrusaSlicer detects M104, M109, M140 or M190 in your custom codes, such "
+"commands will not be prepended automatically so you're free to customize the "
+"order of heating commands and other custom actions. Note that you can use "
+"placeholder variables for all PrusaSlicer settings, so you can put a \"M109 "
+"S[first_layer_temperature]\" command wherever you want. If you have multiple "
+"extruders, the gcode is processed in extruder order."
+msgstr ""
+"Este procedimento de início é inserido no começo, depois de qualquer "
+"impressora iniciar Gcode (e depois de qualquer troca de ferramenta para este "
+"filamento em caso de impressoras de vários materiais). Isso é usado para "
+"substituir as config. de um filamento específico. Se PrusaSlicer detecta "
+"M104, M109, M140 ou M190 em seus códigos personalizados, esses comandos não "
+"serão precedidos automaticamente para que você esteja livre para "
+"personalizar a ordem dos comandos de aquecimento e outras ações "
+"personalizadas. Observe que você pode usar variáveis de espaço reservado "
+"para todas as config. de PrusaSlicer, para que você possa colocar um comando "
+"\"M109 S [temperatura_primeira_camada]\" onde quiser. Se você tiver várias "
+"extrusoras, o Gcode é processado em ordem de extrusora."
+
+#: src/libslic3r/PrintConfig.cpp:1817
+msgid "Single Extruder Multi Material"
+msgstr "Única extrusora multi material"
+
+#: src/libslic3r/PrintConfig.cpp:1818
+msgid "The printer multiplexes filaments into a single hot end."
+msgstr "A impressora multiplexes filamentos em uma única extremidade quente."
+
+#: src/libslic3r/PrintConfig.cpp:1823
+msgid "Prime all printing extruders"
+msgstr "Extrusar todas as extrusoras de impressão"
+
+#: src/libslic3r/PrintConfig.cpp:1824
+msgid ""
+"If enabled, all printing extruders will be primed at the front edge of the "
+"print bed at the start of the print."
+msgstr ""
+"Se ativada, todas as extrusoras de impressão extrusarão na aba dianteira da "
+"mesa de impressão no início da impressão."
+
+#: src/libslic3r/PrintConfig.cpp:1829
+msgid "Generate support material"
+msgstr "Gerar material de suporte"
+
+#: src/libslic3r/PrintConfig.cpp:1831
+msgid "Enable support material generation."
+msgstr "Habilitar geração de material de suporte."
+
+#: src/libslic3r/PrintConfig.cpp:1835
+msgid "Auto generated supports"
+msgstr "Gerar suportes automaticamente"
+
+#: src/libslic3r/PrintConfig.cpp:1837
+msgid ""
+"If checked, supports will be generated automatically based on the overhang "
+"threshold value. If unchecked, supports will be generated inside the "
+"\"Support Enforcer\" volumes only."
+msgstr ""
+"Se marcada, os suportes serão gerados automaticamente com base no valor do "
+"limite de angulação. Se desmarcada, as sustentações serão geradas dentro dos "
+"volumes do \"reforçador de suporte\" somente."
+
+#: src/libslic3r/PrintConfig.cpp:1843
+msgid "XY separation between an object and its support"
+msgstr "Separação entre o objeto e seu suporte em XY"
+
+#: src/libslic3r/PrintConfig.cpp:1845
+msgid ""
+"XY separation between an object and its support. If expressed as percentage "
+"(for example 50%), it will be calculated over external perimeter width."
+msgstr ""
+"Separação entre o objeto e seu suporte em XY. Se expresso como porcentagem "
+"(por exemplo, 50%), será calculado com base na espessura do perímetro "
+"externo."
+
+#: src/libslic3r/PrintConfig.cpp:1855
+msgid "Pattern angle"
+msgstr "Ângulo do padrão"
+
+#: src/libslic3r/PrintConfig.cpp:1857
+msgid ""
+"Use this setting to rotate the support material pattern on the horizontal "
+"plane."
+msgstr ""
+"Use essa config. para girar o padrão de material de suporte no plano "
+"horizontal."
+
+#: src/libslic3r/PrintConfig.cpp:1867 src/libslic3r/PrintConfig.cpp:2563
+msgid ""
+"Only create support if it lies on a build plate. Don't create support on a "
+"print."
+msgstr ""
+"Apenas criar suporte se ele está em uma mesa. Não crie suporte em uma "
+"impressão."
+
+#: src/libslic3r/PrintConfig.cpp:1873
+msgid "Contact Z distance"
+msgstr "Distância de contato Z"
+
+#: src/libslic3r/PrintConfig.cpp:1875
+msgid ""
+"The vertical distance between object and support material interface. Setting "
+"this to 0 will also prevent Slic3r from using bridge flow and speed for the "
+"first object layer."
+msgstr ""
+"A distância vertical entre o objeto e a interface de material de suporte. "
+"Definir isso como 0 também impedirá Slic3r de usar o fluxo de ponte e a "
+"velocidade para a primeira camada de objeto."
+
+#: src/libslic3r/PrintConfig.cpp:1882
+msgid "0 (soluble)"
+msgstr "0 (solúvel)"
+
+#: src/libslic3r/PrintConfig.cpp:1883
+msgid "0.2 (detachable)"
+msgstr "0.2 (destacável)"
+
+#: src/libslic3r/PrintConfig.cpp:1888
+msgid "Enforce support for the first"
+msgstr "Reforçar suportes para a(s) primeira(s)"
+
+#: src/libslic3r/PrintConfig.cpp:1890
+msgid ""
+"Generate support material for the specified number of layers counting from "
+"bottom, regardless of whether normal support material is enabled or not and "
+"regardless of any angle threshold. This is useful for getting more adhesion "
+"of objects having a very thin or poor footprint on the build plate."
+msgstr ""
+"Gere material de suporte para o número especificado de camadas que contam da "
+"parte inferior, independentemente de o material de suporte normal estar "
+"ativado ou não e independentemente de qualquer limite de ângulo. Isso é útil "
+"para obter mais aderência de objetos com uma pegada muito fina ou fraca na "
+"placa de construção."
+
+#: src/libslic3r/PrintConfig.cpp:1895
+msgid "Enforce support for the first n layers"
+msgstr "Reforçar suportes na(s) primera(s) n camada(s)"
+
+#: src/libslic3r/PrintConfig.cpp:1901
+msgid "Support material/raft/skirt extruder"
+msgstr "Extrusora de material de suporte/estrado/saia"
+
+#: src/libslic3r/PrintConfig.cpp:1903
+msgid ""
+"The extruder to use when printing support material, raft and skirt (1+, 0 to "
+"use the current extruder to minimize tool changes)."
+msgstr ""
+"A extrusora a ser usada ao imprimir material de suporte, estrado e saia (1 "
+"+, 0 para usar a extrusora atual para minimizar as mudanças na ferramenta)."
+
+#: src/libslic3r/PrintConfig.cpp:1912
+msgid ""
+"Set this to a non-zero value to set a manual extrusion width for support "
+"material. If left zero, default extrusion width will be used if set, "
+"otherwise nozzle diameter will be used. If expressed as percentage (for "
+"example 90%) it will be computed over layer height."
+msgstr ""
+"Defina isso como um valor diferente de zero para definir uma largura de "
+"extrusão manual para material de suporte. Se deixada em zero, a largura "
+"padrão da extrusão será usada, se não o diâmetro da ponteira será usado. Se "
+"expresso em porcentagem(por exemplo, 90%) Ele será calculado sobre a altura "
+"da camada."
+
+#: src/libslic3r/PrintConfig.cpp:1920
+msgid "Interface loops"
+msgstr "Voltas da interface"
+
+#: src/libslic3r/PrintConfig.cpp:1922
+msgid ""
+"Cover the top contact layer of the supports with loops. Disabled by default."
+msgstr ""
+"Cubra a camada de contato superior dos suportes com laços. Desativado por "
+"padrão."
+
+#: src/libslic3r/PrintConfig.cpp:1927
+msgid "Support material/raft interface extruder"
+msgstr "Extrusora de material de suporte/estrado"
+
+#: src/libslic3r/PrintConfig.cpp:1929
+msgid ""
+"The extruder to use when printing support material interface (1+, 0 to use "
+"the current extruder to minimize tool changes). This affects raft too."
+msgstr ""
+"A extrusora para usar ao imprimir a relação material do apoio (1 +, 0 para "
+"usar o extrusor atual para minimizar mudanças da ferramenta). Isso afeta o "
+"estrado também."
+
+#: src/libslic3r/PrintConfig.cpp:1936
+msgid "Interface layers"
+msgstr "Camadas de interface"
+
+#: src/libslic3r/PrintConfig.cpp:1938
+msgid ""
+"Number of interface layers to insert between the object(s) and support "
+"material."
+msgstr ""
+"Número de camadas de interface para inserir entre o objeto(s) e material de "
+"suporte."
+
+#: src/libslic3r/PrintConfig.cpp:1945
+msgid "Interface pattern spacing"
+msgstr "Espaçamento do padrão da interface"
+
+#: src/libslic3r/PrintConfig.cpp:1947
+msgid "Spacing between interface lines. Set zero to get a solid interface."
+msgstr ""
+"Espaçamento entre as linhas de interface. Defina zero para obter uma "
+"interface sólida."
+
+#: src/libslic3r/PrintConfig.cpp:1956
+msgid ""
+"Speed for printing support material interface layers. If expressed as "
+"percentage (for example 50%) it will be calculated over support material "
+"speed."
+msgstr ""
+"Velocidade para camadas de interface de material de suporte de impressão. Se "
+"expresso em porcentagem(por exemplo, 50%) Ele será calculado sobre a "
+"velocidade do material de suporte."
+
+#: src/libslic3r/PrintConfig.cpp:1965
+msgid "Pattern"
+msgstr "Padrão"
+
+#: src/libslic3r/PrintConfig.cpp:1967
+msgid "Pattern used to generate support material."
+msgstr "Padrão usado para gerar material de suporte."
+
+#: src/libslic3r/PrintConfig.cpp:1973
+msgid "Rectilinear grid"
+msgstr "Grade rectilínea"
+
+#: src/libslic3r/PrintConfig.cpp:1979
+msgid "Pattern spacing"
+msgstr "Padrão de espaçamento"
+
+#: src/libslic3r/PrintConfig.cpp:1981
+msgid "Spacing between support material lines."
+msgstr "Espaçamento entre linhas de material de suporte."
+
+#: src/libslic3r/PrintConfig.cpp:1990
+msgid "Speed for printing support material."
+msgstr "Velocidade para imprimir material de suporte."
+
+#: src/libslic3r/PrintConfig.cpp:1997
+msgid "Synchronize with object layers"
+msgstr "Sincronizar com camadas de objeto"
+
+#: src/libslic3r/PrintConfig.cpp:1999
+msgid ""
+"Synchronize support layers with the object print layers. This is useful with "
+"multi-material printers, where the extruder switch is expensive."
+msgstr ""
+"Sincronize camadas de suporte com as camadas de impressão do objeto. Isto é "
+"útil com as impressoras do multi-material, onde o interruptor da extrusora é "
+"caro."
+
+#: src/libslic3r/PrintConfig.cpp:2005
+msgid "Overhang threshold"
+msgstr "Limite de angulação"
+
+#: src/libslic3r/PrintConfig.cpp:2007
+msgid ""
+"Support material will not be generated for overhangs whose slope angle (90° "
+"= vertical) is above the given threshold. In other words, this value "
+"represent the most horizontal slope (measured from the horizontal plane) "
+"that you can print without support material. Set to zero for automatic "
+"detection (recommended)."
+msgstr ""
+"O material de suporte não será gerado para angulações cujo ângulo de "
+"inclinação (90 ° = vertical) esteja acima do limite determinado. Em outras "
+"palavras, esse valor representa a inclinação mais horizontal (medida a "
+"partir do plano horizontal) que você pode imprimir sem material de suporte. "
+"Defina como zero para detecção automática (recomendado)."
+
+#: src/libslic3r/PrintConfig.cpp:2019
+msgid "With sheath around the support"
+msgstr "Com bainha em torno do apoio"
+
+#: src/libslic3r/PrintConfig.cpp:2021
+msgid ""
+"Add a sheath (a single perimeter line) around the base support. This makes "
+"the support more reliable, but also more difficult to remove."
+msgstr ""
+"Adicione uma bainha (uma única linha de perímetro) em torno do suporte base. "
+"Isso torna o suporte mais confiável, mas também mais difícil de remover."
+
+#: src/libslic3r/PrintConfig.cpp:2028
+msgid ""
+"Extruder temperature for layers after the first one. Set this to zero to "
+"disable temperature control commands in the output."
+msgstr ""
+"Temperatura da extrusora para camadas após a primeira. Defina como zero para "
+"desabilitar os comandos de controle de temperatura na saída."
+
+#: src/libslic3r/PrintConfig.cpp:2036
+msgid "Detect thin walls"
+msgstr "Detectar paredes finas"
+
+#: src/libslic3r/PrintConfig.cpp:2038
+msgid ""
+"Detect single-width walls (parts where two extrusions don't fit and we need "
+"to collapse them into a single trace)."
+msgstr ""
+"Detecte paredes de largura única (partes onde duas extrusões não cabem e "
+"precisamos recolhê-las em um único traço)."
+
+#: src/libslic3r/PrintConfig.cpp:2044
+msgid "Threads"
+msgstr "Roscas"
+
+#: src/libslic3r/PrintConfig.cpp:2045
+msgid ""
+"Threads are used to parallelize long-running tasks. Optimal threads number "
+"is slightly above the number of available cores/processors."
+msgstr ""
+"Tópicos são usados para paralelizar tarefas de execução demorada. O número "
+"de tópicos ideais está ligeiramente acima do número de núcleos/processadores "
+"disponíveis."
+
+#: src/libslic3r/PrintConfig.cpp:2057
+msgid ""
+"This custom code is inserted before every toolchange. Placeholder variables "
+"for all PrusaSlicer settings as well as {previous_extruder} and "
+"{next_extruder} can be used. When a tool-changing command which changes to "
+"the correct extruder is included (such as T{next_extruder}), PrusaSlicer "
+"will emit no other such command. It is therefore possible to script custom "
+"behaviour both before and after the toolchange."
+msgstr ""
+"Este código personalizado é inserido antes de cada troca de ferramenta. "
+"Variáveis de espaço reservado para todas as config. de PrusaSlicer, bem como "
+"{previous_extruder} e {next_extruder} podem ser usadas. Quando um comando de "
+"mudança de ferramenta que muda para a extrusora correta está incluído (como "
+"T {next_extruder}), PrusaSlicer emitirá nenhum outro comando tal. Portanto, "
+"é possível script comportamento personalizado antes e depois da mudança de "
+"ferramenta."
+
+#: src/libslic3r/PrintConfig.cpp:2070
+msgid ""
+"Set this to a non-zero value to set a manual extrusion width for infill for "
+"top surfaces. You may want to use thinner extrudates to fill all narrow "
+"regions and get a smoother finish. If left zero, default extrusion width "
+"will be used if set, otherwise nozzle diameter will be used. If expressed as "
+"percentage (for example 90%) it will be computed over layer height."
+msgstr ""
+"Defina isso como um valor diferente de zero para definir uma largura de "
+"extrusão manual para preenchimento para superfícies superiores. Você pode "
+"querer usar extrusões mais finos para preencher todas as regiões estreitas e "
+"obter um acabamento mais suave. Se a esquerda zero, a largura padrão da "
+"extrusão será usada se ajustado, se não o diâmetro da ponteira será usado. "
+"Se expresso em porcentagem(por exemplo, 90%) Ele será calculado sobre a "
+"altura da camada."
+
+#: src/libslic3r/PrintConfig.cpp:2081
+msgid ""
+"Speed for printing top solid layers (it only applies to the uppermost "
+"external layers and not to their internal solid layers). You may want to "
+"slow down this to get a nicer surface finish. This can be expressed as a "
+"percentage (for example: 80%) over the solid infill speed above. Set to zero "
+"for auto."
+msgstr ""
+"Velocidade para imprimir camadas sólidas superiores (só se aplica às camadas "
+"externas superiores e não às suas camadas sólidas internas). Você pode "
+"querer diminuir este para ter um revestimento de superfície mais agradável. "
+"Isto pode ser expresso em porcentagem(por exemplo: 80%) sobre a velocidade "
+"de preenchimento sólido acima. Defina como zero para auto."
+
+#: src/libslic3r/PrintConfig.cpp:2096
+msgid "Number of solid layers to generate on top surfaces."
+msgstr "Número de camadas sólidas para gerar em superfícies superiores."
+
+#: src/libslic3r/PrintConfig.cpp:2097
+msgid "Top solid layers"
+msgstr "Camadas sólidas de topo"
+
+#: src/libslic3r/PrintConfig.cpp:2103
+msgid "Speed for travel moves (jumps between distant extrusion points)."
+msgstr ""
+"Velocidade para movimentos de viagem (saltos entre pontos de extrusão "
+"distantes)."
+
+#: src/libslic3r/PrintConfig.cpp:2111
+msgid "Use firmware retraction"
+msgstr "Usar retração do firmware"
+
+#: src/libslic3r/PrintConfig.cpp:2112
+msgid ""
+"This experimental setting uses G10 and G11 commands to have the firmware "
+"handle the retraction. This is only supported in recent Marlin."
+msgstr ""
+"Esta config. experimental usa comandos G10 e G11 para que o firmware "
+"manipule a retração. Isso só é suportado no recente Marlin."
+
+#: src/libslic3r/PrintConfig.cpp:2118
+msgid "Use relative E distances"
+msgstr "Utilizar distâncias relativas do E"
+
+#: src/libslic3r/PrintConfig.cpp:2119
+msgid ""
+"If your firmware requires relative E values, check this, otherwise leave it "
+"unchecked. Most firmwares use absolute values."
+msgstr ""
+"Se o firmware necessitar de valores relativos E, verifique isto, caso "
+"contrário, deixe-o desmarcado. A maioria dos firmwares usa valores absolutos."
+
+#: src/libslic3r/PrintConfig.cpp:2125
+msgid "Use volumetric E"
+msgstr "Usar E volumétrico"
+
+#: src/libslic3r/PrintConfig.cpp:2126
+msgid ""
+"This experimental setting uses outputs the E values in cubic millimeters "
+"instead of linear millimeters. If your firmware doesn't already know "
+"filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] "
+"T0' in your start G-code in order to turn volumetric mode on and use the "
+"filament diameter associated to the filament selected in Slic3r. This is "
+"only supported in recent Marlin."
+msgstr ""
+"Essa config. experimental usa saídas os valores E em milímetros cúbicos em "
+"vez de milímetros lineares. Se o firmware já não souber o diâmetro (s) do "
+"filamento, você pode colocar comandos como ' m 200 D [filament_diameter_0] "
+"T0 ' no seu G-code inicial para ativar o modo volumétrico e usar o diâmetro "
+"do filamento associado ao filamento selecionado em Slic3r. Isso só é "
+"suportado no recente Marlin."
+
+#: src/libslic3r/PrintConfig.cpp:2136
+msgid "Enable variable layer height feature"
+msgstr "Habilitar altura de camada variável"
+
+#: src/libslic3r/PrintConfig.cpp:2137
+msgid ""
+"Some printers or printer setups may have difficulties printing with a "
+"variable layer height. Enabled by default."
+msgstr ""
+"Algumas impressoras ou config. de impressora podem ter dificuldades para "
+"imprimir com uma altura de camada variável. Ativado por padrão."
+
+#: src/libslic3r/PrintConfig.cpp:2143
+msgid "Wipe while retracting"
+msgstr "Limpe durante a retração"
+
+#: src/libslic3r/PrintConfig.cpp:2144
+msgid ""
+"This flag will move the nozzle while retracting to minimize the possible "
+"blob on leaky extruders."
+msgstr ""
+"Esta bandeira moverá a ponteira ao retrair para minimizar a bolha possível "
+"em extrusoras vazando."
+
+#: src/libslic3r/PrintConfig.cpp:2151
+msgid ""
+"Multi material printers may need to prime or purge extruders on tool "
+"changes. Extrude the excess material into the wipe tower."
+msgstr ""
+"Várias impressoras de multi-material podem precisar purgar extrusoras em "
+"alterações de ferramenta. EXTRUDE o excesso de material para a torre de "
+"limpeza."
+
+#: src/libslic3r/PrintConfig.cpp:2157
+msgid "Purging volumes - load/unload volumes"
+msgstr "Volumes de purga-volumes de carga/descarregamento"
+
+#: src/libslic3r/PrintConfig.cpp:2158
+msgid ""
+"This vector saves required volumes to change from/to each tool used on the "
+"wipe tower. These values are used to simplify creation of the full purging "
+"volumes below."
+msgstr ""
+"Este vetor salva os volumes necessários para mudar de/para cada ferramenta "
+"usada na torre de limpeza. Esses valores são usados para simplificar a "
+"criação dos volumes de purga completos abaixo."
+
+#: src/libslic3r/PrintConfig.cpp:2164
+msgid "Purging volumes - matrix"
+msgstr "Volumes de purga-matriz"
+
+#: src/libslic3r/PrintConfig.cpp:2165
+msgid ""
+"This matrix describes volumes (in cubic milimetres) required to purge the "
+"new filament on the wipe tower for any given pair of tools."
+msgstr ""
+"Esta matriz descreve volumes (em milimetros cúbicos) necessários para limpar "
+"o novo filamento na torre de limpeza para qualquer dado par de ferramentas."
+
+#: src/libslic3r/PrintConfig.cpp:2174
+msgid "Position X"
+msgstr "Posição X"
+
+#: src/libslic3r/PrintConfig.cpp:2175
+msgid "X coordinate of the left front corner of a wipe tower"
+msgstr "Coordenada X do canto frontal esquerdo de uma torre de limpeza"
+
+#: src/libslic3r/PrintConfig.cpp:2181
+msgid "Position Y"
+msgstr "Posição Y"
+
+#: src/libslic3r/PrintConfig.cpp:2182
+msgid "Y coordinate of the left front corner of a wipe tower"
+msgstr "Coordenada Y do canto dianteiro esquerdo de uma torre de limpeza"
+
+#: src/libslic3r/PrintConfig.cpp:2189
+msgid "Width of a wipe tower"
+msgstr "Largura de uma torre da limpeza"
+
+#: src/libslic3r/PrintConfig.cpp:2195
+msgid "Wipe tower rotation angle"
+msgstr "Ângulo de rotação da torre"
+
+#: src/libslic3r/PrintConfig.cpp:2196
+msgid "Wipe tower rotation angle with respect to x-axis."
+msgstr "Ângulo de rotação da torre de limpeza em relação ao eixo X."
+
+#: src/libslic3r/PrintConfig.cpp:2203
+msgid "Wipe into this object's infill"
+msgstr "Limpe no preenchimento deste objeto"
+
+#: src/libslic3r/PrintConfig.cpp:2204
+msgid ""
+"Purging after toolchange will done inside this object's infills. This lowers "
+"the amount of waste but may result in longer print time  due to additional "
+"travel moves."
+msgstr ""
+"Purga após troca de ferramenta será feito dentro de preenchimentos deste "
+"objeto. Isso diminui a quantidade de resíduos, mas pode resultar em tempo de "
+"impressão mais longo devido a movimentos de viagem adicionais."
+
+#: src/libslic3r/PrintConfig.cpp:2211
+msgid "Wipe into this object"
+msgstr "Limpar neste objeto"
+
+#: src/libslic3r/PrintConfig.cpp:2212
+msgid ""
+"Object will be used to purge the nozzle after a toolchange to save material "
+"that would otherwise end up in the wipe tower and decrease print time. "
+"Colours of the objects will be mixed as a result."
+msgstr ""
+"Objeto será usado para limpar o bico após uma troca de ferramenta para "
+"salvar o material que de outra forma acabaria na torre de limpeza e diminuir "
+"o tempo de impressão. As cores dos objetos serão misturadas como resultado."
+
+#: src/libslic3r/PrintConfig.cpp:2218
+msgid "Maximal bridging distance"
+msgstr "Distância de ponte máxima"
+
+#: src/libslic3r/PrintConfig.cpp:2219
+msgid "Maximal distance between supports on sparse infill sections."
+msgstr ""
+"Distância máxima entre as sustentações em seções preenchimento esparsas."
+
+#: src/libslic3r/PrintConfig.cpp:2225
+msgid "XY Size Compensation"
+msgstr "Compensação de tamanho em XY"
+
+#: src/libslic3r/PrintConfig.cpp:2227
+msgid ""
+"The object will be grown/shrunk in the XY plane by the configured value "
+"(negative = inwards, positive = outwards). This might be useful for fine-"
+"tuning hole sizes."
+msgstr ""
+"O objeto será aumentado/encolhido no plano XY pelo valor configurado "
+"(negativo = para dentro, positivo = para fora). Isso pode ser útil para "
+"ajustar os tamanhos dos furos."
+
+#: src/libslic3r/PrintConfig.cpp:2235
+msgid "Z offset"
+msgstr "Compensamento do Z"
+
+#: src/libslic3r/PrintConfig.cpp:2236
+msgid ""
+"This value will be added (or subtracted) from all the Z coordinates in the "
+"output G-code. It is used to compensate for bad Z endstop position: for "
+"example, if your endstop zero actually leaves the nozzle 0.3mm far from the "
+"print bed, set this to -0.3 (or fix your endstop)."
+msgstr ""
+"Esse valor será adicionado (ou subtraído) de todas as coordenadas Z no G-"
+"code de saída. Ele é usado para compensar a posição de final de curso Z "
+"ruim: por exemplo, se o seu final de curso zero realmente deixa o bico 0.3 "
+"mm longe da mesa de impressão, defina este para-0,3 (ou corrigir o seu final "
+"de curso)."
+
+#: src/libslic3r/PrintConfig.cpp:2294
+msgid "Display width"
+msgstr "Largura do display"
+
+#: src/libslic3r/PrintConfig.cpp:2295
+msgid "Width of the display"
+msgstr "Largura do display"
+
+#: src/libslic3r/PrintConfig.cpp:2300
+msgid "Display height"
+msgstr "Altura do display"
+
+#: src/libslic3r/PrintConfig.cpp:2301
+msgid "Height of the display"
+msgstr "Altura do display"
+
+#: src/libslic3r/PrintConfig.cpp:2306
+msgid "Number of pixels in"
+msgstr "Número de pixels em"
+
+#: src/libslic3r/PrintConfig.cpp:2308
+msgid "Number of pixels in X"
+msgstr "Número de pixels em X"
+
+#: src/libslic3r/PrintConfig.cpp:2314
+msgid "Number of pixels in Y"
+msgstr "Número de pixels em Y"
+
+#: src/libslic3r/PrintConfig.cpp:2319
+msgid "Display horizontal mirroring"
+msgstr "Exibir espelhamento horizontal"
+
+#: src/libslic3r/PrintConfig.cpp:2320
+msgid "Mirror horizontally"
+msgstr "Espelhar horizontalmente"
+
+#: src/libslic3r/PrintConfig.cpp:2321
+msgid "Enable horizontal mirroring of output images"
+msgstr "Habilitar espelhamento horizontal de imagens de saída"
+
+#: src/libslic3r/PrintConfig.cpp:2326
+msgid "Display vertical mirroring"
+msgstr "Exibir espelhamento vertical"
+
+#: src/libslic3r/PrintConfig.cpp:2327
+msgid "Mirror vertically"
+msgstr "Espelharvertical"
+
+#: src/libslic3r/PrintConfig.cpp:2328
+msgid "Enable vertical mirroring of output images"
+msgstr "Habilitar espelhamento vertical de imagens de saída"
+
+#: src/libslic3r/PrintConfig.cpp:2333
+msgid "Display orientation"
+msgstr "Orientação do display"
+
+#: src/libslic3r/PrintConfig.cpp:2334
+msgid ""
+"Set the actual LCD display orientation inside the SLA printer. Portrait mode "
+"will flip the meaning of display width and height parameters and the output "
+"images will be rotated by 90 degrees."
+msgstr ""
+"Defina a orientação real do visor LCD dentro da impressora SLA. O modo "
+"retrato inverterá o significado dos parâmetros de largura e altura da tela e "
+"as imagens de saída serão giradas por 90 graus."
+
+#: src/libslic3r/PrintConfig.cpp:2340
+msgid "Landscape"
+msgstr "Paisagem"
+
+#: src/libslic3r/PrintConfig.cpp:2341
+msgid "Portrait"
+msgstr "Retrato"
+
+#: src/libslic3r/PrintConfig.cpp:2346
+msgid "Fast"
+msgstr "Rápido"
+
+#: src/libslic3r/PrintConfig.cpp:2347
+msgid "Fast tilt"
+msgstr "Inclinação rápida"
+
+#: src/libslic3r/PrintConfig.cpp:2348
+msgid "Time of the fast tilt"
+msgstr "Tempo da inclinação rápida"
+
+#: src/libslic3r/PrintConfig.cpp:2355
+msgid "Slow"
+msgstr "Lento"
+
+#: src/libslic3r/PrintConfig.cpp:2356
+msgid "Slow tilt"
+msgstr "Inclinação lenta"
+
+#: src/libslic3r/PrintConfig.cpp:2357
+msgid "Time of the slow tilt"
+msgstr "Tempo da inclinação lenta"
+
+#: src/libslic3r/PrintConfig.cpp:2364
+msgid "Area fill"
+msgstr "Preenchimento de área"
+
+#: src/libslic3r/PrintConfig.cpp:2365
+msgid ""
+"The percentage of the bed area. \n"
+"If the print area exceeds the specified value, \n"
+"then a slow tilt will be used, otherwise - a fast tilt"
+msgstr ""
+"A porcentagem da área de mesa. \n"
+"Se a área de impressão exceder o valor especificado, \n"
+"em seguida, uma inclinação lenta será usada, caso contrário-uma inclinação "
+"rápida"
+
+#: src/libslic3r/PrintConfig.cpp:2372 src/libslic3r/PrintConfig.cpp:2373
+#: src/libslic3r/PrintConfig.cpp:2374
+msgid "Printer scaling correction"
+msgstr "Correção de dimensionamento da impressora"
+
+#: src/libslic3r/PrintConfig.cpp:2380 src/libslic3r/PrintConfig.cpp:2381
+msgid "Printer absolute correction"
+msgstr "Correção absoluta da impressora"
+
+#: src/libslic3r/PrintConfig.cpp:2382
+msgid ""
+"Will inflate or deflate the sliced 2D polygons according to the sign of the "
+"correction."
+msgstr ""
+"Irá inflar ou esvaziar os polígonos 2D cortados de acordo com o sinal da "
+"correção."
+
+#: src/libslic3r/PrintConfig.cpp:2388 src/libslic3r/PrintConfig.cpp:2389
+msgid "Printer gamma correction"
+msgstr "Correção de gama de impressora"
+
+#: src/libslic3r/PrintConfig.cpp:2390
+msgid ""
+"This will apply a gamma correction to the rasterized 2D polygons. A gamma "
+"value of zero means thresholding with the threshold in the middle. This "
+"behaviour eliminates antialiasing without losing holes in polygons."
+msgstr ""
+"Isso aplicará uma correção de gama para os polígonos 2D rasterizados. Um "
+"valor gama de zero significa limiarização com o limiar no meio. Este "
+"comportamento elimina suavização sem perder buracos em polígonos."
+
+#: src/libslic3r/PrintConfig.cpp:2401 src/libslic3r/PrintConfig.cpp:2402
+msgid "Initial layer height"
+msgstr "Altura da camada inicial"
+
+#: src/libslic3r/PrintConfig.cpp:2408
+msgid "Faded layers"
+msgstr "Camadas desbotadas"
+
+#: src/libslic3r/PrintConfig.cpp:2409
+msgid ""
+"Number of the layers needed for the exposure time fade from initial exposure "
+"time to the exposure time"
+msgstr ""
+"Número de camadas necessárias para o tempo de exposição desvanecer-se do "
+"tempo de exposição inicial ao tempo de exposição"
+
+#: src/libslic3r/PrintConfig.cpp:2416 src/libslic3r/PrintConfig.cpp:2417
+msgid "Minimum exposure time"
+msgstr "Tempo mínimo de exposição"
+
+#: src/libslic3r/PrintConfig.cpp:2424 src/libslic3r/PrintConfig.cpp:2425
+msgid "Maximum exposure time"
+msgstr "Tempo máximo de exposição"
+
+#: src/libslic3r/PrintConfig.cpp:2432 src/libslic3r/PrintConfig.cpp:2433
+msgid "Exposure time"
+msgstr "Tempo de exposição"
+
+#: src/libslic3r/PrintConfig.cpp:2439 src/libslic3r/PrintConfig.cpp:2440
+msgid "Minimum initial exposure time"
+msgstr "Tempo inicial mínimo de exposição"
+
+#: src/libslic3r/PrintConfig.cpp:2447 src/libslic3r/PrintConfig.cpp:2448
+msgid "Maximum initial exposure time"
+msgstr "Tempo inicial máximo de exposição"
+
+#: src/libslic3r/PrintConfig.cpp:2455 src/libslic3r/PrintConfig.cpp:2456
+msgid "Initial exposure time"
+msgstr "Tempo inicial mínimo de exposição"
+
+#: src/libslic3r/PrintConfig.cpp:2462 src/libslic3r/PrintConfig.cpp:2463
+msgid "Correction for expansion"
+msgstr "Correção para expansão"
+
+#: src/libslic3r/PrintConfig.cpp:2469
+msgid "SLA print material notes"
+msgstr "Notas de material de impressão de SLA"
+
+#: src/libslic3r/PrintConfig.cpp:2470
+msgid "You can put your notes regarding the SLA print material here."
+msgstr ""
+"Você pode colocar suas anotações sobre o material de impressão de SLA aqui."
+
+#: src/libslic3r/PrintConfig.cpp:2478 src/libslic3r/PrintConfig.cpp:2489
+msgid "Default SLA material profile"
+msgstr "Perfil de material de SLA padrão"
+
+#: src/libslic3r/PrintConfig.cpp:2500
+msgid "Generate supports"
+msgstr "Gerar suportes"
+
+#: src/libslic3r/PrintConfig.cpp:2502
+msgid "Generate supports for the models"
+msgstr "Gere suportes para os modelos"
+
+#: src/libslic3r/PrintConfig.cpp:2507
+msgid "Support head front diameter"
+msgstr "Diâmetro dianteiro principal da sustentação"
+
+#: src/libslic3r/PrintConfig.cpp:2509
+msgid "Diameter of the pointing side of the head"
+msgstr "Diâmetro do lado apontando da cabeça"
+
+#: src/libslic3r/PrintConfig.cpp:2516
+msgid "Support head penetration"
+msgstr "Suporte de penetração da cabeça"
+
+#: src/libslic3r/PrintConfig.cpp:2518
+msgid "How much the pinhead has to penetrate the model surface"
+msgstr "Quanto a cabeça de alfinete tem de penetrar na superfície do modelo"
+
+#: src/libslic3r/PrintConfig.cpp:2525
+msgid "Support head width"
+msgstr "Largura da cabeça de suporte"
+
+#: src/libslic3r/PrintConfig.cpp:2527
+msgid "Width from the back sphere center to the front sphere center"
+msgstr "Largura do centro da esfera traseira ao centro da esfera dianteira"
+
+#: src/libslic3r/PrintConfig.cpp:2535
+msgid "Support pillar diameter"
+msgstr "Diâmetro do pilar do suporte"
+
+#: src/libslic3r/PrintConfig.cpp:2537
+msgid "Diameter in mm of the support pillars"
+msgstr "Diâmetro em mm dos pilares de suporte"
+
+#: src/libslic3r/PrintConfig.cpp:2545
+msgid "Support pillar connection mode"
+msgstr "Modalidade da conexão da coluna da sustentação"
+
+#: src/libslic3r/PrintConfig.cpp:2546
+msgid ""
+"Controls the bridge type between two neighboring pillars. Can be zig-zag, "
+"cross (double zig-zag) or dynamic which will automatically switch between "
+"the first two depending on the distance of the two pillars."
+msgstr ""
+"Controla o tipo de ponte entre dois pilares vizinhos. Pode ser zig-zag, Cruz "
+"(zig-zag dobro) ou dinâmico que comutará automaticamente entre os primeiros "
+"dois dependendo da distância dos dois pilares."
+
+#: src/libslic3r/PrintConfig.cpp:2554
+msgid "Zig-Zag"
+msgstr "Zig-Zag"
+
+#: src/libslic3r/PrintConfig.cpp:2555
+msgid "Cross"
+msgstr "Cruz"
+
+#: src/libslic3r/PrintConfig.cpp:2556
+msgid "Dynamic"
+msgstr "Dinâmico"
+
+#: src/libslic3r/PrintConfig.cpp:2568
+msgid "Pillar widening factor"
+msgstr "Fator de alargamento da coluna"
+
+#: src/libslic3r/PrintConfig.cpp:2570
+msgid ""
+"Merging bridges or pillars into another pillars can increase the radius. "
+"Zero means no increase, one means full increase."
+msgstr ""
+"Mesclar pontes ou pilares em outros pilares pode aumentar o raio. Zero "
+"significa que não há aumento, um significa aumento total."
+
+#: src/libslic3r/PrintConfig.cpp:2579
+msgid "Support base diameter"
+msgstr "Diâmetro base do suporte"
+
+#: src/libslic3r/PrintConfig.cpp:2581
+msgid "Diameter in mm of the pillar base"
+msgstr "Diâmetro em mm da base do pilar"
+
+#: src/libslic3r/PrintConfig.cpp:2589
+msgid "Support base height"
+msgstr "Altura base do suporte"
+
+#: src/libslic3r/PrintConfig.cpp:2591
+msgid "The height of the pillar base cone"
+msgstr "A altura do cone da base da coluna"
+
+#: src/libslic3r/PrintConfig.cpp:2598
+msgid "Support base safety distance"
+msgstr "Distância da segurança da base da sustentação"
+
+#: src/libslic3r/PrintConfig.cpp:2601
+msgid ""
+"The minimum distance of the pillar base from the model in mm. Makes sense in "
+"zero elevation mode where a gap according to this parameter is inserted "
+"between the model and the pad."
+msgstr ""
+"A distância mínima da base do pilar do modelo em mm. faz sentido no modo de "
+"elevação zero, onde uma lacuna de acordo com este parâmetro é inserida entre "
+"o modelo e o pad."
+
+#: src/libslic3r/PrintConfig.cpp:2611
+msgid "Critical angle"
+msgstr "Ângulo crítico"
+
+#: src/libslic3r/PrintConfig.cpp:2613
+msgid "The default angle for connecting support sticks and junctions."
+msgstr "O ângulo padrão para conectar suportes e junções."
+
+#: src/libslic3r/PrintConfig.cpp:2621
+msgid "Max bridge length"
+msgstr "Comprimento máximo da ponte"
+
+#: src/libslic3r/PrintConfig.cpp:2623
+msgid "The max length of a bridge"
+msgstr "O comprimento máximo de uma ponte"
+
+#: src/libslic3r/PrintConfig.cpp:2630
+msgid "Max pillar linking distance"
+msgstr "Distância máxima de conexão entre pilares"
+
+#: src/libslic3r/PrintConfig.cpp:2632
+msgid ""
+"The max distance of two pillars to get linked with each other. A zero value "
+"will prohibit pillar cascading."
+msgstr ""
+"A distância máxima de dois pilares para ficar ligado uns com os outros. Um "
+"valor zero irá proibir o pilar em cascata."
+
+#: src/libslic3r/PrintConfig.cpp:2640
+msgid "Object elevation"
+msgstr "Elevação do objeto"
+
+#: src/libslic3r/PrintConfig.cpp:2642
+msgid ""
+"How much the supports should lift up the supported object. If \"Pad around "
+"object\" is enabled, this value is ignored."
+msgstr ""
+"Quanto os suportes devem levantar o objecto suportado. Se \"pad em torno do "
+"objeto\" estiver habilitado, esse valor será ignorado."
+
+#: src/libslic3r/PrintConfig.cpp:2653
+msgid "This is a relative measure of support points density."
+msgstr "Esta é uma medida relativa de densidade de pontos de suporte."
+
+#: src/libslic3r/PrintConfig.cpp:2659
+msgid "Minimal distance of the support points"
+msgstr "Distância mínima dos pontos de suporte"
+
+#: src/libslic3r/PrintConfig.cpp:2661
+msgid "No support points will be placed closer than this threshold."
+msgstr "Nenhum ponto de apoio será colocado mais perto do que este limiar."
+
+#: src/libslic3r/PrintConfig.cpp:2667
+msgid "Use pad"
+msgstr "Use pad"
+
+#: src/libslic3r/PrintConfig.cpp:2669
+msgid "Add a pad underneath the supported model"
+msgstr "Adicionar um pad por baixo do modelo suportado"
+
+#: src/libslic3r/PrintConfig.cpp:2674
+msgid "Pad wall thickness"
+msgstr "Espessura da parede do pad"
+
+#: src/libslic3r/PrintConfig.cpp:2676
+msgid "The thickness of the pad and its optional cavity walls."
+msgstr "A espessura da pad e suas paredes de cavidade opcionais."
+
+#: src/libslic3r/PrintConfig.cpp:2684
+msgid "Pad wall height"
+msgstr "Altura da parede do pad"
+
+#: src/libslic3r/PrintConfig.cpp:2685
+msgid ""
+"Defines the pad cavity depth. Set to zero to disable the cavity. Be careful "
+"when enabling this feature, as some resins may produce an extreme suction "
+"effect inside the cavity, which makes peeling the print off the vat foil "
+"difficult."
+msgstr ""
+"Define a profundidade da cavidade da pad. Defina como zero para desabilitar "
+"a cavidade. Tenha cuidado ao ativar este recurso, como algumas resinas podem "
+"produzir um efeito de sucção extrema dentro da cavidade, o que torna a "
+"descascar a impressão fora da folha de IVA difícil."
+
+#: src/libslic3r/PrintConfig.cpp:2698
+msgid "Max merge distance"
+msgstr "Distância máxima da fusão"
+
+#: src/libslic3r/PrintConfig.cpp:2700
+msgid ""
+"Some objects can get along with a few smaller pads instead of a single big "
+"one. This parameter defines how far the center of two smaller pads should "
+"be. If theyare closer, they will get merged into one pad."
+msgstr ""
+"Alguns objetos podem se dar bem com algumas pads menores em vez de um único "
+"grande. Este parâmetro define até que ponto o centro de duas pads menores "
+"deve ser. Se eles estão mais perto, eles vão se fundir em uma pad."
+
+#: src/libslic3r/PrintConfig.cpp:2720
+msgid "Pad wall slope"
+msgstr "Inclinação da parede da pad"
+
+#: src/libslic3r/PrintConfig.cpp:2722
+msgid ""
+"The slope of the pad wall relative to the bed plane. 90 degrees means "
+"straight walls."
+msgstr ""
+"A inclinação da parede da pad em relação ao plano da mesa. 90 graus "
+"significa paredes retas."
+
+#: src/libslic3r/PrintConfig.cpp:2731
+msgid "Pad around object"
+msgstr "Pad em torno do objeto"
+
+#: src/libslic3r/PrintConfig.cpp:2733
+msgid "Create pad around object and ignore the support elevation"
+msgstr "Criar pad ao redor do objeto e ignorar a elevação de suporte"
+
+#: src/libslic3r/PrintConfig.cpp:2738
+msgid "Pad object gap"
+msgstr "Vão entre o pad e o objeto"
+
+#: src/libslic3r/PrintConfig.cpp:2740
+msgid ""
+"The gap between the object bottom and the generated pad in zero elevation "
+"mode."
+msgstr ""
+"A lacuna entre a parte inferior do objeto e o pad gerado no modo de elevação "
+"zero."
+
+#: src/libslic3r/PrintConfig.cpp:2749
+msgid "Pad object connector stride"
+msgstr "Inserir pad entre o objeto"
+
+#: src/libslic3r/PrintConfig.cpp:2751
+msgid ""
+"Distance between two connector sticks which connect the object and the "
+"generated pad."
+msgstr ""
+"Distância entre duas varas do conector que conectam o objeto e a pad gerada."
+
+#: src/libslic3r/PrintConfig.cpp:2758
+msgid "Pad object connector width"
+msgstr "Largura do conector do objeto pad"
+
+#: src/libslic3r/PrintConfig.cpp:2760
+msgid ""
+"Width of the connector sticks which connect the object and the generated pad."
+msgstr "Largura das varas do conector que conectam o objeto e a pad gerada."
+
+#: src/libslic3r/PrintConfig.cpp:2767
+msgid "Pad object connector penetration"
+msgstr "Pad objeto conector de penetração"
+
+#: src/libslic3r/PrintConfig.cpp:2770
+msgid "How much should the tiny connectors penetrate into the model body."
+msgstr "Quanto deve os conectores minúsculos penetrar no corpo do modelo."
+
+#: src/libslic3r/PrintConfig.cpp:3130
+msgid "Export OBJ"
+msgstr "Exportar OBJ"
+
+#: src/libslic3r/PrintConfig.cpp:3131
+msgid "Export the model(s) as OBJ."
+msgstr "Exportar modelo(s) como OBJ."
+
+#: src/libslic3r/PrintConfig.cpp:3142
+msgid "Export SLA"
+msgstr "Exportar SLA"
+
+#: src/libslic3r/PrintConfig.cpp:3143
+msgid "Slice the model and export SLA printing layers as PNG."
+msgstr "Fatiar o modelo e exportar as camadas de impressão SLA como PNG."
+
+#: src/libslic3r/PrintConfig.cpp:3148
+msgid "Export 3MF"
+msgstr "Exportar 3MF"
+
+#: src/libslic3r/PrintConfig.cpp:3149
+msgid "Export the model(s) as 3MF."
+msgstr "Exportar modelo(s) como 3MF."
+
+#: src/libslic3r/PrintConfig.cpp:3153
+msgid "Export AMF"
+msgstr "Exportar AMF"
+
+#: src/libslic3r/PrintConfig.cpp:3154
+msgid "Export the model(s) as AMF."
+msgstr "Exportar modelo(s) como AMF."
+
+#: src/libslic3r/PrintConfig.cpp:3158
+msgid "Export STL"
+msgstr "Exportar STL"
+
+#: src/libslic3r/PrintConfig.cpp:3159
+msgid "Export the model(s) as STL."
+msgstr "Exportar modelo(s) como STL."
+
+#: src/libslic3r/PrintConfig.cpp:3164
+msgid "Slice the model and export toolpaths as G-code."
+msgstr "Fatiar o modelo e exportar o percurso da ferramenta como G-code."
+
+#: src/libslic3r/PrintConfig.cpp:3169
+msgid "Slice"
+msgstr "Fatiar"
+
+#: src/libslic3r/PrintConfig.cpp:3170
+msgid ""
+"Slice the model as FFF or SLA based on the printer_technology configuration "
+"value."
+msgstr ""
+"Divida o modelo como FFF ou SLA com base no valor de config. "
+"printer_technology."
+
+#: src/libslic3r/PrintConfig.cpp:3175
+msgid "Help"
+msgstr "Ajuda"
+
+#: src/libslic3r/PrintConfig.cpp:3176
+msgid "Show this help."
+msgstr "Mostrar esta ajuda."
+
+#: src/libslic3r/PrintConfig.cpp:3181
+msgid "Help (FFF options)"
+msgstr "Ajuda (opções FDM)"
+
+#: src/libslic3r/PrintConfig.cpp:3182
+msgid "Show the full list of print/G-code configuration options."
+msgstr "Mostre a lista completa de opções de config. do Print/G-code."
+
+#: src/libslic3r/PrintConfig.cpp:3186
+msgid "Help (SLA options)"
+msgstr "Ajuda (opções SLA)"
+
+#: src/libslic3r/PrintConfig.cpp:3187
+msgid "Show the full list of SLA print configuration options."
+msgstr "Mostrar a lista completa de opções de config. de impressão de SLA."
+
+#: src/libslic3r/PrintConfig.cpp:3191
+msgid "Output Model Info"
+msgstr "Informações do modelo de saída"
+
+#: src/libslic3r/PrintConfig.cpp:3192
+msgid "Write information about the model to the console."
+msgstr "Escreva informações sobre o modelo para o console."
+
+#: src/libslic3r/PrintConfig.cpp:3196
+msgid "Save config file"
+msgstr "Salvar arquivo de config."
+
+#: src/libslic3r/PrintConfig.cpp:3197
+msgid "Save configuration to the specified file."
+msgstr "Salvar config. para o arquivo específico."
+
+#: src/libslic3r/PrintConfig.cpp:3207
+msgid "Align XY"
+msgstr "Alinhar XY"
+
+#: src/libslic3r/PrintConfig.cpp:3208
+msgid "Align the model to the given point."
+msgstr "Alinhar modelo de acordo com o ponto inserido."
+
+#: src/libslic3r/PrintConfig.cpp:3213
+msgid "Cut model at the given Z."
+msgstr "Cortar modelo ao Z fornecido."
+
+#: src/libslic3r/PrintConfig.cpp:3234
+msgid "Center"
+msgstr "Centralizar"
+
+#: src/libslic3r/PrintConfig.cpp:3235
+msgid "Center the print around the given center."
+msgstr "Centralizar a impressão de acordo com o centro informado."
+
+#: src/libslic3r/PrintConfig.cpp:3239
+msgid "Don't arrange"
+msgstr "Não organizar"
+
+#: src/libslic3r/PrintConfig.cpp:3240
+msgid ""
+"Do not rearrange the given models before merging and keep their original XY "
+"coordinates."
+msgstr ""
+"Não reorganize os modelos fornecidos antes de Mesclar e manter suas "
+"coordenadas XY originais."
+
+#: src/libslic3r/PrintConfig.cpp:3243
+msgid "Duplicate"
+msgstr "Duplicar"
+
+#: src/libslic3r/PrintConfig.cpp:3244
+msgid "Multiply copies by this factor."
+msgstr "Multiplicar cópias por esse fator."
+
+#: src/libslic3r/PrintConfig.cpp:3248
+msgid "Duplicate by grid"
+msgstr "Duplicar por grade"
+
+#: src/libslic3r/PrintConfig.cpp:3249
+msgid "Multiply copies by creating a grid."
+msgstr "Multiplique cópias criando uma grade."
+
+#: src/libslic3r/PrintConfig.cpp:3252
+msgid "Merge"
+msgstr "Mesclar"
+
+#: src/libslic3r/PrintConfig.cpp:3253
+msgid ""
+"Arrange the supplied models in a plate and merge them in a single model in "
+"order to perform actions once."
+msgstr ""
+"Organize os modelos fornecidos em uma placa e junte-os em um único modelo, a "
+"fim de executar ações uma só vez."
+
+#: src/libslic3r/PrintConfig.cpp:3258
+msgid ""
+"Try to repair any non-manifold meshes (this option is implicitly added "
+"whenever we need to slice the model to perform the requested action)."
+msgstr ""
+"Tente reparar qualquer malhas não multiplicadas (essa opção é implicitamente "
+"adicionada sempre que precisamos cortar o modelo para executar a ação "
+"solicitada)."
+
+#: src/libslic3r/PrintConfig.cpp:3262
+msgid "Rotation angle around the Z axis in degrees."
+msgstr "Ângulo de rotação ao redor do eixo Zem graus."
+
+#: src/libslic3r/PrintConfig.cpp:3266
+msgid "Rotate around X"
+msgstr "Rotacionar no X"
+
+#: src/libslic3r/PrintConfig.cpp:3267
+msgid "Rotation angle around the X axis in degrees."
+msgstr "Ângulo de rotação ao redor do eixo X em graus."
+
+#: src/libslic3r/PrintConfig.cpp:3271
+msgid "Rotate around Y"
+msgstr "Rotacionar no Y"
+
+#: src/libslic3r/PrintConfig.cpp:3272
+msgid "Rotation angle around the Y axis in degrees."
+msgstr "Ângulo de rotação ao redor do eixo Y em graus."
+
+#: src/libslic3r/PrintConfig.cpp:3277
+msgid "Scaling factor or percentage."
+msgstr "Escalando fator ou porcentagem."
+
+#: src/libslic3r/PrintConfig.cpp:3282
+msgid ""
+"Detect unconnected parts in the given model(s) and split them into separate "
+"objects."
+msgstr ""
+"Detecte peças não conectadas em um determinado modelo (s) e divida-as em "
+"objetos separados."
+
+#: src/libslic3r/PrintConfig.cpp:3285
+msgid "Scale to Fit"
+msgstr "Dimensionar para caber"
+
+#: src/libslic3r/PrintConfig.cpp:3286
+msgid "Scale to fit the given volume."
+msgstr "Escalar para se adequar ao volume informado."
+
+#: src/libslic3r/PrintConfig.cpp:3295
+msgid "Ignore non-existent config files"
+msgstr "Ignorar arquivos de config. não existentes"
+
+#: src/libslic3r/PrintConfig.cpp:3296
+msgid "Do not fail if a file supplied to --load does not exist."
+msgstr "Não falhe se um arquivo fornecido para--carregamento não existe."
+
+#: src/libslic3r/PrintConfig.cpp:3299
+msgid "Load config file"
+msgstr "Carregar arquivo de config."
+
+#: src/libslic3r/PrintConfig.cpp:3300
+msgid ""
+"Load configuration from the specified file. It can be used more than once to "
+"load options from multiple files."
+msgstr ""
+"Carregar a config. do arquivo especificado. Ele pode ser usado mais de uma "
+"vez para carregar opções de vários arquivos."
+
+#: src/libslic3r/PrintConfig.cpp:3303
+msgid "Output File"
+msgstr "Arquivo de saída"
+
+#: src/libslic3r/PrintConfig.cpp:3304
+msgid ""
+"The file where the output will be written (if not specified, it will be "
+"based on the input file)."
+msgstr ""
+"O arquivo onde a saída será gravada (se não for especificado, ele será "
+"baseado no arquivo de entrada)."
+
+#: src/libslic3r/PrintConfig.cpp:3314
+msgid "Data directory"
+msgstr "Diretório de dados"
+
+#: src/libslic3r/PrintConfig.cpp:3315
+msgid ""
+"Load and store settings at the given directory. This is useful for "
+"maintaining different profiles or including configurations from a network "
+"storage."
+msgstr ""
+"Carregar e armazenar as config. no diretório especificado. Isso é útil para "
+"manter perfis diferentes ou incluir config. de um armazenamento de rede."
+
+#: src/libslic3r/PrintConfig.cpp:3318
+msgid "Logging level"
+msgstr "Nível de registro"
+
+#: src/libslic3r/PrintConfig.cpp:3319
+msgid ""
+"Messages with severity lower or eqal to the loglevel will be printed out. 0:"
+"trace, 1:debug, 2:info, 3:warning, 4:error, 5:fatal"
+msgstr ""
+"Mensagens com severidade menor ou igual para o LogLevel serão impressos. 0: "
+"Trace, 1: debug, 2: info, 3: aviso, 4: erro, 5: fatal"
+
+#: src/libslic3r/PrintConfig.cpp:3324
+msgid "Render with a software renderer"
+msgstr "Renderizar com um software renderizador"
+
+#: src/libslic3r/PrintConfig.cpp:3325
+msgid ""
+"Render with a software renderer. The bundled MESA software renderer is "
+"loaded instead of the default OpenGL driver."
+msgstr ""
+"Renderizar com um software renderizador. O renderizador de software MESA "
+"empacotado é carregado em vez do driver OpenGL padrão."
+
+#: src/libslic3r/PrintObject.cpp:110
+msgid "Processing triangulated mesh"
+msgstr "Processando malha triangulada"
+
+#: src/libslic3r/PrintObject.cpp:141
+msgid "Generating perimeters"
+msgstr "Gerando perímetros"
+
+#: src/libslic3r/PrintObject.cpp:251
+msgid "Preparing infill"
+msgstr "Preparando o preenchimento"
+
+#: src/libslic3r/PrintObject.cpp:391
+msgid "Generating support material"
+msgstr "Gerando material de suporte"
+
+#: src/libslic3r/GCode/PreviewData.cpp:160
+msgid "Mixed"
+msgstr "Misto"
+
+#: src/libslic3r/GCode/PreviewData.cpp:380
+msgid "Height (mm)"
+msgstr "Altura (mm)"
+
+#: src/libslic3r/GCode/PreviewData.cpp:382
+msgid "Width (mm)"
+msgstr "Espessura (mm)"
+
+#: src/libslic3r/GCode/PreviewData.cpp:384
+msgid "Speed (mm/s)"
+msgstr "Velocidade (mm/s)"
+
+#: src/libslic3r/GCode/PreviewData.cpp:386
+msgid "Volumetric flow rate (mm3/s)"
+msgstr "Fluxo volumétrico (mm3/s)"
+
+#: src/libslic3r/GCode/PreviewData.cpp:477
+msgid "Default print color"
+msgstr "Cor de impressão padrão"
+
+#: src/libslic3r/GCode/PreviewData.cpp:484
+#, c-format
+msgid "up to %.2f mm"
+msgstr "até %.2f mm"
+
+#: src/libslic3r/GCode/PreviewData.cpp:488
+#, c-format
+msgid "above %.2f mm"
+msgstr "acima de %.2f mm"
+
+#: src/libslic3r/GCode/PreviewData.cpp:493
+#, c-format
+msgid "%.2f - %.2f mm"
+msgstr "%.2f - %.2f mm"

From 028d8532990425cac43e85afa572a0102968fd62 Mon Sep 17 00:00:00 2001
From: BoaImpressao3D <57779119+BoaImpressao3D@users.noreply.github.com>
Date: Wed, 11 Mar 2020 10:59:46 -0300
Subject: [PATCH 002/138] Update on Brazilian Portuguese translation

This is an update for the existing Portuguese translation.
---
 PrusaSlicer.mo | Bin 0 -> 249853 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 PrusaSlicer.mo

diff --git a/PrusaSlicer.mo b/PrusaSlicer.mo
new file mode 100644
index 0000000000000000000000000000000000000000..94853e146f94affd191f3a0adfef0b0874939876
GIT binary patch
literal 249853
zcmZtP1$0!&qPF4gbZ~cv1W14o5)#}((BLk?-8DGD-QAtR-F0wx8GM4fGq}tDeqF^~
z{CC~G);>>H?Q+{q$Z&2Y_MGP63X17)q{Su09FCW<9S;8?igh^dtaCW3;ayCHxz{@!
zPOOCSu?mvh(FjLjTMWVX=!dyBm~;)XGvN-H2ydY`zQ#D1c%#D+3)5p<%!*!^2h(9K
zq=}Ahm<IddKAeRQu+An^U&v<4BHRYkc{m(>@g3pWTTS`nx0&|L#FWG@$7r}86XH=D
zzKSsj-^Aqj(8hna@gCbvzSyXA2~q7&iE4jF8y|@A2<OA-SPIqO3aE79sQO!2+o9SK
zfyy@+m42dqKG(VkRqqNL-hi5qZK!q}v7WR3i>mKFs=U{zdcLCz<Lxld6QRmUk4Z5H
zroiH;`s(7}*cA6-x}6S3X}p2;F%u61a3Ct*denRzL(N|ls+{|n0iWCWIJ?aAq^NO9
zXTzB>8Q~nL_Ljg*SOc~0dSPZ9g6VMuX2fHt`kz@ncAIsR8Z|z7F%gDhR;-32u@9;|
z&poERY^Zw6U>dB0>99LC!zq{zKcUL=W>D0wT&QpedSMkzi4mxI7>x;Vh7B*r#e}z@
zKZdioHD1F|>BghlJs-6mSD?z-hwbn*Cc*ss&Ae4W)!zg)o?TJ%8EKt>O25Rq12tZ!
zu?apv%~R<ErX7_~^H>|TF59BY>xG@14#zmu`S9bQNuT17nI|t)IVI7B6;S=Fg1*=f
z)sH3Cjn=)^Q>c2cVGewb4KUSVGjBan<FXLT;VM)=KA_qe?}*8t27?F(U`uR_?sbA0
z2tPxW6Z@#imlW0RjHq$+!!}qLm2Meo{5GKG=P+vCFIjJ+_SrMkJbuJ6_{%;YbIi1J
zI;#A2sPWv78pq3+8vjF$PweAn{iVP>gma<Nw?XCak6t*@#&1NGa}?FCJ9r77<8<7A
z!tATsC(XQcK=msEHQs$t>wdg-fsNmQN_Pm=?=#p3Z=%{;=ak9U4Py`<hHC#f)ViIG
zIdLOue(qUcV|2nlF%CvMZN@hdsvaLyzw_AmcIYBJ0F`eDY8*zR%AJd<f0d2jggVy_
z<7T{wn!gce*y}h4W8*?pd8;uKZbGHIV&k8o+V{qWf1ujudDe_eQdBwVF&<{aGMEpw
z-Ugx%F2-;?fpIb8IWvEOsQRm5Hmr>WaS$fJ-KcpvZM|uIg#pC>!gLsL-lVU9IzQ{9
z=BEp49LJ&hamYSDhwAS`RQ_21n0=82HLhWp3+rGYjzfRkV||7yKg9*J&w{PZF(&cT
zF)J>>ym%ay{}*Z<`(HHsp%^A4TnD3JTO00d!-G)m9)Zd?1vQ>4Fbkf=MEKD@kIAA}
zf6}4aQOH^nwLdDN`rQhX;22c;1*r3W4{E*ti<;N_sB`=kYFuMnHtkMl&4WpauZSwI
zsSWo)Z^C0R8Lmam`yot>=TY-_AJvb<S4_JKViCd(QR6q)dIWt5ze43tcGclngjta#
z;5da^|8uT69K~=k7RHCD^cnv(?aPD72$x0myAf(X^h5Q3Fls#KTQ}e+!Uu68R)}Iu
z@g_FHRM(kX?2Q_?;y28ARY1*K3sm_LsQ&lBP#l7)|1hS)dp7(X(-Tg8(^vqtZo)Ab
zhhYWWfi%ex?Uut)0B>V_Om*9=qpa2dRR43M7lvVOY>irX^HBS59WKPJsC``Pjv4>v
zsB*`l=6SAlBf1D5MfK|>svlQT>+TJzoUf?-G4Go3Nr7sQH)_6eV_GbXd$11beU{>$
z8OK1JL%0lTeLb*#M$Kc~`wqu6%!nCq2R_AXsOJYCnEqWu&Btx@!sn>+;yyIzh8L>6
zIZ@*hV&f~L`rQcCu5LDdEGpex)IM2@DsKmBzD}d^eX+)WWcr;66A+&l^}Mu=uZP+X
z9c_3Xs=N)D4iBTo>mC-tXQ*+{`q-442Nf=Z>UT|RJJdNf2)p21)cQ{FgzuE-jmfbG
z#=vnH6Q`j!&PN~IkJ<1MDqlhdS?j$8YTi5HFdT)dFTpd@Pe05|xFD+hMyU1B3N`ON
zQ2m^Oez+W!{{m`0UZTeR8xFuE&*>XZL5<&2tcE`^46D8{-#ccZ_Jz+&z9V8I49A%`
z4&Puf4tQnUggFR5MAet%KU02oRQ^zmhrKZ?jzEp`2GlqlMNd4BYX4<yg0C?SR(oyI
zHAIbnYgGRuQR6bhx&VU+FGr>O7h~gdEQB9X`zQE~*&n4aBjJXq@&=*Gn~!S8GE9R9
zupQpSxK7T$w`P25y)*k`B5EFHU>01B3GpKO;{(iuiQdy6^5?<bgo}MJ^ZOJ12xt0e
z+FJ>=ZtI{g_QaStAGJ@HV>Ud7S`Tlq1Uf$P9RNzA*3DeZjR$P_BdR}XKAZOE!^(ss
zkfC-Qz}dL*i#Z1?d^Ph{4Rx+I#w0iZRn8RadR#*I6e?ZkZ)RUi!03dRq1M}4)O;Vr
z6nGjnKM$}t{)Za>;P2*pdqIpOJQGz;k{@PVQ=`^Jc2s;m)HsA#D`HB*^-<+_w+=+j
z%NW%9n~PePo9y%b_W3CrzF~cA<KJRx(z|||eCe(J=-#K8hUbkiJ@&ET*%&~08>+sC
zSO(vr&WFOk%=k35_C&3tv8eU41y$}{>kn%xhtnOO2enSBVg~Gm8sC|y{%%06`vaI9
zFJTZqN3E-LPN%zFzNmD$QS%&zI-lyH%Il8GKMpkxOHlduq2}W_s=b#`^WpSxy4P_+
zRCxiYa*AUDtcz=~E%wC}E~k5aOhwf*AC+z^s=Onpb#%$bKSh=I1+@+mc{<(acuLeb
z_@K_QQs}|~sPP|yad8rAJ<dm+KPzl_Evi4;QRxn$@|{QZ_ZDiL9$UYn<|ke>r~BN=
zhUo|w!VXvmmHrs2A5o}reTo_vS9DW;3RM4mQ0*#+N?#IHZ*|mqu8(S0D{D9GNq7+Y
z;}>j=zA;R`3D%jY`u;-oXDe!b972urB~-s3pxXNy^P?-K=~rRYyi`K9vjuAWBdwEB
z^RNn4&qh?aM=%&KV<C(g%RDcM8uxI_i49QeYCQJBmDY^0o$hmb4pt+6FRs8u9Hz?u
zH|qS@htbf3Lt5h$6V;w1*cDTw=4m{t|Eo~rwF9+29-_wiDe4@0i+k`ZYQA>FW1n$;
zU%*6!zr=Ssyf97z6ZS{-Hv~0rl~CtQ1JpQoMb$qPRo+6>`2CHl?}80Sq0+xaonx+q
zW<8`u^~)DE|3Rqv3bFC!P~%?HK5t{6_dt!qVAMJpg&H?!A~Vm?QO{GM#>ER8V1Nye
zMa|o69Dr9)>1!o6^*6wlgxjF{d*1p8Ro-_D#Mnuk?mzz*MAg3ywa#`~&thf5chMJv
zlA3(ssB%W4-lNk|<M6kQKZ0t{Mbx-Oq2~2Ds{EA6%=l$Tt=l}Pc`ApR$GRB6ytcRT
zbCR2NxEi$&kD}6@$8fxdYJZ^==6NV;-IPO(e|4;gtx)5(6}3L!U_Q*9(&^}i?a>48
zq8~oM4VWMm>zMZJ$J>ODrlwrN%hEU<4+;OB*6HYk3)7i#Pnh26I7PT8PQ(%!oQ@}W
z2}|N0FQ@y@Js#dp_s<6^;}POV<1nm}(dqv4&=p)lcta+qV>s5#>~vJY8>shi4j)tR
z3LHT=C7WR<F2ujEZWiNr%tL$UXXU)WOW92R=YD3tw9Iby#|YGVnU2~QYcMk&N6q(3
z)IR!#+9$F7%{h`0wLWU1-eY}H<*Y;PtHY>yzlAFI4Qe07%VE}uFDje^wGK+7^3_7E
zpU$ZH9c079u>j#2sCxcEt)s`N^1q|zFC~je`>_NnU1ikzX@Tjn6RQ02sCpNm>RoT+
zPuTb<RQsNx_PHz2)Rz!-{`#Pv7e<|1HBsxY4tilz48S3H5jUaM-|(EKeJ4=+<uYn~
zZ(vb;jvBY@LG~O&m0QV%YongGvPPo%I}Ur{EUb-*gU$T4MfJZIs+_^7{9`Z&&PScs
zr&0a9fWdehwT}|#GUfQ9#xFOj-PLV;UDP?y+J?KL#(j`=25KJHqS~<um3}v>9mi1R
zMOp7+X~IviDF)^?&nKhGnPr`iI$su}$~})NH_C<|qWbfn^*c@@9E(k%`Couq=Nqsi
zUPdo0nb({<El~435cOV|fokUh8(wCguS2~rkJ#`X)V}#-<D=y>=av`h`%p0Ic{SAf
zYmAz|&Zu?J7d1~~Y<Mav-(pmI4%z2XsPphXs{bEQ>+qM2cjY(xH5qE0bD;J~D60SU
zQT2B~eNXCVorBs}J5l@MEEdKm=w9~)jD@Y$t!*(Q=>}PsSdUqsq23$u3YvKfLXCez
z)H)o3S~nZ5$58FQX?<;V6*BS3QR^|AwT!iubvSB#mZJK%9W}m}tq-j4tR98UJSMXG
zTf?kPQRi(x+>FtRn0>PodlTM=*|0!}**DEl`=}>sURI&TdmZ}XUi8L?sB<+&Q8Pao
zQ2i=|Dz7fa<@_Fs8lOp_W<4y&tb~uD`uQ5wPmf}zJTFxK{HS?vimJCiYCSDQ)q4cJ
z@Fr%*pI8C?iktP`6SZFZqt1h|sP(=Om427?u{B8v)1IQJ{#8YtFI`dlx3>-VN3DmU
zsC~Ku)xWK%^>@mK@1WZM5w$N8mo)1=4Qk)`pz;Ty$`7&eB~b0Hj2h2om=*`4*3|;k
zd9exoagX(xHAN{CUlNr*0(IUGMeU1u*dMo}#v^ZOr~B`-s-n`*#XYzl)z1!LX51&C
z*26~Bylq9b`xv&x)2RODE8}$k+`T&L{27f}zmrk@{tMNPwW$6bLyf~D)HuGg#wu&#
zGhiv={ZZ}hf?5aTQ2To=YTTcp+Vcx_-g%ZY;}i!KpB%NW(_lDO!d$o<bK`Z?d?ze#
z@+U`~H|bF8KLEAvLQvyU3#(ux?!{B6c^h59^kcqt3+5&MB!-}~qNz6&TN3VuI-jni
z#^o)l-nf-adFfE&7KECgBB<w8Q1j3P4`WwUJM&jI@nulsP#5bc9cmtSVFf&iRWU^s
zvp(9O>KTkGcf55W`ViiPD*qaW;S<!l%30O4v#hlNy4M}5-$PO3wabQYV<6$=)l5C5
zQS%p$MX&>&#nq^KBdeS87NYjSW>mk<qvq=>YM<Xkt)u6tetbst!?T77Cr6EQM$|YI
zK((`swH|7{c0|o%57c@ejq3M!RC)7J?bv{-_Y4-m>*$5aYMOnJ7qwoiq3Y{^DyOdv
zk44o#2lXCYhpK-EYCQI%*6n4~x{E^9{}$D6&srv3Y*e`!Y&Z~APDxbzD%j_B(T{Lj
zRQ_qGe$GMlXFY1%PGb$chH6)i+NPcPQ0GoL)O^;&eApW`t{YMN@i=D3XyK;*Ak=&n
zMPDq9d9VX|;bPP{97dg!SFLwY>7SzNO<2d62D1?MMU6`(RKAv|_IE;^4}DPYnK`Ka
za@an<j4Jmo>b!|r*OZqYwO&i3)?Ghrj*GFR($zEHgDaxOcOvS0!%WmZ*o7L$OE&xl
zH7~L2n|Vu(S_l59^Rf`C{mW4O+iRbnK+XR(R6Q?I?fih6k2noXd@@wO(xJ}X08~55
zq2|3AYW+o^#&;}ge=I<?YYnPByYV%iLgm}t(3Eo$)t~#Q_Ba}uaZYAUk7`dA)Vd5p
zy~j(S&h;i(6$j#QyntG7bsBTtI+=f5N_bHd)1ER-&A5l7`q3ZN{~0#C0M+gtsBt@v
zn(sR{`~sEUvzb|MaZ&px2`XJm)Hr6wEFS!P4ArluEzJ1zw2nrN>pYB(>rne;t9`x;
z)!(zI@w{W7zeJ7aJ5;?MEzS7EK(#v&hN3q%!lqaa52EHjSu4{{FRMSQ9r;n^l|`+$
zN~n4xQ2VYwsvpx(=~vn3yU;yOsP%CNGvjyE`u1*Z-Zx>Wel|hvi`J-eCZPJc5VbBg
zS@)yn`7EkmFHr02JNjXQHYR^TR6EO~>JLYae>YUSN2Au~U#NAm8`X~ZZB2d2Q1xd*
z?e9D|5<^h?`xth`$EbYu+L`xCQ|n~RLHt4MYgGTzw>RTb%Gv-`es@&A`=i=90afl&
z)Vf`RS_k`4<8c%<-<MG1e;+j-pKW~14rV@6pynYHDqkVge3wP_zlMF@$;OXB^?NdE
zA1y((>kyX5OIQiLI-2r3q1x34Rqh}xfn!ncrSqtBEp{i9z8I=M6;b_bf@*hbYcJII
zkddfyUW97LLDV?iMSpx|P0`tY-$a!cfy&nlHUBeF<FwSqZ$XX2CDgjPhZ>&`sPiUX
zgc(miR6C2J%BhYTm&T}brwi(w=!+_68V2DCRC!UT_xD@W{{M&?M~^P1{3NLNRaR7d
z3sm_%Q0*IO<ENw6>vGJ7dr{-{1T{{dQSDCL)#M9A)mH@7j<TrsH9`0KN7XYLwO{6<
z=I<D)pJ!0@M`18NLG>$5H}kwAYCh_s%Il5Vj}x#Mu0`el4>dkNQ1g+zyGfrHy$M%9
zwYwv#J!4S)nTOi1+i@yhM6K`EJxo9Pq0&!8<zIxFr+uh)T*NSZgX({Qp2n)EcDF&L
zABhEVF6PFom=ELjGS5q*zGsAE7VL}a*Ai6yn^5y|7}dV(sQO-`+7+|6nO7gw^Sr43
zl}Dv(f!crlP~$Tb)vg_={+~w8;}g_*`5razsUyvK?1xGph)P!i)vn5@d2C|sh+2nz
zQ2TQLs+`gG`D|3bmZSQ!6}7%kqtabL&Eq3f`+uR@ovM!+@7$>NS3|9bE~s@i64j5*
zsPQ|8>h~ubpP;Y#b4zyAd*K-d@Lo>Pk9J^4f8IA(a{%>WuYvr16iyk$&$rMyg!dOV
zA4+?1`!J{DCgmI$?sQbg1tUy3?@;x}9%X)x6^uGZj-&eX4`#>bSOimyHt)%rsQBqv
z3J;?8Nz5_koQaPbhh(UJ=0v?GE7<s|sCj6QnwQ?F@g0NOkBiVBx1!d|Jybh?p~gGQ
zSTir7sBx==if@UkcYt*^<|Vup3*ZY>Ilkk}{8d8bZ;0w|4;w!bvl3p2Iq(GP9QuS_
z7<0VoXEs!PPSiRphT2CJaVNG%waa&cDX%DM99pB+eFxOJH5fI1Yf$BELY>Qd(S7cq
z@<m}Iyp2P#=tQUc_plD5&ZA0`OgV#4<1hlXPZy!uaTK+FZ==TLDF&j~Wb=Ke3ab9a
z7z5X%*8g@?KaZf=a|J8nefvCUig{iX)y^uY_jyfJeSPio;i&h}3>!ZmRsIUpyl+F5
zf5L{Zp!UsE)H?cQpQo8>>dT6Sh%bO2usdqKw3}wm+mTp-@JT$2DW*H!|NX%uEJ3*T
z46`2QpvM0Y=ED=Hb~tC6zxRlbS|1y*Jf1|gEBP$bE`QuZxC~Ci=(Ekfor`MU0SsUt
z{=iVe{&UT_&;hkx#-ZkK4QgI)V=qiT&(t>oHE!3f_fYfn)cOI{e&>AC&KMX(*c)?U
zb=3TgK&`8pHoV-1ccAwDF;qF{(LK+obM!vyy!(V2hZqY?zr9iIDuP-sC9M@u_0&L>
z+YFVzJ*pjjQTu)zY8)4!>e-5#zZ0nXAED;`9cuk1SZLNsR#Z8KQ0u$`7G!)|q4w>f
zzs&fbLgjyr${%-;X_pUb+;gM$e|6OP(+<^+!KijmN99|9YUd8Djc3sdeHWX*Hw{CT
zcMP@eAEDYGZ;9z=YE=3DsB%hR1FVBBa668}bW2S+t5Nw+qV~mA)ObEajn5ZMhsl?j
zb&wn95DrC^e*=~OEowjhLd}ooa<l&8qRzpJ*bTemW_*UFasCSPJ@z41Ae?)p)A14q
zSv##V&l{|EI$9CG20LQXHRksshG1{PZ?G!1TkCYx!aX=l>DHO|&}@84_!WlWwe?QN
zK}@m1=~#eKsPi#$quB>bQ0LWaoP=JRoQ{FG3G-mC%}z%XY=ipq*eM*1udp)q-eTfU
zpvL_L>Kv%H)%+Y`I<_Nx9ks5)wwZBhibDt|-|lq(UhQmLOt|e1^K*#!JI&AWyQ13n
z4fA96zs-7SZrzO<_oTa=j<Q%7YvOP$gEvs^^4aZlEW|OW=l*+~?%&@UjKvA3+iU(F
zurX#LJOTARV>9N&i>PzVbD#M=oWj_X@KdahP4=7l*^8qH=Re?dw8w*}^&fc9>ELL0
zl)x8+uN-nZw&9_}w1fD_BdjA#cFgp<)^YY7;ajM69pj|=^I!|)mFake{>1k^?R31y
zm6($F`De`c{OxDWe7?uH#1B8my1^;u&G<e1$GlIATyXNcO`Jp61Mgon>#FW0^L=$A
zHX;56>YS={*{qA!IEe6k)PDB5V&5CMiEwv}z^qrzxXi{*gp*!#I!@zIEQeM9r606w
zE^2+Ah%)2X=DJze?@;63`-ao;6*uBuTyxXuIFIdaIURMe@NK8#D$c-r*y)bb@e`}v
zbvmYC)qCbW@DPg<PJ5qvJox)H^u$LG&Cj==KjwU)J%yi`zu&L)l%MAieutOI7x~=m
z`zkNY&w0X8=fQ1^g%51_6{>yj@GKsFY0i-;uZ$~E>wO>Q#%BMS@5?h$=j3A4{$7I`
zU)O7M?xsc6mml5l3DkL367ynhbm4f^_le1<^6sF{_oo;azoOocG2WQ?g4Xibf%y8U
zb$b$3{w-Ah-k{!--%$0(cx&S0<5<EeQQyOsVl@04<KcdMglBOjZhdFQq0xJ@f4igJ
zU-MA?TaOuW3#z?WQRnRgOolHo0eXBe=XYY%z79myHw^WBighu16W)wEhc2Vad5s#E
z=pW6Wds3k4DT0l$lnpP#JcQR_W_*CTFxDs2|01Yy2}573jv9wZRJ{{01#ZM5cmmbF
z7@tjjDKI(V45<0ei`qYxu?ikQwKMS-GftVTc~JF)q2{T+4R=C~<51N2jY1!sj+JpY
zX2ZB&&7Yt0qQ;{MdSOr0IXDybUfhkEk0{jm{6M`wqkS{sq^SO+Mb+z%S}#GU_7y^{
zmns;9wNc+AMxp+kxD-|222}b>sCu8G`W@rD=|@T|M%V|tVJobTH&E@#`NOoQs5K1L
z&&sHI>5XG>AzncLpPXw>-shMQQ}J6ytBLn>dbt04t}FPGa0d?$_wR?)b9uObzdevc
zL+8pO)H=@_&BNV~!dRGa7-~F+Vnv*d>emyjjXzNRt{L5=YmEB7(*reM(@@VBq1wF`
zRo*4kIs6PYj-D}0d|qr#xB{x2t*HHU3ID-IsPsExdYJD$sP+5>)vmx;9`5&SNmReO
zp`OQ#?cqL8LQwCy;;8kz0JZ*aqRx>-aXj3=ms%2k5k7!QcOb5Z`|lrrq0Zg#cpmQW
zKQl3e@I!0n_@;f$Fe~xXQ1$P%;rCd8aJmE@=Fb_Z{WJ#~;bzo1mn5Nw`|oqoVj02_
zsP+0cYF!?*;bW-u=TQ6h8fslVK%F1Hi9FovH8*M;3!&CgMNEP{QR6lSweA;MH=x$*
ze$@BMe^C4K75bwyv1v~L>Umz&d{#&8`wpmi9*%0qTvYw5Q2S>$s=bHM3(ukZ`#7py
zag&(!<AvG}IZ*8@j9yp))$b0d{n-Om{y<baC!_K$MfGEg^@#O~^)V{lXH@<eNj==>
zS1KG!I43H8531egP~(3Eb&g!eXZRCa;nQRuj%!#oxk>Mr!jvC`YDXw)A5=w^+Y2>L
zqcJlsM6LTH$m`tk09Ef}>nqfH`CyHg(xmgTW<||scGP+aMYXpKYMd&f%ByYT8(N#$
z_|~X#?SwiHdf9M))P5de!&6c7HxJd1m8f!eq3St^s{b@<J};sA{{%JOUr^^l%v7eH
zB&hVMQ0v7TRbC(}UtVh%YQ2Rc$DE@(s$D&;Ls8{SLbYoaD*tNKIPXTS{|l(`{*G#o
zcWRR^Cu*G)L)B9iH69&N^W78mew&Tz*GANOJAyjruc6xi5jF0fX-qp}p~^{v>Q`n|
zJF}zG=R)n9VyJTKqQ<8qs=nT+d7p?{7b{TTk5*%524X!nBz!5Y*@wCK#|<<-6;b`G
zjA~~?T#6A`9#f?EFyGry{ho=PaRn-Ustjhl{88<%g_`$9sQum!wQq-6|3dX^4{9AA
z!OIwh`rf<2%ftQi<JI2g`6HZ2hrXfuF*dVVKO22adv>A9IfW|s4ys*GZ1@{$y}5kN
zIK@M?Gc#(Ob69hu(iK9DYbn&YS3&isA!?l3qVn}dl{3)Bk3#K-nKphts$I)b<F*^M
z-cF<HxrHj{398-ySwErD{X(@PQ5I8gT2#L5sQ%?at?M$V^fgiQ-O9$dL#6A5Ixohc
z*54{rImhuLUa&69>f!$T@W^ato$NzDo~QRS`O2coYlZ4}B&vNwQ2S&&s@%<}e(kXy
zMx{H2YR45+J3gSwPm<lVKLm3Vu7X)`80z_2RK9E0PpEyC+~16A0aSTqF#ucPY@Cj{
zFerz4zqUZF$2q9-x1!SD#1R-bz{CCX+NtPG_#kRrA7BRjh-zQ*K=ZsjYJNMQzGn|c
zogee?0B%Or-#w>k=SoyNciQk()cNrkRgY(ohx_Le$x-#KK&3y9D*q8`zMa7)UwqWQ
z%8p7GhMJ!isDAdsHaHnIFW;@vbD8&JLezQ=LY*t2c#!>72Q{B*^O$)nh8m{|sD01}
zwa!Oi9vp``@DOUhyg{|&mo;%-6ZS#vgZ!v*DT8WXUkt%V_PI|!v;Oj+#%C&Od^V!W
zJ%okv3iib$`OSPzL@&ZSQ0L*lsPwN<>(y1jgyUit!WmHGGTFw@MUBULR6F;g`g0aF
z?l<i7r?`ahXVki$SJ14_6{vM{%!Z$$<}GF+V<uGjA(#y-Vi@*Bt($$Q`Miw2_y)Dk
zQx-P;Duilpef)qealOJtO#N{~%=;ues{J`p?}Jd(It@p)rvs{<k*IV_FbQtKDR>-J
zZ~dZX+y|iMeG=+DIS*CdIt;=?sD6Dwjgx1nX-6W|_$5a#%#51HQdk;mquMbawVwXA
z?zizrQSHBnI#0f$+T|=}+L0MA5YB^IzcGuO^UoXA9v{@a=f<p91XW*4jDdqu{TYo)
zHwV?PC8%-UY2y!}`f(cTV-yBsz7poo5pA(8;n}EhidNE;lL!^|#ex`&HLwF}+z+Da
zzkph&_fhNMBWi!dEoIKXP*nPMsB@tY`rsVQiw98S{uz}&T4}R>(xBE^acg_jI88_G
zxAmA0U!ltJ4Kv{esPkkR=Elu7{t0TFyvlgEe@>VUixIAC!*fx8u04Y~uiv2hm$0mv
zKW|k1SyAt)VyJaj3N_DlQ0<Mt>^KM2j$^2E;34W<@+fE8kp<Q7oTz<Q1Ou@Vs-6j`
zeY66V{~T(+zCh*sggPfY%Nx_6#xEGP4$9bY15`h{qRJhL{x}c4@FZ$|JV(vr7gRsu
zRxsm~7nQyhmc^+y{uXNgB&cZ86+?|f7o3fw@g(|GGVOhhT0cLqGFGc>+Or5X?z>Rq
za2qvl&MIcyGoZ%B7qxC`S^MHD!i#VNR;+5y)t}gjaG`1*j{CS8wQna>H}93dQ0saZ
zYTq71jn5ej$6M%!`D&Q)Z;A?!Le1+I8@_`&2jbK;>#-VECp-xgJDG1A|GAbaKVNP8
z=M>cbt%w@$ny7Q3HEN%YLGAyesCHh)qj(pUenq$$_g$#@e~B75&pKwE_@d665~zNc
zLyc#B)cTJ^t=l2i8K`<zqt?xKRQpb&%Dsda@gr&-o~&!mp~pCru&bVlpNo2L@3i5I
zsCDofwNA#=XMHd(dr<r9asyM(dsKhFqt<(zhGty^qxxGO^}L}CcR=-PAZk5NMzw1-
zCcxvUeAm#ut}!*?FR1xT+Q^(kp{Q|bj5=5QqspC)Dt8Sk-w~{ccTnRI(AYe$g6eM@
zjD<t67>+~Ldk(d(Z=%}eY+~A(2vu)@wF34g+!i&T53m7#L$#|;Q?q}%qv{!qUN{yt
zUTdwFQ0w;_DqW3cX5Ti%#e~OT4h(E==Dz`IUq@hUoR8}NO4R)9Lha`$)H(VVHO^UD
znDH%%8mHPg9y_DP=@)7pRcz_u{&{FqEJt`VF2tW0h6`GGIEv$AY>0lX&3YMy!Gtrn
zG4<9)?TfLf@i~S%=Wbyxe2-cmS=*ZTWIojTZj9R3-B9a(m<^A|UW6B*@}+EN&tufO
z$%z`*5~y)(Ywd<52=_;=i-V|fyNS*432NLbv^V+Nq1OFmER2Uy?QnK5^A{Vn@3W)Y
zQwg)PKaOD`!tXko`U5+ebyomYe?8PZEx^3E5w)(LU?K7+?d;*WLAXkUdEeydV#cu=
zYCcC`R$PEOSC6Ci|7XmCo?T73{;2V2hPAK<*1<EVb2v*k`#lh~j(Vcj#}W*|16U6o
z-C4i1t3IwH*rta$2UGSm^OFv}hz~%`Z)Mc?gqGIfxP|aCR6pzWGV5yu>inLI%C`tL
zzB^IvIEdPZw^94zC2BrP_cq^ys-X78T8xWTBh7woh#KF)sPd-T@I2IdT94UqKPuld
z>nGH@^z38SL2A^#FMvu{7WKTA4Y#-Uw(-MJ^D!4y|7lcxw@~ZxKh%0j-q(zO0rVo=
z2(=CdqRQWnmGBH|f28ea)@v1OJJdNa997>I)ObCxI{TY&dTSvJ;CVP|-Hbq;OB+!8
z>@;fp@1V}LPgok04KVAfKI%MZjapCrY<MCn{ZiDvIfPz#553Vf(9D+)YWxB*9~MUU
zzQ#<1hoRQ>O4PbJfZCsT@fLo^F?fBDX-})c=G^XzYWFzQcrQWa+h*hcL6!dm^*)R{
z#I!#tYCf`HeyoIAS0hm4G6~h+wWxL-MCFgN@%K>Y#wXPJ@EB^^lNeQwKPq2d)HqZ^
zFYJsecajY+!*PU<q3W$U%(O28HBUoP@29n>{vAW@+ka8@|3cLhd$?&wModXK7&Q*%
zZMY?B{03lAj5ET+{rdprQRSRN?UN|fc-}|N&sS9WaYmYTk_pw{e5iJXq1I^=)H>LJ
zT8C$?&r$t~Im(PfX4E<;jcR9gRDJESFb+YzPxhngb&WRXLmJFO*c<izyEcx-zSbCH
z%=tAL_1@iwM={-4`}1k6LijO8$Nb|=KZ>Hlm2ooGLe1AxjE`}~n{rd5i*Oiff0jp`
zTTSo+wnB|Z!3li7cJkgv<)1&%jLTY7_!R0qi$a~(Pf+{sJ!)KHPBP<_3{_qby5|wK
zu3DnTxic!?c+|dIgvx&aRqk2T{6*RL=QjQ`s$9>>=6QN_?@Ltqg|R=DM)mIqY93CZ
z*2jHRy)UpeI;NQQ+y=`L?2ps%1ZrFxO*QRliQNcyL9OG*sB`d(4X2%E{`?Vu1Bq{h
zs{amZzdW*j!{&q&PB-UbcPvSGC91!#Q2YHCs-Kx=nDtcz)t(xt@u`Oa*vdYij@k!n
zQRA=!)z5>d^X>}PVqTxx_|REqozy_3?}17`5cQs#iW;w%sPX-1b<H;E5@KEAGh-+Y
zK=-=GQiNS|JlwzUQ5HQ2pTZzKizm@Bm;FF{PNDvs;+#)@OuB%5g|!!Yxc^;*&VPBh
z|2u}~sPFBK7I`@4k-g_)#)ojSB_8hoP9$)t`TjN->+t+8I(c4bnfW<Wk>%#+J@;@I
z&#$d8@7<{@J>0*SlYf<m`}c4*U>}|rT<zglj@$4!HeBQ3{(aIcYdze*PjVNVQU1bp
z%rAOw@NoY=c&d%&`@uTYI*CH9?-!_ZB+e#tE@nZULsd}o-Wat`BQO_^LcJgNU_pFt
zpZjh$>mmfTuENm=JJ|3P)c#z7T1VSZ`!5Q!;|J8a<-NtsYeCe$4#P@V3w1s%MWs85
zD*rxa#aLTS`N63Egre4Cee}ZCsCJD)t*7~@@;0H`a}{;|d_!+cw9WKC7wTLniF$uF
zMPD3@Dt{$vJh!4B9z%`OTYQ1O+s)szB-vr=Z-m+}-B9D(2i3o^sC|1K)sCO2@k+YW
zgfpV{OMYv4)I2rBA=nY?;aeMD>2I@78lv`5E7bcS0yS?VQSCT{YR5^`{<w}BKkr?p
zUqw*!T^aSB?uVW@%sLvijwYbmz0P_VwNIl^^LQWC-nXdp!(+E8FD+^uGh-{vi9K;9
zDu2Q~=DbRU3THr#Z&p;h>!ZfM1FD_@Hhw&6ycXaL+=S{^xxHroT4E&Oaj10^bDuE)
zwZ3Yg+SLIye!WrW*bvk_jYpNg5%pd^j9SlkQRRKN&ok~f_2ogOua9bXC)9WhM6Jh(
zsCt&z_;sjty%*K)$Eg0h4w&?DQR%%<^WleTM<DuR1sm>d!_#f}5PI?a4rW2;L1Q-5
z`mTzqF9NkL$D!uyhV`R0;UN?6hnoMA)@Ihh*1u5uWj_YuW6Xvr4x4Z>bgxTP`$wY2
zcd7Nb^|>|v5!2ovYaQz#>q^vq{s*<cKcL1p^-*JhwYaqws=sZm!>x;~dr|8r3h!Z;
zV`kmfJnrEbOt=ARyzijKA>Ik|=Tm=l5pIoM*d8^X<52r)8*02Cpw^4$Nz-mW%uTow
z)_1brP~&pvlo_`l7)&_JX){iBQT^<P>c=9~`)sd`e~l_H*%{Nma;SN4gE?^$syzp>
zF1|*sv+`%n`mBN456w~MU_Vs8Io8wGAE<R5aL$ZJQH(~oJ!*Y+L7g`}?eqSqd0CCx
zH~Xwn)(@!uBs_2Sp+D+8%#YePrBU_OLe<j>^?jfNYCT1w*1;sydfJL=|25RU{)p<g
z$3MoL)`r%xsQ2FAsCl}8ny0ro7gJua<)Yr}*HGtQ@I~``N@Y;%KJ_Kjj$)|w&;oT{
zwLy(bAMA$%QSY6fsPoP1vYCe(sD3s;^{*ppo%KP@`)t&>>_fHl40_>98z29Q`SWI4
z)HpOljmvN>fvZsUzCz7U!mGv<sCv_*+8KxiFgG^Bj+h_MVkpMAX6B)cwG!&QtAXlo
zE7bV)MzwnZ*2Kej3se7V-j82U^A|tL=!3-x7shfpz=luaAj0vkn|@6|FT$Hp@A-?U
zb^8SMUU1$p@d;7u&c}ue;C;fCQ0)x9Y0{NMwZ9Hl!}d134=WSCfYmYMEi=zOQ0sCY
zY8|Xa_2Up~-$&Va*KPCjl~kyC=z*$dHfp`EMV+@NFdyDW&0Cr~W*kDWFyTR{e(Xin
za{<faQ@o6M?wapaaqgLM$cL)03TmFaq4rH5R5^oC<1`I54ogt$Vw(+LL(SVWRC^QL
zH|@-b>Th9Gxz$kZse>xNGiqFV*!bb7a^|7>c@WFu4OIJlADHu?9IE~nsBsyA+K-D-
z`*;`X-1ryu9(<4be)1DlZuEzyelOI%@I|$&w2g0oUWA*W${T9Ki%{hpLiO_$s@_|u
z^Wr0_pP3(-da`47!lh9CjKHQi2=#s80V@B0sB<UAV{?ut!BE0QQ2V(*YJJZ`o!3uL
z^OEj~X-^Oa5iWp5u^s9hUyXV{Ttv0|HEKLQquxs%Pffjn)<UTEhN1f171hs4sB>fq
zsy&-f`}H5xIDbOztHjUDde4G7k1Am>*27Xb9s}_bMxy6)5BGoPF#u~2{s*<rd|#M-
zkq0$D4bcz#qZh73?cbBA{@q8dGsjEw=hWn=^nFn6Uxs?V)5f1ejsI6vKcl@e<B$mz
zABaj{5Vg*#pci&Qjr$bTI4wuD<07h_7pQgg%f=`Fk8yWW9;#pYUYm7X8dYyw)clV`
z&Cf#A{H#E=V-sq>?Ln>obEy6C4#P3!8}oaJ5vY29Vs+|E_SXEKVVig6oG$*}tdHub
z`i7zEnTP7%a#a2ksPp6wsz0s|rr*g??aPOrSk#6~qS94B?ZZYm(t~kFFT$RmO}r1P
z{9>r|;i&$#L$#v^YW)mEy;r88#%mdBKW#<j+l~7Ean3%!h8my8SP{QqPYnCw;r@4c
z_Myu6{c7sViP~p{Q2D}8{i=fj*aTJ2MAW)ljGEs=sC9M&HE&-~{Y~-Bgma<J@v5kG
z5s6B_3|0Oi`}`DY{NG#SemDKij9OQDQ1zBYwWAHH{=TUFI?cu(MD54RsQq^zmG392
zUFm<A`U_$u!nIN3whVO+tw+_j4>b=LaXj9_EZE_vd4Enr<xBC)e6RDeRz;mRgRNUo
z{eFa6KZ*G^BlDofI~=v2nxoF&NL0O3QT<zhnx`G8c{zw$FPBi`{oICQIZeD5s{Q#;
z&&#9w)dp2xZ_I|n?DO@g`p%&0zlOp17FEBGhs*u<P$Afg@FG+>v0X0r{3S<?cY3Ua
z{;2b82$sVWsP&rE)0CG9RbOFLyTYusQR}1?YQ83-#%Tkp{})l?defR9n#=utx)`cG
zT~PDWA64Hn)Oy;AI+xF&%6Wkr?~kbQi5uPJ-sgU(ajk$Fzh<cR^+c630yX{%&=)tN
z*6}qgj2}?t1;=nPBb<w<{54SH*c_F<ABN#<)V{uFpMOG?pD?DGhm5G_h0zbIqRQ)w
z>fcz@e9b|n+luPfNmTpp*!UQ+OuDqF^D!@~yn3kfV>qhc<52Z4!4kO5`qe%UiS2Ul
zvzn-LaWHD0mS9OdjA}=$IHsQTn1gT$)V_;Ajn6pL`*F36{|D9Hm)4|lUGD!Lun;O=
zoOs48sQp|5mA)aW|HDx2S%8)BfDI>%Z^k<qmA*1+e0reP<yb6+S5f&=B{1c+#_WU#
zquRd?wH|KR=dV%q#ZGA2<ByuxFjRbV)Hn`Dt(%$l`3BTFID_iPBh>gg6Pf;bqt<T`
z)P8D#Ik77$-xAdOWe=(!2T|W6uA$0%h|1?kZ0e7XF$j90<|V7Oh<#oS-RlyyKl-88
z)m$6D8uea1jB4i-RJxc+%s$P6I!CIYo=0L{oQ*n<|G|Rz6TPrNQd3@CJVCfWs=sBD
zxf}zWeBZ?y_&T{u|MZfhR7w|T7C+BO<#Jrb1ZiB3-S{}I%dr@jq^Eo=<K=Syyl{xO
z%l-Yab4KbR{vxXWPnlfqfB!l-vl)-;=tcZ}3_?#IvkvlN5yHJNH*T}>&oLU|9KI%h
zF7zf`2)(d@jqi_IkHb;(zYw*rHlfz>3DkOch@tocwI4&Wn0ao7+8<L<@A*xrdJdt+
z{UHXRXI3-bxlre9bu5arQ04uLs{bc?VZv<2Ak;dphAO8emd0tQcHTg(_jjmu<Lzha
z&4yZMWl-~66VG6G)cPoq-R1t?+6t9#25NmSK(%KpYTZVm*4J&+`Txp>zo5o9roYSm
z`-1Ut3gO<k9OLCM^RgAA6MlypkFThGnkvAoqf)4LcEDm7iJ`a~tKbh*KPv^A`dgs(
zMQ7Bw3`33EENq0U?ejP}O}rPXoxvE2`BC3PdRxcZ=L=B%TZ%fbH=x$Ve$==`q0Wof
zsP|jEAhVxxqUOC0svT`n^V=8WIN9&0^k;)z?mzdv!P<li<#M_I9g-<Hns7vJm;3wg
zcMKw2GmmM{2rN!`GOGN`_yixL_VM|=F8A+?d_}#7yXG_FIv1Z3K8)LNU4FApS`=`(
zzgJGdPPFeXR^xfqLS{WL!9c>7F+WBtY~Cv&IEL_Gtcmf9nD=*c)ckfv&0|mNP}I7b
zgc`S5m<zXI9(;zH2d@y*uUx2bDH{$)or`Tz-`9HC_(7=iZwe~?8q|8-hZ^SxsP@Dt
zYU+<~O^%w^^r-RzQ1hA(wZ1B%%4?3A_ntO>5^6qH*ymBGefSbpU)oT!|BIs5V*~WU
z2-G<^88t88i<$BFDQ@0t)zO>yNYwh7i>hZW>O8rP+P6P!I9&<T?n0>XEQxAo6Ksxs
zP~&h1wVtAtH1$lxoP@Wd=I04&AAUg9leCm+cQ7_4TpHWqa$JN-N}G0WLyh}2>l@Vj
zD|VQfKOfY-%!hHX0xraGR6D<*>Q7R}>_;!u`tZea7=T*Oy>T!u#@BjY)_m_uQO@Q5
zb9EyuPy9yoV0?d|105C2d&F7M<^KER=Gc$uGZ=~GE4kdiUw;(q5-w5M<!FNQaS}SJ
znEaDbe-HWrwN7JJ<2{BUcnp(Qce(#N$Xi&MaP}G|+y_?@K8`c6OHFg$#I9w|$MUH8
z*@ikNuVW4DRNJhh!#IxcW2}$e!%h1xU@yYC>zH(FaRcG=I12~Wb-Di?fi(48j<tjn
z);Hhx_u@vvz75PexQ05Heqlo_)zG*Ea}ahlGUrne)*{>oL-7K(!X%A(k1HM<WBw-Q
zT$zPs2v=!p{`@fuwcbyo*6#<@I3{am&Xe+ZfbdWpiKUyH@i~V&UkbJ`?~kK6fN;l_
zW?j8P{u6(Ps}<`IpSN~7?(*ETt;=zp@FVPp2iv>c|2;!!N7f7BhuEHU`8vDY|4z^n
zoJD-L2$%ckjfc8$&Jg~FEihI$Gq0VxyWIah!afWozEcm{g&TUh+`ktR-rME=|J&V$
zv5D^yY0?ksW9BWWuUXequo?B=!c17apUeIGa4k{mZYlbzef`b%frfaO@O;!h7&yRX
zey?_*%l-d*Fc)tTpJR|IKki`O8`NJLml3~Vh)Gv_sLTEPwog#!_>f_occj~m7YJV%
z?sEV85lcsy@t-u(<+w-ucl?gGN3p+2e`B=E{qH+`8e`f$W2_mUE0~(C=R3~ji16U&
zAQKrs@@<}MzTc&q;&T6czcr>ZE|imMn#=v)iJq8l&gVrlT<+ihTZu8r7e3RR$4xLA
z;hy*z`{57lG0U7+-DaEbWs~tZ@#`=Yd(JWE%MR4}a|9#sAJlnQVy?;86!o6(k2;S=
zq0YhS*ci8<CnlR`<}EeqJ=7n)a4aUmwOA7O*?7<S=6v+QA;gEEzBe93y<ehG^}exw
zNB4VbfoX4iT*~v*sQ1Wz)Hqy1egBF=eV=%WdY^w-Xwt3u%k1C%sD8Xcjc43N=G;$)
zDz7xEzjaaXk5;JkLoq8Z!j^an^<E5KZ2D6MmA?skVR!3v`+Pg<d_RwQ@foVU-b?s?
zfjLp*w-5{AI#hknus9}JYT8>1^?q)Idfo|D?@TO;Yf#_EU)XTWWo91Apxz^OQT=I(
z+GhiCI4;4en0>h^uODh&CRtaa-eU*s^Bbt~d5s#!cq>f3$x-j8V62Aq(I3~N&d(d@
zejlzh?{Od0d0!j#eW5REAFf8N&j+afzDBj*vC8x(CTiYOqt=ZVy1%EO)=NdyIM+a}
z>oKT#U4?4Lc2qkaqWa-jZTg!Il`ao9z~UH*3$Zq)S!2ehE2{nxsPyB|7iU`!;CjMO
z@EXos%er7)My%s|BTioLa{vFX9Nb|3{5EnU-}i|R+GNhz2Af@uf#hqq#hh0!Fc#q{
zTg|$ehguhFQ16fbummR9X1<?Q$6AD2qP{onL9LUssCmC<!_l{!=c!TilpR%GIBK2r
z!cd%!8n3I^2j8N`t>X^!-Wh}c5?+Y<^JU~tGjHoLgz!GpJp4q>bGpA>?%#{5fT4t+
zp$oI`GVk#~tW0<XYCn9&!kBxv%l+>`MWDWae8N)1$KGqs)hbwt@HW)@INClF?tm2u
z??&yD*!#^oD~F+khoIKQVJw4hu`U)mVER2B)$fg{@4q<?n)g8{h7(?mTA!YW%()mB
z6;5PLg&KcvRKN0|=4BXay-r7+m-A5bupae2@dj!izCn$DtivW<X4Lb%=#Ax3`=A2`
z;ZRil+fd`a7d7uUQRjp6h?&217>{s4RQt-H^3_M}yXNSF-B9JsM%B9$-RlX}?t7?l
zd5>8z#!<6g15xLB0o3_d61A=xqWaYrwT`Bu+O-jt?hLBGk5Tn`95eN&K;_Si3$X?&
z-v`t<COU4$KPCDRPKWybTL#+_E`P%1c!%3i{a$s_?B5-zdXHdEyp5_i;VDzT4{F^O
zL!DQh(F3QU#%m^Oe=bCg(<<u;RJteD=a`c4D^$K1r%ihkpz<e0^&`EF_p$n+(g&i(
zGao8laT_j+>Q4>Sx!Kg(5j9VdsQDR>s^>3Md8=*wW>mY5+VE{uId4(*{j|n9W5y*Z
zDt|WAItj8CL(NB3WY`@YQ0H<d`+OKG-!#<t&O_~kO{jHn2(=IIpvF1=SyO&4)V!Cl
z;U?%sI0AM4PDbsU1*m?UM(u}(*6*nNNzR${L8$XP1l5j`sBx)->TfetJ3FGrp$F<*
z9E@u3BI{<<x;czm&$m$X{SkGZeL;;wObXk?gPMByzpid1c<9L<;@0IPV<Js1*9-0$
zgzsTf8k}A)Tdp76ars;t#}WUMG=GtQ2=z4O^Flt)vUR1#hLq=2hwY`RijnT5O*4vc
zFFxN>r*(5h*f#95;Z3wNA$f+|a(eLj_tl2Dm89p_G#u$@S5NXxATEeJy@?yc=YP5R
z>qSST?Wgh<uw^vHXTJ->`s8m++PmDh{z(6nXJ4r&5pj7nuv{bg9N)I}G;s%Q`bNZ+
zqMWj}j(_<akG7ShOkJBuH_w(4McZ_}A<qF@mWiPc_Ct2k@28Arw)_c{Q-idRC}Rbm
zwGOXR*CoO;ZMo%eE%EEP8`^gG+x!nGtEWx(H_wl8C#1aCJpasRww(KVPuw`lA4&Kf
zpFMC1KC^k>kZLUL|BrkPZP_QWIpy=uJ~{s8zC@Z8rZ@+GHR|B_aSSBB3+cQ`m)h3V
z3-$fE8u5*(<2K=pgmo1q&X>=rNFSGHx_a?B(tLDm<hicL_>A^=G1dpD%ab(i%p=ET
zp0y!wTJA|aD@gfWcy@|3`upSGS3mnXhn*M2N0O#L>F3afjO72sUCO3w!}EHiEl-+l
z#AW49#^?9kscDC<%B25&1=~I);#sFZ;`KZpZG1>sFKqlhTgUIbbqMF>{$bm8$EIsT
zTrJx7`)bScY{cn2)0L6CryV1mH7jiXfBC$_mXR3m)8=)!8Gm2V$XDf$vN!N-DP<3}
zWhmWu`}q*@x>8a`3-UBqS>#VeU)zwcA7Nd|Nw<MK$9XoHxb8N-HF2v=5=S#zmV!md
z8-p~%xJTQ5D1PQ2X%yBqg*4|VrvmpB?t!HDX3Vc}`|vpnd2ZS=I@o@$F<IUJtA7J>
zFE@Y8bOhRTQG_2;ZWnG{WyzO-XTgN^-PxD^?IzBT&%dwBHm$-Nd6wyqu)eqO&p|pe
z{~zri$+P3cZ=n3%eCDsi9p(7En9pS?L*L<b&7p5kZTn;LS=Tti#Yw-1^zms^YT_Fb
zu1%ig+%*W_;n{T32HN)YCoVl{CK12Mmh+XqH?yDlH4;Zj!lB%{ZV}Fe(UpfZ{}BJn
zru|MC`Kad>cOBxkQAc&sKBir}2q&|3`jEFO`Qq62_p$Mw#Q76<o^o`JCEZ8D)wr{f
zKPl>Gw(WW5v}yJee~bL9Nqd{;w+S~Td<8d?t|0Nhuja(%=2<Ty*7Er)j<9trO-bT*
zP`<7jwB<g}CQ)V-pM9_q&vn)3?nB&Q?y`Jt#<L55l(Ua?4T$SXS=*_9JZY|S>l#FO
z33`zxgwOfhv9y)^8Eso@;~UD>)s24Up)6gI#Gf@E-T&K@JoovOhO$0VS6`dI8*xv#
z_Yv;G9meOyl&7D!#pkoG%;cSE+sv<uI;K+3F|0?rB-EFRGUM}k1bH&?S(m<Vr6*lN
z(&_Rfe=)*?NI!vlm`zv4Ja+%@9sYL>=@)a)C;dXo{C&kE?!66f<(d9F7hU^_zebo}
zEpq=1sVe0rrJeyi8$sMntc$u{lP&>ky_^aD&;Q0F&o0vRwq@4DlH46>XA|!AJWqhX
zuS}GoYobl>#pg%1Z9Pbrg0kXJm#)sFxnt`$G3I~MlfDFZ80q=-F!$A*@Fda~rM_b1
zKgYA5ww(BU&d)P_PrhO6+G(HtV^twh-2ag_xlPlTvh;Vlx=IqCkMLmX%g^TpeCAhT
z933%~F+2K4IXwt}vEikZwT!T?{CsX=KUXEMe$V@kt?MMu3lRQExF==)O}Yr;_~Wnp
z-x*MTU9D|?eNIC=-VknM%NR|Wq2%R{s{h~hh)_G8T_OGNYaQuyEw^ct6L!(&*jSWw
zDQQa~!qa&^(x%NxIDq(i=ttgt_?-Lqb)IJrNPpgz8QrSqL;2i{dp+%aYs;HqGnS@|
z&BQIW@hxmS7t!XM+`q4ueCS914#aikj%^<dwQ08UEG2cE#_g23fO4X<-g46}UHZAe
zM&fJg8Fv%v+eg~UJm=RF9f8~#ZJXy3KZNvINVg5EQdSzC6(MagZv9)Ey0Y1}X0YqJ
zByn}gtE(mH&+xfAX-1eR{{Ot$U&Q-T*G}%u+#L!3zP|DN2X`zx7Qf@2lo4U$Qc-3L
z9;6^0zZT~>%bkU=?;quO(w<7BYfG9}<jcjqi?BcK&SKlTnrFYS#KfJjecD5Lx?1vl
zD0zNgmnh>cfkD*cL7KRP#}eL7z9yu7NgGcSp2O`!d2b1qBJClb=jHiq(l7m^&UZXt
z&i(ruMVTK-f0{JS$y1rnZIy=jFSKLEA9-U?RxHA^Fdu1#Q^+C=#J`D~LY_LdKNZoN
z`~!K`l{|5H{s{S1OZRobwqYKjCB)^R-Vda?K^|}Vam^%ioU`RA7;58glGl^8g~+3e
zAJg$~mh#=2yt)F&|BJf*ywXrk2<f_zuM_vNKgumYTK)cruCtVLz<%z7Ps!8JhCB02
zKZp2zMYDa$Z|luZxvwZ|DCskBXC=L^|A-$#npMQLv+bHse1y%XG^uR7{vIej`2vV*
zs0a3%LE2Ho`|vz1{maDXUE~?Y^KjbHn$Kx@)|Y#WZC6gx>GHMp?8F*8^C4|hn?}!@
z63>r%+*b*nCA0YslIA4k<soi7eTYN+8{4Plw#>=Im*Vqx;=5CZeqN&M9{C0nKY+Wh
zEnD%gNyi`G9gXoKdFv9lh4OU`CN3%YbhY4FR^q>sKQo{CRZREwlmG2W{??=|LA<VJ
z2FDW89waW5w0^X;58=<;i-^lho^sfQ@;%U-vQ=bOp6lAqoy*oSk~FPIqw6Kl1Bky#
ze*SvNv4PL8sQU@|ck_7^>G<m=M^0{C{uq<GyYl$~d865})U)H{=}+Eod_HE&=bsFB
zUyao!%BzlJh?{KNrH74(Uqs$OTh<HeSVNi+%KG0|V)8w-k)6m_pIcW1c}|h1zX>{m
zZF~1nMl#Y={i8l5`C!wv#uhxUq_&fP9_f}KKk{{a;n`l|GjPwdZP~{2zP7B)qzmSA
z9@~Z;q^ZK^e@WkgXE$v88seXDuP59><=e3-VB7GCa3py$;vwpdAngwOEE?hal=Yo^
zHgU1YUmT;bj!hGj&%?M|Q~oE_OZ*4Q&~=%(6t+Hv4|1ol;~axD(<r|t7Uz!1=Tl1b
z$K_?q$<8xfY5th+@zm*IpX(XF9`ERG>#D^wUFYdnWwn9)7kIXj_UUJ5d$^Mk_mbzj
zD)RX;&vfO}XYQYrQJVW2pZzJL0H67*j{muG5<XA-bMh6T>~P9zX3I-T_z-Q|Wy^d*
zy5)TCOrBhrlkiKNZPRD4<xb=Ic0SJ{?=Kv}-JiHqq@Qiedc?CV%1c~sp6SYij|u<2
zKG@IkDE|X#m+@dOaoKPNZOdlMy2A5?whhV~&&F@CDsCsA3zB98bvXH)&DME@a&-A%
z5uSIUt!uf%xx=`VQeSL4KdDHke;ejA@&9x2d9V#s#_4~wV<!2+NS_gN**wqitL<0u
zKg#(+x(DPPYvVpqmLK_|NW0j!QPpfCt|JDau1lmJ%IDpDE@kUZK%STGr+jzh`4XO=
z=l<K4t)KU9AZ>Zdt%k#hZ-r&hmvmF{ADdr4bA4yq8)@_Fk(TgZ<f+LxdSL<5JmE9{
z`I%!P<*p!3R}i09k#9eruSoj2mpU#Je_jc=3Xx|Salfy0Dueu`k^ijYf39Q1oh4s6
z;=-tF8fEF4PMj|NeZvku2T@Nk!naA^fN*&`*Xs#;+VYZ;CMVB)@G1EU*fP$M_9vgS
z(!mClvC77`$MuA3Q^s@BRG_^b$UB1gJ*aCO&wgKn{`jo8*R~A{`P`9bacrIsHhvu*
z<L0j)9g}R{(WK2ncrJB)<5?JO&&lVq*d15#TvsL9|BZC1$#;mm2hWR;{u6PR_?*im
zbN}x`+S|m2xAXa=t*bwNB+pQutt9>^`Q~uf<#SBRpHF>X`K;?McX{sXl%LYZ)xx`^
z)0LRC0fYl6PgfE?e<Lm(=`-25LHM3~4spw<M^|&gxp6Atisb3a-Hp#>Y@RQqEyU*^
zSP!ppf2GdX+)Ic{OWLIL<0*GVo(-|>*+tz6DN9#$;<pmMM|xfSwW#~=m-YED&ko!1
za4&G;DspF_+($h7ePvZ%;(lKb_>i0Ozi<!Y-fipsLOsv9n-M<oyIj()Bkyv;9c`JJ
zcs`N%mW2H%`!=6TaHqD<2UBJf(nO~$U4Dd<@T><eCtR02J$QbGaBZ7sGT{cq&$Qta
z)R~w#7uMol$vuPcd+z%-jmnOsj5^daNdd0Hv{V0mQyvp^%q85L^pV8Hv2iEKlb`Z*
zMI&C<3DO)P?wtv`|MxlVIl|qN^!0dl#pXH8)7az-vhPKbI7*R5S0meJ7tj2tdmHgt
z?Xy8VKg{!$%D{D+&jq=I`MiU;qudv%BL;U>;#yNjDQs{1+mz3`$`gNwGCPuPwJl5W
zSGem?=kIGEW#1*;3i8(>oqoSO8gYM-Zwzq-`22}`3>mtju6?9A%=2aBn@3qGh}%M3
z67u`=IR&3}#Ueb8JA^dr$(sw?;|1b$9VNf6D#T?bZY=rA+Pvn8`&SGdy~x*{_%*a=
zBK7`XS1TgB+46orUuny_fS0M`JkLAu@XQ}|e6)EUQooaWbRFS&TGIbbUHffYv)g)8
z694;3z_TLU2Z+0i*~x!_hf##*Q*L(d5Xx#uxR}b~xu2b<|7;=iY`NpfKY@E9_h;LV
zcD9|fNPB?zt+uUReAd;LyaS1QY=Vvv)T65c@j1vFMmc$S{uiHPlcxlAk0H$&;{PHX
z&6cM;cX{@dyCu&H^Q@q)ThAI$-gVM`AYXgp_mVC*>DCbUje88~_bMURG}7vK0uS)H
zC!gE$?3S(PBXMJhYssyvF!9sON5?!qrzPzpoJBn``0S#bUffry?<)SF&b8#N#q+*4
zpZ*@zpRh0a)}jY@Y0`xgzRz8ke1*v~iSoK~>k6T~7~Jhhw}|Ju!uh<F&z?5?nz*{e
z{k{%TZgTQ0w9j|(AU)+*AYRuIn>IV2Z&P1w!t1z8@c9{LAniZgy3!Em!QKxgekFH0
z?oHg@JYR3ySdet%NvG>Nb?)T(cU#vT!hSrvVcYWmsCySMIkU9BuN;VNWXv^Sz{dV|
zj5IA)YDqJ@z-n2>8eL{)cXUCm*`1kXGgNn%x@%Nj)l^kW>RB+vgpDB>{BSe3fPn{s
z!8qJ}4Ul-b1dM@)U;>1TV;d416R^Rt{lq5Z_y51|Ip0^+EsbVpxws#ds=jm1cdqYw
z@8>-(ly&R(Gt}`B^mU$ftyAv%$p3A=8`3|3cOU2X-=n^9w+>en|Gf|G{SERyoNxX8
z+w99zyuZow_hsFGm*3w)-ap{^-)8@A^4_~B_lNm@W4^CC9?LrZHGTOY^1q+&zov}*
zdo5-EI`w=X<$jLuZ>7wHyl>(A^T_*I>U);w56pJ-+W$fNU&!a9Jb!fl{&?QGMg96a
znK<}g@%#&vKgs9o`29aq=HqGWQz`Qw`FuF#{x)f!Kpj8L^V=z>zsr>QlK9zs2l-z?
zKR$-<?%(I~yiK3=_k(;M<M$6y?pH});rW;Nj7a-KwDCuC9)6Cz|G@8GrkwuHXM6vQ
zax0|$B7OXUtn*LtTiIVg`XA@VukiUS-u=+dTzq%->8E(-ODKPp=O3W_XJs9yNbCN6
z1P`Ch`~Q%7wkZ4W`1}OVUq#)Y(JA{oJU_$p50Zb5@BfA8PvN)zCe;7KJbz6-|Crh)
zO@ANE?+;?U-$DKVv{T<1p7r+*+WJ}2KPR8p_`bsDqqD9NzrTUHK8)v&qK&_l>CeRL
zy@&GopHs(Y(AE=tU&^t5C3$b;`Cst)`+W5G&&m5d+WedRek=9;G|xYtef==f{zsla
zpZCs_c8$+pq0G<l`7?appU-!b|26dKeJS%N`TQw9<?kf*{%<`0H<bBM%INP`N&5%9
z_uE<S3cp`N{{PGOE@h5U=F9o~B5i#GWv=l1Nq+xj@_&Sn{*F<{UGly-pTCH-&*a^Y
z;`>jN_wOnHtvSBW<oiGH{4vbA{&xAiiO;j7eJSt%E84!w_xtnyR`yZl^mmQAj+3vy
zAI<)LG4K5*=^stK^1~^AS9$&@^7Qxpl>I`!Pv$#co^|}6)c<v~_3^x~zYoduCrN*p
zvX`jim&kt`=|4pN-_Q52WVtV-{`V*Cos{`4zF#2yI_3T+RmR_wy#KY7`Qa?Dv~Q;D
zbCmrlzQ2%mzk@RWj`rS6nLot$myrH0KKlEB?El{)@9p{ft$hDHc}IBn2YB~!KKgqX
z>F<o6y>FuYXYl)*`QGL8k0|>Wv(9UjKhE<fkpCTgR{1^R^C<aiIlf<|AAgCwFXs6R
z$oodV|2p5lNnJn6_pfC+iu8Vi=N}<me;-U8lWb=~+UJw^={)~BzrT#{ugLd4g!=yt
z{rKage=cSISJHor-ycVr#~8<JfsGF!|I7G&ollQ4%YWZO**WR&;`76l`S(2kX4d}=
zhm_x^zCTMFU(e@rDEnXW&NuS;FKFvG)HeC2Y2;7x?r*70{{9Gg=P3J=eEv0QTYUa1
zeg7`L-^BM%@_9e<)ZCZzzW$!24}X=kU!%-N^7-EE%jfc2f4|B14^#FL-u(i~>F@Ql
zufO*r?fEQ!IrDy;yl>{6A0+((pEK0o@cfzl{w6+undkqT`u<Li{oA7||9_kO7qi`W
zQP2NJogbR}?k6e#qrCTz`F=Ft{R@<Rf!{fl-ah5OhlhVgzrK^Y^!IJqufImQFXH!G
zsQ0V*{SlOTH_uln|J{`P9qQUA?+^3*FzG)<nIGcw6{LMFWj~4Zrz!Uvl>0UEKZNJ<
z_v@6~;rV;X`(Qp_McY5eclrCzH7*`Lje35TkN!S7^FNUHUPs!`WPc+U_#pk0GwoYx
z?>c49@cbjBe-__+wE4G5*WdTYSMM}+ekN&0DEmgzR{8y3Q}+Mjo$~j~{C;!3_b>VV
zPqK~op}w;`e+uK(-^avP?}M|y-$wpB`TcQxe?z{1jWQ>A=Y9D65NRKj>G^8?`UTo}
zzg)-9$TB}p+CSlUL!Eyy`=A$I;PaLAVJ*`xGNun9?J3%rQvL$%-{AX~DD%an|2)4x
ziSO6({0L><MSZ`<_vhvOKFsg8lYfKvPSA(%;ah+2CjYDXzE1w%$T9yW@BTgND}NKp
zemed5T=Kt_@_&W=uP5{G@cr9-zLa<WOFo<Y{&~tho^}5gY5y_noKxRd^ZaMX`$)>^
z?=i}L37?P2w!WIWKacWz<bN6Eeucb0LEhK%`!?nK<o$%-grCZ9ef<>WzKD1JY}UKZ
zJ3pP{{#kziV}4)f-EZgfi9CN@zWWgK@Q<kb5A*)VW!fL*_s^52za4(RhVTEK?@QG2
z^I3l{^B*Vu*Gd0i#`URu|98~?HGF=B-zO>i3#5MwWq!o99sKXdDDyq!m%qPD`G3eq
ze?LLqXY=_oK5yaEqt1`!>znxA<(&`b^CJEDM4o?H`TXsZ_JPW$j{kx0xA6Qnet#un
z{z&?zzrRV@ujTtl!r`Bz+=o%-ODX&LlslE>ekJSt8S=i<Z$f|ao%iFNkKp$=lKzXl
z_fPqJ4Qc-^-;Yqo9n$|i@BcdAThw=ov>)U19sFM9v&HZKjJ|&k@4S^V*K$6eBwc?$
z#^=vbm;P>1{!dfxyXnW%eE%e$0eSz1ybtBK{&w<x{r-O_U;gg$j{ZK3a&P9HPviR*
zWiMyl%KKZSeIaSzn`OV7KD?2%KSuwbq}<n%H{^4JvcJRkjL*Nwx%uz&9o6$M`Ftbq
zej@q$`yD=?$mav{`N#SGlq~<*e19$d+#~;w(ALxBeI99lBFmE8dk5)fdH!R3`n31{
zlz%5>);i<+Hp=vxlg;(P&R}PKFm2|OW@CG>ajUsGnKpa7oBjD<*7WDi_I$p3_SC7Z
z;e2~<eRX59b82_GH|syTdFq<J*G9vQ!SvL0FdFn{gITY+)1Ni7y^W2*Y<6>RG}>=w
zDzUlRJK8(C`p8Y1^w-W#@93GM&9&)ZHkkY8?sPbw(-BqB-<S_?57hj8d(g~>JN%~~
z{pr?V-aIqjoHVECI$yJKe|NS$nftYQ|JGo<+N|9f&NsG)<1GzJt(2;#gHPKV(qcn*
zC;d&8nB2?~>c@;;o;muaqmLYIc6OTKjQ1zaXmUsOtPi4^{`$xr>o=qRKHc3O47axD
z&Cy5oPVeZW8spB+yT9v{XYb~4)ZZD5=gn+)FxaG2WS>$?o6QQJ+4f*GnjP2U=3r|u
z9!#0}=4O9`?wn{y9c*sV<D0{~gH1n27DL#X++IxTZ*DFoOb53I(^;mi_cw0c=}$Lj
zQKK3h4abAo*>*uT8KUQ5aRrAvyOZhMYdC9;y=|~Q8_oy4qqF8xe`h$_*RQt@2X~sw
zlT9aYOvX2dTYC&-I2mgihhyMomq+GKr8g&o+4x~5Wp7tCH@k!B29wm^a_(R{olI41
z8%P-N>Ym_Yu-Wv-&CBMkHctgCjE1)cK;K4xj|phj_nYb7c<dG5n`_kp`^j{l;y0W9
z$zIc+4(Ja5>0!GM@D0Y3y{+x$`nk&uqab<O%=TyV!OjU_kwNYB_nZD`X2|F_>w8=D
zZ?m~GXzon*MzlC+wnqKUW*GHP2Qi1uaL&@-du;zH^#90_8*Ik@?k+n!*7(kFG-}4$
zD1+(Fa0~?3L5{&I3-C~J%k4g!1Bh_Z7DR@l;oLB#`dB>n(Kr#(=2BI&`E+k%&Z?~*
zIkHAO{n3cEet6BxRABkxSkCpq09YK)r<2V+@X?9p&h~I)yV;(wR>Cdod&ANE<Z#R`
zyxHFy0i1*R9C%^tfe>%^r^CtKtYDJaYQq%F2F+qq^k6&&7qRv`lg;7Hq1qXa0h&HP
z7|V3#SrX`MOb6QNG(DU)lRM+mUCM6{rb9K|>B4lf0~8Jfxa#a;v#UqWX=wGe*u)0V
z0caZ}m6=Vy+3io~!;QUBUt=2WfoW9raL&-!0w5{|3tpK{hnoYE8&K&suWjtj=98V_
zOH8j{W5TZ)<J0ZQhESUes&4@Id>hPtb20*T3WsVOte|^722T_uqy1vCGnp`zceV%a
zD=C9<VA(y|1i&`(jY5_TFcsuxPz6<QinZEYRV8<ZRH)uhgl1R{*QcJSFrB|L@!ZqR
zej_rq3|N(_2(WoSR%;V9Je|$GM_FnOXsle2=6qrdMSbJ_AXrc(;Q@6A=%NdnD!_fG
zohnU+Ff?eAK0V_hEW`Nv-gt8amhK%pw>|-N9i8=#o$qd_rN?G1`|fhP``pq7ZDzDH
zzBa((y<-<QhjaeFD~!}TcBzo4wF2-r`s+>}=>PF>woPP)!DyHG3nm1;V^8<TTYJLR
z$F4AfYtzY#)U1cQ^X8L!$FA-&Ej9I8ANc2vt`XoqZCp20|0c6ChDqoh`{X_KM#NnI
z@AlaaYd4-|rlA$b)`W>`RcjssSa;MrCMKYFOmwGr>}^9H?(|m9jYh|NE7u3d&6PA)
zCdWwR(JV-B<(cs<aLSk>;Hcrw-p=vfarUD?l}TRhoo-fUlhGb)bi8+Z^^s;}b1?63
zYzuad_Z~fVq4(&8=1F$pKGbYo4+ADr$U&WW^a5yZJh&^8S5Qaq(aV=SkY?b?W}5(m
ztl%d$#~z0q_s%uzlL`9>!gg1?LXZHS(B21bmVnY5ZzdE#`Q(ty*$A*ST_$FxO`X~X
zdX1^~Mg(6Dl6>VmBF}Vu#&#C~w{*IN(nFhiFLfP=_`U0Vr!l%e-Gh-cKHb|{*EF2@
zxYJsmM;<-hy!+eF8|`0v`rHYV^+(RU-g&QY^UgiKwt84K)Y5s~Z=X5Srs=ij>4D(-
zrNMMk_ye;X(8_I51#u6+<2jm~jNqHL8+N{y$WRe$4z})_=><q*U!S`Nu${a1RP&a>
zJ{&V!adu}i-RxCV!Vfy~eD53#`$(*(01$Y9OpcnB{^spIn{@NI^5N$;_W1#4P8Z_`
zUz`11@#_58Y@QJN3c6m~Tc4~OCn)vF;E=C_G@{s3P(;;Rs9C{GP3NVj#az!^YsE{C
z8x?wCvd(F(^RPl!+ddqYO)pP&TC7Dx?+<HU>4#OR^yRv?`@1pLeiIbWvW<r$8ob#s
zl)-e&VsCp*lM`m;VH^gdEQoBN0xSJSC;@PVQAQRL9u@0;9IjQE%QdVceiepV+=)5V
zTiW&@lEP@i@`_rGhQetl;CY}|Vqu*Q!*Wxs0YcX##S37N1?+<(#YJq;HRQMR^XaI0
zEiim@-fX}Eg2oOOx^Ahc&EA-dm?n^E0fKG<g3y_x$F;C$UDrb1$>o;rnQO=Zjl#h(
zJ3?k^Q>(K*q_5pByJ#>qSuB7M@ITmto&NL|!`C{q3(O^1_KT9{jG8A-YId9=sxgcu
z+?@8|hPMV{Gb0lcIo)IFb1In5rFpCc#H}E&ib}d#@sZj!ehAsK1^;9>r_S_hR#2IV
zvl;`2%nJ+*gXrI$3@!X_Av?nxBBD=rMRV>zSz&EOJs+Jmw*~{U`<pJ>RtF<Ho)1R>
zGjMw2=HpKvEn9gsnd~;hogFA6NCNq*Zv+D{RtOK65;N<5mSL3|4nqcFT0OE|NpnyP
zc2hi07JdnE7uRu?JdI03+=mEc2&a-(2C%?o;7EQFt4$-}Y?#;iAdoHW84PHD6mmM7
z33x|no;54;$?j{{Cv#ZTCMx!t%#O$S%8pwfO*R0YXg|f>!I)J*YqF5ITZXc_>Kaa=
znGtTLv(_LO7nVf0VlV+)S5=h6)N(it`C&4q*9EDmTuEaBCR6d%ld-p3rfabpDGA`z
zt5zlDjXQ#0(S=31zHr6s18RiBEpnQusl`K6vCU0!HuNBfN&V4L8k9U^zgpmIb9HaN
z3yvC1wtDAo3hnhx5_9v2lR-|u3xm?^PEbmScx8{lx(rBK9szw}aRIhMMaPquUSdoV
z#ZqK5a~R}a_12fnm`OFjs8Xw-H}(-~*pVR8)#mY-fZe_6R^i=(N`t@!alj>$laQw!
z*v$GHQv}2f7BR`*iL&o3+4M(u`umnQt^3l1?nn`$@s-t&iq+RU!(G62a)%kBDL5+0
zxNJGA;iO4xn?BeuGYC!+>uJT9Xv01r==lyj6KK2QxY2NH+&ueS@0@?AeG@G;t%ofd
zM4S~oQ;o_XbikVHlVfEx%x7V0a>-)GZo`4^pcCj8_KaB0N}ZQDl;L=9@R*AUFK(jQ
z;$Z?7d$#G{9RhEDc&_{Ke0czrq@-Zw1q29J=KvgY3$;@kN%ZItPV1GFK5~5keqaq$
zW1$}`5rDI!DJx^Kq7>+%FF|fYW@uiVm^;lk0qRs_F-3@)eUxQ){3}R6C}cplA$>Aw
zGgwV%I8&aih%|fv1QZ=L9-Bi7080(vWGd~bb%6XTrzst+g$X#5J4L|?mY3*qejAoj
zNufNeTC_W0Q4LTUSdG16c5SG^oVB~x8_3qMqwK)x4jN0g;;289KKC&cPwWIVf(X`#
zO-!owa*6pElyT4)y)?6{-8mn;=044|P;{@JpkW?HPtg-VHmJ-TSK%9{NrL0MOMEiL
z0|)Pq&;`XdF~x-mlsrs#Ngbfo)(oMCVE~2Ki#<gOvzz;RFcs#u?5E8-VU}1hw`9O6
zzodr}KQ9@grftUZ3SOEEh{4L@r`V7DX`U^AKeO9ACy+s0xD{OH39CkhF9ASg@~Zp~
zNs)d}ZqB`2a7ZCdA|h{1`@7K0SyuyV1HwrQ<<r%{U7@dJgHN8E-FYEjM>2#Eo7-g=
z^Et{XP!!9FR;Ve8a`fjxRDnOzPfCr<WQk$Olu|MfQYNB}MbE&BNCR)3G8%YSa99rL
zfx25ci-%fkq4P#}QG4cz7#VRPR>8EuT7kI7dwlO(aX{<w5~HKWP;|BLb`n#!)uy<P
z=&1m{s!LQ)7#g~wo47p`SQE4hV8@n`>pgz%{9BrH*RNlFTjysp1R(*4o6_xCd`K%y
zVWm)Uvs(fYNH*ZZvnV3mD%32g09zLNXxtO~-K=L92Tl+iX=;ldwYz%cyd(*|Y~<kS
zsx1Qb3)r*!<~`e6eUL$g4pb(m?ts8CFF&3GT`ssi>b%!9&@Ff@4VsyQ49HNX&HFe+
zk`J<qM92Ee6TF7v)k!x7JFH({D(|ySND;=kqMI;>rc=mCvsxp@i}Jd2I?rC6;9#4+
zNxzoL>P{)15egt0rV<RyiVMCshk<C(R-pN>b(^F~fq*s%kjLT#7E^T)eAqc=AlRkD
zn2XHfZS<~Ekv)#7?hYD?_)fh0_+WlV`uupD70%@F<Yq<i6SCA?{FccDbAG({IQ%<=
zB6yDSbjSJ%KTUS>%e-p&EkXc_0VPexB@K|7p!Q^JDH6!6Cyr6n4`ZSQhjx;y+0drO
z_AN^&u?*C7xA!=Dc(f+*1s!B6tfVO^!Pn)}tbAiWM5vR+F;cYe5xfyWT~U3kntp2z
zM-u3Bb%V8DSL<!*!iFIZ$$}u}p<ghUP*PX<uH^>0Z^Ld2Nl1B7UbjI`OCpr$CI$$d
z&wwM(e8TB>f4e8i5a!pIo6?I|ra2lWrLi>pN3EOlZGK{EV0e4TV^GF(?5!JYf#$qa
z0JG-8U<SKweA7FB{rt&CA7Q`S*o~ylES-nWO#As2`rPv-p(L3VDZEQQ$2-bF53^Mg
z`6=OzSA;$4EVcY~bk+j|EY3D>#j0dZ<snSY4;kn5gJqXgQ7V!-=8kwZ@dm}T6$;-&
zib$1g_EvDdSjyOj<q)}LD;Cn3Wau@G)HsXuOv;n8$xBX4qSV9P{<;iy!@*1s!a4ME
zQBW+xWbeF*bAA~i6b8F$u|jqTDo*thz7dkdDY5CGMk^n?x-p%fXg+pzcd&E()BW^D
zKYaQ*pvi?u{n*}lGpfzSRJSZY)7vO;HHgsBns5!)p}DaS4$cxAhK*)UQnLd3WMA1k
z;RKVzJSKy4ycAzh`7n9G!IWIq#_FHt=Vs-~sdKds^951`;}ft{f%erHg*8kLVpCC`
z*eal`0;h=?OEc<x{zjH=jvX@xDCsy-wa2LrtkJdVj@W=U^PI1aA>Hi4mbAHx>wYl5
zO|iw#EVblTG)DFV2s&cQ6=KQCwJT4YT6^mg$IsHwrFYCfHY+ecr>;K!=2K|DPhoC3
zb?y2yYv(%UTlQ$Fq2RA2{j`<ev#@EX`&0`{gC%%tR@5xbw~Z=`on!r0!tKj+Q)_1k
zV->2{V?>GPLRZFNQw*oJ-}ZuInp)9{ZUFp=J{R<-af%i-PYz|4+|Pn)!n_^X!R!Q0
z4zbre(YOdK0hD8cPmb)quN4-p6vlRoo(aq&2~UZ;%?=vn;Yo4ig<Lz`3P(n3<JtKU
z7GRQ5;sA+YoX~U{d-wc50*6$6@jJV}@(@_`A$Cnix7=i+k!;!h4d`{Tl*mt;3x&e4
z8m>7}E)Y}r_K>o(jzXE;#$t{dIn^*bha@)Ra0&vMB<JHFpgo|bdcXw#QLwYirf<wr
zj__z`?GC&x+sJZ_q%FN+yRTSz$go)RWS9J=^4R^7A+h#AQu*1@?j1V^TdHNyoG)a&
zZTOOOEsLr5D%~2R7t0@72~<;LWTCl08HXlX%UGO94lR+DrLt2+#=_lfk(;LbY^F8|
zSTqJrCG8Bg?=2)?IEfec#(vAyl^WPZ=kPz7z@=G8*4$$o*qBRs)~S|q7xv(tB}m_=
z%q8Td?Q__^m&&;Vd%Hr_8gF<;AlEOpaCKuo@djCbeYv2;_GazrGcQ-r8vr7+)E(D{
zQGDJ!-`%EyAdn9;YeE0X!FW2n)xe+K6)Of{4#p>%D_|c+*<4^w;oMNZoM<j%S^-Z{
zW`?)hwZR<I+hFrHMw1iGo52aY+dPjacTY6Wtu|}@-QkpX@a#fN8jK*dx3FTpb@Cz>
z(Cy~&z4bAzYQ><C*jDk^u_g^?JElt}&9H{8o2d?byPlH7{LTdR7`SwO0-`}oW~cY3
z@TG8b^4@r9xOMWS{?>^Qq;U<H$WNdoA2*}4KgJ(!BOQy(?Jls#%?!qie%2<ztRY~j
z@y!7!J6sY&SSnbsXtY(R^osEyDTwooZ%EB;xFZST@FUvmC>g{`hE138tPf!1?f+(R
z9#FD;pqX(^FJA-dWqS`=2wZx3z74{cE0wlL)HmN_)<%Qz7TozlTG7;#x(nM_hIfE-
znc%xZ5gbVE^`TuW$^}VTp9BITj}#G^#gxS|$=jI1BBM^G{po%RjP@|ZR)~uWY_Y7N
zDph?oZ11$PF};XHRVlc+XAs#?=PX9Z-dd#FQZ+LyqH^Zw>U?Kc)4aR?ihBYmvT7i1
z_av(0H`>qlyhD#XV27AlO-6|9Wl(`OUv@C}d3Tj9zYk=n?zIaDNmJvskZ)`&+kEWR
z)z4C}4R*{H(Gcv6HSM8e3<u)P!EJn!PoRU9({eKhAY#$ALj5glw%X6(ha;=Fe3j<x
zP`wpvEnL61D+zdUf(}`AGiVIS#KE+Ox@oSDEedOMo1wik6S+lkwgP$_?2EOLs$1eD
zihkJfVrofB{+ecOf_-Rf!2h6Nc9Zn8jCwdm3pF&IC>3l3sneDzgsW41Cs*X^@SH-V
z4$rMb=<w`9dd_vS<;~rfM<E(Y(=RB_lNx_DJS-Ik&ESZemfCco47)}SAf^-!%@Br-
zRxFVTR%n|RsXVrEsh(xE2Gw5(b(Xz_(+iZ1i`xr?d$t2kb*<2YNA5P5&cQ{&uYz%h
z&>CUi^?^W0Y+{Qi1nMkKC_#3>lf}{#pwz8NoOk%(SkFGN8Bgznq>AE73Q}xjBDU7j
zFjX?X!gUMypq-(UW0_^Z_cVk?5{ID~Mq#Xb@@dz|?13t8l=LGBs4@k`YNuM&b`ktR
z!+8F9g5{qoqqxUJMd+4$=l9mdMW%y<q${hxlo37?sRpK(i^ivyE#O`hx7?_O-e;{W
zwe}GVwjD9@t2uwJ!NR_vJ&;vIdqV=eeRC}%JbB~BwY8?guD~T(JQxxX0qTZR=o(ZO
z6@9BHTSq#+6>755wX18(&7z~1T^b=wb0K+79hWO@QCTiL$<e%Mkpo=i7=!u{r-Ce)
zyJYE6+S$F`l9+m*26hBB@%cS=Go%ec5+BSlVipe}{F)Ug2HWRpV;`mhcCB~e81kFk
zMWv(bUFgsIaC>5IB~D&IFYyxS=`6pr1;L<CrEkiNBzsSnZ&=N9t-U%sRx|Ch6#GH~
zSv67*LAQo9*e}7>N&Jc9Ku6IbS`Wb%Go=}_ci}aCPNEcux+u|lQ?BEso5KKLinU!p
z5vH9JSg-&!7AmD$pHm3r3k_g0*bO_YwfENL*kdzvkU4biekLA*u{_-642-g~2_66<
zBSD_nZDsun1D=(jTa{m_)<m68G<J`|0!xN*puI9V@b7lw0~$-Gb91g7#Sqq}A#$@J
zP@yiREsxBdE#v*&9@b)GhmT3(dhuEhsT$nf={5Nw3kdsd^lx+IKpgmd8!1DEj)OK1
zVZtaVcMmZx102W0x5`qP5PwWNXcavuo+Ln$$TJ8VMV(1AT`*1u=mb6-z5>0*k`4mK
zIxZ^FTsf(*gRp}`$N=v>w^ZB{CO1QH1vi7FaLlTHd|F-5NZNDu#(CyRsR;l1)g1E{
zcT#f>^+w&xp@O?={ZJ{q;LDkg<>iG^X7P<y!J5U_48-UjmYzAdGuSzh7?laHSee1%
z_)tcDuAZh@pfeZ)ZmPOU`ED8uau2`0tZQQdQ)l9Wez#QH^-Ifgu~*w+7Ak7pZh6n}
zlFG7tPihDEY{4~9{HV&!nukt41Ys8z_JqhocyWv{0jy$>@-lA$>jhg>G(sgXp{V-u
zTWEzXFXtF+SJrl&5UZ+&!BJ_&3qJJpQ95|$^y#C5GKsD@D#{9Q0cLp)&tx>UW*ZdN
z7q58`lk%V=SzxnZAxe?u&daqqY(xTjxTA1?RWr_#zHl@+X#^bZi|FWO{MW`5|ANq5
z@w5(}NpQLeuOux2XSL)Nsof4-jBtiD!y`8glBy$yMl*l{XOpZMhJEI^b^`TKFb&id
zjps~-HN&)aWrnvdZO-rn2|^OBpyI&G0sBTSSZRi;iuZNH$(BB?OZtH37K1?fp=H6q
zm=qy21ei|IrygFS0%B-5+ES$kIc{mT?JAdvvPB#$DU~c7)us=`KyaXEC|=}`3@!@c
zwOKiR;`DKGKL~fGbU8Q0#&f}Zg}BOOziqq}I}m&?=WR-k+|w#(*{M}UNV$!(klo~U
zurN&bcYP>H`RMb&{br{g7XB<Cgj+T1!KqgIjU&}$@=|M}1Wm7-QAUm$&U9>1>pz@X
zT-EkU)DVhj03oyP@$8kC93r1JwT5rsV|ocEAU0oor%AYdWCCHc=4{2Cp^ikdCN-0%
z!Xwo*4c6>oh)~aj((se_2DEtxz79XJ(iBW{Fz^R!PF^Ne@T_iF+EI3RcQ2>UZVgfF
zYbFDLf%7Dx;y^ld6mxkW<(E1c?~td5`kE^Vfe;0q8E&;Mcb@(xhwT6nuYpYiwO`uc
zx%&W_RNBVTzD(}4;wIE+ao^E?6%$lOWnZ}HQJa`s05~pckc|mGSx96uONRHHf3O*B
zLq|ElIf$|&E0XK9lU2qZI2q=?lGfFq)!L22;LJH%hBB%4H{a>zwmm9}wt@;7cjX9K
z8}QC8_Nw<$@CMq*H_ZQr^C0q0u2=|=?A*eY78_NkFSb^deJjQ1$)d8j84OXG5PQB&
zc@vE*iVf+MbP6V|fkIDqmIFRcp0wV(v#VLC`XZu7>O{Px_Bu7LMF$-+u{`U9$poH7
z7}jaaqE>tMIbf$OC0b&7q~pIk@@hOfJ9-q<>a&~b`B7XsW{({S?xlI|;#xVmQ`{V@
zO^vyY`C<gB<wSD?(7bZBydXV+og|GWU9UxV`eGeXp0F&vDfL%fa*6@)t8q}ZEb0uD
z5(9YISBeMm!B;ketq_h2=dBKdaj-OaQh4@2!@|=bw#DA4zOZF3`@vO`B+}znM5c3f
zsYXwL%J3$<tPerzOic+n!0PVX)S3lLWufH<H{<Ilr8x9(+6RM9p?d-fxwK0a!73SQ
zSpGw@1X|YFq{S#U2ur*-3oUzlz<hl=A^bpA*4#kmr)tjaOEqIXzgj>cMJhD2cLA%8
zT^rh8lF_#iWJ$4x+4zzFl6;|%z_F)yA?ysji^t*w=S4jDuAdFE7iZR`A*xz394t5X
z>^!1b!<%@urvspi$FiIfl3x5w?Mm>=go$X6^BA8x9qfS-URY^1*pkE>6)&>QuCBu$
zYc^*(JL-%sw|nqh(SahJZuotX#ET=WL~=F0Ig!^5W>%Qm&{HjD<)Ke#p*)7j3vHJ6
zUWxM{^cCno9FnvE4_#YUkUi8CjK)%iH0qTKOS&X^dDpO!q5<Z6hxxwz@sBpw-VXmE
zte=Q<^Bv9gw<86jaTZ8A(1qAJ_ykO$?~n!IOg;%x2U8GB!mL`1Lq`HAWC5>B!OQah
zz9S2eqA*AT?KZKB0$3<b2ka+f)Pbri)U(4!o6B!`RNxw(*ATDC))@E0nflL*IxVK+
z%LQ}Sxmfebckec9d<r#~;U>YDwaqjcy9nFn$6(0K#_O28XE2U?L;wZR2J7z`xEvFB
z)5pT|%dTfa-?oEAmRUzgi7PKFqu?Pd@w)s7%e(A-o(w&%6J&6Z+0qoHc7M17#Lmjw
z1;Z39TG$D5DA^NBb}S6Xrv#JQ9SaM0UiwkOAA~d?KomwiYl7~WgARaVW~9^iafbP%
zr~{0Gtb!=BEFET4gv}Du-_`W&80|p>3uP~7ym|e~)f?U}>=l_Z-R>H5!taaerqo=P
z^9CjxKu?~ND8@J)By##Toj5V_%w|q?lAf~YSQd<>r8VXvn7f<}kVk?q^b2K)n;(cp
zWI=6&8?h@W1x`f!SRD9tjskYadRWow7_j-IG$#cpG4FY<2{F&eD|scg#;|1-kwzs5
zQiXR8gxx_(yaTJ53#rHt_KOLi3YU<A0BWHF{PbbKQ%1~NteFq!MEsMof~FGp&uv{y
zE{-`IxCbG*I5sy?d3r~b(WJ*oHS)znFJNV>q7P`Bv!uv`RLA)UCV|6GtZlr4`cVe}
zjF997ASovJNX0lHS^Lc>U!7Cq+T6=d!kq(&0EQ(_J31A1Mi66uUO$|p)35>vY0=wy
zi-(+Me4&E-7IHraQzSwK4?=wbHq=?5?n}AW0<*$Vy|}j{0^Vu9b;b)3>1-#j>l57>
zZm{b@_=om)ArVkTYb^=(7Ay-Yjoir0uu-=_N9SB%jBSxYYf}#Qm7y%whn_|%pI2H}
zbB;Y|%7yG2Br`S^o6`s9($=q4s4FN$A%ZOSLm*(=mP+U$d;_$&dE^VVs-?X^7OnfN
z3P+LD-kW0K-a&MpfW8g%s5)#GK(RF5)R*LdpO{SKc8>+fntR&Hpiqz?NSnOq&>Lfr
z)Re3Lo3MvMg4l{B7-*{nGVcdMrgLSy#ymPc-;NlT7p7BCB?&(MZ!Q-ONNIM{$fFtB
zXpsD)ipd1EadtWzM8v90YmL=4z(g(I=GAxrH4l-`4tA#XI_1k4k&<!y(ilL(uqoQQ
zMf)Lv#8z&AF4)=1xu=|<wb83uM)3*^w-rErux7P+PN9>S*s6e+)fM?734GsrZ|`Xj
zIGml#4i)Zdn?1n3a<=KjOZXM`bp(yT15SQTexbdFMZ%hFmOc_=GT9%Z*IIlql&gm`
z=v}18`_>iqE}}DHA)qiA-AWKJ#?@s)f=pp?j?<$R_hk65i+7npP50f<Gg*6+r&Y95
z0X)t|hITFe%qkOM8W#5BRz2Y`0qG<!Gc5oJEFDri{p@ePh{8G!38*nGhMb)7nof@=
zpC2d&6Upnx0a;%3(Y`EW&mN_+v>Y{K2MmHmLiEU{;q%pldFKFcCTP}`slYPv)nu@m
z`j`jhOKyp9A?0C%A8#oKV3(i3ap$MO4PbC1&G~@dV-Xsnq%OA6sg<9L?_-`UFX5rv
z`MFq3;;^*f#AMUd2;xgwy4`s*c2mhK3in7Y0nwH!D21#R(JXYvdmwLdWCyalJt<cA
zkpzI~B@ElfXwOb&g<mgSP0ya3R)<8AMpb-(Wd-jiX-bQVyGWSk0UzCw^Ed#?w<gCs
zK-dgi&ynrwcBOJg7mLl+p&#pvy-n<lswR@w9J}{$O7E5i!qj)VTE;FU=J8ocKWl(J
zL%IgAoJR-mnFn;;Gmri*<Q4N!ikoGDx{yU@i-**y#;!LFev`s@0sHsZIznv=V4?&M
zPlr?DT_wd76+}sud4N8IP!=5-mgP%EiEke!Az%?WDUi@a#LzW{I?MR99zH3Gb_&1(
z+I^)Y2|Ny@0T|NtlQSi@q8$gtXR_-Qv#X@z2dmCQ_rpaziU+o(N@OhLT8Fyu8w#~i
ze>6woM~h@b{D#TMhKW$z*$h;3?OEOyK5rX%%@wFW4k@|Oo_X_-x{*CpUt7Tjo@Ut1
z;Q3eZ=4jI~-hx!x=Pt)69PT*@dA5o?g%<^@I80CXot8d_2Fa@jXJhq1FjmWl_qwl_
zDkY;aNJ*^T0VxIxIt4-*!le7AI%^3D9Pvtz4|eOhe-GNmbH2^Q-DsCVgdu|&Adgzl
zQ=c6bpv_LMZdd@M<H>R9(k0e*V|&c9Z{ao*qRy;$2}2;~iZ7u|<otO=D7s`%az~mF
zU<zLh#|l~zTaLm^nz)W~(zEctF{dwRPK9M(U<Tm@j4Xw+S9x=+Ph%r$vvTyfpIA!q
z59&oZ<9CUpwmd@niOZs2vKg8A>Rn3JyAJ?$A9z3ARO*kW*bC3LNmt<^P)LH%OL1ny
zhyb#OhRbH&HgBzVuK2)ct6T|YsZ`&o3y72khxtLu58lTS9(?rE6opyAL9f^hJGK#g
zewY{>x#YMp^I`5*6k`=&<gHI(9!p<rOb~i&li)$SW0Orpt5}d>Tafh=%Oe|DtuH3E
z)E+hz>+ot37alMH^X8K9rZT+R`cd5H{4>R}NH1qgos$n%re(aDFwLhVXfZIDXqXeg
zFAEI{icJe<0BpoJ5$mm(kFbn@Gy;1>u(9R<+<u_lU`R*u8$4MA$n3<y!g9L2e-BmS
zJ?T|AYSUt9C+m;qdbJC;X*YD{trU$A5^VLFV3nRA9ikIc)BRnHv7PKpLO4w4>n;0F
zO1Z&KToMQt>M~2ckkUEHdI<x;jcrS_^XAH6eyP8{PT9Lu8zQcjl=PcUA8|^glH_AI
z>qIF1H9a#4f?xWmv#AoQYFe^fOV6t~1=@vgHV7HLe|x$K)nuu4Xn+OpRAB=kCms=#
z>U+q?f+h$us9T<shQZ_-I$d%w8ik-z8k*Qk5R41}6_`(MZRwCL*ns&!Y`inPHAI!P
zh2w)>D4N$2K`E3V&eAklDS4xW!O_u`kk^zapINCn3*#GV!ct)%^CQI_L|&r%;|*3o
zy6=v6UKj@w_cJr}>Alf#^+S0D4Z}-dyk2tM_1Ux#XX%?%jOfSZxpPzahKYus+G3^^
zfS6M@m`1B-vxLilWlvXilC5VuJY1?&c6$g|<gAN50GjX^sJNv_xU*9M_Q1|Fv#Pm{
z<AETnV4e&(>6Q&6IG&A&WF*@GBvC48Rvfr-9F65At!3yaR(b!I0sES#;TNTd$lcq~
zUa)ft`UCqTKFgq=HXv1jRm=ZJ1b}3$;|r#}`ftLlhnl;(Z$aDGFL4+eRZE7__4v#i
ztR9hhOKSkETPU|FF`c<AbfKb=bxr<1tG#TKh3p(rp;?p_HE%>{w`uQ*E6+6N(5et!
z@(BkNA2rv2eU2tQjml>{L(v0SH^1{}?}=xg>OFxoy8xt@#q%4vk%*K?bD}HYI4yij
zW5bKXuJcugCgB(~ATJ=72J@w>bsN2khG2JCQue!QOmgKNxY}q(ErG-iMgjS2YR59E
z#f%p&z?R2tHYgy(OqD3=Wp@|gxpz)$s;WJ1N1A*sMuSk@7(}AmC$yh9!{SL|C$RMx
z)0BCGnZsVPtmL8pp-#bHMy0}aX0Z<0v%@L6-Fh9fbKN;bYi=xBTx7Hz1A04KTskgI
zo{zQc;_<+6C-VTsvI>O1hD#03b9n-12PQ6}Vr%(AF;EH!oXZ}GRZxojdAcRQTMLh^
zT$nBECBs*@*z#l^mKPCq4$HyWb`a^DQg~wc(#}Ng@SwAs`j1(_tdQyQSq}?gC!w@n
zT5t^**0YFs&HOo?DDG4~;4+4;$nBlHT+5t{rfF3oMP^^`ymxY~eUI7yeNtLKAzy?i
zU_&^?-5(Ek74!q*(R*TlN=%_%9G&2##U*f3`(z9SpoiYGKPujVW>nJ*l2P%cZjV~5
z)`b`iMmJB+95SwZeq*)w<U%k6Kj|<YB*KoS8SYFQ3KF`&nF&bcz6g#*9&}B%BDDa&
z5W7Y+Qm?>U6~+)r<392;aI;Xs%So`|Ld}3|m9#n_e~XgZoo>)|xee^I*arx;RFc)r
zNb?x4qUd85w}+gLjgxE)0+;2Ry4#{{MgvU4T}chE-pdiTe!7r4%O|RaQaNnCowWju
zr{5C`4)UMK<3KH8U&p397@<k9ap36eHG#v9f|m#;K9lXM<<9VbaA+PTuRVnRMowPS
zecHkzS>#?zh4C&kz+%I;Y}(bv_{?qZssp>tisbl!LQXYAlJ<5d30ExDr9&X8J}>5=
zrUY|L(-RBz?(cGpT6%z+j@`{1t(;|(E=d#2l7_pn$ac}rvdb&Yo89TtIf{`V_*XHr
zWRDX?#uatDn`gm6)sBewK`@)WDM;o?-B=J2ZJBUeahhXI>I4(_QicWAc?K2NTC-L#
zP<j&c9bcYGREiM(Opwm6A1Ga`>7dk14f+*&XnXGv{vr#T8V9Y(B+z#It1E=W8^Y=l
zg|2-Lse~~Wj|>^0R7lK|oI7#A+r=K{?I_`uSRs8Kiq(-S*_P>$Ua96nU890O`m|XI
z-5NBFX%)bi<9bDRi1IJBTj3}nRR!f}VUAfCmRZCQ%>?KFG#RR*<!7RD9AYZ6S*{+G
zS;8;Zj+#`1Pw|$=*Ye!lk+eb*sb$Ox%GR(WaYe0KlGix(u!AkEJ6)!~o#}&#jkPYP
z0@{f6Pqt1jA?fp4b$c;(EV?NXY+BQHm)yWEGq5rnc~a0ER|-SPL39x&6{C{!NluI5
z`em1b^5aDF)HQKH&s=|+V!*z~#*Ueh=;w%KVx+?1M;Y|kt1L>fZriDnlipe!v4v4y
zGjj)$j;I(uteP^3Nt#1y$?hvvcse{x^7!n&-`&~61*P*c96G1GL$p;WsX}$q`z4kH
zc>+FmlgJNh-c`6^9dx8|U1S3UwXe2sp*a@=viM%|8XO;rL5vi>Ixo=3JeDGb6y0ER
zn2#EBlB{Mj&Ot3mj<cQU2A;amdy1jq>5uQbg%#iq1{fJW;Jvt*sz8r+eA->!TD6A-
zKDLtQW{SHZ!F&*buI5H#p=FU|#b{_-h|Ha`YMWCO3N!RFwRet3J+zkGb-L3`A4)fY
z&<ZfTo9zrhc3gchu5xkdhB6ZJwNwm`f~c|DyiIr@4i;w~n?SS-8dyS(fQ`h#M}R76
zFPPdSs@f=_2;oKuP^w&-IsKqQwq~%FD`Uy(C6)l{MSN6uFq8MUIBQVZ{ZQ^LHnW3f
z8g6X1gG7XUR_B`)q;k%&xE*x{G<skb<lH1hC?2eN$rtpiUVc;Ki-oN-5u{LHL@Zpr
zVa;lJRj$mXLdFaZqd$;pAtCvERKuSSe=z*j&cud6wThw#<~O|&z_hr%ctQ`E$Hnn=
z9UDTVu92&><+SYWQgha6E`Af}eDFp8PjAh|ArQ^IEYo|q?m(ne>hJl&cem8<!pet*
z9sm@RQB(oxXcFX02a|GBBEX}6(8X$n-~}%xRz8b(n=a%oLK^M)awDMXI$BbYytM-C
z|65QCThD|<>*l2VK1_^A5TCF_@UCPfpH)-H)!X=w3oCcf*6&_3M`%XkQin#|XDHrG
zea6O^!gSr31+c6aN33DZ6d%Py62plCd2uY-fsbBjW~iXrlU6lWFsKGCK8zg<y>zug
zV%6j+JcCdKx2IEvtT6TPWM)7{RnRBQk`N*bfVZZK1bZ6c{S-|>Qpdp#bt0#Gj444D
zb_ax=+8+z3pj)x}A@ZQdyt<ej(di>s2Padf>5B81nzo_h=x8DX=rk>DFRU9iM=Mf{
zD$TyR5=v3r)l&gtg>=vjP~$K|S}rq&vTI!&sKmpY=s)0+73b2^y0G>t03$#=tKf*T
z+yW@740CS&Ku%Kkt4l_^5*e`+T&S!FT`4@80ZBP(9p+7O>U3Z_!X?LGssoo7Bz@)6
zue<s4XhGw6L~yJMQO!;!?i;6gwBur~El^dS7OJAF;LsxjER<eQcH+?mt!JWnrzk5a
z6OFInT`%$tBjkG>19VK#Es;jOHlH*{Uw3q8=alY+(8j*UC{kl_!a;~AW2PGnbFYE<
zGBLSXu}h3vaL$x-m;gVzRMhb86fmNrN23>2zaVwNy0;rXmc9>;eW>mx&)69r0}GX_
zVV6dkw3G{A&J})23uv5HH7CpJQL;IICA+C%u+?)|Z2@#i*AE92A$z&mVF!!Q+2(bp
zxgDlx$*oayLzO$#8X$f%zp*^IvC{Luo%2`_BZgMHJA<#o)xl?LDrgiXtw2YH(#3h`
z2%FfgExGLy+RU^^Gf-93yuE|l0auMh4X?hFF|?TP#ZGx%<gdzIf*_X^cyJ#Levl*&
zJQ!}xl^;PPl>#KE5V&3k__P}Es70UL5uTzOqL)#|lYid|q4_64({izFD^!34P^`ow
z4mmu`ZWCpsR-mwkz4y5>dnKV=_f2VndjLI@9S_np9=XAe+uD=fEH$DDt<__GT0UtX
zfC)*5K}aMV$)&^8`tbH{LjD%9Ku{ua6hMKq*g?0@$&?EmgrH=5MLq~?d;uG;>w=NY
z_mFM(r#lKcA!6Xm$5=z*Q8Z(*mMk%N!G2ueXD{>#;`Fh^Tzk853kC%Au7mux5(Wkp
zxdrRTaeYb>sAy|T{C3JfLEEbbbfIZ%7mFsEuGGv`6G|uoO36BOp>&zElErzDo?Gtq
z)J0=DuYrjIg3mEPodi+q)nHQ*+4HN#)Yr`SSWClYx0k3&cO8G!4FG_usH4A#ZTjkZ
zSa8jI*2B?|BVz(S_t1Oy9z87HU}bL^fa4rhS`3RLL7o7KNZ2f(m8)<M-Wj0fI)8Hf
zl$KV94c3Y*S3w}(XI)`9B<vCM5I-s1yX+X-9i|)mDA1-JEz~Xaq{Qr>dB{Kkxd=pQ
z!-A;zklH&GMFYeBirCnGHBl8XCFk|38wMLo9ju8PaB?3u-<HO5hNrHp9qZzRTe*uE
zks2$WE3cp%(tMmQ@Ky`|fVS%zh=3B>6teGzjf5$`r{gzg^FrGlpc=>R7OIADE|@T5
zZkKd10iP1-iIie)c!PTDcJCZy=58uYS;0B8y>;(!mclZMrheh%bFe0WduLj@S7k#$
z*lZUAqX0Noq%c!MVF7B3>sCQ!lwu~TB8OOi=>4>&o@xicY9Yb+Nh=bO#>SKJNp8;s
z5yNfex*Fg1;?~jXNS=@97d^ihQ$5aOYzbdNct{?Y{S?m1r|<?owdI@Jvd~rQf=iq6
zG%Jrd@n)>)V-7ZbFx|;sKB>}U7$@TFxoxY{@=Eeb^}3N|&*-Owl)%SQ?^Y8<N?t~W
zaYqn5s>0^Xj?%}@CEKu(d28%Ks<*7Gjq>6cyTQ9C?4(o4O(JyZq%d4?pXxVR9yS(g
zI~Y@dDcAxsSf){ap(TSnSx|ucf_YHClwYNxd?uz^4a6aRFVR;r$5=0XD|vN7DiG!i
zio@}cgs>ICJ-$Mp<%KsDs@~3kB{g_QI8^R)rx6kSWQpNecwotFBqL8ddCrBJC6HFG
zbm6s1#Cr`s{FED9kL&LRTWU#d%UV}l@a|@Muqd19w6WS9T}V*;!cKwWGC14qOIq&a
zq~70kwLyL;z)0~ETDGg!42Pg8rHrsGdt-?xi7?bG(?)PgZ8BumD)4H7dTPd!B60cV
zUJzMzrwgAP`$Yis4$wz6K9D3?)tV4d6NFyrkONh_D<tLdD2itQ%ypCudA%Ch925vx
z7w)U*eP^QEdyAPa4_c`NwT5kTaJLAkc@v|WcTddiaJLbYhTay=jU!ZwB_zEkGL^^{
z)=&W322fCWI;_VzNpZP)rDH}7a>@;QTkvTPH%}D`_VJXhQ3S5#Y?3WPMR5>rGIm;u
zt*GM*u0}>qg+vbj<<;Js2YAAnrI_{JJk%k(-kakfBUIktzWB%yCK+eeU@YromAfb_
zn+Kl8>ox@I-dhxEQao_pTZfZ?lY}X-bjpF>&rDSOKy}|{>^puhMok!dTq<T1$s~*f
zne_D4^KZF$q0v{b^ZVtmE0PSaMV+yvDQT2zG*%d73X#W?y4B$out*~ATZ$g2;fgaJ
zxY5<#(>e%V#3G)MM>lj05WnIEhVlber#M|dEy-b6@C(RE3b?RjvZqpym77W}aG!4c
zU)J17`Ot2|1>cEfuhxZE5}>+iXS0QHCIEiK!y2D?OYcYaEWh6Oao?3wo^DKb^QWxZ
zI=JDgV>ex^<f5C}5|N(oG1Gs6S^Uf9LFYh6rN0UzA-x=6uiE6x;i==Rs4p_40HOo(
z8k^X|M9h%bA<?VkhYZdF&{fzTrZ}AIaJxX&7H34YD$u^0)wm5yB0CR9@<zjTB2nW{
zu3LQBM)EyW@s6no#l5`s+6rlc@jcJi7}x-Z_`h-p&P>k%#>TivfpFrD@YT_~{>4)0
z=QVB6_?0}9AJP>da)i@-&3(&mBex33!xy58)2;Q2DK7%+P9FxDkFZ`FQkm%x1~;|=
zN9WnJV4ISdVz84(rfhMz1AxcW2UJANw|d^;6uSw968qic1BKRe5*Au$x#CuqR8jNU
zk~@F{Mv^9IdqV2g1jB~9knSW=O%;<ouI!{Zm8pCQmfEfTDQ63FsKLF(c-oss8l55I
z2$#lPzVTVpBePn*4Mf2<`f82LR&qgU*;;+0GNIv1P~KoR+UipSmMd=S2=Ai^(|*Wc
zSOO-@@zpjgHwT;?F}e+BM4lx${L_;y2V^2N%3#D3YzqgXfC@BZ$9Wd9@TTuw4yVsT
zwJu}uWEX9cE}gLXQVsetHVNic1Wyw#u_$JmjVs64%aG$^4qZ`^(T)DPla*S3h}Icb
z)sz{(?&_1LZ}Ui6Ck3d5-epXFr+b^p1QBP`^m4}I!y@5>C5w5Em5>zJg`E)duIKic
zfNv_60dvd3m|HuLTV%llxn4*r#B~Ng1x3n@ZP@nHIi+&|e7JDem1LkGK(29s;4sfP
zw#LaH#5Y%qezU!8fWj9KPk#3B<mV1ge*W-e09i=qV%+6=X!BVlFM_>ak>_5%mb^6f
z&{|R<DLYR<W9WJp=3=o-vvT>7)30mRjvqca7cLq(!}q;vYzt+THx94TaBK~<<)te1
zl<|mbwXwckvzpYdS50cyswTDTRFe*0qvh<S^;yndTAStUrFALU?RY^e_9;Ak+%JkJ
zZpZA$cD#OU$Lhy+oPIofjNPoI@pZG7#@5YR8dqzmhy(gkm4k(oE?FCD|C)k`+ECc`
zugNVOcf5g(ER6+A1u=^AItUc(X|}i6V+XniNpOM)i+{VnyV%AyuOg6%C$dff#9*mu
zwRu|FOLY`eNSZ$myw3E=hy_<5Lh7PH2SlkNT^vWLbO9HteW@n>s?W2k6EfeaVft)#
zNB;}Ym3gB`87HkG$H61p4>Jd^DP0g0Bd-5y^Sn+{C@7#!uBC`H;Ed17K4xArqJ6bI
z69<=*op&ZWxx{M$R&^af-sD<bAu~LPnaytCH1KMn;3IMKO&c8kGGY~<u9Z{Ii&#AY
zb^#*jK^ChMZHdn&WsWN9_Lfp2Jl{LyE#H)*tUc&kD|WmCRmj5~%OQze<vp`yv4D7E
zhh!=fC<qj$IFYSyz=`0=SjX8AE1}MT3W!=mjpxs_RC8Xu=U5Rv>QZfimrcM**csqp
zxF7yktK3MmwSBT}%j}en9&xgnMIbO?L>xqTbg#@48fH;=d25DS!y=5*RVb`uNy&pa
zyIuUk)EkK?2Bl8Z$<?EcYA0g}qvaG83>Yeg5ZoDBox*$Mn|!?96ltlV1P<1TjKffA
zmcQ5Pf)yeJRq&)b^?7OmB5K!^b<bK3<{btg>0c3t&kJ!x4N(9n^UEaMD?MjJ#56~z
zP|ree-Jw(+s5$0#VX6~t1_%t%H$|UVmrY_^Vx72W&_Y$FKsWi7>c8@YIwXSvkM>KN
zz&_LhaKfpSjXJy|ma-5?Cv-qB75e1%UZ!jzSPxRRP_QVA4$Psc++nB-F=gqed;nTZ
zzm1*1VR|kP?;>+tRu~!m2ZOHvo9n)>TZhEe?>r65pr?w7on?r$X=wKgiBdu7x&td}
z6!zHV+Hdq!hzgr$^SzSDasz^kMd_%|t<GlJmdtoL9#MX<MXXqWZ*yn0gZ*2z<E*d$
z>JsX=?xwQo5z0Nz{DRdX7ZR8VNxie)T)>VWuOFJt{p_xLF&w><jHe^FYKw@}t{~x%
zh$2F;`XRC7LGtp2pL>A9Mf`Z6nrq>MHK$i^I}F?K=z8A7YE_K8><k?ckV-;q1i><Q
zdY2uuu$=h|nkc+1&2Ty33$jKVD2~9yt7thb(#gXsb<DVUT?{WS10L#Nxi8eJ%|-|!
zTgu1wUB2&9R045Hpj85i9aZE@!LHnq5tHj_YMXWnV<!FrRu8W-byh46M-n*O!!^Tg
zRoOobEw%Q*0oY-&;1-7py^T7@eXIRXlC^q7MhH2o!y?eQ&Gf=j3=P4K0hfMf&A2^<
zWBOCI_z}vAda<*N^w?DpG1>Ak5mOhkc`7IK;Bl=}nlEDhX7A-|?`z@M>(bfV2;O&8
z+&buPnczIJ!%R4K#2vc5D_5KA=PqA<>dF(%xf{*7r=RX!fh+ZY8lF}whmFP;9RP9T
zeCRZtjpX-qphUn9YM`pQic4GQ<AG3M^n&&dG=;j+JzU7M@(af!DY)WXm4}mBF?MTM
zzNnJuF}N}D9Xc>h-QME9pDU<VuBF0Gzf;kLg;wEa;xy;fr9i@F>6igv5B{opv3Il2
z@_@Vg^#O<a!zBcyj26YI&oF|;)Xvoky(<V208ol0?P-829qbq{rv(x`SOW~pf}iR-
z*FuQ2Avjf55V6k|0nql*K&l|j{GvCy`0TZd*Ppt4@yd;JPak)F7jtyn5acmJ*L26M
zuq$l7r@0<NaOKsrxw!XJBMAD65AyPb9a}q<DI#Qu|2tdnQ7ca6tw+z9)ibN7HP7WZ
zncA4+%I5G3zUNc!6U8*%JhFQF^y=wHgptsf(M_>~#kvS%7_t0s=0&83RovcSRn{8R
z5$;9z?2K=xsU{ZR^(hjuf-U~IEWg45S~vUp#0X{@hluV{P#4XM;%Bl&0C8EEuGCwq
z7c}Ob^bXct*qF3b-vz}kSUrX1(Yfn5T+vc#!v=1tmuw^;6hzmpFb=E-Si(2yyd{d>
zXuq(0#;M*f#WWCZ#H=TTCQw8xmq(5D!odXtiu(o{FN$B_kUed`8tKldknt=>WQvoV
z7!GlMoDX!LY&##jFh~voeOOxa?4ha8by6c#LvA73E<07a%p$DCktAgQw%Pl=Cgxq>
z`YK+}Q&0;{YU;9|d1$yS+Jg84HwS>Glyr!cQnU*TFLg%NrS`q6VLvO%V7&|cBU_dn
zn8~~YFN^MU&qZgNPrBuAHnfPV_|Q_vbYRy;_<<}#7Z@o*^kXHZxbE2OKqrDr(Tt=;
zF2tO!zq$HqPssxG!gQS9bEM<eOGk&`kcHXhs;%W)yn@y3!xYkN2RE?c+{L-PLeVCk
zq87XEh+`L%V8?wJh1DLY2pbrunbx?k7bW`v)YQ8gVb886CXQ1_Cq$YU@vMm>;hp>Y
z(g>t3=Lx0rk}5Fp>zL6R#2*weZ7>^SuP4}b?<#vPlqAAmek9*#2x9=j9O0lAXU(Ar
z1slb@sj0#z)cYrN9#(Zjo6MWgo5VCj9VSBkMCaK^eIKYQ;S^xy6)|Y(4Ht6@Sz~I}
zkscUKKzuZ17r^Jczr+1;A;s>7k&?o1h?^U_KTmkPV=BF>t8QS=9Eud~f9YA&CCM`b
z9YgtYl&o{5-yO(F|6zuq;~$4yycikM_SqlHOk$*kcZEU?DaKEvm4iy1r1E0xf7SX~
zC2C#bdE6DPAs}^UuueE3sfOf8HANrD$(_M8T2mRH8skKXqbmaG3q82^YcteA9Ocjn
zbkSLsUV}KKJnXv;SUSFgq^+w^6Q>}|!y(&0yG>M&972Mki<{0O08|f(7_dppGj<$k
zvsRgEjvZu8$DgTQ)H_mVs2i%kLIwO_3mC28R)>sPdp4u&w_fzeCwGYaRd)%~>OcUq
zJsr;r{L2+eKw8#Pu1HWs^_Wr-h`0bK(2Hn>I+JdoNr@PB3`ZwGgz?K3t9VWCDWXB|
zYCC<wobh5OX$B9>S>B=pa3%`j-c=f9_4R-AR`cbvd<t^YyBhAZmt>yJ-<Qq3+8-@b
zB<Yk~{T9+!f9YmPPQ!5TDjb<ymfERqlPVMHBzeJI!(NHlRB4dxmDe!!^D&ZM3zQSj
zK1*JdJ}%Ks2}f^Z6c_igZlC2<(fXtfFB%l8|3YOC<<M7MPomJ2Q(2>OvRTlrst*+4
zWD&ZJ!}F{(>t=0f7O2IVw=|E|XW$9PnED70m0|9$Y4cfY;$J98@M;KNRK7h!T-c&}
zxH`z+p`GED$~%35q+i3!M$Pemb4haA`Fh=WBub$Z*N?}uIgxInwyS2v->e{_aD9?0
zgDq2^3%##g*)s5J{wWmyClXk3u+rlTX{^aY!2cfpGXhRh8GYyE+-(TAZwcAp3N)nu
zVy2Kkci7|Y&lD0cc-XgB?s0?-z8rWI5k^b_15s&se73(TvS^cLy=$x&vtW({xk+Mi
z+2T})M19m{bc3ePrJF-W^tS6sJz~6Sr(N%d)!FDw=pCqAW-Ra(m`XHHT|<+4ZOI3*
zXfISN7V&zmvyf5R>x&e_xP0DV9b7_<MyWs`#w}wZ&@a2*=*-LLvY>4r>E}(!K^b2!
zoTl}bt^_h6%3UHCe6?d|+$gr3UEOM>Q-PHbHle}#R_OVRO@)iZ3#LcpHQXTpdnh^=
z&~vr}*H$HQ5JW#B<Zt~E$F4$2RN0~Af{36}$|GjfpU<^F7idYGbJrq-*@&(}Q_2Y-
zrRO<<-nHrAm_1ea;hWaciYbxbSZ7+jW1)qh^_`c?=W5Cq!_Se5P%x>z;IH(irqCDN
z=5NzC<8SXIG~_6rh$&-tbb+>Cky__{WtKV#OT4@9R0C%b(^2WQ`qp~u+acwo*Q>f$
z<^km7{xuPn$_Kd)dF{TH`=w?D9;Z{uaWTaaj;fOt3CE8_eN1t{As`*JgKeNo(l|yI
zXS>?2B$!pzUB0O6&BSmV&=UsdVAs1&C1aw^vCm(BRIE~`x2i@$Oy-{neRUL2^{S!(
zioRP<bnPm~v0*Uc_eW9mfEKA)Aw#-UnRLpotyoG>C(3)waZ9?_CuYWlRBe=kE*Gkq
zEK!JdK0+Yp;y7CtD;Omq8a&DeQ}J0gBQtI#4zb9$iRd|sR#utixFZL}(dJ3u!CD~b
zRHtP@DQY6$3zO*<f1(IrA1+S$Xe&PR>Hxo4{H6Fl25VHt(wG5JBQjk^zR;RdI>l;2
zJ?fL!*_r5O;VoRH6%o<*+;uac2j2BjXW0^m6l~p^YlAW+)rZvSw$G+8@u*$qy<P#h
zAUR97q1;uWCAU|s04RtGDGr?tv}4zU>c~WeV=A>aEBVd~g?D|SX1(c6&1vn<10_5I
zq92Q8xv4=w8$EMqKVx~i0ooOG*uA+!w%T~pM+L7n`gF%YzL)`rCU0XAEp`!p33|)a
zgg{cvV&3nYiD#9Is%z%T{X<E_FVWfjV;2;t9-Bm@+$)}T<X)Ed-eKXkosBE7t|?*G
zb*C-JYFut^2Zx+f+(mXj{u$T%V}g$DZEOrpnl&ZY2fNq7H44YDhXETsTDQh}!b!5?
z6HiM83;VNc`#jo<T^LK`7LUX9loRC%kE8t)%@M>O2yMQru>#KUE;{jSw@3X<_U0(U
z5(<)H23qV!zS`{?(Wl_?7<18mih3*bjI}m8$DdF>J9}hJ&JP6iJhypUIwnH%2pL}V
z{T!=DZZHc`!gx`P55ia+rX<Vghrj?JjB(0)7(9#Dw!~U0mEzlBV*!n+11|{f*(MV7
z06%6LyiKGo2Wnwg1X!^CNRZaJ%qC1GhuWpA5&JV9oa9_4HCU614MnWp-q85Pjn$iv
zH5L?i()MabJiBtz)qynWMXzDK(}oRom{fUrUc(Bs3?pU-ZR=WtUPW*(SVi{r4XI##
zNC8sLX!;N<M$DdK#bEhy7`NRJKu6Hl0?2yKfW7&{Fh>j@@5RoQV_hk{?Pd5tu_?0G
z`3yrb!iV=%1`xk@DX_?Nc(?b-5izcOgJnDbn@gCC<2B<{gpTJ~JomXx{AA18n*E7%
zZ?G)m--e(y9p*bXQ@U@oxsH?Z-mG_Ba<~3V)hxf`@JmP=!<RzHDybk1A$Ct~9F{Qx
z^j`7t(>yK~ip+AbhgmL0LyiPy5RJ>16X8zfmyNDvZ@P;?CuCPa9Z&+mg}bztl5JRU
zW4Yc|Vgg(o3(Nr|##I%2yP*tYePvnDPEM>U=jHm6pwUiZ5jF_iI~~LufVG+Z1SsyK
zjGnPMVYao0^lr5tRts`*7UFz1d!Ws4XUPssW;1nrp2oGMV4xmm7%mOjI^8rGhh?ID
zISwP08>DijwA&)qp-|oG5s(CXfPdD3YOkHNdv-wt+zQ3X!nm0>-t!E4hmD4}w964)
zeBS9rPBwJop2#UerrWU(JApNPbxy3nV7{?hp$7&S6p+Gj0UjrYa-bx^%7;WRNDRO$
z=!yhn$sK*6NxZJzi>r)~Luz%d4~}V@1qX&B)~(+4!O3cu;Q^LE{x=sYvZKeT|BFK<
z*W(5>fKBI0>4QRoF&m0lkis0R5x2v$R>fsV_%oEzq0DHGu0EpUI-3tz!P(}D4!{+|
zWWhJ#jSzS?R5$I)d)k=a2kPKG>W9yi+GL^Yt`cAq{#Wh5wpa#D5=dDqw)oqIdonjC
z{ts*N$80v|;?@Y8nL7!ZPfW~DLMm{@)5D&9^^9t@kUp(>J)$j%8M3M+SMtEp)`YXv
z<Oe)%#IPQCOPlI`c}sHA;T6<E1*vzN!MTtCo?`iRsI(rGp<|Y7;;Y(;3ht>@254nz
zvw`@Z4K!Vrx-882=H!wRZi(%ay`-{qMX2szIn`InO60JuDoY30;tZ@k70pR{EyZ4@
ztGoT&uI1hE>B)-x5VILWl|Ybrb?gfxt*N0?D226vHEVIQ%tx_b#mCMdwC;ET9W)TW
z;d}*ZgU|_c)W*Biv3{NWVebymwrn1!G28XxtGQ}3SSB`Wd+R4_!xW3%5kJZtrJ6ff
z6=`D((joWN-lIZbYnh0`3610qrr?q38mtJgu$SBiNrVQWY}65}^PS!5KE$ot;+LfJ
z5m&TjTNpi7J(heJX=}Am@<3bnzWJhQVuW;{e6zWHaqZl}I@A~KF$!pg)0If;QiRrI
zl!KoZ7Lg}je(_el$50|Oy++?Co1UFD1aNh7_1XiJk6n03{gvcrL!e<4pJg$ZYd^H~
zLfx8Ys~qm-oXAK)mz-)sKJPMInT|u(Ji@btyNkLkE#hPP!8(d6KXq(2+tdCl2}3<g
z5;`g*fV8ZAqc66B4?C%#v$$J|95{z-=_V9U)f5$vOHPTAST$5xL$OKaqZLm18@hg}
za8_|uR#ZW{gf^ARh;ICZH|FeoGTO=i$(mTR7+0X3;N?qtU<bb~1}!`@I+>Z$tlX$#
zfHrM?Va=zYItjom+-V!}CJd%s);%N>9YJRQw2njJ7cU^Lm1ASUmMzCYYE3Wi&1R(v
zGKEXAc(bHnC2wyR^=exkOJ_}OTzCFfbX}2<=U3%K>ae#UV!&AJN{T(&aRJQ1EL)fj
z-gpj0Ri&?_j?(Lwds7;1Y_m)e8bm^1r-N?3=HBM-#bdYzLl)kF?~D5J*`?>_%5z9L
z&=e`U6hn_`iZ=s&3MyXrdN7X8-_Dxz=ihe!{LD67sUE!#p+l<gS4C+0NQ2c%y)64Z
z3x|{R0~QW1>BYk67__DL#x`Fd-yEtjUppq*Cg@2o9smKeNj>ROE{o66b=_?GAbe|x
z^1*a<^Jgx-mM#p}f`z!3GDhiJzVzVM!Nd7&CUzTL+Kn#2mB$+;aqP6B3|n}xL%37g
zafFOrifgkDqRWv{p;N7=9u4IN@dI=sTU#N@_2E~;-J@t=dIDC>OcF~v%mgy?Yj1s`
zXUX>{;?V4D{q3?fVKHt|mMT|^a<W@K!fZOomUd=69vfG(Nf-uE(*q8EmnITBH^=()
zL6Y~{(_zzUi^LAcQP%k(w|ETQgmUb;RvhI@GTqU%NQ2_|8h(E@D@fKtv!EUnWhMiW
zu+wd-Fd>~B`Wde+&J=Prs}wo$TY<VAXsLFwG_XPloa3cvv<c_aN!6vl-Rezxb$-f%
zr3NN0BI){|xcM_Y3@n5AzquhwMTeA>=0Q5{rxuAYO*hdF1oQ;8KLP^im@4uWPo}q)
zK;BG*mRv8l;Fs(|G(v9Mey3<0p^u{3W7X8{g4@)X!>TFeF~Yh`G(HW#rehU*wj`yu
zDDQtN4C1G*qW00<Scu1Wnv<UdR$#)KgGP=u3~L!r3PwDh4w~WanNcimyr`R*)ls^b
zZti-klPb>$oki|CzyywJ8Hu%`tCIa8GsC26i$qEBU=A&-9KhhPyyq^i>7r1~to3I1
zh?HUJY6koZBecf=(Dz=sy6}dCu5O8D27isW36rj9Xqew+qt&HFGHabbcjf#==%a2^
z(&hp{6eUX~2>6>r!OLBds0`yE6~mSL6OaX*wn-@fby6g^Z7Q&=VMe<5%tTE-4MAPI
zAgVZk7R0>QHajTGXDy@ws{ZL9HN?RgYYSo)$t=E#0HYE+1FE8C_{!G$rG*xJfEpyH
z)Shb3RLsm=O)VtU*ObknnFxrI18KJzXhg_C=oJ<$pTv#HkCvV)bdE%zI^FeE=IX&;
z0w_v=TDvD`YCv+12St}vX%TrK0BvLCxD(t<S%f?C&m<~<)s(wvrcizeBIWycXqlvO
zhm>O-PNLt<xAF<=$Y?3$sUqIT^p%2FL;hJzw0=Oo2}^Z2eHo%uQ;6=J(kaU?b|VuH
z=}G1s=uD;`)}L<Ha+jds?9q1bm}NSz4aPd<Cb8L+9(UL&{VoMsA}G}nG_EpT-BO6q
zYlBbIQrnIq#>>?M+N4!^tovIe*o$0q1?4`?)>z8`(jsBr<XJ%d?6|f$tGHmqgOHu=
zvnpx~Z{EK%%{V*-A*8@FWB0JW(0Q(EDA&u7`^|DJvU}%fD|cc>rBot1;E<z>xk{cD
z>WPEq&eGdeH?>e_Ni}uRc7p)6aj3dQ^M>d0f*TJRB2L(`%7w|{q={4{PItN1yB}SI
zHDb}ZNVmB-&nZ#MQEj{+`G~d(PxAEn3z7nn<WVkkToS3Q@TOu~6ADq^AY#fT$Et+D
zs5kK|Gdj@;b74y?5~WIOccnls(VGy8QZMdQO-m{pA+u1SilnC&nCxfuhSRM`Q@S74
z6I!wZQg#n}8G(KU-x?zrl_Bfc)A*zhF4#ZJX^IO-4*qiv(IU%@Ej^)(mJNNR_)NU6
z7f%#BE;El3n>fUaFLZpqm+bLaykKZFNKs&dq=lm>1SmYvmTMCIf;MCf!nR8dHVE$8
zpkL_BK;kkl1Mn?ZwG@W>kw=L`O=Yc?P_zX<4lp=o+$BZ%%T3pe>Acru8Mv8`<$KfJ
zSx;ijU?DY2Q&*Q8^(PuRd>3?T#g^JT1ORS05cJ6Fo4e^v09Xa^EWGx>^U^$W`uB8N
zI&peeYn)#OT458sqEKCSxC~Ih^%M9KzDe)ta$Dkq5Aw_-4D#Mf-|1BDNms2kuHata
zCi>d)2}_Ij@*C}CAt%Az2-f$%*7G%W6aE2$pEulhW<wPihO_tX)HvusIqPId(h1=b
zPdOn<4q06wVl|CQ#9MF)8Al0V|Kdhn;bR$T(XsDvy{6nE@O9u&`Fm;CE@Q#Mcx#hC
zI3WK%%=UX}{11k;o`Zv4UdMyDfMqlbrn68YB)Ma>gu1pZ=^xBGC;sNBa&Y<h13JZ(
z>fz0D*w|%|J_y5tQ(IWV`5Wf;4>XD}iMcoSeJ|sPB4-uN<9i8ye}DI{pxnp8W!~ld
zjNEyOqTAe_$q>AlN2}5$K|-_)CE*P$7qgA+iCk|~2-`pWWr>t*iqpS2z}GHZs~}Z2
zMN);(l!#$?xT_?JlDNEvj)c@z7+lqyK6sX<?Ds2CTNz=iU!(;}FQKN=$->7UWfQZX
z4&el89$m=7Sf$lKFJML&9{XUOuyqbzBG%htfH;Ud1B^YcCzli!)FW8go5A^x_K&-t
z&*ChEZ>^4{aBf0Qq_`E)QB1M8?xGnoGcA6a&S$67?WkR-jeS&ll1<VkvC#c+_JglL
zQzA|4cq!<XZvb`mbuBd^$ey<t2TP!X$*h6hb8H`u{srS-RGN6euYoQw6VQ#96`f=V
zjv$ZpN9PM}%k#21eHJ9#ADw8<oW<dI!p%94oW+I{UVx9D1^*%tyzcDgV0{m_z}KIZ
zWo>Zek|f8t1!h(C+A--(kLah2;;zuudHS<Hqzt?R<-)4V^rH7g&lCzLvw}I};oGpb
zErR}3xdfKmi-7M0-ryXIfdK{leaix*^~_zIjLc)O&0G63%(}1mZ9&J|u#cj<CNMx-
zL91|-<|BP?f;q|f-<`7iXd5A8I{#O&n~|n{N|*b4NQ;<f*SJ7ygcQ837__g&+RE3W
zIj>}eopCvjYiHL`{FONV#U^pdUJjWxQXFKpAwhB-5mvGZi=8Ry<60Lck^=y8xg$v)
zYgOxKXf}YrxrOst+9IOxL3<Vld8PJJFG7EGs%Qbgcj}=~5pK@D$}Gy2XkH+h0ydcu
z=CvGDo?aHXr~WibY09av1YPhk2e+RYC@2&xhJG(*)e$W=s<#|SOaqbTplTb~@ST7g
zC3Y=4T!TIEny2nm+Phxv&C-@?IXI_n3xU5o&sO0d96(?p>4=J&IQj_2jJw?2XUK{u
zNq11`IJ2Ul^>{I0RN}=`PfGLh=mm;$Cnx&KVw$M+cVR6`XPD^r^~0f|7cSQMWmmyQ
z2S!VR&tR-UUm!IXt3Rt^>QqxLMemm_5?oYeSQJDpg|7-$SA-tc+1E8|_7~3r9JvsB
z<s#XnR!#-0<S%l(Sfd3UUF207IiM}D;s+cPJ+H-Z)MdqpPP3e0w}--0;lfl@RutrR
zS^eit+FBpjGfHHy5vhzJKUZ9-Qq^mRbVC#Ht3V#{Kj#*89fDK*o({U^V<7$B8rzuv
zd@-gdVp_~PhTYV16&Td<nq+Bi`fhbkIItvVCGVS}$k(*G^sB3X76F#JEu6ddlp-9+
z@TW$030@#Z0^)D?VLV&4h<oIr5slksnU_~H$U{1zp-DsS3!L$Im)cA{;v(m=I^8*A
z@q%xvJ+ag(c5)V0SD!-CiF-H_=?~2mSvHGTfDGY2q-t=TfC0elS3Ueavj|ZoLz~Rf
zF2k8(M*sp?lljezvFMVEXi~$KOTZRxbS>i4i%Bxk5nj9UM0U?>ao{y6Cgr3DXIqR0
zhm@Z+zM+2VR_gH<FK!qwUucgzE#WwCzN~T+&XS8#GzxlIz7=+2@S6H0f~asZH9@B%
z>ce(8aKkF&d<&z8F)9x=C?;y^Ax&t{(il*w`z(O7a9X1Xm%~JFG*6z6T6f``Nbp><
z$X;*sk|DSmVB#zVcrGGYs4Ph%_Oy=Zc8<`IAni(idBDYaGfXGN!SNV=zmCh$TeA`@
zWc-DPVwULSSA4fvu%6S05$86Xs4?I{4|_5%7Tk6qLFn6OZPH)fqL6nhu9Wd^P7-s-
zNuTD4Q<rf~hhDL2sM94Zz|v%ReBG+dEuKChE&MRWPA!Nv?@mcNXnBnzHac9?AISkA
zRre8+Kw_8$iQKAa_-iC8vO<Z~;h@5n5RRY^5s1sUUV8M06p`*W+h2@{#gFa@D_iV3
z?x=WL);Ht24TrZIjdIj!tE&UJ&CRAda_A}PX0p2?oYxzd#W`vDL!=37uXg9oA=Rq}
z-IW~_r(Ty4^ASh-#C=wx){3f2m5F+Iz8qCEeQa-XYNVVj$FM7Qu{y<~9Ry~9mUS*J
zlZiM4<w_1^KE{n69)}HZvmdxVL~kQl4q7c#oj7`3*A@6A;J(&Bf}KgkEEj=U<D<C9
zd4`^*At5sB2;dSBjLP$OQ1LkUZ_Yx;Q-&L2Tg-`q7PQxM$Uc##O%Pi;=q%9_$Feb6
z@J?F=4aPZ-DoGo^=)@yzHv<o7m3~@a8nDPN;UGdSc(9Hl)RZllRneC1tR^xm>;1h=
zjzr&Vo>_bRRL4`+gtLsA9i^z)0JmD<Z7wL#^{x4!T`L8!h8~A5pe#~uI6<zW%}c|r
zm-<427`0ZR*o3DvQ3G#qMu+*}z>JU^bnNzoVF?y@_V69S`sPalw3(r+l$EN+&b~{t
zf;PhDUALXxDcw~MWt{VXq8FXMx9Y-XMaV;;oj@74`ifx}styO@<-Xd$8X2A}d5cN6
zm3y=x(xutRxZ4Nb@Jx9@i{>0l?e3`vABLor)TRw}%fv|Zq(?VoeoURtg3XTLLe&>)
z$!hlrGB4OZC&F4RW<d;63GCY>A8@?xeY#9mXseK!EQ0sqLI>~Bz2^1H#*YlZ0o=LI
z2LQXUMg~o-idW&VUL88|nu9vUf}B?{Y#U6xaLEX*pnCFQ(zqDdJhK|Gs>lQn1R6HX
zd_$mZr)#^)5N4qECAN4JW2K*4Qse84W3Ub0OBFMWeL6Um*X+!&x4e2dDHumn^va+F
z&6U+p+WyVTi`=s%o+gxrp+!u(VncK|a&ZG=;F{F`g*mYsH*qn4q*DWjWSg<Tt4NE$
ze%_~H&c_z_0XcaIP<%YGv{-qOlB;(abtp;@ll9z2`#SJioUK%~_kXcjsfQ{0gp9(Y
zl(mm|eb7EDDcY)hHZ)GkASLQJO`W0I-?p?GmI}5`UUq)S**qj%g;2~B!dY1k0-u{*
z)Uhxaj#Fm^UHN?*WgWjqau(J99$gW^Q!8}u9D%jsRBodE+>|p!axbso4Q}l`sfj^=
ziS{RX=BSf!Z83kT5xkrtKRp9`Yjf^+@c;8FK#?SirOvsgBW@M|ii)u8GAc0(2}30n
z2suku1QZLF0WoN7&Vk|hVx~D1G!oY?B+{vy1N+p3n35><@ex-D4e+SS=Zn&m5dfej
zJi*0&Fu#QLDMchWRZYfXY8gRR=8`kpCwL(Q)B1w0DO`Ba(KIBSq9a+%>qfjP9q~nn
zabUG16$(*bE(wA794BbGY`9?vOCpYyNKhf&izLWvRMFS0p;j;~cv$h1D{nac?r(42
zROvY03P_*zp5*W_u42qRtP$bNQ_Ts6dL!~KHFl#b_$7gMp;Kn_wFf(8(8`PlGJ~+x
zNE)Wu!7hkj6l*=pH7OHvI2|IFJ0-(!Upl)LR6pg&tx&>JC8rb@uASP-zaL)kR0LWr
zOnxmyJL`MHQO0jHg{ygNsdSbJHCmeiq3E|jnQ^3AZqh>WQt5-R736>c%XG5e7Wdf<
ztA|S(TPp^y7{j_<%_tZLs7{824mRCF(}0d{Q42>H#L9>sg31&Et13#|K7c387n^5~
zoNO*Qgn6)ZD%G-)?uNBM4{^S-uvaIWhrkkY{*Uh5uK??1IJ;&&@Tt}V{8TtHqTda~
z3jiRXh$jZx5OO5w`1qb4BgR{4v^^~ikN|Ru1DLL#=k0dg0ga{Xj`wz>8&-}>JOF`3
zG0^&>7dj8uiblR>7ae|ReQUBd$Wf^Qq!)Io7mU>6(;WLgFJND|2$0zm4qiPXt|$)P
zYxj$PmkuWBUbTz1wIeG!K8R#Fo5132a37{gf*FL5I((JS^m-NQku~-7HAj|}$432w
zP1L^kHYw45#CZ&Y#F{`3D`#xp4CsQ8*Wi+IBCeo<c){U5A{wgZuI$p{XfOCAG6?%b
zF<HC4ar4=9@RMY-6?U3qp(l$6{jN5cNGcF}LoOia7i<d0)>6sTBU3BK<hOy#>-pi{
zjaE6+{mo8SoJ?Zq0KA-v1aNiHBiPd?2T>x_@i8#ren%BUs1FGmOm2hD$)IS>L$f}Y
zt;Yqo4@DGfc1FiZKP=O{#vajTC5kcnRv00%a!CE1envDINxa?E84no2ZqP5VeD8+9
z_smiDsyX7cFp9)jmn&41_I;xl(Eb_R0*@9<MuP$WaUO)(+XKJqRjU@(Wl?v0^`&xm
zP@k$)+>&r4G#pf_6YXj|@vEE?&~Azm&>DtG{kjjn#+9EiI0Uw5<^@WK|K&yGCtane
z&UKhT@6w`IC&<o8<~F9$q0M<7OF6-{6CG)Y)YC_;8z_U0a?6B{)Qe+L&Pu66zNKp=
zU_>HbN+#YVE22uYhf5FiIaPa-jxCb`W9F3&U@ebU)K9TN4i5dns!1KzP9O134)4i&
zMs=;Vx;R(^ca{4u^AU%gKzAG5<%j3Q;Dt8jg~6LnL*BJ4hgOz##5zma!9rLCTQf8T
zM}oLTfFaL-_FF+t#rL~zJmrWpNerw_z7UsY^~j1N*k&7t1oe`1dmz^m?qWc%atn#n
z?b6Inn)kwJla#;LM%(<Jj#hg)&J_YH6{YynR4F+YZHM8~?;EMStoV2=fyzR4-VV7g
z;#a9pXy9^xiW=`k!?}9Ggq>Oo2#Ko~NE@K%oTi+VYVKFoPK7iAX~D)~jjEuQhBJYf
zA-|M(VemqcOJ;96b8rVRtV0Il$pQV9U3e%YSeqm|^J$Vt+w%?Pn3GH%oW%FEwK{g2
zq7Uo|aV`+JI@m*&@0GSJ*_6fg@Dv*C)s4keDW=MEld>>Gv7n^HldOoKwGGZ=bQ|hm
z0okSDbO*mA1*4NolTXZvvm)+N@dRSUt;|Kq0G3~N#yO;d$J$=ZeP!-JumJPPx{+vk
z$ur<kUA^mUw_pu|%$z1KMJqDMk+9-pB$CH0dIp!FX(*5gnBHt8j~-t=as~8^DN4*%
zjdd!HHL5B-EJJ{eh->asD0tgs3Zu~a1Z4dG6Gw_1(8fxq3dPykj3^{Y>$C4|1-XZd
zpc1mPP(rd2+LH;d*g~Pmj1IK^VqU$HuXFy3f*z(;xx7&Bmn^Q?IN*&Y`<lWKab$%q
zx<I{`y;B2vls%?-crAt6!?YC-I~+`Kkc2r9`Q=TvwO)Vt8dlt_l9nEp{wIZ1-biBu
z8uZv46&aBS^#u`)eR4fQ_QetLjTU892|~b(5;{(h7oB|Q4TNJ9=i6s!@+^+VmP})5
z5rc!`>Iq=FlUK73@82RH6IDJ)$yQYLLdqG0z-hw;*A_tM%!Aa`)e1jQ`6c}XGr@}4
z*0plxwI>Jxnv<`2IKYsQ*GBE{oJKB_9(q*de<?k%BE2U)B3`B5Hs>N2n&wsY%Sfau
zk9P`p=*#}J#{_3=?1j+e368vlp4oD}CL>JFA+EwE-I*$!Gx{G8o4JDmfD6a5v}5XC
zYXhAo9Yv`gs5p14T>CrvksGv15ftlz@yi~bZBO^cx72O*>)Geze~dJME3p?X#X#DP
zJ;0*La*kli=qs;rrdB({S%;VfvbeErFP3{CFX7YB46GQBWxNNf$V+w##%R@p;12cC
zc2oQw;+7f<GErX&jzw2sZIz?*2=Rq{msW-L^m-!?I>#=JBk@|oyhN@=3{|uUn%{v_
zj~+!O3+qDBkyqEsE2<-<l!92I7vSxv1b^|W1-1?a(|SSRtfDN>@Q1oy-Xj~}LLNRA
ztIfHX=U8zA3VM<4;W{L|DE|7WSVSY*wjykhTH<~fUBVu-?k&z8tA+8a>YUCJRTZmP
zhmqEqyK!M)Z-Hv%X6;>d$kOMABC-I4hoc@a7ou;B4v7*hUFic4_$XijX0%-b73~#h
zv%i4$Ny|PaJaz?P$>n&f$lOhBp@EKKFSytX!EK65#nO(n-p5cym)J1F8Q1uh32EhF
zrmVChOK?nS+lOUI{ICvC=2f)r7Tk1mLleh8P?^+M^c#(Xd|$lsp+k**9IBng?QtmU
z72`?5UC_=JN6W^iULo>XskeK+i6wB1BoreK^N;xPCSg@4779`?Ez8kpgLmTdqS0sX
z>cWsj(o22h$g-B$sE{dXS0q*#zXFJV;f;0*HK-#DOAZwf5e7a+H+KuTI;Qf(Rxou^
zWc62@q5<-(It@g$ftN<80xDk;$QV~yaI~Yz7I(5rQ5Z2wBl}GGOzcT%*!rMpJDs^7
zXp+!h7v8N^k#o=<ExI(&Y!3(0iGGLAUS)#svN;Pa)Q$jDs`HOR4Z=glfU8-N2snBJ
zOA2Z)>%;=@8vocxCp|ZcQL*04jTCa4V$D4jwjNtc_4a?4>UCc&%Yi)T0yq<AB7zVu
zwZB+yrdR;Tpdh>#W!LaB;^0ztmg##iPS#Wc5_N_W08w&rqn6YswvDb2HgqeB4v5v>
zEXEHE)zYb*gu$i$m0G2geA$XEn1=ThDtWJb?OvKtV?prp(Ye7^He6j+renB)WmdN<
zg2%pPT#_MXeG;Jwfp1ysp;quxI`Y&U|2;(-PRU7dhH@E25Ds?>td<FK3|40en0rx!
ztk)-(6f&G@Z7aFsYs;AAH21OzGn8=pNhk9GFy=JaFqnH*{D?2`DY}iIIxtSuV-{)^
z2@zFkL~B!&1E00*J4l`0Oq^qf7x%n)DA0nvfx|_?8>^D|ut85-Vf$V_D)o(>3C3g)
z;#14v2|yj_fUDFV{a|v0IdZ_&38yWG&j;&iAX)N?S#B{v2SB$SK)$P5QS1jgFZC3l
zT!CEih_c1y;@T`#`EZ{yuqwmNH!e0=MLJ{T*h10}sRscbQQ-n1)~sl4jdz3{eKjWA
zd84nBUS9KDIktItlvUQIuok)D4kZt)XNX9)2pdA_0Qem(X<+aEi16Ko>dNc+QK**g
zW(u`S@K&ho@ECFnb(PfjVDYm9rc*J<*2N|E75gVC7x0?ul(K^5{smzsE!*<RPPHn0
z)MEeK6pIHlv>Ff*3DkRSK$fDk0U-uo6hXI3Z=^8}QyvrIv&tIP!lsrs$%CR|CQcV_
zba;Bv_%aaKK>1>%k;N28(9IsD6gsN&+XDhk+EuvQY^V~j{X@7F+`L<Vto;MFTv3c$
zh4R8sF&ahJVa9^Uzc^WcHCQQo(lM~*`4<LMP?DFW%*m^0jLF8tn*`eT*|*q~yaOC|
zS+$PNa2d%<f@mJcd@{J%*9`=vmxgSi(ylkSAjwQi?gUvz?kKE`d?o<OH_EA4)K>s~
z`ON9pozVYp(EqRVZ6ue^fRa^9iIhm6LsUpQBEnDuw-{|00dciJw;$OYH2n%O8w1FS
z7l`%+=zn7XZz-;?aKv%SQcBC*(FNc*$r0z5WZ6>u?0)l*dflwO-FrF22~J8>ulRR7
zR0bUKj|QyfbpT5Hf~DvTM_Z(>47)+|gNJT^pSJ>3(2<xZ1#J<4J`d-o(<Q)Zo})F`
zma|=U{Vl-N)hXD$<GnH~I#+TBSxDb+cV}OK{eFkLl+Q1{<JAndGp-ozADC`u&tjcW
zd*z)U3W9w<u<D*nD6rL?#dnIL=;rZy@y=&>Hs2}JaVJe+2va1Cwc5Nb#0&M}q=7{Y
zRf0djH<aH=I$40O1tjGvg}RXqemdL1X6C{m-e5^@EVWA5p>F@Z^9DQYY?$siv+Xyt
zWwQ^|OM3)x)G_Zaa~Kz|l`XJNcykS#*f>;Fz*&&pf_rC@WBUj}n=6DNG>z$QAa8}h
z;QE=GJjnp)eWN={H+E-_sjdioxYF5A;$7Qj3xCX*3QZMe+K|B?La}Ha%!=hN{+^(p
z?mQPbF?T2wV!KeWa#UoDLR%w>QP9VhVWyLHp>5g8E%_c!;CpdIxsbYC2TeWZINY2M
z25T5`XKZTe%|$WUNj}TSEQ{)*5oyKJ3~&=|`X`{GdiQson!WowSz)<5c#^=cup{0P
zWlhs8TI<n*wy!rUr&nM1dai==G`f&IEYY2>KC+M;3eFQaunjiVAL3Hc1x{`V5x;)*
zb=e<I2b2OIR|<GLDdN98Q{_f7ZysSbkR=J*@L&_g+!+Q+5Q^59A-%`VL{(TQD(L&w
z4u;|E;28)qJLHKoX9`|1D{Md%&_P~8tIebmq2HZorIA*uUb3gMd?{*%8T@5C65BY`
zEEi*;MK?hs>v(YNz`BLO$HcVU0H6as9AWC@mYpO$Q+8aQA(FbwwTrhnlG$$a;(og_
z0|yo+LTo@`G7ynjxQ8zjBc{0kOAyZAn3luz^}^|QG&fE^tgd<q>`7P5`Xp9+tAbQF
zon@2iQ@S6`zL=Jn>~t+JwS%i?lMVTp>m1KwnW`0_mEdV!`D*0lM+Q)-JAg9r?`_qv
zJu*rQF=Aboe%>~OSf}<jD>yD0GySsVBlDHdrDtxv_np0t9i1rgNIwi`cdszy=4=>c
z7(<KfMSKlizlEL;FH=W;FKlW-oFUvqRFt^6NYklh%yVn<;R^&5TK00NL2eO}^84fC
zm1x`<gzKHe!GzZwbfvLuh<4DH0Kvt&4FM&E+}~E~!II*G!@-RHEf$U$EclO+OZl&(
zB}iRiu8Wf;28Kex)4E_Khj9}8?lT%{*&Sk}i^O|+^$mWRAXa4ys8I|{nvBw!#EkBZ
z6j%ziBMGcPH9E6^YS(3WuG{FM%vrnb#BdpeQ8oh`gcE($--yc&DLK|tc3a`(`Z9)P
z5q8SyzBuNC&9=^7W*5;Fm`)ZkYA1e{yAiS)n&3cjVuKikT=~m8W>V$2E(IqLgtg&z
z7E?$X0Re))se~dE<)y@Boe%VgZNT!NP;FiCl64PH_hn`DYV&*^DNKKh00nV#fxDR}
z1}eTIsMv}&S_YqK-oW4SHx|*v+mVy@lO4II3$9qF8WO3HfXZ_%ccnX_3r3m4^a!4|
zbU#^|40ppicmxu{CF!IIT`4o1>b;_KMiS(z<LV&LMSZD<^w{IfEpyVx!gNF1B0XK|
zeTk*QcF|6V4Gqxn&jSV-!3#x}O#z)Hu<WmeP$$|6D`uZ|kpYcX^05Q|DL{D#Wh+4+
z%=m^<!EUIFJ_D^vm_-lSyUeIy5>SvZ`~S1|ZoPG->3!$A)~DEA6Dd?8Qm5`XmeVe<
zB&tensYFXEbyWpMXG`3YSVeL(+@xAn7z{AU)qI7yO2rqAZlC~Tdgi8)EAxxZ@Be?E
z_pmlMb!gjg8wuPlaj*5R_xPMoFJxARMs|uV(pr@_AC6Q~>W!|Yl13}RLx-clX<2O9
zI*=v8w299beF4uP4@K<{#|)-qWbGC^Q$md}?6$07L=jbv#boO|t9@-k6+^Q>6y+!y
zaSwEj=D0t~Ecl=vTznv5R{hm}oGw&nUc`#on^;B--~{MVQhE{IUc$I-@>OZhxU%Ho
z*>S|3tRWY+(?ddjiSAU{@xx`KxGea)2UH&r(2!n^v)rqwJp&=Xo__c7h3yFVwO~^}
z!muHND$?s1TYt)2G~LkRd7@366Omd@e~)zCh`CL^Sx}pe1oCK34I;Rwtz}`3OZ$0J
zK~Ghb#1wag(}BMxj~*8?ciymuV~<hzeW)^WesL`&!EJUy$2|i`CMo`v(1LNdrjI)F
zCJf3Na$xh%v{*3M83q6MpL%SYH`ITUq@XFKtJuF5n?k!v?4Iq-pGj=uaK0_v0J5GV
zFy6G<vdjdEMaFNcuOO3)qze?HF;0!?`&)MNuT%%GRNe_ii|Du_jYChw)Kb0zGQ4o|
z-OLC!ma*R2ol+p42)R7(EbFwqAcLk11tKNtG)-I8#4R)?^Lp1(LliYCovJy2L?{Q!
zjQo9#&B9a5gu~h=zV#wP!BlH*Z?+B~DnRS`xC^g`5kU^mYOS(e(yqnWQJEh@gG=&#
zk@Gx?E%BonNtp|8eC)$}Oj%N$_-aZY<KdDqkLN7RR)vfHtGe?aFk)wh`@m8AFaMa4
zGgNJ~v+rDLe)PwTR}U3-xH)-+IG+-Y6{SDFhMtsl3c1inNy@%alrzS@3_NG??^h%U
zIdGM;Rgu)d3K`=+Y$4rjMvJMEEXZikF4$N|PA`AmLfikDRQ{VkQ_=2?%cHKeMAe`)
zwR9+LFEkl)%m&H`R|5K368AkDFN+a6&Au5cWhpl!`1&3ddGls>pO~F48*%(8oAzg1
zaL?KVq8_-}E-YtqMGB;t9<nHeWNT1(Jq8*TsJ48H_v^};F>IcJys(sRxFs>NkxI=4
ziT*?O%3RpPBoD1uxp`k#ZX9yscZZUTS1Ur-eugQ={a)L+&Yx|51uX4~bX*DXEa;<D
zfx#Q+IzV+Rq2iDcoZRS$0Isf@CNzqn!)b<y!A*hQeZNraV!4vnvMb7;oD^qD&Sc;B
zEW@T`DSZZlgjGPE-Ok=2eFdbs%n@e&Elz=3i7EG~eIDH$oI`XzMv*g#x}mIit^yXs
zjlwE*p>a@tQCIGLM0j*)^qDY%F+)mm9iWL5Yr=FxMFC6+9rQU`vM}iNCdOn}DyLim
zx>y_2$v(#_kcDk52;n<I+$9`9B2TK&R{anhpCN<jh9rAzr>0LZw3V}j7HKQDus%#D
z+f_v@8VM80OsPD$T)LSfcftp5caEWgkKC|HBtF<zC;~gxJj(OAt_==VLUKWj0id~H
zP~;4cS1v+fiK+F6xy)BR*eoC4cz+Co76hBWs-3tQy{8|B*Wd!0ob~~}EqTFLOn?wF
z8ia6NWF+<be5O*Mgr+MD!Cmoz<P4J+j3A|PEmsw>54n>l5!U%#p-Y3FiS;Oz!Su4K
z4mMM03{WM56*!&#Jc_QwSEkcxcmwD=u+&Dzny<*W?S0~dy{P4HMw~~z0KaYJ1<oy*
z#8RWOgr*jvINft5%hxDO*3=@)OChX+#Wu>kPsNs76Bm>zn~Ts0p`$92O@N8#-HKuw
zWs+|#G-Ju{{nynEl8Rgwb^Z@OpZvQGnaoQ$Vu$hlDJ?Nhtc1r{ciy2Ch)i^@db8K1
zNhAsgGP)I88sy}m9M7=Q11M1bS2Ijz#UNuk6$){NbOpXd?!mL^^KbX0T1Et9#J&(D
zD+|I~t^-MP(5=b!pT%tu0C|7>kmxqcWwu`-H<q7*Z4l{{IP3wV#Bw}5=CYQOs^z*>
zhHK?HEv}kYGh2Yh<=x}A*@<k9+8AVYitIk82#k^%<=qGa2#hPp9TZ_{PH;`h`pb2s
zD=t}3!zTNV&nQM9>1g|x4??u#3sWnTSs7-^_pU5r_H~{ku@<nw$ZQoyOf%GC%;5gM
za~`%Po$t`plY^>8RB`d%bGW__^2SX}VW6m`rufQ=5?z$smSQEQKe2Gpnb5RK_lBU}
ziCFmIxd9i<#~a%PC13{a9lEKZrg@4pBELYif6Rs=PU2sq-M!!jRGo43s3NKYop5zP
z5-C(-nps^a!me;5=N!Zzu_5)s08?b!sFjKe_x1pee(_29w4Q&=C=Ow%CiIWxj}1ur
zFi2GNjY6m3$}TRiEe0UvI_PB%?QM|@NFzf}@nHHmjseJ~Nr`GGF(khB+vTiU%eR7-
zBwWYu{4a1?9RE>4LEQ8qi36lp4G*>*_2N;KpSt5R<UT0TZJTqmm{g+xHJzdebm2&_
zWP+SP(l33kaZJ>9a#-n%a)coUBW4PGzLvpJIU07gagavalVkZiLl6T5NE2;j2^8*g
zjh+#i`85*jj>@>!%RFy|j30&cUGv5CrZls;r;3#r?qn3u$f-!8b|X!w7G(`n4iOFv
z0Ivn_QVO6q>ooNWbt7~?hEuR;^P0k6+5itx6{n(KiDI?bfUEqpULsl^boh)OWv&lF
zTDENQX;x&%H3NcLu$F?ws$3Xdikc3)4DG73$(F2WF%<1DBGWDh*QcYhW~*b`muA4(
z0vcUSkhth}k@1AkmS@-|zJp{?U)MH&+5W=pqM^t#a}6IzY(&N}cJQ+ZYc28rGS^;k
zB^c>tGl~|#>#1mdtjUU!5Pv_Jz63;LqUF0>6*&(P4X3Y<X6p>=T`9%bMr)AmQ@aH1
zHWYg+fn*ZLo_~u~Xi+Nf=GHO|+|1HK#yb&FKe<tQFUN?&%xjVUOc-agFBa?xi9RCP
zNnj#^kq^*=BZ-<5)?psu*M@h0&+gy21HkWn_tJce%c}iFpdiyTkVlkxErO+)<iO&P
zoP~lC(Lmhw{_YL|6&A6SjUgdhVNx@xW`Ur@6G9hur!qjhBeXsYEdHs~87V|<PS~t~
zL~bq5f14eawTN~ALwn-Y${WzRL`kRV;#>Ie!@Mz9vs6Xd)R)<>>acIMzM3*!L&LRo
zh>hlOge=$~uj<NA_zx*B`{bgP|Cm^4Z;O~!UCg3gdhtL-U~BDqZj%J~Zfsn0q>X%M
z0LaMvk!b^?Y8sO@>%+4*v*#xU8Fl=GY3|HW#;glzTDGs7aOQ!BP#pBf4It9`H1$+J
z!obD7hY%VNT75`T`=b{Wbp}~d5%5YD#6R0|64|<JB`q?ax=?21FzG3~<_O^CAE?U!
zc4BP`WPAWMkOM*=NP@u=vujgo6Qm`C5+V3v4=h)u-y$`OSIB=!4~}CPX&EH2Dae6d
zF}Xo;QD}CU7w$=+>F`8uxcENn_k=txyPiPESrP5{l#u0*(&ee|?X}b&5=<cxNLZu-
z+}<>esbztbA47Jtc~ZUuIhodNB`M%3f#XgnPKfY)bwZVW_|UG@9PYAVsTXmiK-$n2
zb$1Qe&WkMCE4=`H)s`;fygr)m`9G8YE&fTS79i?J`J_n<vA4^fEbdZBB!p_r5B2{{
zuQ<h(kjUPZszGRi$F~&n*b+jDtp>Y{@;^rQW6kq$@^p9hYySaQP-WeQmIFUvxtJim
z2M~IX#UrJhAq;p_<5k$JQ-8g9LvN$!K3Coyc99xdjda^F7Z$E}+BAs0IC1gM$uX(9
z$>PnZapqYC65WMSN1&}B6%NP=hX4L*h3*_p0vmiHSbq0Ry@+lMPjs{O9*|J~0!sBa
z1zq`PH>zFmm!qT7#O#0t0_{~XLpP7;;vw7-vN3rJEqd^m;s_|vuh6QH1gkgp*RmEf
zF`yA*t_oq$v#?t82&)GOpe>iTfGdV!cu-h#L5Wp)vvfz_;^D2~i_h;ry!}^OcP9F0
z{A;ochXw&u6--fG#^8l2fft1>5*!0g84kHZJ1Y$|%Aznc4Vj)#afXcjx?E1GplzvZ
zkk&vFTTc#2En%gm3o<y^k=TaTm#e<g4!wQQjrUlldI+&V)y4W1a!T*Nz%xrIGmgIB
zHC1Lx74pYnci=Fx=(wN0Pi^uqTv=T^0;z`Qa@+?ybN>e<{Z~7aO+(0;2a9;}8G_pU
z=sSKW-14COJBiDb<}w{|LG>30>RR|=6VUQ+g{}BJWQXA;S3YG*VU%@6(zbvOXt-e8
z#l_l1944|ND8^F`cZ#us5D|dXl@gU?$i=!a@GlNZ)By~GUy%`e+iF7ly=^G+Z#?E0
zykG8qzb~E>cisV7dMa$Dhmu>0P&GUF^nOX$8NKR0IMnsAjiwG?!~>NGJzht^%dyAC
zm~6$2+&bt|249rQe_3w~zI8+fComw(n^7$qinXZlg}wD|V%}z9x1cE-bg0m;8ULo}
zRmC;m{Ty759p60KIoTx$D~e<!TPa@|?6X!sgyF7iqnr58R3=hGxNBf-I}Bu#&$tGr
ziOwxGT5`R3HqhvA#45k=#c}tQP&0f1kA8%W_Q0ACMcYgr3#GVuC$H2}vng{5)h2>q
z{cUo0rKE>c2hD$mVk&aRUh`R9eFK|#K0i|GI~10si9EwdFGu_ZcSKn&h2Ml%0kFaK
z6!v0PuU=(Pd(Og+rv6O^Wc-Uy4g;W_N!{xj$Fij?=e$2${q#J6?G)t`0$I4=b{3m$
zM-jyqSn{v{l4?k*w*4)ecTKvBs9;HG6W&lqOlUE+@D1RBw&~m62foAn8SGyyRkK>I
z=Nlac`;5AM8eyjuY+ZYKdHKoy*(an0<iiJL;I;j|Gmoelb?k?R8ecKOG8V(r=^nvh
zkZMyNjzov(zoUq!$#1s$00JLWo0C^pzzAkKrQITbi9bbu*5`bLWIUei6Z0oqE8l#s
zN}^mji1PA|mXG_AGf$^%`|_n3bg<$nwRJalrYM20HNxr!5Ax!5j92Hjd6cVJ-9uch
zqo|(YDb^v?y?r`6dZuEtDZKJiqPrePZg1SpFj$V%e{vHX(zGi_YVkL6a@sVe?|%e~
z;VtKW4Isk7Y2N%^L3uV41&J@b`wt`f?Fd&7;gGPXcqee|{*2^b3B<wCr?02v1+dd+
z+Q^5v@}aK%Q2xs0{%vr<Uw(G)$=2kPFYe#pdNTAsmZd6m7*MGbk@T~QNdZ|KZ|%Wy
znSndpoWVzW$WLR%8HlY)ZxKsI;@A5P8aT0pYUd5eLVz1iF!d3B`g+gdm$N<C`K<g~
zgt&`~r4qZF)GrXNJbq`(U+#VnDIb2R<U4zwWrx(Jm;#!ERv?O9j(x+t!#!iUfOuh3
zFBnX81#fI1L_P<t_oqiH{bR@ZSvwU(Cy0L1+?b1h2;}V-Z*HX;pljNZ#5jFAPT|f#
z3sB<u9v2yCDZO5q@w(P@<*qKpr-DJQ-9R|kI~XztAdfVi=nk(mjZl2*%H$@z?;VZ2
zaq5f^E4YWZcf6#&$RwNgoB)r=>jFkf;qWjNBERXju~Eosx;TiG&>mq%pTlD*%c~XH
z^J&M3-eFI&sd*RtO>NhDX0Z&Fu^9HG*5R4PZ944T(eC2gFsYKWAQCP@uu-BfGfEn1
zAd-6k1lR9@)yAlm$+lac(rY|ZMBMVu*eZgk7T5ap`Y>KEbs9cqY*L&~2_5&GFjp8|
z?8QEo*&@DXW6&0l00C4*gcS&`&*m7LA}T5xqL_||iIhW$yIsBda0*M4cAn}erh!M)
zu94VPR3Q2R#NTp#&UN2VBWN^OmIR-EnYkfN;4*i{+(Y#fL19>bt!U|RrKgjoSFRZ0
z43%f3h8UF#%!V0A1+p`r#~~Y8LW@u8?E`GW(X{1@aZqV&R)HPlnvf03kruE%XRiO;
z(}FaJJjzxb1g%Jq-ur&b6mFFI5?Jj>nUYRW?30$+*(!n-o;#rn%y6Xx(KLt!|3oj|
z_q5T5%_I|>qsP~zA<>?m)T2f{If6oQg>y*BFY&IZji{Ddm;efP`2t)c&|jbf=tbYW
zPJl^5SQ3~WJ70+-+i<O5Y<L0)%CFWT4<?Q#vCCXpWWDC{eXC2iq!NgoG@)4}Us(ZZ
zUv9Z)>LeJfCJjjmV@yitqxjMsO?X{!8MZh7b*@R9Fa|C$kEjL+EIWi@2@~{5fzKe}
zhbJZJ0ZUN{jOp^)5_LXcNR5HZv0O|PhxNw|8n*dvyN;lVH5`pO?e1{Ti~lPb>T>>B
zU5AFYg)iR8E9HwsKod@D^eR8bwoM&EU4rd`x9zFcmBte&nNl37*Ba))d>oJxQlq_N
zd{IIl#Su|&W3FjG2jhrt_>PBAYl4qt4wM}M!skCVqOEizhm(SB?6`GiiQDYHv<ER}
zSlm_`tX$<Cf7%Fbxgfaw>Zhvk<OuzE9kSdaev~aKyMwB*J@RhCL=<<REbs0MNdu8g
z*!R=Q>Dt)Yw;vb%4ecL<lKQI?e6ubsHW#>@FG4>mE-?Q!H=9&ohdn}9<TpTOaS=AU
z!5v^_wt+j*weW>RszTm(?3dK$8Z1P}v_1{bKqw_s{>ii%A4llA!*V@g*6ynagwKwT
zXA0@3WO5&0pnNgsZ!sJXkn&-HtIo+=J)l+glDAnzQl&)gtrsI^3g*V_mwXIR0vUQR
zBg;pV0ts!9I~6E^#4<-&*^fQe^yLeI1xpgZ`5QK+bNtP>hF{ud1iX~{E%GjPbyUsD
z`XLI5NWrFod0gs}Hwq75@}`6#6u;7*?t2dm1=6{LNiRl7NoiEy*L=GWJn4x%Orwf~
zn34_4j-*U0l$4a0M!64d?}(U@h=W9=3Tjiru=@-GU$kd<s|VGEZA!X<8ZO0&vi*><
zjp3_5YCFD~ErzdvDjmP#H+;H)nIi;sxg(){z*Z60jv1c;Lx2wl0idW;O3$WlmtvZ*
z69GDi)_3lH-5rSX66MH(79Y2Z->a2J6M4_CtHkjE-&nF`qT^5C7c2(m%A$bpQj#(>
zOrd=iL071taD#nFi9}mqWD4OpBFT)95RWb?QPmrYuuP2MqFW;j-93&`H;Jg^-;%~4
zD(kTAm?|OKqWP4Ih5^*r&n&MKF0a42GEvQey<g>(O@HJ36la<1;9aUr!~aKNI^xLw
zp}zQzstEdbABOizf9y=Z(?8^I#&Z%Nk7s%kRVegVqQCxhY2#lptZl7lpZrQTUaJ2j
zgiu={yd3PjOED*_3!8ycYpogP<G{@RYn|B+A`vGMFDb?lsuD_kDZa?pQsl&j<wuIn
z_K~O7kPj}WO003pv;bGjiwUFiZ^THfOl6H>-+xyK1=K_16LQpludP*;tK|aoB6C)f
zYJ_@BoCpYJ0J*9D0PT^Z2w7x275qgJ5Ur=8fK;w%0QpWJ4-9|X=N0SD|9rnV&Y8hU
z_!f-LnDq}arbv@Rci%Ze$i^R{`TFwt!le`y({rTgA{rLAqS%fM1RNKG)T(g-6=(<!
zo2UQy%57PsXHj=5j)orY5#8v95Tgi!O7KdH25C6b{Ds0{LR~5k#|qx}%POIAL+pGH
z&r!I2a&#ep)tK<aDu2g)7uJFegbNR~Vwfr&KtPDjBw`H~ANtQy{4DAP%Z}8CIVYd-
z0->urKj>@V`USLX_*%sTI<f@0bB!=4oZuR|wz~tTeljLrrB$KxoJ(kY*EX(Q--u3o
z&05;Xa(AQm=XJFEa{cS+%i-(!eBb|puEoDZD8(P_$|vBGT4;wVWXI-R0N8bai8Xv4
zo*6i(3b2D0<%1!@jxKK8pbpdi5N5GKDiNM#@%$H<UKuDDy#r=V(d&hCC+X75v%NJC
zOmQ?PzfOX87U3DDN94<eN?8wbkR~CYj^Z_6!fk8$_b{go&rX1AbWcv+$zwy>!{R&{
z!~m4#8V2cUoQI7qIcMskoOvh$*Ud%|X(xvWd_!7B%D<*+75j6r(aX^^>YGY$mOokD
z+zgbDi%P?GKbMyzkZ|zE0H<%5pb8})M*SF{fNR|=p2HA@K(VrcU+UembhH>^D6s~5
z&mZZ@Z9m1f{8~`JOq{G?#V=|Ar|WGf>#l#$zwp~PnX@VbQ9QAPJ$fV@iR;7MLUAjj
z_llVtJy^_UR8{FZh33&k_n?89y9_^UX@I_u)d~0nKMg<f$qpj%+F6UraqrkIFsH;=
z*c-4u_6Dpkc>}IoD4j&Hg0sDx^#~9t9vLny8ouX()Eh%Yxh9OuB|E&l`W%l2|LpG#
ziY|W#8n%gh$bXLD5cYBu!xH`#s8!HSbC}{6(Y_US)Vn%F+_che-|L<mc>w&SrMh|P
zSH1v0IO}Qr(4d#Mj^ldbK?Bha&kMKtKsQf`vSIz7Y~KE>$>yU+4}bZtUDRsdwv%V(
zpbZ2`_V_1>gri9KX*LMbhoD*?q$+bBB`x1o1H}NEDKLrviBc?{N$RN(Uo;w4BR{I8
z$1$ONTcg?0@a@YX$lnmg%>i^Cm0C=(dm!d__4B;}wx?`6M;HTbsmff|LzZ}vf3Gh5
zpZ4?b{~sR2e}1pOa5UyWdZ<ih{WogMqa@6}yDB#b{>%8mtPeVuvvz@!9{08jXX5Sm
z-_ttSH`03kwHOe~6(fl~3RBxdo5cnuY0fwK=-+-c`F8f*P&eN3mqW|D8@#viUpCLb
z;IJ{_ApJwF6U0t#AaQmNh^Sokz~Ek5FNRUzAi-|!3fp2NC?!D*Z(=+{KEab=U)avD
z_-_9hn$2@o7Hr-mP@vs{Rlqh~$t53wu-v;SQ!a&RhH=XUk^~tI2}=@gq7jk>VSnEl
z!WV;5E=H5ry#~5Y0gsyEMu!vJT{4$R$gH9TKNQZw%Y;A#q8gzjQ^tr-mbR@4cZwc;
z=OWy6(H^IZZ1jwb^;h$q@gs$D1F_#$(1~IXMV^x_d@vf1q&X|hSRn>HXM_pxPlN?H
zrrThF0b;OpI^CmM4_Q*=8NgzZH!fa`7ZS>;xySmEsW*6544C{W<6U2j&u;qQ!3gO{
z61E~IJO2B>8~*<9ZV%g0Gk^Ww&id1s&aKIXM=mwA{$TNPcW3>Rlb4J2CvzTeKU{xA
zOqztf^*b=~TU3j@ac%wD&2{Q5Ui<S~H*fIwwQCpd69}?i!a@m$nDFG_<q6iM^(R!w
z>VDsv93KDblSdaG+<UOq#=pLC?ZR!8e2#Hlk(#$i4SREZ6|=(b!Cy$7K{z`8`4>;_
zuK)YiPEn``uIpO|M8mU>q#Sdz4E2sk=iFPr3*s+sO%4wIbMf;Ve?dB)-u!&+VDguf
z>zDuH!k6ox#@!m4@%CKVOvLBk*!by%0psv}Zb>8Y1I-y7nS*omGb8{qK-o7Gm+z;i
zzd8N?W{B1MlUK*bhqta?eaVTOJllZOl0tB@nBLsE+GY7&#Q~t(UKRt`wTl=<S_F1n
zT4UGK4KGw$x;Pl5)+YtBBzbOQ3KfRzGT`6NhpFA3YEQnu-b-zL%|%H#m?S+xXk_~$
zEogs2Agm}EAu+67E1_J&izzgi$@t%VMywf%8nZgyB}{Hkr2EMZ0b?R@9zu@R9MRFW
zM+g@v+%Mgy=D_PZM>d6(@bKr82z8#E{uXU~mnl7)?!JjM4wM$+$Ff`IctYX|G%Tk{
zl-P8Kp>HZudboHq^rne80MwTAKyljL!PF;9IGhu)Ln|%~uWABhk@5d5ftf+u`TL9l
zaAm^NPWt!nv5ek7vJBrph;kE(tDv7{MT<w&7(j-kfLH2$JX+c)Z2`_d7OU9C{mJR?
z$Wam?EGCy86V#|b?oRhle<aaBe?OSBU_oSt4haZ>3EqT#V?%pQ847dz(;pR*&AS8I
z$at)g1j1?i-Pb!2UH{8RDk5~kQJnv918AJTmWxa~E<UjfcmeB7i;g)9z=E^g$M?K{
z`g;PXHmHOHk$QgmJ0*Og)8Oj-erm{UPakbQV1Bx(*}c+kF{An=kuKcYjyesnlQp{k
z?DV($48!^bJ<Rjj2{p-B-tSq53^J!b;t}y)h?vY|!pgB7Y&bvh&cY1FOZ^wWstXq$
za-9jBTtq;2ilfsX@a(hMLT3`)pcP)aAwlP`M8w$A03Z<1ASD6qaDE^VlD`T-DNw})
zUYKnZOv^*}j4wD4m@_y!sW@zd+eRH}XNsvu;Y$F)E8+Ki@~=m<O~jOkdFs4GTbW`T
z6;$q=e9xGewMEg8CXP>k=kk69>TyvX3CL5pCR#$I>-FgmKp<1E<O@f_7I$f>Fx`k?
z^#gm41Z9Fk%WWq99-e2fXWwgc76cyvYE<LVAp8|u5#Lb~M`&>3flhx9uU|1Fwtp^$
z(D5|v<s3u_MGnrN;l_n8Xw$!E<?aodY4q?9V+c|SXlV!J>5m|osfUn@YC2RMXO7Qs
z2p^xE{<yvuC=6P~M@Y2xz`*KY2^TJG3%`jUBBlX(k%NT%i)PIy0D{g1WLwN$@`pD+
zj|PBp^vnTd<LsicEk%UpdrVqgK&@xrBs=q$OQ33V<mnFztnB(@#|))$3NTCR4GRgz
zA8$-<Q%Opoe#}dbjY^!RjYb&w<dm}&D(ufre=|K|(GQ;i1K8BGK6b|TWT5ZAAI!Xy
zOGqQSi(R*1pum9h<@on!yGO9qEz~a`5Y#Ehm70D$WtRj93^UzhC_!DYG#1I(PT3Gf
zXWQlRjBOXMhv7@8q${1z^toJRv4Avo2QHUQ*qJYG4VNCzk!(1#;nMA56AvzO>2?tm
z8bqqmAzL|I+ImC%eWKlE)6Di;$V~Cdtc6B-=$b=i%M7%6gn#<=e7JO1$!+}p2Ki#R
zbT616-`z)olfbw?T>5+t1!JY(u#dx~?W5D*W9FPs{*tdKh$k&9U)`Q#sva(V0uBK%
zYC1z8JpJ7PN6(m#DQz`edK7Yw{t#5kEa|CC9zVISHhT!^t;@%(?K$Eu&yL}=^l~Q!
zrs2|4#a#}Ue!;z#d(&a<iQZox)*j6+-<2pw&oAefh<w)*3wKAu8eg*`R43lunbQ_N
zPSFqkx*TAaj7aD;T;pDY`QGUtV6B%2%C=9|Km_i8KK;Q@ZeF@Gd^US?`U9D}^U2LS
z0}=qt9H5cl3TE=CKTZ?V8BZA>g^D!|c?gr65ANcp^N9&KE#obQ|1h~kl(3Fd#3jAO
zg3)I<6}Wc_09=?_LF!B&dPv*QfeS#1wA;lgiOnxat~xMJvKW8}IqF*GC`4Ce8weM;
zL;jj*;tt3H*QYhu5<Lb-V=XT5DqIn&O^+?&=x?adTL%9}U6bVQf3`KX!G}#q2ktNJ
zHqN5CB){ua>p%T(lN&d=Rr+=u?e_gmwsLag`p^94XYI}ACyzH)b@K08ll=Jl_4Y_#
zP43JvmP^5~Ifr916@3N0#ed80K*A)SZw#O55uvOmX08S!<~D)$&OGr3CKWt4SAyql
z`wv;_=Jvg-qyW8|4wa5=KF1HDZTMO!phB3|+Aw)25;REQ8gO<1O&1<QD4y?%Xbzjw
znU3l|${p~@4x8AcgATwT*JUAssN+63{Vg%{d{<vv;1E7&{7_&<Zx`Yf5F}x0c4McI
zIwupYbrdSkqI+^^daizfd!lJJ;y~X%;yEA1(C_Y?)t+fO8vX1vN3Y}KeiftFZ8Q5O
zkb(VaH#bQ@=50-G8@**8P^6$8p-!^1wyjkar|oM<Q#1o!sPsj@r++{+n1*Jit%Ycu
z{-`2_^UH!~C@JKX9z$Egm5#<v{EQV4-c6x1<<&kHd&be2MynVb{({s}{1V&b>5tEY
zAco-&-*h{2+>D^@^V8q&?7pNd$mI6%(ca|WPDuKcv;iK^xCdDT@onEk<Dh_;KSgkr
zss&HzzS@V~3i<<>0QjAqtA(F0y+dohPT4N8g<I$MpxM4{n#-N8Y98Q>ZxH^Q!Z@S>
zne_3iUBakVZA5%hB@mrn6;aFLW<6*v&%@kK77^PQEEjc)EJyL_sN;Sk6Pmkk$aME1
zn*i)!F}4)b4jGzIiI6?@w%e@QkFL|wP(Z+CXQ%%oq?)dU1ks=@-NUGKDgqk|>|TYT
zoZFV?I(-v2DN;ai!vIO~X7O?3um$AUajbwy2KYdqpBw<>APO5PyNa|ztQ>TUW|avV
z>=E{)6WBmfN$EJ<D3o$KhF1y3150L;Kf87j#G;uB)FV3}({QPFm>8y}?tG923<*nZ
zd)<Q&yKTrjNiB27veNo!Ovn^L=8WzwTJQ*${5uY&2*Rzav+x0IBj&vd4meqy{vPGo
z+W|v?{;(({98rmGGudJTDluxRo`R5M4NhU%W+X_JCv<|a6zOGaNtLsEK8J{5XrF^b
zB486D`r8~SKF;0?5^@5HKJVW9HmuX%l<6(KjpfJ8$FDXvx>2q^^0lq92&HwdL(BRy
zUH`kQ-ZkRC7zz_9i{OKM5xEI>m#8~UP}@bp+1!(vC{=WUMrZ$&kq+BE(?`AsLMv+p
zzEWFb$LUbesc(zw6jDTJrZ%)ly4gbWI6@hMLKNv@u!XJ)8yacJRyS_YzPttSzf}9j
z)6*YC^ABa#(i|EQBf3^59U%q+a)b!R%m};-b)fFIOtdnB1r}kJQ_Le!LkynS4y)Hu
zO4JUOv?#*b5^F3H!8L{~zh*1FsTD1(GXuh4>CZi&v`BsDA9KZx$)@*{bt#ciY7*!1
zOzO4P+Mymq#VT%(E@6!<a?_L(l8tamW=zr=ERD<$GZOfvF|9#^GGQAQfr0w+LEw{$
z(Xb5~7*csCJEZZ9#mK-Ui;WEN$b_~mba*RENgKXMazUmIfOKgwrV|Lj1|Q-00F(7_
z5Sc8xX)E#3<jb#sTnQ@aDm4Bf0v^#c6&z6_5jvJ+D(L1r^R+3ZzOAnMzcNdu9Oh#{
zB9J9bWbt)mm5w%kBfjmwlD5TH7Fiexvs<C*M-=qeNbH*pZo{T%_5tDxy`vP&Ctsd@
z#KM+aea%|!21kfPpayHdK!po2TQ=n=2PtrksjpTU#@{q;`fVTK>_X4RZ~_r7<`g4&
zfI?j;@2$mKa~U35RKv^oY`XW#CzBd<VxOR0Y|)jP;u$13jW`>_Ul+3ub%8K`Y7YT1
z{#V#CpM=IvggzV}NR(wl;w4J4Xn^J6DksGV#pK6vs)-O)2)`i(r&&S-?O_}CR{*8#
z!~j{!gbS1=WXuJ%56q@^Q1*u>Orx0U`CilzZZE`^V@I^3h-@*HrqfJ6CKq^>wf`m6
z5R{Xx`4IJsa%N&MCa}D_n^&HF%suuJyJatn&vxJV3(Ts8ZV0Ru1&l@ddy|`=oHKY%
zzMd{%+^tZ{<NsyeM4`32;bU!LM*x_ZmDXXaQxXDT(OhBE-%Js#@{i6&_7IwPph67b
z42O;5%33fImJmxI<D)~ef@V_rlJi?H&qG-$+KuS_3ykN?B<g`_GZJpp2cm^+(;Gt$
zS?2@!i0wAb@Dzb<X$Tv`<C#1{G67kair-c3@Y~QPP`7JS31k2bkO?N81OQmfrQjR1
z^Gdp0!qDl`WlU9NF%Yaox7lJ5G^qVz{^D5KqL3P~QY_7q6<=bTm8p7x`O11;U9Y=X
zU$~DAo)*H0srSEIiCbS^{Q6hXnc{#qaRYgNKN&tn3KxNw-Ae*PxxFT&%;C1UqIPur
zTsUfRaWQO*`f?8h{pjSD8V;L$$TGB-T7!I#a;+^cBapn~RV8+1434-cndc1`%UPNP
z74RWLSh2-tk4>kUsU<d`&xH>{8j#IUtJv_i#0hGa`(amS-$pKO50fVMp&C+`c8cTd
zZL3e4kGA`q6y_o+T^_bVt9X8N@_jmRS$L-?43D<%Y~8*0`MpQO!wDj?B5G+-pMv^`
zec?;woOo|5i8uyxvEC)RmewiDFuPcp(Rom-PX9nmM^Me`xrXPN?gmB(5CInrIX_H9
zGqrM2Bhd^aP9cQeafa(=Vpv|;MSLoA#QC!Tli#&!7yLqw7t72A!-hi;L!#Ac_ujSG
z^Hx*(?wI4d=DU3~m;98632l=*$lBi?g=&Te*anBY&bMM$5sT_?=8U>GJrHZn=g?<B
zfx#uY#Isuxt^q4TvsAv$eyQ>fdj7_3+q?SRnK4)NEq<^(UK~=<t)>>{BsCyw+M9Dn
zQ5i5GaVaxuTSE;L@SCapq|%x}LEefg6yHoWQ68@tlpYt>03cr>I`;ykc&BX_MS3jK
zwPO(wsfNw8ipd;W{w}u1A-+=5H$*pu#FY;xYhFhupU0)^lD<o|56OIoxSWP<M5_AZ
zlj(wDA>o}6TjAGsdS`{+W3HMF^i8M?WZ|LJqWzS05;X~90LIy?5I)rM5HJ&Dc#>#o
z895@|A|gj_TqJU2W4P^~!~t0E1~p4}GsGT(QKlxjGl<$=@p~i4@0}pXO30CdbXE}X
z<6sDM(-As8QIQ0)E-^RCP?9ZA{|nx&FcC+WHeD;fD@ZT<f-Ps%#QqW-A#WrDvvPqJ
z4(BuNBrHPnGv}MOODti9$Fp?;r3^tNdx1aeNF@%yJ%X0S5_D<jY;yhIUz_~>-$jGg
zi>8Lmsl7_fx0-SKTh*IEHGVc7?h`ANh>Qfyj?Rg$oE{B#e0xl80_Y(FrsQBTcBEO6
zUWJ0q+2n}8il(<8-Cn<W18EIe{A9Q--jCz0!rb$Ga66?;PCCWSCZ^8ILyX1cb@>BK
zl`Z3Q=|E6X&S{Z;rpShr4y!B~uSn7uQ4i)W-Z=#1Ta%|qx)w+$9}xrfQBY(Y64}$L
z&asW#6OS4SE0t9!496J{@!p>>9a1zo5zpU37>W+Qw3p$%rSFhr*xZydelkhJ3i!GF
zP6k;~GbB4%10;`Bpv}*PX80YfbPKH<ZKhR#j=_^tyi(NMQU5m`b`*vQjr3i|bxPp{
zP8BZ#K@8_@&{0{x5EBKmYySo~fAr+agntib`<EyGyZ++IU*r=Wgx(5}rIfOWM*n7b
z;8?dfMMQ_?-`J)sN<hdZ1ppHl7ug0Q+pYuz(;?Z=vSB<0hyxIzrP!&X0vggW0_Z$N
zTom^holbUBgcTuOZB$;K=#~M`sy#dBv6-OoXYKQ=o9A@x1J;z&3R5Rdote`=fJjUQ
zyG%7Nv)6@tSgo;J45TUZ)>;R=a|bWs%r7UGE=}%GKS)u!*>i;!pqe0BIH7uM(MlD!
zL94OYDGFLOSC;ihwcH%_Ic$|klTKVMoQ{K$24Iqt)XMJ6we8P8z54j+r-<_Lxq~r^
zu<NhG;Xhd;s^IFwPkwO~C+1cB>{quReerm6^>;K4N(u(V$VJmDGR?~2R()ptkUhD`
zNh_wgrs*)P@nk@5ThJ>`ymJKw<`v+Px1WaoEj*O$GSbc=4ZBCW_y@EPe-UPpv70J+
zxMMr!6P4Ul+#rmjeUP%hcY5F03dV7D759@BLtjru3cS9(ho&%8052bSAnQm1hq0+c
zZ4Qg*BvdIuW_*NVi6jB*A~I5M95HfN79Uuh7M8AH_D&DOw1o9#xYwd3oCgXiHG*|M
zyUE%|aF&k(t5-aaZ7d`~k+)}h@UmJ96jUUt3{8b}CCGO>S?7YX@0+d1(wk@q6J7mM
zuO_-fM)H_!O#7CA^#>x7eM`3x9N}`N=A%(dWCv#c+q$@@k`Qynx3<rngeY3-&Jd9^
z9p!MVnq^I{VnLOT`FfXIqoWUEps>yZobv;WT!_&Yaj+R<_C^4jT;kjd(~DYdZ+qM|
zrbBD561yDJC4$%W&^7&>>Xg9(le=~_4))Zw-0Vr}=v7MFEy{CmS?RCc02e+0tywsq
zzc#f_B9iDf1Tk>EJn$kABR$Jv%CLDW7?i~O()PK7cQy$foqsat8s!thB?yk70jBzN
z0>b&1Ke%&3Qt<mWuBBR6et@{Cq;m1BqJ+qfWq|`n!OIkQrt`@|F6O}3KvvMWqvz+(
z(<UqOT(2*E(tXi}z%J1s^Slqnl!SdGW@TPtUv?>S7JG~+cQpBIc5t-&?c|dq5_2|X
zV#7jwW%4;dyT{?&0VUC9>EX)c0R^(4zO-3j@82dOf*gn)iqIjk{DRt+hp+g3Fn@Dp
z@)f$t^l+Cj&<DHJlXy(k^PMAZ&bl&rI{)Sv!Z!Kj<k<nEvaK?kV`Ty`r1Q$?USuQ5
zA;`{FM5$AQu7smdGXHB8#C#=x@;2JOG?U5qWNLpueR*Ya8&eTEWbqR*;+euWB%tmd
zAU&}vTdIMm6F9j{VM{iu7!Db*DDeQO#*RYi%F+=J1t}`2rfomF4e0yg1?K3W-49x5
z6H{gO^_2k$)W{p>!|a9v;M#POe?+h4+GW2n!4l(_84Vj4IcmJr2X<-#f2P0tT*cv?
zUFwZff$gMYnkgL<`y=AfF9Wr%DyiqRxJ`Vs!ka4>9f^q<JsSV`O%QWWwe#v=e04rg
z20CQ>((3=raIq(EZS_O8TIvhZ;VEi{Ey6>lmpL$kZNcU<@F-|I@UB3f*0#k;+QE5v
z`v0;?0!y1J*fI#DVA-*_)<|NBw2Fbbn4}w6AKSi@v?k0N8^`;HrgHzFsn+Ww(pK_M
zHsKo=&rTTIQid`in<4v1jI)<Bp9Yt(jF=wo?qELjW2)2PAtMx@a{`gXg&yC@9jyTl
zArslgaExE72ZS_)^-y47D{fgKLLO6cw;)FfLv+Bf1F<b*Fa@*G1x4rxUFJjKG#ORI
z$;&pYka=_ple-AJRawf{CLtn`3ao_=DBq%Vv5U=19|&@CrfoiAj9{+9NEj#lj);bF
zAa^46EBq5jA+*3pJEQ}gK{YlE{Es)1G;YhJ8viBo7y>L4=jE^=$hzE&AoK8O$*^gE
zt*B?Zwy-1Yy+rMomjp2n;fOzFfe4=_Da)rnD0c*oVB^HNV@U)s(jz6^!E1{|@E%Pi
z3%p0OA_crh)5_@I**4r-DrB*$>HHbS7+XR*m#j7n2B%Aadv>3jbAC4jbes_H#+J%L
z7da*}ve-AQ-IFlJ89w7J@52(x7`(EGfFKs8R9T`^Dhmjf@lzc4P8fQm$_aGS$q!v3
zHI@7OrXqECl8^($scB`$u+m&WMV`zjv;*lGv}rhn6(V}5-!uSAL@boEcePuI#juAO
z4*19@N*=~!Q`f9?mZz?F#(FLEx1|ebi~~7J<@|tqndz6J(v6!cd<m9f<D0Ta7zc@9
zh7-$GreiA}kfZ7MbI?9h-fUh+q+xd6A;BucvR$k$Py)$^!iFdpQXgUYuTz3#s=4h$
zF$q5>{FERrjt$WUQ|2EO4lz6wLMd|I{+r**;<R1-OtGZ;ss#bOyUDUH+YT7}sx6rA
z_Eyk=aIi3!V(Ablbw)RSa!C-!QbREF5X2j0qW6`bh9$$R0aVth&z?Nle%xefa&W|g
zQ7jN+vDsbS-g>ZX{syE;+LHks7pur*FqiR+43Q5XdsgXj;Am~s#?iU1TeEuC5xX6c
zw@cxk;!ue^vCE2x#hXA7UDGbRj-&w>-L1#x&J#6!4ms>T0YexgzGAm+{)vBtA;LU6
z%;H57SHaoW+NUtt1A)53nj5@_JC_K}SV~+GA84C|m1Mr4j1ep2;;CaId++FeHW`FF
zOJDKRgj#Ndsqs^69VD&*Oa<Sh5J8a;@8ib!D*qH@x3nxQegzegoxwg|_8`0$VdUdy
zIMXEggMiB3bR1IYMI?jM6cv%73**1oW?^m_5oR)w9(84^X}QL7IVQ`VhdrKp_Y|8&
z$0YR)mUMr$Nk8J8wyQn91=y7ssJFbs8@xcU7ZPxM;7S_xJ1x&J#vQWSj0`9hB`IyI
zg<N)Cw^e2g;$~?eLtIIK&h0GP>k`c<hqVShxh!z&7?3Gw#&osy<TT&+<v)D2BZjzo
zwcVVSmTP}3Al*403Sf5o-J_+ykmQcUiblVaaf8BtY(69+2~XKJaYp-kQ7xnLbaafM
zSKYkrBV<!0sDSV4!zb^+7*RzIF4?$(>ga5m5)%v+E>*-O<`awzGc~bX#Omm*2u}>u
zlCwg2fGw7@OjsmROj(Hx!Y5`(3Zde?Dj?}JAtSsapop|fHJaRex(O~tx&r(j6$+Pb
zae2EFWJPX^L@I^g0H_FRLrEdH<XDsXv-%D@+R~U~ZC0Yy?Yn>|lx{ncRNDq$Z9khQ
zrp%!tPi;i{yyVU#jM(f-(;~Na?-q6Nq{{VoOIfLp#;dK47q*p+d_HgcB3pHDs!esa
zXD)S8MR!_aM)mz_mrz+!hZM}=&>`%3N{y`41*8wCNh9vYLAyeQmKlvWSw`Th2SRP=
zeCdx>nG8~D=mx7OJRiWrD1`0jqxFw!Z%dojqMB<9Z*muuT3_^Z(iDPaDJ^hHMtc2A
z6D@4RFbh!GEei2`<EhzML2Z;bUevXV>({ScySPCQlttSqNu<4RUx=IOLH@H?MUk1k
zB^hx=5BORuHx@G&Cl2?%Ubc5<mUxGfkkWue+cPW4+Ldi(e5<!QU7e6$ARF5Yomowa
z*%05vW)9_&SS~_=Z(359Z2@xnK~c0fq`<jY0)IgSPJg#9iy$wdIPMN}kCr$`>}m7L
zp+yUYGC3hdbC&@^i4&`izIJGIq`P1tgb@HqqAR&pP#clh^=Q~oQaIwsv^)Ao>7l|P
z{i&YV9Z52nK#Q_0Q6@d7?Jtc@VJQfl;!n&@WnDbmfNqQ3ku592dF@eO?lB^iP&!oF
z2aD&lYZi_-L0!W{%dqf&uJbWTws=H}^JMMX6|RAGG_49i$}7$g2*Kg-X1|M2BX|i0
zBNKItEeS%ReN02<ROPGGSgaq61LTUflsP@JlW+_Xy!?7sSxNyCGb$c3Z|y`6bz*07
z-Dp!nYh1&^+r+7wsSbm|j!^Pj9E~FTPg9ss`!NQo7KuSg%m^s1Ornwk0VzXOZNd=d
z)?h>-rGmOM&wwV#wv&$FbC4aCA6e|rKZa;fuEIQ1-e^gl?6gcR)H92hp{l?IgG{vR
zyojS!HIkybo%w7!`NpZ>7Qb}z=|NzCCFLH5yK*cnNzUJCl4lzP2ro8hCPA<k{6S_`
zU}Nb8Cp0ChS^$#TC$LZjmQ}%NOgkf~^`T*@|5ja9vjyQg(LzF1%G^`@2tgqQs!P)`
z*&(SGyk;jj7H}3CD48UF5Sv*?v*?A_#Zj))QEz;lOurj~hrzqRpirR*T_@!ZFy&RT
zlnK-kQ;@b8Rp}G_uhHP;QKCbmo{R*mt=yIaMFR9k5LG0oaaU~AnHKR~F`=6-BYahP
zJ?(dR05YtCeF`dLAdiflOh4s%NJ|&+RmR~6q)|kr4(ZRu8PEKhusfQd6ybW@DTE4c
zn?Y~cT_W<yNZ+u~u-9Rifl4afpc)0LLTWHsUkAIZpjZeDFhW*>yU?9vZ;gnT>BYQ_
zXi=mF(6g9hTu#L`_kH3EGG?T3>b_)^sEMotoj3@tF#d~+ix;&=GCTg(U0&41=^tNs
zoGciX_TB?6hl&uW67V~yvFHJhVq=XP>gUSj0y53#r~mb#+PA_*B}YQw?cQZfD#s$a
zh{(VpMCwGx`YQ-P^3qh%qNL}Gk5_!Md^o9^%X1bz)Q_O(uGF!b#B$<I+=6x}&!psR
zc=w>*87+3s<J{_<TvgQ25dQ%D`3LJ6W-F0X{CgQ_{&Ads1-1A|F+uz#+B*lKEL@mG
z*38ZYZm3Dd>=9;W0hat=oJrfsYEX8`a2FCUE?s1e;UVc36i4v!!(8|~3A#)nHZ#h+
z54qY;G!rSx$#ax_ZL5@Cm@d{RoWs)cSRzyn;K2^>0y-r)nCb*7rXgFB!<_HH9h7!6
zls{O@k-dXRt(r7Fv1~a^`6pN}e%LOc6jGZ`&SC3P`Voe$M~@y-=1wY|sxKr~%et#X
zIn7Vt0o$u76re6UY~jwiOk^>-ic1K{OO*`rm35kE#h+=Gtb#vkEc?9_)WaEY(Ji<F
zZ6fqAm@A+sKAi;`NaG;i!#hZgBHS5eCg-X`F$MZsSbU+oCT)q5h2E2su6oL`A&lvs
zn_hqJ7w0F}i&1!insfl6+^L#csOY>u1c3MlYQu#Mga;M_Q<Q-*%W@OYq%_&=&Bc7)
z%H~zd9b7R2a>du|6PSDi5fHIkvP6Frr>||o;3t!I$_Oga#;9qT1_<_vRi8ZgvzwFc
z$$tbi#Sgv7xx>@HnLOft202X`16<R=Ny=9G)qKH?4zAQitt4t;7~8JrJ3&BlW<w%a
z$XLupc;7KD3b#2Z9c^(u2$`)Q+oo0$4)ZLvHD$MjGL82|ti|rl$%DVTshx2m>rAWS
z`#vkU`zBilg^3;b>o32YJbv>gw$79U7*=^+n6#=i-j0|ic*OU1e5YQb@?;Xml)W1$
z30*+Iip{qGOhJ@lFT%!xsIC)XJ6qU5#|7L%Th!!!@CnTI{wx8171uc%-GP8}TD2D2
zD0V2!@h#LDz~~M!qMi|aLyO_?4}6ZXpzgC#2yky8PAXj&33@t#PxNP+3EEEm0=DdU
zN4*oj7{xn`F`Da?Z~#eH0g;Lc-}ENo7?77HB3OpfL5De|*?zHtfkCH#AUm)eB{e`1
z7wmcfAqeA%(C>#hGM{q~(UwcY0XB}rGF7!#1PWIJ$)I2eKcZt1t_AN>by%1Qdag2!
zIhZOSh9)iH-1){rl9=~Z{g$jjG<Kg6v2yQ<G+t#chG=^sMBTwPqIo&!&RN0CA=A{&
zXrTHIq-S;u9EX4iDD}8VG6A8Wq=}4?OfqzFt7|t&xIhceL$sJ&yh1j(N8+SNJ=a4P
zQB=X%Xl_cl0(m3|HP}Pzvo;1t2sIO2h=}>F(Fj0`wzL{Ni|j9JIL^K*8BqU=D39MT
zkA%+Thf<hF%JYhb2d&YO|19B*Qnt4^|2<{T!?y_2Bf1_XjgzjaDQ&*qRdj4PI3;3*
z!sl?f@Kr7QpD1;(P?o+-1TgLcTuG&;$_ilukZ+Sv3Hgv*bZ%JnNE;~1g;co?%|H?}
zPKR>3HU#SskwFqFL7|R=MwLT07Um{1ic=ThiI&IN7gq$ibAV}zKhVs1^ehdx3v?fS
zgMY28bks;L(KvNm?htmQ*LW)-ECEQGK#1i{EVU&K;)5^^PypT;;BK;(`n0@ntJZvG
zt%1{mBZGJ@vzxM>+qa;pR{7r8_w7rS#M+gFiCW5jC+jjl%=Ctk8pK&CY6cB|j?$Ie
zp^$2{+^}(ud;ep)oqQox9wUH&iW1wPCizDI0p=s;o`~EPgHG^J#hUQHwkip7`&`(?
z2QoI*<SA+V?PDpZt~jtUc@XY8hRIYVyVtWEfqa!_Ltqf{Z>VcJ@`dbUmL2P6ECEoP
zQf$R1b6^wJ@A_U^Rd<lsexvN7<WeZ&A)lm~6$%}|T%x&Ef`%iJO^Q|25(jlS`ik^M
zY?#pAmKd~u`df<EAW*5U?t@NL^#lD!9Xb_AhB_P6)YnDT310ZK8W*9hg@nGG#$&$A
zSTuG$%NVMdU-@j+dsR~_?}5wdfg*5NK7=7yn9emjV@;}0IWpdbg+iJv=L#4Ut*7Xi
zy|Pz33U({eR5S!C#Kh@99OuMbI)lDT@zg3UNsqBd))wHhS!{t!3W~Nc89ZxVBU3^f
zD@s&0=KI}4Km1Ajck&=oM@tM6$_8I}%b!@DlH9Z}J1o1@h$C{bEtMJ?2_9z%6p##{
z>lc6S+Sa>!1%Tw1h>F&`$oGmO(QJUSj+E)RK{nx?OIz2khsPl`a#9b|wZ%yzPYCvr
zDS}Wyk#TpY+}z6>MLo7j*|sz`95cQGA|t@Z<C0K(Zs${7e#sVt<j#Kdh!K91Xs}jZ
z0XptZ3r6R3e8pu<!xr<hxI`b(8a6Ny8Q7!5G`ldS!~&EI*-py^aU3}U3uit`_+=^G
z6CDq%4Uw<1_%m%dCZm-caq-8b6ejJSgv8K2V826`Vu787gkvP|`;%X^mf&3b0fMz3
z1^9RfNS49zuVesTpB+$NFHdANR_T$4U5|=3tKX}VY5h^!^RTq<Z0%6Sol;8P=Jr6S
z{HXQfHIMpDc{iKrD2oJaOH4t{aZhTN7Q{3fxMO1b>ZYCBWV9>iv}!XvrvX8sWLZfz
zP@S@q-6{kQcWwJYJekEQnf<m6kdS4}aXDWL3@A_pX$yK^2#NjdFg#xY`Xx8<=Kc#B
zP4{1{9z+lfSttjk*4F4E7P(EKY@E03Qrj_*bo{FA!tyIE{!*-5MzJCRlMi1O(63$u
zOUs31ctLF)6}n;%BszOmAOiSWz<lW?Gd}+%;C%i|rro{lOcvFZAH$a|9BqK7-gKAA
z)d|-gI+VlVpKZDY-F?g>3=ae12mnV$MI{I4s(V|b4p#PPiWom^O1gHq*#Co>M(hQU
z6af$b(&}iR7$m=SeF8J5u0sWC75;;Ks<hwk5uh5+2p+8M+QXv#C=R%ZY!Y*=KTtxF
z>hD-Q5Vfm|hZQC>wos-45U-bdmjM$AqX}N}e#s4u$E5wml?mOCwMK9+TR_h09RZ2;
zbF!()fs4>3p>F9_EIhRpwlhqw;2?jsHm#HJIEsx)Ik-FD(>)elQ*Pw0oLO;FVb+Tk
z_w9Tposv|?idoZtSc8jgrqj67;{XkHUW}yZUgPSesuCpI>ugtmHR-wkShXk67Yj0R
z#9{H-c*pWWZ$~^nJf%)uTWobbnne7AN@B3UGMBA4M|s$b@w|$)1<?_PSGDhYPCOsB
zRG5r~#R2Kb1KDiCKq4)<e|1hD_rMX!es*lCEWz^w6vvmS!eMp1d-pE%o@)iCN`Xg`
z1Pf4LFpKNYWCcj*RhTU<3XcvL&}^e{3<$!glnN9gsH+?Vs9p71+h0LUkOc95$-ttz
z6Z}<Di3HTmcDQy?uv`OG>x<C`ow0FvbozrNezZ`R_zVRVF2%!CNXUAon)?&yz}L7o
z|2B7IslGWX^;tHdI6k2%oe`iaRkxz1GZrd*ow5{G8(VEM$axo2;nbi!sY<l2>l!;P
zd_11*362VB-9GG;TeQZs$%--qACl~4rPNPJOfQ_AQRG-%C7_C%6#pfI$}8_px-u(9
zEOZ#WTb8}Vb-DyfxD}`~g9hdqV%b6wr%v@IlsL0L+vK+^hY=(rH`|+>1grmcyCqF~
zo~?^=h~1N7W@dgPqCc9=-EyQPtENh7yJ;)N7qQQLloY1M4l`F!s?}J-Ow-vo#;>;1
zNqXj+^IpV3jXDuJC>$uwFxE4vK&EYy_*m?a8LJ{<p{vf39N|qApg}uMJ=NEGWF*vd
z=Nph-;uIxN&Y9%Oxu~>s1fS)iKk$3}02FwA&$S@=z2_S4ru7uOznga4;ZX}F^4Uk)
zf5rRSZZk_QWM$d<{N8@C;Fm{aevesWjm~L&BoBnFt;$A=(YPL#LCpqeqbR8-HZ}yJ
ztyH{6)b8wHOVbMTRaCN}CK0#T;#C~ks3xD!j_*#NJzM#bcQ5=dH-==eVjI5%Fs7M7
zVo}*T<jJ4ZA3^4bWl^m}afi*&qKf8Q3gE1M%!TaEJcE)tDG}YCES}j*q&fM+!#|`@
z-%ghfe+1P@#OX>0-eeJh2<?+4y`OuVFTerM=e3O_KN;@Ik^ojfG56&JXqHZNPpSlR
zvz##x(n)CkA$MCyr1|ykx4XcHzM6)IkJKsK@PVsPyHb&fMmlVyC&gNbmD<rlVb@I1
zwxLohFUpT<7V4IbU3u%Or(IuW3lSy9Mw;vsl>Pi@P6bCZbS-cEQMhx2yUh1bV=8yk
z;Q=|)d1lONRipffqrw$7C14^Ok11s>Q>|4AW^4%6>g7AIU5T&;GMvPk0^35FNn1^n
z<w2a0Bbn0~xeOsiHMlj1td6G?=z^AVkZIl8U0e+VGVt06?d0_Tu0Fjq<BPW254YZg
za80-NqhQv91t%YMHwos+S9aJfFn%#`y6zJ~oCgMSD1K-7Tz3Y*Sp_I@<{9uR!+9+b
zRji_2p*-0Q%j&dS1z_%4hG<2rLZ%o}>wMU`h`JOKGk0d5q1cXWSU<*$ZMGk&ppu#>
zJQui_-fJe^Y?>Pv6z>r6DvobKei@e!k}RXl1^$Z#g^W$t(oFUqGlV_bv_=DqMCfIe
zA><nF`!d?;<kQc;m~85jaXh%badB_5ee#TG7)U^-o!uNh{o<bT*P1k-jaFXY@F^PB
zp8qQc4hCWYo@W+-*W@Wt>y(Wg64_~>Y0_YC2*<UfQ-O9_CpzqlhFPC)m4P}>T#*9E
zO)@<@{Q(tD;RlAg3Um+^<S*biZu)_ODeA`=t?)B|w6@&HC5^#QdpgsbiUJ9rei2)Z
z3or{cbrVl%G4u{?3`@nQBD~;ym{C~(x9JhmryzGpEg}2}rkC&`#>@M2B~ps*xhRH$
z`$NQA-BS$=PKrS18T~F{1>-pw(>vuIYHI#4t#PG2mKCaVhzr12F4(s6%S2wFVPLLc
zk$d`sv2?^}isqeVj|=UOjV-@&Hzj%7vgZSlK_}r?fTy4EA!^o@UxyU7s(&|1R-Xy-
z>W^~{*WG5c98=B-)vpR83KKrr<AR8C^^Dw=h~w~nD61yB`#tt)cEDj~@ryo{tf#sn
z$Z^|1f)J(-)IO6P*`KW6jvU1JK?RE0QNDPDx?y#qJlH}T-~z0(Ez8W9wz!0^9FA7!
z^|1+P$}hMWPXDjoUgYne^`5*dlPEH^!f%I<17CoMg&fnI<~u!iFQD@(;l-Y%v+h&0
z@7eHxO3jCan^g7E^<Nh(l}pGVf>py|E6IFy8Y`y0VmXPlR$c($^F#019wwjD-;dpp
z3X(`yHLep%v^X0!pnQ~Ht56`)Ba{}VQZ${)Ecw?Z^d%faQsHem=lUj4)G@<nMB}b{
zVQs%LwyFd;)r*`0Rlu^b)Lu<JtD?-27^{N^@MD1jd&8k<Q@N$7H+u=a`AX1S>^_@z
z?-%u8jV#>qH;p6kJ@R=Vt%`p!0bDUJEbbA~iw==2%e$YQFgw**hj{yD4Nnlshs?PX
z*P^L|LT593;DN6mhp0;m5`9HoTneAOPt09<3PN?sZZN_|$b@0ACW&>L`h-X=1X?_H
zd#68KnUJ)zPAMMHUC!f+i=PA~y@<&H@k*EJS@PC@!(<W{AntK{vLx0Jqf4e?X;Yxk
z)EyB3lM{p@j#|=!0tV3!d{v+SJ6WrBkni4kz(IK6_7G~qL-=BXw-qyHXYNr#0kl`X
z31Wos94xo{5|I;PbY6nUFUukNrWuIQw4qjMf>8(~tLJ}}vkH6wFR_DeN5O7shvH7*
z4$zr}O;19FBoTbm@F5!Ey{-2P_pKQCgfrH3KHJ?>q1xfI`QA=mSj65b2bmgRlkg4{
zMuOF)OD;tOELR5gINd*fI#ou{@bEdl&j~e-o-2d}V}abW#SX|jZx&D|z%}@J?gS;y
zOLNO2A#n<#%47YRMNb*VU9(j@O&E~G8^iG^%b!5#)BxHR>8L<(WSAXK4|T_Jk_H0N
z`q|)8N2wEK_NN&q!C+?i+7*g-LMdvTN4#K*M^1-U?tz;VnQ2@UK|T_*aA8vgVK6m>
zoIQ3<2V_|=wn)Fb5qhbKFj}#JFdUpSq%|moU)4SK<Q0^#Ln4NV^JFu!f)y!OTZMZ(
zmnu#t)x!wMvC6o_agBDm9PX%aA0JjzY31PUDo81w&IYWBOS_92Xk4EmL|Tfmt`_r3
z*f-g%X^j?9b9W_FEs=YSuSc?i9#v6ap%~S`_nCg^KL^C@T$$Y4mZ<o}qx;NJDHW_;
z<x8+1IL;qdP|E!pkc-7IBL+vt0%u=fg_dA@V4#k0bD1y1Z4qYap1MCkX!1PE;XHSY
zWiC*PDE2-T77?YC_&@x$^nm=zYznP`<`^0XZ9e@23_wob<gzN<!<R=Y`dUuQw|l6I
z%1Z@)(>+8~0)yq&(eKs)97oo;xbvxXQzpV-RY28J_KBS&2Qp$abTrH^TNv^l&m#7l
zhD)0MN7@3%0+&b&g^9}8oUAYb!IerRVcfejJb{5aM-X(4g8TH_;=5ozC>3sj9IWCD
zfCT7+J}M0C=dRBGR(B>ULK5|TsS=y`l5;cJ&|u7LXww*K<O#8U6NUhR>nO;0oxZLx
zhJGyGO0z-P)Ud^RK<6KIW+a_R?(#>)1iYc8gpR{fV6DY)CV5TC730Jdom?wo3kVW+
zi)mTl#2YbowXYg3edu^h*pU1kAtX|%W>LmCBsid%+ghIinbvCJ_FEaDeeY4V{EY`+
zJD_MHU1uH%!=q-=1ddMqx&0~WfLqc^={#itX!JgzWe2-tNm?Wu&4P+76fn@_l);a*
zA9HK5>DV`d4@}SOT3EFm6cV%50SN(?LQix85L{I;z{Dn$k_XI^ktn)0(M3=+bzRuK
z)T86FJyuIK78BXC9~GmPSq^0j5hz5U&pVeoEjE1h8DV?XYUc<bqToK4w;qSLq(?bB
z2rU{AASPo=fh=@tIga{#CqpLD<Vs%!sMh}%REei*^KQm{pYX9}vHqVEwknaT34T@f
zHL7)DZM;B)fD}V~Fk~QEDR;-Qzo~A4irps=<c$1~(9m9Vm<}6(gGskZ<8LZ=6RuHE
z5!Dw2i%No{1SqI&gKh~Nk+FV>6^J{O*eS$wVLnls;Iep9rO9s@Grf}vq5$19eSzT-
z2L7SrlPj9Wt`)4*!kp*(NMX7Wqk47@j@p!dCEcdW0kyDIj0Y&Ag>O7BMJaG#{XmF;
zgp;yEoFH09zc27A1P?NybXihxbW|hc9=j}b=*TklnkE9RF(-6^C`Ck=9oPWvNx(L;
zx*-F@c@<nEq2T5n#ho;*9#I0ZI73Q{vbRIIwsvZs9gJ`6o3Z&YrH@d-dhMN6ptJVn
z?3qTd{!O;3rf+dtj4BnrQA1IVf*E+5rd-igj={-MaUz0n=f<6NBB}ghjZuaNu#@m^
zG9VP*3&Wb=L6H?XVsgEzSB%1>@D&K<tbL!0LkdGLR|M?szDC`bs1vr;72u}k^et_`
zUKz}s<m`<%d)$V71Wy%xAk*#H-YX#)e}*ZrUQp0=4+chtMI3eBb<iY2$y*^bLWSgN
zCn;B;+Z`REV$BV9&wRZUeJv?kMw}|VhNDs){U10PFtB$qDhcqJ+zR1f#l&Tk_pPlu
zPmQl=q7qAtWW=;;p)*VO0{PrG5dsyXvClb^xB;s+#OM6hAe8bMA^Jz2ZnYVNG*)mi
z2WiW=_|uCNC%H<I2I0wDb^xzusHRboc8USWBs`;;-fugE9Nk8M+W>ADCyVi)aGOPB
zfk<#>;kkosz(q>pFiD&}v_Yr@po_ddeI~MkGQyr~Ire;v#)=*2io4Z<H|MAPaT;T#
zbEUr`63tXf+CW{WCxCCct7}40V1uYuBK?1Qjccv9bTz!9>Q$P^<Nyh*ZI9eUR%=E_
z1L!q2D9}y_(D{gd0<P!+K~kWPplNZ?@MQ|K@-{ONz@i|nguui<fK@K_HjR8;tR<3=
zF&7+CKwCUwX~rd+SWc%O-Y}Ves<~JA9`DBzoEw?g74sn0ETtsXhfeqO9Bnl&45$~F
z=SASNv@FoX1qeUG{*@(Xmt_bPQ(0r|k9K=AO&gO(vpqX*oB=329`x|&^tbCEi$WRt
zaa~+Sw8EJTKmZ_@ykGP$R*%f%>&bj+6}AFqm+n$o@WQ=xb|(D}q`(V?q4%Nt!?)1L
zeOVkU8`X9UOS!O6<&aq|x}AhB4gd|JldX8=om3<VI6d0^x(hv!_H;~q-~K-cbAl(d
zTo#lPX%V6W0$@^5CbR_A38@>s|9(E%zQ2h$c{IbAY#lfDa6Z}m<gw>jvih*6z-XJN
zfn|o_pj3joLU~LvX=>B&WHuRxq&oggSYn2SRnbGFpaPV9khNFfkDJn*Iql*~D#C*@
zySqTKw6XiFJ9<@H7xYC`kn0>~_Mr>G6k?-~J$zsLYEMjCNKpa==F1vb)z=W6LW48J
z&_eU%sV`tH5}D2K!MXaG%hM%r%so=63g9=1Zw-w3$DMi7$bab6Z6{*#z@qjkEhqo&
z?bFYY>kg+A6NNL0L}D0R?q}kmJn6$@`s_+l=_+KbR)m2#7{tk--YON=0@d<3_>0lR
znt&0kZ8k<AOJt9d3V~ibfY)d1uTOuZirXIW_pr4QRYe%Vw5~hZROJAs<MLf)kb);g
zgJ2awS%OK+`U9h*iZ{9gMY+X#V9`Oh1RCx?@(^u@fM%48_WI|%5MuJT0l1Q*O)M9q
zO}P_>UU5=cjETJ1yb{PlECj;-R3;Dkkafnh5C^TeQf0~rx)NCDDvVwnZv?7{%tF-I
zq%CcK)jCoQZ8m*@^msI>p8b#_mCdBdl^X@<=^ODtT_L#kg@%&CfFElBT(vh+8d7vb
z<sSH7`+&kkMYgN)ei4h}`ykmm6D~T^G@z=S@0NpMvKkI{G0uv*of5cUeuf|EUb}C&
z9azf?W2hVtAt7SW7L=6XTqn1VQXmG$*}YPhx+vUCrkr*t9&con<5U+acI=>lmONLV
ztj=hwuWuWabe5Muw{NI{l#%C>qts_$EMr5{uaYTsm0Y8%FIAwqjT)?e`FEL?61(!I
ztxLXYt2JzI{6fS(*C;t!k`y?MhWrh=A0-QHJTIXP2u!lQa-iZ;UmRthORSLtj>G9R
zp-!bw>uOwkA{#O$l7q!X5^$!^xhPX1kRX4pC2>o!_4RjTjGDpm#imgfA}14UTpZON
zUPXqD^3B*Lf5>YuBJSaD6|lcUfj6`NaFoG2#=%wNUt|T_OAP=4`Xx56%g*7TV4p2E
zE5h`J74;xT@2~dV+_pMbY`|S7_u^hZcY#BTJIFy@z9jr=c$j)2BTI5B1Et+nQa6kc
z=_|lK{00nBz85}nq}EwfrtOK9%<^>!&Kh@KUHnzP&-TMpO4``RpW@Sa`1D$^>*m2y
zD@Z!CutW+&T!!e?C!VQcDeXrN)Pr%*iDdoqx@!s8*T<YvSd#Ql6^Xl~6S@G%9e?vQ
zBjQqp@UyMOAqZG#v3QJC9`9NG@Lu`Lbfr5_k!~fLDc-$@i5S!gXk9=`Nw*FPnL#U2
z*|WTwlNVC%1a5Y&`j#v>iT@nv!3p6y+_%MFVvR5cdGhg~)?AYMk?C=a2DPNbC-b_8
z1Xu1PeF~9dOX?HyS)lyx)>0GPmv!b{U-Dvt^bVqyN%C`zj@-zmsE`pr7se`ao<cW#
zLa?;73KE0GG}P-e1#%H;NYjGgVjYNfY`6e;e~!6K^RFzj`gNo>{^!&G5v3Q^<ZP5f
zfJV*?^<(-5rp3^xPvX6e@IIRELqT3n;4KoD@w+5cWy-$IhU`)fh6YpCBGIKqNQNwf
z6fEYf&;SmEU@p<qa%-v((FV4nyy=^LD>Ha_49y}xddiYoUKQaa6lLd26DJ4(1t*Rq
zwG6-5Jq8Ac?Gu$N5H4hN&GG|LU=FX8{}}C_2uo&^MISPzGl3)<8V1yae50-RN>Qp3
zj;$j<J@^Te;Pgs}W&4mV=02ysjeWm3{&8Hxd!V=+Icrwb!m3BNH}7n1-g!8=yLJ0B
z{)H}vg>AC*g0WX!g&uc0C?*bxVG+i9>>Z+K>^MUg7u*`#lyo42aL&E`{JrK-j6|S`
z^g%hZq%@bu=Zw5D5GfdHN$C0TO{x?tqxL?)dg8xE31GO#@-bm|d6#-4pn`m$HQ??X
z^afsoL!F`jO1H==MU^FtNkqntl(nr+IO!mGxw|t%-WrN9#>`E{byiviva@KQp}i0z
z?$q?t#qi0LTehEI*^`_FRgjeni5ruNsY?00WhR0*9j7lWdi-=N%BPl#m9v^Ew_QXW
zMyakke8Q#8e~TX3Ra<psyj#Ql8AZh6hDgiUs31(x<N#vCx`6!^myX3M&D6!;B#}e7
z#Hc{^vFQ*nZne{j-ya#Bz&TMAagL0ARb*DF#a``@jvZo)AVTRXN5p@&OK>{U8uB+)
znzgh*Z)RJ1)QR*Rwm<+e5|wrPS`bS%=Iz1(${*^Z=vgNeos<Mjs=OuOPkluRA}01&
zm8-7bBwIQ2KnI$BC(p6_S>*2W9z2N9vDQZ1c7OUkzN3)>h+Vt0Fg49eZuEO+1Gx8-
zyk#n8xw^`f7jf5>NJnd~qoy{f%+VcAtS+T6QGtDIR(sd=)HSPGMp><RYHo95%HySo
z<5y;n*@xqGTo<E;&HVcSxaXzM8vIC$qSEIa6p~n))q$HZlg2+td~JnnI;zCsQ5jHb
zLTiPD8>SwWM4;+G`MmqPb&9}W8q}Swr!I&k;fj(f*@x5v3COeK3Pjcz5=xrZ^K=vp
z`8<~C0Y<rWqA>==7`u6q!T3_7nUV(>0SHigLXjtct_yT3*7FR9*rhJv0!hn-beMX{
zTch->Q#{sEh9{*t2xH~FmE1xqGD%~2kiy2i7VDHENF->D=tkDyk@8#x2lc!H0+idb
zc}cGG3XuA<1oy+>kwz%}C*oUBd-)}cet>y?ME=5F54MH)q^fR3^e?vj95Sw1g=S(+
z%6j!H8_O6gina2kC%>wv&ERtBKG2Yz5Y!$2>ISH=aN(3J9dDKSl3oKovzOL|P+;EL
zuGm<-O)_wH?vTFMere29a%c5?^zX`KW780RmSV<ao>n5cLP)@ark9%C91(IvaADln
z8A@*H5ct?S_sy5*zWM6hH(#Io27Axj2J`FlNA&CShxO}o#?CMd@Zdz%x+R;g+KSo?
zL7JOR*qOBlH?IA3@|ZC2RqacFT5o}0-7<Ub4E53TlfGviU7ku5g@A(F1!jq<vl~>H
zl0GE(UQ&m&$q&MLW|e7WlP}-h<g0f#`TE^W^3>lsp*;TgYxf>gOMqC7@S`0&V^5La
z@tjSEnijpS?sEUEY-|6lOtybkHm-jrQXMD~o3QHLs{YG&tHvqszJ~k!fk=xHOqtq*
z9wpI1Bt&H@#MN3Dq6svXS?G$0lg!1sqy>XNaaFn~CCQdIjEhBZH^??1iG@H7+QANV
zTM1vH6T_uvs7^|Gqz{>0Rvb`IAgf&>wFMh3tHQo9F@p@9wt93&-|r_TFii<UjTgv|
z+1bv{A<$#~!P4lb8{W#e#4}dbio-;_X`0ednNtAHf6GQnNzI*M@6*a!o>-QvMiu<Q
z1odxBzSapYxQ)@~8!MsK;S|stjWOmTCAB8`lyF@%^fDFEwot)jDM`n?9<sZ&U}vfF
z;+QKbE7dycO7rR~E0<f7={8mnp*x!tt`);Xl;fmbJ@{bvV0`jF9@q^yV%8%8A{ziW
zf<u`a0J9U>-;ppoEvz1Cu{lZQVQKZy#%wjZO<BYp507U1^TH(KHS5TzFS*KyANw8?
z8}?Cd!;uc>?AWvkB6Ky&$)>pPs#ey1i;ySl8;e0MBk}~JK^Nf0W9|vUv|`?%$;f9X
z@jlUk%VEgLjnc$THQ+O?sJ6l{rklE@ee%?W@(ss`GHE!q*5bQHGu&Eg+rF-)oKo!+
z;*e#~(fP+Ac#4S63kHhBTojL-H+wH*36vs1#6^dK;MCYYE=669N+|v{?+!M)M^{MN
zb=7fBptc;{<C%ezuK#B1W9&vTomUtc+2ctUSjA7v@j@<aV<RN+{aadu_?bkAM(6OS
z0z@28VpPtiF#UJf^;g3k*L|a&uXq<!4-7>?6TUc4=V}4H6<-j|?Q482$NMuZM{fh;
z(&-s62GsI+h;7gnO;lh{Z$IXpckOjVIKFSY+-C%;6?<S@(favcQz3C9wOcaFA=5%y
z6Bm==IU*Pet4U~0X%_$pYME%lNO83PCh5!4-3J)@L4DoDQU6HGUHjb<ngk8hW6du>
z(=_r`XB;x?Ti=SA)v~@RN`2r5Uw!BZU)K)`%nYu(gqfuC0<xnRhWp#0*)UhCeSm(5
zSsDkV{sV=9^o{vU(jE3uK`$h0$!=E4(A*`bukL;tgWQ41eLUbWqudPjf5JJc$SMZu
z+T4m^yC;~i^NzQiST!Gr(St><2%~rDMLFvKo-KyQ6j|9LOAP@-w}veLzD0AkEdE=d
z!jB?JL~x3?#jGtJck!q6EW>d?rR@ya&v|VWUsHx^$(kBt2l8tpbdD|dmn{W&vANf;
z>Fzl=psZ-|=*y-C$Cqzy{nZDx{u1`?d*jQT-_iF{>$9=}Gc>VPsd+2If+5&vMjktx
zj|cF(+AvI6oSp?6ZvNOGo+@ZziG}GK72aDf))A&IDH{D-6?Z7`EOk?^w^Hj*u^Mnt
zSSA~p*&Z#Pn1GEhpFH~F&X$bCS(;g6q&+5PQzemF8wlfY_{C{!Ltc=qa5G`|)qM)6
zX>unJIjTFOILdnAAOc_{HPDJH)1$~z%I;3ZrB?@>C>+oG(Iu>?bp2LaUGsv)elb{a
zlF7M!Hngx4$nE@YmdIQ*H(_1as-b{P%OPlvp-FY3jM>IgWC^hjrSbIW0umVVQ!#GF
zDxd-~7s7<S%Df{o$*!<`yp<o<8jF%;N|_!aplm15I!H~E*|(KqM3p-AC3k>@B5To!
zs4%D`+0U=u3Ad}Imh@dZ?=+K7F&9nMwS1^mWnqUX*P^Z>2G|9kN;}T9Z<vrMeGVE$
zsu!2NSf|reV1X-rJ4}ppQp?J|mOCO)`)*qc<Ol?6MF9g7nWG}{jCC^UcsucB?sBZ3
z{$3jOuq~$wm=W}i=$OxS14OZQ_dl*!%(h5Zf?IekD_UIa4sHU*5jSCAjub?7SR1J-
zn+HZaOg<s9YW5BP!3w(KJ>q89;4%0b*bC1hU`APlEO^J;Yi&6aLIb3{^ul-S{sjiH
zptg`<rFs!w1`)`B8~`G2)8?p^Ky5id5op2{DG6F6JFJw!wXH9=w;tVlu=V+q&HI<@
zY(%uRp`m(n;;4eD!^3_sPwO<oJ0;NdBoRM%mDmz1Vt-l=nv^9`hq9qwGy96=elLKw
z(TiI=#{{qc+#+<V91anMq}<HkNFa<rF%wVb0UKw9pz8IF>l@buP5KglFpl$Ao5aHk
z@k-R!<i^IeYa7>Y$mdOJeLcdwn9@r-(0Q}=jO85-2yM##$uZvc{WxWY%QIP;Y57nk
zCM2__Z#!$SLB~q;EXTxovmWiN6>*}Luz5rW1UTWNkoCHzypz>UutaystFTRvs(D5P
zzc3=}xKOF;6YN`cTxEp%jGdMqQ|<sF{;W|n0j#){fjEeXt?)(QR4wd|<M3Ik*rQ&t
zuhg>IL~&3e$axDbj#2WT!Zih&BV9|3Q1UWR=v40HwB%K_GEfX!27sL!%SN7Qf>9Ap
zMBf9q*ujWTO$D;WR5yc6uSLd;1!`6g6Xm*1J0vb~55(K=cd|a5e7XAZSN-FHytNLT
zIj4vPJ1z-Q6q4A7UHDSb#Z+^%o5h(foMyqtCOOap1vuA31ys=OahY>`t_u3ruHG`6
zqRpK%n+~5-F;c*XZaCwpIvX`V7v%YK9m|o*g=uoDS`}Rv?Pb;bei8M`T#eL(rXk>9
zLqjC@_UgdPFpGo>JE=!$gOh8iI8q8Kkc?n~@w<ptkf0WaQ6ARIKP6y23>hqLxI-2o
zXz}CnFo?3OHYrldh6E%8>O;9tDLE|}Vny0tV5{%7)CW}<6vbg9e8Zwb2l;wR86}Ag
z64uWoDbl(GS$2D!78y{|7G6{i0MY^45wRld6Ta@Fs=>y@kH8yW@`mKgdaUM>eQU<A
z_+Pf-X=Bn43+c6qPWo~X1vUbUw0Tj+?6^h&Th!N#T4XgTT9?S4+p<o`+=Z0!m_=#_
zCg0A!!}{UiBwet<wrDd0frc++S`9{+XY5EzcrXcv&$uy1%Z>V3m86Ejs<T%GaR)^4
zqM`O{8`$XT@@1P8iJk%pII8gpdw?!FypG0|k_!Lzy4!jJP)&uFJa?`G(hv@>RSeBY
z5tFg>JB%yKtumFXJhl%Cx}Pqo=SL?>M1maEK-q1Tt8VO;YXK$vY-)1-b8Ong`4!bl
zKmzv-ZXvs)MT%IJn0kfCYCzSP4mg~$r(8h_a2KhF1Jq5lsa#94y}hY6OdE#ZBu0OR
z1e&E*IeNh0;3Z<l%WPg>i3I)nK<V6NuoOGH$m@u&)@*~O5VO8F)8-J>J|n~}Ch01#
z42ArOLa8)?gXwF$!m1+^b8Is*C6bOVWCyX1#Ps+#tE`ja{LU`ei@m8FEk+!^1(4=1
zj(?41?(D}8$=*}(I1HgkR;GDFdq$xq={w7hYtv;C8W;7&E!mI-NJHSfC((m%8G<E_
zWtY5|JqR+ip2=w^KpvnjDS@?x0(=U|L1qAwkRQ-l4vTF$N-XMZDv~ZHpUi(vkd%>?
zJyGr&yVJuZ8nx6B^l_Ey;a{{p!Dfeik{-teT_a%wty-zz_NO~gt7zdmfN(qTDHKd0
z7URp+tAGq-_bN}n|J5)>n}>PJ2AAd1lm1KUL)E}AC+V3;PG|%*%0n}8z6QYv<^VZg
zfHSp_)?zaij`rlPct)rWx*kSb*Wq7wT=$@Tw_QnvKOtZ-3#ttFIbUh4bkse)O?jkU
zg1;`cXp#my!zVcH=J8*)GdC8S%&J<y=R6icRR~;`0IoHEu!j+;gR+^Wl!k}3+7D01
z?*wtdy3;)wY!@a{q)cN?P&H1K`2{mk1Jy8cKt1HSrs65W-2%4M#j%iG3tBO=_IVLa
z7<mWt3G}pl<sQJA6iG6^g*AXzwrWeN*cnHpbZ^y;%Soyus(Te5Zes(S+<`o@F8=!B
zP$>dLQOA;*B;%w8Lks!aVpov4JO?TKMv*FVElF3|3K_s*fcmdKt*IVB_rU^@E~2xe
z**o68<@4<<<#hUA1citLUZo?g^Hq?EmNuaCw3yS0Xd$ataZB(YSg+HU-6sF(Ny(b;
zbGaOE`WFZw*n)O;Uy=?czPBK)LgB1Xj?KJcOrW5xz0(R*h*#)>Ihzv&5P}!d1XROo
zW8yRp$g=fd+kt7C_Q$!h^znz$p-fKF6OhM!KLbie!{BDT)0Qx?q{Cek?(l=r<HxY5
ziT9%trpoNuU*P{D{woNSGY9DmqqD5kMQJIanG&}2xFl?CI86%F-&pKj$3~x+M3E*;
zr^z9Ng?lFlQxJG$x5}!ao;oQJ{QH_y!sNwwLdX??%uH1tcR~;InoL>Kle01{;P4e<
zE>je*5LN71g+IbOR3td3pL`-o-?>**wv`Dav<`XzNhHP4UWvoY<+c_0pth3Z&%P}=
zOuWm&6yQ)7V=2SyW8^?pK2RKbq1*&k1}*|K8NrG9fy<8s1j;fej6m{-bvG=;xIREW
ztp3|2DXIN6Su<8AvF1x)P3G>#fPwV#8Cr4s`>XEnqT%V_i*cS)sG!C=GLKXch$6I(
zVCFP+AB(bbE@4H%a0b4ZBI!{j77H&gC>0yTa|oA+%X55A9OXM+uYZ%d7j_ESmdoV&
z_&JRhR*D#84M1nz<)Kg#p~M{2*gyFO`x`aSkUKU8x%Ai546JWRx7T@jUv0CJFa)G!
zMQK4Ycv?Lk=X_%OExY5Q58fqzSlu(Ie+WUK(8TqM&*^1(;B!ZfzK$kqtzYKpt}jcq
zdWrhSThPbP;`ikXMcGonF3^#v4-6VtEjm+|;P*&+Y@(Q*H5_PGY*76Wgl^u8(yeql
zInh?V(}_q1lIv}0*Adu6TP8odC@s0)rVI4wgDFi!)UM0*rLKw(DRz{Es~#X9*iWfL
z7(=Q{jGC^#kn+s(-e&fltR*>Sddl7bVIf4#yF&M!;B>E~Aziu)Mbp@67X>0!w6a+p
zm&Enq3%o$cB(yv0mxaXDnBOylL4qpUx>G1zo+eu)!oqBoOc(o@&upUN8SvqX4lt4<
zdCACbgTF~M$Py)G9VLteh%n1rF-ta_SCuwHo6ec|<CAAt8jnv(W~ZD3HB9WB4JC+l
zIXZeYQtZ5Axs|0WtR78Z)cCe?;ev8x-m<Av?rnTmTQDJ*o)5EYAS1SDb~*jCAGH!N
zNexDApR^pbaVO=Hq;9OIE8R}YXp|ko6-h>Y=lUg_2<Zx*o&nr+LfI!-tl<VB*}ic*
zJ{A+~LYgJ)6mG8Rp;?%wOQ5JI5z_c%4Z#dtJ^ob@)_&y{s+Ib4{_mP-)R`vLaJtl(
zn_nZHh9!tysj?hpsZW1bE(Nz-foTULSQSPPsgh?YhVCNy(cRC+oH<@mIax=R+Bl#N
z>mM#ZsZ-<_-SM3UArO0`Ks_9863qBVuC2V*ru~IiA?*v;6)w3-V+Wt^1aI)!Yu@q<
z0jt$*9*|AID9F57^buW2CT0klXk*rPkv)tDBAS~N6;S;*f-D|k0^Zv@dH#GCfk;ew
zzg%BQq{gG^p?0oye5BA&HaM3-wlV2Eo>Z2^I+{F0$NKcXTtinT7iI^tVnHRU&reh>
zo2a%{4KE7})T2&*#e(x<z6+p*lYDBC%<c(#>E<<Tjt%XQ+Qo@nS|(3jLwv@-3ABwG
z2ftHdq7D?8zjfg;K+LXOnQUSd$C$$aGi(#ONDaXTp0sh{p_F#EGg|UPriD`Al%olq
z3qHbHWR)<%jcWvKm+gf$;Uhpmnu*d6H&lru!%KJOkm)G?$vj=noW3YVBk?R@isEXb
zBk}{$7|RM1#NrD7rf!V7#?j5jTcVTRS9Sx2RaPen8gBs7m^$)FXt8qBxogf{u@Pzd
zUS;+Un|T!Hu9<LS(M*sb^G=8ana!0}Za~7Y0oefU_#b2%Q}2n^u+MHfyf!Ub7U-+{
zLF5Mb)jGZYjH;UXzC5hDMHDbxrh#j!T0iJ?gexeehg4|4b^OPf2kQ<`ju!B`m(!~(
zqi1?&zksq)0CD(h2_0Hc`)jgh7jn@3n6LQe<*vomNeew3Hgl$OwFal}3k<DEwnYgm
zQK6AeJ?B2}y*N08#<)h2^G%-wIIRY#n-H}}L@A>%ipVK@E1i!LwBixutLVOglAKJ5
ze|T8_;<ygrd6m@bC^E6T;)9^dhCf@{>zxD2*``jPwu3>#(C*NVX?K%S&%p#5)@q=t
zMG<_Ax~3ahva-HRLzKlwDwDw*6Jj7oFrt|llOU`MFcw(mdGc6SUIg>7gBb9V&4xM1
zK9rl#e{2gkLZf`2RXmnft1E256c^x2*pxYwGK*|DGlnF~jKu&jL&uJQ8ln>lEwI|x
zk{QELfSQ8v-ibs&ZEFLY3RbKAH+A8tk!6^>E;E6UQk-qF4Z-Jhu{hgL;GmS6r{BJB
zxiZg~kJw~T5?!aD0+b5$x!`rM1bc6qAR3_vjMB&@!{|$Swc}8vwGj(|bQh;%7m0%6
z#d8iNLBS1_65phU{kbg^KuJCO$?W*KJz5aifCj+_`Cyno_@hATeU%`B@X_6wciYug
zW)e_7>E!D22sTNqJrULva{!!u+Xe{4s#NT>3(-eOzf?qaVl%LpKANp3`Z5hHQNHRT
z|B0hARUl3orY;dCFXjRX<0oIJj*X1^(!6G}@{~Yz!Ce>@g#?1^Ah2pHKNawv@BoS~
zXOv&uxWRSdU2oBcEr4mOJkuK?Aoh}VaVPAy=`H1qU|_M?;wUwKz~OO)o1m8<I8X?-
z8~1%yaVy+<tH(XFv{H_PVIIvS?r=o>1*)0L>LK^Ikqa>6mM;jP{SNtL%3H@3m4CaC
zq>I=8)z0X#xI15up1*<z3s!viA_0Prm5yA^qa^PhpU_JGOQ@+Yd>(yi;r^>LFBKtM
zKh1cobGoG<h|FPU-(u#ffK)a6RkKq=WT)h!T~juttmOV|A7>nr;)>FN%+-d0@~;SO
zDNsWP34L9^(NGRbNi_WL8AydzQah+G!hThsm&}azpoLY|XNBH~SacOT>iagk`bg1P
zkTyO@7j~{F+{W*<8rTImT#WYRd(XcP<6kkYjP<Rr+9ojPX1=NKV<T3-JAaEcDXA}p
z?jkf|AJZ1tD8unMWM@qbU~w=#T)dheGm1jmENz5Y^fL31!41k+{wThY`kP{A>v7bj
zjj(kS8s;x6-_7c5<<{?r*pz9AQgtvj&`>g_tjld9#A_*ba)Ml~6N)l+il7tw#pJhf
zynh&s@x>IQFdC&utmI)aW}sG{+t*ldnQc_Ij=(qUdeybdJmZzz%J11u^Xb3SK()gM
zTaP!9h@6ry0?t&Mi~<j|Z3g_Z?p1WCYMYT6L$U%U_+o0l`QR?20cGk9Zp6(c7yvA1
zILjh;|NTD*ls|6-3r}U3%&&X<5Uak(F`B_HRuJH@I?Vt@l`7*$RQbgAjn?0Z$B*(#
z@!BLSnsy?2ipxVaL>+z1aV8)rnDkOsC+8_)20(`%<}*pK7e$98PaX)~k+x(E0wqGC
zLniS%+Juo>z><Hd8yBmi$uZTVz+*5_m)Ci@H0&PxatZ;=5lmiwsL|UR`agbLBL~Kh
zH6yOn8}&e^BHvZg(%ac_$SN`>=r<%kW`>?qF0=HE5L@DetWAg56-jt@UvM}eY>5xk
zA}ZZ1Ut%7#6-l~Ltn%G&CTo3{O|R%vxilA4f}Ee}OZgG91!z_ZvX+n=i0euvvZ<Uz
zD@ZnzYe?Pzi?A7KBcf49kcP{qLXSG7NAfgFto3czQc|qSIq)N_Eo7ISwK-wgwNu97
zrJX3mwU+B$?NF+fa}Ww)?Qw&VIkIlFgkWZACy%9_RDK>Hi7{_hl=4p3W*v#nS&-)g
zx-G_$E(oxc^?9FOkd|OLM~VbeP}ubK>2ED-ltiPPkdT0-l>$NeQ&64tfrMH%1Av6}
zPwm8)OTWLWzflBz8q#K49B7=6^L8GCwgLM>HhHurKmD0<4R8$KzWvLgy%(kw-0s@^
z(qjc)RgZYzbSg(s)|!sQF_9gQu+d*`-#S0@#aAEv#n)|!tv5vHi10z_!Wk}@F2!Y8
z)#2$Gr{LD511v8`SzC1|KLf0rNj{9F!uMht_C=z})rJQ}Glr}}7c7>flV9!LVm#H`
z&5R1?e6b%Y@G*|<rEf4*i*ScAIzNPwd4cKZaX!nbkTT}hLov-SKfl+EQ`s`T1KkpN
z(c@Kgc)O|7XJ0;!$OdnK=89@hkbAL<vN3ufQdc83S|8P?CG1HNr)&i$`uORmVLj6M
zijWcfE^Cssfg(wq`yz$2_LXQzy3ihe@(Tzw(wyy<ScQr2Lc2dw@Dw}Hm9G^UWpbCh
z(dj3dqpHE$euaSx3UL2=9bhzS;RK71%WBFzJeDnK<xQctqYlbLgJ@g2Z5pRPs)8bp
za9P>BPY#|ezjLIepXvPQXJ4i?8W>|{=e{nTL}eyzRR3OlVCiE^5R)~8z03965G&l0
zH~TN@n{EOOpzz?e?{^Q&#zz7s#3K!duxzJfN{|GJ*dg33+&V^d##TrWcNAS3R~sZr
z)O|4#CBjsheTo_*Dj3hY4^o*_`v$icmfXKF<~d5LPYp(lQV-7s2&w#M1$Epfd~)T4
zV>wpIqy(<$2HG!kTEtUJddkKtM~Uu4B@r}{tK_(D*F+Fa>oRqEpDtlf|367J`A-u9
zhoqnLe^h{4|4aNFSQYItCh*HvroTR!o!~dGksZ=Q&jeEh<REvn@|`Oh)h`8RG<F&q
zcg;xrC{-_UmBH0CTNWWp#bM-sqJVF=cca)z%FsKHs>Ht#z<CmPAeMSnP0kc(M3hXn
zV&)~K?997@r6Wi&j~#VUoAs9DuG!;z4|L2~qTQ8Okx{EpKSFv^?qaA;dNXQZs=V;|
z>3@BQw?(Ni&rg3>x)LdSpKc&mFj#MMrCb74q;UEMUT$xGetYZw=A&q%O59PGTvl)F
zj|RlHJE$ZDwH>Yn2`^RwFAI{Z|3%8c%6DNfsIR(JBu3i%SQvBHyI=wVI|F2D2jE9J
z1h2AKr`pVf$xv4m2Mhd-AF#Vn8_;+UBtY6D@=&N3LRQ!s(%Tpp9Tf2C5|lbCavQLl
zQuywO;HdNM*<Fp%;xw#Ow?5<-z@prh1`W6qldG1KM#I<xL~khyQoB*-Am{cETf0Z&
zQ7sot;;@#61qhl|LNd9R2>KyCAn!z+pG4mj@}UtcFGvCkTWxx%W;H0Z3DF%F-v~N6
zNfggjZ{jLcL4Ou1M@uD-bY<Hj!L4rXV_vUbF!vD8rqwfMd!OQWtJzRtg(-)x{I>R2
zbQmpSX{b<JQMtP@+jnf`5}3#51hu<VK<hA{gt@Zot32-vif2Dc6|21{ra=zSe&`h)
zo}F4KIn7{NFn_C;%7e6&Afpkb9JQk$wq<$au|N~+r&PsaXSOUPNH13@j6N9k`*`-B
zH;U9Qrxo^A+yZj3+i-#yD7(qt(EOn~6i5t~KATj=?Uddcf$_X_?FlsD84eBXVEL~|
zjEa1~_R$Q>!=72yhhl3!)B40~iWNsRQTe_dp>cJW6iTqTewRW|X<gikY}~kA*UgzW
zx2+GzdlXw6N60Sd7_gL<&OOIG-}<(01IJYOix9Zlx|1e5j>Y>`U)i_7q3I$4`U~R9
zfUV2UNZ$8ZXQV?dLPr}i`xSF!QjJ8e{H&wj_|L2D<Z^8+S!9o#9$i<!dlIt?G?(XA
z=b|2Q2<v6TIyNEiWT7E#eFu@98(PX~76_0)MD=`kq6PF21Yv+zfrUyYKAPOWeTRLK
zCs@GSXt}gZS%4iy0xeNkFB2fh4u+0N2y`fQ!{{r6H_}7k$rMK$OsIPGj&)ru55zR^
zmU3nsbKWi^UI~&Z{L=x&%<a#w6~n<j<aXACh+5K202Pc<`o5jcMp<#o*+tfHL2o2M
z3ygAv%(~KQFgRt6$xaH%TICxg1|8<^m@)}A02do7zrvLgt0c=hdE@ytYbpSt^=NZS
zh+2>bjQ3j0+G`8WG<Q{?1~+L>s~w){k2z;xJ$~yltd`Xrnv9Bw46%BZ8FlhRbJ6i*
zHR4UZt*(>w3D9QGvl_&$$&H&_3CEo{<RR*4e!vQ<Q~|9&t|$kv>cNJE^pDv8ogjek
z+Wx?ow(uGo8o_=*1?!K)iK97ZUk)=fBUYsR3~Nv^3*B6D=31HSSFYdq+2qYRhuHcd
zg`(eF$;(ZN>UVZ><C-`2Pi0eOMFmI%l6i`g?uIO-rlcq+qQXWK${;AQ>)e)JVsrqg
zI3ZyrzAP9n6b<ly-%YtPxqd@85ay;JYhuIeAgxaE49IEM%kc&82>=k>YVrW?+hO6K
z9B4;)D0<gt>z9mvZ`8jeFunqH&MPDTR3Ldw@hmiq_d3hfQH!7lafCXqj*F6iW4Nx7
zi~{}aot9N)R^4rTJJ6M6%!jX`nLUF+%I)U-c}sHP$0Wx8bzEW#f5_Vdl94nBEd*-B
zLmHI{dyit3zz!?)7RAovG3~<-z{Ef8bNv%Sl#WcEg&~=^BY;vdnMoa6-OMqp%7AgC
ziw1xZ>E_VbjL3x~;LLe{GWw@?cvV>Wqp&WpX@th!RrXIR`@cN)e<k?8FVp)|A)M8n
z72HW6XNU`t3Tn0g!F1|RlQx+rU>ZSWk-Yq3z6WZux|T#ntZq>|iAF`X=zeEOrmQvO
z6f=T)NxP-q5K44pwF>Exe?sZ-c%s<~IaHv&f@@WjB;98UPHn|^(XBGulfJkjUDB20
z_1$N-U@Rqry+pK8<q`!eq;aDYWl+{~@RXQJ-D=sf91INbA;1#|!nEKv*d3T?zx?iI
zt(7WP8v-kPv295|WKz^`L8a90$yAG)mbGbSr2R>Qi?G_u(geB6Lhfo>e97*px(d3c
z#L2zsYyQyI(t!dWs=k4D=l^f-Y<lZFt~`I&`V=>wQHMe(QnKTojxvEkTaw#=Z7G)Q
zP8<Zn6-CKRNL_*y6}KC+nAy!&m{mKw4q%|s-eqZhvHAV~=bWl~E-z&&vATPJNeq#E
zUh1hjb>81<AHSw5LcV_&832<Pe&OzXn$hu+)?1Gv(Ru{SxYY&`-WZE@0Hvf>eM~z;
zs9u_8)j*UxqikoA_HB6cR5$$1!7gn03vf*Lgq_c<aXwwAd~D6H-5^r4pk3be8;VfE
zQf|<|<0+or&G}n56#Uto|MbSAy@#h<c>4zM+}*o$w;Oj`^mcthO7q^qFW%IzUYSBo
zVUug{eE`olGgq45^dTV0ZwomNRPr2Q%ED!%o9m#2`+m^oA;6%=iu0>&N~rf-yaP?(
z!4j7HT|i`E_s)gis57Aj=+AT>=&h3@?3ja#kC0Wfi}`)!;^VW#$(?V@6P13Nrj$9p
zIat;BMKVP<UpgUyoa||s0w_}T3Rd~Gv{+}Kb$ymj7y9gNQ3loi3bEqr|6>2~v-wZx
zO5y{gpbzJTl<KI!_c>2wDv8>{s!l?UVf~ZyMk@<3H?7~HaF(;hmYl<q&*HTB8q`Q*
zzg=#}{8Vkuf?V(5P>Dd%H3e*G??6Ohq2+FaL!F_3Q!ToNe+jzEFvEVIOBTBmnh@Gk
zz^RZ+W=XWK)Cz=oL6WqkZhQ$Q55rzi#?)RY#O>X`6=JFN7dEyFILBIBl<@0h6RF_|
zC?m2w>$K7Fd*VDCo4&%v+1DYzZ<t;q6Vi|d7!6+wun1xYq>X#s)nkS?YI##=^OqcZ
zF^bsC1qV?D8^paGITZOmNPeNMX#%QGzIcEa*Rf&k1EX8AJz%K-S5Z{0_G}fsB~)5s
z@WvyM2hzAwk8j_>ouy16IX>_m34p7NiA!S$neF6>r-<a`)7gjncyzaKMj{T5)I82D
zC(}lMDPGR9K94yuS7TzxnJJb`ZqHu)pQn=hO;3r6BNPvndJvD;Iro;tX!nw%wp<!Q
zr)@lmgXhwU&=BA{E5)go!t9a7V{g5l=^jpV@@60pLn>Mqex~7=!~UK$5Htn5p_=WB
z4fRgR8SPFRZgs`*%;tLb4EmE%t`#pd2xVuHS^k6v4FTPD6(;j5ZqaZ$oz1ZOtj<t&
z%{~c?d4Q~(*!-z$yg(|%aCV{Z+&#b>Fw5Fj>lPJau28sTaAqiZ33w1zO4R{}i?f*R
zB3dMp_XIx1K1J9w0%S~&1Nh!Te5vf~2mTb~@&%p@ZOG2u50oxqWrdn17l3Ie<uBp?
zr^-|ZRUM~#t#eX_XvEe8GqwM8!aIiaa{j^HnB%9PeCQBI7YeK(Ks<7oHcxw2o-Zgh
zcKVR`1RB$FHxx%US%>Q&sbRhS`c~9CI;%)2g+s0b6vbb$#rf2Ex3Qigc}wxKnW`WK
z?Z<lnJ{(E_S-DG2;N*8pkQ#IG1VpJnq&27)K4{qr1|(U!Zqk{r6ASgl`Q4A-uZ4&M
zoEZUH-aC#aX!?2!d4Y{Bu8J1CPtlcvHaUQA-oAZX+kp_$!&ojSZakMk8soFGZeSKd
z><5VXFI;5)k6Xmhafdj!LQ10-Es=e@RhSOHYIMoP<&V}~9Is&yDB5~wl*7-|EkLG{
ztR$f`+&OE=)Y~z%VNdWWhYwJsMG(gnG01W$GpO)bH!MU#%KM;wT$!&ER8#roR8WV0
ziCRBB4YRM~9BCDLR=Q8NNF6p$&SQ{+f0_5Rd)EPDqF6Rh47<lOocc^@>T^;g_%})f
zGeRwac;t3BAKE-L&Y3~|O%;HUOf`m=!i`PepLJI)U<uyds^%j?W|YD~k*@b&{LehD
zT}4Zf&$$o2mk3<`^I1!6CGY>mpB3M}(<CARtGFilm+qq_4cU3h_IKLK>}zU$?FF*m
zqG>bOB-o$K-{1a-V#!B)n^IOezEc|_9-PO@dTYpdGG(HOy8Rw0Le3x1KQt_GqY^4q
z=Qa~zn_?kWthsOAiB7nGeCVc(5KwNiJc@BQJ<PCO_v<sNS8fg=+c!9cIb|hZd?ONK
z7z8aGEe?l+gadfZpN%IdfypAh5n_l?O<Ae{m46KuW$^Yzp{*!a0F^z#RgXjw!l_dD
zReY?r?I%B9aWm{YxH#C=gl@2*&mReo1{)#cRPbUi*f*9_U{WH0dTyec+PL&G>&S#N
z<JS9#2Aw~y7jfOQ>4&gM3_tv^A}aU|_gvNFa-?kVADwwqDziDMg#cRe6wm~yVlo?X
z!Wx7deTfA5NA~oN<4ft%Lc-Y#41^e3Vqh%X9<yGsp)Uki;hT125R8k$bS4|C)65GP
za;3m-!O+TO>~|7&QXkyh_>`)2<XIq@9&_r9;Gy7nMc%A^$YZ2_6sDoA`HmZ=Ycs?x
zvjGprIFdgF792?KAkH{d^|N`2*{7PGH9}D2ZWYDbQ&f0=D`&_`L3Iq=M=c#sFivV#
zBaV{W!>^oWyf}SyMMlD>_uk!>^FfM?ROpxlK#K!GCp0*YM#}i%Ha!md`0=JVn*@j1
ztQNi4rQsY+nbpTc@-X{984h33(w`H+_-7uKI$LuZ9wIfQQ7H+JQuyTpUL`iHY*XnS
zW&{*9%YK0X7AHE7VZM061#4T72XgJ<fo=&D4*5SN?~(MSHSlKJ+p$;-KH<&0o%5e8
z-7^?gVrnepIynQ9F?O#SBD-91GLiiEP^ErSZCHXQJ3b2=QV%GQK0J&2C!{eX;{-Lw
zWAfCH?xj;?B{@L|=*$coqZM`WsO=GT;AqGbP;Zpc!ha=%<{N66zAds`Zm(TLJEDmM
z%TOOUMmxLIT2~h%YZ)34Hdra1q1FOp62Xo6-#J`PGgKMzAV=w?n)qb<%6a9ZvR(~z
zqn0RTOvEb4tf4Vo?ywCOR*5F(F9Yx7_XUy1rHK_X4G}1xTSMI|8}w>Vui|~GcdrJr
zh8zXEh8s+msauk4a8dj_4o089_~)*W2f9NB!{aIG^qAv=XNDdy>1<3gJJ^g_9OC#W
zJ8Hm9FvHqi0+c-_1()vPmN^T=+oNRhAE=S?YeLb05l&*&sJ$Az2L=R6WdEEEtS74o
z7CM%_<||#LQN+SN{VNmthBr4SMH^Y5fqnK<GX{ph3+^QdAG*-<t-+E!m>hTttl>2>
z;6Mkylcu`2WHPh<qWNw!>7^-Vry02^;HoeL29hTmq4KgZ;Q1FFhNz90;^MLVjMhRC
zM7<R!AFQDQnd~@@BKYMz8<b2TJ%qjb%QCUGTaFj?b%CLe_Ho{Y{974zT;UC>ZZJmi
z%P1H?^hUve=^wU9m2fND)DfCcRUyZgJo?g`(zZ&wMfuk-N|*oMcjzF%&P8G7*|++j
zZ6I+?zc60OFOQe<q5Ez(k<1=Apl%&t8>dGJj7V%#>9X<*%mF6t@7oRVD3rbaY(40c
z>V#i|4f_G!NZD!=`B}TPM>aNgrfN+IY52#D*=-7v_n%`eVpzM_IzM+WPQv?<8hB%j
zV07C^Nk&hpGB&QFmD9`byTD}f<jt0GY5xLLT4U@)%HrzfoA85Bjzo<;UaP<2S+1%>
z5Xfo$if&X71xCT5#_nGQU6Ggj(q^mgyvLo4a4$@LjWBll)`QuKc=ll>q_#`r_dYr+
z45Rf=$mzAxa<q#3)YCq7ny1f$VdCsfZ@eyl%kJs#;C6q^F4#h-;mG<8a&^D^SNbDX
z0GNY+0GCR`#MGr^%cO^Gs17ubLp(3u3oi^abP~6ne9!W!X;TNP-Bd(3nG=L9R?bNW
z@`uv@NKED6icPWSu7I*6Yr<Lv<2q&G97WTmtf6L0=Ol(KFXwzi%?@Bv>SzSFyEVEy
z){MRlfSeqE(FeD~$z0X7b!t?3r`gV~fpKsgXU->rvX|X3ZRmPet*a;aM7Dc{n?bn2
z`oWmSemRT61I7dH7_ZaXO+~PyHXr@Hi{YY|Te$z@xYJO!d8nf#Ua1HN&+e~rb|H@~
zzw@bdGAe?CuM3&VF<E!4Lph=>L)k?p?6T8Sot+{RnnFL>RBW72bYN7UBZY(RIh%On
z(p50P?HpyyRn~RbD4>*FXK5v)b5CNNZ(L1QeD#eBJtVQxcW=81zwNw;^G7FfOV$6%
zXpFBN5cG73mG9%-(pECncKVvS2?{HSOlR|W(|9OF!BXMFFjE4?ehhcT_@Dyfg;DCi
zq0_go%*DfrG*clMEJG1YzwN=-L_8H5(MRHOT*EfDDquQ{B$bMrm*rH7Hx#YRYBmH=
zxQ(J09=eGe-%G5pn^sNswlY*@2NT<;7Ot{9_g?&&alz-7HZ#na2ka@SSe#!D6~(ba
zV$hxqm}@6=q<z9?JlTqhFMo7tjFVxC(|7}9qg~5A_?S}!%8@c+eR!X`IWVDV@w89?
z`ne|kAQSew;|gOkBlX~Dr->32p$8B?C|e81r$^|DqUhRx=h&bSVnVkm3RiIdl)<6b
zU6na_;!z9#hHq6YeCnbfZroi#(Bam5;cPxu@qFZz<Q4f!%!srj<^v#({n9t1nj`s}
z+~IkL=Vd|%Hn6&MnTvAzLaod~>&gumrPE!>WgznG@xG#XZ=5XX$wqz^#^xI$PV^DE
zuj~{+t%SKqBbJ(NuLa-V=e!CaB_|C^shYJm?lw$tT!xP5Mo9ASmtNH!Xd+II5H(G#
zc(s1_wCyD<eiqwvoq~ePVx83S1jFSJ81+XOLf73{YWTn;Ap}dG^-rpkZGUL%(mi3$
zI9`B{QQ|~cI^n80)jaJK1%<1H%ijExXwD-KrtmUe;$hrw^Q|pS*2FWW@Ib_JM~eev
zsRG@sc;Rn*cURp15^8B(^Tf3&Gz1!X<igVBe)fA>Ba^w=({sut|2`~^IHojQYzk^;
zNL&gn4XdXqJiH2<Fg~$*C1QXdU3x@T57rufKqB<@!1KXUk%zOJ*kK_ppx5%m0*J}E
zvUq#{qH)T60W1v!F)$;l@tAQ~wM9c#RH}#;%8U7}Xjt&#UuYyN&4<?b52Cq%E<D)#
z#WfV5oipZW>K>?R?K3JkPKAK99$<DggEjjnmk7gz&4)s0a!XJs4kNyVjh8xB3~1DV
z*P`OVxkSrdW{qLWt@))5+>Y^OX&GyJeOs-c-ZSHrZrz)FL!?SWjsQd`06Dqk{D%O+
z>x005AOOH}<)H*B!K1Ay_<Uq`q>z&>cdWw-8T=Qi3)xv#hB%tzHplQ5n*GE6(H^+^
z2N*vC54hF8vB1O<`<7M1S1P=Af~)-)rD78vr3T{L_hhi4ZQwuW3h90P8aDKR&(cHe
zUYV|A{BR;}VyT+%$yyXPOFyACn-rCa^fe9TEimi>%oY_FgBzpj`Z?5eaY(XujOVUo
z@;86LQL=v2(6n215ccqRi->iEJpFXqi|1`(BVH9A2JJef1`5?O%koAelA#t-BALQk
zE;9Z2_h67eZhwVHQ&<xWZrIS~FEb1N;gEA+(AE@ic1S9O?6fq^1Y6iV{NCwSsSvy5
zwkZ&WuXHuOsdU<uH14t?M*Wzc(9#*Inssa=ryKSDI~M{cv_}e;h_TaSqeCZz!NIfk
zv$WVA4n&*>5s#Ee^nCv)sz(8Dn)2uZ8+;;t3a0Je7R-?H-qkS>Jjzn+Xt<&V_jtCY
z@X#nd=*n*pUssZdl%d8;+UKOTnfXvX?}+t*{IGQxC~pjDV4*>yf^J?K?JgkO+M>lu
zmdA(*Mc>3=Rt5+_NW&?|NojcIM5#WtgFhA3{+-XJ#<l=IIVvK2C24JFPi$uI85Bt(
z(&&U%@FYAQBsnq<teXhhWg>oA4tzkg`e<wZ<N3`A>5WdWIP_N_tWW${i4DF0L&W(a
z+o2A`VkzZb__4+|+&RQ<{{G^K&v>O7s+77bx+}RYhmG|0P<A%N6cp=|vJGr1WZj<5
zq9|!$yKZyEN_7qy=?=Q&>Iqg)M2#|waw6e*#jNMh7U}Q9P^_-&m5!GV87a}$-xzh~
zt%S+ib&wD4ijXoqSg<_`skz9anJV@f`<M=9keMNj`d^=|@Pq_30`C>C7|k2d^7?eV
z1oG>goH$ON+}O2BR=YS_65`mnKL5!kXQ%XqozdNVi>xQSgvy>T%?(5!RW}DqaqdSb
z!mLyxs=~-?m+cCh5s*#m?FjBN6ORPW%K$t(;}OIb^|6{hWe}y$8UpNjaft6btuM{^
z_2%a($grZy5yat2%uUdM>@`3&O|l&?JCzeCytCM`MC$NZF>TP^SgUlffhZz%#GK-5
zd$a{KcwdbPB+yO7#yr=O7p0}aG;E>`{<Q)1QXvx?`r20G!58~6e7InL^=l}N9K>+y
zCSjw^@r-vJElC~s*!9Ky`geaye*@E}Ndz+*k_47dzktkHC$I1_n68N*&<x#H_s*2*
zSut>=imgbNm7*!xV4Qw#NO*lQ+ViyBm5(BfDp?n%s}Qnc0^t~yuQ9`bLRWEV1}a?8
z@A8+iBQg|7>=YN5A}YBe#(-8N{vH0B#-X&vsk4cJI!?t9!|T#p@l1dzKgewOSgCV0
zCCQ|_joF`B<S;i)J*UR1^GUo>oi%uIp_B^@^$DiGGwOs@pT%r^)=Wu1!%yXJDnS5A
zlvtNWp%R`*$0NV)(`x?V#G-Hm9xq)^2lCim4Ykqof%CrwH$mL-Uuo&_WvN=;Cp&&t
z=k^WU%C3NlCp8~9*d&Z+_`}03d?Q~$dTK)aGE_?soxqW@n{O{b9o`bSBs{h2C2XyJ
zKy;!95wCE%zME2>HI;(TSf$#B%wb!oXi2Y$4JQtok@^5vh?os(!15U^=m94A{-Xy6
zi+|+26&8X6MS;LLv&cIkzsHGBB!GmwlY|aJ1)(z9@{5A@%Vvg*efiADwD|$2RiDdK
ze}HT_R=v2?UD(Y!KS+(<o&y1g_!fhU##nu>W~@ag{|R2XD2Q*%*LDG}8BBBI>E4sD
zAb$~DAR72=;ymIwaaopmT`Z?0X3O0eR#sJcFeG9LdDtp{aK2!OoXKqAvx<uFl}si%
zyMZdU1PK?Yt<x->lsp++ge)q3{=oVmLspuT*lTMHs~$giYwke@{o=s$Xog7KMRrrj
zmZ`+M#CPm=mkcqp9YdDRiq3gi|2)(E<?5Mt5O7D3n^>&a_TDp*Lj;j*V8h^{z|cdN
z^7C~j80?*t^e<7~o7_(`oYnog74_61Kxo01YF+Zv9hL93L<L03eh3uv2hCQw#g-*%
z;fHfdBZ!5`e_VM)wCab?Rl+bhSxUg-^$tJI+&YS^edYc=*~49;<LX2pHJS10deC?g
zZbI2fG~7sn^>9#asOBK)gw#5~{9L01=V6E^gMMjptR6cMPR;GYXboE%UZi~PnCw7J
zTw4P#k@0f}%!xL*;|e`U_yru=9-IRe#*#mrEhW$B#h<PsTcDGyzEiMZ<p3TT`U9Qx
z)^(C1FTUQo^x}W(elvq3V4~WA%mdHF5x8)juq8N2Ygs=mI2O!;lb3EuP*v>ED+_kV
zEPWI&BlQEE#1fjHqr2KB(SDZ7r<K3%-+Y>TH#Zhc%%Og62E(YvVVL$$@CV369q)@K
zgf&2CNG$ZSkg;*jO*j+y7T&Q&r!uIUj)GD1;#&fN8muP25fHqJbS$qm^EzCvM%iG;
zaI@;H03k*OtDHE)jQIL6Hi&HowQkz=n1YcPp95Ivf+++9vRot(xc7YV)jq9aJ{AjU
zWMY+7h`aL2fU_gI)`L{vN;g@CJ;EAb(fs*yxi!)TkWTFHql@hN7<7HuT(_&mniHI1
zXV5DO3!r!2tgQuTyHv6`<6wE@fPeUhnO*r9D?OztOwAquvEh|3%W=)jL;^v*zudL5
zJVh1+v1I{e?VT_ve0q-$PF*SnNX3pN%!a)-_JN?&E?i>TF*hxJHLtJySjF#T2Fhm#
zH2AL}Dq>yU2gD$#IIZI}C22aC49rL~<*|nEsO)E6*_!=5t4k_38;BN>DrLEEK~wsK
zw$tt#^p$d5bzhPf%!<_T24!RIfc}&aVbzNA%e6o|ij0Pmgr<>b)d0@~_u@G8$eCT4
zP7D+I^OJzSkO=(-W<wUYtV)=Lmi-EI31*kGQ3Z&SH0gvakist>s)SwJ+ZpL!!!nD{
zQn7bto&_gt6!+N+K1u{6v7zq&K;MV&cMat7$^3?rH*WdJkxV237>zA}F)~@A&9i!-
zn_AA1FL3};I#0zcYwAK?@?M7wfRq9eF|4cuQ3m77|7K&#za;}h#x0J2E^i1^V$1QB
zKusTAzxLBj{rfZh`%|C$`_XkIi}fp~fXP-u8-aCpaW@f|o5c(KrA4&_2AyF1QBMXQ
z43nqh=0ngYiw}oXHN&PVZcr?E4P6)FQaDL(STUD)Zd{;vERP09!amRg(sXL%XhuWv
z0Hlbx%UR9e(6Z<E=D!)H_MjNlgD~ZO`$i;`L|bxI<(vlv*_M6RWpHbY#%v--^EcIs
z1l!ZHRid*FN&j41EK2m$$E|0Zc+A3GNS!m3=#mA`!egqh1F8kmEE!wQe`E9b!PC>j
z-!k9)>#N@iFif+kbb=mh0n@k<lCZ6yU}Go<dI_A=oId}LUg3qdKK9USVhOltP|NtM
zyNzhemo;UtjNwCF<7SodE$9D)kw*UU=}C*&{}1-&pD62kHe8XS6A^s#Y^2#QqtJGs
z2<ACrY@f4nQn!M*M(jk6NZU-+N(${M9$TE@*81+R&Vy#F!zyqcsV^<8qE081Q>#%Z
z>8xgn$*-WWuFJ<^H+mGiCer31iHRZ~TOmCZ_dMKWN{@YYN!C`}9d3iHLY9p*4d-kE
zuFN+877l8dbz!Y|b{V&PGUXpWiuwC0shw{Wo%4G$MAqO5(-yO7%8J}<ZrsXyeNcJh
zb;epcBT&3w3vV6v%&L8`)`<GpfjUvh)S4g`t1avHkW@4h6r*`gB@X`p(EoQ>v^amu
z(nBtTY0k7l;bDy?sh|xffZNGGXuoV(BP?tzo%JiG5aJzcVDRE{`TFMH;ZU7__wDw{
z{JVcc*Nv#9iBKBagn6zRO+$}kY-H2s$tU&4wN1{&Iy?k<n>VjbDek`+w|zvpIrW>@
zxI#5(EcWfqpSGE9L|W)_{<rl=ohR(DNW?tfv||AU1%>mX5Dl$PVUq!(<ubSHqB683
z^ihNdwJA-9mwk-AD~3bi`}J$^&iAih?^=Y&KFicIzAs&@EK=>=2Wm8(G54}nFbJiz
zglj6&Z#0RaE#3r&G>PCO&PTAH4^`lnee3GJCD##Z*zSuzKjhpaJJhmH`*65TlFuF{
z4$S?YT$F9%zY~X*)p@c!rK1M7$V&gC$0V5M>fpv_Hk;lAhTyNY+SD{TbM+t357ppt
zeslhtdW}pT5)?2kA6)zG{Qfl};;jE<?=<s@P>q~rn(_n2A+rbxkE9s35al!!<Z*&L
zQeQ!F0@kFfat&R&Umm?o@R!hAUTJ3}!ips^aml1G^qSD4oaYIUA3l|OKWR4@Q&l&n
zWL#n(3!uk;M+YyyCOW>0Y?4}v0F^m9Y0Vq8i!Z*By9;4_v^=e+k50c7Cn;OEdL^bo
zH-Ah3g=2lb!XHhZpGGf>bc?S=j;-~0d7rAVda2=Zi=AdW;9+Fia_SIAtTcy}QnqXu
zKF4ras<54oh9T@A1fM8QjD>A6ej~5~8qObQy;E?6lK_z*U$~N5GD~S}Rg5~LbVFBd
zl&y^@?A+IojGn1O`(c0$@wM8{Ue?KSrKI@S_T+>%Ef_}5w(v<KLa4r`rytY<3i@yu
z!!8WCYnwk~7}}%{(r-aEw|R0-*epKXCUS2=NX<My7oQ<h`F1j6OvxaQeqeA7<O>Qm
z+)P$ButM&(t+BE#k0;<N?_;x-jC$Jr=<gIh3y;@}Lja%)n4t5AnDZ1cOfs~2x7z!{
zuwb>_ya#cKn3#mbX(|jS8kh`W&u>J}2v~5>hMjXpS^~6U2c*a#m`*5BkR=>2mZ+56
zI6Gf_Y@{AWK5RzeG62ZSw#9lJC)17KAxtjkxi$a1^<_}rnR-%E3Na<rY~ydoSX!Br
zh9YC}`uu17@5;~1HjdV*!B$jFMP!RFgIwa%HMNSyb}hG0F!)E?7H$kd(+PSdj|rET
zwFOX0+HWj%1%TGR9rQY$f36G*Dm{}|6ar0lnGeIH!l7XXH&T&yDzo(L!$;IK6*rGM
z(}^5Da>e~bFlaN0Ty3>HbY_2pi0%A`G!7<sM7tT9N1zVLsTxfc9EbRZgDhauJ+i7m
zt{z+o*nvd&LF|*SO<qvyD&Voi(mC4fYm0^rX#r-gxf{Y@lPSAq8z-2An*%tv=+qxR
zysXl)fEj|S5fB-GoBLFzhF@;p>h$7+!bm%<O@cJ5dE~)WzF6`jBWgVoIvV2hogkwc
z-Jl~#Rml+LumTg2+wf`mfcRAD`k^qQXI#3~8pbdNg&9I|B$*@;UjHGhF^Aj)w#07h
z;l*(TQu;)Ai`ga?B%U!=`!wspOY#m5_<HAyJx;C|*rh>*R$dOkDl4~6mbn9LbT^`u
zXE_<n@MB29PX4`1AB3k~Le|;KICp$K>z~jIU=}1)2|W<-w6%g4L87VvaHbdfN*=<g
z*@m0i%<Y{^w_Q`xUqjr6VMY6*XOy>F#;_a-K;$Crb=1Sf&TuCq2vK;4uB`r+3Wtk}
z6FhtI?Gr_Ym>8V4mG`S{T`TF7+8lzGQAfej3{5d~o|)W4aVv#DqffYzJZk2ygLqhF
zK<nn~nfR1NtMX=-IRqkbXkl%Rp2&egRbIO(iyObdD5y`?W4h{&E~kApfK4IY83(+b
z2VpAAB06zYd{V*0Ly^-Z6j2XJ$i%cZ<jRp+!a-L&T8X%<p-FP-8=Qs|=U1|$vLh8i
zEpKkb3saHHdE_%$2b_uY-rZIfrOmKw&`M6&BSd6vZRP73hEK=}sV7c^K1GPN>;#Y2
zREc2`p(|HeNPs|;29aBzD(=dTN}K34g5!)<7Hwt*ho(`+%+{4APKF~?6xmelc@Jb|
zD9Q}S_OTkKO3pxhec^0Ws4f9lBUo2p1cX>gfnTCPDtmg5^gLXxR77JuVzVNn&dG>F
zY3*r3AjEf2OxSc!p4erVYTFZOhTrC<w2L@&DL$MTIW->{z>^h-9^A340J(C1%?g=@
z<c`-B+Tfb+4(bmqRD7x0zD+(q4$`pe)ute1$BQB&O5Nlv6kcUEXUF>sCpOuezZOKJ
z_WLU6IN7YG4Iy(sb;e|60~zgqb`5iUF!N|=1MeYO5T>vGzY^cbh%m{&SR6lc+r4yF
z{Iv@l<|cS!Qc3nU&M^tXLRF1-tenMlZR>5ar?=jEd+u|*#;ptYlvN}&j}YB?a$nMl
z44yVHc~Jep0er)ts)#2>srV9+%0fG2TY_SEuH97vdcKQgn!OKTnJ>Pk(;xhyjl#13
z+uN75bmcZ4%aYTtF)fKulZ-SUS4nG1V7G3l`B`*o40AIz+RUPWFDS#n8+}bGcFtz<
z<?uUlX;G6nXA34MH~?0;YTpZ4AQd0tGr{spO0m{9u{9u`*w>t}dSoxw#KNA-7s&^%
zZC>Y>Wc&k8174?3NH6QArcy$PyHyH|9TW5d)DxlfDnpg2Qo?>p$Ak*v({uyoo<1l&
z!aH)&`gEG<QGzgK?MK25%Z*kWj7R`Ny$mCF3f2xg#uW!Un>gyOV12YS(#(kFAz@?+
z$?nABLuXPTj55s%QQEbzh|doZrShdNkuDi416KRQWzbd9*gCIJ-?F1@Fz@JSkV=*4
z)XfHKJ5tTD3RY};3_2{!=C!qw*`G?LgaMTqW%YBgf#oG)X&G=H9XZ-vw_s6l+aisG
z-Myy>OWc5tB(TjjEF6M;Uzs(Z9nDOV6DEt=%i@(PiH_!ru#<v{EoALCh6jshlO}Qa
z^3I__Xs$|G<rnW;N^n>J2dChHa?%xcFSejsE{B$m+9;*P^%!PutFUqS7u~6`w@AX&
zG6|5yiwVE5`Ko`#FwaEZT2j!kO;G8Zy>8rX+A;xAM`(tJqN8xFtg*{yG#^$@7KV<7
zGmpaVn&id~rgms;Pw5;Z4|NCmrc`Lel9)($J+i{q+KH4W8uQQ{u1wHyuDS2FcmO?^
zmIum<>eLXd$=esC&7M~HDRo~l-xYLO@mEoop(Gw*XK#a6G57>4EIrz3#7VF$LOsL+
zyrVq@q(*XLL!;}X>H}MM*#OPO+an5_LUTQPcIEi-DJj>KFVKz7B0U_vd`O55EH1V}
z(d)Ape^O?ak0bi;<ZS=#mihd~z}cON{qMQ%^s!!S@v#5g-^hLpa#d4Gc}D`tD(mGS
zQ|_ijH3hv{L!KZ>d_`R^C6(yl1UI!u&<;j>G323_Ux5uC1xXa{;cN5RPUf?bS(r5y
z5db<5huZ0<*WaeMjm7Hfp{Hxr7q-2luTX!8W&t9Z34;=_LHB5+aK`Stlk*vsrF5wh
zJ9oYE$#&Cr-b+WG6+Kx)m{Ow91QtLgFu;XazQT+0>Ji!xe}e%l!d6S)71Ct0<Y~s`
z2ZtHRV$kB`&TcM^^IxZN{6Bnz_NStcC=OMatGy_Gs_;cffXsx$ksO-wB*y^8Q{53I
zuUjUmRXug}m#-{R7lu@U!D^478nyeCSg_`Cc4ajKC54kT^{#xNzO2hGV2<SzOs4MM
zv{R$pfNvG3h{zs?;(g@v@R?TCiYkT(7!nIuth-R1pOnTNfi;6iqMf;EPuwP4ARWV=
z$4EOf35hp?L)sQ~PlMI23Rq8HtSYh^PzdBbJ=lMaYsmM&`udFIe+m&sLfpldSmuHe
zs3?+83?()X_>wv%=`@TW3H92OG+t{Koc8TCCxF0eWN9h$&!hnsKRW$NDgbe@B$`GY
z+B!5JqBdAYKI;u-eyXOa9+6!sV@%$j^d#kHP7zVV4ywc_f}AmU)4gCd?&~LIcJjtc
zv02uI(<=Wz2B!rhQ%53T$|?qK@LDlAWf$gm`s`6^cG+1d6?B75sK0=1NUB-!=RP63
zfxJzSLUK;kJn)4~pg{HPJk4Ix>;-EHDNUcCa%yO$CV<Bqpad*ar4^*hArH}%Iz+@`
z2)Y2B&xP?#3(h2wupyYL{ffb)K;%|m+!Ygsl_160!Q9>c@ALWb>Hgu3w4pI&4k8se
zd_yY_yQZ`o0<P!)@0EihSB(tzgXL2KcYw<T$Y;80Eeh3uKnPhQR(kc?=38ERi^#A0
zEY;aoI-g@)06Lu#W8W(c8u`em2&JJF>iwg=ZL@1zraiqcok44?>*%1+ow{~M7^FF_
zBWf<K5#Og*TAJ6AB4zlq;-gcYeya`8Su7y6>;6)OunjIVLtXwN2FS+g;Ve$m?*M0a
zspMa6Q)!#MeH6L@N|U^JTbC?)(IcKyoSF6+@8b8^MGavnMI+MZ7v3k@K8BLY*vMig
zVVy}?Dr6#el|lYSJ>a{NmW)X&md|=CQEb#>y$`BdPsPcf8mpEdE4CIpjzKmc`cWSR
z^>del&rxXG>s`gpJfTe85yWLiF)M=r+WX_vJ)3L~7rVbdJ<<vbUTzlYdA0PEgd4sV
zHYMV37TWFfJ;UDEc^SLWpv@vNe^rCyMrq)Cf`S^<#(+nhxAM)CrCNEsc@z5v9LF={
zP3lG2egnXpkeZjuPBa3BUnM>Xe9=4BV1blWpkx~0mbK_qEM&QZ$>^#&%_b(MUU4WG
zDiM8%Ws~V)eR^B7PnLKuXvFv8+rjTPBD(12U@t<IYz?gjjEdf>TKyqX6X(eMPII@g
zu4gqQkzZ-zz!Jz&tuC*ASTk8?-7NrK!(p>~u(v!R3R2Z_V!pk?N;OR%gyZLUb{{U~
zO&{y!;%eSA-47vP&|=V&#cLPykCZ4o|7f9Yf+2qTbpP4>&8=+LkpXoRfMZu(Wvw&_
z;djg8WDNs{*&qhk&>Gbx3qkH<(>gXA_6cM^2moG*%QlEa_?>aGowy`{B@X6n1Rc-9
zM5=l)fO3(A(=Djd(VAn%0l)d1o7XavGyGc|_7FVa|B=;eo5yNrc!evM12(I7<AkWZ
z=h70qnXMF~FImQRhX?W5`Ca9N-~y3<7*XV-iELPzN(MwQFOnx8QV>x$n~7vSj#=^X
zLH1(GW`}CSR<z5~EHif5n@Zddjn~Fh^nkJ<ftTP33_#>@7n)Vm1!gOUfvlfs4<wZp
zj%hS@HKWIaaaAbM6rBTPT1Jd^r2cIu@q3Ab%3A;e@9j(s89oWhs`;?YvSP5pWId?a
zNft>LflJVuM0b?DP?h7`K4Oms;uQZyMyOUmz&v;zxW1=TU@q^{FPFoWP8xSRN#_gK
zIKizQ%r^Ww|1YzyGp#X!Uwem-*?m$R(PFBTCJs~B&hnV!T0s|ksV%tx0pT}1KR2Qt
zwR1qJZ0Yno8}QkGidC-O$24J83q4oe>5F&I>#Yhjb#9C2m0a3~>n$m~3<pej-8D6^
z(6#jJmv$t2fd&#~qBwK6uV#Mv&C3qf+?{xl`B-E}vFG{S^6iXSQ=ZVB)TD$Rp-2To
zl#+xw7wy!jHkP5S!ee(xsW5zKTDAmr7GlH@ATWudPL{+z<pQXrsm00mK;Ci~e`d`R
z0Lh`wJW_*C;d1t}vgAxev-|zm&-UfY;|eJg?jMi9wK`I<rWVHGXmA}5W%q;`vD-RJ
z+us1#kWJ>q0Rjk&bIh<uQkG_Q9jtB0T}d{=v18I#q*~!KgTWv}ylYJ~!R=CIpx22;
zbtk0z`;xAs#N3+c+Kt(JJ2!9b+`Kd2dH2>Q_wUST@b(QH&WX*_Td-mE1vYD|bHz$8
zBLf0I9ia`lt=5={aNd$=Z%GPGSHgumpftH3HWV`dCB@W|3`JUMYL5&g`Bt1{wRP#e
zgMBeRFSr;TsN8L;@X;q<I%k-s+!cbIGaD6(Uj!Bvq*vu`LO^~9@4R+beHxWO6h`8C
zA3JAl_1e&<t1g{4((Juzc(2pI5OiolvsXJ9>|>D<bMHw_2(f4?aC~ESlO!{Vr1nc;
z96NUT`hR^iy{_#$bK?sYvLi2cmwFg1ayP8y?2dKuQ;9a8(=HlrH$MZ}^UzWT?Bs1x
zGM;XA_U_<Pnt5@DSW^!8sO<5C<2vLvl-_IRoXux0pKM&Fa>D130t<$f+Tg5Lxv3=l
zqiiRlalUed*@HTVJ}$!+yB?zJ*=X4T9s(6uj3PFDPi93)<268YxHtyz^Y{0^I$UmN
zP+8Rp!I?f&>^JPrJ2(d3|1gKFj<mCT_2}x2oy=McRxwDVXq@bP#!;8hbWy{qMI;nC
z&2Vn7#nM*(oIfQa7Ivn&hV3OLA)5w`Mb5V98wO0<Dc2BCyyKI>Km$d(d0y-<`ziLP
zrCdZ7X27NX5|eBNGUf_W@CU0w?XF;0$~)XSe#99H%h{(mOKAP*eQ=<cS+R}m!ZS_(
z_QB%hiyg%t-ZMcIJBss)r!3YOBIie*&R|6iEJ}5YQ+_y9Mp(#LN^fq`dG@L7bRiB6
ztJ1OuiDVUe6^Q0M1O8L_C@H8Myq@uLwn3UIbMbaCHK<ZKkH@^qlm<Z>?{}P)crPGw
zPc1ch2|2cXMGJH)Z^aC)<<dN2FSJ3|pZCZzN}%4~l~;|=+WYP+2!Qx13(K4Ah#cx@
zyHXoxpGM0^#&0b!l=yUzp?Icv%Ohb=b=hiIMGA|ciQ`6#O_j5%j7ZA-=N@+#P==ZZ
zIg!UG=B<p%<*}L_lU$S!65-a;5-s8jQ9X?(*vdl3ly!o6Gt|UbOtK(7Ppq8wq7ixZ
zR_IVs2e+KvZl`7S)aQ*SSJq!YJn#D9ci(c1e3{Gk7H|U1!FVluZQ{*L8}kbDIVFF9
z<B-q@1H3`?f^88n!ZQROVx*F^CA-f`ulA$_sElvzP|)8?#U}<on-%Q}!JCTD%ab_!
zEUSFf(m?lo>WkTrH^Zuv$eKf#b*@&F1ik!W0@z?8s`RRQ+%lnNe_tgfO_>MTgR<L0
z^Q-fnN1PKO#9dzKjSD@*u%8h7L@&JP<2Nz9Kr5w}3gbCG`L=u5>><5w%p%-Kv`%U)
z3@Rm!Y$~=KO-?r6E-HA~COQ<_8e3%KmfK1<gD*>KPaNkJtKy}R!_(wj<s23l#OiP(
zOJ;GMIuR~hPEv@E>$PK|=}&0JY;T<CCam1Joz<c<SzTejyK{~Gxk*8RVO{dEl>1q;
z8x?Hh!{EqQ;{L-m7{ejtvvO+c_`vM$osaL|nZNtV&d2W!iuHK4bZUvEQQYz=5sQTo
zL?GY|`m!&#$FtLEs;cWo*HDAt3^9z0Sn7qvKoL<JGt`3c$|uE~qfHN5@_C;wk{>w1
zK)5U4L|Z0BC{M>tvy`Wq1b8>w0l${BclQpjKG%WO8;dLb59!$QT<=g%hHas;D;R6?
zg^ND+%fLOWU23)me8vf;GMju~7%|4z4OlER#EkSCa8hBW%vPJSO5}*!7-?%jZnu8U
zkJ_uG2&mk`5kE*z(?oT#<eTjb<wfb{(W=kH^Bp%Ia6qRHF?*@7!Id+?9zEaA9<AF&
zIKsUw!e}lTZW>_`zo~p|yh*oPzaSEIk{C9s_D#>w3U_n<*7rOCBpHNxKHJ?wijE7b
z)zkvv{J39__7|BBfFclaFE(38nR^2IdQQB>3RHv%qe+aegS^$QAz~7s)K#-FsQ}5j
z%b8<8FE~}-0-J{hl$i#IGi)D=MO#ofB9uX4LbnuB5JJW(e@l82iKPqBnfdr(P{qyg
zgtBW-{0`M)_f(EvxzmQ7*EV8$5*Sdg2pv-HOkdM>EMrpf9Yt{L`?36rnM~s?U0HL)
ziJqvS!z8ExAU&U?$>3%{4g>`#&`X&FE)nuI1G)+nrh$VRr_5ZfJ>ptrNVVLh(jr4)
zSUi-{%Nn%Jp<goS&{uOT!MriQ?vr<oo0`<BbWVM1YnGHfT4OSCiCn1kjW?ZE%*Iuq
zanOm??4k=J-cr>zgkeN_2D(8lLUc*4tP7V@t@^m*<j_i-QK-}r25@x`{9(+S**!jm
z;nXx>V1lzEt5vfOS$xkb{_{;##p421RJ|y(y=(BvdM1!nLm+lTtfOV#@w)Ul?^ODY
zL3J^BQK{mxKy>fRezIzaHV<#5GR7QstKvPPR3-f?DB_V@%N)D3QPE&XBwsRqKBc9&
zhE%@%v~Qw^tzcj6jLZSr)EHSpppF?>{iH~_tdz_tDs5J*yn8*o0ICC8_H}YPdr%?C
zsYwoShIbXaI}rG@b{AhO&N}`^yoL46HvzJs3h*1wIYimj>!FjtYFCt6!sN39BShRd
z{sD=G6EWh&Ktrimb_38S=v)*R0jamTNcHH2yH<9iRSdV{c3NbcJ`{#_2_YeqYzqt|
zT7f#dgBucFd;%-m9cMOAzpfPUn!!cCuW(`qI8#r*FgVyv>4h>6(rw>=lS+D}AGQkD
z5f=fwfQSziR@*)`dj^JUZq{k9i#|k@Q=-F=C&wuAKvAyR@5AIVZTJ`L27$2F!E|X9
z@dr-frap*T;l|GWmVWnPmCrCg&UU2h*z5ys69SjiRB`{k6SvId_ti+eUEs>lVBZOb
zS7ULh$xeh3{3@uAqdTVG4#$~&$TGxRrFoUzple}&Ps1GJGk4^)PaUv8ac1z<3$pm!
zLPL|aePG4ZM$a@xB{^z9_nE%<U+tLMeq0M1;Rk0gy{pgVBqe7iZDt*G`xSfOMHe?5
zWg}kXNgeCE%Rdl%QMxa~$_+}_^oPXzvRAqtBBT7{slkQBzA9+jrCYo<p`eCcxYqbK
z8Vr3%G;`L9DlNvVBRII(Gp7#eZMiQi^!=eaJ2FCCqW;dMOJmuJwAS4?q*2&hTvn_F
z=a9`y>8^Op`C2Oga50D14K+#Q2`@0r(mCd!HB99|>J<Dx<P$ESFP5hm$?{~A|M2iY
zu@1h&!%B&%BpPyW?t;JTvVy{})k)xTeWLn5CCGB9*p3h|^c}&khk#6h=uT7u-=iIZ
zUNIFsTMRIp|H`BapJ(qlzEjb#y%SBIC9`P)(HSgcKg@f>Eaa*3F0wnn`ZZsZWQv<&
zIP&tO>K$R@@^1Ylk2~pdsw$qR3~tV)3rZ-9kMzi*;O>JBq)Zjp6c`XX*?>Y4Lxmc`
zy+W_~uRExUHA)lt9$?+uKg0>K`vQYVv{LPr$ULRTxf)k+n6tZ5XdlJGmmqLv0zG3I
z#xLey;z@|_sGm^Fez)MZgm#JKy9H~{7+Le-Gv92uQ+_{Y2_GmufWPj2xT8$jeML>r
zEacqrnh1U6cc+H!>W8CmfifU~jSd@0&tj=)p@ySJboU$dm5q#AiyQ!-6wPm8=b*o_
zSV$-|v#@O>rqZ;TEZ?~jE!5Z|liuM7NPuQ?br2hl<Pi9!g|8(@5UN`pf@@C6yfObx
z%;P~=Ex+BI|Au$s<Wsto4mDeJ;>0YT$8JD;51pSX^zyXa-gK$=!7cqbeDS9f54XS2
z51DMfOw)>Ien2q^tX*A%OUaJYuL@8+(5%t2R{wq=3Ze_>$KrtKB0V<9>|HX*#yra~
zb8{%khmd&!cD)B%D8PmzOUo!^my0}Ehnkk*&Vkt3E|wYGNqT{z&(uA``Jf=CvZ47q
zz1E%r?X-OtiM{<Rsl(e3pS|ma>f#SfKEKOsro+ev(?+dXx}k3_Z07m$gWRmXulO>E
z&t@=B%gfxH+-A6?G^y5%49A7S{jw(HfEg@OkDMgTRx7ktM+Ge8ZWRqH;p3&lwQ$5m
zMl)-Z0ihusoOZ}i8riWrb@MX<Dd=@koAR6-=soyr%*O7ImbxjSQ-d@a6Ve$G>nrsl
zWZ}}AJR2J=PB?=2v6{f2tUeHu*Ti8d3swZl86bj#Jv|_iTs$54LIE5q0uuY6MA3U@
z)#DM_nxWDkzYHG}WYE~b<ckb|+>M;(ziuF;P1^qRjc)8*@zBbPx;La`$<UR!CwENl
zA>B%Z20CQ=N-Cyvhz?LB(ztXhI>0-1Va0mvxGX^_06XJ3e%(d*utGp6M~^_(1&Gx*
zs|%qE@%rZ^AO(+$Bw28ycyY4g=IVw%obz<)QhR01(;?x@rK$%s!E0OBd|q6BO8XGe
z7iZ?04Ztnde<7cI*}$LgKe_t(;>qmu<??X0qokb$IS?f4;&H6MV<G_-KNuHsCpuX!
zFM)!f4+NwCvUfPxr@(Hy72MHkcx9GZw&3U1n~zD!n%M_@JR^SP8d)&%u@r*SnX<PX
zEU(z}3Q-sqk$G@qma>3H&{Wm$fLYBdB@lpxM=_9w>oTLU`Y<Bp<POq9-#VE^Fx}De
zaB|Kbo<0U`bATfqgiV0mOiWI}eH-2#aq6V1nHHf_D8-mbn$H$qGx<%pP<l!%)$$<Q
zE-^FdeGmbUK?SpP{_)BBT4QqJ`)6+tlgXP>0eN;9qN_O<d4Cp8&3aU)E(?5*_MTAS
zZV=9rp)}AwCNKwRb)6iNfUqE)eN>wEqWrzB=~L~Y#QZJIyLA>#9rpwP$1F<f>T7i^
z(_1E2#LzL{^pJK2-$5OzE>YU!{o!vQq}pKAe;ZzYyhlo;-b^GLHXPF{1wg-BsA#0E
z53{=sO~j1k{MKHb8S((%^Lh6kp5puy_gZ-i6`TMqRfxlYHH!%~v?=)5!m~4PZGa=B
zC}LVbVY2NOU?)><$IF*paRUkEJUfS2ip9my61K(0nA&Pg@M>b&mCZ}jv9&`)1=`RS
z+C7uTLq-Z8YHFnJN??ABIyfHQIM~dyC)>M3KlyQZFna}F^PeV%5RXDeOmE)0_wI*x
ze);LGolk<+3g&Av3jz8$anN`bUT%6v?^xNN+M2D|2!g%`4y8cl8I;uyeg9zj(evhX
z&ZjPrtVv2tQ{f97fr1x`30E>>2l6MkZr-~6!N(u`^&svkA4r0heIl=nGCyE=qun%f
z7NOgSA$eBvuOPJ01(q}EGiglAzDRk}?ql?ykt|gkIE)fc5#NJJ*@cvrw!+j!wianL
z$H6r(@do{O;nbzixsQ*Q^6d9dn7I35^3yR4xMG@fy>}7C?8n$C63KhV!|goLaC#eR
zMz0_dW5YU=*@!G_snEw)bOZQY=I8c_|LK2z_itQ?f4<doN{y(Wv^bxI0jwWc8!&r>
zgAZTya{CAeSpSPv@leaoG2pOvYEwS{;O@+|i4&!B7Ah1rWBzu6x-b}Zwk~GO-Rc7&
zKbiT|(-E|L<0o$<W?0r{$>%6IXT!$iuUJ{RB8iXTV)jIx9ZTCeo`1CXa!XkW^*5DW
z^Q|?169ZP8f_V01io|I@F9R&Y$+hWLgUqqSB)>J6x>(sZjQkM&FtL9)ig)1VH)imf
zt}22|RVr)fn>T@`I>-Utkf-?yS_(f}YGZi?>Zuzu3rdvAtjSxyCb3DE2qd8fL4(HS
zVJxK&p~<84KF5ED+O%YQD{wbHy-phmks0vNoA`H+o-L8skKJ`c`M<7kVUHq>AQqiT
zw1AzAAtR*L*oP^Ebj=wNjNb!|J{E}^|I+ky$dB(fWdRX^Hf4T_dWg!y{-GYV^s6G$
z8H$!ri?tu4rOT<A6#<#;4@CGRYT)I|c^|06F|u2;GhSS=8@qRv<}^uE`ol4nFDm1~
V!QLYkUCuRC%!u#)mH*zG{a-i{d@le1

literal 0
HcmV?d00001


From 1b3bea87f03ce34d091e60857aab328e433d0357 Mon Sep 17 00:00:00 2001
From: BoaImpressao3D <57779119+BoaImpressao3D@users.noreply.github.com>
Date: Wed, 11 Mar 2020 11:02:36 -0300
Subject: [PATCH 003/138] Update on Brazilian Portuguese translation

---
 PrusaSlicer.mo | Bin 0 -> 249853 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 PrusaSlicer.mo

diff --git a/PrusaSlicer.mo b/PrusaSlicer.mo
new file mode 100644
index 0000000000000000000000000000000000000000..94853e146f94affd191f3a0adfef0b0874939876
GIT binary patch
literal 249853
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
V!QLYkUCuRC%!u#)mH*zG{a-i{d@le1

literal 0
HcmV?d00001


From c5e58256af08e827593272e535dc00d6efdeccd7 Mon Sep 17 00:00:00 2001
From: Arthur <arthur@bi3d.com.br>
Date: Wed, 11 Mar 2020 14:16:03 -0300
Subject: [PATCH 004/138] Update on Brazilian Portuguese translation - 2.2rc

---
 PrusaSlicer.mo                                |  Bin 249853 -> 0 bytes
 resources/localization/pt_br/PrusaSlicer.mo   |  Bin 217077 -> 249853 bytes
 .../localization/pt_br/PrusaSlicer_pt_br.po   | 6336 ++++++++++-------
 3 files changed, 3905 insertions(+), 2431 deletions(-)
 delete mode 100644 PrusaSlicer.mo

diff --git a/PrusaSlicer.mo b/PrusaSlicer.mo
deleted file mode 100644
index 94853e146f94affd191f3a0adfef0b0874939876..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 249853
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
V!QLYkUCuRC%!u#)mH*zG{a-i{d@le1

diff --git a/resources/localization/pt_br/PrusaSlicer.mo b/resources/localization/pt_br/PrusaSlicer.mo
index a2f3e9789d18d81a6d15de4544a644d9d280221c..94853e146f94affd191f3a0adfef0b0874939876 100644
GIT binary patch
delta 73190
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

delta 44436
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
IoffbB1AUPmdjJ3c

diff --git a/resources/localization/pt_br/PrusaSlicer_pt_br.po b/resources/localization/pt_br/PrusaSlicer_pt_br.po
index e54f17ec3..30b3eb569 100644
--- a/resources/localization/pt_br/PrusaSlicer_pt_br.po
+++ b/resources/localization/pt_br/PrusaSlicer_pt_br.po
@@ -7,27 +7,27 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-09 16:39+0200\n"
-"PO-Revision-Date: 2019-11-18 16:39-0300\n"
+"POT-Creation-Date: 2020-03-05 13:51+0100\n"
+"PO-Revision-Date: 2020-03-11 09:32-0300\n"
+"Last-Translator: \n"
 "Language-Team: \n"
+"Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Generator: Poedit 2.2.4\n"
-"Last-Translator: \n"
-"Language: pt_BR\n"
 
-#: src/slic3r/GUI/AboutDialog.cpp:39 src/slic3r/GUI/AboutDialog.cpp:291
+#: src/slic3r/GUI/AboutDialog.cpp:41 src/slic3r/GUI/AboutDialog.cpp:294
 msgid "Portions copyright"
 msgstr "Direitos autorais das partes"
 
-#: src/slic3r/GUI/AboutDialog.cpp:127 src/slic3r/GUI/AboutDialog.cpp:256
+#: src/slic3r/GUI/AboutDialog.cpp:129 src/slic3r/GUI/AboutDialog.cpp:258
 msgid "Copyright"
 msgstr "Direitos autorais"
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:129
+#: src/slic3r/GUI/AboutDialog.cpp:131
 msgid ""
 "License agreements of all following programs (libraries) are part of "
 "application license agreement"
@@ -35,25 +35,25 @@ msgstr ""
 "Os contratos de licença de todos os seguintes programas (bibliotecas) são "
 "parte do contrato de licença de aplicativo"
 
-#: src/slic3r/GUI/AboutDialog.cpp:199
+#: src/slic3r/GUI/AboutDialog.cpp:201
 #, c-format
 msgid "About %s"
 msgstr "Sobre %s"
 
-#: src/slic3r/GUI/AboutDialog.cpp:231 src/slic3r/GUI/MainFrame.cpp:62
+#: src/slic3r/GUI/AboutDialog.cpp:233 src/slic3r/GUI/MainFrame.cpp:64
 msgid "Version"
 msgstr "Versão"
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:258
+#: src/slic3r/GUI/AboutDialog.cpp:260
 msgid "is licensed under the"
 msgstr "está licenciado sobre o(a)"
 
-#: src/slic3r/GUI/AboutDialog.cpp:259
+#: src/slic3r/GUI/AboutDialog.cpp:261
 msgid "GNU Affero General Public License, version 3"
 msgstr "Licensa GNU Affero General Public, versão 3"
 
-#: src/slic3r/GUI/AboutDialog.cpp:260
+#: src/slic3r/GUI/AboutDialog.cpp:262
 msgid ""
 "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap "
 "community."
@@ -61,7 +61,7 @@ msgstr ""
 "PrusaSlicer é baseado no Slic3r criado por Alessandro Ranellucci e a "
 "comunidade RepRap."
 
-#: src/slic3r/GUI/AboutDialog.cpp:261
+#: src/slic3r/GUI/AboutDialog.cpp:263
 msgid ""
 "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, "
 "Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and "
@@ -71,7 +71,17 @@ msgstr ""
 "Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik e "
 "outros."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:92
+#: src/slic3r/GUI/AppConfig.cpp:114
+msgid ""
+"Error parsing PrusaSlicer config file, it is probably corrupted. Try to "
+"manually delete the file to recover from the error. Your user profiles will "
+"not be affected."
+msgstr ""
+"Erro de análise da config do arquivo, ele provavelmente está corrompido. "
+"Tente excluir manualmente o arquivo para recuperar do erro. Seus perfis de "
+"usuário não serão afetados."
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:110
 msgid ""
 "Copying of the temporary G-code to the output G-code failed. Maybe the SD "
 "card is write locked?"
@@ -79,25 +89,61 @@ msgstr ""
 "A cópia do G-código provisório G-código falhou na saída. Talvez o cartão SD "
 "está bloqueado para escrita?"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:93
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:415
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:113
+msgid ""
+"Copying of the temporary G-code to the output G-code failed. There might be "
+"problem with target device, please try exporting again or using different "
+"device. The corrupted output G-code is at %1%.tmp."
+msgstr ""
+"A cópia do G-code temporário para o G-code de saída falhou. Pode haver "
+"problemas com o dispositivo de destino, por favor tente exportar novamente "
+"ou usar dispositivo diferente. O G-code de saída corrompido está em %1%.tmp."
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:116
+msgid ""
+"Renaming of the G-code after copying to the selected destination folder has "
+"failed. Current path is %1%.tmp. Please try exporting again."
+msgstr ""
+"A renomeação do G-code após a cópia na pasta de destino selecionada falhou. "
+"O caminho atual é %1%.tmp. Por favor, tente exportar de novo."
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:119
+msgid ""
+"Copying of the temporary G-code has finished but the original code at %1% "
+"couldn't be opened during copy check. The output G-code is at %2%.tmp."
+msgstr ""
+"A cópia do código G temporário foi concluída, mas o código original em %1% "
+"não pôde ser aberto durante a verificação de cópia. O código G de saída está "
+"em %2%.tmp."
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:122
+msgid ""
+"Copying of the temporary G-code has finished but the exported code couldn't "
+"be opened during copy check. The output G-code is at %1%.tmp."
+msgstr ""
+"A cópia do código G temporário foi concluída, mas o código exportado não "
+"pôde ser aberto durante a verificação de cópia. O código G de saída está em "
+"%1%.tmp."
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:129
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:479
 msgid "Running post-processing scripts"
 msgstr "Aplicando scripts de pós-processamento"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:95
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:131
 msgid "G-code file exported to %1%"
 msgstr "Arquivo G-code exportado para %1%"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:99
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:117
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:135
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:185
 msgid "Slicing complete"
 msgstr "Fatiamento completo"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:113
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:181
 msgid "Masked SLA file exported to %1%"
 msgstr "Arquivo SLA mascarado exportado para %1%"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:155
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:223
 #, c-format
 msgid ""
 "%s has encountered an error. It was likely caused by running out of memory. "
@@ -108,37 +154,37 @@ msgstr ""
 "você tem certeza que você tem RAM suficiente em seu sistema, isso também "
 "pode ser um bug e nós estaríamos contentes se você relatou."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:417
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:481
 msgid "Copying of the temporary G-code to the output G-code failed"
 msgstr "A cópia do G-código provisório G-código falhou na saída"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:426
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:506
 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
 msgstr "Agendando upload para ` %1%` . Veja a aba -> Print Host Upload Queue"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:65
+#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2060
 msgid "Shape"
 msgstr "Forma"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:72
+#: src/slic3r/GUI/BedShapeDialog.cpp:73
 msgid "Rectangular"
 msgstr "Retangular"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:76
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:393 src/slic3r/GUI/Plater.cpp:145
-#: src/slic3r/GUI/Tab.cpp:2524
+#: src/slic3r/GUI/BedShapeDialog.cpp:77
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:160
+#: src/slic3r/GUI/Tab.cpp:2326
 msgid "Size"
 msgstr "Tamanho"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:77
+#: src/slic3r/GUI/BedShapeDialog.cpp:78
 msgid "Size in X and Y of the rectangular plate."
 msgstr "Tamanho no X e Y na mesa retangular."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:83
+#: src/slic3r/GUI/BedShapeDialog.cpp:84
 msgid "Origin"
 msgstr "Origem"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:84
+#: src/slic3r/GUI/BedShapeDialog.cpp:85
 msgid ""
 "Distance of the 0,0 G-code coordinate from the front left corner of the "
 "rectangle."
@@ -146,50 +192,55 @@ msgstr ""
 "Distância do ponto 0,0 da coordenada do G-code do canto esquerdo do "
 "retângulo."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:88
+#: src/slic3r/GUI/BedShapeDialog.cpp:89
 msgid "Circular"
 msgstr "Circular"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:91 src/slic3r/GUI/ConfigWizard.cpp:123
-#: src/slic3r/GUI/ConfigWizard.cpp:576 src/slic3r/GUI/ConfigWizard.cpp:590
+#: src/slic3r/GUI/BedShapeDialog.cpp:92 src/slic3r/GUI/ConfigWizard.cpp:218
+#: src/slic3r/GUI/ConfigWizard.cpp:970 src/slic3r/GUI/ConfigWizard.cpp:984
+#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87
 #: src/slic3r/GUI/GUI_ObjectLayers.cpp:135
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:390
-#: src/slic3r/GUI/WipeTowerDialog.cpp:84 src/slic3r/GUI/wxExtensions.cpp:509
-#: src/libslic3r/PrintConfig.cpp:70 src/libslic3r/PrintConfig.cpp:77
-#: src/libslic3r/PrintConfig.cpp:86 src/libslic3r/PrintConfig.cpp:220
-#: src/libslic3r/PrintConfig.cpp:295 src/libslic3r/PrintConfig.cpp:303
-#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:363
-#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:499
-#: src/libslic3r/PrintConfig.cpp:517 src/libslic3r/PrintConfig.cpp:695
-#: src/libslic3r/PrintConfig.cpp:1215 src/libslic3r/PrintConfig.cpp:1276
-#: src/libslic3r/PrintConfig.cpp:1294 src/libslic3r/PrintConfig.cpp:1312
-#: src/libslic3r/PrintConfig.cpp:1364 src/libslic3r/PrintConfig.cpp:1374
-#: src/libslic3r/PrintConfig.cpp:1495 src/libslic3r/PrintConfig.cpp:1503
-#: src/libslic3r/PrintConfig.cpp:1544 src/libslic3r/PrintConfig.cpp:1552
-#: src/libslic3r/PrintConfig.cpp:1562 src/libslic3r/PrintConfig.cpp:1570
-#: src/libslic3r/PrintConfig.cpp:1578 src/libslic3r/PrintConfig.cpp:1661
-#: src/libslic3r/PrintConfig.cpp:1878 src/libslic3r/PrintConfig.cpp:1948
-#: src/libslic3r/PrintConfig.cpp:1982 src/libslic3r/PrintConfig.cpp:2176
-#: src/libslic3r/PrintConfig.cpp:2183 src/libslic3r/PrintConfig.cpp:2190
-#: src/libslic3r/PrintConfig.cpp:2220 src/libslic3r/PrintConfig.cpp:2230
-#: src/libslic3r/PrintConfig.cpp:2240 src/libslic3r/PrintConfig.cpp:2403
-#: src/libslic3r/PrintConfig.cpp:2510 src/libslic3r/PrintConfig.cpp:2519
-#: src/libslic3r/PrintConfig.cpp:2528 src/libslic3r/PrintConfig.cpp:2538
-#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2592
-#: src/libslic3r/PrintConfig.cpp:2604 src/libslic3r/PrintConfig.cpp:2624
-#: src/libslic3r/PrintConfig.cpp:2634 src/libslic3r/PrintConfig.cpp:2644
-#: src/libslic3r/PrintConfig.cpp:2662 src/libslic3r/PrintConfig.cpp:2677
-#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2704
-#: src/libslic3r/PrintConfig.cpp:2742 src/libslic3r/PrintConfig.cpp:2752
-#: src/libslic3r/PrintConfig.cpp:2761 src/libslic3r/PrintConfig.cpp:2771
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:333
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/WipeTowerDialog.cpp:85 src/libslic3r/PrintConfig.cpp:75
+#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:91
+#: src/libslic3r/PrintConfig.cpp:122 src/libslic3r/PrintConfig.cpp:188
+#: src/libslic3r/PrintConfig.cpp:246 src/libslic3r/PrintConfig.cpp:321
+#: src/libslic3r/PrintConfig.cpp:329 src/libslic3r/PrintConfig.cpp:379
+#: src/libslic3r/PrintConfig.cpp:505 src/libslic3r/PrintConfig.cpp:516
+#: src/libslic3r/PrintConfig.cpp:534 src/libslic3r/PrintConfig.cpp:712
+#: src/libslic3r/PrintConfig.cpp:1231 src/libslic3r/PrintConfig.cpp:1292
+#: src/libslic3r/PrintConfig.cpp:1310 src/libslic3r/PrintConfig.cpp:1328
+#: src/libslic3r/PrintConfig.cpp:1384 src/libslic3r/PrintConfig.cpp:1394
+#: src/libslic3r/PrintConfig.cpp:1516 src/libslic3r/PrintConfig.cpp:1524
+#: src/libslic3r/PrintConfig.cpp:1565 src/libslic3r/PrintConfig.cpp:1573
+#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1591
+#: src/libslic3r/PrintConfig.cpp:1599 src/libslic3r/PrintConfig.cpp:1682
+#: src/libslic3r/PrintConfig.cpp:1914 src/libslic3r/PrintConfig.cpp:1985
+#: src/libslic3r/PrintConfig.cpp:2019 src/libslic3r/PrintConfig.cpp:2147
+#: src/libslic3r/PrintConfig.cpp:2226 src/libslic3r/PrintConfig.cpp:2233
+#: src/libslic3r/PrintConfig.cpp:2240 src/libslic3r/PrintConfig.cpp:2270
+#: src/libslic3r/PrintConfig.cpp:2280 src/libslic3r/PrintConfig.cpp:2290
+#: src/libslic3r/PrintConfig.cpp:2450 src/libslic3r/PrintConfig.cpp:2484
+#: src/libslic3r/PrintConfig.cpp:2623 src/libslic3r/PrintConfig.cpp:2632
+#: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2651
+#: src/libslic3r/PrintConfig.cpp:2705 src/libslic3r/PrintConfig.cpp:2715
+#: src/libslic3r/PrintConfig.cpp:2727 src/libslic3r/PrintConfig.cpp:2747
+#: src/libslic3r/PrintConfig.cpp:2757 src/libslic3r/PrintConfig.cpp:2767
+#: src/libslic3r/PrintConfig.cpp:2785 src/libslic3r/PrintConfig.cpp:2800
+#: src/libslic3r/PrintConfig.cpp:2814 src/libslic3r/PrintConfig.cpp:2825
+#: src/libslic3r/PrintConfig.cpp:2838 src/libslic3r/PrintConfig.cpp:2883
+#: src/libslic3r/PrintConfig.cpp:2893 src/libslic3r/PrintConfig.cpp:2902
+#: src/libslic3r/PrintConfig.cpp:2912 src/libslic3r/PrintConfig.cpp:2928
+#: src/libslic3r/PrintConfig.cpp:2952
 msgid "mm"
 msgstr "mm"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:92 src/libslic3r/PrintConfig.cpp:692
+#: src/slic3r/GUI/BedShapeDialog.cpp:93 src/libslic3r/PrintConfig.cpp:709
 msgid "Diameter"
 msgstr "Diâmetro"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:93
+#: src/slic3r/GUI/BedShapeDialog.cpp:94
 msgid ""
 "Diameter of the print bed. It is assumed that origin (0,0) is located in the "
 "center."
@@ -197,67 +248,71 @@ msgstr ""
 "Diâmetro da mesa de impressão. Se assume que a origem (0,0) seja localizado "
 "no centro."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:97 src/slic3r/GUI/GUI_Preview.cpp:247
-#: src/libslic3r/GCode/PreviewData.cpp:159
+#: src/slic3r/GUI/BedShapeDialog.cpp:98 src/slic3r/GUI/GUI_Preview.cpp:249
+#: src/libslic3r/ExtrusionEntity.cpp:322
 msgid "Custom"
 msgstr "Customizado"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:101
+#: src/slic3r/GUI/BedShapeDialog.cpp:102
 msgid "Load shape from STL..."
 msgstr "Carregar forma do STL..."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:154
+#: src/slic3r/GUI/BedShapeDialog.cpp:155
 msgid "Settings"
-msgstr "config."
+msgstr "Config."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:171
+#: src/slic3r/GUI/BedShapeDialog.cpp:172
 msgid "Texture"
 msgstr "Textura"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:181 src/slic3r/GUI/BedShapeDialog.cpp:249
+#: src/slic3r/GUI/BedShapeDialog.cpp:182 src/slic3r/GUI/BedShapeDialog.cpp:261
 msgid "Load..."
 msgstr "Carregar..."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:189 src/slic3r/GUI/BedShapeDialog.cpp:257
-#: src/slic3r/GUI/Tab.cpp:3286
+#: src/slic3r/GUI/BedShapeDialog.cpp:190 src/slic3r/GUI/BedShapeDialog.cpp:269
+#: src/slic3r/GUI/Tab.cpp:3126
 msgid "Remove"
 msgstr "Remover"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:239
+#: src/slic3r/GUI/BedShapeDialog.cpp:223 src/slic3r/GUI/BedShapeDialog.cpp:302
+msgid "Not found:"
+msgstr "Não encontrado:"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:251
 msgid "Model"
 msgstr "Modelo"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:464
+#: src/slic3r/GUI/BedShapeDialog.cpp:487
 msgid "Choose an STL file to import bed shape from:"
 msgstr "Escolha um arquivo STL para importar o formato da mesa:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:471 src/slic3r/GUI/BedShapeDialog.cpp:520
-#: src/slic3r/GUI/BedShapeDialog.cpp:543
+#: src/slic3r/GUI/BedShapeDialog.cpp:494 src/slic3r/GUI/BedShapeDialog.cpp:543
+#: src/slic3r/GUI/BedShapeDialog.cpp:566
 msgid "Invalid file format."
 msgstr "Formato de arquivo inválido."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:482
+#: src/slic3r/GUI/BedShapeDialog.cpp:505
 msgid "Error! Invalid model"
 msgstr "Erro! Modelo inválido"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:490
+#: src/slic3r/GUI/BedShapeDialog.cpp:513
 msgid "The selected file contains no geometry."
 msgstr "O arquivo selecionado não contém geometria."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:494
+#: src/slic3r/GUI/BedShapeDialog.cpp:517
 msgid ""
 "The selected file contains several disjoint areas. This is not supported."
 msgstr "O arquivo selecionado contém áreas não juntas. Isso não é suportado."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:509
+#: src/slic3r/GUI/BedShapeDialog.cpp:532
 msgid "Choose a file to import bed texture from (PNG/SVG):"
 msgstr "Escolher um arquivo para importar a textura da mesa (PNG/SVG):"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:532
+#: src/slic3r/GUI/BedShapeDialog.cpp:555
 msgid "Choose an STL file to import bed model from:"
 msgstr "Escolha um arquivo STL para importar o modelo da mesa:"
 
-#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:535
+#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:929
 msgid "Bed Shape"
 msgstr "Formato da mesa"
 
@@ -305,6 +360,154 @@ msgstr ""
 "O valor foi mudado e não é igual ao valor do sistema ou da última config. "
 "salva"
 
+#: src/slic3r/GUI/ConfigManipulation.cpp:48
+msgid ""
+"Zero layer height is not valid.\n"
+"\n"
+"The layer height will be reset to 0.01."
+msgstr ""
+"A altura de camada zero não é válida.\n"
+"\n"
+"A altura da camada será redefinida para 0.01."
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:49
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1048
+#: src/libslic3r/PrintConfig.cpp:71
+msgid "Layer height"
+msgstr "Altura da camada"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:60
+msgid ""
+"Zero first layer height is not valid.\n"
+"\n"
+"The first layer height will be reset to 0.01."
+msgstr ""
+"A altura zero da primeira camada não é válida.\n"
+"\n"
+"A altura da primeira camada será redefinida para 0.01."
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:61 src/libslic3r/PrintConfig.cpp:889
+msgid "First layer height"
+msgstr "Altura da primeira camada"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:81
+#, no-c-format
+msgid ""
+"The Spiral Vase mode requires:\n"
+"- one perimeter\n"
+"- no top solid layers\n"
+"- 0% fill density\n"
+"- no support material\n"
+"- Ensure vertical shell thickness enabled\n"
+"- Detect thin walls disabled"
+msgstr ""
+"O modo Vaso Espiral requer:\n"
+"- um perímetro\n"
+"- sem camadas sólidas superiores\n"
+"- 0% de densidade de enchimento\n"
+"- nenhum material de suporte\n"
+"- habilitar opção Garantir a espessura da casca vertical\n"
+"- desativar opção Detectar paredes finas"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:89
+msgid "Shall I adjust those settings in order to enable Spiral Vase?"
+msgstr "Devo ajustar essas configurações para habilitar o Vaso Espiral?"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:90
+msgid "Spiral Vase"
+msgstr "Vaso espiral"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:115
+msgid ""
+"The Wipe Tower currently supports the non-soluble supports only\n"
+"if they are printed with the current extruder without triggering a tool "
+"change.\n"
+"(both support_material_extruder and support_material_interface_extruder need "
+"to be set to 0)."
+msgstr ""
+"A torre de limpeza suporta atualmente os suportes não-solúveis\n"
+" somente se são imprimidos com o extrusor atual sem provocar uma mudança da "
+"ferramenta. \n"
+"(ambos support_material_extruder e support_material_interface_extruder "
+"precisam ser definidos como 0)."
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:119
+msgid "Shall I adjust those settings in order to enable the Wipe Tower?"
+msgstr "Devo ajustar essas configurações para ativar a Torre limpa?"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:120
+#: src/slic3r/GUI/ConfigManipulation.cpp:140
+msgid "Wipe Tower"
+msgstr "Torre de limpeza"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:136
+msgid ""
+"For the Wipe Tower to work with the soluble supports, the support layers\n"
+"need to be synchronized with the object layers."
+msgstr ""
+"Para que a torre de limpeza funcione com os suportes solúveis, as camadas de "
+"suporte precisam ser sincronizadas com as camadas de objeto."
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:139
+msgid "Shall I synchronize support layers in order to enable the Wipe Tower?"
+msgstr "Devo sincronizar camadas de suporte para habilitar a Torre Limpa?"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:159
+msgid ""
+"Supports work better, if the following feature is enabled:\n"
+"- Detect bridging perimeters"
+msgstr ""
+"Os suportes funcionam melhor, se o seguinte recurso estiver ativado:\n"
+"- Detectar perímetros de ponte"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:162
+msgid "Shall I adjust those settings for supports?"
+msgstr "Devo ajustar essas configurações para suportes?"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:163
+msgid "Support Generator"
+msgstr "Gerador de suporte"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:208
+msgid "The %1% infill pattern is not supposed to work at 100%% density."
+msgstr ""
+"O padrão de preenchimento %1% não deve funcionar com 100%% de densidade."
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:210
+msgid "Shall I switch to rectilinear fill pattern?"
+msgstr "Devo mudar para padrão de preenchimento retilíneo?"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:211
+#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96
+#: src/slic3r/GUI/GUI_ObjectList.cpp:615 src/slic3r/GUI/Plater.cpp:527
+#: src/slic3r/GUI/Tab.cpp:1090 src/slic3r/GUI/Tab.cpp:1091
+#: src/libslic3r/PrintConfig.cpp:203 src/libslic3r/PrintConfig.cpp:416
+#: src/libslic3r/PrintConfig.cpp:436 src/libslic3r/PrintConfig.cpp:776
+#: src/libslic3r/PrintConfig.cpp:790 src/libslic3r/PrintConfig.cpp:827
+#: src/libslic3r/PrintConfig.cpp:981 src/libslic3r/PrintConfig.cpp:991
+#: src/libslic3r/PrintConfig.cpp:1009 src/libslic3r/PrintConfig.cpp:1028
+#: src/libslic3r/PrintConfig.cpp:1047 src/libslic3r/PrintConfig.cpp:1728
+#: src/libslic3r/PrintConfig.cpp:1745
+msgid "Infill"
+msgstr "Preenchimento"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:317
+msgid "Head penetration should not be greater than the head width."
+msgstr "A penetração da cabeça não deve ser maior do que a largura da cabeça."
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:319
+msgid "Invalid Head penetration"
+msgstr "Penetração inválida da cabeça"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:330
+msgid "Pinhead diameter should be smaller than the pillar diameter."
+msgstr ""
+"O diâmetro da cabeça de pino deve ser menor do que o diâmetro do pilar."
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:332
+msgid "Invalid pinhead diameter"
+msgstr "Diâmetro inválido da cabeça de pino"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:18
 msgid "Upgrade"
 msgstr "Atualização"
@@ -325,104 +528,105 @@ msgstr "Usuário"
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:39
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:43
 msgid "Active"
 msgstr "Ativar"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:45
-msgid "slic3r version"
-msgstr "versão do slic3r"
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:50
+msgid "PrusaSlicer version"
+msgstr "Versão do PrusaSlicer"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:46 src/slic3r/GUI/Preset.cpp:1311
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1533
 msgid "print"
 msgstr "impressão"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:47
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:52
 msgid "filaments"
 msgstr "filamentos"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:48 src/slic3r/GUI/Preset.cpp:1315
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1537
 msgid "printer"
 msgstr "impressora"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:52 src/slic3r/GUI/Tab.cpp:961
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:970
 msgid "vendor"
 msgstr "fornecedor"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:52
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57
 msgid "version"
 msgstr "versão"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53
-msgid "min slic3r version"
-msgstr "versão mínima do slic3r"
-
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:55
-msgid "max slic3r version"
-msgstr "versão máxima do slic3r"
-
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:58
+msgid "min PrusaSlicer version"
+msgstr "versão mínima do PrusaSlicer"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:60
+msgid "max PrusaSlicer version"
+msgstr "versão máxima do PrusaSlicer"
+
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:63
 msgid "model"
 msgstr "modelo"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:58
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:63
 msgid "variants"
 msgstr "variantes"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:70
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75
 #, c-format
 msgid "Incompatible with this %s"
 msgstr "Incompatível com isso %s"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:73
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78
 msgid "Activate"
 msgstr "Ativar"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:99
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:104
 msgid "Configuration Snapshots"
-msgstr "config. das versões"
+msgstr "Config. das versões"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:123
+#: src/slic3r/GUI/ConfigWizard.cpp:218
 msgid "nozzle"
 msgstr "bico de impressão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:127
+#: src/slic3r/GUI/ConfigWizard.cpp:222
 msgid "Alternate nozzles:"
 msgstr "Alternar bicos:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:193
+#: src/slic3r/GUI/ConfigWizard.cpp:289
 msgid "All standard"
 msgstr "Todos padrão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:194 src/slic3r/GUI/Tab.cpp:3336
+#: src/slic3r/GUI/ConfigWizard.cpp:289
+msgid "Standard"
+msgstr "Todos padrão"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:290 src/slic3r/GUI/ConfigWizard.cpp:573
+#: src/slic3r/GUI/Tab.cpp:3176
 msgid "All"
 msgstr "Todos"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:195 src/slic3r/GUI/Plater.cpp:469
-#: src/slic3r/GUI/Plater.cpp:607 src/libslic3r/GCode/PreviewData.cpp:146
+#: src/slic3r/GUI/ConfigWizard.cpp:291 src/slic3r/GUI/ConfigWizard.cpp:574
+#: src/slic3r/GUI/Plater.cpp:499 src/slic3r/GUI/Plater.cpp:639
+#: src/libslic3r/ExtrusionEntity.cpp:309
 msgid "None"
 msgstr "Nenhum"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:301
+#: src/slic3r/GUI/ConfigWizard.cpp:427
 #, c-format
 msgid "Welcome to the %s Configuration Assistant"
 msgstr "Bem-vindo ao  %s Assistente de config."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:303
+#: src/slic3r/GUI/ConfigWizard.cpp:429
 #, c-format
 msgid "Welcome to the %s Configuration Wizard"
 msgstr "Bem-vindo ao  %s Assistente de config."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:305
+#: src/slic3r/GUI/ConfigWizard.cpp:431
 msgid "Welcome"
 msgstr "Bem-vindo(a)"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/GUI_App.cpp:793
-#, c-format
-msgid "Run %s"
-msgstr "Executar %s"
-
-#: src/slic3r/GUI/ConfigWizard.cpp:311
+#: src/slic3r/GUI/ConfigWizard.cpp:433
 #, c-format
 msgid ""
 "Hello, welcome to %s! This %s helps you with the initial configuration; just "
@@ -431,47 +635,59 @@ msgstr ""
 "Olá, bem-vindo  ao %s! Isso %s te ajuda com a config. inicial; com apenas "
 "algumas config. e você estará pronto para imprimir."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:316
+#: src/slic3r/GUI/ConfigWizard.cpp:438
 msgid ""
 "Remove user profiles - install from scratch (a snapshot will be taken "
 "beforehand)"
 msgstr ""
 "Remover perfis de usuário - instalar do zero (uma snapshot será salva antes)"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:347
+#: src/slic3r/GUI/ConfigWizard.cpp:481
 #, c-format
 msgid "%s Family"
 msgstr "%s Família"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:384
-msgid "Custom Printer Setup"
-msgstr "config. da impressora customizada"
+#: src/slic3r/GUI/ConfigWizard.cpp:565
+msgid "Vendor:"
+msgstr "Fornecedor:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:384
+#: src/slic3r/GUI/ConfigWizard.cpp:566
+msgid "Profile:"
+msgstr "Perfil:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:603 src/slic3r/GUI/ConfigWizard.cpp:631
+msgid "(All)"
+msgstr "(Todos)"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:732
+msgid "Custom Printer Setup"
+msgstr "Config. da impressora customizada"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:732
 msgid "Custom Printer"
 msgstr "Impressora customizada"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:386
+#: src/slic3r/GUI/ConfigWizard.cpp:734
 msgid "Define a custom printer profile"
 msgstr "Definir uma config. para a impressora customizada"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:388
+#: src/slic3r/GUI/ConfigWizard.cpp:736
 msgid "Custom profile name:"
 msgstr "Nome customizado da config.:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:412
+#: src/slic3r/GUI/ConfigWizard.cpp:761
 msgid "Automatic updates"
 msgstr "Atualizações automáticas"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:412
+#: src/slic3r/GUI/ConfigWizard.cpp:761
 msgid "Updates"
 msgstr "Atualizações"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:420 src/slic3r/GUI/Preferences.cpp:69
+#: src/slic3r/GUI/ConfigWizard.cpp:769 src/slic3r/GUI/Preferences.cpp:64
 msgid "Check for application updates"
 msgstr "Verificar atualizações nas aplicações"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:424
+#: src/slic3r/GUI/ConfigWizard.cpp:773
 #, c-format
 msgid ""
 "If enabled, %s checks for new application versions online. When a new "
@@ -484,11 +700,11 @@ msgstr ""
 "inicialização do aplicativo (nunca durante o uso do programa). Este é apenas "
 "um mecanismos de notificação, nenhuma instalação automática é feita."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:430 src/slic3r/GUI/Preferences.cpp:77
+#: src/slic3r/GUI/ConfigWizard.cpp:779 src/slic3r/GUI/Preferences.cpp:80
 msgid "Update built-in Presets automatically"
 msgstr "Atualizar predefinições incorporadas automaticamente"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:434
+#: src/slic3r/GUI/ConfigWizard.cpp:783
 #, c-format
 msgid ""
 "If enabled, %s downloads updates of built-in system presets in the "
@@ -501,7 +717,7 @@ msgstr ""
 "separado. Quando uma nova versão predefinida se torna disponível, ela é "
 "oferecida na inicialização do aplicativo."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:437
+#: src/slic3r/GUI/ConfigWizard.cpp:786
 msgid ""
 "Updates are never applied without user's consent and never overwrite user's "
 "customized settings."
@@ -509,7 +725,7 @@ msgstr ""
 "Atualizações nunca são aplicadas sem a permissão do usuário e nunca sobre "
 "escrevem as config. do usuário."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:442
+#: src/slic3r/GUI/ConfigWizard.cpp:791
 msgid ""
 "Additionally a backup snapshot of the whole configuration is created before "
 "an update is applied."
@@ -517,56 +733,111 @@ msgstr ""
 "Além disso, uma captura de backup de toda a config. é criado antes que uma "
 "atualização seja aplicada."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:449
+#: src/slic3r/GUI/ConfigWizard.cpp:798 src/slic3r/GUI/GUI_ObjectList.cpp:1665
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3957 src/slic3r/GUI/Plater.cpp:3227
+#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3965
+msgid "Reload from disk"
+msgstr "Recarregar a partir do disco"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:801
+msgid ""
+"Export full pathnames of models and parts sources into 3mf and amf files"
+msgstr ""
+"Exportar nomes completos de modelos e fontes de peças para arquivos 3mf e amf"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:805
+msgid ""
+"If enabled, allows the Reload from disk command to automatically find and "
+"load the files when invoked.\n"
+"If not enabled, the Reload from disk command will ask to select each file "
+"using an open file dialog."
+msgstr ""
+"Se ativado, permite que o comando Recarregar a partir do disco encontre e "
+"carregue automaticamente os arquivos quando invocado.\n"
+"Se não estiver habilitado, o comando Recarregar a partir do disco pedirá "
+"para selecionar cada arquivo usando uma caixa de diálogo de arquivo aberto."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:813
+msgid "View mode"
+msgstr "Modo de visualização"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:815
+msgid ""
+"PrusaSlicer's user interfaces comes in three variants:\n"
+"Simple, Advanced, and Expert.\n"
+"The Simple mode shows only the most frequently used settings relevant for "
+"regular 3D printing. The other two offer progressively more sophisticated "
+"fine-tuning, they are suitable for advanced and expert users, respectively."
+msgstr ""
+"As interfaces de usuário do PrusaSlicer vêm em três variantes:\n"
+"Simples, Avançado e Especialista.\n"
+"O modo Simples mostra apenas as configurações mais utilizadas para impressão "
+"3D regular. Os outros dois oferecem ajustes finos progressivamente mais "
+"sofisticados, são adequados para usuários avançados e experientes, "
+"respectivamente."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:820
+msgid "Simple mode"
+msgstr "Modo simples"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:821
+msgid "Advanced mode"
+msgstr "Modo avançado"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:822
+msgid "Expert mode"
+msgstr "Modo especialista"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:856
 msgid "Other Vendors"
 msgstr "Outros fornecedores"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:451
+#: src/slic3r/GUI/ConfigWizard.cpp:860
 #, c-format
-msgid "Pick another vendor supported by %s:"
-msgstr "Escolha outro fornecedor suportado por %s:"
+msgid "Pick another vendor supported by %s"
+msgstr "Escolha outro fornecedor suportado por %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:497
+#: src/slic3r/GUI/ConfigWizard.cpp:891
 msgid "Firmware Type"
 msgstr "Tipo de Firmware"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:497 src/slic3r/GUI/Tab.cpp:2149
+#: src/slic3r/GUI/ConfigWizard.cpp:891 src/slic3r/GUI/Tab.cpp:1949
 msgid "Firmware"
 msgstr "Firmware"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:501
+#: src/slic3r/GUI/ConfigWizard.cpp:895
 msgid "Choose the type of firmware used by your printer."
 msgstr "Escolha o tipo de firmware utilizado na sua impressora."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:535
+#: src/slic3r/GUI/ConfigWizard.cpp:929
 msgid "Bed Shape and Size"
 msgstr "Forma e tamanho da mesa"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:538
+#: src/slic3r/GUI/ConfigWizard.cpp:932
 msgid "Set the shape of your printer's bed."
 msgstr "Insira o formato da mesa de impressão."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:558
+#: src/slic3r/GUI/ConfigWizard.cpp:952
 msgid "Filament and Nozzle Diameters"
 msgstr "Diâmetro do bico e do filamento"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:558
+#: src/slic3r/GUI/ConfigWizard.cpp:952
 msgid "Print Diameters"
 msgstr "Diâmetros de impressão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:572
+#: src/slic3r/GUI/ConfigWizard.cpp:966
 msgid "Enter the diameter of your printer's hot end nozzle."
 msgstr "Insira o diâmetro do bico de impressão."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:575
+#: src/slic3r/GUI/ConfigWizard.cpp:969
 msgid "Nozzle Diameter:"
 msgstr "Diâmetro do bico:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:585
+#: src/slic3r/GUI/ConfigWizard.cpp:979
 msgid "Enter the diameter of your filament."
 msgstr "Coloque o diâmetro do seu filamento."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:586
+#: src/slic3r/GUI/ConfigWizard.cpp:980
 msgid ""
 "Good precision is required, so use a caliper and do multiple measurements "
 "along the filament, then compute the average."
@@ -574,35 +845,35 @@ msgstr ""
 "É necessário uma boa precisão, utilize um paquímetro e realize várias "
 "medições ao longo do filamento, faça uma média."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:589
+#: src/slic3r/GUI/ConfigWizard.cpp:983
 msgid "Filament Diameter:"
 msgstr "Diâmetro do filamento:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:623
+#: src/slic3r/GUI/ConfigWizard.cpp:1017
 msgid "Extruder and Bed Temperatures"
 msgstr "Temperaturas da mesa e da extrusora"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:623
+#: src/slic3r/GUI/ConfigWizard.cpp:1017
 msgid "Temperatures"
 msgstr "Temperaturas"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:639
+#: src/slic3r/GUI/ConfigWizard.cpp:1033
 msgid "Enter the temperature needed for extruding your filament."
 msgstr "Coloque a temperatura necessária para extrusar seu filamento."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:640
+#: src/slic3r/GUI/ConfigWizard.cpp:1034
 msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
 msgstr "A regra de ouro é 160 à 230°C para PLA, e 215 à 250°C para ABS."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:643
+#: src/slic3r/GUI/ConfigWizard.cpp:1037
 msgid "Extrusion Temperature:"
 msgstr "Temperatura de extrusão:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:644 src/slic3r/GUI/ConfigWizard.cpp:658
+#: src/slic3r/GUI/ConfigWizard.cpp:1038 src/slic3r/GUI/ConfigWizard.cpp:1052
 msgid "°C"
 msgstr "°C"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:653
+#: src/slic3r/GUI/ConfigWizard.cpp:1047
 msgid ""
 "Enter the bed temperature needed for getting your filament to stick to your "
 "heated bed."
@@ -610,7 +881,7 @@ msgstr ""
 "Coloque a temperatura da mesa necessária para fazer com que seu filamento "
 "grude na mesa."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:654
+#: src/slic3r/GUI/ConfigWizard.cpp:1048
 msgid ""
 "A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have "
 "no heated bed."
@@ -618,82 +889,461 @@ msgstr ""
 "A regra de ouro é 60°C para PLA, e 110°C para ABS. Deixe em zero se não há "
 "mesa aquecida."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:657
+#: src/slic3r/GUI/ConfigWizard.cpp:1051
 msgid "Bed Temperature:"
 msgstr "Temperatura da mesa:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1138
+#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2013
+msgid "Filaments"
+msgstr "Filamentos"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2015
+msgid "SLA Materials"
+msgstr "Materiais"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1525
+msgid "FFF Technology Printers"
+msgstr "Impressoras de tecnologia Prusa FFF"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1530
+msgid "SLA Technology Printers"
+msgstr "Impressoras de tecnologia SLA"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1751 src/slic3r/GUI/DoubleSlider.cpp:1905
+#: src/slic3r/GUI/DoubleSlider.cpp:1926 src/slic3r/GUI/GUI.cpp:246
+msgid "Notice"
+msgstr "Aviso"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1760
+msgid "You have to select at least one filament for selected printers"
+msgstr ""
+"Você tem que selecionar pelo menos um filamento para impressoras selecionadas"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1761
+msgid "Do you want to automatic select default filaments?"
+msgstr "Deseja selecionar filamentos padrão automáticos?"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1771
+msgid "You have to select at least one material for selected printers"
+msgstr ""
+"Você tem que selecionar pelo menos um material para impressoras selecionadas"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1772
+msgid "Do you want to automatic select default materials?"
+msgstr "Deseja selecionar automaticamente materiais padrão?"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1976
 msgid "Select all standard printers"
 msgstr "Selecione todas as impressoras padrão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1141
+#: src/slic3r/GUI/ConfigWizard.cpp:1979
 msgid "< &Back"
 msgstr "< &Voltar"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1142
+#: src/slic3r/GUI/ConfigWizard.cpp:1980
 msgid "&Next >"
 msgstr "&Próximo >"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1143
+#: src/slic3r/GUI/ConfigWizard.cpp:1981
 msgid "&Finish"
 msgstr "&Final"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1144 src/slic3r/GUI/FirmwareDialog.cpp:151
-#: src/slic3r/GUI/ProgressStatusBar.cpp:27
+#: src/slic3r/GUI/ConfigWizard.cpp:1982 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/ProgressStatusBar.cpp:26
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1158
+#: src/slic3r/GUI/ConfigWizard.cpp:1995
 msgid "Prusa FFF Technology Printers"
 msgstr "Impressoras de tecnologia Prusa FFF"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1161
+#: src/slic3r/GUI/ConfigWizard.cpp:1998
 msgid "Prusa MSLA Technology Printers"
 msgstr "Impressoras de tecnologia Prusa MSLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1230
+#: src/slic3r/GUI/ConfigWizard.cpp:2013
+msgid "Filament Profiles Selection"
+msgstr "Seleção de Perfis de Filamento"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:2013 src/slic3r/GUI/GUI_ObjectList.cpp:3554
+msgid "Type:"
+msgstr "Tipo:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:2015
+msgid "SLA Material Profiles Selection"
+msgstr "Perfil de material SLA padrão"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:2015
+msgid "Layer height:"
+msgstr "Altura da camada:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:2109
 msgid "Configuration Assistant"
 msgstr "Assistente de config."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1231
+#: src/slic3r/GUI/ConfigWizard.cpp:2110
 msgid "Configuration &Assistant"
 msgstr "Assistente &de config."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1233
+#: src/slic3r/GUI/ConfigWizard.cpp:2112
 msgid "Configuration Wizard"
 msgstr "Assistente de config."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1234
+#: src/slic3r/GUI/ConfigWizard.cpp:2113
 msgid "Configuration &Wizard"
 msgstr "Assistente &de config."
 
-#: src/slic3r/GUI/Field.cpp:125
+#: src/slic3r/GUI/DoubleSlider.cpp:79
+msgid "Place bearings in slots and resume printing"
+msgstr "Coloque rolamentos em ranhuras e retome a impressão"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:950
+msgid "One layer mode"
+msgstr "Modo de uma camada"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:952
+msgid "Discard all custom changes"
+msgstr "Descarte todas as alterações personalizadas"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:955
+#, c-format
+msgid "Jump to height %s or Set extruder sequence for the entire print"
+msgstr ""
+"Pule para altura %s ou Definir seqüência de extrusora para toda a impressão"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:957 src/slic3r/GUI/DoubleSlider.cpp:1529
+#: src/slic3r/GUI/DoubleSlider.cpp:1651
+msgid "Jump to height"
+msgstr "Pule para altura"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:960
+msgid "Edit current color - Right click the colored slider segment"
+msgstr ""
+"Editar cor atual - Clique com o botão direito do mouse no segmento de "
+"controle deslizante colorido"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:970
+msgid "Print mode"
+msgstr "Modo da impressora"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:984
+msgid "Add extruder change - Left click"
+msgstr "Adicionar alteração extrusora - Clique à esquerda"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:986
+msgid ""
+"Add color change - Left click for predefined color or Shift + Left click for "
+"custom color selection"
+msgstr ""
+"Adicionar mudança de cor - Clique à esquerda para cor predefinida ou Shift + "
+"Clique à esquerda para seleção personalizada de cores"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:988
+msgid "Add color change - Left click"
+msgstr "Adicionar mudança de cor - Clique à esquerda"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:989
+msgid "or press \"+\" key"
+msgstr "ou pressione a tecla \"+\""
+
+#: src/slic3r/GUI/DoubleSlider.cpp:991
+msgid "Add another code - Ctrl + Left click"
+msgstr "Adicionar outro código - Ctrl + Clique à esquerda"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:992
+msgid "Add another code - Right click"
+msgstr "Adicionar outro código - Clique com o botão direito"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:998
+msgid ""
+"The sequential print is on.\n"
+"It's impossible to apply any custom G-code for objects printing "
+"sequentually.\n"
+"This code won't be processed during G-code generation."
+msgstr ""
+"A impressão sequencial está.\n"
+"É impossível aplicar qualquer G-code personalizado para impressão sequencial "
+"de objetos.\n"
+"Este código não será processado durante a geração de G-code."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1005
+msgid "Color change (\"%1%\")"
+msgstr "Mudança de cor (\"%1%\")"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1006
+msgid "Color change (\"%1%\") for Extruder %2%"
+msgstr "Mudança de cor (\"%1%\") para Extrusor %2%"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1009
+msgid "Pause print (\"%1%\")"
+msgstr "Pausar impressão (\"%1%\")"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1011
+msgid "Extruder (tool) is changed to Extruder \"%1%\""
+msgstr "Extrusora (ferramenta) é alterada para Extrusora \"%1%\""
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1019
+msgid "Note"
+msgstr "Nota"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1021
+msgid ""
+"G-code associated to this tick mark is in a conflict with print mode.\n"
+"Editing it will cause changes of Slider data."
+msgstr ""
+"O código G associado a esta marca de tique-taque está em conflito com o modo "
+"de impressão.\n"
+"Editá-lo causará alterações nos dados do Slider."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1024
+msgid ""
+"There is a color change for extruder that won't be used till the end of "
+"print job.\n"
+"This code won't be processed during G-code generation."
+msgstr ""
+"Há uma mudança de cor para extrusor que não será usada até o final do "
+"trabalho de impressão.\n"
+"Este código não será processado durante a geração de código G."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1027
+msgid ""
+"There is an extruder change set to the same extruder.\n"
+"This code won't be processed during G-code generation."
+msgstr ""
+"Há uma mudança extrusora definida para o mesmo extrusor.\n"
+"Este código não será processado durante a geração de código G."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1030
+msgid ""
+"There is a color change for extruder that has not been used before.\n"
+"Check your settings to avoid redundant color changes."
+msgstr ""
+"Há uma mudança de cor para extrusor que não foi usada antes.\n"
+"Verifique suas configurações para evitar alterações de cor redundantes."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1035
+msgid "Delete tick mark - Left click or press \"-\" key"
+msgstr ""
+"Excluir marca de marca de marca - Clique à esquerda ou pressione a tecla \"-"
+"\""
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1037
+msgid "Edit tick mark - Ctrl + Left click"
+msgstr "Editar marca de tique - Ctrl + Clique à esquerda"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1038
+msgid "Edit tick mark - Right click"
+msgstr "Editar marca de tique - Clique com o botão direito do mouse"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1134 src/slic3r/GUI/DoubleSlider.cpp:1170
+#: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1705
+#: src/slic3r/GUI/Tab.cpp:2322 src/libslic3r/GCode/PreviewData.cpp:445
+#, c-format
+msgid "Extruder %d"
+msgstr "Extrusora %d"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1135 src/slic3r/GUI/GUI_ObjectList.cpp:1706
+msgid "active"
+msgstr "ativar"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1144
+msgid "Switch code to Change extruder"
+msgstr "Mudar código para extrusor de alterar"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1144 src/slic3r/GUI/GUI_ObjectList.cpp:1672
+msgid "Change extruder"
+msgstr "Mudar extrusora"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1145
+msgid "Change extruder (N/A)"
+msgstr "Extrusora de alterações (N/A)"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1147
+msgid "Use another extruder"
+msgstr "Use outra extrusora"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1171
+msgid "used"
+msgstr "usado"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1179
+msgid "Switch code to Color change (%1%) for:"
+msgstr "Mudar o código para mudança de cor (%1%) Para:"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1180
+msgid "Add color change (%1%) for:"
+msgstr "Add/Excluir mudança de cor (%1%) para:"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1477
+msgid "Add color change"
+msgstr "Adicionar mudança de cor"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1487
+msgid "Add pause print"
+msgstr "Adicionar impressão de pausa"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1490
+msgid "Add custom G-code"
+msgstr "Adicionar código G personalizado"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1508
+msgid "Edit color"
+msgstr "Editar cor"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1509
+msgid "Edit pause print message"
+msgstr "Editar mensagem de impressão de pausa"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1510
+msgid "Edit custom G-code"
+msgstr "Editar código G personalizado"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1516
+msgid "Delete color change"
+msgstr "Excluir alteração de cor"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1517
+msgid "Delete tool change"
+msgstr "Excluir alteração de ferramenta"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1518
+msgid "Delete pause print"
+msgstr "Excluir impressão de pausa"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1519
+msgid "Delete custom G-code"
+msgstr "Excluir código G personalizado"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1532
+msgid "Set extruder sequence for the entire print"
+msgstr "Definir sequência de extrusora para toda a impressão"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1618
+msgid "Enter custom G-code used on current layer"
+msgstr "Digite o código G personalizado usado na camada atual"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1619
+msgid "Custom G-code on current layer (%1% mm)."
+msgstr "Código G personalizado na camada atual (%1% mm)."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1634
+msgid "Enter short message shown on Printer display when a print is paused"
+msgstr ""
+"Digite mensagem curta mostrada no visor da impressora quando uma impressão é "
+"pausada"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1635
+msgid "Message for pause print on current layer (%1% mm)."
+msgstr "Mensagem para impressão de pausa na camada atual (%1% mm)."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1650
+msgid "Enter the height you want to jump to"
+msgstr "Digite a altura que você deseja saltar para"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1899
+msgid "The last color change data was saved for a single extruder printing."
+msgstr ""
+"Parâmetros de mudança de ferramenta com impressoras de multi material com "
+"apenas uma extrusora."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1900 src/slic3r/GUI/DoubleSlider.cpp:1916
+msgid "The last color change data was saved for a multi extruder printing."
+msgstr ""
+"Os últimos dados de mudança de cor foram salvos para uma impressão de vários "
+"extrusores."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1902
+msgid "Your current changes will delete all saved color changes."
+msgstr "Suas alterações atuais excluirão todas as alterações de cor salvas."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1903 src/slic3r/GUI/DoubleSlider.cpp:1924
+msgid "Are you sure you want to continue?"
+msgstr "Você tem certeza que deseja continuar?"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1917
+msgid ""
+"Select YES if you want to delete all saved tool changes, \n"
+"NO if you want all tool changes switch to color changes, \n"
+"or CANCEL to leave it unchanged."
+msgstr ""
+"Selecione SIM se quiser excluir todas as alterações de ferramenta salvas, \n"
+"NÃO, se você quiser que todas as alterações de ferramenta mudem para "
+"mudanças de cor, \n"
+"ou CANCELAR para deixá-lo inalterado."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1920
+msgid "Do you want to delete all saved tool changes?"
+msgstr "Deseja excluir todas as alterações de ferramenta salvas?"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1922
+msgid ""
+"The last color change data was saved for a multi extruder printing with tool "
+"changes for whole print."
+msgstr ""
+"Os últimos dados de mudança de cor foram salvos para uma impressão multi-"
+"extrusora com alterações de ferramenta para impressão inteira."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1923
+msgid "Your current changes will delete all saved extruder (tool) changes."
+msgstr ""
+"Suas alterações atuais excluirão todas as alterações do extrusor "
+"(ferramenta) salvos."
+
+#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:23
+msgid "Set extruder sequence"
+msgstr "Definir seqüência de extrusor"
+
+#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:39
+msgid "Set extruder change for every"
+msgstr "Definir a mudança de extrusor para cada"
+
+#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52
+#: src/libslic3r/PrintConfig.cpp:362 src/libslic3r/PrintConfig.cpp:994
+#: src/libslic3r/PrintConfig.cpp:1505 src/libslic3r/PrintConfig.cpp:1690
+#: src/libslic3r/PrintConfig.cpp:1750 src/libslic3r/PrintConfig.cpp:1930
+#: src/libslic3r/PrintConfig.cpp:1976
+msgid "layers"
+msgstr "camadas"
+
+#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:136
+msgid "Set extruder(tool) sequence"
+msgstr "Definir sequência da extrusora (ferramenta)"
+
+#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:182
+msgid "Remove extruder from sequence"
+msgstr "Remover extrusor da seqüência"
+
+#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:192
+msgid "Add extruder to sequence"
+msgstr "Adicionar extrusor à seqüência"
+
+#: src/slic3r/GUI/Field.cpp:136
 msgid "default value"
 msgstr "valor padrão"
 
-#: src/slic3r/GUI/Field.cpp:128
+#: src/slic3r/GUI/Field.cpp:139
 msgid "parameter name"
 msgstr "nome do parâmetro"
 
-#: src/slic3r/GUI/Field.cpp:139 src/slic3r/GUI/OptionsGroup.cpp:569
+#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:581
 msgid "N/A"
 msgstr "N/D"
 
-#: src/slic3r/GUI/Field.cpp:158
+#: src/slic3r/GUI/Field.cpp:175
 #, c-format
 msgid "%s doesn't support percentage"
 msgstr "%s não suporta porcentagem"
 
-#: src/slic3r/GUI/Field.cpp:174 src/slic3r/GUI/Field.cpp:197
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:337
+#: src/slic3r/GUI/Field.cpp:195 src/slic3r/GUI/Field.cpp:226
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:376
 msgid "Invalid numeric input."
 msgstr "Entrada numérica não válida."
 
-#: src/slic3r/GUI/Field.cpp:179
+#: src/slic3r/GUI/Field.cpp:204
 msgid "Input value is out of range"
 msgstr "Valor de entrada está fora do limite"
 
-#: src/slic3r/GUI/Field.cpp:206
+#: src/slic3r/GUI/Field.cpp:240
 #, c-format
 msgid ""
 "Do you mean %s%% instead of %s %s?\n"
@@ -704,7 +1354,7 @@ msgstr ""
 "Selecione SIM se quiser trocar esse valor para %s%%, \n"
 "ou NÃO se você tem certeza que %s %s é o valor correto."
 
-#: src/slic3r/GUI/Field.cpp:209
+#: src/slic3r/GUI/Field.cpp:243
 msgid "Parameter validation"
 msgstr "Validação do parâmetro"
 
@@ -791,8 +1441,8 @@ msgstr "Atualizador de Firmware"
 msgid "Firmware image:"
 msgstr "Imagem do Firmware:"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1870
-#: src/slic3r/GUI/Tab.cpp:1926
+#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1657
+#: src/slic3r/GUI/Tab.cpp:1719
 msgid "Browse"
 msgstr "Procurar"
 
@@ -825,11 +1475,12 @@ msgid "Advanced: Output log"
 msgstr "Avançado: log de Saída"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:852
+#: src/slic3r/GUI/Mouse3DController.cpp:336
 #: src/slic3r/GUI/PrintHostDialogs.cpp:161
 msgid "Close"
 msgstr "Fechar"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:903
+#: src/slic3r/GUI/FirmwareDialog.cpp:902
 msgid ""
 "Are you sure you want to cancel firmware flashing?\n"
 "This could leave your printer in an unusable state!"
@@ -837,35 +1488,107 @@ msgstr ""
 "Você tem certeza que gostaria de cancelar a atualização de Firmware? \n"
 "Isso poderia deixar a sua impressora inutilizável!"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:904
+#: src/slic3r/GUI/FirmwareDialog.cpp:903
 msgid "Confirmation"
 msgstr "Confirmação"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:907
+#: src/slic3r/GUI/FirmwareDialog.cpp:906
 msgid "Cancelling..."
 msgstr "Cancelando..."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:534
-msgid "Layers heights"
-msgstr "Altura de camada"
+#: src/slic3r/GUI/GLCanvas3D.cpp:234 src/slic3r/GUI/GLCanvas3D.cpp:4573
+msgid "Variable layer height"
+msgstr "Altura da camada variável"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:631
+#: src/slic3r/GUI/GLCanvas3D.cpp:237
+msgid "Left mouse button:"
+msgstr "Botão esquerdo do mouse:"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:240
+msgid "Add detail"
+msgstr "Adicionar config."
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:243
+msgid "Right mouse button:"
+msgstr "Botão direito do mouse:"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:246
+msgid "Remove detail"
+msgstr "Remover detalhes"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:249
+msgid "Shift + Left mouse button:"
+msgstr "Shift + Botão do mouse esquerdo:"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:252
+msgid "Reset to base"
+msgstr "Reset para base"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:255
+msgid "Shift + Right mouse button:"
+msgstr "Shift + Botão do mouse direito:"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:258
+msgid "Smoothing"
+msgstr "Suavizando"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:261
+msgid "Mouse wheel:"
+msgstr "Scroll do mouse:"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:264
+msgid "Increase/decrease edit area"
+msgstr "Aumentar/diminuir a área de edição"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:267
+msgid "Adaptive"
+msgstr "Adaptativo"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:273
+msgid "Quality / Speed"
+msgstr "Qualidade / Velocidade"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:277
+msgid "Higher print quality versus higher print speed."
+msgstr "Maior qualidade de impressão versus maior velocidade de impressão."
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:288
+msgid "Smooth"
+msgstr "Suave"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:294 src/libslic3r/PrintConfig.cpp:511
+msgid "Radius"
+msgstr "Raio"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:304
+msgid "Keep min"
+msgstr "Mantenha min."
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:313
+msgid "Reset"
+msgstr "Redefinir"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:599
+msgid "Variable layer height - Manual edit"
+msgstr "Habilitar altura de camada variável"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:685
 msgid "An object outside the print area was detected"
 msgstr "Um objeto foi detectado fora da área de impressão"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:632
+#: src/slic3r/GUI/GLCanvas3D.cpp:686
 msgid "A toolpath outside the print area was detected"
 msgstr "Há movimentos fora da área de impressão"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:633
+#: src/slic3r/GUI/GLCanvas3D.cpp:687
 msgid "SLA supports outside the print area were detected"
 msgstr "Suportes de SLA foram detectados fora da área de impressão"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:634
-msgid "Some objects are not visible when editing supports"
-msgstr "Alguns objetos não são visíveis quando editando suportes"
+#: src/slic3r/GUI/GLCanvas3D.cpp:688
+msgid "Some objects are not visible"
+msgstr "Alguns objetos não são visíveis"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:636
+#: src/slic3r/GUI/GLCanvas3D.cpp:690
 msgid ""
 "An object outside the print area was detected\n"
 "Resolve the current problem to continue slicing"
@@ -873,117 +1596,171 @@ msgstr ""
 "Um objeto foi encontrado fora da área de impressão\n"
 "Resolva o problema atual para continuar o fatiamento"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1733
+#: src/slic3r/GUI/GLCanvas3D.cpp:904 src/slic3r/GUI/GLCanvas3D.cpp:933
+msgid "Default print color"
+msgstr "Cor de impressão padrão"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:934 src/slic3r/GUI/GLCanvas3D.cpp:943
+#: src/slic3r/GUI/GLCanvas3D.cpp:982
+msgid "Pause print or custom G-code"
+msgstr "Pausa impressão ou código G personalizado"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:955
+#, c-format
+msgid "up to %.2f mm"
+msgstr "até %.2f mm"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:959
+#, c-format
+msgid "above %.2f mm"
+msgstr "acima de %.2f mm"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:963
+#, c-format
+msgid "%.2f - %.2f mm"
+msgstr "%.2f - %.2f mm"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:995
+#, c-format
+msgid "Color change for Extruder %d at %.2f mm"
+msgstr "Mudança de cor para Extrusor %d em %.2f mm"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:1305
+msgid "Seq."
+msgstr "Seq."
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:1701
+msgid "Variable layer height - Reset"
+msgstr "Habilitar altura de camada variável - Resetar"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:1709
+msgid "Variable layer height - Adaptive"
+msgstr "Habilitar altura de camada variável - Adaptativo"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:1717
+msgid "Variable layer height - Smooth all"
+msgstr "Habilitar altura de camada variável - Deixar tudo suave"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:2053
 msgid "Mirror Object"
 msgstr "Espelhar objeto"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2970
+#: src/slic3r/GUI/GLCanvas3D.cpp:2921
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:570
+msgid "Gizmo-Move"
+msgstr "Gizmo-Mover"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3001
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:572
+msgid "Gizmo-Rotate"
+msgstr "Gizmo-Rotacionar"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:3505
 msgid "Move Object"
 msgstr "Mover objeto"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3506
+#: src/slic3r/GUI/GLCanvas3D.cpp:4047
 msgid "Undo History"
 msgstr "Desfazer histórico"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3506
+#: src/slic3r/GUI/GLCanvas3D.cpp:4047
 msgid "Redo History"
 msgstr "Refazer histórico"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3524
+#: src/slic3r/GUI/GLCanvas3D.cpp:4065
 #, c-format
 msgid "Undo %1$d Action"
 msgid_plural "Undo %1$d Actions"
 msgstr[0] "Desfazer ação de %1$d"
 msgstr[1] "Desfazer ações de %1$d"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3524
+#: src/slic3r/GUI/GLCanvas3D.cpp:4065
 #, c-format
 msgid "Redo %1$d Action"
 msgid_plural "Redo %1$d Actions"
 msgstr[0] "Refazer ação de %1$d"
 msgstr[1] "Refazer ações de %1$d"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3571
+#: src/slic3r/GUI/GLCanvas3D.cpp:4467
 msgid "Add..."
 msgstr "Adicionar..."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3579 src/slic3r/GUI/GUI_ObjectList.cpp:1501
-#: src/slic3r/GUI/Plater.cpp:3520 src/slic3r/GUI/Plater.cpp:3539
-#: src/slic3r/GUI/Tab.cpp:3286
+#: src/slic3r/GUI/GLCanvas3D.cpp:4475 src/slic3r/GUI/GUI_ObjectList.cpp:1719
+#: src/slic3r/GUI/Plater.cpp:3933 src/slic3r/GUI/Plater.cpp:3955
+#: src/slic3r/GUI/Tab.cpp:3126
 msgid "Delete"
 msgstr "Deletar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3588 src/slic3r/GUI/Plater.cpp:4172
+#: src/slic3r/GUI/GLCanvas3D.cpp:4484 src/slic3r/GUI/KBShortcutsDialog.cpp:129
+#: src/slic3r/GUI/Plater.cpp:4671
 msgid "Delete all"
 msgstr "Deletar todos"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3597 src/slic3r/GUI/KBShortcutsDialog.cpp:137
-#: src/slic3r/GUI/Plater.cpp:2681
+#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:157
+#: src/slic3r/GUI/Plater.cpp:2756
 msgid "Arrange"
 msgstr "Arranjar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3597 src/slic3r/GUI/KBShortcutsDialog.cpp:138
+#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:158
 msgid "Arrange selection"
 msgstr "Arranjar seleção"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3609
+#: src/slic3r/GUI/GLCanvas3D.cpp:4505
 msgid "Copy"
 msgstr "Copiar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3618
+#: src/slic3r/GUI/GLCanvas3D.cpp:4514
 msgid "Paste"
 msgstr "Colar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3630 src/slic3r/GUI/Plater.cpp:3400
-#: src/slic3r/GUI/Plater.cpp:3412 src/slic3r/GUI/Plater.cpp:3526
+#: src/slic3r/GUI/GLCanvas3D.cpp:4526 src/slic3r/GUI/Plater.cpp:3790
+#: src/slic3r/GUI/Plater.cpp:3802 src/slic3r/GUI/Plater.cpp:3942
 msgid "Add instance"
 msgstr "Adicionar instância"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3641 src/slic3r/GUI/Plater.cpp:3528
+#: src/slic3r/GUI/GLCanvas3D.cpp:4537 src/slic3r/GUI/Plater.cpp:3944
 msgid "Remove instance"
 msgstr "Remover instância"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3654
+#: src/slic3r/GUI/GLCanvas3D.cpp:4550
 msgid "Split to objects"
 msgstr "Dividir em objetos"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3664 src/slic3r/GUI/GUI_ObjectList.cpp:1340
+#: src/slic3r/GUI/GLCanvas3D.cpp:4560 src/slic3r/GUI/GUI_ObjectList.cpp:1488
 msgid "Split to parts"
 msgstr "Dividir em partes"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3677 src/slic3r/GUI/GUI_ObjectList.cpp:2203
-msgid "Height ranges"
-msgstr "Limites de altura"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:3728 src/slic3r/GUI/MainFrame.cpp:570
+#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/KBShortcutsDialog.cpp:130
+#: src/slic3r/GUI/MainFrame.cpp:592
 msgid "Undo"
 msgstr "Desfazer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3728 src/slic3r/GUI/GLCanvas3D.cpp:3761
+#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/GLCanvas3D.cpp:4657
 msgid "Click right mouse button to open History"
 msgstr "Clique no botão direito para abrir o Histórico"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3745
+#: src/slic3r/GUI/GLCanvas3D.cpp:4641
 msgid "Next Undo action: %1%"
 msgstr "Próxima ação de desfazer: %1%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3761 src/slic3r/GUI/MainFrame.cpp:573
+#: src/slic3r/GUI/GLCanvas3D.cpp:4657 src/slic3r/GUI/KBShortcutsDialog.cpp:131
+#: src/slic3r/GUI/MainFrame.cpp:595
 msgid "Redo"
 msgstr "Refazer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3777
+#: src/slic3r/GUI/GLCanvas3D.cpp:4673
 msgid "Next Redo action: %1%"
 msgstr "Próxima ação de refazer: %1%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:5555
+#: src/slic3r/GUI/GLCanvas3D.cpp:6598
 msgid "Selection-Add from rectangle"
 msgstr "Seleção-Adicionar do retângulo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:5574
+#: src/slic3r/GUI/GLCanvas3D.cpp:6617
 msgid "Selection-Remove from rectangle"
 msgstr "Seleção-remover do retângulo"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:273
+#: src/slic3r/GUI/GLCanvas3DManager.cpp:306
 #, c-format
 msgid ""
 "PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n"
@@ -992,11 +1769,11 @@ msgstr ""
 "PrusaSlicer requer drivers capazes de executar OpenGL 2.0, \n"
 "enquanto a versão do OpenGL %s, renderização %s, fornecedor %s foi detectada."
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:276
+#: src/slic3r/GUI/GLCanvas3DManager.cpp:309
 msgid "You may need to update your graphics card driver."
 msgstr "Você pode ter que atualizar os drivers da sua placa de vídeo."
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:279
+#: src/slic3r/GUI/GLCanvas3DManager.cpp:312
 msgid ""
 "As a workaround, you may run PrusaSlicer with a software rendered 3D "
 "graphics by running prusa-slicer.exe with the --sw_renderer parameter."
@@ -1005,28 +1782,28 @@ msgstr ""
 "renderizando gráficos 3D por executar Prusa-slicer.exe com o parâmetro--"
 "sw_renderer."
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:281
+#: src/slic3r/GUI/GLCanvas3DManager.cpp:314
 msgid "Unsupported OpenGL version"
 msgstr "Versão do OpenGL não suportada"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:40
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:145 src/libslic3r/PrintConfig.cpp:3212
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:144 src/libslic3r/PrintConfig.cpp:3412
 msgid "Cut"
 msgstr "Cortar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:150
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:168
 msgid "Keep upper part"
 msgstr "Manter parte superior"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:151
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:169
 msgid "Keep lower part"
 msgstr "Manter parte inferior"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:152
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
 msgid "Rotate lower part upwards"
 msgstr "Rotacione as partes inferiores para cima"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:155
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:175
 msgid "Perform cut"
 msgstr "Aplicar o corte"
 
@@ -1034,264 +1811,289 @@ msgstr "Aplicar o corte"
 msgid "Place on face"
 msgstr "Colocar em uma face"
 
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40
+msgid "Hollow this object"
+msgstr "Deixar este objeto oco"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
+msgid "Preview hollowed and drilled model"
+msgstr "Modelo de visualização oco e perfurado"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
+msgid "Offset"
+msgstr "Compensamento do Z"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
+msgid "Quality"
+msgstr "Qualidade"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:2944
+msgid "Closing distance"
+msgstr "Distância de fechamento"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
+msgid "Hole diameter"
+msgstr "Diâmetro do orifício"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
+msgid "Hole depth"
+msgstr "Profundidade do orifício"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
+msgid "Remove selected holes"
+msgstr "Remover os buracos selecionados"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
+msgid "Remove all holes"
+msgstr "Remova todos os buracos"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
+msgid "Clipping of view"
+msgstr "Recorte de vista"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
+msgid "Reset direction"
+msgstr "Restabelecer direção"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
+msgid "Show supports"
+msgstr "Mostrar suportes"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:423
+msgid "Add drainage hole"
+msgstr "Adicionar orifício de drenagem"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:541
+msgid "Delete drainage hole"
+msgstr "Excluir orifício de drenagem"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:815
+msgid "Hollowing parameter change"
+msgstr "Mudança de parâmetro de suporte"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:887
+msgid "Change drainage hole diameter"
+msgstr "Mudar o diâmetro do orifício de drenagem"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:979
+msgid "Hollow and drill"
+msgstr "Oco e broca"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:1061
+msgid "Move drainage hole"
+msgstr "Mover o orifício de drenagem"
+
 #: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:48
 msgid "Move"
 msgstr "Mover"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:177
-msgid "Position (mm)"
-msgstr "Posição (mm)"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:177
-msgid "Displacement (mm)"
-msgstr "Deslocamento (mm)"
-
 #: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:477
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:496
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:514
-#: src/libslic3r/PrintConfig.cpp:3261
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:480
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:499
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:517
+#: src/libslic3r/PrintConfig.cpp:3461
 msgid "Rotate"
 msgstr "Rotacionar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:482
-msgid "Rotation (deg)"
-msgstr "Rotacionar (graus)"
-
 #: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:47
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:392
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:497
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:515
-#: src/libslic3r/PrintConfig.cpp:3276
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:230
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:500
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:518
+#: src/libslic3r/PrintConfig.cpp:3476
 msgid "Scale"
 msgstr "Escala"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:292
-msgid "Scale (%)"
-msgstr "Escala (%)"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:44
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47
 msgid "Head diameter"
 msgstr "Diâmetro da cabeça"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
 msgid "Lock supports under new islands"
 msgstr "Travar suportes debaixo de novas ilhas"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:46
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1449
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1361
 msgid "Remove selected points"
 msgstr "Remover pontos selecionados"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
 msgid "Remove all points"
 msgstr "Remover todos os pontos"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1452
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
 msgid "Apply changes"
 msgstr "Aplicar mudanças"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1453
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
 msgid "Discard changes"
 msgstr "Descartar mudanças"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
 msgid "Minimal points distance"
 msgstr "Distância mínima entre pontos"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
-#: src/libslic3r/PrintConfig.cpp:2651
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/libslic3r/PrintConfig.cpp:2774
 msgid "Support points density"
 msgstr "Densidade dos pontos de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1455
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
 msgid "Auto-generate points"
 msgstr "Pontos gerados automaticamente"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
 msgid "Manual editing"
 msgstr "Edição manual"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
-msgid "Clipping of view"
-msgstr "Recorte de vista"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
-msgid "Reset direction"
-msgstr "Restabelecer direção"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:531
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:484
 msgid "Add support point"
 msgstr "Adicionar ponto de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:719
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:621
 msgid "Delete support point"
 msgstr "Deletar ponto de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:920
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:810
 msgid "Change point head diameter"
 msgstr "Mudar o diâmetro do ponto da cabeça"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:986
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:878
 msgid "Support parameter change"
 msgstr "Mudança de parâmetro de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1094
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:986
 msgid "SLA Support Points"
 msgstr "Pontos de suporte SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1115
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1007
 msgid "SLA gizmo turned on"
 msgstr "Gizmo de SLA ligado"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1137
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1035
 msgid "Do you want to save your manually edited support points?"
 msgstr "Você deseja salvar os pontos manualmente editados?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1138
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1036
 msgid "Save changes?"
 msgstr "Salvar mudanças?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1150
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048
 msgid "SLA gizmo turned off"
 msgstr "Gizmo de SLA desligado"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1187
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1087
 msgid "Move support point"
 msgstr "Mover pontos de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1286
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186
 msgid "Support points edit"
 msgstr "Edição de pontos de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1355
-msgid ""
-"Autogeneration will erase all manually edited points.\n"
-"\n"
-"Are you sure you want to do it?\n"
-msgstr ""
-"Gerar automaticamente irá apagar todos os pontos manualmente editados. Tem "
-"certeza que quer gerar?\n"
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1258
+msgid "Autogeneration will erase all manually edited points."
+msgstr "Gerar automaticamente irá apagar todos os pontos manualmente editados."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1357 src/slic3r/GUI/GUI.cpp:289
-#: src/slic3r/GUI/WipeTowerDialog.cpp:44 src/slic3r/GUI/WipeTowerDialog.cpp:328
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1259
+msgid "Are you sure you want to do it?"
+msgstr "Tem certeza que quer fazer isso?"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1260 src/slic3r/GUI/GUI.cpp:258
+#: src/slic3r/GUI/Tab.cpp:3086 src/slic3r/GUI/WipeTowerDialog.cpp:45
+#: src/slic3r/GUI/WipeTowerDialog.cpp:366
 msgid "Warning"
 msgstr "Aviso"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1360
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1263
 msgid "Autogenerate support points"
 msgstr "Pontos de suporte gerados automaticamente"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1412
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1324
 msgid "SLA gizmo keyboard shortcuts"
 msgstr "Atalhos no teclado para gizmo SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1423
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1335
 msgid "Note: some shortcuts work in (non)editing mode only."
 msgstr "Nota: alguns atalhos funcionam somente em modos que não editam."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1441
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1444
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1445
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1353
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1356
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1357
 msgid "Left click"
 msgstr "Clique esquerdo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1441
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1353
 msgid "Add point"
 msgstr "Adicionar ponto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1442
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1354
 msgid "Right click"
 msgstr "Clique direito"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1442
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1354
 msgid "Remove point"
 msgstr "Remover ponto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1443
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1446
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1447
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1355
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1358
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1359
 msgid "Drag"
 msgstr "Arrastar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1443
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1355
 msgid "Move point"
 msgstr "Mover ponto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1444
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1356
 msgid "Add point to selection"
 msgstr "Adicionar ponto à seleção"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1445
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1357
 msgid "Remove point from selection"
 msgstr "Remover ponto da seleção"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1446
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1358
 msgid "Select by rectangle"
 msgstr "Selecionar por retângulo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1447
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1359
 msgid "Deselect by rectangle"
 msgstr "Desselecionar por retângulo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1448
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1360
 msgid "Select all points"
 msgstr "Selecionar todos os pontos"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1450
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1362
 msgid "Mouse wheel"
 msgstr "Scroll do mouse"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1450
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1362
 msgid "Move clipping plane"
 msgstr "Mover plano de recorte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1451
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
 msgid "Reset clipping plane"
 msgstr "Restabelecer plano de recorte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1454
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
 msgid "Switch to editing mode"
 msgstr "Alterar para modo de edição"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:569
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:497
 msgid "Gizmo-Place on Face"
 msgstr "Gizmo-Colocar em uma face"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:641
-msgid "Gizmo-Move"
-msgstr "Gizmo-Mover"
-
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:646
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:571
 msgid "Gizmo-Scale"
 msgstr "Gizmo-Escala"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:651
-msgid "Gizmo-Rotate"
-msgstr "Gizmo-Rotacionar"
-
-#: src/slic3r/GUI/GUI.cpp:141 src/slic3r/GUI/Tab.cpp:3145
-msgid "It's impossible to print multi-part object(s) with SLA technology."
-msgstr ""
-"É impossível imprimir objetos com múltiplas partes com a tecnologia SLA."
-
-#: src/slic3r/GUI/GUI.cpp:142
-msgid "Please check and fix your object list."
-msgstr "Favor verificar e concertar sua lista de objetos."
-
-#: src/slic3r/GUI/GUI.cpp:143 src/slic3r/GUI/Plater.cpp:2246
-#: src/slic3r/GUI/Tab.cpp:3147
-msgid "Attention!"
-msgstr "Atenção!"
-
-#: src/slic3r/GUI/GUI.cpp:283
-msgid "Notice"
-msgstr "Aviso"
-
-#: src/slic3r/GUI/GUI_App.cpp:132
+#: src/slic3r/GUI/GUI_App.cpp:138
 #, c-format
 msgid ""
 "%s has encountered an error. It was likely caused by running out of memory. "
@@ -1306,158 +2108,190 @@ msgstr ""
 "\n"
 "O aplicativo será encerrado agora."
 
-#: src/slic3r/GUI/GUI_App.cpp:135
+#: src/slic3r/GUI/GUI_App.cpp:141
 msgid "Fatal error"
 msgstr "Erro fatal"
 
-#: src/slic3r/GUI/GUI_App.cpp:442
+#: src/slic3r/GUI/GUI_App.cpp:446
 msgid "Changing of an application language"
 msgstr "Alteração de um idioma do aplicativo"
 
-#: src/slic3r/GUI/GUI_App.cpp:450 src/slic3r/GUI/GUI_App.cpp:459
+#: src/slic3r/GUI/GUI_App.cpp:454 src/slic3r/GUI/GUI_App.cpp:463
 msgid "Recreating"
 msgstr "Recriando"
 
-#: src/slic3r/GUI/GUI_App.cpp:463
+#: src/slic3r/GUI/GUI_App.cpp:470
 msgid "Loading of current presets"
 msgstr "Carregando presets"
 
-#: src/slic3r/GUI/GUI_App.cpp:471
+#: src/slic3r/GUI/GUI_App.cpp:478
 msgid "Loading of a mode view"
 msgstr "Carregamento de um modelo de vista"
 
-#: src/slic3r/GUI/GUI_App.cpp:551
+#: src/slic3r/GUI/GUI_App.cpp:559
 msgid "Choose one file (3MF/AMF):"
 msgstr "Escolha um arquivo (3MF/AMF):"
 
-#: src/slic3r/GUI/GUI_App.cpp:563
+#: src/slic3r/GUI/GUI_App.cpp:571
 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Escolha um ou mais arquivos (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/GUI_App.cpp:625
+#: src/slic3r/GUI/GUI_App.cpp:633
 msgid "Select the language"
 msgstr "Selecione a linguagem"
 
-#: src/slic3r/GUI/GUI_App.cpp:625
+#: src/slic3r/GUI/GUI_App.cpp:633
 msgid "Language"
 msgstr "Linguagem"
 
-#: src/slic3r/GUI/GUI_App.cpp:796
+#: src/slic3r/GUI/GUI_App.cpp:801
+#, c-format
+msgid "Run %s"
+msgstr "Executar %s"
+
+#: src/slic3r/GUI/GUI_App.cpp:804
 msgid "&Configuration Snapshots"
 msgstr "&Captura das config."
 
-#: src/slic3r/GUI/GUI_App.cpp:796
+#: src/slic3r/GUI/GUI_App.cpp:804
 msgid "Inspect / activate configuration snapshots"
 msgstr "Inspecionar / ativar capturas de config."
 
-#: src/slic3r/GUI/GUI_App.cpp:797
+#: src/slic3r/GUI/GUI_App.cpp:805
 msgid "Take Configuration &Snapshot"
 msgstr "Capturar &config."
 
-#: src/slic3r/GUI/GUI_App.cpp:797
+#: src/slic3r/GUI/GUI_App.cpp:805
 msgid "Capture a configuration snapshot"
 msgstr "Capturar uma config."
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:806
+msgid "Check for updates"
+msgstr "Verificar Atualizações"
+
+#: src/slic3r/GUI/GUI_App.cpp:806
+msgid "Check for configuration updates"
+msgstr "Verificar atualizações nas aplicações"
+
+#: src/slic3r/GUI/GUI_App.cpp:808
 msgid "&Preferences"
 msgstr "&Preferências"
 
-#: src/slic3r/GUI/GUI_App.cpp:806
+#: src/slic3r/GUI/GUI_App.cpp:814
 msgid "Application preferences"
 msgstr "Preferências de aplicação"
 
-#: src/slic3r/GUI/GUI_App.cpp:809 src/slic3r/GUI/wxExtensions.cpp:3043
+#: src/slic3r/GUI/GUI_App.cpp:817 src/slic3r/GUI/wxExtensions.cpp:756
 msgid "Simple"
 msgstr "Simples"
 
-#: src/slic3r/GUI/GUI_App.cpp:809
+#: src/slic3r/GUI/GUI_App.cpp:817
 msgid "Simple View Mode"
 msgstr "Modo simples de visualização"
 
-#: src/slic3r/GUI/GUI_App.cpp:810 src/slic3r/GUI/GUI_ObjectList.cpp:97
-#: src/slic3r/GUI/GUI_ObjectList.cpp:620 src/slic3r/GUI/Tab.cpp:1061
-#: src/slic3r/GUI/Tab.cpp:1076 src/slic3r/GUI/Tab.cpp:1174
-#: src/slic3r/GUI/Tab.cpp:1177 src/slic3r/GUI/Tab.cpp:1685
-#: src/slic3r/GUI/Tab.cpp:2169 src/slic3r/GUI/Tab.cpp:3785
-#: src/slic3r/GUI/wxExtensions.cpp:3044 src/libslic3r/PrintConfig.cpp:83
-#: src/libslic3r/PrintConfig.cpp:197 src/libslic3r/PrintConfig.cpp:360
-#: src/libslic3r/PrintConfig.cpp:1013 src/libslic3r/PrintConfig.cpp:2226
+#: src/slic3r/GUI/GUI_App.cpp:818 src/slic3r/GUI/GUI_ObjectList.cpp:104
+#: src/slic3r/GUI/GUI_ObjectList.cpp:623 src/slic3r/GUI/Tab.cpp:1086
+#: src/slic3r/GUI/Tab.cpp:1101 src/slic3r/GUI/Tab.cpp:1200
+#: src/slic3r/GUI/Tab.cpp:1203 src/slic3r/GUI/Tab.cpp:1469
+#: src/slic3r/GUI/Tab.cpp:1969 src/slic3r/GUI/Tab.cpp:3665
+#: src/slic3r/GUI/wxExtensions.cpp:757 src/libslic3r/PrintConfig.cpp:88
+#: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223
+#: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2276
+#: src/libslic3r/PrintConfig.cpp:2448
 msgid "Advanced"
 msgstr "Avançado"
 
-#: src/slic3r/GUI/GUI_App.cpp:810
+#: src/slic3r/GUI/GUI_App.cpp:818
 msgid "Advanced View Mode"
 msgstr "Modo avançado de visualização"
 
-#: src/slic3r/GUI/GUI_App.cpp:811 src/slic3r/GUI/wxExtensions.cpp:3045
+#: src/slic3r/GUI/GUI_App.cpp:819 src/slic3r/GUI/wxExtensions.cpp:758
 msgid "Expert"
 msgstr "Especialista"
 
-#: src/slic3r/GUI/GUI_App.cpp:811
+#: src/slic3r/GUI/GUI_App.cpp:819
 msgid "Expert View Mode"
 msgstr "Modo especialista de visualização"
 
-#: src/slic3r/GUI/GUI_App.cpp:816
+#: src/slic3r/GUI/GUI_App.cpp:824
 msgid "Mode"
 msgstr "Modo"
 
-#: src/slic3r/GUI/GUI_App.cpp:816
+#: src/slic3r/GUI/GUI_App.cpp:824
 #, c-format
 msgid "%s View Mode"
 msgstr "%s Modo de visualização"
 
-#: src/slic3r/GUI/GUI_App.cpp:818
-msgid "Change Application &Language"
-msgstr "Mudar &idioma"
+#: src/slic3r/GUI/GUI_App.cpp:826
+msgid "&Language"
+msgstr "&Linguagem"
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:828
 msgid "Flash printer &firmware"
 msgstr "Atualizar firmware &da impressora"
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:828
 msgid "Upload a firmware image into an Arduino based printer"
 msgstr "Atualizar o firmware para uma impressora baseada em Arduino"
 
-#: src/slic3r/GUI/GUI_App.cpp:832
+#: src/slic3r/GUI/GUI_App.cpp:843
 msgid "Taking configuration snapshot"
 msgstr "Capturando a config."
 
-#: src/slic3r/GUI/GUI_App.cpp:832
+#: src/slic3r/GUI/GUI_App.cpp:843
 msgid "Snapshot name"
 msgstr "Nome da captura"
 
-#: src/slic3r/GUI/GUI_App.cpp:875
+#: src/slic3r/GUI/GUI_App.cpp:886
 msgid ""
 "Switching the language will trigger application restart.\n"
 "You will lose content of the plater."
 msgstr ""
 "Alterar a linguagem fará com que o aplicativo reinicie.\n"
-"Você irá perder conteúdo no prato."
+"Você irá perder conteúdo na bandeja."
 
-#: src/slic3r/GUI/GUI_App.cpp:877
+#: src/slic3r/GUI/GUI_App.cpp:888
 msgid "Do you want to proceed?"
 msgstr "Você quer prosseguir?"
 
-#: src/slic3r/GUI/GUI_App.cpp:878
+#: src/slic3r/GUI/GUI_App.cpp:889
 msgid "Language selection"
 msgstr "Seleção de linguagem"
 
-#: src/slic3r/GUI/GUI_App.cpp:901
+#: src/slic3r/GUI/GUI_App.cpp:912
 msgid "&Configuration"
 msgstr "&Configuração"
 
-#: src/slic3r/GUI/GUI_App.cpp:923
+#: src/slic3r/GUI/GUI_App.cpp:936
 msgid "The presets on the following tabs were modified"
 msgstr "Os presets seguintes foram modificados"
 
-#: src/slic3r/GUI/GUI_App.cpp:923 src/slic3r/GUI/Tab.cpp:3133
+#: src/slic3r/GUI/GUI_App.cpp:936 src/slic3r/GUI/Tab.cpp:2948
 msgid "Discard changes and continue anyway?"
 msgstr "Descartar mudanças e continuar assim mesmo?"
 
-#: src/slic3r/GUI/GUI_App.cpp:926
+#: src/slic3r/GUI/GUI_App.cpp:939
 msgid "Unsaved Presets"
 msgstr "config. não salvas"
 
+#: src/slic3r/GUI/GUI_App.cpp:1088 src/slic3r/GUI/Tab.cpp:2960
+msgid "It's impossible to print multi-part object(s) with SLA technology."
+msgstr ""
+"É impossível imprimir objetos com múltiplas partes com a tecnologia SLA."
+
+#: src/slic3r/GUI/GUI_App.cpp:1089
+msgid "Please check and fix your object list."
+msgstr "Favor verificar e concertar sua lista de objetos."
+
+#: src/slic3r/GUI/GUI_App.cpp:1090 src/slic3r/GUI/Plater.cpp:2315
+#: src/slic3r/GUI/Tab.cpp:2962
+msgid "Attention!"
+msgstr "Atenção!"
+
+#: src/slic3r/GUI/GUI_App.cpp:1107
+msgid "Select a gcode file:"
+msgstr "Selecione um arquivo gcode:"
+
 #: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
 msgid "Start at height"
 msgstr "Começar na altura"
@@ -1466,11 +2300,6 @@ msgstr "Começar na altura"
 msgid "Stop at height"
 msgstr "Parar na altura"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1033
-#: src/libslic3r/PrintConfig.cpp:66
-msgid "Layer height"
-msgstr "Altura da camada"
-
 #: src/slic3r/GUI/GUI_ObjectLayers.cpp:153
 msgid "Remove layer range"
 msgstr "Remover limite da camada"
@@ -1479,50 +2308,38 @@ msgstr "Remover limite da camada"
 msgid "Add layer range"
 msgstr "Adicionar limite da camada"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:88
-#: src/slic3r/GUI/GUI_ObjectList.cpp:611 src/libslic3r/PrintConfig.cpp:67
-#: src/libslic3r/PrintConfig.cpp:160 src/libslic3r/PrintConfig.cpp:392
-#: src/libslic3r/PrintConfig.cpp:453 src/libslic3r/PrintConfig.cpp:461
-#: src/libslic3r/PrintConfig.cpp:867 src/libslic3r/PrintConfig.cpp:1051
-#: src/libslic3r/PrintConfig.cpp:1354 src/libslic3r/PrintConfig.cpp:1420
-#: src/libslic3r/PrintConfig.cpp:1601 src/libslic3r/PrintConfig.cpp:2037
-#: src/libslic3r/PrintConfig.cpp:2095
+#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:95
+#: src/slic3r/GUI/GUI_ObjectList.cpp:614 src/libslic3r/PrintConfig.cpp:72
+#: src/libslic3r/PrintConfig.cpp:175 src/libslic3r/PrintConfig.cpp:184
+#: src/libslic3r/PrintConfig.cpp:408 src/libslic3r/PrintConfig.cpp:470
+#: src/libslic3r/PrintConfig.cpp:478 src/libslic3r/PrintConfig.cpp:890
+#: src/libslic3r/PrintConfig.cpp:1075 src/libslic3r/PrintConfig.cpp:1374
+#: src/libslic3r/PrintConfig.cpp:1441 src/libslic3r/PrintConfig.cpp:1622
+#: src/libslic3r/PrintConfig.cpp:2074 src/libslic3r/PrintConfig.cpp:2133
+#: src/libslic3r/PrintConfig.cpp:2142
 msgid "Layers and Perimeters"
 msgstr "Camadas e perímetros"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:89
-#: src/slic3r/GUI/GUI_ObjectList.cpp:612 src/slic3r/GUI/Plater.cpp:497
-#: src/slic3r/GUI/Tab.cpp:1065 src/slic3r/GUI/Tab.cpp:1066
-#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:400
-#: src/libslic3r/PrintConfig.cpp:420 src/libslic3r/PrintConfig.cpp:754
-#: src/libslic3r/PrintConfig.cpp:768 src/libslic3r/PrintConfig.cpp:805
-#: src/libslic3r/PrintConfig.cpp:958 src/libslic3r/PrintConfig.cpp:968
-#: src/libslic3r/PrintConfig.cpp:986 src/libslic3r/PrintConfig.cpp:1004
-#: src/libslic3r/PrintConfig.cpp:1023 src/libslic3r/PrintConfig.cpp:1708
-#: src/libslic3r/PrintConfig.cpp:1725
-msgid "Infill"
-msgstr "Preenchimento"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:90
-#: src/slic3r/GUI/GUI_ObjectList.cpp:613 src/slic3r/GUI/GUI_Preview.cpp:244
-#: src/slic3r/GUI/Tab.cpp:1094 src/slic3r/GUI/Tab.cpp:1095
-#: src/libslic3r/PrintConfig.cpp:344 src/libslic3r/PrintConfig.cpp:1481
-#: src/libslic3r/PrintConfig.cpp:1830 src/libslic3r/PrintConfig.cpp:1836
-#: src/libslic3r/PrintConfig.cpp:1844 src/libslic3r/PrintConfig.cpp:1856
-#: src/libslic3r/PrintConfig.cpp:1866 src/libslic3r/PrintConfig.cpp:1874
-#: src/libslic3r/PrintConfig.cpp:1889 src/libslic3r/PrintConfig.cpp:1910
-#: src/libslic3r/PrintConfig.cpp:1921 src/libslic3r/PrintConfig.cpp:1937
-#: src/libslic3r/PrintConfig.cpp:1946 src/libslic3r/PrintConfig.cpp:1955
-#: src/libslic3r/PrintConfig.cpp:1966 src/libslic3r/PrintConfig.cpp:1980
-#: src/libslic3r/PrintConfig.cpp:1988 src/libslic3r/PrintConfig.cpp:1989
-#: src/libslic3r/PrintConfig.cpp:1998 src/libslic3r/PrintConfig.cpp:2006
-#: src/libslic3r/PrintConfig.cpp:2020 src/libslic3r/GCode/PreviewData.cpp:156
+#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:97
+#: src/slic3r/GUI/GUI_ObjectList.cpp:616 src/slic3r/GUI/GUI_Preview.cpp:246
+#: src/slic3r/GUI/Tab.cpp:1119 src/slic3r/GUI/Tab.cpp:1120
+#: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370
+#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1866
+#: src/libslic3r/PrintConfig.cpp:1872 src/libslic3r/PrintConfig.cpp:1880
+#: src/libslic3r/PrintConfig.cpp:1892 src/libslic3r/PrintConfig.cpp:1902
+#: src/libslic3r/PrintConfig.cpp:1910 src/libslic3r/PrintConfig.cpp:1925
+#: src/libslic3r/PrintConfig.cpp:1946 src/libslic3r/PrintConfig.cpp:1958
+#: src/libslic3r/PrintConfig.cpp:1974 src/libslic3r/PrintConfig.cpp:1983
+#: src/libslic3r/PrintConfig.cpp:1992 src/libslic3r/PrintConfig.cpp:2003
+#: src/libslic3r/PrintConfig.cpp:2017 src/libslic3r/PrintConfig.cpp:2025
+#: src/libslic3r/PrintConfig.cpp:2026 src/libslic3r/PrintConfig.cpp:2035
+#: src/libslic3r/PrintConfig.cpp:2043 src/libslic3r/PrintConfig.cpp:2057
 msgid "Support material"
 msgstr "Material de suporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:94
-#: src/slic3r/GUI/GUI_ObjectList.cpp:617 src/libslic3r/PrintConfig.cpp:2202
-#: src/libslic3r/PrintConfig.cpp:2210
+#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101
+#: src/slic3r/GUI/GUI_ObjectList.cpp:620 src/libslic3r/PrintConfig.cpp:2252
+#: src/libslic3r/PrintConfig.cpp:2260
 msgid "Wipe options"
 msgstr "Opções de limpeza"
 
@@ -1546,487 +2363,508 @@ msgstr "Adicionar reforço de suporte"
 msgid "Add support blocker"
 msgstr "Adicionar bloqueador de suporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:91 src/slic3r/GUI/GUI_ObjectList.cpp:614
-#: src/slic3r/GUI/GUI_Preview.cpp:223 src/slic3r/GUI/Tab.cpp:1119
-#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:441
-#: src/libslic3r/PrintConfig.cpp:896 src/libslic3r/PrintConfig.cpp:1024
-#: src/libslic3r/PrintConfig.cpp:1410 src/libslic3r/PrintConfig.cpp:1647
-#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1747
-#: src/libslic3r/PrintConfig.cpp:2080
+#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:617
+#: src/slic3r/GUI/GUI_Preview.cpp:224 src/slic3r/GUI/Tab.cpp:1144
+#: src/libslic3r/PrintConfig.cpp:235 src/libslic3r/PrintConfig.cpp:458
+#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1048
+#: src/libslic3r/PrintConfig.cpp:1431 src/libslic3r/PrintConfig.cpp:1668
+#: src/libslic3r/PrintConfig.cpp:1716 src/libslic3r/PrintConfig.cpp:1768
+#: src/libslic3r/PrintConfig.cpp:2118
 msgid "Speed"
 msgstr "Velocidade"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:92 src/slic3r/GUI/GUI_ObjectList.cpp:615
-#: src/slic3r/GUI/Tab.cpp:1154 src/slic3r/GUI/Tab.cpp:2043
-#: src/libslic3r/PrintConfig.cpp:471 src/libslic3r/PrintConfig.cpp:979
-#: src/libslic3r/PrintConfig.cpp:1389 src/libslic3r/PrintConfig.cpp:1717
-#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1928
+#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:618
+#: src/slic3r/GUI/Tab.cpp:1179 src/slic3r/GUI/Tab.cpp:1840
+#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002
+#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1737
+#: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1965
 msgid "Extruders"
 msgstr "Exrtrusoras"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:93 src/slic3r/GUI/GUI_ObjectList.cpp:616
-#: src/libslic3r/PrintConfig.cpp:431 src/libslic3r/PrintConfig.cpp:538
-#: src/libslic3r/PrintConfig.cpp:855 src/libslic3r/PrintConfig.cpp:987
-#: src/libslic3r/PrintConfig.cpp:1398 src/libslic3r/PrintConfig.cpp:1737
-#: src/libslic3r/PrintConfig.cpp:1911 src/libslic3r/PrintConfig.cpp:2069
+#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:619
+#: src/libslic3r/PrintConfig.cpp:447 src/libslic3r/PrintConfig.cpp:555
+#: src/libslic3r/PrintConfig.cpp:877 src/libslic3r/PrintConfig.cpp:1010
+#: src/libslic3r/PrintConfig.cpp:1418 src/libslic3r/PrintConfig.cpp:1757
+#: src/libslic3r/PrintConfig.cpp:1947 src/libslic3r/PrintConfig.cpp:2106
 msgid "Extrusion Width"
 msgstr "Espessura da extrusão"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:622
-#: src/slic3r/GUI/Plater.cpp:465 src/slic3r/GUI/Tab.cpp:3737
-#: src/slic3r/GUI/Tab.cpp:3738 src/libslic3r/PrintConfig.cpp:2501
-#: src/libslic3r/PrintConfig.cpp:2508 src/libslic3r/PrintConfig.cpp:2517
-#: src/libslic3r/PrintConfig.cpp:2526 src/libslic3r/PrintConfig.cpp:2536
-#: src/libslic3r/PrintConfig.cpp:2562 src/libslic3r/PrintConfig.cpp:2569
-#: src/libslic3r/PrintConfig.cpp:2580 src/libslic3r/PrintConfig.cpp:2590
-#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2612
-#: src/libslic3r/PrintConfig.cpp:2622 src/libslic3r/PrintConfig.cpp:2631
-#: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2652
-#: src/libslic3r/PrintConfig.cpp:2660
+#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:625
+#: src/slic3r/GUI/Plater.cpp:495 src/slic3r/GUI/Tab.cpp:3606
+#: src/slic3r/GUI/Tab.cpp:3607 src/libslic3r/PrintConfig.cpp:2614
+#: src/libslic3r/PrintConfig.cpp:2621 src/libslic3r/PrintConfig.cpp:2630
+#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2649
+#: src/libslic3r/PrintConfig.cpp:2685 src/libslic3r/PrintConfig.cpp:2692
+#: src/libslic3r/PrintConfig.cpp:2703 src/libslic3r/PrintConfig.cpp:2713
+#: src/libslic3r/PrintConfig.cpp:2722 src/libslic3r/PrintConfig.cpp:2735
+#: src/libslic3r/PrintConfig.cpp:2745 src/libslic3r/PrintConfig.cpp:2754
+#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2775
+#: src/libslic3r/PrintConfig.cpp:2783
 msgid "Supports"
 msgstr "Suportes"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:623
-#: src/slic3r/GUI/Plater.cpp:603 src/slic3r/GUI/Tab.cpp:3769
-#: src/slic3r/GUI/Tab.cpp:3770 src/libslic3r/PrintConfig.cpp:2668
-#: src/libslic3r/PrintConfig.cpp:2675 src/libslic3r/PrintConfig.cpp:2689
-#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2721
-#: src/libslic3r/PrintConfig.cpp:2732 src/libslic3r/PrintConfig.cpp:2739
-#: src/libslic3r/PrintConfig.cpp:2750 src/libslic3r/PrintConfig.cpp:2759
-#: src/libslic3r/PrintConfig.cpp:2768
+#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:626
+#: src/slic3r/GUI/Plater.cpp:635 src/slic3r/GUI/Tab.cpp:3640
+#: src/slic3r/GUI/Tab.cpp:3641 src/libslic3r/PrintConfig.cpp:2791
+#: src/libslic3r/PrintConfig.cpp:2798 src/libslic3r/PrintConfig.cpp:2812
+#: src/libslic3r/PrintConfig.cpp:2823 src/libslic3r/PrintConfig.cpp:2833
+#: src/libslic3r/PrintConfig.cpp:2855 src/libslic3r/PrintConfig.cpp:2866
+#: src/libslic3r/PrintConfig.cpp:2873 src/libslic3r/PrintConfig.cpp:2880
+#: src/libslic3r/PrintConfig.cpp:2891 src/libslic3r/PrintConfig.cpp:2900
+#: src/libslic3r/PrintConfig.cpp:2909
 msgid "Pad"
 msgstr "Bloco"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:260
+#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3658
+#: src/slic3r/GUI/Tab.cpp:3659 src/libslic3r/SLA/Hollowing.cpp:46
+#: src/libslic3r/SLA/Hollowing.cpp:58 src/libslic3r/SLA/Hollowing.cpp:67
+#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2919
+#: src/libslic3r/PrintConfig.cpp:2926 src/libslic3r/PrintConfig.cpp:2936
+#: src/libslic3r/PrintConfig.cpp:2945
+msgid "Hollowing"
+msgstr "Deixar oco"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:270
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:153
 msgid "Name"
 msgstr "Nome"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:271 src/slic3r/GUI/GUI_ObjectList.cpp:373
+#: src/slic3r/GUI/GUI_ObjectList.cpp:278 src/slic3r/GUI/Tab.cpp:1433
+#: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487
+msgid "Extruder"
+msgstr "Extrusora"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:282 src/slic3r/GUI/GUI_ObjectList.cpp:395
 msgid "Editing"
 msgstr "Edição"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:318
+#: src/slic3r/GUI/GUI_ObjectList.cpp:340
 #, c-format
-msgid "Auto-repaired (%d errors):\n"
-msgstr "Auto reparando (%d erros):\n"
+msgid "Auto-repaired (%d errors):"
+msgstr "Auto reparando (%d erros):"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:325
+#: src/slic3r/GUI/GUI_ObjectList.cpp:347
 msgid "degenerate facets"
 msgstr "facetas degeneradas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:326
+#: src/slic3r/GUI/GUI_ObjectList.cpp:348
 msgid "edges fixed"
 msgstr "arestas fixadas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:327
+#: src/slic3r/GUI/GUI_ObjectList.cpp:349
 msgid "facets removed"
 msgstr "facetas removidas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:328
+#: src/slic3r/GUI/GUI_ObjectList.cpp:350
 msgid "facets added"
 msgstr "facetas adicionadas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:329
+#: src/slic3r/GUI/GUI_ObjectList.cpp:351
 msgid "facets reversed"
 msgstr "facetas reversidas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:330
+#: src/slic3r/GUI/GUI_ObjectList.cpp:352
 msgid "backwards edges"
 msgstr "arestas viradas para trás"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:338
+#: src/slic3r/GUI/GUI_ObjectList.cpp:360
 msgid "Right button click the icon to fix STL through Netfabb"
 msgstr ""
 "Clique com o botão direito no ícone para arrumar STL através do Netfabb"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:375
+#: src/slic3r/GUI/GUI_ObjectList.cpp:397
 msgid "Right button click the icon to change the object settings"
 msgstr "Clique com o botão direito no ícone para mudar as config. do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:377
+#: src/slic3r/GUI/GUI_ObjectList.cpp:399
 msgid "Click the icon to change the object settings"
 msgstr "Clique no ícone para mudar as config. do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:381
+#: src/slic3r/GUI/GUI_ObjectList.cpp:403
 msgid "Right button click the icon to change the object printable property"
 msgstr ""
 "Clique com o botão direito no ícone para mudar a propriedade de impressão do "
 "objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:383
+#: src/slic3r/GUI/GUI_ObjectList.cpp:405
 msgid "Click the icon to change the object printable property"
 msgstr "Clique no ícone para mudar a propriedade de impressão do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:428 src/slic3r/GUI/GUI_ObjectList.cpp:449
-#: src/slic3r/GUI/GUI_ObjectList.cpp:461 src/slic3r/GUI/GUI_ObjectList.cpp:3642
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3652
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3684 src/slic3r/GUI/wxExtensions.cpp:603
-#: src/slic3r/GUI/wxExtensions.cpp:660 src/slic3r/GUI/wxExtensions.cpp:685
-#: src/slic3r/GUI/wxExtensions.cpp:893
+#: src/slic3r/GUI/GUI_ObjectList.cpp:458 src/slic3r/GUI/GUI_ObjectList.cpp:470
+#: src/slic3r/GUI/GUI_ObjectList.cpp:918 src/slic3r/GUI/GUI_ObjectList.cpp:3968
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3978
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4013
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:200
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:257
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:282
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:490
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:1753
 msgid "default"
 msgstr "padrão"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:433 src/slic3r/GUI/Tab.cpp:1649
-#: src/libslic3r/PrintConfig.cpp:470
-msgid "Extruder"
-msgstr "Extrusora"
+#: src/slic3r/GUI/GUI_ObjectList.cpp:537
+msgid "Change Extruder"
+msgstr "Mudar extrusora"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:546
+#: src/slic3r/GUI/GUI_ObjectList.cpp:552
 msgid "Rename Object"
 msgstr "Renomear objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:546
+#: src/slic3r/GUI/GUI_ObjectList.cpp:552
 msgid "Rename Sub-object"
 msgstr "Renomear sub-objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:987 src/slic3r/GUI/GUI_ObjectList.cpp:3464
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1092
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3782
 msgid "Instances to Separated Objects"
 msgstr "Instâncias para separar objetos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1005
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1107
 msgid "Volumes in Object reordered"
 msgstr "Volume reorganizados no objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1005
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1107
 msgid "Object reordered"
 msgstr "Objeto reorganizado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1060
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1376
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1382
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1623
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1183
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1531
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1537
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1850
 #, c-format
 msgid "Quick Add Settings (%s)"
 msgstr "Adicionar config. rapidamente (%s)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1137
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1266
 msgid "Select showing settings"
 msgstr "Selecionar config. mostradas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1186
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1315
 msgid "Add Settings for Layers"
 msgstr "Adicionar config. para camadas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1187
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1316
 msgid "Add Settings for Sub-object"
 msgstr "Adicionar config. para sub-objetos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1188
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1317
 msgid "Add Settings for Object"
 msgstr "Adicionar config. para objetos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1249
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1387
 msgid "Add Settings Bundle for Height range"
 msgstr "Adicionar pacote de config. para intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1250
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1388
 msgid "Add Settings Bundle for Sub-object"
 msgstr "Adicionar pacote de config. para subobjeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1251
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1389
 msgid "Add Settings Bundle for Object"
 msgstr "Adicionar pacote de config. para objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1290
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1428
 msgid "Load"
 msgstr "Carregar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1295
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1320
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1323
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1433
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1465
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1469
 msgid "Box"
 msgstr "Caixa"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1295
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1433
 msgid "Cylinder"
 msgstr "Cilindro"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1295
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1433
 msgid "Sphere"
 msgstr "Esfera"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1295
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1433
 msgid "Slab"
 msgstr "Placa"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1347
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1501
 msgid "Height range Modifier"
 msgstr "Modificador de intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1355
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1510
 msgid "Add settings"
 msgstr "Adicionar config."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1422
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1590
 msgid "Change type"
 msgstr "Mudar o tipo"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1429
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1577
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1600
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1612
 msgid "Set as a Separated Object"
 msgstr "Configurar como objeto separado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1435
-msgid "Printable"
-msgstr "Imprimível"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1442
-msgid "Rename"
-msgstr "Renomear"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1453
-msgid "Fix through the Netfabb"
-msgstr "Arrumar através do Netfabb"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1463 src/slic3r/GUI/Plater.cpp:3552
-msgid "Export as STL"
-msgstr "Exportar como STL"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1470
-msgid "Change extruder"
-msgstr "Mudar extrusora"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1489 src/libslic3r/PrintConfig.cpp:309
-msgid "Default"
-msgstr "Padrão"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1495
-msgid "Select new extruder for the object/part"
-msgstr "Selecionar nova extrusora para objeto/parte"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1507
-msgid "Scale to print volume"
-msgstr "Escalar para volume de impressão"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1507
-msgid "Scale the selected object to fit the print volume"
-msgstr "Escale o objeto selecionado para se adequar ao volume de impressão"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1577
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1612
 msgid "Set as a Separated Objects"
 msgstr "Definir como objetos separados"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1652
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1622
+msgid "Printable"
+msgstr "Imprimível"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1637
+msgid "Rename"
+msgstr "Renomear"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1648
+msgid "Fix through the Netfabb"
+msgstr "Arrumar através do Netfabb"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1658 src/slic3r/GUI/Plater.cpp:3968
+msgid "Export as STL"
+msgstr "Exportar como STL"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1665
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3957 src/slic3r/GUI/Plater.cpp:3936
+msgid "Reload the selected volumes from disk"
+msgstr "Recarregue os volumes selecionados do disco"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1672
+msgid "Set extruder for selected items"
+msgstr "Definir extrusora para itens selecionados"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1705 src/libslic3r/PrintConfig.cpp:335
+msgid "Default"
+msgstr "Padrão"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1725
+msgid "Scale to print volume"
+msgstr "Escalar para volume de impressão"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1725
+msgid "Scale the selected object to fit the print volume"
+msgstr "Escale o objeto selecionado para se adequar ao volume de impressão"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1794
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2052
+msgid "Add Shape"
+msgstr "Adicionar forma"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1880
 msgid "Load Part"
 msgstr "Carregar parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1687
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1919
 msgid "Error!"
 msgstr "Erro!"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1732
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1994
 msgid "Add Generic Subobject"
 msgstr "Adicionar sub-objeto genérico"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1739
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2023
 msgid "Generic"
 msgstr "Genérico"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1843
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1945
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2141
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2243
 msgid "Last instance of an object cannot be deleted."
 msgstr "A última instância de um objeto não pode ser excluída."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1855
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2153
 msgid "Delete Settings"
 msgstr "Deletar config."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1879
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2177
 msgid "Delete All Instances from Object"
 msgstr "Excluir todas as instâncias do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1895
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2193
 msgid "Delete Height Range"
 msgstr "Excluir limite de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1926
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2224
 msgid "From Object List You can't delete the last solid part from object."
 msgstr ""
 "Na lista de objetos não é possível excluir a última parte sólida do objeto."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1930
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2228
 msgid "Delete Subobject"
 msgstr "Deletar sub-objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1949
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2247
 msgid "Delete Instance"
 msgstr "Deletar instância"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1973 src/slic3r/GUI/Plater.cpp:2838
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2271 src/slic3r/GUI/Plater.cpp:2980
 msgid ""
 "The selected object couldn't be split because it contains only one part."
 msgstr "O seguinte objeto não pode ser dividido pois contém uma parte."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1977
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2275
 msgid "Split to Parts"
 msgstr "Dividir em partes"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2025
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2329
 msgid "Add Layers"
 msgstr "Adicionar camadas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2150
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2455
 msgid "Group manipulation"
 msgstr "Manipulação de grupos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2162
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2467
 msgid "Object manipulation"
 msgstr "Manipulação de objetos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2175
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2480
 msgid "Object Settings to modify"
 msgstr "config. do objeto para modificar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2179
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2484
 msgid "Part Settings to modify"
 msgstr "config. da parte para modificar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2184
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2489
 msgid "Layer range Settings to modify"
 msgstr "config. de intervalo de camada para modificar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2190
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2495
 msgid "Part manipulation"
 msgstr "Manipulação da parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2196
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2501
 msgid "Instance manipulation"
 msgstr "Manipulação da instância"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2203
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2508
+msgid "Height ranges"
+msgstr "Limites de altura"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2508
 msgid "Settings for height range"
 msgstr "config. para intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2388
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2694
 msgid "Delete Selected Item"
 msgstr "Excluir item selecionado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2525
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2831
 msgid "Delete Selected"
 msgstr "Excluir seleção"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2584
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2613
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2631
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2897
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2926
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2944
 msgid "Add Height Range"
 msgstr "Adicionar intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2690
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3004
 msgid "Edit Height Range"
 msgstr "Editar intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2974
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3292
 msgid "Selection-Remove from list"
 msgstr "Seleção-Remover da lista"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2982
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3300
 msgid "Selection-Add from list"
 msgstr "Seleção-Adicionar da lista"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3100
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
 msgid "Object or Instance"
 msgstr "Objeto ou instância"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3101
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3234
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3419
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3552
 msgid "Part"
 msgstr "Parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3101
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3419
 msgid "Layer"
 msgstr "Camada"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3103
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3421
 msgid "Unsupported selection"
 msgstr "Seleção não suportada"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3104
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3422
 #, c-format
 msgid "You started your selection with %s Item."
 msgstr "Você iniciou sua seleção com o item de %s."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3105
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3423
 #, c-format
 msgid "In this mode you can select only other %s Items%s"
 msgstr "Neste modo, você pode selecionar apenas outros %s itens%s"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3108
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3426
 msgid "of a current Object"
 msgstr "de um objeto atual"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3113
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3188 src/slic3r/GUI/Plater.cpp:126
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3431
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3506 src/slic3r/GUI/Plater.cpp:141
 msgid "Info"
 msgstr "Informação"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3229
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3547
 msgid "You can't change a type of the last solid part of the object."
 msgstr "Não é possível alterar um tipo da última parte sólida do objeto."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3234
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3552
 msgid "Modifier"
 msgstr "Modificador"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3234
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3552
 msgid "Support Enforcer"
 msgstr "Reforçador de suporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3234
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3552
 msgid "Support Blocker"
 msgstr "Bloqueador de suporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3236
-msgid "Type:"
-msgstr "Tipo:"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3236
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3554
 msgid "Select type of part"
 msgstr "Selecione o tipo de parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3241
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3559
 msgid "Change Part Type"
 msgstr "Mudar o tipo da parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3486
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3804
 msgid "Enter new name"
 msgstr "Insira o novo nome"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3486
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3804
 msgid "Renaming"
 msgstr "Renomeando"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3502
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3608 src/slic3r/GUI/Tab.cpp:3618
-#: src/slic3r/GUI/Tab.cpp:3622
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3820
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3927 src/slic3r/GUI/Tab.cpp:3458
+#: src/slic3r/GUI/Tab.cpp:3462
 msgid "The supplied name is not valid;"
 msgstr "O nome inserido não é valido;"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3503
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3609 src/slic3r/GUI/Tab.cpp:3619
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3821
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3928 src/slic3r/GUI/Tab.cpp:3459
 msgid "the following characters are not allowed:"
 msgstr "os seguintes caracteres não são permitidos:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3632
-msgid "Set extruder for selected items"
-msgstr "Definir extrusora para itens selecionados"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3633
-msgid "Select extruder number for selected objects and/or parts"
-msgstr "Selecione o número da extrusora para objetos e/ou peças selecionados"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3646
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3972
 msgid "Select extruder number:"
 msgstr "Selecione o número da extrusora:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3647
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3973
 msgid "This extruder will be set for selected items"
 msgstr "Esta extrusora será ajustada para artigos selecionados"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3759 src/slic3r/GUI/Selection.cpp:1473
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3998
+msgid "Change Extruders"
+msgstr "Mudar extrusoras"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4095 src/slic3r/GUI/Selection.cpp:1475
 msgid "Set Printable"
 msgstr "Definir como imprimível"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3759 src/slic3r/GUI/Selection.cpp:1473
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4095 src/slic3r/GUI/Selection.cpp:1475
 msgid "Set Unprintable"
 msgstr "Definir não imprimível"
 
@@ -2045,79 +2883,77 @@ msgid "Select coordinate space, in which the transformation will be performed."
 msgstr ""
 "Selecione o espaço de coordenadas, no qual a transformação será executada."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:125
-msgid "Object Manipulation"
-msgstr "Manipulação de objeto"
-
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:178
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:155 src/libslic3r/GCode.cpp:638
 msgid "Object name"
 msgstr "Nome do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:214
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:215
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:457
+msgid "Position"
+msgstr "Posição"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458
+#: src/slic3r/GUI/Mouse3DController.cpp:271
+#: src/slic3r/GUI/Mouse3DController.cpp:294
+msgid "Rotation"
+msgstr "Rotação"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263
 #, c-format
 msgid "Toggle %c axis mirroring"
 msgstr "Ativar espelhamento do eixo %c"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:247
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:297
 msgid "Set Mirror"
 msgstr "Definir espelhamento"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:287
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:292
-msgid "Reset scale"
-msgstr "Restabelecer escala"
-
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305
-msgid "Reset rotation"
-msgstr "Restabelecer rotação"
-
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:330
-msgid "Reset Rotation"
-msgstr "Restabelecer Rotação"
-
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:342
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:337
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:349
 msgid "Drop to bed"
 msgstr "Soltar na mesa"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:390
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:454
-msgid "Position"
-msgstr "Posição"
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363
+msgid "Reset rotation"
+msgstr "Restabelecer rotação"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:391
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:455
-msgid "Rotation"
-msgstr "Rotação"
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385
+msgid "Reset Rotation"
+msgstr "Restabelecer Rotação"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:456
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:397
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:399
+msgid "Reset scale"
+msgstr "Restabelecer escala"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:459
 msgid "Scale factors"
 msgstr "Fatores de escala"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:513
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:516
 msgid "Translate"
 msgstr "Tradução"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:565
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:578
 msgid ""
 "You cannot use non-uniform scaling mode for multiple objects/parts selection"
 msgstr ""
 "Não é possível usar o modo de dimensionamento não uniforme para vários "
 "objetos/seleção de peças"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:735
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:750
 msgid "Set Position"
 msgstr "Definir posição"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:766
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:781
 msgid "Set Orientation"
 msgstr "Definir orientação"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:831
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:846
 msgid "Set Scale"
 msgstr "Definir escala"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:915
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
 msgid ""
 "The currently manipulated object is tilted (rotation angles are not "
 "multiples of 90°).\n"
@@ -2131,7 +2967,7 @@ msgstr ""
 "sistema de coordenadas do mundo,\n"
 "uma vez que a rotação é incorporada nas coordenadas do objeto."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:918
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878
 msgid ""
 "This operation is irreversible.\n"
 "Do you want to proceed?"
@@ -2152,387 +2988,491 @@ msgstr "Remover parâmetro"
 msgid "Delete Option %s"
 msgstr "Excluir opção %s"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:146
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152
 #, c-format
 msgid "Change Option %s"
 msgstr "Alterar opção %s"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:217
+#: src/slic3r/GUI/GUI_Preview.cpp:218
 msgid "View"
 msgstr "Vista"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:220 src/slic3r/GUI/GUI_Preview.cpp:569
-#: src/libslic3r/GCode/PreviewData.cpp:378
+#: src/slic3r/GUI/GUI_Preview.cpp:221 src/slic3r/GUI/GUI_Preview.cpp:575
+#: src/libslic3r/GCode/PreviewData.cpp:345
 msgid "Feature type"
 msgstr "Tipo de recurso"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:221 src/libslic3r/PrintConfig.cpp:483
+#: src/slic3r/GUI/GUI_Preview.cpp:222 src/libslic3r/PrintConfig.cpp:500
 msgid "Height"
 msgstr "Altura"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:222 src/libslic3r/PrintConfig.cpp:2188
+#: src/slic3r/GUI/GUI_Preview.cpp:223 src/libslic3r/PrintConfig.cpp:2238
 msgid "Width"
 msgstr "Espessura"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:224
+#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/Tab.cpp:1456
+msgid "Fan speed"
+msgstr "Velocidade do ventoinha"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:226
 msgid "Volumetric flow rate"
 msgstr "Taxa de fluxo volumétrico"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/GUI_Preview.cpp:333
-#: src/slic3r/GUI/GUI_Preview.cpp:515 src/slic3r/GUI/GUI_Preview.cpp:568
-#: src/slic3r/GUI/GUI_Preview.cpp:774 src/libslic3r/GCode/PreviewData.cpp:388
+#: src/slic3r/GUI/GUI_Preview.cpp:227 src/slic3r/GUI/GUI_Preview.cpp:335
+#: src/slic3r/GUI/GUI_Preview.cpp:519 src/slic3r/GUI/GUI_Preview.cpp:574
+#: src/slic3r/GUI/GUI_Preview.cpp:835 src/libslic3r/GCode/PreviewData.cpp:357
 msgid "Tool"
 msgstr "Ferramenta"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:226 src/slic3r/GUI/GUI_Preview.cpp:566
-#: src/libslic3r/GCode/PreviewData.cpp:390
+#: src/slic3r/GUI/GUI_Preview.cpp:228 src/slic3r/GUI/GUI_Preview.cpp:572
+#: src/libslic3r/GCode/PreviewData.cpp:359
 msgid "Color Print"
 msgstr "Impressão colorida"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:229
+#: src/slic3r/GUI/GUI_Preview.cpp:231
 msgid "Show"
 msgstr "Mostrar"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:232 src/slic3r/GUI/GUI_Preview.cpp:233
+#: src/slic3r/GUI/GUI_Preview.cpp:234 src/slic3r/GUI/GUI_Preview.cpp:235
 msgid "Feature types"
 msgstr "Tipos de características"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:235 src/libslic3r/GCode/PreviewData.cpp:147
+#: src/slic3r/GUI/GUI_Preview.cpp:237 src/libslic3r/ExtrusionEntity.cpp:310
 msgid "Perimeter"
 msgstr "Perímetro"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:236 src/libslic3r/GCode/PreviewData.cpp:148
+#: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:311
 msgid "External perimeter"
 msgstr "Perímetro externo"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:237 src/libslic3r/GCode/PreviewData.cpp:149
+#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/ExtrusionEntity.cpp:312
 msgid "Overhang perimeter"
 msgstr "Perímetro de angulação"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/GCode/PreviewData.cpp:150
+#: src/slic3r/GUI/GUI_Preview.cpp:240 src/libslic3r/ExtrusionEntity.cpp:313
 msgid "Internal infill"
 msgstr "Preenchimento interno"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/PrintConfig.cpp:1736
-#: src/libslic3r/PrintConfig.cpp:1746 src/libslic3r/GCode/PreviewData.cpp:151
+#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/ExtrusionEntity.cpp:314
+#: src/libslic3r/PrintConfig.cpp:1756 src/libslic3r/PrintConfig.cpp:1767
 msgid "Solid infill"
 msgstr "Preenchimento sólido"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:240 src/libslic3r/PrintConfig.cpp:2068
-#: src/libslic3r/PrintConfig.cpp:2079 src/libslic3r/GCode/PreviewData.cpp:152
+#: src/slic3r/GUI/GUI_Preview.cpp:242 src/libslic3r/ExtrusionEntity.cpp:315
+#: src/libslic3r/PrintConfig.cpp:2105 src/libslic3r/PrintConfig.cpp:2117
 msgid "Top solid infill"
 msgstr "Preenchimento do sólido do topo"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/GCode/PreviewData.cpp:153
+#: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:316
 msgid "Bridge infill"
 msgstr "Preenchimento de pontes"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:242 src/libslic3r/PrintConfig.cpp:895
-#: src/libslic3r/GCode/PreviewData.cpp:154
+#: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:317
+#: src/libslic3r/PrintConfig.cpp:918
 msgid "Gap fill"
 msgstr "Preenchimento de vão"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:243 src/slic3r/GUI/Tab.cpp:1085
-#: src/libslic3r/GCode/PreviewData.cpp:155
+#: src/slic3r/GUI/GUI_Preview.cpp:245 src/slic3r/GUI/Tab.cpp:1110
+#: src/libslic3r/ExtrusionEntity.cpp:318
 msgid "Skirt"
 msgstr "Saia"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:245 src/libslic3r/PrintConfig.cpp:1954
-#: src/libslic3r/GCode/PreviewData.cpp:157
+#: src/slic3r/GUI/GUI_Preview.cpp:247 src/libslic3r/ExtrusionEntity.cpp:320
+#: src/libslic3r/PrintConfig.cpp:1991
 msgid "Support material interface"
 msgstr "Interface do material de suporte"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:246 src/slic3r/GUI/Tab.cpp:1165
-#: src/libslic3r/GCode/PreviewData.cpp:158
+#: src/slic3r/GUI/GUI_Preview.cpp:248 src/slic3r/GUI/Tab.cpp:1190
+#: src/libslic3r/ExtrusionEntity.cpp:321
 msgid "Wipe tower"
 msgstr "Torre de limpeza"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:251 src/libslic3r/PrintConfig.cpp:2102
+#: src/slic3r/GUI/GUI_Preview.cpp:253 src/libslic3r/PrintConfig.cpp:2152
 msgid "Travel"
 msgstr "Viagem"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:252
+#: src/slic3r/GUI/GUI_Preview.cpp:254
 msgid "Retractions"
 msgstr "Retrações"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:253
+#: src/slic3r/GUI/GUI_Preview.cpp:255
 msgid "Unretractions"
 msgstr "Retorno da retração"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:254
+#: src/slic3r/GUI/GUI_Preview.cpp:256
 msgid "Shells"
 msgstr "Paredes"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:255
+#: src/slic3r/GUI/GUI_Preview.cpp:257
 msgid "Legend"
 msgstr "Legenda"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:14 src/slic3r/GUI/MainFrame.cpp:683
+#: src/slic3r/GUI/Job.hpp:123
+msgid "ERROR: not enough resources to execute a new job."
+msgstr "ERRO: não há recursos suficientes para executar um novo trabalho."
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:719
 msgid "Keyboard Shortcuts"
 msgstr "Atalhos do teclado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:107
-msgid "Open project STL/OBJ/AMF/3MF with config, delete bed"
-msgstr "Abra o projeto STL/OBJ/AMF/3MF com config., excluir mesa"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:108
-msgid "Import STL/OBJ/AMF/3MF without config, keep bed"
-msgstr "Importação STL/OBJ/AMF/3MF sem config., manter a mesa"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:109
-msgid "Load Config from .ini/amf/3mf/gcode"
-msgstr "Carregar config. de um .ini/AMF/3mf/Gcode"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:110 src/slic3r/GUI/Plater.cpp:837
-#: src/slic3r/GUI/Plater.cpp:4822 src/libslic3r/PrintConfig.cpp:3163
-msgid "Export G-code"
-msgstr "Exportar G-code"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:111
-msgid "Save project (3MF)"
-msgstr "Salvar projeto (3MF)"
-
 #: src/slic3r/GUI/KBShortcutsDialog.cpp:112
-msgid "Load Config from .ini/amf/3mf/gcode and merge"
-msgstr "Carregar config. de um. ini/AMF/3mf/Gcode e mesclar"
+msgid "New project, clear plater"
+msgstr "Novo projeto, limpar a bandeja"
 
 #: src/slic3r/GUI/KBShortcutsDialog.cpp:113
+msgid "Open project STL/OBJ/AMF/3MF with config, clear plater"
+msgstr "Abra o projeto STL/OBJ/AMF/3MF com config, clear plater"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:114
+msgid "Save project (3mf)"
+msgstr "Salvar projeto (3MF)"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:115
+msgid "Save project as (3mf)"
+msgstr "Salvar projeto como (3mf)"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:116
 msgid "(Re)slice"
 msgstr "(Re)fatiar"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:116
-msgid "Select Plater Tab"
-msgstr "Selecione a guia de prato"
-
 #: src/slic3r/GUI/KBShortcutsDialog.cpp:118
+msgid "Import STL/OBJ/AMF/3MF without config, keep plater"
+msgstr "Importar STL/OBJ/AMF/3MF sem config, manter bandeja"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+msgid "Import Config from ini/amf/3mf/gcode"
+msgstr "Config importação de ini/amf/3mf/gcode"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:120
+msgid "Load Config from ini/amf/3mf/gcode and merge"
+msgstr "Carregar config. de um. ini/AMF/3mf/Gcode e mesclar"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:891
+#: src/slic3r/GUI/Plater.cpp:5522 src/libslic3r/PrintConfig.cpp:3363
+msgid "Export G-code"
+msgstr "Exportar G-code"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5523
+msgid "Send G-code"
+msgstr "Enviar G-code"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:124
+msgid "Export config"
+msgstr "Exportar config."
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+msgid "Select all objects"
+msgstr "Selecionar todos os objetos"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
+msgid "Deselect all"
+msgstr "Desmarcar todos"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
+msgid "Delete selected"
+msgstr "Deletar seleção"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
+msgid "Copy to clipboard"
+msgstr "Copiar para a área de transferência"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
+msgid "Paste from clipboard"
+msgstr "Colar da área de transferência"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
+msgid "Reload plater from disk"
+msgstr "Recarregar bandeja do disco"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
+msgid "Select Plater Tab"
+msgstr "Selecione a guia de bandeja"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
 msgid "Select Print Settings Tab"
 msgstr "Selecione a guia config. de impressão"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
 msgid "Select Filament Settings Tab"
 msgstr "Selecione a guia config. de filamento"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:120
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:139
 msgid "Select Printer Settings Tab"
 msgstr "Selecione a guia config. da impressora"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:121
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
 msgid "Switch to 3D"
 msgstr "Mude para 3D"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:122
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
 msgid "Switch to Preview"
 msgstr "Mudar para pré-visualização"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Preferences.cpp:10
-msgid "Preferences"
-msgstr "Preferências"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:142
 #: src/slic3r/GUI/PrintHostDialogs.cpp:136
 msgid "Print host upload queue"
 msgstr "Fila de carregamento do host de impressão"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:125
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:144
 msgid "Camera view"
 msgstr "Vista da câmera"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
-msgid "Add Instance of the selected object"
-msgstr "Adicionar instância do objeto selecionado"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:146
+msgid "Show/Hide object/instance labels"
+msgstr "Mostrar/Ocultar rótulos de objeto/instância"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
-msgid "Remove Instance of the selected object"
-msgstr "Remover instância do objeto selecionado"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:149 src/slic3r/GUI/Preferences.cpp:10
+msgid "Preferences"
+msgstr "Preferências"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:151
 msgid "Show keyboard shortcuts list"
 msgstr "Mostrar lista dos atalhos no teclado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:129
-msgid "Press to select multiple object or move multiple object with mouse"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
+msgid "Commands"
+msgstr "Comandos"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+msgid "Add Instance of the selected object"
+msgstr "Adicionar instância do objeto selecionado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+msgid "Remove Instance of the selected object"
+msgstr "Remover instância do objeto selecionado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+msgid ""
+"Press to select multiple objects\n"
+"or move multiple objects with mouse"
 msgstr ""
 "Aperte para selecionar múltiplos objetos ou mover múltiplos objetos com o "
 "mouse"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:131
-msgid "Main Shortcuts"
-msgstr "Atalhos principais"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+msgid "Press to activate selection rectangle"
+msgstr "Pressione para ativar o retângulo de seleção"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:139
-msgid "Select All objects"
-msgstr "Selecionar todos os objetos"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
+msgid "Press to activate deselection rectangle"
+msgstr "Pressione para ativar o retângulo de desseleção"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
-msgid "Delete selected"
-msgstr "Deletar seleção"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
-msgid "Delete All"
-msgstr "Deletar todos"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:142
-msgid "Copy to clipboard"
-msgstr "Copiar para a área de transferência"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:143
-msgid "Paste from clipboard"
-msgstr "Colar da área de transferência"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:144
-msgid "Gizmo move"
-msgstr "Gizmo-Mover"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:145
-msgid "Gizmo scale"
-msgstr "Gizmo-Escala"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:146
-msgid "Gizmo rotate"
-msgstr "Gizmo-Rotacionar"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:147
-msgid "Gizmo cut"
-msgstr "Gizmo-Cortar"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:148
-msgid "Gizmo Place face on bed"
-msgstr "Colocar face do Gizmo na mesa"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:149
-msgid "Gizmo SLA support points"
-msgstr "Pontos de suporte do Gizmo SLA"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:150
-#, c-format
-msgid ""
-"Press to activate selection rectangle\n"
-"or to snap by 5% in Gizmo scale\n"
-"or to snap by 1mm in Gizmo move"
-msgstr ""
-"Pressione para ativar o retângulo de seleção\n"
-"ou para encaixar em 5% i na escala Gizmo\n"
-"ou para encaixar por 1mm em Gizmo mover"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:151
-msgid ""
-"Press to scale selection to fit print volume\n"
-"in Gizmo scale"
-msgstr ""
-"Pressione para dimensionar a seleção ao volume de impressão\n"
-"na escala Gizmo"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:152
-msgid ""
-"Press to activate deselection rectangle\n"
-"or to scale or rotate selected objects\n"
-"around their own center"
-msgstr ""
-"Pressione para ativar o retângulo de deseleção\n"
-"ou para dimensionar ou girar objetos selecionados\n"
-"em torno de seu próprio centro"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:153
-msgid "Press to activate one direction scaling in Gizmo scale"
-msgstr "Pressione para ativar um dimensionamento de direção na escala Gizmo"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
-msgid "Change camera type (perspective, orthographic)"
-msgstr "Alterar tipo de câmera (perspectiva, ortográfica)"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:155
-msgid "Zoom to Bed"
-msgstr "Ampliar para a mesa"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:156
-msgid "Zoom to all objects in scene, if none selected"
-msgstr "Ampliar para todos os objetos na cena, se nenhum selecionado"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
-msgid "Zoom to selected object"
-msgstr "Ampliar para o objeto selecionado"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
-msgid "Zoom in"
-msgstr "Ampliar"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
-msgid "Zoom out"
-msgstr "Dimiuir"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
-msgid "Unselect gizmo / Clear selection"
-msgstr "Desmarcar Gizmo/limpar seleção"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
-msgid "Plater Shortcuts"
-msgstr "Atalhos do prato"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:193
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
 msgid "Arrow Up"
 msgstr "Seta para cima"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:183
-msgid "Upper Layer"
-msgstr "Camada superior"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
+msgid "Move selection 10 mm in positive Y direction"
+msgstr "Mover seleção 10 mm na direção Y positiva"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:194
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Arrow Down"
 msgstr "Seta para baixo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:184
-msgid "Lower Layer"
-msgstr "Camada inferior"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
+msgid "Move selection 10 mm in negative Y direction"
+msgstr "Mover seleção 10 mm na direção Y negativa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:185
-msgid "Show/Hide (L)egend"
-msgstr "Mostrar/ocultar (L) egenda"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:187
-msgid "Preview Shortcuts"
-msgstr "Atalhos de visualização"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:193
-msgid "Move current slider thumb Up"
-msgstr "Mover a barra de rolagem para cima"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:194
-msgid "Move current slider thumb Down"
-msgstr "Mover a barra de rolagem para baixo"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Arrow Left"
 msgstr "Seta esquerda"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
-msgid "Set upper thumb to current slider thumb"
-msgstr "Definir o polegar superior para o polegar deslizante atual"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
+msgid "Move selection 10 mm in negative X direction"
+msgstr "Mover seleção 10 mm na direção X negativa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
 msgid "Arrow Right"
 msgstr "Seta direita"
 
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
+msgid "Move selection 10 mm in positive X direction"
+msgstr "Mover seleção 10 mm na direção X positiva"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+msgid "Any arrow"
+msgstr "Qualquer flecha"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
+msgid "Movement step set to 1 mm"
+msgstr "Passo de movimento definido para 1 mm"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+msgid "Movement in camera space"
+msgstr "Movimento no espaço da câmera"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+msgid "Page Up"
+msgstr "Page Up"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+msgid "Rotate selection 45 degrees CCW"
+msgstr "Seleção rotatura 45 graus CCW"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+msgid "Page Down"
+msgstr "Page Down"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+msgid "Rotate selection 45 degrees CW"
+msgstr "Seleção de rotação 45 graus CW"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
+msgid "Gizmo move"
+msgstr "Gizmo-Mover"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
+msgid "Gizmo scale"
+msgstr "Gizmo-Escala"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
+msgid "Gizmo rotate"
+msgstr "Gizmo-Rotacionar"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
+msgid "Gizmo cut"
+msgstr "Gizmo-Cortar"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
+msgid "Gizmo Place face on bed"
+msgstr "Colocar face do Gizmo na mesa"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
+msgid "Gizmo SLA hollow"
+msgstr "Gizmo de SLA ligado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
+msgid "Gizmo SLA support points"
+msgstr "Pontos de suporte do Gizmo SLA"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+msgid "Unselect gizmo or clear selection"
+msgstr "Desmarcar Gizmo/limpar seleção"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+msgid "Change camera type (perspective, orthographic)"
+msgstr "Alterar tipo de câmera (perspectiva, ortográfica)"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
+msgid "Zoom to Bed"
+msgstr "Ampliar para a mesa"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
+msgid ""
+"Zoom to selected object\n"
+"or all objects in scene, if none selected"
+msgstr ""
+"Zoom para objeto selecionado\n"
+"ou todos os objetos em cena, se nenhum selecionado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:183
+msgid "Zoom in"
+msgstr "Ampliar"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:184
+msgid "Zoom out"
+msgstr "Dimiuir"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:185
+msgid "Show/Hide 3Dconnexion devices settings dialog"
+msgstr "Mostrar/Ocultar a caixa de configurações de dispositivos 3Dconnexion"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:192 src/slic3r/GUI/MainFrame.cpp:214
+msgid "Plater"
+msgstr "Bandeja"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
+#, no-c-format
+msgid ""
+"Press to snap by 5% in Gizmo scale\n"
+"or to snap by 1mm in Gizmo move"
+msgstr ""
+"Pressione para estalar 5% na escala Gizmo\n"
+"ou para estalar por 1mm no movimento Gizmo"
+
 #: src/slic3r/GUI/KBShortcutsDialog.cpp:196
+msgid ""
+"Scale selection to fit print volume\n"
+"in Gizmo scale"
+msgstr ""
+"Seleção de escala para caber volume de impressão\n"
+"na escala Gizmo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
+msgid "Press to activate one direction scaling in Gizmo scale"
+msgstr "Pressione para ativar um dimensionamento de direção na escala Gizmo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
+msgid ""
+"Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\n"
+"selected objects around their own center"
+msgstr ""
+"Pressione para escalar (na escala de Gizmo) ou girar (em Gizmo girar)\n"
+"objetos selecionados em torno de seu próprio centro"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+msgid "Gizmos"
+msgstr "Aparelhos"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+msgid "Upper Layer"
+msgstr "Camada superior"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
+msgid "Lower Layer"
+msgstr "Camada inferior"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
+msgid "Show/Hide Legend"
+msgstr "Ligar/Desligar Legenda"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4107
+#: src/slic3r/GUI/Tab.cpp:2392
+msgid "Preview"
+msgstr "Visualização"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+msgid "Move current slider thumb Up"
+msgstr "Mover a barra de rolagem para cima"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+msgid "Move current slider thumb Down"
+msgstr "Mover a barra de rolagem para baixo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+msgid "Set upper thumb to current slider thumb"
+msgstr "Definir o polegar superior para o polegar deslizante atual"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
 msgid "Set lower thumb to current slider thumb"
 msgstr "Definir o polegar inferior para o polegar deslizante atual"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
 msgid "Add color change marker for current layer"
 msgstr "Adicionar mudança de cor para a camada atual"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
 msgid "Delete color change marker for current layer"
 msgstr "Excluir mudança de cor para a camada atual"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:200
-msgid "Layers Slider Shortcuts"
-msgstr "Atalhos da barra de rolagem de camadas"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+msgid "Layers Slider"
+msgstr "Controle deslizante de camadas"
 
-#: src/slic3r/GUI/MainFrame.cpp:64
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:245
+msgid "Keyboard shortcuts"
+msgstr "Atalhos do teclado"
+
+#: src/slic3r/GUI/MainFrame.cpp:66
 msgid ""
 " - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/"
 "releases"
@@ -2540,571 +3480,616 @@ msgstr ""
 " - Lembre-se de verificar por atualizações em http://github.com/prusa3d/"
 "PrusaSlicer/releases"
 
-#: src/slic3r/GUI/MainFrame.cpp:159
+#: src/slic3r/GUI/MainFrame.cpp:184
 msgid "based on Slic3r"
 msgstr "baseado no Slic3r"
 
-#: src/slic3r/GUI/MainFrame.cpp:189
-msgid "Plater"
-msgstr "Prato"
-
-#: src/slic3r/GUI/MainFrame.cpp:400
+#: src/slic3r/GUI/MainFrame.cpp:415
 msgid "&New Project"
 msgstr "&Novo projeto"
 
-#: src/slic3r/GUI/MainFrame.cpp:400
+#: src/slic3r/GUI/MainFrame.cpp:415
 msgid "Start a new project"
 msgstr "Começar um novo projeto"
 
-#: src/slic3r/GUI/MainFrame.cpp:403
+#: src/slic3r/GUI/MainFrame.cpp:418
 msgid "&Open Project"
 msgstr "&Abrir projeto"
 
-#: src/slic3r/GUI/MainFrame.cpp:403
+#: src/slic3r/GUI/MainFrame.cpp:418
 msgid "Open a project file"
 msgstr "Abrir novo projeto"
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:423
 msgid "Recent projects"
 msgstr "Projetos recentes"
 
-#: src/slic3r/GUI/MainFrame.cpp:417
-msgid "The selected project is no more available"
-msgstr "O projeto selecionado não está mais disponível"
+#: src/slic3r/GUI/MainFrame.cpp:432
+msgid ""
+"The selected project is no longer available.\n"
+"Do you want to remove it from the recent projects list ?"
+msgstr ""
+"O projeto selecionado não está mais disponível.\n"
+"Você quer removê-lo da lista de projetos recentes?"
 
-#: src/slic3r/GUI/MainFrame.cpp:417 src/slic3r/GUI/MainFrame.cpp:755
+#: src/slic3r/GUI/MainFrame.cpp:432 src/slic3r/GUI/MainFrame.cpp:796
 #: src/slic3r/GUI/PrintHostDialogs.cpp:231
 msgid "Error"
 msgstr "Erro"
 
-#: src/slic3r/GUI/MainFrame.cpp:441
+#: src/slic3r/GUI/MainFrame.cpp:457
 msgid "&Save Project"
 msgstr "&Salvar projeto"
 
-#: src/slic3r/GUI/MainFrame.cpp:441
+#: src/slic3r/GUI/MainFrame.cpp:457
 msgid "Save current project file"
 msgstr "Salvar arquivo"
 
-#: src/slic3r/GUI/MainFrame.cpp:445 src/slic3r/GUI/MainFrame.cpp:447
+#: src/slic3r/GUI/MainFrame.cpp:461 src/slic3r/GUI/MainFrame.cpp:463
 msgid "Save Project &as"
 msgstr "Salvar projeto &como"
 
-#: src/slic3r/GUI/MainFrame.cpp:445 src/slic3r/GUI/MainFrame.cpp:447
+#: src/slic3r/GUI/MainFrame.cpp:461 src/slic3r/GUI/MainFrame.cpp:463
 msgid "Save current project file as"
 msgstr "Salvar arquivo atual como"
 
-#: src/slic3r/GUI/MainFrame.cpp:455
+#: src/slic3r/GUI/MainFrame.cpp:471
 msgid "Import STL/OBJ/AM&F/3MF"
 msgstr "Import STL/OBJ/AM&F/3MF"
 
-#: src/slic3r/GUI/MainFrame.cpp:455
+#: src/slic3r/GUI/MainFrame.cpp:471
 msgid "Load a model"
 msgstr "Carregar um modelo"
 
-#: src/slic3r/GUI/MainFrame.cpp:459
+#: src/slic3r/GUI/MainFrame.cpp:475
 msgid "Import &Config"
 msgstr "Importar &config."
 
-#: src/slic3r/GUI/MainFrame.cpp:459
+#: src/slic3r/GUI/MainFrame.cpp:475
 msgid "Load exported configuration file"
 msgstr "Carregar config. de arquivo exportado"
 
-#: src/slic3r/GUI/MainFrame.cpp:461
+#: src/slic3r/GUI/MainFrame.cpp:478
 msgid "Import Config from &project"
 msgstr "Importar Config do &projeto"
 
-#: src/slic3r/GUI/MainFrame.cpp:461
+#: src/slic3r/GUI/MainFrame.cpp:478
 msgid "Load configuration from project file"
 msgstr "Carregar config. de arquivo de projeto"
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/MainFrame.cpp:482
 msgid "Import Config &Bundle"
 msgstr "Importar coleção &de config."
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/MainFrame.cpp:482
 msgid "Load presets from a bundle"
 msgstr "Carregar predefinições de um pacote"
 
-#: src/slic3r/GUI/MainFrame.cpp:466
+#: src/slic3r/GUI/MainFrame.cpp:485
 msgid "&Import"
 msgstr "&Importar"
 
-#: src/slic3r/GUI/MainFrame.cpp:469 src/slic3r/GUI/MainFrame.cpp:719
+#: src/slic3r/GUI/MainFrame.cpp:488 src/slic3r/GUI/MainFrame.cpp:760
 msgid "Export &G-code"
 msgstr "Exportar &G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:469
+#: src/slic3r/GUI/MainFrame.cpp:488
 msgid "Export current plate as G-code"
-msgstr "Exporte o prato atual como o G-code"
+msgstr "Exporte a bandeja atual como o G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:473 src/slic3r/GUI/MainFrame.cpp:720
+#: src/slic3r/GUI/MainFrame.cpp:492 src/slic3r/GUI/MainFrame.cpp:761
 msgid "S&end G-code"
 msgstr "E&nviar G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:473
+#: src/slic3r/GUI/MainFrame.cpp:492
 msgid "Send to print current plate as G-code"
-msgstr "Enviar para imprimir prato atual como G-code"
+msgstr "Enviar para imprimir a bandeja atual como G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:478
+#: src/slic3r/GUI/MainFrame.cpp:497
 msgid "Export plate as &STL"
-msgstr "Exportar prato como &STL"
+msgstr "Exportar bandeja como &STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:478
+#: src/slic3r/GUI/MainFrame.cpp:497
 msgid "Export current plate as STL"
-msgstr "Exporte o prato atual como STL"
+msgstr "Exporte a bandeja atual como STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:481
+#: src/slic3r/GUI/MainFrame.cpp:500
 msgid "Export plate as STL &including supports"
-msgstr "Exportar prato como STL &incluindo suportes"
+msgstr "Exportar bandeja como STL &incluindo suportes"
 
-#: src/slic3r/GUI/MainFrame.cpp:481
+#: src/slic3r/GUI/MainFrame.cpp:500
 msgid "Export current plate as STL including supports"
-msgstr "Exporte o prato atual como o STL que inclui suportes"
+msgstr "Exporte a bandeja atual como o STL que inclui suportes"
 
-#: src/slic3r/GUI/MainFrame.cpp:484
+#: src/slic3r/GUI/MainFrame.cpp:503
 msgid "Export plate as &AMF"
-msgstr "Exportar prato como &AMF"
+msgstr "Exportar bandeja como &AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:484
+#: src/slic3r/GUI/MainFrame.cpp:503
 msgid "Export current plate as AMF"
-msgstr "Exporte o prato atual como o AMF"
+msgstr "Exporte a bandeja atual como o AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:488
+#: src/slic3r/GUI/MainFrame.cpp:507
 msgid "Export &toolpaths as OBJ"
 msgstr "Exportar &percurso da ferramenta como OBJ"
 
-#: src/slic3r/GUI/MainFrame.cpp:488
+#: src/slic3r/GUI/MainFrame.cpp:507
 msgid "Export toolpaths as OBJ"
 msgstr "Exportar percursos como OBJ"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:511
 msgid "Export &Config"
 msgstr "Exportar &config."
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:511
 msgid "Export current configuration to file"
 msgstr "Exporte a config. atual para o arquivo"
 
-#: src/slic3r/GUI/MainFrame.cpp:494
+#: src/slic3r/GUI/MainFrame.cpp:514
 msgid "Export Config &Bundle"
 msgstr "Exportar coleção &de config."
 
-#: src/slic3r/GUI/MainFrame.cpp:494
+#: src/slic3r/GUI/MainFrame.cpp:514
 msgid "Export all presets to file"
 msgstr "Exporte todas as predefinições para o arquivo"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:517
 msgid "&Export"
 msgstr "&Exportar"
 
-#: src/slic3r/GUI/MainFrame.cpp:502
+#: src/slic3r/GUI/MainFrame.cpp:523
 msgid "Quick Slice"
 msgstr "Fatiamento rápido"
 
-#: src/slic3r/GUI/MainFrame.cpp:502
+#: src/slic3r/GUI/MainFrame.cpp:523
 msgid "Slice a file into a G-code"
 msgstr "Fatiar um arquivo em um G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:508
+#: src/slic3r/GUI/MainFrame.cpp:529
 msgid "Quick Slice and Save As"
 msgstr "Salvamento rápido e salvar como"
 
-#: src/slic3r/GUI/MainFrame.cpp:508
+#: src/slic3r/GUI/MainFrame.cpp:529
 msgid "Slice a file into a G-code, save as"
 msgstr "Fatiar um arquivo em um G-code, salvar como"
 
-#: src/slic3r/GUI/MainFrame.cpp:514
+#: src/slic3r/GUI/MainFrame.cpp:535
 msgid "Repeat Last Quick Slice"
 msgstr "Repetir Último Fatiamento Rápido"
 
-#: src/slic3r/GUI/MainFrame.cpp:514
+#: src/slic3r/GUI/MainFrame.cpp:535
 msgid "Repeat last quick slice"
 msgstr "Repetir último fatiamento rápido"
 
-#: src/slic3r/GUI/MainFrame.cpp:522
+#: src/slic3r/GUI/MainFrame.cpp:543
 msgid "(Re)Slice No&w"
 msgstr "(Re)Fatiar ago&ra"
 
-#: src/slic3r/GUI/MainFrame.cpp:522
+#: src/slic3r/GUI/MainFrame.cpp:543
 msgid "Start new slicing process"
 msgstr "Começar novo processo de fatiamento"
 
-#: src/slic3r/GUI/MainFrame.cpp:526
+#: src/slic3r/GUI/MainFrame.cpp:547
 msgid "&Repair STL file"
 msgstr "&Reparar arquivo STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:526
+#: src/slic3r/GUI/MainFrame.cpp:547
 msgid "Automatically repair an STL file"
 msgstr "Reparar automaticamente um arquivo STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:529
+#: src/slic3r/GUI/MainFrame.cpp:551
 msgid "&Quit"
 msgstr "&Sair"
 
-#: src/slic3r/GUI/MainFrame.cpp:529
+#: src/slic3r/GUI/MainFrame.cpp:551
 #, c-format
 msgid "Quit %s"
 msgstr "Sair %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:554
+#: src/slic3r/GUI/MainFrame.cpp:576
 msgid "&Select all"
 msgstr "&Selecionar todos"
 
-#: src/slic3r/GUI/MainFrame.cpp:555
+#: src/slic3r/GUI/MainFrame.cpp:577
 msgid "Selects all objects"
 msgstr "Selecionar todos os objetos"
 
-#: src/slic3r/GUI/MainFrame.cpp:557
+#: src/slic3r/GUI/MainFrame.cpp:579
 msgid "D&eselect all"
 msgstr "D&eselecionar todos"
 
-#: src/slic3r/GUI/MainFrame.cpp:558
+#: src/slic3r/GUI/MainFrame.cpp:580
 msgid "Deselects all objects"
 msgstr "Deselecionar todos os objetos"
 
-#: src/slic3r/GUI/MainFrame.cpp:561
+#: src/slic3r/GUI/MainFrame.cpp:583
 msgid "&Delete selected"
 msgstr "&Excluir seleção"
 
-#: src/slic3r/GUI/MainFrame.cpp:562
+#: src/slic3r/GUI/MainFrame.cpp:584
 msgid "Deletes the current selection"
 msgstr "Excluir a seleção atual"
 
-#: src/slic3r/GUI/MainFrame.cpp:564
+#: src/slic3r/GUI/MainFrame.cpp:586
 msgid "Delete &all"
 msgstr "Excluir &todos"
 
-#: src/slic3r/GUI/MainFrame.cpp:565
+#: src/slic3r/GUI/MainFrame.cpp:587
 msgid "Deletes all objects"
 msgstr "Excluir todos os objetos"
 
-#: src/slic3r/GUI/MainFrame.cpp:569
+#: src/slic3r/GUI/MainFrame.cpp:591
 msgid "&Undo"
 msgstr "&Desfazer"
 
-#: src/slic3r/GUI/MainFrame.cpp:572
+#: src/slic3r/GUI/MainFrame.cpp:594
 msgid "&Redo"
 msgstr "&Refazer"
 
-#: src/slic3r/GUI/MainFrame.cpp:577
+#: src/slic3r/GUI/MainFrame.cpp:599
 msgid "&Copy"
 msgstr "&Copiar"
 
-#: src/slic3r/GUI/MainFrame.cpp:578
+#: src/slic3r/GUI/MainFrame.cpp:600
 msgid "Copy selection to clipboard"
 msgstr "Copiar seleção para a área de transferência"
 
-#: src/slic3r/GUI/MainFrame.cpp:580
+#: src/slic3r/GUI/MainFrame.cpp:602
 msgid "&Paste"
 msgstr "&Colar"
 
-#: src/slic3r/GUI/MainFrame.cpp:581
+#: src/slic3r/GUI/MainFrame.cpp:603
 msgid "Paste clipboard"
 msgstr "Colar área de transferência"
 
-#: src/slic3r/GUI/MainFrame.cpp:590
+#: src/slic3r/GUI/MainFrame.cpp:607
+msgid "Re&load from disk"
+msgstr "Re&load do disco"
+
+#: src/slic3r/GUI/MainFrame.cpp:608
+msgid "Reload the plater from disk"
+msgstr "Recarregar a bendeja do disco"
+
+#: src/slic3r/GUI/MainFrame.cpp:617
 msgid "&Plater Tab"
-msgstr "&Prato"
+msgstr "&Bandeja"
 
-#: src/slic3r/GUI/MainFrame.cpp:590
+#: src/slic3r/GUI/MainFrame.cpp:617
 msgid "Show the plater"
-msgstr "Mostrar o prato"
+msgstr "Mostrar a bandeja"
 
-#: src/slic3r/GUI/MainFrame.cpp:597
+#: src/slic3r/GUI/MainFrame.cpp:625
 msgid "P&rint Settings Tab"
 msgstr "C&onfig. de impressão"
 
-#: src/slic3r/GUI/MainFrame.cpp:597
+#: src/slic3r/GUI/MainFrame.cpp:625
 msgid "Show the print settings"
 msgstr "Mostrar as config. de impressão"
 
-#: src/slic3r/GUI/MainFrame.cpp:599 src/slic3r/GUI/MainFrame.cpp:722
+#: src/slic3r/GUI/MainFrame.cpp:628 src/slic3r/GUI/MainFrame.cpp:763
 msgid "&Filament Settings Tab"
 msgstr "&config. de filamentos"
 
-#: src/slic3r/GUI/MainFrame.cpp:599
+#: src/slic3r/GUI/MainFrame.cpp:628
 msgid "Show the filament settings"
 msgstr "Mostrar as config. de filamento"
 
-#: src/slic3r/GUI/MainFrame.cpp:602
+#: src/slic3r/GUI/MainFrame.cpp:632
 msgid "Print&er Settings Tab"
 msgstr "A&ba de config. da impressora"
 
-#: src/slic3r/GUI/MainFrame.cpp:602
+#: src/slic3r/GUI/MainFrame.cpp:632
 msgid "Show the printer settings"
 msgstr "Mostrar as config. da impressora"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:637
 msgid "3&D"
 msgstr "3&D"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:637
 msgid "Show the 3D editing view"
 msgstr "Mostrar a vista de edição 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:609
+#: src/slic3r/GUI/MainFrame.cpp:640
 msgid "Pre&view"
 msgstr "Pre&visualização"
 
-#: src/slic3r/GUI/MainFrame.cpp:609
+#: src/slic3r/GUI/MainFrame.cpp:640
 msgid "Show the 3D slices preview"
 msgstr "Mostrar a pré-visualização do fatiamento 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:628
+#: src/slic3r/GUI/MainFrame.cpp:659
 msgid "Print &Host Upload Queue"
 msgstr "Imprimir &Fila de upload do Host"
 
-#: src/slic3r/GUI/MainFrame.cpp:628
+#: src/slic3r/GUI/MainFrame.cpp:659
 msgid "Display the Print Host Upload Queue window"
 msgstr "Exibir a janela fila de upload do host de impressão"
 
-#: src/slic3r/GUI/MainFrame.cpp:637
+#: src/slic3r/GUI/MainFrame.cpp:669
 msgid "Iso"
 msgstr "Isométrico"
 
-#: src/slic3r/GUI/MainFrame.cpp:637
+#: src/slic3r/GUI/MainFrame.cpp:669
 msgid "Iso View"
 msgstr "Vista isométrica"
 
 #. TRN To be shown in the main menu View->Top
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:641 src/libslic3r/PrintConfig.cpp:2094
+#: src/slic3r/GUI/MainFrame.cpp:673 src/libslic3r/PrintConfig.cpp:2132
+#: src/libslic3r/PrintConfig.cpp:2141
 msgid "Top"
 msgstr "Topo"
 
-#: src/slic3r/GUI/MainFrame.cpp:641
+#: src/slic3r/GUI/MainFrame.cpp:673
 msgid "Top View"
 msgstr "Vista do topo"
 
 #. TRN To be shown in the main menu View->Bottom
 #. TRN To be shown in Print Settings "Bottom solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:644 src/libslic3r/PrintConfig.cpp:159
+#. TRN To be shown in Print Settings "Top solid layers"
+#: src/slic3r/GUI/MainFrame.cpp:676 src/libslic3r/PrintConfig.cpp:174
+#: src/libslic3r/PrintConfig.cpp:183
 msgid "Bottom"
 msgstr "Base"
 
-#: src/slic3r/GUI/MainFrame.cpp:644
+#: src/slic3r/GUI/MainFrame.cpp:676
 msgid "Bottom View"
 msgstr "Vista da base"
 
-#: src/slic3r/GUI/MainFrame.cpp:646
+#: src/slic3r/GUI/MainFrame.cpp:678
 msgid "Front"
 msgstr "Frente"
 
-#: src/slic3r/GUI/MainFrame.cpp:646
+#: src/slic3r/GUI/MainFrame.cpp:678
 msgid "Front View"
 msgstr "Vista da frente"
 
-#: src/slic3r/GUI/MainFrame.cpp:648 src/libslic3r/PrintConfig.cpp:1611
+#: src/slic3r/GUI/MainFrame.cpp:680 src/libslic3r/PrintConfig.cpp:1632
 msgid "Rear"
 msgstr "Traseira"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/MainFrame.cpp:680
 msgid "Rear View"
 msgstr "Vista traseira"
 
-#: src/slic3r/GUI/MainFrame.cpp:650
+#: src/slic3r/GUI/MainFrame.cpp:682
 msgid "Left"
 msgstr "Esquerda"
 
-#: src/slic3r/GUI/MainFrame.cpp:650
+#: src/slic3r/GUI/MainFrame.cpp:682
 msgid "Left View"
 msgstr "Vista esquerda"
 
-#: src/slic3r/GUI/MainFrame.cpp:652
+#: src/slic3r/GUI/MainFrame.cpp:684
 msgid "Right"
 msgstr "Direita"
 
-#: src/slic3r/GUI/MainFrame.cpp:652
+#: src/slic3r/GUI/MainFrame.cpp:684
 msgid "Right View"
 msgstr "Vista direita"
 
-#: src/slic3r/GUI/MainFrame.cpp:659
+#: src/slic3r/GUI/MainFrame.cpp:687
+msgid "Show &labels"
+msgstr "Mostrar &rótulos"
+
+#: src/slic3r/GUI/MainFrame.cpp:687
+msgid "Show object/instance labels in 3D scene"
+msgstr "Mostrar rótulos de objeto/instância em cena 3D"
+
+#: src/slic3r/GUI/MainFrame.cpp:695
 msgid "Prusa 3D &Drivers"
 msgstr "Drivers 3D &Prusa"
 
-#: src/slic3r/GUI/MainFrame.cpp:659
+#: src/slic3r/GUI/MainFrame.cpp:695
 msgid "Open the Prusa3D drivers download page in your browser"
 msgstr "Abrir a página para baixar os drivers da Prusa3D no seu navegador"
 
-#: src/slic3r/GUI/MainFrame.cpp:661
+#: src/slic3r/GUI/MainFrame.cpp:697
 msgid "Software &Releases"
 msgstr "Lançamentos de &software"
 
-#: src/slic3r/GUI/MainFrame.cpp:661
+#: src/slic3r/GUI/MainFrame.cpp:697
 msgid "Open the software releases page in your browser"
 msgstr "Abrir a página de lançamentos de software no seu navegador"
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:703
 #, c-format
 msgid "%s &Website"
 msgstr "%s &Site"
 
-#: src/slic3r/GUI/MainFrame.cpp:668
+#: src/slic3r/GUI/MainFrame.cpp:704
 #, c-format
 msgid "Open the %s website in your browser"
 msgstr "Abra o site do %s no seu navegador"
 
-#: src/slic3r/GUI/MainFrame.cpp:674
+#: src/slic3r/GUI/MainFrame.cpp:710
 msgid "System &Info"
 msgstr "Informação &do sistema"
 
-#: src/slic3r/GUI/MainFrame.cpp:674
+#: src/slic3r/GUI/MainFrame.cpp:710
 msgid "Show system information"
 msgstr "Mostrar a informação do sistema"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/MainFrame.cpp:712
 msgid "Show &Configuration Folder"
 msgstr "Mostrar &pasta de config."
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/MainFrame.cpp:712
 msgid "Show user configuration folder (datadir)"
 msgstr "Mostrar pasta de config. do usuário (datadir)"
 
-#: src/slic3r/GUI/MainFrame.cpp:678
+#: src/slic3r/GUI/MainFrame.cpp:714
 msgid "Report an I&ssue"
 msgstr "Reportar um p&roblema"
 
-#: src/slic3r/GUI/MainFrame.cpp:678
+#: src/slic3r/GUI/MainFrame.cpp:714
 #, c-format
 msgid "Report an issue on %s"
 msgstr "Relatar um problema em %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:680
+#: src/slic3r/GUI/MainFrame.cpp:716
 #, c-format
 msgid "&About %s"
 msgstr "&Sobre %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:680
+#: src/slic3r/GUI/MainFrame.cpp:716
 msgid "Show about dialog"
 msgstr "Mostrar diálogo sobre"
 
-#: src/slic3r/GUI/MainFrame.cpp:683
+#: src/slic3r/GUI/MainFrame.cpp:719
 msgid "Show the list of the keyboard shortcuts"
 msgstr "Mostrar lista dos atalhos no teclado"
 
-#: src/slic3r/GUI/MainFrame.cpp:691
+#: src/slic3r/GUI/MainFrame.cpp:732
 msgid "&File"
 msgstr "&Arquivo"
 
-#: src/slic3r/GUI/MainFrame.cpp:692
+#: src/slic3r/GUI/MainFrame.cpp:733
 msgid "&Edit"
 msgstr "&Editar"
 
-#: src/slic3r/GUI/MainFrame.cpp:693
+#: src/slic3r/GUI/MainFrame.cpp:734
 msgid "&Window"
 msgstr "&Janela"
 
-#: src/slic3r/GUI/MainFrame.cpp:694
+#: src/slic3r/GUI/MainFrame.cpp:735
 msgid "&View"
 msgstr "&Vista"
 
-#: src/slic3r/GUI/MainFrame.cpp:697
+#: src/slic3r/GUI/MainFrame.cpp:738
 msgid "&Help"
 msgstr "&Ajuda"
 
-#: src/slic3r/GUI/MainFrame.cpp:719
+#: src/slic3r/GUI/MainFrame.cpp:760
 msgid "E&xport"
 msgstr "E&xportar"
 
-#: src/slic3r/GUI/MainFrame.cpp:720
+#: src/slic3r/GUI/MainFrame.cpp:761
 msgid "S&end to print"
 msgstr "E&nviar para impressora"
 
-#: src/slic3r/GUI/MainFrame.cpp:722
+#: src/slic3r/GUI/MainFrame.cpp:763
 msgid "Mate&rial Settings Tab"
 msgstr "A&ba de config. de material"
 
-#: src/slic3r/GUI/MainFrame.cpp:743
+#: src/slic3r/GUI/MainFrame.cpp:784
 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Escolha um arquivo para fatiar (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/MainFrame.cpp:754
+#: src/slic3r/GUI/MainFrame.cpp:795
 msgid "No previously sliced file."
 msgstr "Sem arquivo fatiado anteriormente."
 
-#: src/slic3r/GUI/MainFrame.cpp:760
+#: src/slic3r/GUI/MainFrame.cpp:801
 msgid "Previously sliced file ("
 msgstr "Arquivo fatiado anteriormente ("
 
-#: src/slic3r/GUI/MainFrame.cpp:760
+#: src/slic3r/GUI/MainFrame.cpp:801
 msgid ") not found."
 msgstr ") não encontrado."
 
-#: src/slic3r/GUI/MainFrame.cpp:761
+#: src/slic3r/GUI/MainFrame.cpp:802
 msgid "File Not Found"
 msgstr "Arquivo não encontrado"
 
-#: src/slic3r/GUI/MainFrame.cpp:796
+#: src/slic3r/GUI/MainFrame.cpp:837
 #, c-format
 msgid "Save %s file as:"
 msgstr "Salve o arquivo %s como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:796
+#: src/slic3r/GUI/MainFrame.cpp:837
 msgid "SVG"
 msgstr "SVG"
 
-#: src/slic3r/GUI/MainFrame.cpp:796
+#: src/slic3r/GUI/MainFrame.cpp:837
 msgid "G-code"
 msgstr "G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:808
+#: src/slic3r/GUI/MainFrame.cpp:849
 msgid "Save zip file as:"
 msgstr "Salvar arquivo compactado(zip) como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:817 src/slic3r/GUI/Plater.cpp:2981
-#: src/slic3r/GUI/Plater.cpp:4533 src/slic3r/GUI/Tab.cpp:1194
-#: src/slic3r/GUI/Tab.cpp:3786
+#: src/slic3r/GUI/MainFrame.cpp:858 src/slic3r/GUI/Plater.cpp:3123
+#: src/slic3r/GUI/Plater.cpp:5109 src/slic3r/GUI/Tab.cpp:1220
+#: src/slic3r/GUI/Tab.cpp:3666
 msgid "Slicing"
 msgstr "Fatiamento"
 
 #. TRN "Processing input_file_basename"
-#: src/slic3r/GUI/MainFrame.cpp:819
+#: src/slic3r/GUI/MainFrame.cpp:860
 #, c-format
 msgid "Processing %s"
 msgstr "Processando %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:842
+#: src/slic3r/GUI/MainFrame.cpp:883
 msgid " was successfully sliced."
 msgstr " foi fatiado com sucesso."
 
-#: src/slic3r/GUI/MainFrame.cpp:844
+#: src/slic3r/GUI/MainFrame.cpp:885
 msgid "Slicing Done!"
 msgstr "Fatiamento completo!"
 
-#: src/slic3r/GUI/MainFrame.cpp:859
+#: src/slic3r/GUI/MainFrame.cpp:900
 msgid "Select the STL file to repair:"
 msgstr "Selecione o arquivo STL para corrigir:"
 
-#: src/slic3r/GUI/MainFrame.cpp:869
+#: src/slic3r/GUI/MainFrame.cpp:910
 msgid "Save OBJ file (less prone to coordinate errors than STL) as:"
 msgstr ""
 "Salvar arquivo OBJ (menos propenso a erros de coordenada que STL) como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:881
+#: src/slic3r/GUI/MainFrame.cpp:922
 msgid "Your file was repaired."
 msgstr "Seu arquivo foi corrigido."
 
-#: src/slic3r/GUI/MainFrame.cpp:881 src/libslic3r/PrintConfig.cpp:3257
+#: src/slic3r/GUI/MainFrame.cpp:922 src/libslic3r/PrintConfig.cpp:3457
 msgid "Repair"
 msgstr "Corrigir"
 
-#: src/slic3r/GUI/MainFrame.cpp:895
+#: src/slic3r/GUI/MainFrame.cpp:936
 msgid "Save configuration as:"
 msgstr "Salvar config. como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:914 src/slic3r/GUI/MainFrame.cpp:976
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1017
 msgid "Select configuration to load:"
 msgstr "Selecionar config. para carregar:"
 
-#: src/slic3r/GUI/MainFrame.cpp:950
+#: src/slic3r/GUI/MainFrame.cpp:991
 msgid "Save presets bundle as:"
 msgstr "Salvar pacote de predefinições como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:997
+#: src/slic3r/GUI/MainFrame.cpp:1038
 #, c-format
 msgid "%d presets successfully imported."
 msgstr "%d predefinições importadas com êxito."
 
+#: src/slic3r/GUI/Mouse3DController.cpp:239
+msgid "3Dconnexion settings"
+msgstr "Configurações de 3Dconnexion"
+
+#: src/slic3r/GUI/Mouse3DController.cpp:254
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: src/slic3r/GUI/Mouse3DController.cpp:261
+msgid "Speed:"
+msgstr "Velocidade:"
+
+#: src/slic3r/GUI/Mouse3DController.cpp:265
+#: src/slic3r/GUI/Mouse3DController.cpp:288
+msgid "Translation"
+msgstr "Tradução"
+
+#: src/slic3r/GUI/Mouse3DController.cpp:277
+#: src/slic3r/GUI/Mouse3DController.cpp:288
+msgid "Zoom"
+msgstr "Zoom"
+
+#: src/slic3r/GUI/Mouse3DController.cpp:284
+msgid "Deadzone:"
+msgstr "Zona morta:"
+
 #: src/slic3r/GUI/MsgDialog.cpp:73
 #, c-format
 msgid "%s error"
@@ -3115,92 +4100,110 @@ msgstr "%s erro"
 msgid "%s has encountered an error"
 msgstr "%s encontrou um erro"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:249
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:56
+msgid "Instances"
+msgstr "Instâncias"
+
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:60
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:216
+#, c-format
+msgid "Instance %d"
+msgstr "Instância %d"
+
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:67 src/slic3r/GUI/Tab.cpp:3514
+#: src/slic3r/GUI/Tab.cpp:3602
+msgid "Layers"
+msgstr "Camadas"
+
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+msgid "Range"
+msgstr "Intervalo"
+
+#: src/slic3r/GUI/OptionsGroup.cpp:259
 msgctxt "Layers"
 msgid "Top"
 msgstr "Topo"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:249
+#: src/slic3r/GUI/OptionsGroup.cpp:259
 msgctxt "Layers"
 msgid "Bottom"
 msgstr "Base"
 
-#: src/slic3r/GUI/Plater.cpp:146
+#: src/slic3r/GUI/Plater.cpp:161
 msgid "Volume"
 msgstr "Volume"
 
-#: src/slic3r/GUI/Plater.cpp:147
+#: src/slic3r/GUI/Plater.cpp:162
 msgid "Facets"
 msgstr "Facetas"
 
-#: src/slic3r/GUI/Plater.cpp:148
+#: src/slic3r/GUI/Plater.cpp:163
 msgid "Materials"
 msgstr "Materiais"
 
-#: src/slic3r/GUI/Plater.cpp:151
+#: src/slic3r/GUI/Plater.cpp:166
 msgid "Manifold"
 msgstr "Múltiplo"
 
-#: src/slic3r/GUI/Plater.cpp:201
+#: src/slic3r/GUI/Plater.cpp:216
 msgid "Sliced Info"
 msgstr "Informações fatiadas"
 
-#: src/slic3r/GUI/Plater.cpp:220 src/slic3r/GUI/Plater.cpp:1150
+#: src/slic3r/GUI/Plater.cpp:235 src/slic3r/GUI/Plater.cpp:1229
 msgid "Used Filament (m)"
 msgstr "Filamento utilizado (m)"
 
-#: src/slic3r/GUI/Plater.cpp:221
+#: src/slic3r/GUI/Plater.cpp:236
 msgid "Used Filament (mm³)"
 msgstr "Filamento utilizado (mm³)"
 
-#: src/slic3r/GUI/Plater.cpp:222
+#: src/slic3r/GUI/Plater.cpp:237
 msgid "Used Filament (g)"
 msgstr "Filamento utilizado (g)"
 
-#: src/slic3r/GUI/Plater.cpp:223
+#: src/slic3r/GUI/Plater.cpp:238
 msgid "Used Material (unit)"
 msgstr "Material utilizado (unidade)"
 
-#: src/slic3r/GUI/Plater.cpp:224 src/slic3r/GUI/Plater.cpp:1165
-#: src/libslic3r/PrintConfig.cpp:742
-msgid "Cost"
-msgstr "Custo"
+#: src/slic3r/GUI/Plater.cpp:239
+msgid "Cost (money)"
+msgstr "Custo (dinheiro)"
 
-#: src/slic3r/GUI/Plater.cpp:225 src/slic3r/GUI/Plater.cpp:1137
-#: src/slic3r/GUI/Plater.cpp:1179
+#: src/slic3r/GUI/Plater.cpp:240 src/slic3r/GUI/Plater.cpp:1216
+#: src/slic3r/GUI/Plater.cpp:1258
 msgid "Estimated printing time"
 msgstr "Tempo estimado de impressão"
 
-#: src/slic3r/GUI/Plater.cpp:226
+#: src/slic3r/GUI/Plater.cpp:241
 msgid "Number of tool changes"
 msgstr "Número de mudanças de ferramenta"
 
-#: src/slic3r/GUI/Plater.cpp:316
+#: src/slic3r/GUI/Plater.cpp:343
 msgid "Click to edit preset"
 msgstr "Clique para editar a predefinição"
 
-#: src/slic3r/GUI/Plater.cpp:468
+#: src/slic3r/GUI/Plater.cpp:498
 msgid "Select what kind of support do you need"
 msgstr "Selecione o tipo de suporte que você precisa"
 
-#: src/slic3r/GUI/Plater.cpp:470 src/libslic3r/PrintConfig.cpp:1865
-#: src/libslic3r/PrintConfig.cpp:2561
+#: src/slic3r/GUI/Plater.cpp:500 src/libslic3r/PrintConfig.cpp:1901
+#: src/libslic3r/PrintConfig.cpp:2684
 msgid "Support on build plate only"
 msgstr "Suportes somente na mesa de impressão"
 
-#: src/slic3r/GUI/Plater.cpp:471 src/slic3r/GUI/Plater.cpp:592
+#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Plater.cpp:624
 msgid "For support enforcers only"
 msgstr "Para apenas reforçadores de suporte"
 
-#: src/slic3r/GUI/Plater.cpp:472
+#: src/slic3r/GUI/Plater.cpp:502
 msgid "Everywhere"
 msgstr "Em toda parte"
 
-#: src/slic3r/GUI/Plater.cpp:504 src/slic3r/GUI/Tab.cpp:1091
+#: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1116
 msgid "Brim"
 msgstr "Aba"
 
-#: src/slic3r/GUI/Plater.cpp:506
+#: src/slic3r/GUI/Plater.cpp:536
 msgid ""
 "This flag enables the brim that will be printed around each object on the "
 "first layer."
@@ -3208,67 +4211,75 @@ msgstr ""
 "Este sinalizador permite que a aba que será impressa em torno de cada objeto "
 "na primeira camada."
 
-#: src/slic3r/GUI/Plater.cpp:514
+#: src/slic3r/GUI/Plater.cpp:544
 msgid "Purging volumes"
 msgstr "Volumes de purga"
 
-#: src/slic3r/GUI/Plater.cpp:606
+#: src/slic3r/GUI/Plater.cpp:638
 msgid "Select what kind of pad do you need"
 msgstr "Selecione o tipo de bloco que você precisa"
 
-#: src/slic3r/GUI/Plater.cpp:608
+#: src/slic3r/GUI/Plater.cpp:640
 msgid "Below object"
 msgstr "Abaixo do objeto"
 
-#: src/slic3r/GUI/Plater.cpp:609
+#: src/slic3r/GUI/Plater.cpp:641
 msgid "Around object"
 msgstr "Em torno do objeto"
 
-#: src/slic3r/GUI/Plater.cpp:781
+#: src/slic3r/GUI/Plater.cpp:815
 msgid "Print settings"
 msgstr "Config. de impressão"
 
-#: src/slic3r/GUI/Plater.cpp:782 src/slic3r/GUI/Tab.cpp:1640
-#: src/slic3r/GUI/Tab.cpp:1641
+#: src/slic3r/GUI/Plater.cpp:816 src/slic3r/GUI/Tab.cpp:1424
+#: src/slic3r/GUI/Tab.cpp:1425
 msgid "Filament"
 msgstr "Filamento"
 
-#: src/slic3r/GUI/Plater.cpp:783
+#: src/slic3r/GUI/Plater.cpp:817
 msgid "SLA print settings"
 msgstr "Config. de impressão de SLA"
 
-#: src/slic3r/GUI/Plater.cpp:784 src/slic3r/GUI/Preset.cpp:1314
+#: src/slic3r/GUI/Plater.cpp:818 src/slic3r/GUI/Preset.cpp:1536
 msgid "SLA material"
 msgstr "Material de SLA"
 
-#: src/slic3r/GUI/Plater.cpp:785
+#: src/slic3r/GUI/Plater.cpp:819
 msgid "Printer"
 msgstr "Impressora"
 
-#: src/slic3r/GUI/Plater.cpp:835 src/slic3r/GUI/Plater.cpp:4823
+#: src/slic3r/GUI/Plater.cpp:878 src/slic3r/GUI/Plater.cpp:5523
 msgid "Send to printer"
 msgstr "Enviar para a impressora"
 
-#: src/slic3r/GUI/Plater.cpp:838 src/slic3r/GUI/Plater.cpp:2981
-#: src/slic3r/GUI/Plater.cpp:4536
+#: src/slic3r/GUI/Plater.cpp:879
+msgid "Remove device"
+msgstr "Remover dispositivo"
+
+#: src/slic3r/GUI/Plater.cpp:880
+msgid "Export to SD card / Flash drive"
+msgstr "Exportar para cartão SD / unidade Flash"
+
+#: src/slic3r/GUI/Plater.cpp:892 src/slic3r/GUI/Plater.cpp:3123
+#: src/slic3r/GUI/Plater.cpp:5112
 msgid "Slice now"
 msgstr "Fatiar agora"
 
-#: src/slic3r/GUI/Plater.cpp:978
+#: src/slic3r/GUI/Plater.cpp:1042
 msgid "Hold Shift to Slice & Export G-code"
 msgstr "Hold Shift to Slice & Export G-code"
 
-#: src/slic3r/GUI/Plater.cpp:1083
+#: src/slic3r/GUI/Plater.cpp:1152
 #, c-format
 msgid "%d (%d shells)"
 msgstr "%d (%d paredes)"
 
-#: src/slic3r/GUI/Plater.cpp:1088
+#: src/slic3r/GUI/Plater.cpp:1157
 #, c-format
 msgid "Auto-repaired (%d errors)"
 msgstr "Auto reparando (%d erros):"
 
-#: src/slic3r/GUI/Plater.cpp:1091
+#: src/slic3r/GUI/Plater.cpp:1160
 #, c-format
 msgid ""
 "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d "
@@ -3277,107 +4288,108 @@ msgstr ""
 "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d "
 "facets reversed, %d backwards edges"
 
-#: src/slic3r/GUI/Plater.cpp:1101
+#: src/slic3r/GUI/Plater.cpp:1170
 msgid "Yes"
 msgstr "Sim"
 
-#: src/slic3r/GUI/Plater.cpp:1124
+#: src/slic3r/GUI/Plater.cpp:1191
 msgid "Used Material (ml)"
 msgstr "Material usado (ml)"
 
-#: src/slic3r/GUI/Plater.cpp:1127
+#: src/slic3r/GUI/Plater.cpp:1194
 msgid "object(s)"
 msgstr "objeto(s)"
 
-#: src/slic3r/GUI/Plater.cpp:1127
+#: src/slic3r/GUI/Plater.cpp:1194
 msgid "supports and pad"
 msgstr "suportes e bloco"
 
-#: src/slic3r/GUI/Plater.cpp:1152 src/slic3r/GUI/Plater.cpp:1167
+#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
 msgid "objects"
 msgstr "objetos"
 
-#: src/slic3r/GUI/Plater.cpp:1152 src/slic3r/GUI/Plater.cpp:1167
+#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
 msgid "wipe tower"
 msgstr "torre de limpeza"
 
-#: src/slic3r/GUI/Plater.cpp:1182
-msgid "normal mode"
-msgstr "modo normal"
+#: src/slic3r/GUI/Plater.cpp:1243 src/libslic3r/PrintConfig.cpp:760
+#: src/libslic3r/PrintConfig.cpp:2510 src/libslic3r/PrintConfig.cpp:2511
+msgid "Cost"
+msgstr "Custo"
 
-#: src/slic3r/GUI/Plater.cpp:1186 src/slic3r/GUI/Plater.cpp:1195
-#: src/libslic3r/PrintConfig.cpp:565
+#: src/slic3r/GUI/Plater.cpp:1260 src/libslic3r/PrintConfig.cpp:582
 msgid "Color"
 msgstr "Cor"
 
-#: src/slic3r/GUI/Plater.cpp:1191
+#: src/slic3r/GUI/Plater.cpp:1261
+msgid "Pause"
+msgstr "Pausar"
+
+#: src/slic3r/GUI/Plater.cpp:1286
+msgid "normal mode"
+msgstr "modo normal"
+
+#: src/slic3r/GUI/Plater.cpp:1291
 msgid "stealth mode"
 msgstr "modo silencioso"
 
-#: src/slic3r/GUI/Plater.cpp:1286
+#: src/slic3r/GUI/Plater.cpp:1395
 msgid "Load File"
 msgstr "Carregar arquivo"
 
-#: src/slic3r/GUI/Plater.cpp:1290
+#: src/slic3r/GUI/Plater.cpp:1399
 msgid "Load Files"
 msgstr "Carregar arquivos"
 
-#: src/slic3r/GUI/Plater.cpp:1519
-msgid "ERROR: not enough resources to execute a new job."
-msgstr "ERRO: não há recursos suficientes para executar um novo trabalho."
-
-#: src/slic3r/GUI/Plater.cpp:2089
+#: src/slic3r/GUI/Plater.cpp:2155
 msgid "New Project"
 msgstr "Novo projeto"
 
-#: src/slic3r/GUI/Plater.cpp:2206
+#: src/slic3r/GUI/Plater.cpp:2275
 msgid "Loading"
 msgstr "Carregando"
 
-#: src/slic3r/GUI/Plater.cpp:2216
+#: src/slic3r/GUI/Plater.cpp:2285
 #, c-format
-msgid "Processing input file %s\n"
-msgstr "Processando o arquivo de entrada %s\n"
+msgid "Processing input file %s"
+msgstr "Processando o arquivo de entrada %s"
 
-#: src/slic3r/GUI/Plater.cpp:2244
-msgid ""
-"You can't load SLA project if there is at least one multi-part object on the "
-"bed"
+#: src/slic3r/GUI/Plater.cpp:2313
+msgid "You cannot load SLA project with a multi-part object on the bed"
 msgstr ""
-"Não é possível carregar o projeto de SLA se houver pelo menos um objeto de "
-"várias partes na mesa"
+"Você não pode carregar o projeto SLA com um objeto de várias partes na cama"
 
-#: src/slic3r/GUI/Plater.cpp:2245 src/slic3r/GUI/Tab.cpp:3146
+#: src/slic3r/GUI/Plater.cpp:2314 src/slic3r/GUI/Tab.cpp:2961
 msgid "Please check your object list before preset changing."
 msgstr "Verifique a lista de objetos antes de alterar a predefinição."
 
-#: src/slic3r/GUI/Plater.cpp:2288
+#: src/slic3r/GUI/Plater.cpp:2359
 msgid ""
-"This file contains several objects positioned at multiple heights. Instead "
-"of considering them as multiple objects, should I consider\n"
-"this file as a single object having multiple parts?\n"
+"This file contains several objects positioned at multiple heights.\n"
+"Instead of considering them as multiple objects, should I consider\n"
+"this file as a single object having multiple parts?"
 msgstr ""
-"Este arquivo contém vários objetos posicionados em várias alturas. Em vez de "
-"considerá-los como múltiplos objetos, devo considerar\n"
-"Este arquivo como um único objeto com várias partes?\n"
+"Este arquivo contém vários objetos posicionados em várias alturas. \n"
+"Em vez de considerá-los como múltiplos objetos, devo considerar\n"
+"Este arquivo como um único objeto com várias partes?"
 
-#: src/slic3r/GUI/Plater.cpp:2291 src/slic3r/GUI/Plater.cpp:2343
+#: src/slic3r/GUI/Plater.cpp:2362 src/slic3r/GUI/Plater.cpp:2415
 msgid "Multi-part object detected"
 msgstr "Objeto de várias partes detectado"
 
-#: src/slic3r/GUI/Plater.cpp:2298
+#: src/slic3r/GUI/Plater.cpp:2369
 msgid ""
 "This file cannot be loaded in a simple mode. Do you want to switch to an "
-"advanced mode?\n"
+"advanced mode?"
 msgstr ""
 "Este arquivo não pode ser carregado em um modo simples. Deseja mudar para um "
-"modo avançado?\n"
+"modo avançado?"
 
-#: src/slic3r/GUI/Plater.cpp:2299
+#: src/slic3r/GUI/Plater.cpp:2370
 msgid "Detected advanced data"
 msgstr "Dados avançados detectados"
 
-#: src/slic3r/GUI/Plater.cpp:2320
+#: src/slic3r/GUI/Plater.cpp:2392
 #, c-format
 msgid ""
 "You can't to add the object(s) from %s because of one or some of them "
@@ -3386,21 +4398,21 @@ msgstr ""
 "Você não pode adicionar o objeto (s) %s por causa de um ou alguns deles é "
 "(são) de várias partes"
 
-#: src/slic3r/GUI/Plater.cpp:2340
+#: src/slic3r/GUI/Plater.cpp:2412
 msgid ""
 "Multiple objects were loaded for a multi-material printer.\n"
 "Instead of considering them as multiple objects, should I consider\n"
-"these files to represent a single object having multiple parts?\n"
+"these files to represent a single object having multiple parts?"
 msgstr ""
 "Vários objetos foram carregados para uma impressora de vários materiais.\n"
 "Em vez de considerá-los como múltiplos objetos, devo considerar\n"
-"esses arquivos para representar um único objeto com várias partes?\n"
+"esses arquivos para representar um único objeto com várias partes?"
 
-#: src/slic3r/GUI/Plater.cpp:2356
+#: src/slic3r/GUI/Plater.cpp:2428
 msgid "Loaded"
 msgstr "Carregado"
 
-#: src/slic3r/GUI/Plater.cpp:2458
+#: src/slic3r/GUI/Plater.cpp:2530
 msgid ""
 "Your object appears to be too large, so it was automatically scaled down to "
 "fit your print bed."
@@ -3408,69 +4420,89 @@ msgstr ""
 "Seu objeto parece ser muito grande, por isso foi automaticamente "
 "dimensionado para baixo para caber sua mesa de impressão."
 
-#: src/slic3r/GUI/Plater.cpp:2459
+#: src/slic3r/GUI/Plater.cpp:2531
 msgid "Object too large?"
 msgstr "Objeto muito grande?"
 
-#: src/slic3r/GUI/Plater.cpp:2517
+#: src/slic3r/GUI/Plater.cpp:2593
 msgid "Export STL file:"
 msgstr "Exportar arquivo STL:"
 
-#: src/slic3r/GUI/Plater.cpp:2524
+#: src/slic3r/GUI/Plater.cpp:2600
 msgid "Export AMF file:"
 msgstr "Exportar arquivo AMF:"
 
-#: src/slic3r/GUI/Plater.cpp:2530
+#: src/slic3r/GUI/Plater.cpp:2606
 msgid "Save file as:"
 msgstr "Salvar arquivo como:"
 
-#: src/slic3r/GUI/Plater.cpp:2536
+#: src/slic3r/GUI/Plater.cpp:2612
 msgid "Export OBJ file:"
 msgstr "Exportar arquivo OBJ:"
 
-#: src/slic3r/GUI/Plater.cpp:2638
+#: src/slic3r/GUI/Plater.cpp:2714
 msgid "Delete Object"
 msgstr "Excluir objeto"
 
-#: src/slic3r/GUI/Plater.cpp:2649
+#: src/slic3r/GUI/Plater.cpp:2725
 msgid "Reset Project"
 msgstr "Redefinir projeto"
 
-#: src/slic3r/GUI/Plater.cpp:2688
+#: src/slic3r/GUI/Plater.cpp:2762
+msgid "Hollow"
+msgstr "Vazado"
+
+#: src/slic3r/GUI/Plater.cpp:2769
 msgid "Optimize Rotation"
 msgstr "Otimize a rotação"
 
-#: src/slic3r/GUI/Plater.cpp:2734
+#: src/slic3r/GUI/Plater.cpp:2815
 msgid "Arranging"
 msgstr "Organizar"
 
-#: src/slic3r/GUI/Plater.cpp:2757
+#: src/slic3r/GUI/Plater.cpp:2837
 msgid "Could not arrange model objects! Some geometries may be invalid."
 msgstr ""
 "Não foi possível organizar objetos de modelo! Algumas geometrias podem ser "
 "inválidas."
 
-#: src/slic3r/GUI/Plater.cpp:2763
+#: src/slic3r/GUI/Plater.cpp:2843
 msgid "Arranging canceled."
 msgstr "Arranjo cancelado."
 
-#: src/slic3r/GUI/Plater.cpp:2764
+#: src/slic3r/GUI/Plater.cpp:2844
 msgid "Arranging done."
 msgstr "Arranjo feito."
 
-#: src/slic3r/GUI/Plater.cpp:2780
+#: src/slic3r/GUI/Plater.cpp:2860
 msgid "Searching for optimal orientation"
 msgstr "Procurando orientação ideal"
 
-#: src/slic3r/GUI/Plater.cpp:2813
+#: src/slic3r/GUI/Plater.cpp:2893
 msgid "Orientation search canceled."
 msgstr "Pesquisa de orientação cancelada."
 
-#: src/slic3r/GUI/Plater.cpp:2814
+#: src/slic3r/GUI/Plater.cpp:2894
 msgid "Orientation found."
 msgstr "Orientação encontrada."
 
-#: src/slic3r/GUI/Plater.cpp:2830
+#: src/slic3r/GUI/Plater.cpp:2924
+msgid "Indexing hollowed object"
+msgstr "Indexando objeto oco"
+
+#: src/slic3r/GUI/Plater.cpp:2928
+msgid "Hollowing cancelled."
+msgstr "Cancelado"
+
+#: src/slic3r/GUI/Plater.cpp:2929
+msgid "Hollowing done."
+msgstr "Deixado oco pronto."
+
+#: src/slic3r/GUI/Plater.cpp:2931
+msgid "Hollowing failed."
+msgstr "Deixar oco falhou."
+
+#: src/slic3r/GUI/Plater.cpp:2972
 msgid ""
 "The selected object can't be split because it contains more than one volume/"
 "material."
@@ -3478,145 +4510,165 @@ msgstr ""
 "O objeto selecionado não pode ser dividido porque contém mais de um volume/"
 "material."
 
-#: src/slic3r/GUI/Plater.cpp:2841
+#: src/slic3r/GUI/Plater.cpp:2983
 msgid "Split to Objects"
 msgstr "Dividir em objetos"
 
-#: src/slic3r/GUI/Plater.cpp:2966
+#: src/slic3r/GUI/Plater.cpp:3108
 msgid "Invalid data"
 msgstr "Dados inválidos"
 
-#: src/slic3r/GUI/Plater.cpp:2975
+#: src/slic3r/GUI/Plater.cpp:3117
 msgid "Ready to slice"
 msgstr "Pronto para fatiar"
 
-#: src/slic3r/GUI/Plater.cpp:3013 src/slic3r/GUI/PrintHostDialogs.cpp:232
+#: src/slic3r/GUI/Plater.cpp:3155 src/slic3r/GUI/PrintHostDialogs.cpp:232
 msgid "Cancelling"
 msgstr "Cancelar"
 
-#: src/slic3r/GUI/Plater.cpp:3030
+#: src/slic3r/GUI/Plater.cpp:3172
 msgid "Another export job is currently running."
 msgstr "Outro trabalho de exportação está em execução no momento."
 
-#: src/slic3r/GUI/Plater.cpp:3084 src/slic3r/GUI/Plater.cpp:3549
-msgid "Reload from Disk"
-msgstr "Recarregar a partir do disco"
+#: src/slic3r/GUI/Plater.cpp:3288
+msgid "Please select the file to reload"
+msgstr "Selecione o arquivo STL para recarregar"
 
-#: src/slic3r/GUI/Plater.cpp:3120
+#: src/slic3r/GUI/Plater.cpp:3323
+msgid "It is not allowed to change the file to reload"
+msgstr "Não é permitido alterar o arquivo para recarregar"
+
+#: src/slic3r/GUI/Plater.cpp:3323
+msgid "Do you want to retry"
+msgstr "Você quer prosseguir"
+
+#: src/slic3r/GUI/Plater.cpp:3341
+msgid "Reload from:"
+msgstr "Recarregar a partir do disco:"
+
+#: src/slic3r/GUI/Plater.cpp:3430
+msgid "Unable to reload:"
+msgstr "Não é possível recarregar:"
+
+#: src/slic3r/GUI/Plater.cpp:3435
+msgid "Error during reload"
+msgstr "Erro durante a recarga"
+
+#: src/slic3r/GUI/Plater.cpp:3454
+msgid "Reload all from disk"
+msgstr "Recarregar tudo do disco"
+
+#: src/slic3r/GUI/Plater.cpp:3475
 msgid "Fix Throught NetFabb"
 msgstr "Arrumar através do  NetFabb"
 
-#: src/slic3r/GUI/Plater.cpp:3307
+#: src/slic3r/GUI/Plater.cpp:3666
 msgid "Export failed"
 msgstr "Falha na exportação"
 
-#: src/slic3r/GUI/Plater.cpp:3312 src/slic3r/GUI/PrintHostDialogs.cpp:233
+#: src/slic3r/GUI/Plater.cpp:3671 src/slic3r/GUI/PrintHostDialogs.cpp:233
 msgid "Cancelled"
 msgstr "Cancelado"
 
-#: src/slic3r/GUI/Plater.cpp:3520 src/slic3r/GUI/Plater.cpp:3539
+#: src/slic3r/GUI/Plater.cpp:3933 src/slic3r/GUI/Plater.cpp:3955
 msgid "Remove the selected object"
 msgstr "Remover o objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3526
+#: src/slic3r/GUI/Plater.cpp:3942
 msgid "Add one more instance of the selected object"
 msgstr "Adicionar mais uma instância do objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3528
+#: src/slic3r/GUI/Plater.cpp:3944
 msgid "Remove one instance of the selected object"
 msgstr "Remover uma instância do objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3530
+#: src/slic3r/GUI/Plater.cpp:3946
 msgid "Set number of instances"
 msgstr "Definir o número de instâncias"
 
-#: src/slic3r/GUI/Plater.cpp:3530
+#: src/slic3r/GUI/Plater.cpp:3946
 msgid "Change the number of instances of the selected object"
 msgstr "Alterar o número de instâncias do objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3549
-msgid "Reload the selected file from Disk"
-msgstr "Recarregar o arquivo selecionado a partir do disco"
+#: src/slic3r/GUI/Plater.cpp:3965
+msgid "Reload the selected object from disk"
+msgstr "Recarregue o objeto selecionado do disco"
 
-#: src/slic3r/GUI/Plater.cpp:3552
+#: src/slic3r/GUI/Plater.cpp:3968
 msgid "Export the selected object as STL file"
 msgstr "Exportar o objeto selecionado como arquivo STL"
 
-#: src/slic3r/GUI/Plater.cpp:3577
+#: src/slic3r/GUI/Plater.cpp:3997
 msgid "Along X axis"
 msgstr "Ao longo do eixo X"
 
-#: src/slic3r/GUI/Plater.cpp:3577
+#: src/slic3r/GUI/Plater.cpp:3997
 msgid "Mirror the selected object along the X axis"
 msgstr "Espelhar o objeto selecionado ao longo do eixo X"
 
-#: src/slic3r/GUI/Plater.cpp:3579
+#: src/slic3r/GUI/Plater.cpp:3999
 msgid "Along Y axis"
 msgstr "Ao longo do eixo Y"
 
-#: src/slic3r/GUI/Plater.cpp:3579
+#: src/slic3r/GUI/Plater.cpp:3999
 msgid "Mirror the selected object along the Y axis"
 msgstr "Espelhar o objeto selecionado ao longo do eixo Y"
 
-#: src/slic3r/GUI/Plater.cpp:3581
+#: src/slic3r/GUI/Plater.cpp:4001
 msgid "Along Z axis"
 msgstr "Ao longo do eixo Z"
 
-#: src/slic3r/GUI/Plater.cpp:3581
+#: src/slic3r/GUI/Plater.cpp:4001
 msgid "Mirror the selected object along the Z axis"
 msgstr "Espelhar o objeto selecionado ao longo do eixo Z"
 
-#: src/slic3r/GUI/Plater.cpp:3584
+#: src/slic3r/GUI/Plater.cpp:4004
 msgid "Mirror"
 msgstr "Espelhar"
 
-#: src/slic3r/GUI/Plater.cpp:3584
+#: src/slic3r/GUI/Plater.cpp:4004
 msgid "Mirror the selected object"
 msgstr "Espelhar o objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3596
+#: src/slic3r/GUI/Plater.cpp:4016
 msgid "To objects"
 msgstr "Para objetos"
 
-#: src/slic3r/GUI/Plater.cpp:3596 src/slic3r/GUI/Plater.cpp:3616
+#: src/slic3r/GUI/Plater.cpp:4016 src/slic3r/GUI/Plater.cpp:4036
 msgid "Split the selected object into individual objects"
 msgstr "Dividir o objeto selecionado em objetos individuais"
 
-#: src/slic3r/GUI/Plater.cpp:3598
+#: src/slic3r/GUI/Plater.cpp:4018
 msgid "To parts"
 msgstr "Para peças"
 
-#: src/slic3r/GUI/Plater.cpp:3598 src/slic3r/GUI/Plater.cpp:3630
+#: src/slic3r/GUI/Plater.cpp:4018 src/slic3r/GUI/Plater.cpp:4050
 msgid "Split the selected object into individual sub-parts"
 msgstr "Dividir o objeto selecionado em subpartes individuais"
 
-#: src/slic3r/GUI/Plater.cpp:3601 src/slic3r/GUI/Plater.cpp:3616
-#: src/slic3r/GUI/Plater.cpp:3630 src/libslic3r/PrintConfig.cpp:3281
+#: src/slic3r/GUI/Plater.cpp:4021 src/slic3r/GUI/Plater.cpp:4036
+#: src/slic3r/GUI/Plater.cpp:4050 src/libslic3r/PrintConfig.cpp:3481
 msgid "Split"
 msgstr "Dividir"
 
-#: src/slic3r/GUI/Plater.cpp:3601
+#: src/slic3r/GUI/Plater.cpp:4021
 msgid "Split the selected object"
 msgstr "Dividir o objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3622
+#: src/slic3r/GUI/Plater.cpp:4042
 msgid "Optimize orientation"
 msgstr "Otimize a orientação"
 
-#: src/slic3r/GUI/Plater.cpp:3622
+#: src/slic3r/GUI/Plater.cpp:4042
 msgid "Optimize the rotation of the object for better print results."
 msgstr ""
 "Otimize a rotação do objeto para obter melhores resultados de impressão."
 
-#: src/slic3r/GUI/Plater.cpp:3662
+#: src/slic3r/GUI/Plater.cpp:4099
 msgid "3D editor view"
 msgstr "vista do editor 3D"
 
-#: src/slic3r/GUI/Plater.cpp:3670 src/slic3r/GUI/Tab.cpp:2590
-msgid "Preview"
-msgstr "Visualização"
-
-#: src/slic3r/GUI/Plater.cpp:3907
+#: src/slic3r/GUI/Plater.cpp:4402
 msgid ""
 "%1% printer was active at the time the target Undo / Redo snapshot was "
 "taken. Switching to %1% printer requires reloading of %1% presets."
@@ -3625,98 +4677,111 @@ msgstr ""
 "refazer de destino foi tirado. Mudar para %1% impressora requer recarga de "
 "%1% predefinições."
 
-#: src/slic3r/GUI/Plater.cpp:4081
+#: src/slic3r/GUI/Plater.cpp:4577
 msgid "Load Project"
 msgstr "Carregar projeto"
 
-#: src/slic3r/GUI/Plater.cpp:4109
+#: src/slic3r/GUI/Plater.cpp:4605
 msgid "Import Object"
 msgstr "Importar objeto"
 
-#: src/slic3r/GUI/Plater.cpp:4113
+#: src/slic3r/GUI/Plater.cpp:4609
 msgid "Import Objects"
 msgstr "Importar objetos"
 
-#: src/slic3r/GUI/Plater.cpp:4172
-msgid "All objects will be removed, continue ?"
+#: src/slic3r/GUI/Plater.cpp:4671
+msgid "All objects will be removed, continue?"
 msgstr "Todos os objetos serão removidos, continuar?"
 
-#: src/slic3r/GUI/Plater.cpp:4180
+#: src/slic3r/GUI/Plater.cpp:4679
 msgid "Delete Selected Objects"
 msgstr "Excluir objetos selecionados"
 
-#: src/slic3r/GUI/Plater.cpp:4188
+#: src/slic3r/GUI/Plater.cpp:4687
 msgid "Increase Instances"
 msgstr "Aumentar instâncias"
 
-#: src/slic3r/GUI/Plater.cpp:4224
+#: src/slic3r/GUI/Plater.cpp:4722
 msgid "Decrease Instances"
 msgstr "Diminuir instâncias"
 
-#: src/slic3r/GUI/Plater.cpp:4260
+#: src/slic3r/GUI/Plater.cpp:4753
+msgid "Enter the number of copies:"
+msgstr "Definir números de cópias:"
+
+#: src/slic3r/GUI/Plater.cpp:4754
+msgid "Copies of the selected object"
+msgstr "Cópias do objeto selecionado"
+
+#: src/slic3r/GUI/Plater.cpp:4758
 #, c-format
 msgid "Set numbers of copies to %d"
 msgstr "Definir números de cópias para %d"
 
-#: src/slic3r/GUI/Plater.cpp:4290
+#: src/slic3r/GUI/Plater.cpp:4788
 msgid "Cut by Plane"
 msgstr "Cortado por plano"
 
-#: src/slic3r/GUI/Plater.cpp:4322
+#: src/slic3r/GUI/Plater.cpp:4841
 msgid "Save G-code file as:"
 msgstr "Salve o arquivo G-code como:"
 
-#: src/slic3r/GUI/Plater.cpp:4322
+#: src/slic3r/GUI/Plater.cpp:4841
 msgid "Save SL1 file as:"
 msgstr "Salvar SL1 arquivo como:"
 
-#: src/slic3r/GUI/Plater.cpp:4434
+#: src/slic3r/GUI/Plater.cpp:4987
 #, c-format
 msgid "STL file exported to %s"
 msgstr "Arquivo STL exportado para %s"
 
-#: src/slic3r/GUI/Plater.cpp:4450
+#: src/slic3r/GUI/Plater.cpp:5004
 #, c-format
 msgid "AMF file exported to %s"
 msgstr "Arquivo AMF exportado para %s"
 
-#: src/slic3r/GUI/Plater.cpp:4453
+#: src/slic3r/GUI/Plater.cpp:5007
 #, c-format
 msgid "Error exporting AMF file %s"
 msgstr "Erro ao exportar arquivo AMF %s"
 
-#: src/slic3r/GUI/Plater.cpp:4479
+#: src/slic3r/GUI/Plater.cpp:5040
 #, c-format
 msgid "3MF file exported to %s"
 msgstr "Arquivo 3MF exportado para %s"
 
-#: src/slic3r/GUI/Plater.cpp:4484
+#: src/slic3r/GUI/Plater.cpp:5045
 #, c-format
 msgid "Error exporting 3MF file %s"
 msgstr "Erro ao exportar arquivo 3MF %s"
 
-#: src/slic3r/GUI/Plater.cpp:4822
+#: src/slic3r/GUI/Plater.cpp:5205
+#, c-format
+msgid ""
+"Unmounting successful. The device %s(%s) can now be safely removed from the "
+"computer."
+msgstr ""
+"Não montando bem sucedido. O dispositivo %s(%s) agora pode ser removido com "
+"segurança do computador."
+
+#: src/slic3r/GUI/Plater.cpp:5522
 msgid "Export"
 msgstr "Exportar"
 
-#: src/slic3r/GUI/Plater.cpp:4823
-msgid "Send G-code"
-msgstr "Enviar G-code"
-
-#: src/slic3r/GUI/Plater.cpp:4907
+#: src/slic3r/GUI/Plater.cpp:5608
 msgid "Paste From Clipboard"
 msgstr "Colar da área de transferência"
 
-#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:2001
-#: src/slic3r/GUI/Tab.cpp:2242
+#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1798
+#: src/slic3r/GUI/Tab.cpp:2042
 msgid "General"
 msgstr "Geral"
 
-#: src/slic3r/GUI/Preferences.cpp:44
+#: src/slic3r/GUI/Preferences.cpp:39
 msgid "Remember output directory"
 msgstr "Lembrar diretório de saída"
 
-#: src/slic3r/GUI/Preferences.cpp:46
+#: src/slic3r/GUI/Preferences.cpp:41
 msgid ""
 "If this is enabled, Slic3r will prompt the last output directory instead of "
 "the one containing the input files."
@@ -3724,11 +4789,11 @@ msgstr ""
 "Se isso estiver habilitado, Slic3r solicitará o último diretório de saída em "
 "vez de um contendo os arquivos de entrada."
 
-#: src/slic3r/GUI/Preferences.cpp:52
+#: src/slic3r/GUI/Preferences.cpp:47
 msgid "Auto-center parts"
 msgstr "Centrar automaticamente as partes"
 
-#: src/slic3r/GUI/Preferences.cpp:54
+#: src/slic3r/GUI/Preferences.cpp:49
 msgid ""
 "If this is enabled, Slic3r will auto-center objects around the print bed "
 "center."
@@ -3736,11 +4801,11 @@ msgstr ""
 "Se isso estiver habilitado, o Slic3r irá centralizar objetos automaticamente "
 "ao redor do centro de mesa de impressão."
 
-#: src/slic3r/GUI/Preferences.cpp:60
+#: src/slic3r/GUI/Preferences.cpp:55
 msgid "Background processing"
 msgstr "Processamento em segundo plano"
 
-#: src/slic3r/GUI/Preferences.cpp:62
+#: src/slic3r/GUI/Preferences.cpp:57
 msgid ""
 "If this is enabled, Slic3r will pre-process objects as soon as they're "
 "loaded in order to save time when exporting G-code."
@@ -3748,7 +4813,7 @@ msgstr ""
 "Se isso estiver ativado, o Slic3r irá pré-processar objetos assim que eles "
 "forem carregados para economizar tempo ao exportar o G-code."
 
-#: src/slic3r/GUI/Preferences.cpp:71
+#: src/slic3r/GUI/Preferences.cpp:66
 msgid ""
 "If enabled, PrusaSlicer will check for the new versions of itself online. "
 "When a new version becomes available a notification is displayed at the next "
@@ -3761,7 +4826,19 @@ msgstr ""
 "Este é apenas um mecanismos de notificação, nenhuma instalação automática é "
 "feita."
 
-#: src/slic3r/GUI/Preferences.cpp:79
+#: src/slic3r/GUI/Preferences.cpp:72
+msgid "Export sources full pathnames to 3mf and amf"
+msgstr "Fontes de exportação completas para 3mf e amf"
+
+#: src/slic3r/GUI/Preferences.cpp:74
+msgid ""
+"If enabled, allows the Reload from disk command to automatically find and "
+"load the files when invoked."
+msgstr ""
+"Se ativado, permite que o comando Reload from disk encontre e carregue "
+"automaticamente os arquivos quando invocado."
+
+#: src/slic3r/GUI/Preferences.cpp:82
 msgid ""
 "If enabled, Slic3r downloads updates of built-in system presets in the "
 "background. These updates are downloaded into a separate temporary location. "
@@ -3773,11 +4850,11 @@ msgstr ""
 "temporário separado. Quando uma nova versão predefinida se torna disponível, "
 "ela é oferecida na inicialização do aplicativo."
 
-#: src/slic3r/GUI/Preferences.cpp:84
+#: src/slic3r/GUI/Preferences.cpp:87
 msgid "Suppress \" - default - \" presets"
 msgstr "Suprimir predefinições \"-padrão-\""
 
-#: src/slic3r/GUI/Preferences.cpp:86
+#: src/slic3r/GUI/Preferences.cpp:89
 msgid ""
 "Suppress \" - default - \" presets in the Print / Filament / Printer "
 "selections once there are any other valid presets available."
@@ -3785,11 +4862,11 @@ msgstr ""
 "Suprimir predefinições \"-padrão-\" em impressão/filamento/impressora, uma "
 "vez que existam outras predefinições válidas disponíveis."
 
-#: src/slic3r/GUI/Preferences.cpp:92
+#: src/slic3r/GUI/Preferences.cpp:95
 msgid "Show incompatible print and filament presets"
 msgstr "Mostrar predefinições de impressão e filamento incompatíveis"
 
-#: src/slic3r/GUI/Preferences.cpp:94
+#: src/slic3r/GUI/Preferences.cpp:97
 msgid ""
 "When checked, the print and filament presets are shown in the preset editor "
 "even if they are marked as incompatible with the active printer"
@@ -3798,11 +4875,11 @@ msgstr ""
 "editor de predefinições, mesmo que estejam marcadas como incompatíveis com a "
 "impressora ativa"
 
-#: src/slic3r/GUI/Preferences.cpp:101
+#: src/slic3r/GUI/Preferences.cpp:104
 msgid "Use Retina resolution for the 3D scene"
 msgstr "Usar a resolução retina para a cena 3D"
 
-#: src/slic3r/GUI/Preferences.cpp:103
+#: src/slic3r/GUI/Preferences.cpp:106
 msgid ""
 "If enabled, the 3D scene will be rendered in Retina resolution. If you are "
 "experiencing 3D performance problems, disabling this option may help."
@@ -3810,69 +4887,95 @@ msgstr ""
 "Se ativada, a cena 3D será renderizada na resolução retina. Se você estiver "
 "enfrentando problemas de desempenho 3D, desabilitar essa opção pode ajudar."
 
-#: src/slic3r/GUI/Preferences.cpp:110
+#: src/slic3r/GUI/Preferences.cpp:113
+msgid "Camera"
+msgstr "Câmera"
+
+#: src/slic3r/GUI/Preferences.cpp:119
 msgid "Use perspective camera"
 msgstr "Usar a câmera em perspectiva"
 
-#: src/slic3r/GUI/Preferences.cpp:112
+#: src/slic3r/GUI/Preferences.cpp:121
 msgid ""
 "If enabled, use perspective camera. If not enabled, use orthographic camera."
 msgstr ""
 "Se ativada, use a câmera em perspectiva. Se não estiver ativada, use a "
 "câmera ortográfica."
 
-#: src/slic3r/GUI/Preferences.cpp:117
+#: src/slic3r/GUI/Preferences.cpp:126
+msgid "Use free camera"
+msgstr "Use câmera livre"
+
+#: src/slic3r/GUI/Preferences.cpp:128
+msgid "If enabled, use free camera. If not enabled, use constrained camera."
+msgstr ""
+"Se ativado, use câmera livre. Se não estiver habilitado, use a câmera "
+"restrita."
+
+#: src/slic3r/GUI/Preferences.cpp:133
+msgid "GUI"
+msgstr "GUI"
+
+#: src/slic3r/GUI/Preferences.cpp:143
 msgid "Use custom size for toolbar icons"
 msgstr "Usar tamanho personalizado para ícones da barra de ferramentas"
 
-#: src/slic3r/GUI/Preferences.cpp:119
+#: src/slic3r/GUI/Preferences.cpp:145
 msgid "If enabled, you can change size of toolbar icons manually."
 msgstr ""
 "Se ativado, você pode alterar o tamanho dos ícones da barra de ferramentas "
 "manualmente."
 
-#: src/slic3r/GUI/Preferences.cpp:144
+#: src/slic3r/GUI/Preferences.cpp:172
 #, c-format
 msgid "You need to restart %s to make the changes effective."
 msgstr "Você precisa reiniciar %s para tornar as alterações efetivas."
 
-#: src/slic3r/GUI/Preferences.cpp:192
+#: src/slic3r/GUI/Preferences.cpp:222
 msgid "Icon size in a respect to the default size"
 msgstr "Tamanho do ícone em relação ao tamanho padrão"
 
-#: src/slic3r/GUI/Preferences.cpp:207
+#: src/slic3r/GUI/Preferences.cpp:237
 msgid "Select toolbar icon size in respect to the default one."
 msgstr ""
 "Selecione o tamanho do ícone da barra de ferramentas em relação ao padrão."
 
-#: src/slic3r/GUI/Preset.cpp:212
+#: src/slic3r/GUI/Preset.cpp:247
 msgid "modified"
 msgstr "modificado"
 
-#: src/slic3r/GUI/Preset.cpp:967 src/slic3r/GUI/Preset.cpp:1007
-#: src/slic3r/GUI/Preset.cpp:1072 src/slic3r/GUI/Preset.cpp:1104
-#: src/slic3r/GUI/PresetBundle.cpp:1484 src/slic3r/GUI/PresetBundle.cpp:1559
+#: src/slic3r/GUI/Preset.cpp:1121 src/slic3r/GUI/Preset.cpp:1176
+#: src/slic3r/GUI/Preset.cpp:1254 src/slic3r/GUI/Preset.cpp:1296
+#: src/slic3r/GUI/PresetBundle.cpp:1583 src/slic3r/GUI/PresetBundle.cpp:1679
 msgid "System presets"
 msgstr "Predefinições do sistema"
 
-#: src/slic3r/GUI/Preset.cpp:1011 src/slic3r/GUI/Preset.cpp:1108
-#: src/slic3r/GUI/PresetBundle.cpp:1564
+#: src/slic3r/GUI/Preset.cpp:1180 src/slic3r/GUI/Preset.cpp:1300
+#: src/slic3r/GUI/PresetBundle.cpp:1684
 msgid "User presets"
 msgstr "Predefinições do usuário"
 
-#: src/slic3r/GUI/Preset.cpp:1040 src/slic3r/GUI/Tab.cpp:243
-msgid "Add a new printer"
-msgstr "Adicionar uma nova impressora"
+#: src/slic3r/GUI/Preset.cpp:1213
+msgid "Add/Remove materials"
+msgstr "Adicionar/Remover materiais"
 
-#: src/slic3r/GUI/Preset.cpp:1312
+#: src/slic3r/GUI/Preset.cpp:1215
+msgid "Add/Remove printers"
+msgstr "Adicionar/Remover impressoras"
+
+#: src/slic3r/GUI/Preset.cpp:1534
 msgid "filament"
 msgstr "filamento"
 
-#: src/slic3r/GUI/Preset.cpp:1313
+#: src/slic3r/GUI/Preset.cpp:1535
 msgid "SLA print"
 msgstr "Impressão de SLA"
 
-#: src/slic3r/GUI/PresetHints.cpp:28
+#: src/slic3r/GUI/PresetBundle.cpp:1711
+msgid "Add/Remove filaments"
+msgstr "Adicionar/Remover filamentos"
+
+#: src/slic3r/GUI/PresetHints.cpp:29
 msgid ""
 "If estimated layer time is below ~%1%s, fan will run at %2%%% and print "
 "speed will be reduced so that no less than %3%s are spent on that layer "
@@ -3883,107 +4986,101 @@ msgstr ""
 "menos de %3%s sejam gastos nessa camada (no entanto, a velocidade nunca será "
 "reduzida abaixo de %4% mm/s)."
 
-#: src/slic3r/GUI/PresetHints.cpp:35
+#: src/slic3r/GUI/PresetHints.cpp:36
 msgid ""
-"\n"
 "If estimated layer time is greater, but still below ~%1%s, fan will run at a "
 "proportionally decreasing speed between %2%%% and %3%%%."
 msgstr ""
-"\n"
 "Se o tempo estimado da camada for maior, mas ainda abaixo de ~%1%s, o "
 "ventoinha será executado em uma velocidade proporcionalmente decrescente "
 "entre %2%%% e %3%%%."
 
-#: src/slic3r/GUI/PresetHints.cpp:39
-msgid ""
-"\n"
-"During the other layers, fan"
-msgstr ""
-"\n"
-"Durante as outras camadas, o ventoinha"
+#: src/slic3r/GUI/PresetHints.cpp:40
+msgid "During the other layers, fan"
+msgstr "Durante as outras camadas, a ventoinha"
 
-#: src/slic3r/GUI/PresetHints.cpp:41
+#: src/slic3r/GUI/PresetHints.cpp:42
 msgid "Fan"
 msgstr "Ventoinha"
 
-#: src/slic3r/GUI/PresetHints.cpp:47
+#: src/slic3r/GUI/PresetHints.cpp:48
 msgid "will always run at %1%%%"
 msgstr "será sempre executado em %1%%%"
 
-#: src/slic3r/GUI/PresetHints.cpp:50
+#: src/slic3r/GUI/PresetHints.cpp:51
 msgid "except for the first %1% layers."
 msgstr "exceto para as primeiras camadas %1%."
 
-#: src/slic3r/GUI/PresetHints.cpp:52
+#: src/slic3r/GUI/PresetHints.cpp:53
 msgid "except for the first layer."
 msgstr "exceto para a primeira camada."
 
-#: src/slic3r/GUI/PresetHints.cpp:54
+#: src/slic3r/GUI/PresetHints.cpp:55
 msgid "will be turned off."
 msgstr "será desligado."
 
-#: src/slic3r/GUI/PresetHints.cpp:155
+#: src/slic3r/GUI/PresetHints.cpp:156
 msgid "external perimeters"
 msgstr "perímetros externos"
 
-#: src/slic3r/GUI/PresetHints.cpp:164
+#: src/slic3r/GUI/PresetHints.cpp:165
 msgid "perimeters"
 msgstr "perímetros"
 
-#: src/slic3r/GUI/PresetHints.cpp:173
+#: src/slic3r/GUI/PresetHints.cpp:174
 msgid "infill"
 msgstr "preenchimento"
 
-#: src/slic3r/GUI/PresetHints.cpp:183
+#: src/slic3r/GUI/PresetHints.cpp:184
 msgid "solid infill"
 msgstr "preenchimento sólido"
 
-#: src/slic3r/GUI/PresetHints.cpp:191
+#: src/slic3r/GUI/PresetHints.cpp:192
 msgid "top solid infill"
 msgstr "preenchimento sólido do topo"
 
-#: src/slic3r/GUI/PresetHints.cpp:202
+#: src/slic3r/GUI/PresetHints.cpp:203
 msgid "support"
 msgstr "suporte"
 
-#: src/slic3r/GUI/PresetHints.cpp:212
+#: src/slic3r/GUI/PresetHints.cpp:213
 msgid "support interface"
 msgstr "interface de suporte"
 
-#: src/slic3r/GUI/PresetHints.cpp:218
+#: src/slic3r/GUI/PresetHints.cpp:219
 msgid "First layer volumetric"
 msgstr "Primeira camada volumétrica"
 
-#: src/slic3r/GUI/PresetHints.cpp:218
+#: src/slic3r/GUI/PresetHints.cpp:219
 msgid "Bridging volumetric"
 msgstr "Ponteamento volumétrico"
 
-#: src/slic3r/GUI/PresetHints.cpp:218
+#: src/slic3r/GUI/PresetHints.cpp:219
 msgid "Volumetric"
 msgstr "Volumétrica"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:220
 msgid "flow rate is maximized"
 msgstr "a taxa de fluxo é maximizada"
 
-#: src/slic3r/GUI/PresetHints.cpp:222
+#: src/slic3r/GUI/PresetHints.cpp:223
 msgid "by the print profile maximum"
 msgstr "pelo perfil de impressão máximo"
 
-#: src/slic3r/GUI/PresetHints.cpp:223
+#: src/slic3r/GUI/PresetHints.cpp:224
 msgid "when printing"
 msgstr "ao imprimir"
 
-#: src/slic3r/GUI/PresetHints.cpp:224
+#: src/slic3r/GUI/PresetHints.cpp:225
 msgid "with a volumetric rate"
 msgstr "com uma taxa volumétrica"
 
-#: src/slic3r/GUI/PresetHints.cpp:228
+#: src/slic3r/GUI/PresetHints.cpp:229
 #, c-format
 msgid "%3.2f mm³/s at filament speed %3.2f mm/s."
 msgstr "%3.2f mm ³/s na velocidade do filamento %3.2f mm/s."
 
-#: src/slic3r/GUI/PresetHints.cpp:246
+#: src/slic3r/GUI/PresetHints.cpp:247
 msgid ""
 "Recommended object thin wall thickness: Not available due to invalid layer "
 "height."
@@ -3991,17 +5088,56 @@ msgstr ""
 "Espessura de parede fina do objeto recomendado: não disponível devido à "
 "altura da camada inválida."
 
-#: src/slic3r/GUI/PresetHints.cpp:262
+#: src/slic3r/GUI/PresetHints.cpp:263
 #, c-format
 msgid "Recommended object thin wall thickness for layer height %.2f and"
 msgstr ""
 "Espessura de parede fina do objeto recomendado para a altura da camada %.2f e"
 
-#: src/slic3r/GUI/PresetHints.cpp:268
+#: src/slic3r/GUI/PresetHints.cpp:270
 #, c-format
 msgid "%d lines: %.2f mm"
 msgstr "%d linhas: %.2f mm"
 
+#: src/slic3r/GUI/PresetHints.cpp:274
+msgid ""
+"Recommended object thin wall thickness: Not available due to excessively "
+"small extrusion width."
+msgstr ""
+"Espessura fina da parede do objeto recomendada: Não disponível devido à "
+"largura de extrusão excessivamente pequena."
+
+#: src/slic3r/GUI/PresetHints.cpp:304
+msgid ""
+"Top / bottom shell thickness hint: Not available due to invalid layer height."
+msgstr ""
+"Espessura superior/inferior da concha. Dica: Não disponível devido à altura "
+"da camada inválida."
+
+#: src/slic3r/GUI/PresetHints.cpp:317
+msgid "Top shell is %1% mm thick for layer height %2% mm."
+msgstr "A camada superior tem %1% de espessura para altura da camada %2% mm."
+
+#: src/slic3r/GUI/PresetHints.cpp:320
+msgid "Minimum top shell thickness is %1% mm."
+msgstr "A espessura mínima da camada superior é de %1% mm."
+
+#: src/slic3r/GUI/PresetHints.cpp:323
+msgid "Top is open."
+msgstr "Topo está aberto"
+
+#: src/slic3r/GUI/PresetHints.cpp:336
+msgid "Bottom shell is %1% mm thick for layer height %2% mm."
+msgstr "A camada inferior tem %1% de espessura para a altura da camada %2% mm."
+
+#: src/slic3r/GUI/PresetHints.cpp:339
+msgid "Minimum bottom shell thickness is %1% mm."
+msgstr "A espessura mínima da camada inferior é de %1% mm."
+
+#: src/slic3r/GUI/PresetHints.cpp:342
+msgid "Bottom is open."
+msgstr "Base está aberta"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:33
 msgid "Send G-Code to printer host"
 msgstr "Enviar G-code para o host da impressora"
@@ -4075,13 +5211,13 @@ msgstr "Não usar Ramming"
 msgid "Time"
 msgstr "Tempo"
 
-#: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:82
-#: src/libslic3r/PrintConfig.cpp:627 src/libslic3r/PrintConfig.cpp:671
-#: src/libslic3r/PrintConfig.cpp:686 src/libslic3r/PrintConfig.cpp:2349
-#: src/libslic3r/PrintConfig.cpp:2358 src/libslic3r/PrintConfig.cpp:2418
-#: src/libslic3r/PrintConfig.cpp:2426 src/libslic3r/PrintConfig.cpp:2434
-#: src/libslic3r/PrintConfig.cpp:2441 src/libslic3r/PrintConfig.cpp:2449
-#: src/libslic3r/PrintConfig.cpp:2457
+#: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:83
+#: src/libslic3r/PrintConfig.cpp:644 src/libslic3r/PrintConfig.cpp:688
+#: src/libslic3r/PrintConfig.cpp:703 src/libslic3r/PrintConfig.cpp:2408
+#: src/libslic3r/PrintConfig.cpp:2417 src/libslic3r/PrintConfig.cpp:2527
+#: src/libslic3r/PrintConfig.cpp:2535 src/libslic3r/PrintConfig.cpp:2543
+#: src/libslic3r/PrintConfig.cpp:2550 src/libslic3r/PrintConfig.cpp:2558
+#: src/libslic3r/PrintConfig.cpp:2566
 msgid "s"
 msgstr "s"
 
@@ -4089,52 +5225,52 @@ msgstr "s"
 msgid "Volumetric speed"
 msgstr "Velocidade volumétrica"
 
-#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:584
-#: src/libslic3r/PrintConfig.cpp:1234
+#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:601
+#: src/libslic3r/PrintConfig.cpp:1250
 msgid "mm³/s"
 msgstr "mm ³/s"
 
-#: src/slic3r/GUI/Selection.cpp:146
+#: src/slic3r/GUI/Selection.cpp:147
 msgid "Selection-Add"
 msgstr "Seleção-Adicionar"
 
-#: src/slic3r/GUI/Selection.cpp:187
+#: src/slic3r/GUI/Selection.cpp:188
 msgid "Selection-Remove"
 msgstr "Seleção-remover"
 
-#: src/slic3r/GUI/Selection.cpp:219
+#: src/slic3r/GUI/Selection.cpp:220
 msgid "Selection-Add Object"
 msgstr "Seleção-Adicionar objeto"
 
-#: src/slic3r/GUI/Selection.cpp:238
+#: src/slic3r/GUI/Selection.cpp:239
 msgid "Selection-Remove Object"
 msgstr "Seleção-remover objeto"
 
-#: src/slic3r/GUI/Selection.cpp:256
+#: src/slic3r/GUI/Selection.cpp:257
 msgid "Selection-Add Instance"
 msgstr "Instância de seleção-Adicionar"
 
-#: src/slic3r/GUI/Selection.cpp:275
+#: src/slic3r/GUI/Selection.cpp:276
 msgid "Selection-Remove Instance"
 msgstr "Seleção-remover instância"
 
-#: src/slic3r/GUI/Selection.cpp:376
+#: src/slic3r/GUI/Selection.cpp:377
 msgid "Selection-Add All"
 msgstr "Seleção-adicionar todos"
 
-#: src/slic3r/GUI/Selection.cpp:402
+#: src/slic3r/GUI/Selection.cpp:403
 msgid "Selection-Remove All"
 msgstr "Seleção-remover todos"
 
-#: src/slic3r/GUI/Selection.cpp:939
+#: src/slic3r/GUI/Selection.cpp:940
 msgid "Scale To Fit"
 msgstr "Dimensionar para caber"
 
-#: src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/Selection.cpp:1477
 msgid "Set Printable Instance"
 msgstr "Definir instância imprimível"
 
-#: src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/Selection.cpp:1477
 msgid "Set Unprintable Instance"
 msgstr "Definir instância não imprimível"
 
@@ -4146,34 +5282,34 @@ msgstr "Informações do sistema"
 msgid "Copy to Clipboard"
 msgstr "Copiar para a Área de Transferência"
 
-#: src/slic3r/GUI/Tab.cpp:52 src/libslic3r/PrintConfig.cpp:239
+#: src/slic3r/GUI/Tab.cpp:50 src/libslic3r/PrintConfig.cpp:265
 msgid "Compatible printers"
 msgstr "Impressoras compatíveis"
 
-#: src/slic3r/GUI/Tab.cpp:53
+#: src/slic3r/GUI/Tab.cpp:51
 msgid "Select the printers this profile is compatible with."
 msgstr "Selecione as impressoras com as quais este perfil é compatível."
 
-#: src/slic3r/GUI/Tab.cpp:58 src/libslic3r/PrintConfig.cpp:254
+#: src/slic3r/GUI/Tab.cpp:56 src/libslic3r/PrintConfig.cpp:280
 msgid "Compatible print profiles"
 msgstr "Perfis de impressão compatíveis"
 
-#: src/slic3r/GUI/Tab.cpp:59
+#: src/slic3r/GUI/Tab.cpp:57
 msgid "Select the print profiles this profile is compatible with."
 msgstr ""
 "Selecione os perfis de impressão com os quais este perfil é compatível."
 
 #. TRN "Save current Settings"
-#: src/slic3r/GUI/Tab.cpp:135
+#: src/slic3r/GUI/Tab.cpp:133
 #, c-format
 msgid "Save current %s"
 msgstr "Salvar %s atual"
 
-#: src/slic3r/GUI/Tab.cpp:136
+#: src/slic3r/GUI/Tab.cpp:134
 msgid "Delete this preset"
 msgstr "Exclua esta predefinição"
 
-#: src/slic3r/GUI/Tab.cpp:141
+#: src/slic3r/GUI/Tab.cpp:139
 msgid ""
 "Hover the cursor over buttons to find more information \n"
 "or click this button."
@@ -4181,277 +5317,284 @@ msgstr ""
 "Passe o cursor sobre os botões para encontrar mais informações \n"
 "ou clique neste botão."
 
-#: src/slic3r/GUI/Tab.cpp:943
+#: src/slic3r/GUI/Tab.cpp:241
+msgid "Add a new printer"
+msgstr "Adicionar uma nova impressora"
+
+#: src/slic3r/GUI/Tab.cpp:953
 msgid "This is a default preset."
 msgstr "Esta é uma predefinição padrão."
 
-#: src/slic3r/GUI/Tab.cpp:945
+#: src/slic3r/GUI/Tab.cpp:955
 msgid "This is a system preset."
 msgstr "Esta é uma predefinição do sistema."
 
-#: src/slic3r/GUI/Tab.cpp:947
+#: src/slic3r/GUI/Tab.cpp:957
 msgid "Current preset is inherited from the default preset."
 msgstr "Predefinição atual é herdada da predefinição padrão."
 
-#: src/slic3r/GUI/Tab.cpp:950
-#, c-format
-msgid ""
-"Current preset is inherited from:\n"
-"\t%s"
-msgstr ""
-"Predefinição atual é herdada de:\n"
-"\t%s"
+#: src/slic3r/GUI/Tab.cpp:959
+msgid "Current preset is inherited from"
+msgstr "Predefinição atual é herdada de"
 
-#: src/slic3r/GUI/Tab.cpp:954
+#: src/slic3r/GUI/Tab.cpp:963
 msgid "It can't be deleted or modified."
 msgstr "Ele não pode ser excluído ou modificado."
 
-#: src/slic3r/GUI/Tab.cpp:955
+#: src/slic3r/GUI/Tab.cpp:964
 msgid ""
 "Any modifications should be saved as a new preset inherited from this one."
 msgstr ""
 "Todas as modificações devem ser salvas como uma nova predefinição herdada de "
 "uma presente."
 
-#: src/slic3r/GUI/Tab.cpp:956
+#: src/slic3r/GUI/Tab.cpp:965
 msgid "To do that please specify a new name for the preset."
 msgstr "Para fazer isso, especifique um novo nome para a predefinição."
 
-#: src/slic3r/GUI/Tab.cpp:960
+#: src/slic3r/GUI/Tab.cpp:969
 msgid "Additional information:"
 msgstr "Informações adicionais:"
 
-#: src/slic3r/GUI/Tab.cpp:966
+#: src/slic3r/GUI/Tab.cpp:975
 msgid "printer model"
 msgstr "modelo de impressora"
 
-#: src/slic3r/GUI/Tab.cpp:974
+#: src/slic3r/GUI/Tab.cpp:983
 msgid "default print profile"
 msgstr "perfil de impressão padrão"
 
-#: src/slic3r/GUI/Tab.cpp:977
+#: src/slic3r/GUI/Tab.cpp:986
 msgid "default filament profile"
 msgstr "perfil de filamento padrão"
 
-#: src/slic3r/GUI/Tab.cpp:991
+#: src/slic3r/GUI/Tab.cpp:1000
 msgid "default SLA material profile"
 msgstr "perfil de material SLA padrão"
 
-#: src/slic3r/GUI/Tab.cpp:995
+#: src/slic3r/GUI/Tab.cpp:1004
 msgid "default SLA print profile"
 msgstr "perfil de impressão padrão do SLA"
 
-#: src/slic3r/GUI/Tab.cpp:1032 src/slic3r/GUI/Tab.cpp:3731
+#: src/slic3r/GUI/Tab.cpp:1012
+msgid "full profile name"
+msgstr "Nome customizado da config."
+
+#: src/slic3r/GUI/Tab.cpp:1013
+msgid "symbolic profile name"
+msgstr "nome customizado da config.:"
+
+#: src/slic3r/GUI/Tab.cpp:1047 src/slic3r/GUI/Tab.cpp:3600
 msgid "Layers and perimeters"
 msgstr "Camadas e perímetros"
 
-#: src/slic3r/GUI/Tab.cpp:1037
+#: src/slic3r/GUI/Tab.cpp:1052
 msgid "Vertical shells"
 msgstr "Paredes verticais"
 
-#: src/slic3r/GUI/Tab.cpp:1048
+#: src/slic3r/GUI/Tab.cpp:1063
 msgid "Horizontal shells"
 msgstr "Paredes horizontais"
 
-#: src/slic3r/GUI/Tab.cpp:1049 src/libslic3r/PrintConfig.cpp:1759
+#: src/slic3r/GUI/Tab.cpp:1064 src/libslic3r/PrintConfig.cpp:1780
 msgid "Solid layers"
 msgstr "Camadas sólidas"
 
-#: src/slic3r/GUI/Tab.cpp:1054
+#: src/slic3r/GUI/Tab.cpp:1068
+msgid "Minimum shell thickness"
+msgstr "Espessura mínima da concha"
+
+#: src/slic3r/GUI/Tab.cpp:1079
 msgid "Quality (slower slicing)"
 msgstr "Qualidade (fatiamento mais lento)"
 
-#: src/slic3r/GUI/Tab.cpp:1072
+#: src/slic3r/GUI/Tab.cpp:1097
 msgid "Reducing printing time"
 msgstr "Reduzindo o tempo de impressão"
 
-#: src/slic3r/GUI/Tab.cpp:1084
+#: src/slic3r/GUI/Tab.cpp:1109
 msgid "Skirt and brim"
 msgstr "Saia e aba"
 
-#: src/slic3r/GUI/Tab.cpp:1101
+#: src/slic3r/GUI/Tab.cpp:1126
 msgid "Raft"
 msgstr "Estrado"
 
-#: src/slic3r/GUI/Tab.cpp:1105
+#: src/slic3r/GUI/Tab.cpp:1130
 msgid "Options for support material and raft"
 msgstr "Opções para material de suporte e estrado"
 
-#: src/slic3r/GUI/Tab.cpp:1120
+#: src/slic3r/GUI/Tab.cpp:1145
 msgid "Speed for print moves"
 msgstr "Velocidade para movimentos de impressão"
 
-#: src/slic3r/GUI/Tab.cpp:1132
+#: src/slic3r/GUI/Tab.cpp:1157
 msgid "Speed for non-print moves"
 msgstr "Velocidade para movimentos não impressos"
 
-#: src/slic3r/GUI/Tab.cpp:1135
+#: src/slic3r/GUI/Tab.cpp:1160
 msgid "Modifiers"
 msgstr "Modificadores"
 
-#: src/slic3r/GUI/Tab.cpp:1138
+#: src/slic3r/GUI/Tab.cpp:1163
 msgid "Acceleration control (advanced)"
 msgstr "Controle de aceleração (avançado)"
 
-#: src/slic3r/GUI/Tab.cpp:1145
+#: src/slic3r/GUI/Tab.cpp:1170
 msgid "Autospeed (advanced)"
 msgstr "Velocidade automática (avançado)"
 
-#: src/slic3r/GUI/Tab.cpp:1153
+#: src/slic3r/GUI/Tab.cpp:1178
 msgid "Multiple Extruders"
 msgstr "Extrusoras múltiplas"
 
-#: src/slic3r/GUI/Tab.cpp:1161
+#: src/slic3r/GUI/Tab.cpp:1186
 msgid "Ooze prevention"
 msgstr "Prevenção de vazão"
 
-#: src/slic3r/GUI/Tab.cpp:1178
+#: src/slic3r/GUI/Tab.cpp:1204
 msgid "Extrusion width"
 msgstr "Espessura da extrusão"
 
-#: src/slic3r/GUI/Tab.cpp:1188
+#: src/slic3r/GUI/Tab.cpp:1214
 msgid "Overlap"
 msgstr "Cobrir"
 
-#: src/slic3r/GUI/Tab.cpp:1191
+#: src/slic3r/GUI/Tab.cpp:1217
 msgid "Flow"
 msgstr "Fluxo"
 
-#: src/slic3r/GUI/Tab.cpp:1200
+#: src/slic3r/GUI/Tab.cpp:1226
 msgid "Other"
 msgstr "Outro"
 
-#: src/slic3r/GUI/Tab.cpp:1203 src/slic3r/GUI/Tab.cpp:3789
+#: src/slic3r/GUI/Tab.cpp:1229 src/slic3r/GUI/Tab.cpp:3669
 msgid "Output options"
 msgstr "Opções de saída"
 
-#: src/slic3r/GUI/Tab.cpp:1204
+#: src/slic3r/GUI/Tab.cpp:1230
 msgid "Sequential printing"
 msgstr "Impressão sequencial"
 
-#: src/slic3r/GUI/Tab.cpp:1206
+#: src/slic3r/GUI/Tab.cpp:1232
 msgid "Extruder clearance (mm)"
 msgstr "Folga da extrusora (milímetro)"
 
-#: src/slic3r/GUI/Tab.cpp:1215 src/slic3r/GUI/Tab.cpp:3790
+#: src/slic3r/GUI/Tab.cpp:1237 src/slic3r/GUI/Tab.cpp:3670
 msgid "Output file"
 msgstr "Arquivo de saída"
 
-#: src/slic3r/GUI/Tab.cpp:1222 src/libslic3r/PrintConfig.cpp:1432
+#: src/slic3r/GUI/Tab.cpp:1244 src/libslic3r/PrintConfig.cpp:1453
 msgid "Post-processing scripts"
 msgstr "Scripts de pós-processamento"
 
-#: src/slic3r/GUI/Tab.cpp:1228 src/slic3r/GUI/Tab.cpp:1229
-#: src/slic3r/GUI/Tab.cpp:1752 src/slic3r/GUI/Tab.cpp:1753
-#: src/slic3r/GUI/Tab.cpp:2214 src/slic3r/GUI/Tab.cpp:2215
-#: src/slic3r/GUI/Tab.cpp:2328 src/slic3r/GUI/Tab.cpp:2329
-#: src/slic3r/GUI/Tab.cpp:3668 src/slic3r/GUI/Tab.cpp:3669
+#: src/slic3r/GUI/Tab.cpp:1250 src/slic3r/GUI/Tab.cpp:1251
+#: src/slic3r/GUI/Tab.cpp:1539 src/slic3r/GUI/Tab.cpp:1540
+#: src/slic3r/GUI/Tab.cpp:2014 src/slic3r/GUI/Tab.cpp:2015
+#: src/slic3r/GUI/Tab.cpp:2130 src/slic3r/GUI/Tab.cpp:2131
+#: src/slic3r/GUI/Tab.cpp:3537 src/slic3r/GUI/Tab.cpp:3538
 msgid "Notes"
 msgstr "Notas"
 
-#: src/slic3r/GUI/Tab.cpp:1235 src/slic3r/GUI/Tab.cpp:1760
-#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2335
-#: src/slic3r/GUI/Tab.cpp:3676 src/slic3r/GUI/Tab.cpp:3795
+#: src/slic3r/GUI/Tab.cpp:1257 src/slic3r/GUI/Tab.cpp:1547
+#: src/slic3r/GUI/Tab.cpp:2021 src/slic3r/GUI/Tab.cpp:2137
+#: src/slic3r/GUI/Tab.cpp:3545 src/slic3r/GUI/Tab.cpp:3675
 msgid "Dependencies"
 msgstr "Dependências"
 
-#: src/slic3r/GUI/Tab.cpp:1236 src/slic3r/GUI/Tab.cpp:1761
-#: src/slic3r/GUI/Tab.cpp:2222 src/slic3r/GUI/Tab.cpp:2336
-#: src/slic3r/GUI/Tab.cpp:3677 src/slic3r/GUI/Tab.cpp:3796
+#: src/slic3r/GUI/Tab.cpp:1258 src/slic3r/GUI/Tab.cpp:1548
+#: src/slic3r/GUI/Tab.cpp:2022 src/slic3r/GUI/Tab.cpp:2138
+#: src/slic3r/GUI/Tab.cpp:3546 src/slic3r/GUI/Tab.cpp:3676
 msgid "Profile dependencies"
 msgstr "Dependências de perfil"
 
-#: src/slic3r/GUI/Tab.cpp:1538 src/slic3r/GUI/Tab.cpp:1593
+#: src/slic3r/GUI/Tab.cpp:1322 src/slic3r/GUI/Tab.cpp:1377
 msgid "Filament Overrides"
-msgstr "Sobrescrever config."
+msgstr "Sobrescrever config. de filamento"
 
-#: src/slic3r/GUI/Tab.cpp:1539 src/slic3r/GUI/Tab.cpp:1598
-#: src/slic3r/GUI/Tab.cpp:2570
+#: src/slic3r/GUI/Tab.cpp:1323 src/slic3r/GUI/Tab.cpp:1382
+#: src/slic3r/GUI/Tab.cpp:2372
 msgid "Retraction"
 msgstr "Retração"
 
-#: src/slic3r/GUI/Tab.cpp:1648 src/libslic3r/PrintConfig.cpp:2030
+#: src/slic3r/GUI/Tab.cpp:1432 src/libslic3r/PrintConfig.cpp:2067
 msgid "Temperature"
 msgstr "Temperatura"
 
-#: src/slic3r/GUI/Tab.cpp:1654
+#: src/slic3r/GUI/Tab.cpp:1438
 msgid "Bed"
 msgstr "Mesa"
 
-#: src/slic3r/GUI/Tab.cpp:1659
+#: src/slic3r/GUI/Tab.cpp:1443
 msgid "Cooling"
 msgstr "Resfriamento"
 
-#: src/slic3r/GUI/Tab.cpp:1660 src/libslic3r/PrintConfig.cpp:1335
-#: src/libslic3r/PrintConfig.cpp:2150
+#: src/slic3r/GUI/Tab.cpp:1444 src/libslic3r/PrintConfig.cpp:1355
+#: src/libslic3r/PrintConfig.cpp:2200
 msgid "Enable"
 msgstr "Habilitar"
 
-#: src/slic3r/GUI/Tab.cpp:1671
+#: src/slic3r/GUI/Tab.cpp:1455
 msgid "Fan settings"
 msgstr "Config. da ventoinha"
 
-#: src/slic3r/GUI/Tab.cpp:1672
-msgid "Fan speed"
-msgstr "Velocidade do ventoinha"
-
-#: src/slic3r/GUI/Tab.cpp:1680
+#: src/slic3r/GUI/Tab.cpp:1464
 msgid "Cooling thresholds"
 msgstr "Limiares de resfriamento"
 
-#: src/slic3r/GUI/Tab.cpp:1686
+#: src/slic3r/GUI/Tab.cpp:1470
 msgid "Filament properties"
 msgstr "Propriedades de filamento"
 
-#: src/slic3r/GUI/Tab.cpp:1690
+#: src/slic3r/GUI/Tab.cpp:1477
 msgid "Print speed override"
 msgstr "Substituição da velocidade de impressão"
 
-#: src/slic3r/GUI/Tab.cpp:1700
+#: src/slic3r/GUI/Tab.cpp:1487
 msgid "Wipe tower parameters"
 msgstr "Parâmetros da torre de limpeza"
 
-#: src/slic3r/GUI/Tab.cpp:1703
+#: src/slic3r/GUI/Tab.cpp:1490
 msgid "Toolchange parameters with single extruder MM printers"
 msgstr ""
 "Parâmetros de mudança de ferramenta com impressoras de multi material com "
 "apenas uma extrusora"
 
-#: src/slic3r/GUI/Tab.cpp:1717
+#: src/slic3r/GUI/Tab.cpp:1504
 msgid "Ramming settings"
-msgstr "config. de Ramming"
+msgstr "Config. de Ramming"
 
-#: src/slic3r/GUI/Tab.cpp:1739 src/slic3r/GUI/Tab.cpp:2177
+#: src/slic3r/GUI/Tab.cpp:1526 src/slic3r/GUI/Tab.cpp:1977
 msgid "Custom G-code"
 msgstr "G-code customizado"
 
-#: src/slic3r/GUI/Tab.cpp:1740 src/slic3r/GUI/Tab.cpp:2178
-#: src/libslic3r/PrintConfig.cpp:1785 src/libslic3r/PrintConfig.cpp:1800
+#: src/slic3r/GUI/Tab.cpp:1527 src/slic3r/GUI/Tab.cpp:1978
+#: src/libslic3r/PrintConfig.cpp:1813 src/libslic3r/PrintConfig.cpp:1828
 msgid "Start G-code"
 msgstr "G-code de início"
 
-#: src/slic3r/GUI/Tab.cpp:1746 src/slic3r/GUI/Tab.cpp:2184
-#: src/libslic3r/PrintConfig.cpp:369 src/libslic3r/PrintConfig.cpp:379
+#: src/slic3r/GUI/Tab.cpp:1533 src/slic3r/GUI/Tab.cpp:1984
+#: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395
 msgid "End G-code"
 msgstr "G-code de finalização"
 
-#: src/slic3r/GUI/Tab.cpp:1803
+#: src/slic3r/GUI/Tab.cpp:1590
 msgid "Volumetric flow hints not available"
 msgstr "Dicas de fluxo volumétrico não disponíveis"
 
-#: src/slic3r/GUI/Tab.cpp:1889 src/slic3r/GUI/Tab.cpp:2117
+#: src/slic3r/GUI/Tab.cpp:1676 src/slic3r/GUI/Tab.cpp:1917
 msgid "Test"
 msgstr "Teste"
 
-#: src/slic3r/GUI/Tab.cpp:1899
+#: src/slic3r/GUI/Tab.cpp:1685
 msgid "Could not get a valid Printer Host reference"
 msgstr "Não foi possível obter uma referência de host de impressora válida"
 
-#: src/slic3r/GUI/Tab.cpp:1905 src/slic3r/GUI/Tab.cpp:2130
+#: src/slic3r/GUI/Tab.cpp:1691 src/slic3r/GUI/Tab.cpp:1930
 msgid "Success!"
 msgstr "Sucesso!"
 
-#: src/slic3r/GUI/Tab.cpp:1920
+#: src/slic3r/GUI/Tab.cpp:1711
 msgid ""
 "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-"
 "signed certificate."
@@ -4459,49 +5602,55 @@ msgstr ""
 "O arquivo HTTPS CA é opcional. Só é necessário se você usar HTTPS com um "
 "certificado auto-assinado."
 
-#: src/slic3r/GUI/Tab.cpp:1933
+#: src/slic3r/GUI/Tab.cpp:1726
 msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
 msgstr ""
 "Arquivos de certificado (*. CRT, *. pem) | *. CRT; *. pem | Todos os "
 "arquivos | *. *"
 
-#: src/slic3r/GUI/Tab.cpp:1934
+#: src/slic3r/GUI/Tab.cpp:1727
 msgid "Open CA certificate file"
 msgstr "Abra o arquivo de certificado da CA"
 
-#: src/slic3r/GUI/Tab.cpp:1962
+#: src/slic3r/GUI/Tab.cpp:1754 src/libslic3r/PrintConfig.cpp:111
+msgid "HTTPS CA File"
+msgstr "Arquivo de CA HTTPS"
+
+#: src/slic3r/GUI/Tab.cpp:1755
 #, c-format
 msgid ""
-"HTTPS CA File:\n"
-"    \tOn this system, %s uses HTTPS certificates from the system Certificate "
-"Store or Keychain.\n"
-"    \tTo use a custom CA file, please import your CA file into Certificate "
-"Store / Keychain."
+"On this system, %s uses HTTPS certificates from the system Certificate Store "
+"or Keychain."
 msgstr ""
-"Arquivo HTTPS CA:\n"
-"    \tNeste sistema, %s usa certificados HTTPS do sistema Certificate Store "
-"ou keychain.\n"
-"    \tPara usar um arquivo de CA personalizado, importe seu arquivo de CA "
-"para o repositório de certificados/chaveiro."
+"Neste sistema, %s usa certificados HTTPS do sistema Certificate Store ou "
+"keychain."
 
-#: src/slic3r/GUI/Tab.cpp:2002 src/slic3r/GUI/Tab.cpp:2243
+#: src/slic3r/GUI/Tab.cpp:1756
+msgid ""
+"To use a custom CA file, please import your CA file into Certificate Store / "
+"Keychain."
+msgstr ""
+"Para usar um arquivo de CA personalizado, importe seu arquivo de CA para o "
+"repositório de certificados/chaveiro."
+
+#: src/slic3r/GUI/Tab.cpp:1799 src/slic3r/GUI/Tab.cpp:2043
 msgid "Size and coordinates"
 msgstr "Tamanho e coordenadas"
 
-#: src/slic3r/GUI/Tab.cpp:2007 src/slic3r/GUI/Tab.cpp:2248
-#: src/slic3r/GUI/Tab.cpp:3338
+#: src/slic3r/GUI/Tab.cpp:1804 src/slic3r/GUI/Tab.cpp:2048
+#: src/slic3r/GUI/Tab.cpp:3178
 msgid "Set"
 msgstr "Definir"
 
-#: src/slic3r/GUI/Tab.cpp:2039
+#: src/slic3r/GUI/Tab.cpp:1836
 msgid "Capabilities"
 msgstr "Capacidades"
 
-#: src/slic3r/GUI/Tab.cpp:2044
+#: src/slic3r/GUI/Tab.cpp:1841
 msgid "Number of extruders of the printer."
 msgstr "Número de extrusoras da impressora."
 
-#: src/slic3r/GUI/Tab.cpp:2069
+#: src/slic3r/GUI/Tab.cpp:1869
 msgid ""
 "Single Extruder Multi Material is selected, \n"
 "and all extruders must have the same diameter.\n"
@@ -4513,125 +5662,120 @@ msgstr ""
 "Você quer mudar o diâmetro para todas as extrusoras ao primeiro valor do "
 "diâmetro da ponteira da extrusora?"
 
-#: src/slic3r/GUI/Tab.cpp:2072 src/slic3r/GUI/Tab.cpp:2540
-#: src/libslic3r/PrintConfig.cpp:1310
+#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2342
+#: src/libslic3r/PrintConfig.cpp:1326
 msgid "Nozzle diameter"
 msgstr "Diâmetro do bico"
 
-#: src/slic3r/GUI/Tab.cpp:2102
+#: src/slic3r/GUI/Tab.cpp:1902
 msgid "USB/Serial connection"
 msgstr "Conexão USB/serial"
 
-#: src/slic3r/GUI/Tab.cpp:2103 src/libslic3r/PrintConfig.cpp:1640
+#: src/slic3r/GUI/Tab.cpp:1903 src/libslic3r/PrintConfig.cpp:1661
 msgid "Serial port"
 msgstr "Porte Serial"
 
-#: src/slic3r/GUI/Tab.cpp:2108
+#: src/slic3r/GUI/Tab.cpp:1908
 msgid "Rescan serial ports"
 msgstr "Portas seriais de Rescan"
 
-#: src/slic3r/GUI/Tab.cpp:2130
+#: src/slic3r/GUI/Tab.cpp:1930
 msgid "Connection to printer works correctly."
 msgstr "A ligação à impressora funciona corretamente."
 
-#: src/slic3r/GUI/Tab.cpp:2133
+#: src/slic3r/GUI/Tab.cpp:1933
 msgid "Connection failed."
 msgstr "A conexão falhou."
 
-#: src/slic3r/GUI/Tab.cpp:2146 src/slic3r/GUI/Tab.cpp:2323
+#: src/slic3r/GUI/Tab.cpp:1946 src/slic3r/GUI/Tab.cpp:2125
 msgid "Print Host upload"
 msgstr "Upload do host de impressão"
 
-#: src/slic3r/GUI/Tab.cpp:2190 src/libslic3r/PrintConfig.cpp:138
+#: src/slic3r/GUI/Tab.cpp:1990 src/libslic3r/PrintConfig.cpp:153
 msgid "Before layer change G-code"
 msgstr "Antes da mudança de camada G-code"
 
-#: src/slic3r/GUI/Tab.cpp:2196 src/libslic3r/PrintConfig.cpp:1056
+#: src/slic3r/GUI/Tab.cpp:1996 src/libslic3r/PrintConfig.cpp:1080
 msgid "After layer change G-code"
 msgstr "Após a mudança da camada do G-code"
 
-#: src/slic3r/GUI/Tab.cpp:2202 src/libslic3r/PrintConfig.cpp:2056
+#: src/slic3r/GUI/Tab.cpp:2002 src/libslic3r/PrintConfig.cpp:2093
 msgid "Tool change G-code"
 msgstr "G-code de troca de ferramenta"
 
-#: src/slic3r/GUI/Tab.cpp:2208
+#: src/slic3r/GUI/Tab.cpp:2008
 msgid "Between objects G-code (for sequential printing)"
 msgstr "G-code entre objetos (para impressão sequencial)"
 
-#: src/slic3r/GUI/Tab.cpp:2280
+#: src/slic3r/GUI/Tab.cpp:2080
 msgid "Display"
 msgstr "Exibição"
 
-#: src/slic3r/GUI/Tab.cpp:2295
+#: src/slic3r/GUI/Tab.cpp:2095
 msgid "Tilt"
 msgstr "Inclinar"
 
-#: src/slic3r/GUI/Tab.cpp:2296
+#: src/slic3r/GUI/Tab.cpp:2096
 msgid "Tilt time"
 msgstr "Tempo de inclinação"
 
-#: src/slic3r/GUI/Tab.cpp:2302 src/slic3r/GUI/Tab.cpp:3650
+#: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:3521
 msgid "Corrections"
 msgstr "Correções"
 
-#: src/slic3r/GUI/Tab.cpp:2317 src/slic3r/GUI/Tab.cpp:3646
+#: src/slic3r/GUI/Tab.cpp:2119 src/slic3r/GUI/Tab.cpp:3517
 msgid "Exposure"
 msgstr "Exposição"
 
-#: src/slic3r/GUI/Tab.cpp:2388 src/slic3r/GUI/Tab.cpp:2473
-#: src/libslic3r/PrintConfig.cpp:1106 src/libslic3r/PrintConfig.cpp:1124
-#: src/libslic3r/PrintConfig.cpp:1142 src/libslic3r/PrintConfig.cpp:1159
-#: src/libslic3r/PrintConfig.cpp:1170 src/libslic3r/PrintConfig.cpp:1181
-#: src/libslic3r/PrintConfig.cpp:1192
+#: src/slic3r/GUI/Tab.cpp:2190 src/slic3r/GUI/Tab.cpp:2275
+#: src/libslic3r/PrintConfig.cpp:1129 src/libslic3r/PrintConfig.cpp:1146
+#: src/libslic3r/PrintConfig.cpp:1163 src/libslic3r/PrintConfig.cpp:1179
+#: src/libslic3r/PrintConfig.cpp:1189 src/libslic3r/PrintConfig.cpp:1199
+#: src/libslic3r/PrintConfig.cpp:1209
 msgid "Machine limits"
 msgstr "Limites da máquina"
 
-#: src/slic3r/GUI/Tab.cpp:2402
+#: src/slic3r/GUI/Tab.cpp:2204
 msgid "Values in this column are for Normal mode"
 msgstr "Valores nesta coluna são para o modo normal"
 
-#: src/slic3r/GUI/Tab.cpp:2403
+#: src/slic3r/GUI/Tab.cpp:2205
 msgid "Normal"
 msgstr "Normal"
 
-#: src/slic3r/GUI/Tab.cpp:2408
+#: src/slic3r/GUI/Tab.cpp:2210
 msgid "Values in this column are for Stealth mode"
 msgstr "Valores nesta coluna são para o modo furtivo"
 
-#: src/slic3r/GUI/Tab.cpp:2409
+#: src/slic3r/GUI/Tab.cpp:2211
 msgid "Stealth"
 msgstr "Furtivo"
 
-#: src/slic3r/GUI/Tab.cpp:2417
+#: src/slic3r/GUI/Tab.cpp:2219
 msgid "Maximum feedrates"
 msgstr "Velocidade máxima de alimentação"
 
-#: src/slic3r/GUI/Tab.cpp:2422
+#: src/slic3r/GUI/Tab.cpp:2224
 msgid "Maximum accelerations"
 msgstr "Acelerações máximas"
 
-#: src/slic3r/GUI/Tab.cpp:2429
+#: src/slic3r/GUI/Tab.cpp:2231
 msgid "Jerk limits"
 msgstr "Limites de empurrão"
 
-#: src/slic3r/GUI/Tab.cpp:2434
+#: src/slic3r/GUI/Tab.cpp:2236
 msgid "Minimum feedrates"
 msgstr "Velocidades alimentação mínimos"
 
-#: src/slic3r/GUI/Tab.cpp:2498 src/slic3r/GUI/Tab.cpp:2506
+#: src/slic3r/GUI/Tab.cpp:2300 src/slic3r/GUI/Tab.cpp:2308
 msgid "Single extruder MM setup"
-msgstr "config. de extrusora multi material"
+msgstr "Config. de extrusora multi material"
 
-#: src/slic3r/GUI/Tab.cpp:2507
+#: src/slic3r/GUI/Tab.cpp:2309
 msgid "Single extruder multimaterial parameters"
 msgstr "Parâmetros para extrusora única multimaterial"
 
-#: src/slic3r/GUI/Tab.cpp:2520 src/libslic3r/GCode/PreviewData.cpp:461
-#, c-format
-msgid "Extruder %d"
-msgstr "Extrusora %d"
-
-#: src/slic3r/GUI/Tab.cpp:2538
+#: src/slic3r/GUI/Tab.cpp:2340
 msgid ""
 "This is a single extruder multimaterial printer, diameters of all extruders "
 "will be set to the new value. Do you want to proceed?"
@@ -4639,19 +5783,19 @@ msgstr ""
 "Esta é uma única impressora multimaterial extrusora, diâmetros de todas as "
 "extrusoras será definido para o novo valor. Você quer prosseguir?"
 
-#: src/slic3r/GUI/Tab.cpp:2562
+#: src/slic3r/GUI/Tab.cpp:2364
 msgid "Layer height limits"
 msgstr "Limites de altura da camada"
 
-#: src/slic3r/GUI/Tab.cpp:2567
+#: src/slic3r/GUI/Tab.cpp:2369
 msgid "Position (for multi-extruder printers)"
 msgstr "Posição (para impressoras multiextrusoras)"
 
-#: src/slic3r/GUI/Tab.cpp:2573
+#: src/slic3r/GUI/Tab.cpp:2375
 msgid "Only lift Z"
 msgstr "Apenas elevar Z"
 
-#: src/slic3r/GUI/Tab.cpp:2586
+#: src/slic3r/GUI/Tab.cpp:2388
 msgid ""
 "Retraction when tool is disabled (advanced settings for multi-extruder "
 "setups)"
@@ -4659,11 +5803,11 @@ msgstr ""
 "Retração quando a ferramenta está desativada (config. avançadas para "
 "instalações multiextrusoras)"
 
-#: src/slic3r/GUI/Tab.cpp:2594
+#: src/slic3r/GUI/Tab.cpp:2396
 msgid "Reset to Filament Color"
 msgstr "Restabelecer cor do filamento"
 
-#: src/slic3r/GUI/Tab.cpp:2775
+#: src/slic3r/GUI/Tab.cpp:2577
 msgid ""
 "The Wipe option is not available when using the Firmware Retraction mode.\n"
 "\n"
@@ -4673,80 +5817,89 @@ msgstr ""
 "\n"
 "Devo desativá-lo, a fim de permitir a retração de firmware?"
 
-#: src/slic3r/GUI/Tab.cpp:2777
+#: src/slic3r/GUI/Tab.cpp:2579
 msgid "Firmware Retraction"
 msgstr "Retração do firmware"
 
-#: src/slic3r/GUI/Tab.cpp:3106
+#: src/slic3r/GUI/Tab.cpp:2921
 #, c-format
 msgid "Default preset (%s)"
 msgstr "Predefinição padrão ( %s)"
 
-#: src/slic3r/GUI/Tab.cpp:3107
+#: src/slic3r/GUI/Tab.cpp:2922
 #, c-format
 msgid "Preset (%s)"
 msgstr "Predefinição ( %s)"
 
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/Tab.cpp:2939
 msgid "has the following unsaved changes:"
 msgstr "tem as seguintes alterações não salvas:"
 
-#: src/slic3r/GUI/Tab.cpp:3127
+#: src/slic3r/GUI/Tab.cpp:2942
 msgid "is not compatible with printer"
 msgstr "não é compatível com a impressora"
 
-#: src/slic3r/GUI/Tab.cpp:3128
+#: src/slic3r/GUI/Tab.cpp:2943
 msgid "is not compatible with print profile"
 msgstr "não é compatível com o perfil de impressão"
 
-#: src/slic3r/GUI/Tab.cpp:3130
+#: src/slic3r/GUI/Tab.cpp:2945
 msgid "and it has the following unsaved changes:"
 msgstr "e tem as seguintes alterações não salvas:"
 
-#: src/slic3r/GUI/Tab.cpp:3134
+#: src/slic3r/GUI/Tab.cpp:2949
 msgid "Unsaved Changes"
 msgstr "Alterações não salvas"
 
-#: src/slic3r/GUI/Tab.cpp:3225
+#: src/slic3r/GUI/Tab.cpp:3047
+msgctxt "PresetName"
 msgid "%1% - Copy"
 msgstr "%1% - cópia"
 
-#: src/slic3r/GUI/Tab.cpp:3248
+#: src/slic3r/GUI/Tab.cpp:3070
 msgid "The supplied name is empty. It can't be saved."
 msgstr "O nome fornecido está vazio. Não pode ser salvo."
 
-#: src/slic3r/GUI/Tab.cpp:3253
+#: src/slic3r/GUI/Tab.cpp:3075
 msgid "Cannot overwrite a system profile."
 msgstr "Não é possível substituir um perfil de sistema."
 
-#: src/slic3r/GUI/Tab.cpp:3257
+#: src/slic3r/GUI/Tab.cpp:3079
 msgid "Cannot overwrite an external profile."
 msgstr "Não é possível substituir um perfil externo."
 
-#: src/slic3r/GUI/Tab.cpp:3283
+#: src/slic3r/GUI/Tab.cpp:3084
+msgid "Preset with name \"%1%\" already exists."
+msgstr "Predefinido com nome \"%1%\" já existe."
+
+#: src/slic3r/GUI/Tab.cpp:3085
+msgid "Replace?"
+msgstr "Substituir?"
+
+#: src/slic3r/GUI/Tab.cpp:3123
 msgid "remove"
 msgstr "remover"
 
-#: src/slic3r/GUI/Tab.cpp:3283
+#: src/slic3r/GUI/Tab.cpp:3123
 msgid "delete"
 msgstr "excluir"
 
 #. TRN  remove/delete
-#: src/slic3r/GUI/Tab.cpp:3285
+#: src/slic3r/GUI/Tab.cpp:3125
 msgid "Are you sure you want to %1% the selected preset?"
 msgstr "Tem certeza de que deseja %1% da predefinição selecionada?"
 
 #. TRN  Remove/Delete
-#: src/slic3r/GUI/Tab.cpp:3288
+#: src/slic3r/GUI/Tab.cpp:3128
 msgid "%1% Preset"
 msgstr "%1% Predefinição"
 
-#: src/slic3r/GUI/Tab.cpp:3414
+#: src/slic3r/GUI/Tab.cpp:3254
 msgid "LOCKED LOCK"
 msgstr "CADEADO FECHADO"
 
 #. TRN Description for "LOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3416
+#: src/slic3r/GUI/Tab.cpp:3256
 msgid ""
 "indicates that the settings are the same as the system (or default) values "
 "for the current option group"
@@ -4754,12 +5907,12 @@ msgstr ""
 "indica que as config. são as mesmas que os valores do sistema (ou padrão) "
 "para o grupo de opções atual"
 
-#: src/slic3r/GUI/Tab.cpp:3418
+#: src/slic3r/GUI/Tab.cpp:3258
 msgid "UNLOCKED LOCK"
 msgstr "CADEADO ABERTO"
 
 #. TRN Description for "UNLOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3420
+#: src/slic3r/GUI/Tab.cpp:3260
 msgid ""
 "indicates that some settings were changed and are not equal to the system "
 "(or default) values for the current option group.\n"
@@ -4771,26 +5924,26 @@ msgstr ""
 "Clique no ícone DESBLOQUEAR para redefinir todas as config. do grupo de "
 "opções atual para os valores do sistema (ou padrão)."
 
-#: src/slic3r/GUI/Tab.cpp:3425
+#: src/slic3r/GUI/Tab.cpp:3265
 msgid "WHITE BULLET"
 msgstr "PONTO BRANCO"
 
 #. TRN Description for "WHITE BULLET"
-#: src/slic3r/GUI/Tab.cpp:3427
+#: src/slic3r/GUI/Tab.cpp:3267
 msgid ""
-"for the left button: \tindicates a non-system (or non-default) preset,\n"
-"for the right button: \tindicates that the settings hasn't been modified."
+"for the left button: indicates a non-system (or non-default) preset,\n"
+"for the right button: indicates that the settings hasn't been modified."
 msgstr ""
-"para o botão esquerdo: \t indica uma predefinição que não é do sistema (ou "
-"não-padrão),\n"
-"para o botão direito: \t indica que as config. não foram modificadas."
+"para o botão esquerdo: indica uma predefinição que não é do sistema (ou não-"
+"padrão),\n"
+"para o botão direito: indica que as config. não foram modificadas."
 
-#: src/slic3r/GUI/Tab.cpp:3430
+#: src/slic3r/GUI/Tab.cpp:3270
 msgid "BACK ARROW"
 msgstr "REDEFINIR"
 
 #. TRN Description for "BACK ARROW"
-#: src/slic3r/GUI/Tab.cpp:3432
+#: src/slic3r/GUI/Tab.cpp:3272
 msgid ""
 "indicates that the settings were changed and are not equal to the last saved "
 "preset for the current option group.\n"
@@ -4802,7 +5955,7 @@ msgstr ""
 "Clique no ícone REDEFINIR para redefinir todas as config. do grupo de opções "
 "atual para a última predefinição salva."
 
-#: src/slic3r/GUI/Tab.cpp:3442
+#: src/slic3r/GUI/Tab.cpp:3282
 msgid ""
 "LOCKED LOCK icon indicates that the settings are the same as the system (or "
 "default) values for the current option group"
@@ -4810,7 +5963,7 @@ msgstr ""
 "O ícone CADEADO FECHADO indica que as config. são as mesmas que os valores "
 "do sistema (ou padrão) para o grupo de opções atual"
 
-#: src/slic3r/GUI/Tab.cpp:3444
+#: src/slic3r/GUI/Tab.cpp:3284
 msgid ""
 "UNLOCKED LOCK icon indicates that some settings were changed and are not "
 "equal to the system (or default) values for the current option group.\n"
@@ -4822,13 +5975,13 @@ msgstr ""
 "Clique para redefinir todas as config. para o grupo de opções atual para os "
 "valores do sistema (ou padrão)."
 
-#: src/slic3r/GUI/Tab.cpp:3447
+#: src/slic3r/GUI/Tab.cpp:3287
 msgid "WHITE BULLET icon indicates a non system (or non default) preset."
 msgstr ""
 "O ícone PONTO BRANCO indica uma predefinição que não é do sistema (ou não "
 "predefinida)."
 
-#: src/slic3r/GUI/Tab.cpp:3450
+#: src/slic3r/GUI/Tab.cpp:3290
 msgid ""
 "WHITE BULLET icon indicates that the settings are the same as in the last "
 "saved preset for the current option group."
@@ -4836,7 +5989,7 @@ msgstr ""
 "O ícone PONTO BRANCO indica que as config. são as mesmas da última "
 "predefinição salva para o grupo de opções atual."
 
-#: src/slic3r/GUI/Tab.cpp:3452
+#: src/slic3r/GUI/Tab.cpp:3292
 msgid ""
 "BACK ARROW icon indicates that the settings were changed and are not equal "
 "to the last saved preset for the current option group.\n"
@@ -4848,7 +6001,7 @@ msgstr ""
 "Clique para redefinir todas as config. do grupo de opções atual para a "
 "última predefinição salva."
 
-#: src/slic3r/GUI/Tab.cpp:3458
+#: src/slic3r/GUI/Tab.cpp:3298
 msgid ""
 "LOCKED LOCK icon indicates that the value is the same as the system (or "
 "default) value."
@@ -4856,7 +6009,7 @@ msgstr ""
 "O ícone CADEADO FECHADO indica que o valor é o mesmo que o valor do sistema "
 "(ou padrão)."
 
-#: src/slic3r/GUI/Tab.cpp:3459
+#: src/slic3r/GUI/Tab.cpp:3299
 msgid ""
 "UNLOCKED LOCK icon indicates that the value was changed and is not equal to "
 "the system (or default) value.\n"
@@ -4866,7 +6019,7 @@ msgstr ""
 "valor do sistema (ou padrão).\n"
 "Clique para redefinir o valor atual para o valor do sistema (ou padrão)."
 
-#: src/slic3r/GUI/Tab.cpp:3465
+#: src/slic3r/GUI/Tab.cpp:3305
 msgid ""
 "WHITE BULLET icon indicates that the value is the same as in the last saved "
 "preset."
@@ -4874,7 +6027,7 @@ msgstr ""
 "O ícone PONTO BRANCO indica que o valor é o mesmo da última predefinição "
 "guardada."
 
-#: src/slic3r/GUI/Tab.cpp:3466
+#: src/slic3r/GUI/Tab.cpp:3306
 msgid ""
 "BACK ARROW icon indicates that the value was changed and is not equal to the "
 "last saved preset.\n"
@@ -4885,61 +6038,56 @@ msgstr ""
 "Clique para redefinir o valor atual para a última predefinição salva."
 
 #. TRN Preset
-#: src/slic3r/GUI/Tab.cpp:3579
+#: src/slic3r/GUI/Tab.cpp:3419
 #, c-format
 msgid "Save %s as:"
 msgstr "Salvar %s como:"
 
-#: src/slic3r/GUI/Tab.cpp:3623
+#: src/slic3r/GUI/Tab.cpp:3463
 msgid "the following suffix is not allowed:"
 msgstr "o sufixo seguinte não é permitido:"
 
-#: src/slic3r/GUI/Tab.cpp:3627
+#: src/slic3r/GUI/Tab.cpp:3467
 msgid "The supplied name is not available."
 msgstr "O nome fornecido não está disponível."
 
-#: src/slic3r/GUI/Tab.cpp:3640
+#: src/slic3r/GUI/Tab.cpp:3480 src/slic3r/GUI/Tab.cpp:3482
 msgid "Material"
 msgstr "Material"
 
-#: src/slic3r/GUI/Tab.cpp:3642 src/slic3r/GUI/Tab.cpp:3733
-#: src/slic3r/GUI/wxExtensions.cpp:482
-msgid "Layers"
-msgstr "Camadas"
-
-#: src/slic3r/GUI/Tab.cpp:3741
+#: src/slic3r/GUI/Tab.cpp:3610
 msgid "Support head"
 msgstr "Cabeça de suporte"
 
-#: src/slic3r/GUI/Tab.cpp:3746
+#: src/slic3r/GUI/Tab.cpp:3615
 msgid "Support pillar"
 msgstr "Pilar de suporte"
 
-#: src/slic3r/GUI/Tab.cpp:3760
+#: src/slic3r/GUI/Tab.cpp:3631
 msgid "Connection of the support sticks and junctions"
 msgstr "Conexão das varas de suporte e junções"
 
-#: src/slic3r/GUI/Tab.cpp:3765
+#: src/slic3r/GUI/Tab.cpp:3636
 msgid "Automatic generation"
 msgstr "Geração Automática"
 
-#: src/slic3r/GUI/Tab.hpp:328 src/slic3r/GUI/Tab.hpp:428
+#: src/slic3r/GUI/Tab.hpp:328 src/slic3r/GUI/Tab.hpp:431
 msgid "Print Settings"
 msgstr "Config. de impressão"
 
-#: src/slic3r/GUI/Tab.hpp:353
+#: src/slic3r/GUI/Tab.hpp:355
 msgid "Filament Settings"
 msgstr "Config. de filamento"
 
-#: src/slic3r/GUI/Tab.hpp:389
+#: src/slic3r/GUI/Tab.hpp:391
 msgid "Printer Settings"
 msgstr "Config. da impressora"
 
-#: src/slic3r/GUI/Tab.hpp:413
+#: src/slic3r/GUI/Tab.hpp:416
 msgid "Material Settings"
 msgstr "Config. de material"
 
-#: src/slic3r/GUI/Tab.hpp:440
+#: src/slic3r/GUI/Tab.hpp:443
 msgid "Save preset"
 msgstr "Salvar predefinição"
 
@@ -4952,39 +6100,40 @@ msgstr "Atualização disponível"
 msgid "New version of %s is available"
 msgstr "Nova versão do %s está disponível"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:45
+#: src/slic3r/GUI/UpdateDialogs.cpp:43
 msgid "Current version:"
 msgstr "Versão atual:"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:47
+#: src/slic3r/GUI/UpdateDialogs.cpp:45
 msgid "New version:"
 msgstr "Nova versão:"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:55
+#: src/slic3r/GUI/UpdateDialogs.cpp:53
 msgid "Changelog && Download"
 msgstr "Changelog && Download"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:62 src/slic3r/GUI/UpdateDialogs.cpp:127
+#: src/slic3r/GUI/UpdateDialogs.cpp:60 src/slic3r/GUI/UpdateDialogs.cpp:125
+#: src/slic3r/GUI/UpdateDialogs.cpp:183
 msgid "Open changelog page"
 msgstr "Abra a página do changelog"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:67
+#: src/slic3r/GUI/UpdateDialogs.cpp:65
 msgid "Open download page"
 msgstr "Abrir página de download"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:73
+#: src/slic3r/GUI/UpdateDialogs.cpp:71
 msgid "Don't notify about new releases any more"
 msgstr "Não notifique mais sobre novas versões"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:91 src/slic3r/GUI/UpdateDialogs.cpp:207
+#: src/slic3r/GUI/UpdateDialogs.cpp:89 src/slic3r/GUI/UpdateDialogs.cpp:266
 msgid "Configuration update"
 msgstr "Atualização de config."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:91
+#: src/slic3r/GUI/UpdateDialogs.cpp:89
 msgid "Configuration update is available"
 msgstr "A atualização de config. está disponível"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:94
+#: src/slic3r/GUI/UpdateDialogs.cpp:92
 msgid ""
 "Would you like to install it?\n"
 "\n"
@@ -5001,21 +6150,48 @@ msgstr ""
 "\n"
 "Pacotes de config. atualizados:"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:115
+#: src/slic3r/GUI/UpdateDialogs.cpp:113 src/slic3r/GUI/UpdateDialogs.cpp:173
 msgid "Comment:"
 msgstr "Comentário:"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:151
+#: src/slic3r/GUI/UpdateDialogs.cpp:148 src/slic3r/GUI/UpdateDialogs.cpp:210
 #, c-format
 msgid "%s incompatibility"
 msgstr "%s incompatibilidade"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:152
+#: src/slic3r/GUI/UpdateDialogs.cpp:148
+msgid "You must install a configuration update."
+msgstr "Você deve instalar uma atualização de configuração."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:151
+#, c-format
+msgid ""
+"%s will now start updates. Otherwise it won't be able to start.\n"
+"\n"
+"Note that a full configuration snapshot will be created first. It can then "
+"be restored at any time should there be a problem with the new version.\n"
+"\n"
+"Updated configuration bundles:"
+msgstr ""
+"%s agora iniciará atualizações. Caso contrário, não será capaz de começar.\n"
+"\n"
+"Observe que um instantâneo de configuração completo será criado primeiro. "
+"Ele pode então ser restaurado a qualquer momento caso haja um problema com a "
+"nova versão.\n"
+"\n"
+"Pacotes de configuração atualizados:"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:191 src/slic3r/GUI/UpdateDialogs.cpp:246
+#, c-format
+msgid "Exit %s"
+msgstr "Saída %s"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:211
 #, c-format
 msgid "%s configuration is incompatible"
 msgstr "%s config. é incompatível"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:157
+#: src/slic3r/GUI/UpdateDialogs.cpp:216
 #, c-format
 msgid ""
 "This version of %s is not compatible with currently installed configuration "
@@ -5025,7 +6201,7 @@ msgid ""
 "\n"
 "You may either exit %s and try again with a newer version, or you may re-run "
 "the initial configuration. Doing so will create a backup snapshot of the "
-"existing configuration before installing files compatible with this %s.\n"
+"existing configuration before installing files compatible with this %s."
 msgstr ""
 "Esta versão do %s não é compatível com pacotes de config. atualmente "
 "instalados.\n"
@@ -5035,27 +6211,22 @@ msgstr ""
 "Você pode sair %s e tente novamente com uma versão mais recente, ou você "
 "pode executar novamente a config. inicial. Isso criará um instantâneo de "
 "backup da config. existente antes de instalar os arquivos compatíveis com "
-"este %s.\n"
+"este %s."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:166
+#: src/slic3r/GUI/UpdateDialogs.cpp:225
 #, c-format
 msgid "This %s version: %s"
 msgstr "Esta versão %s : %s"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:171
+#: src/slic3r/GUI/UpdateDialogs.cpp:230
 msgid "Incompatible bundles:"
 msgstr "Pacotes incompatíveis:"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:187
-#, c-format
-msgid "Exit %s"
-msgstr "Saída %s"
-
-#: src/slic3r/GUI/UpdateDialogs.cpp:190
+#: src/slic3r/GUI/UpdateDialogs.cpp:249
 msgid "Re-configure"
 msgstr "Re-config.urar"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:211
+#: src/slic3r/GUI/UpdateDialogs.cpp:270
 #, c-format
 msgid ""
 "%s now uses an updated configuration structure.\n"
@@ -5084,15 +6255,28 @@ msgstr ""
 "predefinições e para escolher se deseja ativar as atualizações automáticas "
 "predefinidas."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:227
+#: src/slic3r/GUI/UpdateDialogs.cpp:287
 msgid "For more information please visit our wiki page:"
 msgstr "Para mais informações, visite a nossa página wiki:"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:14
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
+msgid "Configuration updates"
+msgstr "Atualizações de configuração"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
+msgid "No updates available"
+msgstr "Nenhuma atualização disponível"
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:309
+#, c-format
+msgid "%s has no configuration updates available."
+msgstr "%s não tem atualizações de configuração disponíveis."
+
+#: src/slic3r/GUI/WipeTowerDialog.cpp:15
 msgid "Ramming customization"
 msgstr "Personalização de Ramming"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:40
+#: src/slic3r/GUI/WipeTowerDialog.cpp:41
 msgid ""
 "Ramming denotes the rapid extrusion just before a tool change in a single-"
 "extruder MM printer. Its purpose is to properly shape the end of the "
@@ -5115,27 +6299,27 @@ msgstr ""
 "Esta é uma config. de nível especialista, ajuste incorreto provavelmente "
 "levará a compotas, roda extrusora moagem em filamento etc."
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:82
+#: src/slic3r/GUI/WipeTowerDialog.cpp:83
 msgid "Total ramming time"
 msgstr "Tempo total de Ramming"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:84
+#: src/slic3r/GUI/WipeTowerDialog.cpp:85
 msgid "Total rammed volume"
 msgstr "Volume total de Ramming"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:88
+#: src/slic3r/GUI/WipeTowerDialog.cpp:89
 msgid "Ramming line width"
 msgstr "Largura da linha de Ramming"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:90
+#: src/slic3r/GUI/WipeTowerDialog.cpp:91
 msgid "Ramming line spacing"
 msgstr "Espaçamento de linha de Ramming"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:141
+#: src/slic3r/GUI/WipeTowerDialog.cpp:142
 msgid "Wipe tower - Purging volume adjustment"
 msgstr "Torre de limpeza - Ajuste de volume de purga"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:225
+#: src/slic3r/GUI/WipeTowerDialog.cpp:254
 msgid ""
 "Here you can adjust required purging volume (mm³) for any given pair of "
 "tools."
@@ -5143,23 +6327,23 @@ msgstr ""
 "Aqui você pode ajustar o volume de purga necessário (mm ³) para qualquer par "
 "dado de ferramentas."
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:226
+#: src/slic3r/GUI/WipeTowerDialog.cpp:255
 msgid "Extruder changed to"
 msgstr "Extrusora alterada para"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:234
+#: src/slic3r/GUI/WipeTowerDialog.cpp:263
 msgid "unloaded"
 msgstr "descarregado"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:235
+#: src/slic3r/GUI/WipeTowerDialog.cpp:264
 msgid "loaded"
 msgstr "carregado"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:240
+#: src/slic3r/GUI/WipeTowerDialog.cpp:276
 msgid "Tool #"
 msgstr "Ferramenta #"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:247
+#: src/slic3r/GUI/WipeTowerDialog.cpp:285
 msgid ""
 "Total purging volume is calculated by summing two values below, depending on "
 "which tools are loaded/unloaded."
@@ -5167,15 +6351,15 @@ msgstr ""
 "O volume de purga total é calculado somando-se dois valores abaixo, "
 "dependendo de quais ferramentas são carregadas/descarregadas."
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:248
+#: src/slic3r/GUI/WipeTowerDialog.cpp:286
 msgid "Volume to purge (mm³) when the filament is being"
 msgstr "Volume a purgar (mm ³) quando o filamento está a ser"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:262
+#: src/slic3r/GUI/WipeTowerDialog.cpp:300
 msgid "From"
 msgstr "De"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:327
+#: src/slic3r/GUI/WipeTowerDialog.cpp:365
 msgid ""
 "Switching to simple settings will discard changes done in the advanced "
 "mode!\n"
@@ -5187,108 +6371,62 @@ msgstr ""
 "\n"
 "Você quer prosseguir?"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:339
+#: src/slic3r/GUI/WipeTowerDialog.cpp:377
 msgid "Show simplified settings"
 msgstr "Mostrar config. simplificadas"
 
-#: src/slic3r/GUI/WipeTowerDialog.cpp:339
+#: src/slic3r/GUI/WipeTowerDialog.cpp:377
 msgid "Show advanced settings"
 msgstr "Mostrar opções avançadas"
 
-#: src/slic3r/GUI/wxExtensions.cpp:471
-msgid "Instances"
-msgstr "Instâncias"
-
-#: src/slic3r/GUI/wxExtensions.cpp:475 src/slic3r/GUI/wxExtensions.cpp:619
-#, c-format
-msgid "Instance %d"
-msgstr "Instância %d"
-
-#: src/slic3r/GUI/wxExtensions.cpp:509
-msgid "Range"
-msgstr "Intervalo"
-
-#: src/slic3r/GUI/wxExtensions.cpp:2731
-msgid "One layer mode"
-msgstr "Modo de uma camada"
-
-#: src/slic3r/GUI/wxExtensions.cpp:2732
-msgid "Add/Del color change"
-msgstr "Add/Excluir mudança de cor"
-
-#: src/slic3r/GUI/wxExtensions.cpp:2733
-msgid "Discard all color changes"
-msgstr "Descartar todas as alterações de cor"
-
-#: src/slic3r/GUI/wxExtensions.cpp:2993
+#: src/slic3r/GUI/wxExtensions.cpp:706
 #, c-format
 msgid "Switch to the %s mode"
 msgstr "Mude para o modo %s"
 
-#: src/slic3r/GUI/wxExtensions.cpp:2994
+#: src/slic3r/GUI/wxExtensions.cpp:707
 #, c-format
 msgid "Current mode is %s"
 msgstr "O modo atual é %s"
 
-#: src/slic3r/Utils/Duet.cpp:51
-msgid "Connection to Duet works correctly."
-msgstr "A conexão com o Duet funciona corretamente."
-
-#: src/slic3r/Utils/Duet.cpp:56
-msgid "Could not connect to Duet"
-msgstr "Não foi possível conectar-se ao Duet"
-
-#: src/slic3r/Utils/Duet.cpp:84 src/slic3r/Utils/Duet.cpp:154
-msgid "Unknown error occured"
-msgstr "Ocorreu um erro desconhecido"
-
-#: src/slic3r/Utils/Duet.cpp:148
-msgid "Wrong password"
-msgstr "Senha incorreta"
-
-#: src/slic3r/Utils/Duet.cpp:151
-msgid "Could not get resources to create a new connection"
-msgstr "Não foi possível obter recursos para criar uma nova conexão"
-
-#: src/slic3r/Utils/OctoPrint.cpp:70
+#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:69
 #, c-format
 msgid "Mismatched type of print host: %s"
 msgstr "Tipo incompatível de host de impressão: %s"
 
-#: src/slic3r/Utils/OctoPrint.cpp:85
-msgid "Connection to OctoPrint works correctly."
-msgstr "A ligação ao OctoPrint funciona correctamente."
+#: src/slic3r/Utils/AstroBox.cpp:84
+msgid "Connection to AstroBox works correctly."
+msgstr "A conexão com o AstroBox funciona corretamente."
 
-#: src/slic3r/Utils/OctoPrint.cpp:91
-msgid "Could not connect to OctoPrint"
-msgstr "Não foi possível conectar-se ao OctoPrint"
+#: src/slic3r/Utils/AstroBox.cpp:90
+msgid "Could not connect to AstroBox"
+msgstr "Não foi possível conectar-se ao AstroBox"
 
-#: src/slic3r/Utils/OctoPrint.cpp:91
-msgid "Note: OctoPrint version at least 1.1.0 is required."
-msgstr "Nota: OctoPrint versão pelo menos 1.1.0 é necessária."
+#: src/slic3r/Utils/AstroBox.cpp:92
+msgid "Note: AstroBox version at least 1.1.0 is required."
+msgstr "Nota: A versão astrobox é necessária pelo menos 1.1.0."
 
-#: src/slic3r/Utils/OctoPrint.cpp:196
-msgid "Connection to Prusa SL1 works correctly."
-msgstr "A conexão com o Prusa SL1 funciona corretamente."
+#: src/slic3r/Utils/Duet.cpp:49
+msgid "Connection to Duet works correctly."
+msgstr "A conexão com o Duet funciona corretamente."
 
-#: src/slic3r/Utils/OctoPrint.cpp:201
-msgid "Could not connect to Prusa SLA"
-msgstr "Não foi possível conectar-se a Prusa SLA"
+#: src/slic3r/Utils/Duet.cpp:55
+msgid "Could not connect to Duet"
+msgstr "Não foi possível conectar-se ao Duet"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:614
-#, c-format
-msgid "requires min. %s and max. %s"
-msgstr "requer min . %s e máx.  %s"
+#: src/slic3r/Utils/Duet.cpp:84 src/slic3r/Utils/Duet.cpp:139
+#: src/slic3r/Utils/FlashAir.cpp:122 src/slic3r/Utils/FlashAir.cpp:143
+#: src/slic3r/Utils/FlashAir.cpp:159
+msgid "Unknown error occured"
+msgstr "Ocorreu um erro desconhecido"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:619
-#, c-format
-msgid "requires min. %s"
-msgstr "requer min . %s"
+#: src/slic3r/Utils/Duet.cpp:133
+msgid "Wrong password"
+msgstr "Senha incorreta"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:621
-#, c-format
-msgid "requires max. %s"
-msgstr "requer Max.  %s"
+#: src/slic3r/Utils/Duet.cpp:136
+msgid "Could not get resources to create a new connection"
+msgstr "Não foi possível obter recursos para criar uma nova conexão"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:219
 #: src/slic3r/Utils/FixModelByWin10.cpp:359
@@ -5368,8 +6506,68 @@ msgid "Model Repair by the Netfabb service"
 msgstr "Reparação de modelos pelo serviço Netfabb"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:426
-msgid "Model repair failed: \n"
-msgstr "Falha no reparo do modelo:\n"
+msgid "Model repair failed:"
+msgstr "Falha no reparo do modelo:"
+
+#: src/slic3r/Utils/FlashAir.cpp:58
+msgid "Upload not enabled on FlashAir card."
+msgstr "Upload não ativado no cartão FlashAir."
+
+#: src/slic3r/Utils/FlashAir.cpp:68
+msgid "Connection to FlashAir works correctly and upload is enabled."
+msgstr ""
+"A conexão com o FlashAir funciona corretamente e o upload está ativado."
+
+#: src/slic3r/Utils/FlashAir.cpp:74
+msgid "Could not connect to FlashAir"
+msgstr "Não foi possível conectar-se ao FlashAir"
+
+#: src/slic3r/Utils/FlashAir.cpp:76
+msgid ""
+"Note: FlashAir with firmware 2.00.02 or newer and activated upload function "
+"is required."
+msgstr ""
+"Nota: O FlashAir com firmware 2.00.02 ou função de upload mais nova e "
+"ativada é necessário."
+
+#: src/slic3r/Utils/OctoPrint.cpp:84
+msgid "Connection to OctoPrint works correctly."
+msgstr "A ligação ao OctoPrint funciona correctamente."
+
+#: src/slic3r/Utils/OctoPrint.cpp:90
+msgid "Could not connect to OctoPrint"
+msgstr "Não foi possível conectar-se ao OctoPrint"
+
+#: src/slic3r/Utils/OctoPrint.cpp:92
+msgid "Note: OctoPrint version at least 1.1.0 is required."
+msgstr "Nota: OctoPrint versão pelo menos 1.1.0 é necessária."
+
+#: src/slic3r/Utils/OctoPrint.cpp:179
+msgid "Connection to Prusa SL1 works correctly."
+msgstr "A conexão com o Prusa SL1 funciona corretamente."
+
+#: src/slic3r/Utils/OctoPrint.cpp:185
+msgid "Could not connect to Prusa SLA"
+msgstr "Não foi possível conectar-se a Prusa SLA"
+
+#: src/slic3r/Utils/PresetUpdater.cpp:705
+#, c-format
+msgid "requires min. %s and max. %s"
+msgstr "requer min . %s e máx.  %s"
+
+#: src/slic3r/Utils/PresetUpdater.cpp:710
+#, c-format
+msgid "requires min. %s"
+msgstr "requer min . %s"
+
+#: src/slic3r/Utils/PresetUpdater.cpp:713
+#, c-format
+msgid "requires max. %s"
+msgstr "requer Max.  %s"
+
+#: src/libslic3r/SLA/Pad.cpp:691
+msgid "Pad brim size is too small for the current configuration."
+msgstr "O tamanho da borda do bloco é muito pequeno para a configuração atual."
 
 #: src/libslic3r/Zipper.cpp:32
 msgid "undefined error"
@@ -5499,33 +6697,80 @@ msgstr "write calledback falhou"
 msgid "Error with zip archive"
 msgstr "Erro com arquivo zip"
 
-#: src/libslic3r/Print.cpp:1112
+#: src/libslic3r/GCode.cpp:637
+msgid "Empty layers detected, the output would not be printable."
+msgstr "Camadas vazias detectadas, a saída não seria imprimível."
+
+#: src/libslic3r/GCode.cpp:638
+msgid "Print z"
+msgstr "Imprimir Z"
+
+#: src/libslic3r/GCode.cpp:639
+msgid ""
+"This is usually caused by negligibly small extrusions or by a faulty model. "
+"Try to repair the model or change its orientation on the bed."
+msgstr ""
+"Isso geralmente é causado por extrusões insignificantes ou por um modelo "
+"defeituoso. Tente reparar o modelo ou mudar sua orientação na cama."
+
+#: src/libslic3r/ExtrusionEntity.cpp:323
+msgid "Mixed"
+msgstr "Misto"
+
+#: src/libslic3r/Flow.cpp:61
+msgid ""
+"Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
+msgstr ""
+"Não é possível calcular a largura de extrusão para %1%: Variável \"%2%\" não "
+"acessível."
+
+#: src/libslic3r/Format/3mf.cpp:1630
+msgid ""
+"The selected 3mf file has been saved with a newer version of %1% and is not "
+"compatible."
+msgstr ""
+"O arquivo 3mf selecionado foi salvo com uma versão mais recente de %1% e não "
+"é compatível."
+
+#: src/libslic3r/Format/AMF.cpp:934
+msgid ""
+"The selected amf file has been saved with a newer version of %1% and is not "
+"compatible."
+msgstr ""
+"O arquivo amf selecionado foi salvo com uma versão mais recente de %1% e não "
+"é compatível."
+
+#: src/libslic3r/Print.cpp:1219
 msgid "All objects are outside of the print volume."
 msgstr "Todos os objetos estão fora do volume de impressão."
 
-#: src/libslic3r/Print.cpp:1139
+#: src/libslic3r/Print.cpp:1222
+msgid "The supplied settings will cause an empty print."
+msgstr "As config. fornecidas causarão uma impressão vazia."
+
+#: src/libslic3r/Print.cpp:1226
 msgid "Some objects are too close; your extruder will collide with them."
 msgstr "Alguns objetos são muito próximos; sua extrusora irá colidir com eles."
 
-#: src/libslic3r/Print.cpp:1154
+#: src/libslic3r/Print.cpp:1228
 msgid ""
 "Some objects are too tall and cannot be printed without extruder collisions."
 msgstr ""
 "Alguns objetos são muito altos e não podem ser impressos sem colisões de "
 "extrusoras."
 
-#: src/libslic3r/Print.cpp:1164
+#: src/libslic3r/Print.cpp:1237
 msgid "The Spiral Vase option can only be used when printing a single object."
 msgstr "A opção vaso espiral só pode ser usada ao imprimir um único objeto."
 
-#: src/libslic3r/Print.cpp:1171
+#: src/libslic3r/Print.cpp:1244
 msgid ""
 "The Spiral Vase option can only be used when printing single material "
 "objects."
 msgstr ""
 "A opção vaso espiral só pode ser usada ao imprimir objetos de material único."
 
-#: src/libslic3r/Print.cpp:1184
+#: src/libslic3r/Print.cpp:1257
 msgid ""
 "The wipe tower is only supported if all extruders have the same nozzle "
 "diameter and use filaments of the same diameter."
@@ -5533,7 +6778,7 @@ msgstr ""
 "A torre de limpeza só é suportada se todas as extrusoras tiverem o mesmo "
 "diâmetro da ponteira e usarem filamentos do mesmo diâmetro."
 
-#: src/libslic3r/Print.cpp:1189
+#: src/libslic3r/Print.cpp:1262
 msgid ""
 "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter "
 "and Repetier G-code flavors."
@@ -5541,7 +6786,7 @@ msgstr ""
 "A Wipe Tower é atualmente suportada apenas para os firmwares Marlin, RepRap/"
 "Sprinter e Repetier G-code."
 
-#: src/libslic3r/Print.cpp:1191
+#: src/libslic3r/Print.cpp:1264
 msgid ""
 "The Wipe Tower is currently only supported with the relative extruder "
 "addressing (use_relative_e_distances=1)."
@@ -5549,13 +6794,27 @@ msgstr ""
 "A torre da limpeza é suportada atualmente somente com o endereçamento "
 "relativo da extrusora (use_relative_e_distances = 1)."
 
-#: src/libslic3r/Print.cpp:1193
+#: src/libslic3r/Print.cpp:1266
 msgid "Ooze prevention is currently not supported with the wipe tower enabled."
 msgstr ""
 "A prevenção de escorrimento não é suportada atualmente com a torre da "
 "limpeza permitida."
 
-#: src/libslic3r/Print.cpp:1214
+#: src/libslic3r/Print.cpp:1268
+msgid ""
+"The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)."
+msgstr ""
+"Atualmente, a Torre limpa não suporta E volumétrica (use_volumetric_e=0)."
+
+#: src/libslic3r/Print.cpp:1270
+msgid ""
+"The Wipe Tower is currently not supported for multimaterial sequential "
+"prints."
+msgstr ""
+"A torre de limpeza só é suportada para vários objetos se eles tiverem "
+"alturas de camada iguais."
+
+#: src/libslic3r/Print.cpp:1291
 msgid ""
 "The Wipe Tower is only supported for multiple objects if they have equal "
 "layer heights"
@@ -5563,7 +6822,7 @@ msgstr ""
 "A torre de limpeza só é suportada para vários objetos se eles tiverem "
 "alturas de camada iguais"
 
-#: src/libslic3r/Print.cpp:1216
+#: src/libslic3r/Print.cpp:1293
 msgid ""
 "The Wipe Tower is only supported for multiple objects if they are printed "
 "over an equal number of raft layers"
@@ -5571,7 +6830,7 @@ msgstr ""
 "A torre de limpeza só é suportada para vários objetos se elas forem "
 "impressas em um número igual de camadas de estrado"
 
-#: src/libslic3r/Print.cpp:1218
+#: src/libslic3r/Print.cpp:1295
 msgid ""
 "The Wipe Tower is only supported for multiple objects if they are printed "
 "with the same support_material_contact_distance"
@@ -5579,7 +6838,7 @@ msgstr ""
 "A torre de limpeza só é suportado para vários objetos se eles são impressos "
 "com a mesma distância de contato do suporte"
 
-#: src/libslic3r/Print.cpp:1220
+#: src/libslic3r/Print.cpp:1297
 msgid ""
 "The Wipe Tower is only supported for multiple objects if they are sliced "
 "equally."
@@ -5587,36 +6846,32 @@ msgstr ""
 "A torre de limpeza só é suportada para vários objetos se eles são fatiados "
 "igualmente."
 
-#: src/libslic3r/Print.cpp:1248
+#: src/libslic3r/Print.cpp:1339
 msgid ""
-"The Wipe tower is only supported if all objects have the same layer height "
-"profile"
+"The Wipe tower is only supported if all objects have the same variable layer "
+"height"
 msgstr ""
-"A torre de limpeza só é suportada se todos os objetos tiverem o mesmo perfil "
-"de altura da camada"
+"A torre de limpeza só é suportada se todos os objetos tiverem a mesma altura "
+"de camada variável"
 
-#: src/libslic3r/Print.cpp:1258
-msgid "The supplied settings will cause an empty print."
-msgstr "As config. fornecidas causarão uma impressão vazia."
-
-#: src/libslic3r/Print.cpp:1275
+#: src/libslic3r/Print.cpp:1365
 msgid ""
 "One or more object were assigned an extruder that the printer does not have."
 msgstr ""
 "Um ou mais objetos foram atribuídos a uma extrusora que a impressora não tem."
 
-#: src/libslic3r/Print.cpp:1284
+#: src/libslic3r/Print.cpp:1374
 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm"
 msgstr ""
 "%1% = %2% mm é muito baixo para ser impresso a uma altura de camada %3% mm"
 
-#: src/libslic3r/Print.cpp:1287
+#: src/libslic3r/Print.cpp:1377
 msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm"
 msgstr ""
 "Excesso %1%=%2% milímetro a ser imprimível com um diâmetro da ponteira %3% "
 "milímetro"
 
-#: src/libslic3r/Print.cpp:1298
+#: src/libslic3r/Print.cpp:1388
 msgid ""
 "Printing with multiple extruders of differing nozzle diameters. If support "
 "is to be printed with the current extruder (support_material_extruder == 0 "
@@ -5628,7 +6883,7 @@ msgstr ""
 "(support_material_extruder = = 0 ou support_material_interface_extruder = = "
 "0), todos as ponteiras têm que ser do mesmo diâmetro."
 
-#: src/libslic3r/Print.cpp:1306
+#: src/libslic3r/Print.cpp:1396
 msgid ""
 "For the Wipe Tower to work with the soluble supports, the support layers "
 "need to be synchronized with the object layers."
@@ -5636,7 +6891,7 @@ msgstr ""
 "Para que a torre de limpeza funcione com os suportes solúveis, as camadas de "
 "suporte precisam ser sincronizadas com as camadas de objeto."
 
-#: src/libslic3r/Print.cpp:1310
+#: src/libslic3r/Print.cpp:1400
 msgid ""
 "The Wipe Tower currently supports the non-soluble supports only if they are "
 "printed with the current extruder without triggering a tool change. (both "
@@ -5648,64 +6903,36 @@ msgstr ""
 "(ambos support_material_extruder e support_material_interface_extruder "
 "precisam ser definidos como 0)."
 
-#: src/libslic3r/Print.cpp:1332
+#: src/libslic3r/Print.cpp:1422
 msgid "First layer height can't be greater than nozzle diameter"
 msgstr ""
 "A primeira altura da camada não pode ser maior do que o diâmetro da ponteira"
 
-#: src/libslic3r/Print.cpp:1337
+#: src/libslic3r/Print.cpp:1427
 msgid "Layer height can't be greater than nozzle diameter"
 msgstr "A altura da camada não pode ser maior do que o diâmetro da ponteira"
 
-#: src/libslic3r/Print.cpp:1492
+#: src/libslic3r/Print.cpp:1584
 msgid "Infilling layers"
 msgstr "Camadas de preenchimento"
 
-#: src/libslic3r/Print.cpp:1500
+#: src/libslic3r/Print.cpp:1606
 msgid "Generating skirt"
 msgstr "Gerando saia"
 
-#: src/libslic3r/Print.cpp:1508
+#: src/libslic3r/Print.cpp:1614
 msgid "Generating brim"
 msgstr "Gerando a aba"
 
-#: src/libslic3r/Print.cpp:1536
+#: src/libslic3r/Print.cpp:1638
 msgid "Exporting G-code"
 msgstr "Exportando o G-code"
 
-#: src/libslic3r/Print.cpp:1540
+#: src/libslic3r/Print.cpp:1642
 msgid "Generating G-code"
 msgstr "Gerando G-code"
 
-#: src/libslic3r/SLAPrint.cpp:64
-msgid "Slicing model"
-msgstr "Modelo de fatiamento"
-
-#: src/libslic3r/SLAPrint.cpp:65 src/libslic3r/SLAPrint.cpp:899
-msgid "Generating support points"
-msgstr "Gerando pontos de suporte"
-
-#: src/libslic3r/SLAPrint.cpp:66
-msgid "Generating support tree"
-msgstr "Gerando suporte em árvore"
-
-#: src/libslic3r/SLAPrint.cpp:67
-msgid "Generating pad"
-msgstr "Gerando pad"
-
-#: src/libslic3r/SLAPrint.cpp:68
-msgid "Slicing supports"
-msgstr "Fatiando suportes"
-
-#: src/libslic3r/SLAPrint.cpp:85
-msgid "Merging slices and calculating statistics"
-msgstr "Mesclando camadas e calculando estatísticas"
-
-#: src/libslic3r/SLAPrint.cpp:86
-msgid "Rasterizing layers"
-msgstr "Rasterizando camadas"
-
-#: src/libslic3r/SLAPrint.cpp:661
+#: src/libslic3r/SLAPrint.cpp:615
 msgid ""
 "Cannot proceed without support points! Add support points or disable support "
 "generation."
@@ -5713,7 +6940,7 @@ msgstr ""
 "Não pode prosseguir sem pontos de suporte! Adicione pontos de suporte ou "
 "desative a geração de suporte."
 
-#: src/libslic3r/SLAPrint.cpp:678
+#: src/libslic3r/SLAPrint.cpp:627
 msgid ""
 "Elevation is too low for object. Use the \"Pad around object\" feature to "
 "print the object without elevation."
@@ -5721,7 +6948,7 @@ msgstr ""
 "A elevação é muito baixa para o objeto. Use o recurso \"pad ao redor do "
 "objeto\" para imprimir o objeto sem elevação."
 
-#: src/libslic3r/SLAPrint.cpp:684
+#: src/libslic3r/SLAPrint.cpp:633
 msgid ""
 "The endings of the support pillars will be deployed on the gap between the "
 "object and the pad. 'Support base safety distance' has to be greater than "
@@ -5731,30 +6958,90 @@ msgstr ""
 "objeto e o pad. ' Distância de segurança de base de suporte ' tem de ser "
 "maior do que o parâmetro ' pad objecto Gap ' para evitar este."
 
-#: src/libslic3r/SLAPrint.cpp:696
+#: src/libslic3r/SLAPrint.cpp:648
 msgid "Exposition time is out of printer profile bounds."
 msgstr "O tempo de exposição está fora dos limites do perfil da impressora."
 
-#: src/libslic3r/SLAPrint.cpp:703
+#: src/libslic3r/SLAPrint.cpp:655
 msgid "Initial exposition time is out of printer profile bounds."
 msgstr ""
 "O tempo de exposição inicial está fora dos limites do perfil da impressora."
 
-#: src/libslic3r/SLAPrint.cpp:787
+#: src/libslic3r/SLAPrint.cpp:762
+msgid "Slicing done"
+msgstr "Fatiamento pronto"
+
+#: src/libslic3r/SLAPrintSteps.cpp:43
+msgid "Hollowing model"
+msgstr "Deixar oco o modelo"
+
+#: src/libslic3r/SLAPrintSteps.cpp:44
+msgid "Drilling holes into model."
+msgstr "Furando o modelo"
+
+#: src/libslic3r/SLAPrintSteps.cpp:45
+msgid "Slicing model"
+msgstr "Modelo de fatiamento"
+
+#: src/libslic3r/SLAPrintSteps.cpp:46 src/libslic3r/SLAPrintSteps.cpp:356
+msgid "Generating support points"
+msgstr "Gerando pontos de suporte"
+
+#: src/libslic3r/SLAPrintSteps.cpp:47
+msgid "Generating support tree"
+msgstr "Gerando suporte em árvore"
+
+#: src/libslic3r/SLAPrintSteps.cpp:48
+msgid "Generating pad"
+msgstr "Gerando pad"
+
+#: src/libslic3r/SLAPrintSteps.cpp:49
+msgid "Slicing supports"
+msgstr "Fatiando suportes"
+
+#: src/libslic3r/SLAPrintSteps.cpp:64
+msgid "Merging slices and calculating statistics"
+msgstr "Mesclando camadas e calculando estatísticas"
+
+#: src/libslic3r/SLAPrintSteps.cpp:65
+msgid "Rasterizing layers"
+msgstr "Rasterizando camadas"
+
+#: src/libslic3r/SLAPrintSteps.cpp:190
+msgid "Too much overlapping holes."
+msgstr "Muitos buracos sobrepostos."
+
+#: src/libslic3r/SLAPrintSteps.cpp:199
+msgid ""
+"Drilling holes into the mesh failed. This is usually caused by broken model. "
+"Try to fix it first."
+msgstr ""
+"Os furos de perfuração na malha falharam. Isso geralmente é causado por "
+"modelo quebrado. Tente consertá-lo primeiro."
+
+#: src/libslic3r/SLAPrintSteps.cpp:245
 msgid ""
 "Slicing had to be stopped due to an internal error: Inconsistent slice index."
 msgstr ""
 "O fatiamento teve que ser parado devido a um erro interno: índice de "
 "fatiamento inconsistente."
 
-#: src/libslic3r/SLAPrint.cpp:982 src/libslic3r/SLAPrint.cpp:992
-#: src/libslic3r/SLAPrint.cpp:1033
+#: src/libslic3r/SLAPrintSteps.cpp:413 src/libslic3r/SLAPrintSteps.cpp:422
+#: src/libslic3r/SLAPrintSteps.cpp:461
 msgid "Visualizing supports"
 msgstr "Visualizando suportes"
 
-#: src/libslic3r/SLAPrint.cpp:1566
-msgid "Slicing done"
-msgstr "Fatiamento pronto"
+#: src/libslic3r/SLAPrintSteps.cpp:453
+msgid "No pad can be generated for this model with the current configuration"
+msgstr "Nenhum pad pode ser gerado para este modelo com a configuração atual"
+
+#: src/libslic3r/SLAPrintSteps.cpp:621
+msgid ""
+"There are unprintable objects. Try to adjust support settings to make the "
+"objects printable."
+msgstr ""
+"Há objetos imprimíveis. Tente ajustar as configurações de suporte para "
+"tornar os objetos imprimíveis."
 
 #: src/libslic3r/PrintBase.cpp:71
 msgid "Failed processing of the output_filename_format template."
@@ -5776,7 +7063,11 @@ msgstr "Textura customizada da mesa"
 msgid "Bed custom model"
 msgstr "Modelo customizado da mesa"
 
-#: src/libslic3r/PrintConfig.cpp:68
+#: src/libslic3r/PrintConfig.cpp:66
+msgid "Picture sizes to be stored into a .gcode and .sl1 files"
+msgstr "Tamanhos de imagem a serem armazenados em arquivos .gcode e .sl1"
+
+#: src/libslic3r/PrintConfig.cpp:73
 msgid ""
 "This setting controls the height (and thus the total number) of the slices/"
 "layers. Thinner layers give better accuracy but take more time to print."
@@ -5785,11 +7076,11 @@ msgstr ""
 "camadas. Camadas mais finas dão melhor precisão, mas levam mais tempo para "
 "imprimir."
 
-#: src/libslic3r/PrintConfig.cpp:75
+#: src/libslic3r/PrintConfig.cpp:80
 msgid "Max print height"
 msgstr "Altura máxima de impressão"
 
-#: src/libslic3r/PrintConfig.cpp:76
+#: src/libslic3r/PrintConfig.cpp:81
 msgid ""
 "Set this to the maximum height that can be reached by your extruder while "
 "printing."
@@ -5797,11 +7088,11 @@ msgstr ""
 "Defina isto para a altura máxima que pode ser alcançada pela sua extrusora "
 "durante a impressão."
 
-#: src/libslic3r/PrintConfig.cpp:82
+#: src/libslic3r/PrintConfig.cpp:87
 msgid "Slice gap closing radius"
 msgstr "Raio de fechamento da abertura da fatia"
 
-#: src/libslic3r/PrintConfig.cpp:84
+#: src/libslic3r/PrintConfig.cpp:89
 msgid ""
 "Cracks smaller than 2x gap closing radius are being filled during the "
 "triangle mesh slicing. The gap closing operation may reduce the final print "
@@ -5812,11 +7103,11 @@ msgstr ""
 "fechamento de vão pode reduzir a resolução final de impressão, portanto, é "
 "aconselhável manter o valor razoavelmente baixo."
 
-#: src/libslic3r/PrintConfig.cpp:92
+#: src/libslic3r/PrintConfig.cpp:97
 msgid "Hostname, IP or URL"
 msgstr "Hostname, IP ou URL"
 
-#: src/libslic3r/PrintConfig.cpp:93
+#: src/libslic3r/PrintConfig.cpp:98
 msgid ""
 "Slic3r can upload G-code files to a printer host. This field should contain "
 "the hostname, IP address or URL of the printer host instance."
@@ -5825,11 +7116,11 @@ msgstr ""
 "campo deve conter o nome de host, o endereço IP ou a URL da instância de "
 "host da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:99
+#: src/libslic3r/PrintConfig.cpp:104
 msgid "API Key / Password"
 msgstr "Chave de API/senha"
 
-#: src/libslic3r/PrintConfig.cpp:100
+#: src/libslic3r/PrintConfig.cpp:105
 msgid ""
 "Slic3r can upload G-code files to a printer host. This field should contain "
 "the API Key or the password required for authentication."
@@ -5837,11 +7128,7 @@ msgstr ""
 "Slic3r pode carregar arquivos de G-code para um host de impressora. Este "
 "campo deve conter a chave de API ou a senha exigida para a autenticação."
 
-#: src/libslic3r/PrintConfig.cpp:106
-msgid "HTTPS CA File"
-msgstr "Arquivo de CA HTTPS"
-
-#: src/libslic3r/PrintConfig.cpp:107
+#: src/libslic3r/PrintConfig.cpp:112
 msgid ""
 "Custom CA certificate file can be specified for HTTPS OctoPrint connections, "
 "in crt/pem format. If left blank, the default OS CA certificate repository "
@@ -5851,11 +7138,23 @@ msgstr ""
 "conexões HTTPS OctoPrint, no formato CRT/PEM. Se deixado em branco, o "
 "repositório de certificados do OS CA padrão é usado."
 
-#: src/libslic3r/PrintConfig.cpp:121
+#: src/libslic3r/PrintConfig.cpp:118
+msgid "Elephant foot compensation"
+msgstr "Compensação do pé do elefante"
+
+#: src/libslic3r/PrintConfig.cpp:120
+msgid ""
+"The first layer will be shrunk in the XY plane by the configured value to "
+"compensate for the 1st layer squish aka an Elephant Foot effect."
+msgstr ""
+"A primeira camada será encolhido no plano XY pelo valor config.urado para "
+"compensar a 1ª camada esmagada, também conhecida como pé de elefante."
+
+#: src/libslic3r/PrintConfig.cpp:136
 msgid "Avoid crossing perimeters"
 msgstr "Evitar cruzamento de perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:122
+#: src/libslic3r/PrintConfig.cpp:137
 msgid ""
 "Optimize travel moves in order to minimize the crossing of perimeters. This "
 "is mostly useful with Bowden extruders which suffer from oozing. This "
@@ -5865,11 +7164,11 @@ msgstr ""
 "Isto é principalmente útil com extrusoras Bowden que sofrem de escorrimento. "
 "Este recurso retarda a impressão e a geração de G-code."
 
-#: src/libslic3r/PrintConfig.cpp:129 src/libslic3r/PrintConfig.cpp:2027
+#: src/libslic3r/PrintConfig.cpp:144 src/libslic3r/PrintConfig.cpp:2064
 msgid "Other layers"
 msgstr "Outras camadas"
 
-#: src/libslic3r/PrintConfig.cpp:130
+#: src/libslic3r/PrintConfig.cpp:145
 msgid ""
 "Bed temperature for layers after the first one. Set this to zero to disable "
 "bed temperature control commands in the output."
@@ -5877,11 +7176,11 @@ msgstr ""
 "Temperatura da mesa para camadas após o primeiro. Defina isso como zero para "
 "desabilitar os comandos de controle de temperatura da mesa na saída."
 
-#: src/libslic3r/PrintConfig.cpp:132
+#: src/libslic3r/PrintConfig.cpp:147
 msgid "Bed temperature"
 msgstr "Temperatura da mesa"
 
-#: src/libslic3r/PrintConfig.cpp:139
+#: src/libslic3r/PrintConfig.cpp:154
 msgid ""
 "This custom code is inserted at every layer change, right before the Z move. "
 "Note that you can use placeholder variables for all Slic3r settings as well "
@@ -5891,11 +7190,11 @@ msgstr ""
 "da movimentação Z. Observe que você pode usar variáveis de espaço reservado "
 "para todas as config. Slic3r, bem como [layer_num] e [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:149
+#: src/libslic3r/PrintConfig.cpp:164
 msgid "Between objects G-code"
 msgstr "G-code entre objetos"
 
-#: src/libslic3r/PrintConfig.cpp:150
+#: src/libslic3r/PrintConfig.cpp:165
 msgid ""
 "This code is inserted between objects when using sequential printing. By "
 "default extruder and bed temperature are reset using non-wait command; "
@@ -5912,19 +7211,32 @@ msgstr ""
 "Slic3r, para que você possa colocar um comando \"M109 S "
 "[temperatura_primeira_camada]\" onde quiser."
 
-#: src/libslic3r/PrintConfig.cpp:161
+#: src/libslic3r/PrintConfig.cpp:176
 msgid "Number of solid layers to generate on bottom surfaces."
 msgstr "Número de camadas sólidas para gerar em superfícies inferiores."
 
-#: src/libslic3r/PrintConfig.cpp:162
+#: src/libslic3r/PrintConfig.cpp:177
 msgid "Bottom solid layers"
 msgstr "Camadas sólidas inferiores"
 
-#: src/libslic3r/PrintConfig.cpp:167
+#: src/libslic3r/PrintConfig.cpp:185
+msgid ""
+"The number of bottom solid layers is increased above bottom_solid_layers if "
+"necessary to satisfy minimum thickness of bottom shell."
+msgstr ""
+"O número de camadas sólidas inferiores é aumentado acima de "
+"bottom_solid_layers se necessário para satisfazer a espessura mínima da "
+"camada inferior."
+
+#: src/libslic3r/PrintConfig.cpp:187
+msgid "Minimum bottom shell thickness"
+msgstr "Espessura mínima da casca inferior"
+
+#: src/libslic3r/PrintConfig.cpp:193
 msgid "Bridge"
 msgstr "Ponte"
 
-#: src/libslic3r/PrintConfig.cpp:168
+#: src/libslic3r/PrintConfig.cpp:194
 msgid ""
 "This is the acceleration your printer will use for bridges. Set zero to "
 "disable acceleration control for bridges."
@@ -5932,18 +7244,18 @@ msgstr ""
 "Esta é a aceleração que sua impressora usará para pontes. Defina zero para "
 "desabilitar o controle de aceleração para pontes."
 
-#: src/libslic3r/PrintConfig.cpp:170 src/libslic3r/PrintConfig.cpp:313
-#: src/libslic3r/PrintConfig.cpp:840 src/libslic3r/PrintConfig.cpp:961
-#: src/libslic3r/PrintConfig.cpp:1130 src/libslic3r/PrintConfig.cpp:1183
-#: src/libslic3r/PrintConfig.cpp:1194 src/libslic3r/PrintConfig.cpp:1383
+#: src/libslic3r/PrintConfig.cpp:196 src/libslic3r/PrintConfig.cpp:339
+#: src/libslic3r/PrintConfig.cpp:862 src/libslic3r/PrintConfig.cpp:984
+#: src/libslic3r/PrintConfig.cpp:1152 src/libslic3r/PrintConfig.cpp:1201
+#: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1403
 msgid "mm/s²"
 msgstr "mm/s²"
 
-#: src/libslic3r/PrintConfig.cpp:176
+#: src/libslic3r/PrintConfig.cpp:202
 msgid "Bridging angle"
 msgstr "Ângulo de ponte"
 
-#: src/libslic3r/PrintConfig.cpp:178
+#: src/libslic3r/PrintConfig.cpp:204
 msgid ""
 "Bridging angle override. If left to zero, the bridging angle will be "
 "calculated automatically. Otherwise the provided angle will be used for all "
@@ -5953,35 +7265,35 @@ msgstr ""
 "calculado automaticamente. Caso contrário, o ângulo fornecido será usado "
 "para todas as pontes. Use 180 ° para o ângulo zero."
 
-#: src/libslic3r/PrintConfig.cpp:181 src/libslic3r/PrintConfig.cpp:758
-#: src/libslic3r/PrintConfig.cpp:1619 src/libslic3r/PrintConfig.cpp:1629
-#: src/libslic3r/PrintConfig.cpp:1858 src/libslic3r/PrintConfig.cpp:2012
-#: src/libslic3r/PrintConfig.cpp:2197 src/libslic3r/PrintConfig.cpp:2614
-#: src/libslic3r/PrintConfig.cpp:2724
+#: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780
+#: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650
+#: src/libslic3r/PrintConfig.cpp:1894 src/libslic3r/PrintConfig.cpp:2049
+#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2737
+#: src/libslic3r/PrintConfig.cpp:2858
 msgid "°"
 msgstr "°"
 
-#: src/libslic3r/PrintConfig.cpp:187
+#: src/libslic3r/PrintConfig.cpp:213
 msgid "Bridges fan speed"
 msgstr "Velocidade da ventoinha nas pontes"
 
-#: src/libslic3r/PrintConfig.cpp:188
+#: src/libslic3r/PrintConfig.cpp:214
 msgid "This fan speed is enforced during all bridges and overhangs."
 msgstr ""
 "Esta velocidade da ventoinha é imposta durante todas as pontes e angulações."
 
-#: src/libslic3r/PrintConfig.cpp:189 src/libslic3r/PrintConfig.cpp:770
-#: src/libslic3r/PrintConfig.cpp:1203 src/libslic3r/PrintConfig.cpp:1266
-#: src/libslic3r/PrintConfig.cpp:1511 src/libslic3r/PrintConfig.cpp:2366
-#: src/libslic3r/PrintConfig.cpp:2654
+#: src/libslic3r/PrintConfig.cpp:215 src/libslic3r/PrintConfig.cpp:792
+#: src/libslic3r/PrintConfig.cpp:1219 src/libslic3r/PrintConfig.cpp:1282
+#: src/libslic3r/PrintConfig.cpp:1532 src/libslic3r/PrintConfig.cpp:2425
+#: src/libslic3r/PrintConfig.cpp:2777
 msgid "%"
 msgstr "%"
 
-#: src/libslic3r/PrintConfig.cpp:196
+#: src/libslic3r/PrintConfig.cpp:222
 msgid "Bridge flow ratio"
 msgstr "Relação de fluxo da ponte"
 
-#: src/libslic3r/PrintConfig.cpp:198
+#: src/libslic3r/PrintConfig.cpp:224
 msgid ""
 "This factor affects the amount of plastic for bridging. You can decrease it "
 "slightly to pull the extrudates and prevent sagging, although default "
@@ -5993,32 +7305,32 @@ msgstr ""
 "padrão são geralmente boas e você deve experimentar com refrigeração (use "
 "uma ventoinha) antes de ajustes isso."
 
-#: src/libslic3r/PrintConfig.cpp:208
+#: src/libslic3r/PrintConfig.cpp:234
 msgid "Bridges"
 msgstr "Pontes"
 
-#: src/libslic3r/PrintConfig.cpp:210
+#: src/libslic3r/PrintConfig.cpp:236
 msgid "Speed for printing bridges."
 msgstr "Velocidade para a impressão de pontes."
 
-#: src/libslic3r/PrintConfig.cpp:211 src/libslic3r/PrintConfig.cpp:592
-#: src/libslic3r/PrintConfig.cpp:600 src/libslic3r/PrintConfig.cpp:609
-#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:644
-#: src/libslic3r/PrintConfig.cpp:663 src/libslic3r/PrintConfig.cpp:899
-#: src/libslic3r/PrintConfig.cpp:1026 src/libslic3r/PrintConfig.cpp:1112
-#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1161
-#: src/libslic3r/PrintConfig.cpp:1172 src/libslic3r/PrintConfig.cpp:1225
-#: src/libslic3r/PrintConfig.cpp:1284 src/libslic3r/PrintConfig.cpp:1412
-#: src/libslic3r/PrintConfig.cpp:1586 src/libslic3r/PrintConfig.cpp:1595
-#: src/libslic3r/PrintConfig.cpp:1991 src/libslic3r/PrintConfig.cpp:2104
+#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:609
+#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:626
+#: src/libslic3r/PrintConfig.cpp:634 src/libslic3r/PrintConfig.cpp:661
+#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:922
+#: src/libslic3r/PrintConfig.cpp:1050 src/libslic3r/PrintConfig.cpp:1135
+#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1181
+#: src/libslic3r/PrintConfig.cpp:1191 src/libslic3r/PrintConfig.cpp:1241
+#: src/libslic3r/PrintConfig.cpp:1300 src/libslic3r/PrintConfig.cpp:1433
+#: src/libslic3r/PrintConfig.cpp:1607 src/libslic3r/PrintConfig.cpp:1616
+#: src/libslic3r/PrintConfig.cpp:2028 src/libslic3r/PrintConfig.cpp:2154
 msgid "mm/s"
 msgstr "mm/s"
 
-#: src/libslic3r/PrintConfig.cpp:218
+#: src/libslic3r/PrintConfig.cpp:244
 msgid "Brim width"
 msgstr "Largura da aba"
 
-#: src/libslic3r/PrintConfig.cpp:219
+#: src/libslic3r/PrintConfig.cpp:245
 msgid ""
 "Horizontal width of the brim that will be printed around each object on the "
 "first layer."
@@ -6026,11 +7338,11 @@ msgstr ""
 "Largura horizontal da aba que será impressa em torno de cada objeto na "
 "primeira camada."
 
-#: src/libslic3r/PrintConfig.cpp:226
+#: src/libslic3r/PrintConfig.cpp:252
 msgid "Clip multi-part objects"
 msgstr "Clip objetos de várias partes"
 
-#: src/libslic3r/PrintConfig.cpp:227
+#: src/libslic3r/PrintConfig.cpp:253
 msgid ""
 "When printing multi-material objects, this settings will make Slic3r to clip "
 "the overlapping object parts one by the other (2nd part will be clipped by "
@@ -6040,19 +7352,19 @@ msgstr ""
 "Slic3r recorte as partes do objeto sobrepostas uma pela outra (2ª parte será "
 "cortada pela 1ª, 3ª parte será cortada pela 1ª e 2ª, etc.)."
 
-#: src/libslic3r/PrintConfig.cpp:234
+#: src/libslic3r/PrintConfig.cpp:260
 msgid "Colorprint height"
 msgstr "Altura da impressão colorida"
 
-#: src/libslic3r/PrintConfig.cpp:235
+#: src/libslic3r/PrintConfig.cpp:261
 msgid "Heights at which a filament change is to occur."
 msgstr "Alturas em que uma mudança do filamento ocorre."
 
-#: src/libslic3r/PrintConfig.cpp:245
+#: src/libslic3r/PrintConfig.cpp:271
 msgid "Compatible printers condition"
 msgstr "Condição de impressoras compatíveis"
 
-#: src/libslic3r/PrintConfig.cpp:246
+#: src/libslic3r/PrintConfig.cpp:272
 msgid ""
 "A boolean expression using the configuration values of an active printer "
 "profile. If this expression evaluates to true, this profile is considered "
@@ -6062,11 +7374,11 @@ msgstr ""
 "impressora ativo. Se essa expressão for avaliada como verdadeira, esse "
 "perfil será considerado compatível com o perfil de impressora ativo."
 
-#: src/libslic3r/PrintConfig.cpp:260
+#: src/libslic3r/PrintConfig.cpp:286
 msgid "Compatible print profiles condition"
 msgstr "Condição de perfis de impressão compatíveis"
 
-#: src/libslic3r/PrintConfig.cpp:261
+#: src/libslic3r/PrintConfig.cpp:287
 msgid ""
 "A boolean expression using the configuration values of an active print "
 "profile. If this expression evaluates to true, this profile is considered "
@@ -6076,11 +7388,11 @@ msgstr ""
 "impressão ativo. Se essa expressão for avaliada como verdadeira, esse perfil "
 "será considerado compatível com o perfil de impressão ativo."
 
-#: src/libslic3r/PrintConfig.cpp:278
+#: src/libslic3r/PrintConfig.cpp:304
 msgid "Complete individual objects"
 msgstr "Complete objetos individuais"
 
-#: src/libslic3r/PrintConfig.cpp:279
+#: src/libslic3r/PrintConfig.cpp:305
 msgid ""
 "When printing multiple objects or copies, this feature will complete each "
 "object before moving onto next one (and starting it from its bottom layer). "
@@ -6092,11 +7404,11 @@ msgstr ""
 "recurso é útil para evitar o risco de impressões arruinadas. Slic3r deve "
 "avisar e impedi-lo de colisões de extrusoras, mas cuidado."
 
-#: src/libslic3r/PrintConfig.cpp:287
+#: src/libslic3r/PrintConfig.cpp:313
 msgid "Enable auto cooling"
 msgstr "Ativar o resfriamento automático"
 
-#: src/libslic3r/PrintConfig.cpp:288
+#: src/libslic3r/PrintConfig.cpp:314
 msgid ""
 "This flag enables the automatic cooling logic that adjusts print speed and "
 "fan speed according to layer printing time."
@@ -6105,26 +7417,26 @@ msgstr ""
 "velocidade de impressão e a velocidade do ventoinha de acordo com o tempo de "
 "impressão da camada."
 
-#: src/libslic3r/PrintConfig.cpp:293
+#: src/libslic3r/PrintConfig.cpp:319
 msgid "Cooling tube position"
 msgstr "Posição do tubo de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:294
+#: src/libslic3r/PrintConfig.cpp:320
 msgid "Distance of the center-point of the cooling tube from the extruder tip."
 msgstr ""
 "Distância do ponto central do tubo de resfriamento da ponta da extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:301
+#: src/libslic3r/PrintConfig.cpp:327
 msgid "Cooling tube length"
 msgstr "Comprimento do tubo de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:302
+#: src/libslic3r/PrintConfig.cpp:328
 msgid "Length of the cooling tube to limit space for cooling moves inside it."
 msgstr ""
 "Comprimento do tubo de resfriamento para limitar o espaço para movimentos de "
 "resfriamento dentro dele."
 
-#: src/libslic3r/PrintConfig.cpp:310
+#: src/libslic3r/PrintConfig.cpp:336
 msgid ""
 "This is the acceleration your printer will be reset to after the role-"
 "specific acceleration values are used (perimeter/infill). Set zero to "
@@ -6134,11 +7446,11 @@ msgstr ""
 "valores de aceleração específicos da função forem usados (perímetro/"
 "preenchimento). Defina zero para evitar redefinir a aceleração em tudo."
 
-#: src/libslic3r/PrintConfig.cpp:319
+#: src/libslic3r/PrintConfig.cpp:345
 msgid "Default filament profile"
 msgstr "Perfil de filamento padrão"
 
-#: src/libslic3r/PrintConfig.cpp:320
+#: src/libslic3r/PrintConfig.cpp:346
 msgid ""
 "Default filament profile associated with the current printer profile. On "
 "selection of the current printer profile, this filament profile will be "
@@ -6147,12 +7459,12 @@ msgstr ""
 "Perfil de filamento padrão associado ao perfil de impressora atual. Na "
 "seleção do perfil da impressora atual, este perfil de filamento será ativado."
 
-#: src/libslic3r/PrintConfig.cpp:326
+#: src/libslic3r/PrintConfig.cpp:352
 msgid "Default print profile"
 msgstr "Perfil de impressão padrão"
 
-#: src/libslic3r/PrintConfig.cpp:327 src/libslic3r/PrintConfig.cpp:2479
-#: src/libslic3r/PrintConfig.cpp:2490
+#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:2592
+#: src/libslic3r/PrintConfig.cpp:2603
 msgid ""
 "Default print profile associated with the current printer profile. On "
 "selection of the current printer profile, this print profile will be "
@@ -6161,11 +7473,11 @@ msgstr ""
 "Perfil de impressão padrão associado ao perfil de impressora atual. Na "
 "seleção do perfil de impressora atual, este perfil de impressão será ativado."
 
-#: src/libslic3r/PrintConfig.cpp:333
+#: src/libslic3r/PrintConfig.cpp:359
 msgid "Disable fan for the first"
 msgstr "Desabilite o ventoinha para a(s) primeira(s)"
 
-#: src/libslic3r/PrintConfig.cpp:334
+#: src/libslic3r/PrintConfig.cpp:360
 msgid ""
 "You can set this to a positive value to disable fan at all during the first "
 "layers, so that it does not make adhesion worse."
@@ -6173,18 +7485,11 @@ msgstr ""
 "Você pode ajustar isto a um valor positivo para desabilitar a ventoinha "
 "durante as primeiras camadas, de modo que melhore a adesão."
 
-#: src/libslic3r/PrintConfig.cpp:336 src/libslic3r/PrintConfig.cpp:971
-#: src/libslic3r/PrintConfig.cpp:1484 src/libslic3r/PrintConfig.cpp:1669
-#: src/libslic3r/PrintConfig.cpp:1730 src/libslic3r/PrintConfig.cpp:1894
-#: src/libslic3r/PrintConfig.cpp:1939
-msgid "layers"
-msgstr "camadas"
-
-#: src/libslic3r/PrintConfig.cpp:343
+#: src/libslic3r/PrintConfig.cpp:369
 msgid "Don't support bridges"
 msgstr "Não suporte pontes"
 
-#: src/libslic3r/PrintConfig.cpp:345
+#: src/libslic3r/PrintConfig.cpp:371
 msgid ""
 "Experimental option for preventing support material from being generated "
 "under bridged areas."
@@ -6192,27 +7497,15 @@ msgstr ""
 "Opção experimental para impedir que o material de suporte seja gerado em "
 "áreas com ponte."
 
-#: src/libslic3r/PrintConfig.cpp:351
+#: src/libslic3r/PrintConfig.cpp:377
 msgid "Distance between copies"
 msgstr "Distância entre cópias"
 
-#: src/libslic3r/PrintConfig.cpp:352
+#: src/libslic3r/PrintConfig.cpp:378
 msgid "Distance used for the auto-arrange feature of the plater."
-msgstr "Distância usada para o recurso de organizar automaticamente o prato."
+msgstr "Distância usada para o recurso de organizar automaticamente a bandeja."
 
-#: src/libslic3r/PrintConfig.cpp:359
-msgid "Elephant foot compensation"
-msgstr "Compensação do pé do elefante"
-
-#: src/libslic3r/PrintConfig.cpp:361
-msgid ""
-"The first layer will be shrunk in the XY plane by the configured value to "
-"compensate for the 1st layer squish aka an Elephant Foot effect."
-msgstr ""
-"A primeira camada será encolhido no plano XY pelo valor config.urado para "
-"compensar a 1ª camada esmagada, também conhecida como pé de elefante."
-
-#: src/libslic3r/PrintConfig.cpp:370
+#: src/libslic3r/PrintConfig.cpp:386
 msgid ""
 "This end procedure is inserted at the end of the output file. Note that you "
 "can use placeholder variables for all PrusaSlicer settings."
@@ -6221,7 +7514,7 @@ msgstr ""
 "você pode usar variáveis de espaço reservado para todas as config. de "
 "PrusaSlicer."
 
-#: src/libslic3r/PrintConfig.cpp:380
+#: src/libslic3r/PrintConfig.cpp:396
 msgid ""
 "This end procedure is inserted at the end of the output file, before the "
 "printer end gcode (and before any toolchange from this filament in case of "
@@ -6235,11 +7528,11 @@ msgstr ""
 "usar variáveis de espaço reservado para todas as config. de PrusaSlicer. Se "
 "você tiver várias extrusoras, o Gcode é processado em ordem de extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:391
+#: src/libslic3r/PrintConfig.cpp:407
 msgid "Ensure vertical shell thickness"
 msgstr "Assegure a espessura vertical da parede"
 
-#: src/libslic3r/PrintConfig.cpp:393
+#: src/libslic3r/PrintConfig.cpp:409
 msgid ""
 "Add solid infill near sloping surfaces to guarantee the vertical shell "
 "thickness (top+bottom solid layers)."
@@ -6247,11 +7540,11 @@ msgstr ""
 "Adicionar preenchimento sólido perto de superfícies inclinadas para garantir "
 "a espessura do escudo vertical (camadas sólidas no topo + base )."
 
-#: src/libslic3r/PrintConfig.cpp:399
+#: src/libslic3r/PrintConfig.cpp:415
 msgid "Top fill pattern"
 msgstr "Padrão de preenchimento do topo"
 
-#: src/libslic3r/PrintConfig.cpp:401
+#: src/libslic3r/PrintConfig.cpp:417
 msgid ""
 "Fill pattern for top infill. This only affects the top visible layer, and "
 "not its adjacent solid shells."
@@ -6259,32 +7552,32 @@ msgstr ""
 "Padrão de preenchimento para preenchimento do topo. Isto afeta somente a "
 "camada visível superior, e não suas paredes adjacentes."
 
-#: src/libslic3r/PrintConfig.cpp:409 src/libslic3r/PrintConfig.cpp:821
-#: src/libslic3r/PrintConfig.cpp:1972
+#: src/libslic3r/PrintConfig.cpp:425 src/libslic3r/PrintConfig.cpp:843
+#: src/libslic3r/PrintConfig.cpp:2009
 msgid "Rectilinear"
 msgstr "Rectilíneo"
 
-#: src/libslic3r/PrintConfig.cpp:410 src/libslic3r/PrintConfig.cpp:827
+#: src/libslic3r/PrintConfig.cpp:426 src/libslic3r/PrintConfig.cpp:849
 msgid "Concentric"
 msgstr "Concêntrico"
 
-#: src/libslic3r/PrintConfig.cpp:411 src/libslic3r/PrintConfig.cpp:831
+#: src/libslic3r/PrintConfig.cpp:427 src/libslic3r/PrintConfig.cpp:853
 msgid "Hilbert Curve"
 msgstr "Curva de Hilbert"
 
-#: src/libslic3r/PrintConfig.cpp:412 src/libslic3r/PrintConfig.cpp:832
+#: src/libslic3r/PrintConfig.cpp:428 src/libslic3r/PrintConfig.cpp:854
 msgid "Archimedean Chords"
 msgstr "Cordas Archimedean"
 
-#: src/libslic3r/PrintConfig.cpp:413 src/libslic3r/PrintConfig.cpp:833
+#: src/libslic3r/PrintConfig.cpp:429 src/libslic3r/PrintConfig.cpp:855
 msgid "Octagram Spiral"
 msgstr "Espiral estrelado"
 
-#: src/libslic3r/PrintConfig.cpp:419
+#: src/libslic3r/PrintConfig.cpp:435
 msgid "Bottom fill pattern"
 msgstr "Padrão de preenchimento da base"
 
-#: src/libslic3r/PrintConfig.cpp:421
+#: src/libslic3r/PrintConfig.cpp:437
 msgid ""
 "Fill pattern for bottom infill. This only affects the bottom external "
 "visible layer, and not its adjacent solid shells."
@@ -6292,11 +7585,11 @@ msgstr ""
 "Padrão de preenchimento para preenchimento da base. Isto afeta somente a "
 "camada visível externa inferior, e não suas paredes adjacentes."
 
-#: src/libslic3r/PrintConfig.cpp:430 src/libslic3r/PrintConfig.cpp:440
+#: src/libslic3r/PrintConfig.cpp:446 src/libslic3r/PrintConfig.cpp:457
 msgid "External perimeters"
 msgstr "Perímetros externos"
 
-#: src/libslic3r/PrintConfig.cpp:432
+#: src/libslic3r/PrintConfig.cpp:448
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for external "
 "perimeters. If left zero, default extrusion width will be used if set, "
@@ -6309,16 +7602,16 @@ msgstr ""
 "ponteira será usado. Se expresso em porcentagem(por exemplo 200%), será "
 "calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:435 src/libslic3r/PrintConfig.cpp:543
-#: src/libslic3r/PrintConfig.cpp:860 src/libslic3r/PrintConfig.cpp:872
-#: src/libslic3r/PrintConfig.cpp:992 src/libslic3r/PrintConfig.cpp:1017
-#: src/libslic3r/PrintConfig.cpp:1403 src/libslic3r/PrintConfig.cpp:1741
-#: src/libslic3r/PrintConfig.cpp:1847 src/libslic3r/PrintConfig.cpp:1915
-#: src/libslic3r/PrintConfig.cpp:2074
+#: src/libslic3r/PrintConfig.cpp:451 src/libslic3r/PrintConfig.cpp:560
+#: src/libslic3r/PrintConfig.cpp:882 src/libslic3r/PrintConfig.cpp:895
+#: src/libslic3r/PrintConfig.cpp:1015 src/libslic3r/PrintConfig.cpp:1041
+#: src/libslic3r/PrintConfig.cpp:1423 src/libslic3r/PrintConfig.cpp:1761
+#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:1951
+#: src/libslic3r/PrintConfig.cpp:2111
 msgid "mm or %"
 msgstr "mm ou %"
 
-#: src/libslic3r/PrintConfig.cpp:442
+#: src/libslic3r/PrintConfig.cpp:459
 msgid ""
 "This separate setting will affect the speed of external perimeters (the "
 "visible ones). If expressed as percentage (for example: 80%) it will be "
@@ -6328,17 +7621,17 @@ msgstr ""
 "visíveis). Se expresso em porcentagem(por exemplo: 80%) Ele será calculado "
 "sobre a velocidade de perímetros config. acima. Defina como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:445 src/libslic3r/PrintConfig.cpp:881
-#: src/libslic3r/PrintConfig.cpp:1700 src/libslic3r/PrintConfig.cpp:1751
-#: src/libslic3r/PrintConfig.cpp:1958 src/libslic3r/PrintConfig.cpp:2086
+#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:904
+#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1772
+#: src/libslic3r/PrintConfig.cpp:1995 src/libslic3r/PrintConfig.cpp:2124
 msgid "mm/s or %"
 msgstr "mm/s ou %"
 
-#: src/libslic3r/PrintConfig.cpp:452
+#: src/libslic3r/PrintConfig.cpp:469
 msgid "External perimeters first"
 msgstr "Perímetros externos primeiro"
 
-#: src/libslic3r/PrintConfig.cpp:454
+#: src/libslic3r/PrintConfig.cpp:471
 msgid ""
 "Print contour perimeters from the outermost one to the innermost one instead "
 "of the default inverse order."
@@ -6346,12 +7639,12 @@ msgstr ""
 "Imprima perímetros de contorno do mais externo para o mais interno em vez da "
 "ordem inversa padrão."
 
-#: src/libslic3r/PrintConfig.cpp:460
+#: src/libslic3r/PrintConfig.cpp:477
 msgid "Extra perimeters if needed"
 msgstr "Perímetros extras se necessário"
 
-#: src/libslic3r/PrintConfig.cpp:462
-#, c-format
+#: src/libslic3r/PrintConfig.cpp:479
+#, no-c-format
 msgid ""
 "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r "
 "keeps adding perimeters, until more than 70% of the loop immediately above "
@@ -6361,7 +7654,7 @@ msgstr ""
 "inclinados. Slic3r continua adicionando perímetros, até que mais de 70% o do "
 "loop imediatamente acima é suportado."
 
-#: src/libslic3r/PrintConfig.cpp:472
+#: src/libslic3r/PrintConfig.cpp:489
 msgid ""
 "The extruder to use (unless more specific extruder settings are specified). "
 "This value overrides perimeter and infill extruders, but not the support "
@@ -6371,7 +7664,7 @@ msgstr ""
 "sejam especificadas). Esse valor substitui as extrusoras de perímetro e "
 "preenchimento, mas não as extrusoras de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:484
+#: src/libslic3r/PrintConfig.cpp:501
 msgid ""
 "Set this to the vertical distance between your nozzle tip and (usually) the "
 "X carriage rods. In other words, this is the height of the clearance "
@@ -6383,11 +7676,7 @@ msgstr ""
 "torno de sua extrusora, e representa a profundidade máxima que a extrusora "
 "pode espreitar antes de colidir com outros objetos impressos."
 
-#: src/libslic3r/PrintConfig.cpp:494
-msgid "Radius"
-msgstr "Raio"
-
-#: src/libslic3r/PrintConfig.cpp:495
+#: src/libslic3r/PrintConfig.cpp:512
 msgid ""
 "Set this to the clearance radius around your extruder. If the extruder is "
 "not centered, choose the largest value for safety. This setting is used to "
@@ -6395,22 +7684,22 @@ msgid ""
 msgstr ""
 "Defina isso para o raio de folga em torno de sua extrusora. Se a extrusora "
 "não estiver centralizada, escolha o maior valor para a segurança. Essa "
-"config. é usada para verificar colisões e exibir a visualização gráfica no "
-"prato."
+"config. é usada para verificar colisões e exibir a visualização gráfica na "
+"bandeja."
 
-#: src/libslic3r/PrintConfig.cpp:505
+#: src/libslic3r/PrintConfig.cpp:522
 msgid "Extruder Color"
 msgstr "Cor da extrusora"
 
-#: src/libslic3r/PrintConfig.cpp:506 src/libslic3r/PrintConfig.cpp:566
+#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:583
 msgid "This is only used in the Slic3r interface as a visual help."
 msgstr "Isso é usado apenas na interface Slic3r como uma ajuda visual."
 
-#: src/libslic3r/PrintConfig.cpp:512
+#: src/libslic3r/PrintConfig.cpp:529
 msgid "Extruder offset"
 msgstr "Compensamento da extrusora"
 
-#: src/libslic3r/PrintConfig.cpp:513
+#: src/libslic3r/PrintConfig.cpp:530
 msgid ""
 "If your firmware doesn't handle the extruder displacement you need the G-"
 "code to take it into account. This option lets you specify the displacement "
@@ -6422,11 +7711,11 @@ msgstr ""
 "de cada extrusora em relação à primeira. Ele espera coordenadas positivas "
 "(eles serão subtraída da coordenada XY)."
 
-#: src/libslic3r/PrintConfig.cpp:522
+#: src/libslic3r/PrintConfig.cpp:539
 msgid "Extrusion axis"
 msgstr "Eixo de extrusão"
 
-#: src/libslic3r/PrintConfig.cpp:523
+#: src/libslic3r/PrintConfig.cpp:540
 msgid ""
 "Use this option to set the axis letter associated to your printer's extruder "
 "(usually E but some printers use A)."
@@ -6434,11 +7723,11 @@ msgstr ""
 "Use esta opção para definir a letra do eixo associada à extrusora da sua "
 "impressora (geralmente E, mas algumas impressoras usam A)."
 
-#: src/libslic3r/PrintConfig.cpp:528
+#: src/libslic3r/PrintConfig.cpp:545
 msgid "Extrusion multiplier"
 msgstr "Multiplicador de extrusão"
 
-#: src/libslic3r/PrintConfig.cpp:529
+#: src/libslic3r/PrintConfig.cpp:546
 msgid ""
 "This factor changes the amount of flow proportionally. You may need to tweak "
 "this setting to get nice surface finish and correct single wall widths. "
@@ -6451,11 +7740,11 @@ msgstr ""
 "0,9 e 1,1. Se você acha que precisa mudar isso mais, verifique o diâmetro do "
 "filamento e os passos configurados no firmware da extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:537
+#: src/libslic3r/PrintConfig.cpp:554
 msgid "Default extrusion width"
 msgstr "Largura de extrusão padrão"
 
-#: src/libslic3r/PrintConfig.cpp:539
+#: src/libslic3r/PrintConfig.cpp:556
 msgid ""
 "Set this to a non-zero value to allow a manual extrusion width. If left to "
 "zero, Slic3r derives extrusion widths from the nozzle diameter (see the "
@@ -6469,11 +7758,11 @@ msgstr ""
 "do perímetro, a largura de extrusão do preenchimento etc.). Se expresso como "
 "porcentagem (por exemplo: 230%), ele será calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:548
+#: src/libslic3r/PrintConfig.cpp:566
 msgid "Keep fan always on"
 msgstr "Mantenha a ventoinha sempre ligada"
 
-#: src/libslic3r/PrintConfig.cpp:549
+#: src/libslic3r/PrintConfig.cpp:567
 msgid ""
 "If this is enabled, fan will never be disabled and will be kept running at "
 "least at its minimum speed. Useful for PLA, harmful for ABS."
@@ -6482,11 +7771,11 @@ msgstr ""
 "funcionando pelo menos em sua velocidade mínima. Útil para o PLA, "
 "prejudicial para o ABS."
 
-#: src/libslic3r/PrintConfig.cpp:554
+#: src/libslic3r/PrintConfig.cpp:572
 msgid "Enable fan if layer print time is below"
 msgstr "Ative o ventoinha se o tempo de impressão da camada estiver abaixo"
 
-#: src/libslic3r/PrintConfig.cpp:555
+#: src/libslic3r/PrintConfig.cpp:573
 msgid ""
 "If layer print time is estimated below this number of seconds, fan will be "
 "enabled and its speed will be calculated by interpolating the minimum and "
@@ -6496,23 +7785,23 @@ msgstr ""
 "segundos, a ventoinha será ativada e sua velocidade será calculada "
 "interpolando as velocidades mínima e máxima."
 
-#: src/libslic3r/PrintConfig.cpp:557 src/libslic3r/PrintConfig.cpp:1687
+#: src/libslic3r/PrintConfig.cpp:575 src/libslic3r/PrintConfig.cpp:1708
 msgid "approximate seconds"
 msgstr "segundos aproximados"
 
-#: src/libslic3r/PrintConfig.cpp:571
+#: src/libslic3r/PrintConfig.cpp:588
 msgid "Filament notes"
 msgstr "Notas de filamento"
 
-#: src/libslic3r/PrintConfig.cpp:572
+#: src/libslic3r/PrintConfig.cpp:589
 msgid "You can put your notes regarding the filament here."
 msgstr "Você pode colocar suas anotações sobre o filamento aqui."
 
-#: src/libslic3r/PrintConfig.cpp:580 src/libslic3r/PrintConfig.cpp:1231
+#: src/libslic3r/PrintConfig.cpp:597 src/libslic3r/PrintConfig.cpp:1247
 msgid "Max volumetric speed"
 msgstr "Máxima velocidade volumétrica"
 
-#: src/libslic3r/PrintConfig.cpp:581
+#: src/libslic3r/PrintConfig.cpp:598
 msgid ""
 "Maximum volumetric speed allowed for this filament. Limits the maximum "
 "volumetric speed of a print to the minimum of print and filament volumetric "
@@ -6522,27 +7811,27 @@ msgstr ""
 "velocidade volumétrica máxima de uma impressão ao mínimo de velocidade "
 "volumétrica de impressão e de filamento. Defina como zero para nenhum limite."
 
-#: src/libslic3r/PrintConfig.cpp:590
+#: src/libslic3r/PrintConfig.cpp:607
 msgid "Loading speed"
 msgstr "Velocidade de carregamento"
 
-#: src/libslic3r/PrintConfig.cpp:591
+#: src/libslic3r/PrintConfig.cpp:608
 msgid "Speed used for loading the filament on the wipe tower."
 msgstr "Velocidade utilizada para carregar o filamento na torre de limpeza."
 
-#: src/libslic3r/PrintConfig.cpp:598
+#: src/libslic3r/PrintConfig.cpp:615
 msgid "Loading speed at the start"
 msgstr "Velocidade de carregamento no início"
 
-#: src/libslic3r/PrintConfig.cpp:599
+#: src/libslic3r/PrintConfig.cpp:616
 msgid "Speed used at the very beginning of loading phase."
 msgstr "Velocidade utilizada no início da fase de carregamento."
 
-#: src/libslic3r/PrintConfig.cpp:606
+#: src/libslic3r/PrintConfig.cpp:623
 msgid "Unloading speed"
 msgstr "Velocidade de descarregamento"
 
-#: src/libslic3r/PrintConfig.cpp:607
+#: src/libslic3r/PrintConfig.cpp:624
 msgid ""
 "Speed used for unloading the filament on the wipe tower (does not affect  "
 "initial part of unloading just after ramming)."
@@ -6550,22 +7839,22 @@ msgstr ""
 "Velocidade utilizada para descarregar o filamento na torre de limpeza (não "
 "afeta a parte inicial do descarregamento logo após o Ramming)."
 
-#: src/libslic3r/PrintConfig.cpp:615
+#: src/libslic3r/PrintConfig.cpp:632
 msgid "Unloading speed at the start"
 msgstr "Velocidade de descarregamento no início"
 
-#: src/libslic3r/PrintConfig.cpp:616
+#: src/libslic3r/PrintConfig.cpp:633
 msgid ""
 "Speed used for unloading the tip of the filament immediately after ramming."
 msgstr ""
 "Velocidade usada para descarregar a ponta do filamento imediatamente após o "
 "Ramming."
 
-#: src/libslic3r/PrintConfig.cpp:623
+#: src/libslic3r/PrintConfig.cpp:640
 msgid "Delay after unloading"
 msgstr "Atraso após o descarregamento"
 
-#: src/libslic3r/PrintConfig.cpp:624
+#: src/libslic3r/PrintConfig.cpp:641
 msgid ""
 "Time to wait after the filament is unloaded. May help to get reliable "
 "toolchanges with flexible materials that may need more time to shrink to "
@@ -6575,11 +7864,11 @@ msgstr ""
 "trocas de ferramenta confiáveis com materiais flexíveis que podem precisar "
 "de mais tempo para reduzir as dimensões originais."
 
-#: src/libslic3r/PrintConfig.cpp:633
+#: src/libslic3r/PrintConfig.cpp:650
 msgid "Number of cooling moves"
 msgstr "Número de movimentos de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:634
+#: src/libslic3r/PrintConfig.cpp:651
 msgid ""
 "Filament is cooled by being moved back and forth in the cooling tubes. "
 "Specify desired number of these moves."
@@ -6587,21 +7876,21 @@ msgstr ""
 "O filamento é resfriado por ser movido para frente e para trás nos tubos de "
 "resfriamento. Especifique o número desejado desses movimentos."
 
-#: src/libslic3r/PrintConfig.cpp:642
+#: src/libslic3r/PrintConfig.cpp:659
 msgid "Speed of the first cooling move"
 msgstr "Velocidade do primeiro movimento de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:643
+#: src/libslic3r/PrintConfig.cpp:660
 msgid "Cooling moves are gradually accelerating beginning at this speed."
 msgstr ""
 "Movimentos de resfriamento estão gradualmente acelerando a partir desta "
 "velocidade."
 
-#: src/libslic3r/PrintConfig.cpp:650
+#: src/libslic3r/PrintConfig.cpp:667
 msgid "Minimal purge on wipe tower"
 msgstr "Remoção mínima na torre da limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:651
+#: src/libslic3r/PrintConfig.cpp:668
 msgid ""
 "After a tool change, the exact position of the newly loaded filament inside "
 "the nozzle may not be known, and the filament pressure is likely not yet "
@@ -6616,25 +7905,25 @@ msgstr ""
 "Prime esta quantidade de material para a torre de limpeza para produzir "
 "sucessivas preenchimento ou sacrificial objeto extrusões de forma confiável."
 
-#: src/libslic3r/PrintConfig.cpp:655
+#: src/libslic3r/PrintConfig.cpp:672
 msgid "mm³"
 msgstr "mm³"
 
-#: src/libslic3r/PrintConfig.cpp:661
+#: src/libslic3r/PrintConfig.cpp:678
 msgid "Speed of the last cooling move"
 msgstr "Velocidade do último movimento de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:662
+#: src/libslic3r/PrintConfig.cpp:679
 msgid "Cooling moves are gradually accelerating towards this speed."
 msgstr ""
 "Movimentos de resfriamento estão gradualmente acelerando para esta "
 "velocidade."
 
-#: src/libslic3r/PrintConfig.cpp:669
+#: src/libslic3r/PrintConfig.cpp:686
 msgid "Filament load time"
 msgstr "Tempo de carga do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:670
+#: src/libslic3r/PrintConfig.cpp:687
 msgid ""
 "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new "
 "filament during a tool change (when executing the T code). This time is "
@@ -6645,11 +7934,11 @@ msgstr ""
 "código T). Esse tempo é adicionado ao tempo total de impressão pelo "
 "estimador de tempo do G-code."
 
-#: src/libslic3r/PrintConfig.cpp:677
+#: src/libslic3r/PrintConfig.cpp:694
 msgid "Ramming parameters"
 msgstr "Parâmetros de Ramming"
 
-#: src/libslic3r/PrintConfig.cpp:678
+#: src/libslic3r/PrintConfig.cpp:695
 msgid ""
 "This string is edited by RammingDialog and contains ramming specific "
 "parameters."
@@ -6657,11 +7946,11 @@ msgstr ""
 "Essa cadeia de caracteres é editada por rammingdialog e contém parâmetros "
 "específicos de Ramming."
 
-#: src/libslic3r/PrintConfig.cpp:684
+#: src/libslic3r/PrintConfig.cpp:701
 msgid "Filament unload time"
 msgstr "Tempo de descarregamento do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:685
+#: src/libslic3r/PrintConfig.cpp:702
 msgid ""
 "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a "
 "filament during a tool change (when executing the T code). This time is "
@@ -6672,7 +7961,7 @@ msgstr ""
 "o código T). Esse tempo é adicionado ao tempo total de impressão pelo "
 "estimador de tempo do G-code."
 
-#: src/libslic3r/PrintConfig.cpp:693
+#: src/libslic3r/PrintConfig.cpp:710
 msgid ""
 "Enter your filament diameter here. Good precision is required, so use a "
 "caliper and do multiple measurements along the filament, then compute the "
@@ -6682,11 +7971,12 @@ msgstr ""
 "paquímetro e fazer várias medições ao longo do filamento, em seguida, "
 "calcular a média."
 
-#: src/libslic3r/PrintConfig.cpp:700
+#: src/libslic3r/PrintConfig.cpp:717 src/libslic3r/PrintConfig.cpp:2503
+#: src/libslic3r/PrintConfig.cpp:2504
 msgid "Density"
 msgstr "Densidade"
 
-#: src/libslic3r/PrintConfig.cpp:701
+#: src/libslic3r/PrintConfig.cpp:718
 msgid ""
 "Enter your filament density here. This is only for statistical information. "
 "A decent way is to weigh a known length of filament and compute the ratio of "
@@ -6698,27 +7988,27 @@ msgstr ""
 "filamento e computar a relação do comprimento ao volume. Melhor é calcular o "
 "volume diretamente através do deslocamento."
 
-#: src/libslic3r/PrintConfig.cpp:704
+#: src/libslic3r/PrintConfig.cpp:721
 msgid "g/cm³"
 msgstr "g/cm³"
 
-#: src/libslic3r/PrintConfig.cpp:709
+#: src/libslic3r/PrintConfig.cpp:726
 msgid "Filament type"
 msgstr "Tipo de filamento"
 
-#: src/libslic3r/PrintConfig.cpp:710
+#: src/libslic3r/PrintConfig.cpp:727
 msgid "The filament material type for use in custom G-codes."
 msgstr "O tipo de material de filamento para uso em G-code customizados."
 
-#: src/libslic3r/PrintConfig.cpp:736
+#: src/libslic3r/PrintConfig.cpp:754
 msgid "Soluble material"
 msgstr "Material solúvel"
 
-#: src/libslic3r/PrintConfig.cpp:737
+#: src/libslic3r/PrintConfig.cpp:755
 msgid "Soluble material is most likely used for a soluble support."
 msgstr "O material solúvel é mais provável usado para um suporte solúvel."
 
-#: src/libslic3r/PrintConfig.cpp:743
+#: src/libslic3r/PrintConfig.cpp:761
 msgid ""
 "Enter your filament cost per kg here. This is only for statistical "
 "information."
@@ -6726,15 +8016,19 @@ msgstr ""
 "Insira o seu custo de filamento por kg aqui. Isto é apenas para informação "
 "estatística."
 
-#: src/libslic3r/PrintConfig.cpp:744
+#: src/libslic3r/PrintConfig.cpp:762
 msgid "money/kg"
 msgstr "dinheiro/kg"
 
-#: src/libslic3r/PrintConfig.cpp:753
+#: src/libslic3r/PrintConfig.cpp:771 src/libslic3r/PrintConfig.cpp:2587
+msgid "(Unknown)"
+msgstr "(Desconhecido)"
+
+#: src/libslic3r/PrintConfig.cpp:775
 msgid "Fill angle"
 msgstr "Ângulo de preenchimento"
 
-#: src/libslic3r/PrintConfig.cpp:755
+#: src/libslic3r/PrintConfig.cpp:777
 msgid ""
 "Default base angle for infill orientation. Cross-hatching will be applied to "
 "this. Bridges will be infilled using the best direction Slic3r can detect, "
@@ -6744,60 +8038,60 @@ msgstr ""
 "aplicada a isso. Pontes serão preenchidas usando a melhor direção Slic3r "
 "pode detectar, portanto, essa config. não vai afeta-los."
 
-#: src/libslic3r/PrintConfig.cpp:767
+#: src/libslic3r/PrintConfig.cpp:789
 msgid "Fill density"
 msgstr "Densidade de preenchimento"
 
-#: src/libslic3r/PrintConfig.cpp:769
+#: src/libslic3r/PrintConfig.cpp:791
 msgid "Density of internal infill, expressed in the range 0% - 100%."
 msgstr "Densidade de preenchimento interno, expresso na faixa de 0%-100%."
 
-#: src/libslic3r/PrintConfig.cpp:804
+#: src/libslic3r/PrintConfig.cpp:826
 msgid "Fill pattern"
 msgstr "Padrão de preenchimento"
 
-#: src/libslic3r/PrintConfig.cpp:806
+#: src/libslic3r/PrintConfig.cpp:828
 msgid "Fill pattern for general low-density infill."
 msgstr "Padrão de preenchimento para preenchimento de baixa densidade."
 
-#: src/libslic3r/PrintConfig.cpp:822
+#: src/libslic3r/PrintConfig.cpp:844
 msgid "Grid"
 msgstr "Grade"
 
-#: src/libslic3r/PrintConfig.cpp:823
+#: src/libslic3r/PrintConfig.cpp:845
 msgid "Triangles"
 msgstr "Triângulos"
 
-#: src/libslic3r/PrintConfig.cpp:824
+#: src/libslic3r/PrintConfig.cpp:846
 msgid "Stars"
 msgstr "Estrelas"
 
-#: src/libslic3r/PrintConfig.cpp:825
+#: src/libslic3r/PrintConfig.cpp:847
 msgid "Cubic"
 msgstr "Cúbico"
 
-#: src/libslic3r/PrintConfig.cpp:826
+#: src/libslic3r/PrintConfig.cpp:848
 msgid "Line"
 msgstr "Linha"
 
-#: src/libslic3r/PrintConfig.cpp:828 src/libslic3r/PrintConfig.cpp:1974
+#: src/libslic3r/PrintConfig.cpp:850 src/libslic3r/PrintConfig.cpp:2011
 msgid "Honeycomb"
 msgstr "Hexágono"
 
-#: src/libslic3r/PrintConfig.cpp:829
+#: src/libslic3r/PrintConfig.cpp:851
 msgid "3D Honeycomb"
 msgstr "Hexágono 3D"
 
-#: src/libslic3r/PrintConfig.cpp:830
+#: src/libslic3r/PrintConfig.cpp:852
 msgid "Gyroid"
 msgstr "Giróide"
 
-#: src/libslic3r/PrintConfig.cpp:837 src/libslic3r/PrintConfig.cpp:846
-#: src/libslic3r/PrintConfig.cpp:854 src/libslic3r/PrintConfig.cpp:887
+#: src/libslic3r/PrintConfig.cpp:859 src/libslic3r/PrintConfig.cpp:868
+#: src/libslic3r/PrintConfig.cpp:876 src/libslic3r/PrintConfig.cpp:910
 msgid "First layer"
 msgstr "Primeira camada"
 
-#: src/libslic3r/PrintConfig.cpp:838
+#: src/libslic3r/PrintConfig.cpp:860
 msgid ""
 "This is the acceleration your printer will use for first layer. Set zero to "
 "disable acceleration control for first layer."
@@ -6805,7 +8099,7 @@ msgstr ""
 "Esta é a aceleração que sua impressora usará para a primeira camada. Defina "
 "zero para desabilitar o controle de aceleração para a primeira camada."
 
-#: src/libslic3r/PrintConfig.cpp:847
+#: src/libslic3r/PrintConfig.cpp:869
 msgid ""
 "Heated build plate temperature for the first layer. Set this to zero to "
 "disable bed temperature control commands in the output."
@@ -6813,7 +8107,7 @@ msgstr ""
 "Temperatura da mesa aquecida para a primeira camada. Defina isso como zero "
 "para desabilitar os comandos de controle de temperatura da mesa na saída."
 
-#: src/libslic3r/PrintConfig.cpp:856
+#: src/libslic3r/PrintConfig.cpp:878
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for first "
 "layer. You can use this to force fatter extrudates for better adhesion. If "
@@ -6826,11 +8120,7 @@ msgstr ""
 "exemplo, 120%) será computado sobre a primeira altura da camada. Se definido "
 "como zero, ele usará a largura de extrusão padrão."
 
-#: src/libslic3r/PrintConfig.cpp:866
-msgid "First layer height"
-msgstr "Altura da primeira camada"
-
-#: src/libslic3r/PrintConfig.cpp:868
+#: src/libslic3r/PrintConfig.cpp:891
 msgid ""
 "When printing with very low layer heights, you might still want to print a "
 "thicker bottom layer to improve adhesion and tolerance for non perfect build "
@@ -6843,11 +8133,11 @@ msgstr ""
 "absoluto ou como uma porcentagem (por exemplo: 150%) sobre a altura da "
 "camada padrão."
 
-#: src/libslic3r/PrintConfig.cpp:877
+#: src/libslic3r/PrintConfig.cpp:900
 msgid "First layer speed"
 msgstr "Velocidade da primeira camada"
 
-#: src/libslic3r/PrintConfig.cpp:878
+#: src/libslic3r/PrintConfig.cpp:901
 msgid ""
 "If expressed as absolute value in mm/s, this speed will be applied to all "
 "the print moves of the first layer, regardless of their type. If expressed "
@@ -6858,7 +8148,7 @@ msgstr ""
 "seu tipo. Se expresso em porcentagem(por exemplo: 40%) Ele dimensionará as "
 "velocidades padrão."
 
-#: src/libslic3r/PrintConfig.cpp:888
+#: src/libslic3r/PrintConfig.cpp:911
 msgid ""
 "Extruder temperature for first layer. If you want to control temperature "
 "manually during print, set this to zero to disable temperature control "
@@ -6868,7 +8158,7 @@ msgstr ""
 "temperatura manualmente durante a impressão, defina isso como zero para "
 "desabilitar os comandos de controle de temperatura no arquivo de saída."
 
-#: src/libslic3r/PrintConfig.cpp:897
+#: src/libslic3r/PrintConfig.cpp:920
 msgid ""
 "Speed for filling small gaps using short zigzag moves. Keep this reasonably "
 "low to avoid too much shaking and resonance issues. Set zero to disable gaps "
@@ -6879,11 +8169,11 @@ msgstr ""
 "problemas de ressonância. Defina zero para desabilitar o preenchimento de "
 "lacunas."
 
-#: src/libslic3r/PrintConfig.cpp:905
+#: src/libslic3r/PrintConfig.cpp:928
 msgid "Verbose G-code"
 msgstr "Gcode detalhado"
 
-#: src/libslic3r/PrintConfig.cpp:906
+#: src/libslic3r/PrintConfig.cpp:929
 msgid ""
 "Enable this to get a commented G-code file, with each line explained by a "
 "descriptive text. If you print from SD card, the additional weight of the "
@@ -6893,11 +8183,11 @@ msgstr ""
 "explicada por um texto descritivo. Se você imprimir a partir do cartão SD, o "
 "peso adicional do arquivo pode fazer o seu firmware ficar mais lento."
 
-#: src/libslic3r/PrintConfig.cpp:913
+#: src/libslic3r/PrintConfig.cpp:936
 msgid "G-code flavor"
 msgstr "Tipo de G-code"
 
-#: src/libslic3r/PrintConfig.cpp:914
+#: src/libslic3r/PrintConfig.cpp:937
 msgid ""
 "Some G/M-code commands, including temperature control and others, are not "
 "universal. Set this option to your printer's firmware to get a compatible "
@@ -6909,15 +8199,15 @@ msgstr ""
 "uma saída compatível. O \"sem extrusão\" tipo impede PrusaSlicer de exportar "
 "qualquer valor de extrusão em tudo."
 
-#: src/libslic3r/PrintConfig.cpp:937
+#: src/libslic3r/PrintConfig.cpp:960
 msgid "No extrusion"
 msgstr "Sem extrusão"
 
-#: src/libslic3r/PrintConfig.cpp:942
+#: src/libslic3r/PrintConfig.cpp:965
 msgid "Label objects"
 msgstr "Rotular objetos"
 
-#: src/libslic3r/PrintConfig.cpp:943
+#: src/libslic3r/PrintConfig.cpp:966
 msgid ""
 "Enable this to add comments into the G-Code labeling print moves with what "
 "object they belong to, which is useful for the Octoprint CancelObject "
@@ -6930,11 +8220,11 @@ msgstr ""
 "config. de multi material de extrusora única e limpe em objeto/limpar em "
 "preenchimento."
 
-#: src/libslic3r/PrintConfig.cpp:950
+#: src/libslic3r/PrintConfig.cpp:973
 msgid "High extruder current on filament swap"
 msgstr "Corrente elevada da extrusora na troca do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:951
+#: src/libslic3r/PrintConfig.cpp:974
 msgid ""
 "It may be beneficial to increase the extruder motor current during the "
 "filament exchange sequence to allow for rapid ramming feed rates and to "
@@ -6945,7 +8235,7 @@ msgstr ""
 "Ramming rápidas e para superar a resistência ao carregar um filamento com "
 "uma ponta feia."
 
-#: src/libslic3r/PrintConfig.cpp:959
+#: src/libslic3r/PrintConfig.cpp:982
 msgid ""
 "This is the acceleration your printer will use for infill. Set zero to "
 "disable acceleration control for infill."
@@ -6953,11 +8243,11 @@ msgstr ""
 "Esta é a aceleração que sua impressora usará para preenchimento. Defina zero "
 "para desabilitar o controle de aceleração para preenchimento."
 
-#: src/libslic3r/PrintConfig.cpp:967
+#: src/libslic3r/PrintConfig.cpp:990
 msgid "Combine infill every"
 msgstr "Combine preenchimento a cada"
 
-#: src/libslic3r/PrintConfig.cpp:969
+#: src/libslic3r/PrintConfig.cpp:992
 msgid ""
 "This feature allows to combine infill and speed up your print by extruding "
 "thicker infill layers while preserving thin perimeters, thus accuracy."
@@ -6966,20 +8256,20 @@ msgstr ""
 "extrusão camadas de preenchimento mais espessa, preservando perímetros "
 "finos, assim, a precisão."
 
-#: src/libslic3r/PrintConfig.cpp:972
+#: src/libslic3r/PrintConfig.cpp:995
 msgid "Combine infill every n layers"
 msgstr "Combine preenchimento cada n camadas"
 
-#: src/libslic3r/PrintConfig.cpp:978
+#: src/libslic3r/PrintConfig.cpp:1001
 msgid "Infill extruder"
 msgstr "Extrusora de preenchimento"
 
-#: src/libslic3r/PrintConfig.cpp:980
+#: src/libslic3r/PrintConfig.cpp:1003
 msgid "The extruder to use when printing infill."
 msgstr ""
 "A extrusora a ser utilizada quando estiver imprimindo preenchimento sólido."
 
-#: src/libslic3r/PrintConfig.cpp:988
+#: src/libslic3r/PrintConfig.cpp:1011
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for infill. If "
 "left zero, default extrusion width will be used if set, otherwise 1.125 x "
@@ -6994,11 +8284,11 @@ msgstr ""
 "acelerar o preenchimento e tornar suas peças mais fortes. Se expresso em "
 "porcentagem(por exemplo, 90%) Ele será calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:997
+#: src/libslic3r/PrintConfig.cpp:1021
 msgid "Infill before perimeters"
 msgstr "Preenchimento antes dos perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:998
+#: src/libslic3r/PrintConfig.cpp:1022
 msgid ""
 "This option will switch the print order of perimeters and infill, making the "
 "latter first."
@@ -7006,11 +8296,11 @@ msgstr ""
 "Esta opção irá mudar a ordem de impressão de perímetros e preenchimento, "
 "tornando o último primeiro."
 
-#: src/libslic3r/PrintConfig.cpp:1003
+#: src/libslic3r/PrintConfig.cpp:1027
 msgid "Only infill where needed"
 msgstr "Somente preenchimento onde necessário"
 
-#: src/libslic3r/PrintConfig.cpp:1005
+#: src/libslic3r/PrintConfig.cpp:1029
 msgid ""
 "This option will limit infill to the areas actually needed for supporting "
 "ceilings (it will act as internal support material). If enabled, slows down "
@@ -7021,11 +8311,11 @@ msgstr ""
 "habilitada, retarda a geração de G-code devido às várias verificações "
 "envolvidas."
 
-#: src/libslic3r/PrintConfig.cpp:1012
+#: src/libslic3r/PrintConfig.cpp:1036
 msgid "Infill/perimeters overlap"
 msgstr "Sobreposição de preenchimento/perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:1014
+#: src/libslic3r/PrintConfig.cpp:1038
 msgid ""
 "This setting applies an additional overlap between infill and perimeters for "
 "better bonding. Theoretically this shouldn't be needed, but backlash might "
@@ -7038,24 +8328,24 @@ msgstr ""
 "porcentagem(exemplo: 15%) é calculado sobre a largura da extrusão do "
 "perímetro."
 
-#: src/libslic3r/PrintConfig.cpp:1025
+#: src/libslic3r/PrintConfig.cpp:1049
 msgid "Speed for printing the internal fill. Set to zero for auto."
 msgstr ""
 "Velocidade para imprimir o preenchimento interno. Defina como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1033
+#: src/libslic3r/PrintConfig.cpp:1057
 msgid "Inherits profile"
 msgstr "Herda o perfil"
 
-#: src/libslic3r/PrintConfig.cpp:1034
+#: src/libslic3r/PrintConfig.cpp:1058
 msgid "Name of the profile, from which this profile inherits."
 msgstr "Nome do perfil, a partir do qual este perfil herda."
 
-#: src/libslic3r/PrintConfig.cpp:1047
+#: src/libslic3r/PrintConfig.cpp:1071
 msgid "Interface shells"
 msgstr "Interface dos perímetros externos."
 
-#: src/libslic3r/PrintConfig.cpp:1048
+#: src/libslic3r/PrintConfig.cpp:1072
 msgid ""
 "Force the generation of solid shells between adjacent materials/volumes. "
 "Useful for multi-extruder prints with translucent materials or manual "
@@ -7065,7 +8355,7 @@ msgstr ""
 "adjacentes. Útil para cópias da multi-extrusora com materiais translúcidos "
 "ou material de sustentação solúvel manual."
 
-#: src/libslic3r/PrintConfig.cpp:1057
+#: src/libslic3r/PrintConfig.cpp:1081
 msgid ""
 "This custom code is inserted at every layer change, right after the Z move "
 "and before the extruder moves to the first layer point. Note that you can "
@@ -7077,11 +8367,11 @@ msgstr ""
 "Observe que você pode usar variáveis de espaço reservado para todas as "
 "config. Slic3r, bem como [layer_num] e [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:1068
+#: src/libslic3r/PrintConfig.cpp:1092
 msgid "Supports remaining times"
 msgstr "Tempo de impressão restante"
 
-#: src/libslic3r/PrintConfig.cpp:1069
+#: src/libslic3r/PrintConfig.cpp:1093
 msgid ""
 "Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute "
 "intervals into the G-code to let the firmware show accurate remaining time. "
@@ -7094,152 +8384,152 @@ msgstr ""
 "M73. Além disso, o firmware i3 MK3 suporta M73 QXX Sxx para o modo "
 "silencioso."
 
-#: src/libslic3r/PrintConfig.cpp:1077
+#: src/libslic3r/PrintConfig.cpp:1101
 msgid "Supports stealth mode"
 msgstr "Suporta o modo silencioso"
 
-#: src/libslic3r/PrintConfig.cpp:1078
+#: src/libslic3r/PrintConfig.cpp:1102
 msgid "The firmware supports stealth mode"
 msgstr "O firmware suporta o modo silencioso"
 
-#: src/libslic3r/PrintConfig.cpp:1102
+#: src/libslic3r/PrintConfig.cpp:1125
 msgid "Maximum feedrate X"
 msgstr "Máxima taxa de alimentação do X"
 
-#: src/libslic3r/PrintConfig.cpp:1103
+#: src/libslic3r/PrintConfig.cpp:1126
 msgid "Maximum feedrate Y"
 msgstr "Máxima taxa de alimentação do Y"
 
-#: src/libslic3r/PrintConfig.cpp:1104
+#: src/libslic3r/PrintConfig.cpp:1127
 msgid "Maximum feedrate Z"
 msgstr "Máxima taxa de alimentação do Z"
 
-#: src/libslic3r/PrintConfig.cpp:1105
+#: src/libslic3r/PrintConfig.cpp:1128
 msgid "Maximum feedrate E"
 msgstr "Máxima taxa de alimentação do E"
 
-#: src/libslic3r/PrintConfig.cpp:1108
+#: src/libslic3r/PrintConfig.cpp:1131
 msgid "Maximum feedrate of the X axis"
 msgstr "Máxima taxa de alimentação do eixo X"
 
-#: src/libslic3r/PrintConfig.cpp:1109
+#: src/libslic3r/PrintConfig.cpp:1132
 msgid "Maximum feedrate of the Y axis"
 msgstr "Máxima taxa de alimentação do eixo Y"
 
-#: src/libslic3r/PrintConfig.cpp:1110
+#: src/libslic3r/PrintConfig.cpp:1133
 msgid "Maximum feedrate of the Z axis"
 msgstr "Máxima taxa de alimentação do eixo Z"
 
-#: src/libslic3r/PrintConfig.cpp:1111
+#: src/libslic3r/PrintConfig.cpp:1134
 msgid "Maximum feedrate of the E axis"
 msgstr "Máxima taxa de alimentação do eixo E"
 
-#: src/libslic3r/PrintConfig.cpp:1120
+#: src/libslic3r/PrintConfig.cpp:1142
 msgid "Maximum acceleration X"
 msgstr "Aceleração máxima do X"
 
-#: src/libslic3r/PrintConfig.cpp:1121
+#: src/libslic3r/PrintConfig.cpp:1143
 msgid "Maximum acceleration Y"
 msgstr "Aceleração máxima do Y"
 
-#: src/libslic3r/PrintConfig.cpp:1122
+#: src/libslic3r/PrintConfig.cpp:1144
 msgid "Maximum acceleration Z"
 msgstr "Aceleração máxima do Z"
 
-#: src/libslic3r/PrintConfig.cpp:1123
+#: src/libslic3r/PrintConfig.cpp:1145
 msgid "Maximum acceleration E"
 msgstr "Aceleração máxima do E"
 
-#: src/libslic3r/PrintConfig.cpp:1126
+#: src/libslic3r/PrintConfig.cpp:1148
 msgid "Maximum acceleration of the X axis"
 msgstr "Aceleração máxima do eixo X"
 
-#: src/libslic3r/PrintConfig.cpp:1127
+#: src/libslic3r/PrintConfig.cpp:1149
 msgid "Maximum acceleration of the Y axis"
 msgstr "Aceleração máxima do eixo Y"
 
-#: src/libslic3r/PrintConfig.cpp:1128
+#: src/libslic3r/PrintConfig.cpp:1150
 msgid "Maximum acceleration of the Z axis"
 msgstr "Aceleração máxima do eixo Z"
 
-#: src/libslic3r/PrintConfig.cpp:1129
+#: src/libslic3r/PrintConfig.cpp:1151
 msgid "Maximum acceleration of the E axis"
 msgstr "Aceleração máxima do eixo E"
 
-#: src/libslic3r/PrintConfig.cpp:1138
+#: src/libslic3r/PrintConfig.cpp:1159
 msgid "Maximum jerk X"
 msgstr "Máximo empurrão X"
 
-#: src/libslic3r/PrintConfig.cpp:1139
+#: src/libslic3r/PrintConfig.cpp:1160
 msgid "Maximum jerk Y"
 msgstr "Máximo empurrão Y"
 
-#: src/libslic3r/PrintConfig.cpp:1140
+#: src/libslic3r/PrintConfig.cpp:1161
 msgid "Maximum jerk Z"
 msgstr "Máximo empurrão Z"
 
-#: src/libslic3r/PrintConfig.cpp:1141
+#: src/libslic3r/PrintConfig.cpp:1162
 msgid "Maximum jerk E"
 msgstr "Máximo empurrão E"
 
-#: src/libslic3r/PrintConfig.cpp:1144
+#: src/libslic3r/PrintConfig.cpp:1165
 msgid "Maximum jerk of the X axis"
 msgstr "Máximo empurrão do eixo X"
 
-#: src/libslic3r/PrintConfig.cpp:1145
+#: src/libslic3r/PrintConfig.cpp:1166
 msgid "Maximum jerk of the Y axis"
 msgstr "Máximo empurrão do eixo Y"
 
-#: src/libslic3r/PrintConfig.cpp:1146
+#: src/libslic3r/PrintConfig.cpp:1167
 msgid "Maximum jerk of the Z axis"
 msgstr "Máximo empurrão do eixo Z"
 
-#: src/libslic3r/PrintConfig.cpp:1147
+#: src/libslic3r/PrintConfig.cpp:1168
 msgid "Maximum jerk of the E axis"
 msgstr "Máximo empurrão do eixo E"
 
-#: src/libslic3r/PrintConfig.cpp:1158
+#: src/libslic3r/PrintConfig.cpp:1178
 msgid "Minimum feedrate when extruding"
 msgstr "Taxa de alimentação mínima ao extrudar"
 
-#: src/libslic3r/PrintConfig.cpp:1160
+#: src/libslic3r/PrintConfig.cpp:1180
 msgid "Minimum feedrate when extruding (M205 S)"
 msgstr "Taxa de alimentação mínima ao extrudar (M205 S)"
 
-#: src/libslic3r/PrintConfig.cpp:1169
+#: src/libslic3r/PrintConfig.cpp:1188
 msgid "Minimum travel feedrate"
 msgstr "Taxa de alimentação mínima ao viajar"
 
-#: src/libslic3r/PrintConfig.cpp:1171
+#: src/libslic3r/PrintConfig.cpp:1190
 msgid "Minimum travel feedrate (M205 T)"
 msgstr "Taxa de alimentação mínima ao viajar (M205 T)"
 
-#: src/libslic3r/PrintConfig.cpp:1180
+#: src/libslic3r/PrintConfig.cpp:1198
 msgid "Maximum acceleration when extruding"
 msgstr "Aceleração máxima quando expurgando"
 
-#: src/libslic3r/PrintConfig.cpp:1182
+#: src/libslic3r/PrintConfig.cpp:1200
 msgid "Maximum acceleration when extruding (M204 S)"
 msgstr "Aceleração máxima quando extrudando (M204 S)"
 
-#: src/libslic3r/PrintConfig.cpp:1191
+#: src/libslic3r/PrintConfig.cpp:1208
 msgid "Maximum acceleration when retracting"
 msgstr "Aceleração máxima durante a retração"
 
-#: src/libslic3r/PrintConfig.cpp:1193
+#: src/libslic3r/PrintConfig.cpp:1210
 msgid "Maximum acceleration when retracting (M204 T)"
 msgstr "Aceleração máxima quando retração (M204 T)"
 
-#: src/libslic3r/PrintConfig.cpp:1201 src/libslic3r/PrintConfig.cpp:1210
+#: src/libslic3r/PrintConfig.cpp:1217 src/libslic3r/PrintConfig.cpp:1226
 msgid "Max"
 msgstr "Máx"
 
-#: src/libslic3r/PrintConfig.cpp:1202
+#: src/libslic3r/PrintConfig.cpp:1218
 msgid "This setting represents the maximum speed of your fan."
 msgstr "Esta config. representa a velocidade máxima da sua ventoinha."
 
-#: src/libslic3r/PrintConfig.cpp:1211
-#, c-format
+#: src/libslic3r/PrintConfig.cpp:1227
+#, no-c-format
 msgid ""
 "This is the highest printable layer height for this extruder, used to cap "
 "the variable layer height and support layer height. Maximum recommended "
@@ -7252,11 +8542,11 @@ msgstr ""
 "adesão razoável entre camadas. Se definido como 0, a altura da camada é "
 "limitada a 75% o do diâmetro da ponteira."
 
-#: src/libslic3r/PrintConfig.cpp:1221
+#: src/libslic3r/PrintConfig.cpp:1237
 msgid "Max print speed"
 msgstr "Velocidade máxima de impressão"
 
-#: src/libslic3r/PrintConfig.cpp:1222
+#: src/libslic3r/PrintConfig.cpp:1238
 msgid ""
 "When setting other speed settings to 0 Slic3r will autocalculate the optimal "
 "speed in order to keep constant extruder pressure. This experimental setting "
@@ -7267,7 +8557,7 @@ msgstr ""
 "extrusora. Esta config. experimental é usada para definir a velocidade de "
 "impressão mais alta que você deseja permitir."
 
-#: src/libslic3r/PrintConfig.cpp:1232
+#: src/libslic3r/PrintConfig.cpp:1248
 msgid ""
 "This experimental setting is used to set the maximum volumetric speed your "
 "extruder supports."
@@ -7275,11 +8565,11 @@ msgstr ""
 "Esta config. experimental é usada para definir a velocidade máxima "
 "volumétrica que sua extrusora suporta."
 
-#: src/libslic3r/PrintConfig.cpp:1241
+#: src/libslic3r/PrintConfig.cpp:1257
 msgid "Max volumetric slope positive"
 msgstr "Inclinação volumétrica máx positiva"
 
-#: src/libslic3r/PrintConfig.cpp:1242 src/libslic3r/PrintConfig.cpp:1253
+#: src/libslic3r/PrintConfig.cpp:1258 src/libslic3r/PrintConfig.cpp:1269
 msgid ""
 "This experimental setting is used to limit the speed of change in extrusion "
 "rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
@@ -7292,25 +8582,25 @@ msgstr ""
 "extrusão de 0,2 mm, avanço de 20 mm/s) para 5,4 mm ³/s (avanço 60 mm/s) "
 "levará pelo menos 2 segundos."
 
-#: src/libslic3r/PrintConfig.cpp:1246 src/libslic3r/PrintConfig.cpp:1257
+#: src/libslic3r/PrintConfig.cpp:1262 src/libslic3r/PrintConfig.cpp:1273
 msgid "mm³/s²"
 msgstr "mm ³/s ²"
 
-#: src/libslic3r/PrintConfig.cpp:1252
+#: src/libslic3r/PrintConfig.cpp:1268
 msgid "Max volumetric slope negative"
 msgstr "Inclinação volumétrica máx negativa"
 
-#: src/libslic3r/PrintConfig.cpp:1264 src/libslic3r/PrintConfig.cpp:1273
+#: src/libslic3r/PrintConfig.cpp:1280 src/libslic3r/PrintConfig.cpp:1289
 msgid "Min"
 msgstr "Min"
 
-#: src/libslic3r/PrintConfig.cpp:1265
+#: src/libslic3r/PrintConfig.cpp:1281
 msgid "This setting represents the minimum PWM your fan needs to work."
 msgstr ""
 "Esta config. representa o PWM mínimo que seu ventoinha precisa para "
 "trabalhar."
 
-#: src/libslic3r/PrintConfig.cpp:1274
+#: src/libslic3r/PrintConfig.cpp:1290
 msgid ""
 "This is the lowest printable layer height for this extruder and limits the "
 "resolution for variable layer height. Typical values are between 0.05 mm and "
@@ -7320,19 +8610,19 @@ msgstr ""
 "definição para a altura variável da camada. Os valores típicos são entre 0, "
 "5 mm e 0,1 mm."
 
-#: src/libslic3r/PrintConfig.cpp:1282
+#: src/libslic3r/PrintConfig.cpp:1298
 msgid "Min print speed"
 msgstr "Velocidade mínima de impressão"
 
-#: src/libslic3r/PrintConfig.cpp:1283
+#: src/libslic3r/PrintConfig.cpp:1299
 msgid "Slic3r will not scale speed down below this speed."
 msgstr "Slic3r não vai escalar a velocidade abaixo desta velocidade."
 
-#: src/libslic3r/PrintConfig.cpp:1290
+#: src/libslic3r/PrintConfig.cpp:1306
 msgid "Minimal filament extrusion length"
 msgstr "Comprimento mínimo da extrusão do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:1291
+#: src/libslic3r/PrintConfig.cpp:1307
 msgid ""
 "Generate no less than the number of skirt loops required to consume the "
 "specified amount of filament on the bottom layer. For multi-extruder "
@@ -7342,11 +8632,11 @@ msgstr ""
 "a quantidade especificada de filamento na camada inferior. Para máquinas "
 "multiextrusoras, este mínimo aplica-se a cada extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:1300
+#: src/libslic3r/PrintConfig.cpp:1316
 msgid "Configuration notes"
 msgstr "Notas de config."
 
-#: src/libslic3r/PrintConfig.cpp:1301
+#: src/libslic3r/PrintConfig.cpp:1317
 msgid ""
 "You can put here your personal notes. This text will be added to the G-code "
 "header comments."
@@ -7354,17 +8644,17 @@ msgstr ""
 "Você pode colocar aqui suas anotações pessoais. Este texto será adicionado "
 "aos comentários do cabeçalho do G-code."
 
-#: src/libslic3r/PrintConfig.cpp:1311
+#: src/libslic3r/PrintConfig.cpp:1327
 msgid ""
 "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"
 msgstr ""
 "Este é o diâmetro da ponteira da extrusora (por exemplo: 0.5, 0.35 etc.)"
 
-#: src/libslic3r/PrintConfig.cpp:1316
+#: src/libslic3r/PrintConfig.cpp:1332
 msgid "Host Type"
 msgstr "Tipo de host"
 
-#: src/libslic3r/PrintConfig.cpp:1317
+#: src/libslic3r/PrintConfig.cpp:1333
 msgid ""
 "Slic3r can upload G-code files to a printer host. This field must contain "
 "the kind of the host."
@@ -7372,11 +8662,11 @@ msgstr ""
 "Slic3r pode carregar arquivos de G-code para um host de impressora. Este "
 "campo deve conter o tipo do host."
 
-#: src/libslic3r/PrintConfig.cpp:1328
+#: src/libslic3r/PrintConfig.cpp:1348
 msgid "Only retract when crossing perimeters"
 msgstr "Apenas retrair quando cruzar perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:1329
+#: src/libslic3r/PrintConfig.cpp:1349
 msgid ""
 "Disables retraction when the travel path does not exceed the upper layer's "
 "perimeters (and thus any ooze will be probably invisible)."
@@ -7385,7 +8675,7 @@ msgstr ""
 "camada superior (e, portanto, qualquer escorrimento será provavelmente "
 "invisível)."
 
-#: src/libslic3r/PrintConfig.cpp:1336
+#: src/libslic3r/PrintConfig.cpp:1356
 msgid ""
 "This option will drop the temperature of the inactive extruders to prevent "
 "oozing. It will enable a tall skirt automatically and move extruders outside "
@@ -7395,11 +8685,11 @@ msgstr ""
 "escorrimento. Ele vai permitir uma saia alta automaticamente e mover "
 "extrusoras fora de tal saia quando a mudança de temperatura."
 
-#: src/libslic3r/PrintConfig.cpp:1343
+#: src/libslic3r/PrintConfig.cpp:1363
 msgid "Output filename format"
 msgstr "Formato de nome de arquivo de saída"
 
-#: src/libslic3r/PrintConfig.cpp:1344
+#: src/libslic3r/PrintConfig.cpp:1364
 msgid ""
 "You can use all configuration options as variables inside this template. For "
 "example: [layer_height], [fill_density] etc. You can also use [timestamp], "
@@ -7411,11 +8701,11 @@ msgstr ""
 "também pode usar [tempo], [ano], [mês], [dia], [hora], [minuto], [segundo], "
 "[versão], [nome_entrada], [nome_entrada_base]."
 
-#: src/libslic3r/PrintConfig.cpp:1353
+#: src/libslic3r/PrintConfig.cpp:1373
 msgid "Detect bridging perimeters"
 msgstr "Detectar perímetros de ponte"
 
-#: src/libslic3r/PrintConfig.cpp:1355
+#: src/libslic3r/PrintConfig.cpp:1375
 msgid ""
 "Experimental option to adjust flow for overhangs (bridge flow will be used), "
 "to apply bridge speed to them and enable fan."
@@ -7424,11 +8714,11 @@ msgstr ""
 "será usado), para aplicar a velocidade da ponte a eles e para habilitar a "
 "ventoinha."
 
-#: src/libslic3r/PrintConfig.cpp:1361
+#: src/libslic3r/PrintConfig.cpp:1381
 msgid "Filament parking position"
 msgstr "Posição de estacionamento do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:1362
+#: src/libslic3r/PrintConfig.cpp:1382
 msgid ""
 "Distance of the extruder tip from the position where the filament is parked "
 "when unloaded. This should match the value in printer firmware."
@@ -7437,11 +8727,11 @@ msgstr ""
 "quando descarregado. Isso deve corresponder ao valor no firmware da "
 "impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1370
+#: src/libslic3r/PrintConfig.cpp:1390
 msgid "Extra loading distance"
 msgstr "Distância de carregamento extra"
 
-#: src/libslic3r/PrintConfig.cpp:1371
+#: src/libslic3r/PrintConfig.cpp:1391
 msgid ""
 "When set to zero, the distance the filament is moved from parking position "
 "during load is exactly the same as it was moved back during unload. When "
@@ -7453,12 +8743,12 @@ msgstr ""
 "durante o descarregamento. Quando positivo, ele é carregado ainda mais, se "
 "negativo, o movimento de carga é menor do que o descarregamento."
 
-#: src/libslic3r/PrintConfig.cpp:1379 src/libslic3r/PrintConfig.cpp:1397
-#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1419
+#: src/libslic3r/PrintConfig.cpp:1399 src/libslic3r/PrintConfig.cpp:1417
+#: src/libslic3r/PrintConfig.cpp:1430 src/libslic3r/PrintConfig.cpp:1440
 msgid "Perimeters"
 msgstr "Perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:1380
+#: src/libslic3r/PrintConfig.cpp:1400
 msgid ""
 "This is the acceleration your printer will use for perimeters. A high value "
 "like 9000 usually gives good results if your hardware is up to the job. Set "
@@ -7468,17 +8758,17 @@ msgstr ""
 "como 9000 geralmente dá bons resultados se o seu hardware suporta. Defina "
 "zero para desabilitar o controle de aceleração para perímetros."
 
-#: src/libslic3r/PrintConfig.cpp:1388
+#: src/libslic3r/PrintConfig.cpp:1408
 msgid "Perimeter extruder"
 msgstr "Extrusora de perímetro"
 
-#: src/libslic3r/PrintConfig.cpp:1390
+#: src/libslic3r/PrintConfig.cpp:1410
 msgid ""
 "The extruder to use when printing perimeters and brim. First extruder is 1."
 msgstr ""
 "A extrusora para usar ao imprimir perímetros e aba. A primeira extrusora é 1."
 
-#: src/libslic3r/PrintConfig.cpp:1399
+#: src/libslic3r/PrintConfig.cpp:1419
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for perimeters. "
 "You may want to use thinner extrudates to get more accurate surfaces. If "
@@ -7493,14 +8783,14 @@ msgstr ""
 "ponteira será usado. Se expresso em porcentagem(por exemplo, 200%) Ele será "
 "calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:1411
+#: src/libslic3r/PrintConfig.cpp:1432
 msgid ""
 "Speed for perimeters (contours, aka vertical shells). Set to zero for auto."
 msgstr ""
 "Velocidade para perímetros (contornos, também chamadas de perímetros "
 "externos verticais). Defina como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1421
+#: src/libslic3r/PrintConfig.cpp:1442
 msgid ""
 "This option sets the number of perimeters to generate for each layer. Note "
 "that Slic3r may increase this number automatically when it detects sloping "
@@ -7512,11 +8802,11 @@ msgstr ""
 "superfícies inclinadas que se beneficiam de um número maior de perímetros se "
 "a opção extra perímetros estiver habilitada."
 
-#: src/libslic3r/PrintConfig.cpp:1425
+#: src/libslic3r/PrintConfig.cpp:1446
 msgid "(minimum)"
 msgstr "(mínimo)"
 
-#: src/libslic3r/PrintConfig.cpp:1433
+#: src/libslic3r/PrintConfig.cpp:1454
 msgid ""
 "If you want to process the output G-code through custom scripts, just list "
 "their absolute paths here. Separate multiple scripts with a semicolon. "
@@ -7530,35 +8820,35 @@ msgstr ""
 "para o arquivo de G-code como o primeiro argumento, e eles poderão acessar "
 "as config. de config. do Slic3r lendo variáveis de ambiente."
 
-#: src/libslic3r/PrintConfig.cpp:1445
+#: src/libslic3r/PrintConfig.cpp:1466
 msgid "Printer type"
 msgstr "Tipo de impressora"
 
-#: src/libslic3r/PrintConfig.cpp:1446
+#: src/libslic3r/PrintConfig.cpp:1467
 msgid "Type of the printer."
 msgstr "Tipo da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1451
+#: src/libslic3r/PrintConfig.cpp:1472
 msgid "Printer notes"
 msgstr "Notas da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:1452
+#: src/libslic3r/PrintConfig.cpp:1473
 msgid "You can put your notes regarding the printer here."
 msgstr "Você pode colocar suas anotações sobre a impressora aqui."
 
-#: src/libslic3r/PrintConfig.cpp:1460
+#: src/libslic3r/PrintConfig.cpp:1481
 msgid "Printer vendor"
 msgstr "Fornecedor da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:1461
+#: src/libslic3r/PrintConfig.cpp:1482
 msgid "Name of the printer vendor."
 msgstr "Nome do fornecedor da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1466
+#: src/libslic3r/PrintConfig.cpp:1487
 msgid "Printer variant"
 msgstr "Variante da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:1467
+#: src/libslic3r/PrintConfig.cpp:1488
 msgid ""
 "Name of the printer variant. For example, the printer variants may be "
 "differentiated by a nozzle diameter."
@@ -7566,11 +8856,11 @@ msgstr ""
 "Nome da variante da impressora. Por exemplo, as variantes da impressora "
 "podem ser diferenciadas por um diâmetro da ponteira."
 
-#: src/libslic3r/PrintConfig.cpp:1480
+#: src/libslic3r/PrintConfig.cpp:1501
 msgid "Raft layers"
 msgstr "Camadas da estrado"
 
-#: src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1503
 msgid ""
 "The object will be raised by this number of layers, and support material "
 "will be generated under it."
@@ -7578,11 +8868,11 @@ msgstr ""
 "O objeto será elevado por este número de camadas, e o material de suporte "
 "será gerado em baixo dele."
 
-#: src/libslic3r/PrintConfig.cpp:1490
+#: src/libslic3r/PrintConfig.cpp:1511
 msgid "Resolution"
 msgstr "Resolução"
 
-#: src/libslic3r/PrintConfig.cpp:1491
+#: src/libslic3r/PrintConfig.cpp:1512
 msgid ""
 "Minimum detail resolution, used to simplify the input file for speeding up "
 "the slicing job and reducing memory usage. High-resolution models often "
@@ -7595,22 +8885,22 @@ msgstr ""
 "podem renderizar. Defina como zero para desabilitar qualquer simplificação e "
 "usar a resolução completa da entrada."
 
-#: src/libslic3r/PrintConfig.cpp:1501
+#: src/libslic3r/PrintConfig.cpp:1522
 msgid "Minimum travel after retraction"
 msgstr "Retração em viagens acima de"
 
-#: src/libslic3r/PrintConfig.cpp:1502
+#: src/libslic3r/PrintConfig.cpp:1523
 msgid ""
 "Retraction is not triggered when travel moves are shorter than this length."
 msgstr ""
 "A retração não é acionada quando os movimentos de viagem são mais curtos que "
 "esse comprimento."
 
-#: src/libslic3r/PrintConfig.cpp:1508
+#: src/libslic3r/PrintConfig.cpp:1529
 msgid "Retract amount before wipe"
 msgstr "Quantidade de retração antes da limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:1509
+#: src/libslic3r/PrintConfig.cpp:1530
 msgid ""
 "With bowden extruders, it may be wise to do some amount of quick retract "
 "before doing the wipe movement."
@@ -7618,23 +8908,23 @@ msgstr ""
 "Com extrusoras Bowden, pode ser sábio fazer alguma quantidade de retração "
 "rápida antes de fazer o movimento da limpeza."
 
-#: src/libslic3r/PrintConfig.cpp:1516
+#: src/libslic3r/PrintConfig.cpp:1537
 msgid "Retract on layer change"
 msgstr "Retrair na mudança de camada"
 
-#: src/libslic3r/PrintConfig.cpp:1517
+#: src/libslic3r/PrintConfig.cpp:1538
 msgid "This flag enforces a retraction whenever a Z move is done."
 msgstr "Este sinalizador impõe uma retração sempre que um movimento Z é feito."
 
-#: src/libslic3r/PrintConfig.cpp:1522 src/libslic3r/PrintConfig.cpp:1530
+#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1551
 msgid "Length"
 msgstr "Comprimento"
 
-#: src/libslic3r/PrintConfig.cpp:1523
+#: src/libslic3r/PrintConfig.cpp:1544
 msgid "Retraction Length"
 msgstr "Comprimento de retração"
 
-#: src/libslic3r/PrintConfig.cpp:1524
+#: src/libslic3r/PrintConfig.cpp:1545
 msgid ""
 "When retraction is triggered, filament is pulled back by the specified "
 "amount (the length is measured on raw filament, before it enters the "
@@ -7644,15 +8934,15 @@ msgstr ""
 "especificada (o comprimento é medido em filamento cru, antes de entrar na "
 "extrusora)."
 
-#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1535
+#: src/libslic3r/PrintConfig.cpp:1547 src/libslic3r/PrintConfig.cpp:1556
 msgid "mm (zero to disable)"
 msgstr "mm (zero para desativar)"
 
-#: src/libslic3r/PrintConfig.cpp:1531
+#: src/libslic3r/PrintConfig.cpp:1552
 msgid "Retraction Length (Toolchange)"
 msgstr "Comprimento de retração (mudança de ferramenta)"
 
-#: src/libslic3r/PrintConfig.cpp:1532
+#: src/libslic3r/PrintConfig.cpp:1553
 msgid ""
 "When retraction is triggered before changing tool, filament is pulled back "
 "by the specified amount (the length is measured on raw filament, before it "
@@ -7662,11 +8952,11 @@ msgstr ""
 "puxado para trás pela quantidade especificada (o comprimento é medido em "
 "filamento cru, antes de entrar na extrusora)."
 
-#: src/libslic3r/PrintConfig.cpp:1540
+#: src/libslic3r/PrintConfig.cpp:1561
 msgid "Lift Z"
 msgstr "Elevar Z"
 
-#: src/libslic3r/PrintConfig.cpp:1541
+#: src/libslic3r/PrintConfig.cpp:1562
 msgid ""
 "If you set this to a positive value, Z is quickly raised every time a "
 "retraction is triggered. When using multiple extruders, only the setting for "
@@ -7676,15 +8966,15 @@ msgstr ""
 "que uma retração é acionada. Ao usar várias extrusoras, somente a config. "
 "para a primeira extrusora será considerada."
 
-#: src/libslic3r/PrintConfig.cpp:1548
+#: src/libslic3r/PrintConfig.cpp:1569
 msgid "Above Z"
 msgstr "Acima de Z"
 
-#: src/libslic3r/PrintConfig.cpp:1549
+#: src/libslic3r/PrintConfig.cpp:1570
 msgid "Only lift Z above"
 msgstr "Apenas elevar Z acima"
 
-#: src/libslic3r/PrintConfig.cpp:1550
+#: src/libslic3r/PrintConfig.cpp:1571
 msgid ""
 "If you set this to a positive value, Z lift will only take place above the "
 "specified absolute Z. You can tune this setting for skipping lift on the "
@@ -7694,15 +8984,15 @@ msgstr ""
 "acima do Z absoluto especificado. Você pode ajustar essa config. para pular "
 "o elevador nas primeiras camadas."
 
-#: src/libslic3r/PrintConfig.cpp:1557
+#: src/libslic3r/PrintConfig.cpp:1578
 msgid "Below Z"
 msgstr "Abaixo de Z"
 
-#: src/libslic3r/PrintConfig.cpp:1558
+#: src/libslic3r/PrintConfig.cpp:1579
 msgid "Only lift Z below"
 msgstr "Apenas elevar Z abaixo"
 
-#: src/libslic3r/PrintConfig.cpp:1559
+#: src/libslic3r/PrintConfig.cpp:1580
 msgid ""
 "If you set this to a positive value, Z lift will only take place below the "
 "specified absolute Z. You can tune this setting for limiting lift to the "
@@ -7712,11 +9002,11 @@ msgstr ""
 "abaixo do Z absoluto especificado. Você pode ajustar essa config. para "
 "limitar a elevação às primeiras camadas."
 
-#: src/libslic3r/PrintConfig.cpp:1567 src/libslic3r/PrintConfig.cpp:1575
+#: src/libslic3r/PrintConfig.cpp:1588 src/libslic3r/PrintConfig.cpp:1596
 msgid "Extra length on restart"
 msgstr "Comprimento extra no reinício"
 
-#: src/libslic3r/PrintConfig.cpp:1568
+#: src/libslic3r/PrintConfig.cpp:1589
 msgid ""
 "When the retraction is compensated after the travel move, the extruder will "
 "push this additional amount of filament. This setting is rarely needed."
@@ -7725,7 +9015,7 @@ msgstr ""
 "empurrar esta quantidade adicional de filamento. Essa config. raramente é "
 "necessária."
 
-#: src/libslic3r/PrintConfig.cpp:1576
+#: src/libslic3r/PrintConfig.cpp:1597
 msgid ""
 "When the retraction is compensated after changing tool, the extruder will "
 "push this additional amount of filament."
@@ -7733,19 +9023,19 @@ msgstr ""
 "Quando a retração é compensada após a ferramenta de mudança, a extrusora "
 "empurrará esta quantidade adicional de filamento."
 
-#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1584
+#: src/libslic3r/PrintConfig.cpp:1604 src/libslic3r/PrintConfig.cpp:1605
 msgid "Retraction Speed"
 msgstr "Velocidade da retração"
 
-#: src/libslic3r/PrintConfig.cpp:1585
+#: src/libslic3r/PrintConfig.cpp:1606
 msgid "The speed for retractions (it only applies to the extruder motor)."
 msgstr "A velocidade para retrações (aplica-se somente ao motor da extrusora)."
 
-#: src/libslic3r/PrintConfig.cpp:1591 src/libslic3r/PrintConfig.cpp:1592
+#: src/libslic3r/PrintConfig.cpp:1612 src/libslic3r/PrintConfig.cpp:1613
 msgid "Deretraction Speed"
 msgstr "Velocidade de retorno de retração"
 
-#: src/libslic3r/PrintConfig.cpp:1593
+#: src/libslic3r/PrintConfig.cpp:1614
 msgid ""
 "The speed for loading of a filament into extruder after retraction (it only "
 "applies to the extruder motor). If left to zero, the retraction speed is "
@@ -7755,67 +9045,67 @@ msgstr ""
 "retração (aplica-se somente ao motor da extrusora). Se deixada como zero, a "
 "velocidade de retração é usada."
 
-#: src/libslic3r/PrintConfig.cpp:1600
+#: src/libslic3r/PrintConfig.cpp:1621
 msgid "Seam position"
 msgstr "Posição da costura"
 
-#: src/libslic3r/PrintConfig.cpp:1602
+#: src/libslic3r/PrintConfig.cpp:1623
 msgid "Position of perimeters starting points."
 msgstr "Posição inicial dos pontos do perímetro."
 
-#: src/libslic3r/PrintConfig.cpp:1608
+#: src/libslic3r/PrintConfig.cpp:1629
 msgid "Random"
 msgstr "Aleatório"
 
-#: src/libslic3r/PrintConfig.cpp:1609
+#: src/libslic3r/PrintConfig.cpp:1630
 msgid "Nearest"
 msgstr "Próximo"
 
-#: src/libslic3r/PrintConfig.cpp:1610
+#: src/libslic3r/PrintConfig.cpp:1631
 msgid "Aligned"
 msgstr "Alinhado(a)"
 
-#: src/libslic3r/PrintConfig.cpp:1618
+#: src/libslic3r/PrintConfig.cpp:1639
 msgid "Direction"
 msgstr "Direção"
 
-#: src/libslic3r/PrintConfig.cpp:1620
+#: src/libslic3r/PrintConfig.cpp:1641
 msgid "Preferred direction of the seam"
 msgstr "Direção preferida da costura"
 
-#: src/libslic3r/PrintConfig.cpp:1621
+#: src/libslic3r/PrintConfig.cpp:1642
 msgid "Seam preferred direction"
 msgstr "Direção de preferência da costura"
 
-#: src/libslic3r/PrintConfig.cpp:1628
+#: src/libslic3r/PrintConfig.cpp:1649
 msgid "Jitter"
 msgstr "Jitter"
 
-#: src/libslic3r/PrintConfig.cpp:1630
+#: src/libslic3r/PrintConfig.cpp:1651
 msgid "Seam preferred direction jitter"
 msgstr "Direção da costura preferencial para Jitter"
 
-#: src/libslic3r/PrintConfig.cpp:1631
+#: src/libslic3r/PrintConfig.cpp:1652
 msgid "Preferred direction of the seam - jitter"
 msgstr "Direção preferida da costura-jitter"
 
-#: src/libslic3r/PrintConfig.cpp:1641
+#: src/libslic3r/PrintConfig.cpp:1662
 msgid "USB/serial port for printer connection."
 msgstr "USB/porta serial para conexão da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1648
+#: src/libslic3r/PrintConfig.cpp:1669
 msgid "Serial port speed"
 msgstr "Velocidade da porta serial"
 
-#: src/libslic3r/PrintConfig.cpp:1649
+#: src/libslic3r/PrintConfig.cpp:1670
 msgid "Speed (baud) of USB/serial port for printer connection."
 msgstr "Velocidade (baud) do USB/porta serial para conexão da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1658
+#: src/libslic3r/PrintConfig.cpp:1679
 msgid "Distance from object"
 msgstr "Distância do objeto"
 
-#: src/libslic3r/PrintConfig.cpp:1659
+#: src/libslic3r/PrintConfig.cpp:1680
 msgid ""
 "Distance between skirt and object(s). Set this to zero to attach the skirt "
 "to the object(s) and get a brim for better adhesion."
@@ -7823,11 +9113,11 @@ msgstr ""
 "Distância entre a saia e o objeto (s). Defina isso como zero para anexar a "
 "saia para o objeto (s) e obter uma aba para uma melhor aderência."
 
-#: src/libslic3r/PrintConfig.cpp:1666
+#: src/libslic3r/PrintConfig.cpp:1687
 msgid "Skirt height"
 msgstr "Altura da saia"
 
-#: src/libslic3r/PrintConfig.cpp:1667
+#: src/libslic3r/PrintConfig.cpp:1688
 msgid ""
 "Height of skirt expressed in layers. Set this to a tall value to use skirt "
 "as a shield against drafts."
@@ -7835,15 +9125,15 @@ msgstr ""
 "Altura da saia expressa em camadas. Defina isso como um valor alto para usar "
 "a saia como um escudo contra rascunhos."
 
-#: src/libslic3r/PrintConfig.cpp:1674
+#: src/libslic3r/PrintConfig.cpp:1695
 msgid "Loops (minimum)"
 msgstr "Voltas (mínimo)"
 
-#: src/libslic3r/PrintConfig.cpp:1675
+#: src/libslic3r/PrintConfig.cpp:1696
 msgid "Skirt Loops"
 msgstr "Voltas de saia"
 
-#: src/libslic3r/PrintConfig.cpp:1676
+#: src/libslic3r/PrintConfig.cpp:1697
 msgid ""
 "Number of loops for the skirt. If the Minimum Extrusion Length option is "
 "set, the number of loops might be greater than the one configured here. Set "
@@ -7854,11 +9144,11 @@ msgstr ""
 "configurado aqui. Defina isso como zero para desabilitar a saia "
 "completamente."
 
-#: src/libslic3r/PrintConfig.cpp:1684
+#: src/libslic3r/PrintConfig.cpp:1705
 msgid "Slow down if layer print time is below"
 msgstr "Diminuir a velocidade quando o tempo de impressão for menor que"
 
-#: src/libslic3r/PrintConfig.cpp:1685
+#: src/libslic3r/PrintConfig.cpp:1706
 msgid ""
 "If layer print time is estimated below this number of seconds, print moves "
 "speed will be scaled down to extend duration to this value."
@@ -7867,11 +9157,11 @@ msgstr ""
 "segundos, a velocidade de impressão será reduzida para estender a duração a "
 "esse valor."
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1715
 msgid "Small perimeters"
 msgstr "Perímetro pequeno"
 
-#: src/libslic3r/PrintConfig.cpp:1697
+#: src/libslic3r/PrintConfig.cpp:1717
 msgid ""
 "This separate setting will affect the speed of perimeters having radius <= "
 "6.5mm (usually holes). If expressed as percentage (for example: 80%) it will "
@@ -7882,11 +9172,11 @@ msgstr ""
 "será calculado sobre a velocidade de perímetros configurados acima. Defina "
 "como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1707
+#: src/libslic3r/PrintConfig.cpp:1727
 msgid "Solid infill threshold area"
 msgstr "Área de limiar de preenchimento sólido"
 
-#: src/libslic3r/PrintConfig.cpp:1709
+#: src/libslic3r/PrintConfig.cpp:1729
 msgid ""
 "Force solid infill for regions having a smaller area than the specified "
 "threshold."
@@ -7894,24 +9184,24 @@ msgstr ""
 "Forçar preenchimento sólido para regiões com uma área menor do que o limite "
 "especificado."
 
-#: src/libslic3r/PrintConfig.cpp:1710
+#: src/libslic3r/PrintConfig.cpp:1730
 msgid "mm²"
 msgstr "mm²"
 
-#: src/libslic3r/PrintConfig.cpp:1716
+#: src/libslic3r/PrintConfig.cpp:1736
 msgid "Solid infill extruder"
 msgstr "Extrusora de preenchimento sólido"
 
-#: src/libslic3r/PrintConfig.cpp:1718
+#: src/libslic3r/PrintConfig.cpp:1738
 msgid "The extruder to use when printing solid infill."
 msgstr ""
 "A extrusora a ser utilizada quando estiver imprimindo preenchimento sólido."
 
-#: src/libslic3r/PrintConfig.cpp:1724
+#: src/libslic3r/PrintConfig.cpp:1744
 msgid "Solid infill every"
 msgstr "Preenchimento sólido a cada"
 
-#: src/libslic3r/PrintConfig.cpp:1726
+#: src/libslic3r/PrintConfig.cpp:1746
 msgid ""
 "This feature allows to force a solid layer every given number of layers. "
 "Zero to disable. You can set this to any value (for example 9999); Slic3r "
@@ -7924,7 +9214,7 @@ msgstr ""
 "possível de camadas para combinar de acordo com o diâmetro da ponteira e a "
 "altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:1738
+#: src/libslic3r/PrintConfig.cpp:1758
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for infill for "
 "solid surfaces. If left zero, default extrusion width will be used if set, "
@@ -7937,7 +9227,7 @@ msgstr ""
 "1,125 x diâmetro da ponteira será usado. Se expresso em porcentagem(por "
 "exemplo, 90%) Ele será calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:1748
+#: src/libslic3r/PrintConfig.cpp:1769
 msgid ""
 "Speed for printing solid regions (top/bottom/internal horizontal shells). "
 "This can be expressed as a percentage (for example: 80%) over the default "
@@ -7948,16 +9238,20 @@ msgstr ""
 "80%) sobre a velocidade de preenchimento padrão acima. Defina como zero para "
 "auto."
 
-#: src/libslic3r/PrintConfig.cpp:1760
+#: src/libslic3r/PrintConfig.cpp:1781
 msgid "Number of solid layers to generate on top and bottom surfaces."
 msgstr ""
 "Número de camadas sólidas a serem geradas nas interfaces do topo e base."
 
-#: src/libslic3r/PrintConfig.cpp:1766
+#: src/libslic3r/PrintConfig.cpp:1787 src/libslic3r/PrintConfig.cpp:1788
+msgid "Minimum thickness of a top / bottom shell"
+msgstr "Espessura mínima de uma parede superior/inferior"
+
+#: src/libslic3r/PrintConfig.cpp:1794
 msgid "Spiral vase"
 msgstr "Vaso espiral"
 
-#: src/libslic3r/PrintConfig.cpp:1767
+#: src/libslic3r/PrintConfig.cpp:1795
 msgid ""
 "This feature will raise Z gradually while printing a single-walled object in "
 "order to remove any visible seam. This option requires a single perimeter, "
@@ -7972,11 +9266,11 @@ msgstr ""
 "camadas sólidas de fundo, bem como saia/aba voltas. Ele não funcionará ao "
 "imprimir mais de um objeto."
 
-#: src/libslic3r/PrintConfig.cpp:1775
+#: src/libslic3r/PrintConfig.cpp:1803
 msgid "Temperature variation"
 msgstr "Variação de temperatura"
 
-#: src/libslic3r/PrintConfig.cpp:1776
+#: src/libslic3r/PrintConfig.cpp:1804
 msgid ""
 "Temperature difference to be applied when an extruder is not active. Enables "
 "a full-height \"sacrificial\" skirt on which the nozzles are periodically "
@@ -7986,7 +9280,7 @@ msgstr ""
 "Permite uma saia \"sacrificial\" em que as ponteiras são limpadas "
 "periodicamente."
 
-#: src/libslic3r/PrintConfig.cpp:1786
+#: src/libslic3r/PrintConfig.cpp:1814
 msgid ""
 "This start procedure is inserted at the beginning, after bed has reached the "
 "target temperature and extruder just started heating, and before extruder "
@@ -8006,7 +9300,7 @@ msgstr ""
 "para que você possa colocar um comando \"M109 S "
 "[temperatura_primeira_camada]\" onde quiser."
 
-#: src/libslic3r/PrintConfig.cpp:1801
+#: src/libslic3r/PrintConfig.cpp:1829
 msgid ""
 "This start procedure is inserted at the beginning, after any printer start "
 "gcode (and after any toolchange to this filament in case of multi-material "
@@ -8030,19 +9324,19 @@ msgstr ""
 "\"M109 S [temperatura_primeira_camada]\" onde quiser. Se você tiver várias "
 "extrusoras, o Gcode é processado em ordem de extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:1817
+#: src/libslic3r/PrintConfig.cpp:1845
 msgid "Single Extruder Multi Material"
 msgstr "Única extrusora multi material"
 
-#: src/libslic3r/PrintConfig.cpp:1818
+#: src/libslic3r/PrintConfig.cpp:1846
 msgid "The printer multiplexes filaments into a single hot end."
 msgstr "A impressora multiplexes filamentos em uma única extremidade quente."
 
-#: src/libslic3r/PrintConfig.cpp:1823
+#: src/libslic3r/PrintConfig.cpp:1851
 msgid "Prime all printing extruders"
 msgstr "Extrusar todas as extrusoras de impressão"
 
-#: src/libslic3r/PrintConfig.cpp:1824
+#: src/libslic3r/PrintConfig.cpp:1852
 msgid ""
 "If enabled, all printing extruders will be primed at the front edge of the "
 "print bed at the start of the print."
@@ -8050,19 +9344,35 @@ msgstr ""
 "Se ativada, todas as extrusoras de impressão extrusarão na aba dianteira da "
 "mesa de impressão no início da impressão."
 
-#: src/libslic3r/PrintConfig.cpp:1829
+#: src/libslic3r/PrintConfig.cpp:1857
+msgid "No sparse layers (EXPERIMENTAL)"
+msgstr "Sem camadas esparsas (EXPERIMENTAL)"
+
+#: src/libslic3r/PrintConfig.cpp:1858
+msgid ""
+"If enabled, the wipe tower will not be printed on layers with no "
+"toolchanges. On layers with a toolchange, extruder will travel downward to "
+"print the wipe tower. User is responsible for ensuring there is no collision "
+"with the print."
+msgstr ""
+"Se ativada, a torre de limpeza não será impressa em camadas sem alterações "
+"de ferramentas. Em camadas com uma troca de ferramentas, o extrusor viajará "
+"para baixo para imprimir a torre de limpeza. O usuário é responsável por "
+"garantir que não haja colisão com a impressão."
+
+#: src/libslic3r/PrintConfig.cpp:1865
 msgid "Generate support material"
 msgstr "Gerar material de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:1831
+#: src/libslic3r/PrintConfig.cpp:1867
 msgid "Enable support material generation."
 msgstr "Habilitar geração de material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:1835
+#: src/libslic3r/PrintConfig.cpp:1871
 msgid "Auto generated supports"
 msgstr "Gerar suportes automaticamente"
 
-#: src/libslic3r/PrintConfig.cpp:1837
+#: src/libslic3r/PrintConfig.cpp:1873
 msgid ""
 "If checked, supports will be generated automatically based on the overhang "
 "threshold value. If unchecked, supports will be generated inside the "
@@ -8072,11 +9382,11 @@ msgstr ""
 "limite de angulação. Se desmarcada, as sustentações serão geradas dentro dos "
 "volumes do \"reforçador de suporte\" somente."
 
-#: src/libslic3r/PrintConfig.cpp:1843
+#: src/libslic3r/PrintConfig.cpp:1879
 msgid "XY separation between an object and its support"
 msgstr "Separação entre o objeto e seu suporte em XY"
 
-#: src/libslic3r/PrintConfig.cpp:1845
+#: src/libslic3r/PrintConfig.cpp:1881
 msgid ""
 "XY separation between an object and its support. If expressed as percentage "
 "(for example 50%), it will be calculated over external perimeter width."
@@ -8085,11 +9395,11 @@ msgstr ""
 "(por exemplo, 50%), será calculado com base na espessura do perímetro "
 "externo."
 
-#: src/libslic3r/PrintConfig.cpp:1855
+#: src/libslic3r/PrintConfig.cpp:1891
 msgid "Pattern angle"
 msgstr "Ângulo do padrão"
 
-#: src/libslic3r/PrintConfig.cpp:1857
+#: src/libslic3r/PrintConfig.cpp:1893
 msgid ""
 "Use this setting to rotate the support material pattern on the horizontal "
 "plane."
@@ -8097,7 +9407,7 @@ msgstr ""
 "Use essa config. para girar o padrão de material de suporte no plano "
 "horizontal."
 
-#: src/libslic3r/PrintConfig.cpp:1867 src/libslic3r/PrintConfig.cpp:2563
+#: src/libslic3r/PrintConfig.cpp:1903 src/libslic3r/PrintConfig.cpp:2686
 msgid ""
 "Only create support if it lies on a build plate. Don't create support on a "
 "print."
@@ -8105,11 +9415,11 @@ msgstr ""
 "Apenas criar suporte se ele está em uma mesa. Não crie suporte em uma "
 "impressão."
 
-#: src/libslic3r/PrintConfig.cpp:1873
+#: src/libslic3r/PrintConfig.cpp:1909
 msgid "Contact Z distance"
 msgstr "Distância de contato Z"
 
-#: src/libslic3r/PrintConfig.cpp:1875
+#: src/libslic3r/PrintConfig.cpp:1911
 msgid ""
 "The vertical distance between object and support material interface. Setting "
 "this to 0 will also prevent Slic3r from using bridge flow and speed for the "
@@ -8119,19 +9429,19 @@ msgstr ""
 "Definir isso como 0 também impedirá Slic3r de usar o fluxo de ponte e a "
 "velocidade para a primeira camada de objeto."
 
-#: src/libslic3r/PrintConfig.cpp:1882
+#: src/libslic3r/PrintConfig.cpp:1918
 msgid "0 (soluble)"
 msgstr "0 (solúvel)"
 
-#: src/libslic3r/PrintConfig.cpp:1883
+#: src/libslic3r/PrintConfig.cpp:1919
 msgid "0.2 (detachable)"
 msgstr "0.2 (destacável)"
 
-#: src/libslic3r/PrintConfig.cpp:1888
+#: src/libslic3r/PrintConfig.cpp:1924
 msgid "Enforce support for the first"
 msgstr "Reforçar suportes para a(s) primeira(s)"
 
-#: src/libslic3r/PrintConfig.cpp:1890
+#: src/libslic3r/PrintConfig.cpp:1926
 msgid ""
 "Generate support material for the specified number of layers counting from "
 "bottom, regardless of whether normal support material is enabled or not and "
@@ -8144,15 +9454,15 @@ msgstr ""
 "para obter mais aderência de objetos com uma pegada muito fina ou fraca na "
 "placa de construção."
 
-#: src/libslic3r/PrintConfig.cpp:1895
+#: src/libslic3r/PrintConfig.cpp:1931
 msgid "Enforce support for the first n layers"
 msgstr "Reforçar suportes na(s) primera(s) n camada(s)"
 
-#: src/libslic3r/PrintConfig.cpp:1901
+#: src/libslic3r/PrintConfig.cpp:1937
 msgid "Support material/raft/skirt extruder"
 msgstr "Extrusora de material de suporte/estrado/saia"
 
-#: src/libslic3r/PrintConfig.cpp:1903
+#: src/libslic3r/PrintConfig.cpp:1939
 msgid ""
 "The extruder to use when printing support material, raft and skirt (1+, 0 to "
 "use the current extruder to minimize tool changes)."
@@ -8160,7 +9470,7 @@ msgstr ""
 "A extrusora a ser usada ao imprimir material de suporte, estrado e saia (1 "
 "+, 0 para usar a extrusora atual para minimizar as mudanças na ferramenta)."
 
-#: src/libslic3r/PrintConfig.cpp:1912
+#: src/libslic3r/PrintConfig.cpp:1948
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for support "
 "material. If left zero, default extrusion width will be used if set, "
@@ -8173,22 +9483,22 @@ msgstr ""
 "expresso em porcentagem(por exemplo, 90%) Ele será calculado sobre a altura "
 "da camada."
 
-#: src/libslic3r/PrintConfig.cpp:1920
+#: src/libslic3r/PrintConfig.cpp:1957
 msgid "Interface loops"
 msgstr "Voltas da interface"
 
-#: src/libslic3r/PrintConfig.cpp:1922
+#: src/libslic3r/PrintConfig.cpp:1959
 msgid ""
 "Cover the top contact layer of the supports with loops. Disabled by default."
 msgstr ""
 "Cubra a camada de contato superior dos suportes com laços. Desativado por "
 "padrão."
 
-#: src/libslic3r/PrintConfig.cpp:1927
+#: src/libslic3r/PrintConfig.cpp:1964
 msgid "Support material/raft interface extruder"
 msgstr "Extrusora de material de suporte/estrado"
 
-#: src/libslic3r/PrintConfig.cpp:1929
+#: src/libslic3r/PrintConfig.cpp:1966
 msgid ""
 "The extruder to use when printing support material interface (1+, 0 to use "
 "the current extruder to minimize tool changes). This affects raft too."
@@ -8197,11 +9507,11 @@ msgstr ""
 "usar o extrusor atual para minimizar mudanças da ferramenta). Isso afeta o "
 "estrado também."
 
-#: src/libslic3r/PrintConfig.cpp:1936
+#: src/libslic3r/PrintConfig.cpp:1973
 msgid "Interface layers"
 msgstr "Camadas de interface"
 
-#: src/libslic3r/PrintConfig.cpp:1938
+#: src/libslic3r/PrintConfig.cpp:1975
 msgid ""
 "Number of interface layers to insert between the object(s) and support "
 "material."
@@ -8209,17 +9519,17 @@ msgstr ""
 "Número de camadas de interface para inserir entre o objeto(s) e material de "
 "suporte."
 
-#: src/libslic3r/PrintConfig.cpp:1945
+#: src/libslic3r/PrintConfig.cpp:1982
 msgid "Interface pattern spacing"
 msgstr "Espaçamento do padrão da interface"
 
-#: src/libslic3r/PrintConfig.cpp:1947
+#: src/libslic3r/PrintConfig.cpp:1984
 msgid "Spacing between interface lines. Set zero to get a solid interface."
 msgstr ""
 "Espaçamento entre as linhas de interface. Defina zero para obter uma "
 "interface sólida."
 
-#: src/libslic3r/PrintConfig.cpp:1956
+#: src/libslic3r/PrintConfig.cpp:1993
 msgid ""
 "Speed for printing support material interface layers. If expressed as "
 "percentage (for example 50%) it will be calculated over support material "
@@ -8229,35 +9539,35 @@ msgstr ""
 "expresso em porcentagem(por exemplo, 50%) Ele será calculado sobre a "
 "velocidade do material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:1965
+#: src/libslic3r/PrintConfig.cpp:2002
 msgid "Pattern"
 msgstr "Padrão"
 
-#: src/libslic3r/PrintConfig.cpp:1967
+#: src/libslic3r/PrintConfig.cpp:2004
 msgid "Pattern used to generate support material."
 msgstr "Padrão usado para gerar material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:1973
+#: src/libslic3r/PrintConfig.cpp:2010
 msgid "Rectilinear grid"
 msgstr "Grade rectilínea"
 
-#: src/libslic3r/PrintConfig.cpp:1979
+#: src/libslic3r/PrintConfig.cpp:2016
 msgid "Pattern spacing"
 msgstr "Padrão de espaçamento"
 
-#: src/libslic3r/PrintConfig.cpp:1981
+#: src/libslic3r/PrintConfig.cpp:2018
 msgid "Spacing between support material lines."
 msgstr "Espaçamento entre linhas de material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:1990
+#: src/libslic3r/PrintConfig.cpp:2027
 msgid "Speed for printing support material."
 msgstr "Velocidade para imprimir material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:1997
+#: src/libslic3r/PrintConfig.cpp:2034
 msgid "Synchronize with object layers"
 msgstr "Sincronizar com camadas de objeto"
 
-#: src/libslic3r/PrintConfig.cpp:1999
+#: src/libslic3r/PrintConfig.cpp:2036
 msgid ""
 "Synchronize support layers with the object print layers. This is useful with "
 "multi-material printers, where the extruder switch is expensive."
@@ -8266,11 +9576,11 @@ msgstr ""
 "útil com as impressoras do multi-material, onde o interruptor da extrusora é "
 "caro."
 
-#: src/libslic3r/PrintConfig.cpp:2005
+#: src/libslic3r/PrintConfig.cpp:2042
 msgid "Overhang threshold"
 msgstr "Limite de angulação"
 
-#: src/libslic3r/PrintConfig.cpp:2007
+#: src/libslic3r/PrintConfig.cpp:2044
 msgid ""
 "Support material will not be generated for overhangs whose slope angle (90° "
 "= vertical) is above the given threshold. In other words, this value "
@@ -8284,11 +9594,11 @@ msgstr ""
 "partir do plano horizontal) que você pode imprimir sem material de suporte. "
 "Defina como zero para detecção automática (recomendado)."
 
-#: src/libslic3r/PrintConfig.cpp:2019
+#: src/libslic3r/PrintConfig.cpp:2056
 msgid "With sheath around the support"
 msgstr "Com bainha em torno do apoio"
 
-#: src/libslic3r/PrintConfig.cpp:2021
+#: src/libslic3r/PrintConfig.cpp:2058
 msgid ""
 "Add a sheath (a single perimeter line) around the base support. This makes "
 "the support more reliable, but also more difficult to remove."
@@ -8296,7 +9606,7 @@ msgstr ""
 "Adicione uma bainha (uma única linha de perímetro) em torno do suporte base. "
 "Isso torna o suporte mais confiável, mas também mais difícil de remover."
 
-#: src/libslic3r/PrintConfig.cpp:2028
+#: src/libslic3r/PrintConfig.cpp:2065
 msgid ""
 "Extruder temperature for layers after the first one. Set this to zero to "
 "disable temperature control commands in the output."
@@ -8304,11 +9614,11 @@ msgstr ""
 "Temperatura da extrusora para camadas após a primeira. Defina como zero para "
 "desabilitar os comandos de controle de temperatura na saída."
 
-#: src/libslic3r/PrintConfig.cpp:2036
+#: src/libslic3r/PrintConfig.cpp:2073
 msgid "Detect thin walls"
 msgstr "Detectar paredes finas"
 
-#: src/libslic3r/PrintConfig.cpp:2038
+#: src/libslic3r/PrintConfig.cpp:2075
 msgid ""
 "Detect single-width walls (parts where two extrusions don't fit and we need "
 "to collapse them into a single trace)."
@@ -8316,11 +9626,11 @@ msgstr ""
 "Detecte paredes de largura única (partes onde duas extrusões não cabem e "
 "precisamos recolhê-las em um único traço)."
 
-#: src/libslic3r/PrintConfig.cpp:2044
+#: src/libslic3r/PrintConfig.cpp:2081
 msgid "Threads"
 msgstr "Roscas"
 
-#: src/libslic3r/PrintConfig.cpp:2045
+#: src/libslic3r/PrintConfig.cpp:2082
 msgid ""
 "Threads are used to parallelize long-running tasks. Optimal threads number "
 "is slightly above the number of available cores/processors."
@@ -8329,7 +9639,7 @@ msgstr ""
 "de tópicos ideais está ligeiramente acima do número de núcleos/processadores "
 "disponíveis."
 
-#: src/libslic3r/PrintConfig.cpp:2057
+#: src/libslic3r/PrintConfig.cpp:2094
 msgid ""
 "This custom code is inserted before every toolchange. Placeholder variables "
 "for all PrusaSlicer settings as well as {previous_extruder} and "
@@ -8346,7 +9656,7 @@ msgstr ""
 "é possível script comportamento personalizado antes e depois da mudança de "
 "ferramenta."
 
-#: src/libslic3r/PrintConfig.cpp:2070
+#: src/libslic3r/PrintConfig.cpp:2107
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for infill for "
 "top surfaces. You may want to use thinner extrudates to fill all narrow "
@@ -8362,7 +9672,7 @@ msgstr ""
 "Se expresso em porcentagem(por exemplo, 90%) Ele será calculado sobre a "
 "altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:2081
+#: src/libslic3r/PrintConfig.cpp:2119
 msgid ""
 "Speed for printing top solid layers (it only applies to the uppermost "
 "external layers and not to their internal solid layers). You may want to "
@@ -8376,25 +9686,40 @@ msgstr ""
 "Isto pode ser expresso em porcentagem(por exemplo: 80%) sobre a velocidade "
 "de preenchimento sólido acima. Defina como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:2096
+#: src/libslic3r/PrintConfig.cpp:2134
 msgid "Number of solid layers to generate on top surfaces."
 msgstr "Número de camadas sólidas para gerar em superfícies superiores."
 
-#: src/libslic3r/PrintConfig.cpp:2097
+#: src/libslic3r/PrintConfig.cpp:2135
 msgid "Top solid layers"
 msgstr "Camadas sólidas de topo"
 
-#: src/libslic3r/PrintConfig.cpp:2103
+#: src/libslic3r/PrintConfig.cpp:2143
+msgid ""
+"The number of top solid layers is increased above top_solid_layers if "
+"necessary to satisfy minimum thickness of top shell. This is useful to "
+"prevent pillowing effect when printing with variable layer height."
+msgstr ""
+"O número de camadas sólidas superiores é aumentado acima de top_solid_layers "
+"se necessário para satisfazer a espessura mínima da camada superior. Isso é "
+"útil para evitar o efeito de travesseiro ao imprimir com altura de camada "
+"variável."
+
+#: src/libslic3r/PrintConfig.cpp:2146
+msgid "Minimum top shell thickness"
+msgstr "Espessura mínima vertical da parede"
+
+#: src/libslic3r/PrintConfig.cpp:2153
 msgid "Speed for travel moves (jumps between distant extrusion points)."
 msgstr ""
 "Velocidade para movimentos de viagem (saltos entre pontos de extrusão "
 "distantes)."
 
-#: src/libslic3r/PrintConfig.cpp:2111
+#: src/libslic3r/PrintConfig.cpp:2161
 msgid "Use firmware retraction"
 msgstr "Usar retração do firmware"
 
-#: src/libslic3r/PrintConfig.cpp:2112
+#: src/libslic3r/PrintConfig.cpp:2162
 msgid ""
 "This experimental setting uses G10 and G11 commands to have the firmware "
 "handle the retraction. This is only supported in recent Marlin."
@@ -8402,11 +9727,11 @@ msgstr ""
 "Esta config. experimental usa comandos G10 e G11 para que o firmware "
 "manipule a retração. Isso só é suportado no recente Marlin."
 
-#: src/libslic3r/PrintConfig.cpp:2118
+#: src/libslic3r/PrintConfig.cpp:2168
 msgid "Use relative E distances"
 msgstr "Utilizar distâncias relativas do E"
 
-#: src/libslic3r/PrintConfig.cpp:2119
+#: src/libslic3r/PrintConfig.cpp:2169
 msgid ""
 "If your firmware requires relative E values, check this, otherwise leave it "
 "unchecked. Most firmwares use absolute values."
@@ -8414,11 +9739,11 @@ msgstr ""
 "Se o firmware necessitar de valores relativos E, verifique isto, caso "
 "contrário, deixe-o desmarcado. A maioria dos firmwares usa valores absolutos."
 
-#: src/libslic3r/PrintConfig.cpp:2125
+#: src/libslic3r/PrintConfig.cpp:2175
 msgid "Use volumetric E"
 msgstr "Usar E volumétrico"
 
-#: src/libslic3r/PrintConfig.cpp:2126
+#: src/libslic3r/PrintConfig.cpp:2176
 msgid ""
 "This experimental setting uses outputs the E values in cubic millimeters "
 "instead of linear millimeters. If your firmware doesn't already know "
@@ -8434,11 +9759,11 @@ msgstr ""
 "do filamento associado ao filamento selecionado em Slic3r. Isso só é "
 "suportado no recente Marlin."
 
-#: src/libslic3r/PrintConfig.cpp:2136
+#: src/libslic3r/PrintConfig.cpp:2186
 msgid "Enable variable layer height feature"
 msgstr "Habilitar altura de camada variável"
 
-#: src/libslic3r/PrintConfig.cpp:2137
+#: src/libslic3r/PrintConfig.cpp:2187
 msgid ""
 "Some printers or printer setups may have difficulties printing with a "
 "variable layer height. Enabled by default."
@@ -8446,11 +9771,11 @@ msgstr ""
 "Algumas impressoras ou config. de impressora podem ter dificuldades para "
 "imprimir com uma altura de camada variável. Ativado por padrão."
 
-#: src/libslic3r/PrintConfig.cpp:2143
+#: src/libslic3r/PrintConfig.cpp:2193
 msgid "Wipe while retracting"
 msgstr "Limpe durante a retração"
 
-#: src/libslic3r/PrintConfig.cpp:2144
+#: src/libslic3r/PrintConfig.cpp:2194
 msgid ""
 "This flag will move the nozzle while retracting to minimize the possible "
 "blob on leaky extruders."
@@ -8458,7 +9783,7 @@ msgstr ""
 "Esta bandeira moverá a ponteira ao retrair para minimizar a bolha possível "
 "em extrusoras vazando."
 
-#: src/libslic3r/PrintConfig.cpp:2151
+#: src/libslic3r/PrintConfig.cpp:2201
 msgid ""
 "Multi material printers may need to prime or purge extruders on tool "
 "changes. Extrude the excess material into the wipe tower."
@@ -8467,11 +9792,11 @@ msgstr ""
 "alterações de ferramenta. EXTRUDE o excesso de material para a torre de "
 "limpeza."
 
-#: src/libslic3r/PrintConfig.cpp:2157
+#: src/libslic3r/PrintConfig.cpp:2207
 msgid "Purging volumes - load/unload volumes"
 msgstr "Volumes de purga-volumes de carga/descarregamento"
 
-#: src/libslic3r/PrintConfig.cpp:2158
+#: src/libslic3r/PrintConfig.cpp:2208
 msgid ""
 "This vector saves required volumes to change from/to each tool used on the "
 "wipe tower. These values are used to simplify creation of the full purging "
@@ -8481,11 +9806,11 @@ msgstr ""
 "usada na torre de limpeza. Esses valores são usados para simplificar a "
 "criação dos volumes de purga completos abaixo."
 
-#: src/libslic3r/PrintConfig.cpp:2164
+#: src/libslic3r/PrintConfig.cpp:2214
 msgid "Purging volumes - matrix"
 msgstr "Volumes de purga-matriz"
 
-#: src/libslic3r/PrintConfig.cpp:2165
+#: src/libslic3r/PrintConfig.cpp:2215
 msgid ""
 "This matrix describes volumes (in cubic milimetres) required to purge the "
 "new filament on the wipe tower for any given pair of tools."
@@ -8493,39 +9818,39 @@ msgstr ""
 "Esta matriz descreve volumes (em milimetros cúbicos) necessários para limpar "
 "o novo filamento na torre de limpeza para qualquer dado par de ferramentas."
 
-#: src/libslic3r/PrintConfig.cpp:2174
+#: src/libslic3r/PrintConfig.cpp:2224
 msgid "Position X"
 msgstr "Posição X"
 
-#: src/libslic3r/PrintConfig.cpp:2175
+#: src/libslic3r/PrintConfig.cpp:2225
 msgid "X coordinate of the left front corner of a wipe tower"
 msgstr "Coordenada X do canto frontal esquerdo de uma torre de limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:2181
+#: src/libslic3r/PrintConfig.cpp:2231
 msgid "Position Y"
 msgstr "Posição Y"
 
-#: src/libslic3r/PrintConfig.cpp:2182
+#: src/libslic3r/PrintConfig.cpp:2232
 msgid "Y coordinate of the left front corner of a wipe tower"
 msgstr "Coordenada Y do canto dianteiro esquerdo de uma torre de limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:2189
+#: src/libslic3r/PrintConfig.cpp:2239
 msgid "Width of a wipe tower"
 msgstr "Largura de uma torre da limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:2195
+#: src/libslic3r/PrintConfig.cpp:2245
 msgid "Wipe tower rotation angle"
 msgstr "Ângulo de rotação da torre"
 
-#: src/libslic3r/PrintConfig.cpp:2196
+#: src/libslic3r/PrintConfig.cpp:2246
 msgid "Wipe tower rotation angle with respect to x-axis."
 msgstr "Ângulo de rotação da torre de limpeza em relação ao eixo X."
 
-#: src/libslic3r/PrintConfig.cpp:2203
+#: src/libslic3r/PrintConfig.cpp:2253
 msgid "Wipe into this object's infill"
 msgstr "Limpe no preenchimento deste objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2204
+#: src/libslic3r/PrintConfig.cpp:2254
 msgid ""
 "Purging after toolchange will done inside this object's infills. This lowers "
 "the amount of waste but may result in longer print time  due to additional "
@@ -8535,11 +9860,11 @@ msgstr ""
 "objeto. Isso diminui a quantidade de resíduos, mas pode resultar em tempo de "
 "impressão mais longo devido a movimentos de viagem adicionais."
 
-#: src/libslic3r/PrintConfig.cpp:2211
+#: src/libslic3r/PrintConfig.cpp:2261
 msgid "Wipe into this object"
 msgstr "Limpar neste objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2212
+#: src/libslic3r/PrintConfig.cpp:2262
 msgid ""
 "Object will be used to purge the nozzle after a toolchange to save material "
 "that would otherwise end up in the wipe tower and decrease print time. "
@@ -8549,20 +9874,20 @@ msgstr ""
 "salvar o material que de outra forma acabaria na torre de limpeza e diminuir "
 "o tempo de impressão. As cores dos objetos serão misturadas como resultado."
 
-#: src/libslic3r/PrintConfig.cpp:2218
+#: src/libslic3r/PrintConfig.cpp:2268
 msgid "Maximal bridging distance"
 msgstr "Distância de ponte máxima"
 
-#: src/libslic3r/PrintConfig.cpp:2219
+#: src/libslic3r/PrintConfig.cpp:2269
 msgid "Maximal distance between supports on sparse infill sections."
 msgstr ""
 "Distância máxima entre as sustentações em seções preenchimento esparsas."
 
-#: src/libslic3r/PrintConfig.cpp:2225
+#: src/libslic3r/PrintConfig.cpp:2275
 msgid "XY Size Compensation"
 msgstr "Compensação de tamanho em XY"
 
-#: src/libslic3r/PrintConfig.cpp:2227
+#: src/libslic3r/PrintConfig.cpp:2277
 msgid ""
 "The object will be grown/shrunk in the XY plane by the configured value "
 "(negative = inwards, positive = outwards). This might be useful for fine-"
@@ -8572,11 +9897,11 @@ msgstr ""
 "(negativo = para dentro, positivo = para fora). Isso pode ser útil para "
 "ajustar os tamanhos dos furos."
 
-#: src/libslic3r/PrintConfig.cpp:2235
+#: src/libslic3r/PrintConfig.cpp:2285
 msgid "Z offset"
 msgstr "Compensamento do Z"
 
-#: src/libslic3r/PrintConfig.cpp:2236
+#: src/libslic3r/PrintConfig.cpp:2286
 msgid ""
 "This value will be added (or subtracted) from all the Z coordinates in the "
 "output G-code. It is used to compensate for bad Z endstop position: for "
@@ -8589,63 +9914,63 @@ msgstr ""
 "mm longe da mesa de impressão, defina este para-0,3 (ou corrigir o seu final "
 "de curso)."
 
-#: src/libslic3r/PrintConfig.cpp:2294
+#: src/libslic3r/PrintConfig.cpp:2353
 msgid "Display width"
 msgstr "Largura do display"
 
-#: src/libslic3r/PrintConfig.cpp:2295
+#: src/libslic3r/PrintConfig.cpp:2354
 msgid "Width of the display"
 msgstr "Largura do display"
 
-#: src/libslic3r/PrintConfig.cpp:2300
+#: src/libslic3r/PrintConfig.cpp:2359
 msgid "Display height"
 msgstr "Altura do display"
 
-#: src/libslic3r/PrintConfig.cpp:2301
+#: src/libslic3r/PrintConfig.cpp:2360
 msgid "Height of the display"
 msgstr "Altura do display"
 
-#: src/libslic3r/PrintConfig.cpp:2306
+#: src/libslic3r/PrintConfig.cpp:2365
 msgid "Number of pixels in"
 msgstr "Número de pixels em"
 
-#: src/libslic3r/PrintConfig.cpp:2308
+#: src/libslic3r/PrintConfig.cpp:2367
 msgid "Number of pixels in X"
 msgstr "Número de pixels em X"
 
-#: src/libslic3r/PrintConfig.cpp:2314
+#: src/libslic3r/PrintConfig.cpp:2373
 msgid "Number of pixels in Y"
 msgstr "Número de pixels em Y"
 
-#: src/libslic3r/PrintConfig.cpp:2319
+#: src/libslic3r/PrintConfig.cpp:2378
 msgid "Display horizontal mirroring"
 msgstr "Exibir espelhamento horizontal"
 
-#: src/libslic3r/PrintConfig.cpp:2320
+#: src/libslic3r/PrintConfig.cpp:2379
 msgid "Mirror horizontally"
 msgstr "Espelhar horizontalmente"
 
-#: src/libslic3r/PrintConfig.cpp:2321
+#: src/libslic3r/PrintConfig.cpp:2380
 msgid "Enable horizontal mirroring of output images"
 msgstr "Habilitar espelhamento horizontal de imagens de saída"
 
-#: src/libslic3r/PrintConfig.cpp:2326
+#: src/libslic3r/PrintConfig.cpp:2385
 msgid "Display vertical mirroring"
 msgstr "Exibir espelhamento vertical"
 
-#: src/libslic3r/PrintConfig.cpp:2327
+#: src/libslic3r/PrintConfig.cpp:2386
 msgid "Mirror vertically"
 msgstr "Espelharvertical"
 
-#: src/libslic3r/PrintConfig.cpp:2328
+#: src/libslic3r/PrintConfig.cpp:2387
 msgid "Enable vertical mirroring of output images"
 msgstr "Habilitar espelhamento vertical de imagens de saída"
 
-#: src/libslic3r/PrintConfig.cpp:2333
+#: src/libslic3r/PrintConfig.cpp:2392
 msgid "Display orientation"
 msgstr "Orientação do display"
 
-#: src/libslic3r/PrintConfig.cpp:2334
+#: src/libslic3r/PrintConfig.cpp:2393
 msgid ""
 "Set the actual LCD display orientation inside the SLA printer. Portrait mode "
 "will flip the meaning of display width and height parameters and the output "
@@ -8655,43 +9980,43 @@ msgstr ""
 "retrato inverterá o significado dos parâmetros de largura e altura da tela e "
 "as imagens de saída serão giradas por 90 graus."
 
-#: src/libslic3r/PrintConfig.cpp:2340
+#: src/libslic3r/PrintConfig.cpp:2399
 msgid "Landscape"
 msgstr "Paisagem"
 
-#: src/libslic3r/PrintConfig.cpp:2341
+#: src/libslic3r/PrintConfig.cpp:2400
 msgid "Portrait"
 msgstr "Retrato"
 
-#: src/libslic3r/PrintConfig.cpp:2346
+#: src/libslic3r/PrintConfig.cpp:2405
 msgid "Fast"
 msgstr "Rápido"
 
-#: src/libslic3r/PrintConfig.cpp:2347
+#: src/libslic3r/PrintConfig.cpp:2406
 msgid "Fast tilt"
 msgstr "Inclinação rápida"
 
-#: src/libslic3r/PrintConfig.cpp:2348
+#: src/libslic3r/PrintConfig.cpp:2407
 msgid "Time of the fast tilt"
 msgstr "Tempo da inclinação rápida"
 
-#: src/libslic3r/PrintConfig.cpp:2355
+#: src/libslic3r/PrintConfig.cpp:2414
 msgid "Slow"
 msgstr "Lento"
 
-#: src/libslic3r/PrintConfig.cpp:2356
+#: src/libslic3r/PrintConfig.cpp:2415
 msgid "Slow tilt"
 msgstr "Inclinação lenta"
 
-#: src/libslic3r/PrintConfig.cpp:2357
+#: src/libslic3r/PrintConfig.cpp:2416
 msgid "Time of the slow tilt"
 msgstr "Tempo da inclinação lenta"
 
-#: src/libslic3r/PrintConfig.cpp:2364
+#: src/libslic3r/PrintConfig.cpp:2423
 msgid "Area fill"
 msgstr "Preenchimento de área"
 
-#: src/libslic3r/PrintConfig.cpp:2365
+#: src/libslic3r/PrintConfig.cpp:2424
 msgid ""
 "The percentage of the bed area. \n"
 "If the print area exceeds the specified value, \n"
@@ -8702,16 +10027,16 @@ msgstr ""
 "em seguida, uma inclinação lenta será usada, caso contrário-uma inclinação "
 "rápida"
 
-#: src/libslic3r/PrintConfig.cpp:2372 src/libslic3r/PrintConfig.cpp:2373
-#: src/libslic3r/PrintConfig.cpp:2374
+#: src/libslic3r/PrintConfig.cpp:2431 src/libslic3r/PrintConfig.cpp:2432
+#: src/libslic3r/PrintConfig.cpp:2433
 msgid "Printer scaling correction"
 msgstr "Correção de dimensionamento da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:2380 src/libslic3r/PrintConfig.cpp:2381
+#: src/libslic3r/PrintConfig.cpp:2439 src/libslic3r/PrintConfig.cpp:2440
 msgid "Printer absolute correction"
 msgstr "Correção absoluta da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:2382
+#: src/libslic3r/PrintConfig.cpp:2441
 msgid ""
 "Will inflate or deflate the sliced 2D polygons according to the sign of the "
 "correction."
@@ -8719,11 +10044,22 @@ msgstr ""
 "Irá inflar ou esvaziar os polígonos 2D cortados de acordo com o sinal da "
 "correção."
 
-#: src/libslic3r/PrintConfig.cpp:2388 src/libslic3r/PrintConfig.cpp:2389
+#: src/libslic3r/PrintConfig.cpp:2447
+msgid "Elephant foot minimum width"
+msgstr "Largura mínima do pé de elefante"
+
+#: src/libslic3r/PrintConfig.cpp:2449
+msgid ""
+"Minimum width of features to maintain when doing elephant foot compensation."
+msgstr ""
+"Largura mínima de características para manter ao fazer compensação do pé de "
+"elefante."
+
+#: src/libslic3r/PrintConfig.cpp:2456 src/libslic3r/PrintConfig.cpp:2457
 msgid "Printer gamma correction"
 msgstr "Correção de gama de impressora"
 
-#: src/libslic3r/PrintConfig.cpp:2390
+#: src/libslic3r/PrintConfig.cpp:2458
 msgid ""
 "This will apply a gamma correction to the rasterized 2D polygons. A gamma "
 "value of zero means thresholding with the threshold in the middle. This "
@@ -8733,15 +10069,43 @@ msgstr ""
 "valor gama de zero significa limiarização com o limiar no meio. Este "
 "comportamento elimina suavização sem perder buracos em polígonos."
 
-#: src/libslic3r/PrintConfig.cpp:2401 src/libslic3r/PrintConfig.cpp:2402
+#: src/libslic3r/PrintConfig.cpp:2470 src/libslic3r/PrintConfig.cpp:2471
+msgid "SLA material type"
+msgstr "Tipo de Material de SLA"
+
+#: src/libslic3r/PrintConfig.cpp:2482 src/libslic3r/PrintConfig.cpp:2483
 msgid "Initial layer height"
 msgstr "Altura da camada inicial"
 
-#: src/libslic3r/PrintConfig.cpp:2408
+#: src/libslic3r/PrintConfig.cpp:2489 src/libslic3r/PrintConfig.cpp:2490
+msgid "Bottle volume"
+msgstr "Volume do pote"
+
+#: src/libslic3r/PrintConfig.cpp:2491
+msgid "ml"
+msgstr "ml"
+
+#: src/libslic3r/PrintConfig.cpp:2496 src/libslic3r/PrintConfig.cpp:2497
+msgid "Bottle weight"
+msgstr "Peso do pote"
+
+#: src/libslic3r/PrintConfig.cpp:2498
+msgid "kg"
+msgstr "kg"
+
+#: src/libslic3r/PrintConfig.cpp:2505
+msgid "g/ml"
+msgstr "g/ml"
+
+#: src/libslic3r/PrintConfig.cpp:2512
+msgid "money/bottle"
+msgstr "dinheiro/pote"
+
+#: src/libslic3r/PrintConfig.cpp:2517
 msgid "Faded layers"
 msgstr "Camadas desbotadas"
 
-#: src/libslic3r/PrintConfig.cpp:2409
+#: src/libslic3r/PrintConfig.cpp:2518
 msgid ""
 "Number of the layers needed for the exposure time fade from initial exposure "
 "time to the exposure time"
@@ -8749,92 +10113,104 @@ msgstr ""
 "Número de camadas necessárias para o tempo de exposição desvanecer-se do "
 "tempo de exposição inicial ao tempo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2416 src/libslic3r/PrintConfig.cpp:2417
+#: src/libslic3r/PrintConfig.cpp:2525 src/libslic3r/PrintConfig.cpp:2526
 msgid "Minimum exposure time"
 msgstr "Tempo mínimo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2424 src/libslic3r/PrintConfig.cpp:2425
+#: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2534
 msgid "Maximum exposure time"
 msgstr "Tempo máximo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2432 src/libslic3r/PrintConfig.cpp:2433
+#: src/libslic3r/PrintConfig.cpp:2541 src/libslic3r/PrintConfig.cpp:2542
 msgid "Exposure time"
 msgstr "Tempo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2439 src/libslic3r/PrintConfig.cpp:2440
+#: src/libslic3r/PrintConfig.cpp:2548 src/libslic3r/PrintConfig.cpp:2549
 msgid "Minimum initial exposure time"
 msgstr "Tempo inicial mínimo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2447 src/libslic3r/PrintConfig.cpp:2448
+#: src/libslic3r/PrintConfig.cpp:2556 src/libslic3r/PrintConfig.cpp:2557
 msgid "Maximum initial exposure time"
 msgstr "Tempo inicial máximo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2455 src/libslic3r/PrintConfig.cpp:2456
+#: src/libslic3r/PrintConfig.cpp:2564 src/libslic3r/PrintConfig.cpp:2565
 msgid "Initial exposure time"
 msgstr "Tempo inicial mínimo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2462 src/libslic3r/PrintConfig.cpp:2463
+#: src/libslic3r/PrintConfig.cpp:2571 src/libslic3r/PrintConfig.cpp:2572
 msgid "Correction for expansion"
 msgstr "Correção para expansão"
 
-#: src/libslic3r/PrintConfig.cpp:2469
+#: src/libslic3r/PrintConfig.cpp:2578
 msgid "SLA print material notes"
 msgstr "Notas de material de impressão de SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2470
+#: src/libslic3r/PrintConfig.cpp:2579
 msgid "You can put your notes regarding the SLA print material here."
 msgstr ""
 "Você pode colocar suas anotações sobre o material de impressão de SLA aqui."
 
-#: src/libslic3r/PrintConfig.cpp:2478 src/libslic3r/PrintConfig.cpp:2489
+#: src/libslic3r/PrintConfig.cpp:2591 src/libslic3r/PrintConfig.cpp:2602
 msgid "Default SLA material profile"
 msgstr "Perfil de material de SLA padrão"
 
-#: src/libslic3r/PrintConfig.cpp:2500
+#: src/libslic3r/PrintConfig.cpp:2613
 msgid "Generate supports"
 msgstr "Gerar suportes"
 
-#: src/libslic3r/PrintConfig.cpp:2502
+#: src/libslic3r/PrintConfig.cpp:2615
 msgid "Generate supports for the models"
 msgstr "Gere suportes para os modelos"
 
-#: src/libslic3r/PrintConfig.cpp:2507
+#: src/libslic3r/PrintConfig.cpp:2620
 msgid "Support head front diameter"
 msgstr "Diâmetro dianteiro principal da sustentação"
 
-#: src/libslic3r/PrintConfig.cpp:2509
+#: src/libslic3r/PrintConfig.cpp:2622
 msgid "Diameter of the pointing side of the head"
 msgstr "Diâmetro do lado apontando da cabeça"
 
-#: src/libslic3r/PrintConfig.cpp:2516
+#: src/libslic3r/PrintConfig.cpp:2629
 msgid "Support head penetration"
 msgstr "Suporte de penetração da cabeça"
 
-#: src/libslic3r/PrintConfig.cpp:2518
+#: src/libslic3r/PrintConfig.cpp:2631
 msgid "How much the pinhead has to penetrate the model surface"
 msgstr "Quanto a cabeça de alfinete tem de penetrar na superfície do modelo"
 
-#: src/libslic3r/PrintConfig.cpp:2525
+#: src/libslic3r/PrintConfig.cpp:2638
 msgid "Support head width"
 msgstr "Largura da cabeça de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2527
+#: src/libslic3r/PrintConfig.cpp:2640
 msgid "Width from the back sphere center to the front sphere center"
 msgstr "Largura do centro da esfera traseira ao centro da esfera dianteira"
 
-#: src/libslic3r/PrintConfig.cpp:2535
+#: src/libslic3r/PrintConfig.cpp:2648
 msgid "Support pillar diameter"
 msgstr "Diâmetro do pilar do suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2537
+#: src/libslic3r/PrintConfig.cpp:2650
 msgid "Diameter in mm of the support pillars"
 msgstr "Diâmetro em mm dos pilares de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2545
+#: src/libslic3r/PrintConfig.cpp:2658
+msgid "Max bridges on a pillar"
+msgstr "Distância máxima de conexão entre pilares"
+
+#: src/libslic3r/PrintConfig.cpp:2660
+msgid ""
+"Maximum number of bridges that can be placed on a pillar. Bridges hold "
+"support point pinheads and connect to pillars as small branches."
+msgstr ""
+"Número máximo de pontes que podem ser colocadas em um pilar. As pontes "
+"seguram pinças de ponto de apoio e se conectam a pilares como pequenos ramos."
+
+#: src/libslic3r/PrintConfig.cpp:2668
 msgid "Support pillar connection mode"
 msgstr "Modalidade da conexão da coluna da sustentação"
 
-#: src/libslic3r/PrintConfig.cpp:2546
+#: src/libslic3r/PrintConfig.cpp:2669
 msgid ""
 "Controls the bridge type between two neighboring pillars. Can be zig-zag, "
 "cross (double zig-zag) or dynamic which will automatically switch between "
@@ -8844,23 +10220,23 @@ msgstr ""
 "(zig-zag dobro) ou dinâmico que comutará automaticamente entre os primeiros "
 "dois dependendo da distância dos dois pilares."
 
-#: src/libslic3r/PrintConfig.cpp:2554
+#: src/libslic3r/PrintConfig.cpp:2677
 msgid "Zig-Zag"
 msgstr "Zig-Zag"
 
-#: src/libslic3r/PrintConfig.cpp:2555
+#: src/libslic3r/PrintConfig.cpp:2678
 msgid "Cross"
 msgstr "Cruz"
 
-#: src/libslic3r/PrintConfig.cpp:2556
+#: src/libslic3r/PrintConfig.cpp:2679
 msgid "Dynamic"
 msgstr "Dinâmico"
 
-#: src/libslic3r/PrintConfig.cpp:2568
+#: src/libslic3r/PrintConfig.cpp:2691
 msgid "Pillar widening factor"
 msgstr "Fator de alargamento da coluna"
 
-#: src/libslic3r/PrintConfig.cpp:2570
+#: src/libslic3r/PrintConfig.cpp:2693
 msgid ""
 "Merging bridges or pillars into another pillars can increase the radius. "
 "Zero means no increase, one means full increase."
@@ -8868,27 +10244,27 @@ msgstr ""
 "Mesclar pontes ou pilares em outros pilares pode aumentar o raio. Zero "
 "significa que não há aumento, um significa aumento total."
 
-#: src/libslic3r/PrintConfig.cpp:2579
+#: src/libslic3r/PrintConfig.cpp:2702
 msgid "Support base diameter"
 msgstr "Diâmetro base do suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2581
+#: src/libslic3r/PrintConfig.cpp:2704
 msgid "Diameter in mm of the pillar base"
 msgstr "Diâmetro em mm da base do pilar"
 
-#: src/libslic3r/PrintConfig.cpp:2589
+#: src/libslic3r/PrintConfig.cpp:2712
 msgid "Support base height"
 msgstr "Altura base do suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2591
+#: src/libslic3r/PrintConfig.cpp:2714
 msgid "The height of the pillar base cone"
 msgstr "A altura do cone da base da coluna"
 
-#: src/libslic3r/PrintConfig.cpp:2598
+#: src/libslic3r/PrintConfig.cpp:2721
 msgid "Support base safety distance"
 msgstr "Distância da segurança da base da sustentação"
 
-#: src/libslic3r/PrintConfig.cpp:2601
+#: src/libslic3r/PrintConfig.cpp:2724
 msgid ""
 "The minimum distance of the pillar base from the model in mm. Makes sense in "
 "zero elevation mode where a gap according to this parameter is inserted "
@@ -8898,27 +10274,27 @@ msgstr ""
 "elevação zero, onde uma lacuna de acordo com este parâmetro é inserida entre "
 "o modelo e o pad."
 
-#: src/libslic3r/PrintConfig.cpp:2611
+#: src/libslic3r/PrintConfig.cpp:2734
 msgid "Critical angle"
 msgstr "Ângulo crítico"
 
-#: src/libslic3r/PrintConfig.cpp:2613
+#: src/libslic3r/PrintConfig.cpp:2736
 msgid "The default angle for connecting support sticks and junctions."
 msgstr "O ângulo padrão para conectar suportes e junções."
 
-#: src/libslic3r/PrintConfig.cpp:2621
+#: src/libslic3r/PrintConfig.cpp:2744
 msgid "Max bridge length"
 msgstr "Comprimento máximo da ponte"
 
-#: src/libslic3r/PrintConfig.cpp:2623
+#: src/libslic3r/PrintConfig.cpp:2746
 msgid "The max length of a bridge"
 msgstr "O comprimento máximo de uma ponte"
 
-#: src/libslic3r/PrintConfig.cpp:2630
+#: src/libslic3r/PrintConfig.cpp:2753
 msgid "Max pillar linking distance"
 msgstr "Distância máxima de conexão entre pilares"
 
-#: src/libslic3r/PrintConfig.cpp:2632
+#: src/libslic3r/PrintConfig.cpp:2755
 msgid ""
 "The max distance of two pillars to get linked with each other. A zero value "
 "will prohibit pillar cascading."
@@ -8926,11 +10302,11 @@ msgstr ""
 "A distância máxima de dois pilares para ficar ligado uns com os outros. Um "
 "valor zero irá proibir o pilar em cascata."
 
-#: src/libslic3r/PrintConfig.cpp:2640
+#: src/libslic3r/PrintConfig.cpp:2763
 msgid "Object elevation"
 msgstr "Elevação do objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2642
+#: src/libslic3r/PrintConfig.cpp:2765
 msgid ""
 "How much the supports should lift up the supported object. If \"Pad around "
 "object\" is enabled, this value is ignored."
@@ -8938,39 +10314,39 @@ msgstr ""
 "Quanto os suportes devem levantar o objecto suportado. Se \"pad em torno do "
 "objeto\" estiver habilitado, esse valor será ignorado."
 
-#: src/libslic3r/PrintConfig.cpp:2653
+#: src/libslic3r/PrintConfig.cpp:2776
 msgid "This is a relative measure of support points density."
 msgstr "Esta é uma medida relativa de densidade de pontos de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:2659
+#: src/libslic3r/PrintConfig.cpp:2782
 msgid "Minimal distance of the support points"
 msgstr "Distância mínima dos pontos de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2661
+#: src/libslic3r/PrintConfig.cpp:2784
 msgid "No support points will be placed closer than this threshold."
 msgstr "Nenhum ponto de apoio será colocado mais perto do que este limiar."
 
-#: src/libslic3r/PrintConfig.cpp:2667
+#: src/libslic3r/PrintConfig.cpp:2790
 msgid "Use pad"
 msgstr "Use pad"
 
-#: src/libslic3r/PrintConfig.cpp:2669
+#: src/libslic3r/PrintConfig.cpp:2792
 msgid "Add a pad underneath the supported model"
 msgstr "Adicionar um pad por baixo do modelo suportado"
 
-#: src/libslic3r/PrintConfig.cpp:2674
+#: src/libslic3r/PrintConfig.cpp:2797
 msgid "Pad wall thickness"
 msgstr "Espessura da parede do pad"
 
-#: src/libslic3r/PrintConfig.cpp:2676
+#: src/libslic3r/PrintConfig.cpp:2799
 msgid "The thickness of the pad and its optional cavity walls."
 msgstr "A espessura da pad e suas paredes de cavidade opcionais."
 
-#: src/libslic3r/PrintConfig.cpp:2684
+#: src/libslic3r/PrintConfig.cpp:2807
 msgid "Pad wall height"
 msgstr "Altura da parede do pad"
 
-#: src/libslic3r/PrintConfig.cpp:2685
+#: src/libslic3r/PrintConfig.cpp:2808
 msgid ""
 "Defines the pad cavity depth. Set to zero to disable the cavity. Be careful "
 "when enabling this feature, as some resins may produce an extreme suction "
@@ -8982,11 +10358,19 @@ msgstr ""
 "produzir um efeito de sucção extrema dentro da cavidade, o que torna a "
 "descascar a impressão fora da folha de IVA difícil."
 
-#: src/libslic3r/PrintConfig.cpp:2698
+#: src/libslic3r/PrintConfig.cpp:2821
+msgid "Pad brim size"
+msgstr "Tamanho da borda do bloco"
+
+#: src/libslic3r/PrintConfig.cpp:2822
+msgid "How far should the pad extend around the contained geometry"
+msgstr "Até onde o bloco deve se estender em torno da geometria contida"
+
+#: src/libslic3r/PrintConfig.cpp:2832
 msgid "Max merge distance"
 msgstr "Distância máxima da fusão"
 
-#: src/libslic3r/PrintConfig.cpp:2700
+#: src/libslic3r/PrintConfig.cpp:2834
 msgid ""
 "Some objects can get along with a few smaller pads instead of a single big "
 "one. This parameter defines how far the center of two smaller pads should "
@@ -8996,11 +10380,11 @@ msgstr ""
 "grande. Este parâmetro define até que ponto o centro de duas pads menores "
 "deve ser. Se eles estão mais perto, eles vão se fundir em uma pad."
 
-#: src/libslic3r/PrintConfig.cpp:2720
+#: src/libslic3r/PrintConfig.cpp:2854
 msgid "Pad wall slope"
 msgstr "Inclinação da parede da pad"
 
-#: src/libslic3r/PrintConfig.cpp:2722
+#: src/libslic3r/PrintConfig.cpp:2856
 msgid ""
 "The slope of the pad wall relative to the bed plane. 90 degrees means "
 "straight walls."
@@ -9008,19 +10392,27 @@ msgstr ""
 "A inclinação da parede da pad em relação ao plano da mesa. 90 graus "
 "significa paredes retas."
 
-#: src/libslic3r/PrintConfig.cpp:2731
+#: src/libslic3r/PrintConfig.cpp:2865
 msgid "Pad around object"
 msgstr "Pad em torno do objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2733
+#: src/libslic3r/PrintConfig.cpp:2867
 msgid "Create pad around object and ignore the support elevation"
 msgstr "Criar pad ao redor do objeto e ignorar a elevação de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2738
+#: src/libslic3r/PrintConfig.cpp:2872
+msgid "Pad around object everywhere"
+msgstr "Pad em torno do objeto em todo lugar"
+
+#: src/libslic3r/PrintConfig.cpp:2874
+msgid "Force pad around object everywhere"
+msgstr "Forçar Pad em torno do objeto em todo lugar"
+
+#: src/libslic3r/PrintConfig.cpp:2879
 msgid "Pad object gap"
 msgstr "Vão entre o pad e o objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2740
+#: src/libslic3r/PrintConfig.cpp:2881
 msgid ""
 "The gap between the object bottom and the generated pad in zero elevation "
 "mode."
@@ -9028,83 +10420,125 @@ msgstr ""
 "A lacuna entre a parte inferior do objeto e o pad gerado no modo de elevação "
 "zero."
 
-#: src/libslic3r/PrintConfig.cpp:2749
+#: src/libslic3r/PrintConfig.cpp:2890
 msgid "Pad object connector stride"
 msgstr "Inserir pad entre o objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2751
+#: src/libslic3r/PrintConfig.cpp:2892
 msgid ""
 "Distance between two connector sticks which connect the object and the "
 "generated pad."
 msgstr ""
 "Distância entre duas varas do conector que conectam o objeto e a pad gerada."
 
-#: src/libslic3r/PrintConfig.cpp:2758
+#: src/libslic3r/PrintConfig.cpp:2899
 msgid "Pad object connector width"
 msgstr "Largura do conector do objeto pad"
 
-#: src/libslic3r/PrintConfig.cpp:2760
+#: src/libslic3r/PrintConfig.cpp:2901
 msgid ""
 "Width of the connector sticks which connect the object and the generated pad."
 msgstr "Largura das varas do conector que conectam o objeto e a pad gerada."
 
-#: src/libslic3r/PrintConfig.cpp:2767
+#: src/libslic3r/PrintConfig.cpp:2908
 msgid "Pad object connector penetration"
 msgstr "Pad objeto conector de penetração"
 
-#: src/libslic3r/PrintConfig.cpp:2770
+#: src/libslic3r/PrintConfig.cpp:2911
 msgid "How much should the tiny connectors penetrate into the model body."
 msgstr "Quanto deve os conectores minúsculos penetrar no corpo do modelo."
 
-#: src/libslic3r/PrintConfig.cpp:3130
+#: src/libslic3r/PrintConfig.cpp:2918
+msgid "Enable hollowing"
+msgstr "Ativar o modo oco"
+
+#: src/libslic3r/PrintConfig.cpp:2920
+msgid "Hollow out a model to have an empty interior"
+msgstr "Deixar o modelo oco para ter um interior vazio"
+
+#: src/libslic3r/PrintConfig.cpp:2925
+msgid "Wall thickness"
+msgstr "Espessura da parede"
+
+#: src/libslic3r/PrintConfig.cpp:2927
+msgid "Minimum wall thickness of a hollowed model."
+msgstr "Espessura mínima da parede de um modelo oco."
+
+#: src/libslic3r/PrintConfig.cpp:2935
+msgid "Accuracy"
+msgstr "Precisão"
+
+#: src/libslic3r/PrintConfig.cpp:2937
+msgid ""
+"Performance vs accuracy of calculation. Lower values may produce unwanted "
+"artifacts."
+msgstr ""
+"Desempenho versus precisão do cálculo. Valores mais baixos podem produzir "
+"artefatos indesejados."
+
+#: src/libslic3r/PrintConfig.cpp:2947
+msgid ""
+"Hollowing is done in two steps: first, an imaginary interior is calculated "
+"deeper (offset plus the closing distance) in the object and then it's "
+"inflated back to the specified offset. A greater closing distance makes the "
+"interior more rounded. At zero, the interior will resemble the exterior the "
+"most."
+msgstr ""
+"O oco é feito em duas etapas: primeiro, um interior imaginário é calculado "
+"mais fundo (deslocamento mais a distância de fechamento) no objeto e, em "
+"seguida, é inflado de volta para o deslocamento especificado. Uma maior "
+"distância de fechamento torna o interior mais arredondado. Ao zero, o "
+"interior será o mais parecido com o exterior."
+
+#: src/libslic3r/PrintConfig.cpp:3330
 msgid "Export OBJ"
 msgstr "Exportar OBJ"
 
-#: src/libslic3r/PrintConfig.cpp:3131
+#: src/libslic3r/PrintConfig.cpp:3331
 msgid "Export the model(s) as OBJ."
 msgstr "Exportar modelo(s) como OBJ."
 
-#: src/libslic3r/PrintConfig.cpp:3142
+#: src/libslic3r/PrintConfig.cpp:3342
 msgid "Export SLA"
 msgstr "Exportar SLA"
 
-#: src/libslic3r/PrintConfig.cpp:3143
+#: src/libslic3r/PrintConfig.cpp:3343
 msgid "Slice the model and export SLA printing layers as PNG."
 msgstr "Fatiar o modelo e exportar as camadas de impressão SLA como PNG."
 
-#: src/libslic3r/PrintConfig.cpp:3148
+#: src/libslic3r/PrintConfig.cpp:3348
 msgid "Export 3MF"
 msgstr "Exportar 3MF"
 
-#: src/libslic3r/PrintConfig.cpp:3149
+#: src/libslic3r/PrintConfig.cpp:3349
 msgid "Export the model(s) as 3MF."
 msgstr "Exportar modelo(s) como 3MF."
 
-#: src/libslic3r/PrintConfig.cpp:3153
+#: src/libslic3r/PrintConfig.cpp:3353
 msgid "Export AMF"
 msgstr "Exportar AMF"
 
-#: src/libslic3r/PrintConfig.cpp:3154
+#: src/libslic3r/PrintConfig.cpp:3354
 msgid "Export the model(s) as AMF."
 msgstr "Exportar modelo(s) como AMF."
 
-#: src/libslic3r/PrintConfig.cpp:3158
+#: src/libslic3r/PrintConfig.cpp:3358
 msgid "Export STL"
 msgstr "Exportar STL"
 
-#: src/libslic3r/PrintConfig.cpp:3159
+#: src/libslic3r/PrintConfig.cpp:3359
 msgid "Export the model(s) as STL."
 msgstr "Exportar modelo(s) como STL."
 
-#: src/libslic3r/PrintConfig.cpp:3164
+#: src/libslic3r/PrintConfig.cpp:3364
 msgid "Slice the model and export toolpaths as G-code."
 msgstr "Fatiar o modelo e exportar o percurso da ferramenta como G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3169
+#: src/libslic3r/PrintConfig.cpp:3369
 msgid "Slice"
 msgstr "Fatiar"
 
-#: src/libslic3r/PrintConfig.cpp:3170
+#: src/libslic3r/PrintConfig.cpp:3370
 msgid ""
 "Slice the model as FFF or SLA based on the printer_technology configuration "
 "value."
@@ -9112,71 +10546,71 @@ msgstr ""
 "Divida o modelo como FFF ou SLA com base no valor de config. "
 "printer_technology."
 
-#: src/libslic3r/PrintConfig.cpp:3175
+#: src/libslic3r/PrintConfig.cpp:3375
 msgid "Help"
 msgstr "Ajuda"
 
-#: src/libslic3r/PrintConfig.cpp:3176
+#: src/libslic3r/PrintConfig.cpp:3376
 msgid "Show this help."
 msgstr "Mostrar esta ajuda."
 
-#: src/libslic3r/PrintConfig.cpp:3181
+#: src/libslic3r/PrintConfig.cpp:3381
 msgid "Help (FFF options)"
 msgstr "Ajuda (opções FDM)"
 
-#: src/libslic3r/PrintConfig.cpp:3182
+#: src/libslic3r/PrintConfig.cpp:3382
 msgid "Show the full list of print/G-code configuration options."
 msgstr "Mostre a lista completa de opções de config. do Print/G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3186
+#: src/libslic3r/PrintConfig.cpp:3386
 msgid "Help (SLA options)"
 msgstr "Ajuda (opções SLA)"
 
-#: src/libslic3r/PrintConfig.cpp:3187
+#: src/libslic3r/PrintConfig.cpp:3387
 msgid "Show the full list of SLA print configuration options."
 msgstr "Mostrar a lista completa de opções de config. de impressão de SLA."
 
-#: src/libslic3r/PrintConfig.cpp:3191
+#: src/libslic3r/PrintConfig.cpp:3391
 msgid "Output Model Info"
 msgstr "Informações do modelo de saída"
 
-#: src/libslic3r/PrintConfig.cpp:3192
+#: src/libslic3r/PrintConfig.cpp:3392
 msgid "Write information about the model to the console."
 msgstr "Escreva informações sobre o modelo para o console."
 
-#: src/libslic3r/PrintConfig.cpp:3196
+#: src/libslic3r/PrintConfig.cpp:3396
 msgid "Save config file"
 msgstr "Salvar arquivo de config."
 
-#: src/libslic3r/PrintConfig.cpp:3197
+#: src/libslic3r/PrintConfig.cpp:3397
 msgid "Save configuration to the specified file."
 msgstr "Salvar config. para o arquivo específico."
 
-#: src/libslic3r/PrintConfig.cpp:3207
+#: src/libslic3r/PrintConfig.cpp:3407
 msgid "Align XY"
 msgstr "Alinhar XY"
 
-#: src/libslic3r/PrintConfig.cpp:3208
+#: src/libslic3r/PrintConfig.cpp:3408
 msgid "Align the model to the given point."
 msgstr "Alinhar modelo de acordo com o ponto inserido."
 
-#: src/libslic3r/PrintConfig.cpp:3213
+#: src/libslic3r/PrintConfig.cpp:3413
 msgid "Cut model at the given Z."
 msgstr "Cortar modelo ao Z fornecido."
 
-#: src/libslic3r/PrintConfig.cpp:3234
+#: src/libslic3r/PrintConfig.cpp:3434
 msgid "Center"
 msgstr "Centralizar"
 
-#: src/libslic3r/PrintConfig.cpp:3235
+#: src/libslic3r/PrintConfig.cpp:3435
 msgid "Center the print around the given center."
 msgstr "Centralizar a impressão de acordo com o centro informado."
 
-#: src/libslic3r/PrintConfig.cpp:3239
+#: src/libslic3r/PrintConfig.cpp:3439
 msgid "Don't arrange"
 msgstr "Não organizar"
 
-#: src/libslic3r/PrintConfig.cpp:3240
+#: src/libslic3r/PrintConfig.cpp:3440
 msgid ""
 "Do not rearrange the given models before merging and keep their original XY "
 "coordinates."
@@ -9184,27 +10618,27 @@ msgstr ""
 "Não reorganize os modelos fornecidos antes de Mesclar e manter suas "
 "coordenadas XY originais."
 
-#: src/libslic3r/PrintConfig.cpp:3243
+#: src/libslic3r/PrintConfig.cpp:3443
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: src/libslic3r/PrintConfig.cpp:3244
+#: src/libslic3r/PrintConfig.cpp:3444
 msgid "Multiply copies by this factor."
 msgstr "Multiplicar cópias por esse fator."
 
-#: src/libslic3r/PrintConfig.cpp:3248
+#: src/libslic3r/PrintConfig.cpp:3448
 msgid "Duplicate by grid"
 msgstr "Duplicar por grade"
 
-#: src/libslic3r/PrintConfig.cpp:3249
+#: src/libslic3r/PrintConfig.cpp:3449
 msgid "Multiply copies by creating a grid."
 msgstr "Multiplique cópias criando uma grade."
 
-#: src/libslic3r/PrintConfig.cpp:3252
+#: src/libslic3r/PrintConfig.cpp:3452
 msgid "Merge"
 msgstr "Mesclar"
 
-#: src/libslic3r/PrintConfig.cpp:3253
+#: src/libslic3r/PrintConfig.cpp:3453
 msgid ""
 "Arrange the supplied models in a plate and merge them in a single model in "
 "order to perform actions once."
@@ -9212,7 +10646,7 @@ msgstr ""
 "Organize os modelos fornecidos em uma placa e junte-os em um único modelo, a "
 "fim de executar ações uma só vez."
 
-#: src/libslic3r/PrintConfig.cpp:3258
+#: src/libslic3r/PrintConfig.cpp:3458
 msgid ""
 "Try to repair any non-manifold meshes (this option is implicitly added "
 "whenever we need to slice the model to perform the requested action)."
@@ -9221,31 +10655,31 @@ msgstr ""
 "adicionada sempre que precisamos cortar o modelo para executar a ação "
 "solicitada)."
 
-#: src/libslic3r/PrintConfig.cpp:3262
+#: src/libslic3r/PrintConfig.cpp:3462
 msgid "Rotation angle around the Z axis in degrees."
 msgstr "Ângulo de rotação ao redor do eixo Zem graus."
 
-#: src/libslic3r/PrintConfig.cpp:3266
+#: src/libslic3r/PrintConfig.cpp:3466
 msgid "Rotate around X"
 msgstr "Rotacionar no X"
 
-#: src/libslic3r/PrintConfig.cpp:3267
+#: src/libslic3r/PrintConfig.cpp:3467
 msgid "Rotation angle around the X axis in degrees."
 msgstr "Ângulo de rotação ao redor do eixo X em graus."
 
-#: src/libslic3r/PrintConfig.cpp:3271
+#: src/libslic3r/PrintConfig.cpp:3471
 msgid "Rotate around Y"
 msgstr "Rotacionar no Y"
 
-#: src/libslic3r/PrintConfig.cpp:3272
+#: src/libslic3r/PrintConfig.cpp:3472
 msgid "Rotation angle around the Y axis in degrees."
 msgstr "Ângulo de rotação ao redor do eixo Y em graus."
 
-#: src/libslic3r/PrintConfig.cpp:3277
+#: src/libslic3r/PrintConfig.cpp:3477
 msgid "Scaling factor or percentage."
 msgstr "Escalando fator ou porcentagem."
 
-#: src/libslic3r/PrintConfig.cpp:3282
+#: src/libslic3r/PrintConfig.cpp:3482
 msgid ""
 "Detect unconnected parts in the given model(s) and split them into separate "
 "objects."
@@ -9253,27 +10687,27 @@ msgstr ""
 "Detecte peças não conectadas em um determinado modelo (s) e divida-as em "
 "objetos separados."
 
-#: src/libslic3r/PrintConfig.cpp:3285
+#: src/libslic3r/PrintConfig.cpp:3485
 msgid "Scale to Fit"
 msgstr "Dimensionar para caber"
 
-#: src/libslic3r/PrintConfig.cpp:3286
+#: src/libslic3r/PrintConfig.cpp:3486
 msgid "Scale to fit the given volume."
 msgstr "Escalar para se adequar ao volume informado."
 
-#: src/libslic3r/PrintConfig.cpp:3295
+#: src/libslic3r/PrintConfig.cpp:3495
 msgid "Ignore non-existent config files"
 msgstr "Ignorar arquivos de config. não existentes"
 
-#: src/libslic3r/PrintConfig.cpp:3296
+#: src/libslic3r/PrintConfig.cpp:3496
 msgid "Do not fail if a file supplied to --load does not exist."
 msgstr "Não falhe se um arquivo fornecido para--carregamento não existe."
 
-#: src/libslic3r/PrintConfig.cpp:3299
+#: src/libslic3r/PrintConfig.cpp:3499
 msgid "Load config file"
 msgstr "Carregar arquivo de config."
 
-#: src/libslic3r/PrintConfig.cpp:3300
+#: src/libslic3r/PrintConfig.cpp:3500
 msgid ""
 "Load configuration from the specified file. It can be used more than once to "
 "load options from multiple files."
@@ -9281,11 +10715,11 @@ msgstr ""
 "Carregar a config. do arquivo especificado. Ele pode ser usado mais de uma "
 "vez para carregar opções de vários arquivos."
 
-#: src/libslic3r/PrintConfig.cpp:3303
+#: src/libslic3r/PrintConfig.cpp:3503
 msgid "Output File"
 msgstr "Arquivo de saída"
 
-#: src/libslic3r/PrintConfig.cpp:3304
+#: src/libslic3r/PrintConfig.cpp:3504
 msgid ""
 "The file where the output will be written (if not specified, it will be "
 "based on the input file)."
@@ -9293,11 +10727,11 @@ msgstr ""
 "O arquivo onde a saída será gravada (se não for especificado, ele será "
 "baseado no arquivo de entrada)."
 
-#: src/libslic3r/PrintConfig.cpp:3314
+#: src/libslic3r/PrintConfig.cpp:3514
 msgid "Data directory"
 msgstr "Diretório de dados"
 
-#: src/libslic3r/PrintConfig.cpp:3315
+#: src/libslic3r/PrintConfig.cpp:3515
 msgid ""
 "Load and store settings at the given directory. This is useful for "
 "maintaining different profiles or including configurations from a network "
@@ -9306,23 +10740,26 @@ msgstr ""
 "Carregar e armazenar as config. no diretório especificado. Isso é útil para "
 "manter perfis diferentes ou incluir config. de um armazenamento de rede."
 
-#: src/libslic3r/PrintConfig.cpp:3318
+#: src/libslic3r/PrintConfig.cpp:3518
 msgid "Logging level"
 msgstr "Nível de registro"
 
-#: src/libslic3r/PrintConfig.cpp:3319
+#: src/libslic3r/PrintConfig.cpp:3519
 msgid ""
-"Messages with severity lower or eqal to the loglevel will be printed out. 0:"
-"trace, 1:debug, 2:info, 3:warning, 4:error, 5:fatal"
+"Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:"
+"trace\n"
+"For example. loglevel=2 logs fatal, error and warning level messages."
 msgstr ""
-"Mensagens com severidade menor ou igual para o LogLevel serão impressos. 0: "
-"Trace, 1: debug, 2: info, 3: aviso, 4: erro, 5: fatal"
+"Define a sensibilidade de registro. 0:fatal, 1:erro, 2:warning, 3:info, 4:"
+"debug, 5:trace\n"
+"Por exemplo. loglevel=2 logs de mensagens fatais, de nível de erro e de "
+"aviso."
 
-#: src/libslic3r/PrintConfig.cpp:3324
+#: src/libslic3r/PrintConfig.cpp:3525
 msgid "Render with a software renderer"
 msgstr "Renderizar com um software renderizador"
 
-#: src/libslic3r/PrintConfig.cpp:3325
+#: src/libslic3r/PrintConfig.cpp:3526
 msgid ""
 "Render with a software renderer. The bundled MESA software renderer is "
 "loaded instead of the default OpenGL driver."
@@ -9330,57 +10767,94 @@ msgstr ""
 "Renderizar com um software renderizador. O renderizador de software MESA "
 "empacotado é carregado em vez do driver OpenGL padrão."
 
-#: src/libslic3r/PrintObject.cpp:110
+#: src/libslic3r/PrintObject.cpp:108
 msgid "Processing triangulated mesh"
 msgstr "Processando malha triangulada"
 
-#: src/libslic3r/PrintObject.cpp:141
+#: src/libslic3r/PrintObject.cpp:152
 msgid "Generating perimeters"
 msgstr "Gerando perímetros"
 
-#: src/libslic3r/PrintObject.cpp:251
+#: src/libslic3r/PrintObject.cpp:255
 msgid "Preparing infill"
 msgstr "Preparando o preenchimento"
 
-#: src/libslic3r/PrintObject.cpp:391
+#: src/libslic3r/PrintObject.cpp:395
 msgid "Generating support material"
 msgstr "Gerando material de suporte"
 
-#: src/libslic3r/GCode/PreviewData.cpp:160
-msgid "Mixed"
-msgstr "Misto"
-
-#: src/libslic3r/GCode/PreviewData.cpp:380
+#: src/libslic3r/GCode/PreviewData.cpp:347
 msgid "Height (mm)"
 msgstr "Altura (mm)"
 
-#: src/libslic3r/GCode/PreviewData.cpp:382
+#: src/libslic3r/GCode/PreviewData.cpp:349
 msgid "Width (mm)"
 msgstr "Espessura (mm)"
 
-#: src/libslic3r/GCode/PreviewData.cpp:384
+#: src/libslic3r/GCode/PreviewData.cpp:351
 msgid "Speed (mm/s)"
 msgstr "Velocidade (mm/s)"
 
-#: src/libslic3r/GCode/PreviewData.cpp:386
-msgid "Volumetric flow rate (mm3/s)"
-msgstr "Fluxo volumétrico (mm3/s)"
+#: src/libslic3r/GCode/PreviewData.cpp:353
+msgid "Fan Speed (%)"
+msgstr "Velocidade da ventoinha (%)"
 
-#: src/libslic3r/GCode/PreviewData.cpp:477
-msgid "Default print color"
-msgstr "Cor de impressão padrão"
+#: src/libslic3r/GCode/PreviewData.cpp:355
+msgid "Volumetric flow rate (mm³/s)"
+msgstr "Vazão volumétrica (mm³/s)"
 
-#: src/libslic3r/GCode/PreviewData.cpp:484
-#, c-format
-msgid "up to %.2f mm"
-msgstr "até %.2f mm"
+#~ msgid "Layers heights"
+#~ msgstr "Altura de camada"
 
-#: src/libslic3r/GCode/PreviewData.cpp:488
-#, c-format
-msgid "above %.2f mm"
-msgstr "acima de %.2f mm"
+#~ msgid "Position (mm)"
+#~ msgstr "Posição (mm)"
 
-#: src/libslic3r/GCode/PreviewData.cpp:493
-#, c-format
-msgid "%.2f - %.2f mm"
-msgstr "%.2f - %.2f mm"
+#~ msgid "Displacement (mm)"
+#~ msgstr "Deslocamento (mm)"
+
+#~ msgid "Rotation (deg)"
+#~ msgstr "Rotacionar (graus)"
+
+#~ msgid "Scale (%)"
+#~ msgstr "Escala (%)"
+
+#~ msgid "Change Application &Language"
+#~ msgstr "Mudar &idioma"
+
+#~ msgid "Select new extruder for the object/part"
+#~ msgstr "Selecionar nova extrusora para objeto/parte"
+
+#~ msgid "Select extruder number for selected objects and/or parts"
+#~ msgstr ""
+#~ "Selecione o número da extrusora para objetos e/ou peças selecionados"
+
+#~ msgid "Object Manipulation"
+#~ msgstr "Manipulação de objeto"
+
+#~ msgid "Main Shortcuts"
+#~ msgstr "Atalhos principais"
+
+#~ msgid "Select All objects"
+#~ msgstr "Selecionar todos os objetos"
+
+#~ msgid "Delete All"
+#~ msgstr "Deletar todos"
+
+#~ msgid "Zoom to selected object"
+#~ msgstr "Ampliar para o objeto selecionado"
+
+#~ msgid "Plater Shortcuts"
+#~ msgstr "Atalhos da bandeja"
+
+#~ msgid "Preview Shortcuts"
+#~ msgstr "Atalhos de visualização"
+
+#~ msgid "The selected project is no more available"
+#~ msgstr "O projeto selecionado não está mais disponível"
+
+#~ msgid ""
+#~ "Messages with severity lower or eqal to the loglevel will be printed out. "
+#~ "0:trace, 1:debug, 2:info, 3:warning, 4:error, 5:fatal"
+#~ msgstr ""
+#~ "Mensagens com severidade menor ou igual para o LogLevel serão impressos. "
+#~ "0: Trace, 1: debug, 2: info, 3: aviso, 4: erro, 5: fatal"

From e9423ab86d1a110d23395626743ff97f98b52b33 Mon Sep 17 00:00:00 2001
From: Aegean Odyssey <57586704+aegean-odyssey@users.noreply.github.com>
Date: Sat, 25 Apr 2020 02:51:02 +0000
Subject: [PATCH 005/138] Also search vendor directory for printer profile
 resources. Search the vendor directory using the same conventions used to
 search the profiles directory when looking for thumbnails, bed_models, and
 bed_textures. Allows a complete, "Config Wizard"-friendly custom vendor
 profile to be placed in the (user's configuration) vendor directory.

---
 src/slic3r/GUI/3DBed.cpp        | 10 ++++++++--
 src/slic3r/GUI/ConfigWizard.cpp | 30 ++++++++++++++++++------------
 2 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp
index 742941b84..99c58c84f 100644
--- a/src/slic3r/GUI/3DBed.cpp
+++ b/src/slic3r/GUI/3DBed.cpp
@@ -338,8 +338,11 @@ static std::string system_print_bed_model(const Preset &preset)
 {
 	std::string out;
 	const VendorProfile::PrinterModel *pm = PresetUtils::system_printer_model(preset);
-	if (pm != nullptr && ! pm->bed_model.empty())
+	if (pm != nullptr && ! pm->bed_model.empty()) {
+	    out = Slic3r::data_dir() + "/vendor/" + preset.vendor->id + "/" + pm->bed_model;
+	    if (! boost::filesystem::exists(boost::filesystem::path(out)))
 		out = Slic3r::resources_dir() + "/profiles/" + preset.vendor->id + "/" + pm->bed_model;
+	}
 	return out;
 }
 
@@ -347,8 +350,11 @@ static std::string system_print_bed_texture(const Preset &preset)
 {
 	std::string out;
 	const VendorProfile::PrinterModel *pm = PresetUtils::system_printer_model(preset);
-	if (pm != nullptr && ! pm->bed_texture.empty())
+	if (pm != nullptr && ! pm->bed_texture.empty()) {
+	    out = Slic3r::data_dir() + "/vendor/" + preset.vendor->id + "/" + pm->bed_texture;
+	    if (! boost::filesystem::exists(boost::filesystem::path(out)))
 		out = Slic3r::resources_dir() + "/profiles/" + preset.vendor->id + "/" + pm->bed_texture;
+	}
 	return out;
 }
 
diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp
index e242033d9..99ab57cd4 100644
--- a/src/slic3r/GUI/ConfigWizard.cpp
+++ b/src/slic3r/GUI/ConfigWizard.cpp
@@ -188,22 +188,28 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxSt
 
         wxBitmap bitmap;
         int bitmap_width = 0;
-        const wxString bitmap_file = GUI::from_u8(Slic3r::resources_dir() + "/profiles/" + vendor.id + "/" + model.id + "_thumbnail.png");
-        if (wxFileExists(bitmap_file)) {
+	const wxString bitmap_file = GUI::from_u8(Slic3r::data_dir() + "/vendor/" + vendor.id + "/" + model.id + "_thumbnail.png");
+	if (wxFileExists(bitmap_file)) {
             bitmap.LoadFile(bitmap_file, wxBITMAP_TYPE_PNG);
             bitmap_width = bitmap.GetWidth();
         } else {
-            BOOST_LOG_TRIVIAL(warning) << boost::format("Can't find bitmap file `%1%` for vendor `%2%`, printer `%3%`, using placeholder icon instead")
-                % bitmap_file
-                % vendor.id
-                % model.id;
+ 	    const wxString bitmap_file = GUI::from_u8(Slic3r::resources_dir() + "/profiles/" + vendor.id + "/" + model.id + "_thumbnail.png");
+	    if (wxFileExists(bitmap_file)) {
+		bitmap.LoadFile(bitmap_file, wxBITMAP_TYPE_PNG);
+		bitmap_width = bitmap.GetWidth();
+	    } else {
+		BOOST_LOG_TRIVIAL(warning) << boost::format("Can't find bitmap file `%1%` for vendor `%2%`, printer `%3%`, using placeholder icon instead")
+		    % bitmap_file
+		    % vendor.id
+		    % model.id;
 
-            const wxString placeholder_file = GUI::from_u8(Slic3r::var(PRINTER_PLACEHOLDER));
-            if (wxFileExists(placeholder_file)) {
-                bitmap.LoadFile(placeholder_file, wxBITMAP_TYPE_PNG);
-                bitmap_width = bitmap.GetWidth();
-            }
-        }
+		const wxString placeholder_file = GUI::from_u8(Slic3r::var(PRINTER_PLACEHOLDER));
+		if (wxFileExists(placeholder_file)) {
+		    bitmap.LoadFile(placeholder_file, wxBITMAP_TYPE_PNG);
+		    bitmap_width = bitmap.GetWidth();
+		}
+	    }
+	}
 
         auto *title = new wxStaticText(this, wxID_ANY, model.name, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
         title->SetFont(font_name);

From 1a8a5984adf1c0ec341b92a413e24261a277e4b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Fri, 2 Oct 2020 04:18:44 +0200
Subject: [PATCH 006/138] Connect lines in the adaptive infill using hooks

---
 src/libslic3r/Fill/FillAdaptive.cpp | 250 +++++++++++++++++++++++++++-
 1 file changed, 246 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 7813d64a3..4a3c1b9b2 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -14,11 +14,18 @@
 #include <cstdlib>
 #include <cmath>
 #include <algorithm>
+#include <numeric>
 
 // Boost pool: Don't use mutexes to synchronize memory allocation.
 #define BOOST_POOL_NO_MT
 #include <boost/pool/object_pool.hpp>
 
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+#include <boost/geometry/index/rtree.hpp>
+
+
 namespace Slic3r {
 namespace FillAdaptive {
 
@@ -475,7 +482,7 @@ static void generate_infill_lines_recursive(
         Line  new_line(Point::new_scale(from), Point::new_scale(to));
         if (last_line.a.x() == std::numeric_limits<coord_t>::max()) {
             last_line.a = new_line.a;
-        } else if ((new_line.a - last_line.b).cwiseAbs().maxCoeff() > 300) { // SCALED_EPSILON is 100 and it is not enough
+        } else if ((new_line.a - last_line.b).cwiseAbs().maxCoeff() > 1000) { // SCALED_EPSILON is 100 and it is not enough
             context.output_lines.emplace_back(last_line);
             last_line.a = new_line.a;
         }
@@ -546,6 +553,234 @@ static void export_infill_lines_to_svg(const ExPolygon &expoly, const Polylines
 }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
+static Matrix2d rotation_matrix_from_vector(const Point &vector)
+{
+    Matrix2d rotation;
+    rotation.block<1, 2>(0, 0) = vector.cast<double>() / vector.cast<double>().norm();
+    rotation(1, 0)             = -rotation(0, 1);
+    rotation(1, 1)             = rotation(0, 0);
+
+    return rotation;
+}
+
+struct Intersection
+{
+    size_t    closest_line_idx;
+    Line      closest_line;
+    Point     closest_point;
+    size_t    intersect_pl_idx;
+    Polyline *intersect_pl;
+    Line      intersect_line;
+    bool      forward;
+    bool      used = false;
+
+    Intersection(const size_t closest_line_idx,
+                 const Line & closest_line,
+                 const Point &closest_point,
+                 size_t       intersect_pl_idx,
+                 Polyline *   intersect_pl,
+                 const Line & intersect_line,
+                 bool         forward)
+        : closest_line_idx(closest_line_idx)
+        , closest_line(closest_line)
+        , closest_point(closest_point)
+        , intersect_pl_idx(intersect_pl_idx)
+        , intersect_pl(intersect_pl)
+        , intersect_line(intersect_line)
+        , forward(forward){};
+};
+
+static inline Intersection *get_nearest_intersection(std::vector<std::pair<Intersection, double>> &intersect_line, const size_t first_idx)
+{
+    if (first_idx == 0)
+        return &intersect_line[first_idx + 1].first;
+    else if (first_idx == (intersect_line.size() - 1))
+        return &intersect_line[first_idx - 1].first;
+    else if ((intersect_line[first_idx].second - intersect_line[first_idx - 1].second) < (intersect_line[first_idx + 1].second - intersect_line[first_idx].second))
+        return &intersect_line[first_idx - 1].first;
+    else
+        return &intersect_line[first_idx + 1].first;
+};
+
+static Line create_offset_line(const Line &line_to_offset, const Intersection &intersection, const double scaled_spacing)
+{
+    Matrix2d rotation          = rotation_matrix_from_vector(line_to_offset.vector());
+    Vec2d    offset_vector     = ((scaled_spacing / 2.) * line_to_offset.normal().cast<double>().normalized());
+    Vec2d    offset_line_point = line_to_offset.a.cast<double>();
+    Vec2d    furthest_point    = (intersection.forward ? intersection.intersect_line.b : intersection.intersect_line.a).cast<double>();
+
+    if ((rotation * furthest_point).y() >= (rotation * offset_line_point).y()) offset_vector *= -1;
+
+    Line  offset_line    = line_to_offset;
+    Point line_extension = (1000000. * line_to_offset.vector().cast<double>().normalized()).cast<coord_t>();
+
+    offset_line.translate(offset_vector.x(), offset_vector.y());
+    offset_line.a -= line_extension;
+    offset_line.b += line_extension;
+
+    return offset_line;
+};
+
+static void connect_lines_with_hooks(Polylines &&lines, Polylines &polylines_out, const double spacing, const int hook_length)
+{
+    namespace bgm = boost::geometry::model;
+    namespace bgi = boost::geometry::index;
+
+    using rtree_point_t   = bgm::point<coord_t, 2, boost::geometry::cs::cartesian>;
+    using rtree_segment_t = bgm::segment<rtree_point_t>;
+    using rtree_t         = bgi::rtree<std::pair<rtree_segment_t, size_t>, bgi::rstar<16, 4>>;
+
+    std::vector<std::pair<rtree_segment_t, size_t>> rtee_segments;
+    size_t                                          poly_idx = 0;
+    for (const Polyline &poly : lines) {
+        rtee_segments.emplace_back(rtree_segment_t(rtree_point_t(poly.points.front().x(), poly.points.front().y()),
+                                                   rtree_point_t(poly.points.back().x(), poly.points.back().y())),
+                                   poly_idx);
+        ++poly_idx;
+    }
+    rtree_t rtree(rtee_segments.begin(), rtee_segments.end());
+
+    std::vector<Intersection> intersections;
+    for (Polyline &line : lines) {
+        Point                                           front_point = line.points.front();
+        Point                                           back_point  = line.points.back();
+        std::vector<std::pair<rtree_segment_t, size_t>> closest;
+
+        closest.reserve(2);
+        rtree.query(bgi::nearest(rtree_point_t(front_point.x(), front_point.y()), 2), std::back_inserter(closest));
+        if (((Line) lines[closest[0].second]).distance_to(front_point) <= 1000)
+            intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], front_point, &line - lines.data(), &line, (Line) line, true);
+
+        closest.clear();
+        closest.reserve(2);
+        rtree.query(bgi::nearest(rtree_point_t(back_point.x(), back_point.y()), 2), std::back_inserter(closest));
+        if (((Line) lines[closest[0].second]).distance_to(back_point) <= 1000)
+            intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], back_point, &line - lines.data(), &line, (Line) line, false);
+    }
+
+    std::sort(intersections.begin(), intersections.end(),
+              [](const Intersection &i1, const Intersection &i2) { return i1.closest_line_idx < i2.closest_line_idx; });
+
+    std::vector<size_t> merged_with(lines.size());
+    std::iota(merged_with.begin(), merged_with.end(), 0);
+
+    auto get_merged_index = [&merged_with](size_t polyline_idx) {
+        for (size_t last = polyline_idx;;) {
+            size_t lower = merged_with[last];
+            if (lower == last) {
+                merged_with[polyline_idx] = lower;
+                polyline_idx              = lower;
+                break;
+            }
+            last = lower;
+        }
+
+        return polyline_idx;
+    };
+
+    for (size_t min_idx = 0; min_idx < intersections.size(); ++min_idx) {
+        std::vector<std::pair<Intersection, double>> intersect_line;
+        Matrix2d                                     rotation = rotation_matrix_from_vector(intersections[min_idx].closest_line.vector());
+        intersect_line.emplace_back(intersections[min_idx], (rotation * intersections[min_idx].closest_point.cast<double>()).x());
+
+        for (size_t max_idx = min_idx + 1; max_idx < intersections.size(); ++max_idx) {
+            if (intersections[min_idx].closest_line_idx == intersections[max_idx].closest_line_idx) {
+                intersect_line.emplace_back(intersections[max_idx], (rotation * intersections[max_idx].closest_point.cast<double>()).x());
+                min_idx = max_idx;
+            }
+        }
+
+        if (intersect_line.size() <= 1) continue;
+
+        std::sort(intersect_line.begin(), intersect_line.end(), [](const auto &i1, const auto &i2) { return i1.second < i2.second; });
+
+        for (size_t first_idx = 0; first_idx < intersect_line.size(); ++first_idx) {
+            Intersection &first_i   = intersect_line[first_idx].first;
+            Intersection &nearest_i = *get_nearest_intersection(intersect_line, first_idx);
+
+            if (first_i.used || first_i.intersect_pl->points.size() == 0) continue;
+
+            Line   intersection_line(first_i.closest_point, nearest_i.closest_point);
+            Point  hook_vector              = (hook_length * intersection_line.vector().cast<double>().normalized()).cast<coord_t>();
+            Line   offset_line              = create_offset_line(intersection_line, first_i, scale_(spacing));
+            double intersection_line_length = intersection_line.length();
+
+            {
+                nearest_i.intersect_pl_idx = get_merged_index(nearest_i.intersect_pl_idx);
+                nearest_i.intersect_pl     = &lines[nearest_i.intersect_pl_idx];
+
+                if (!nearest_i.used && nearest_i.intersect_pl->points.size() != 0)
+                    nearest_i.forward = (nearest_i.intersect_pl->points.front() == nearest_i.closest_point);
+            }
+
+            Point first_i_point, nearest_i_point;
+            if (first_i.intersect_line.intersection(offset_line, &first_i_point) &&
+                nearest_i.intersect_line.intersection(offset_line, &nearest_i_point)) {
+                if (!nearest_i.used && nearest_i.intersect_pl->points.size() != 0 && intersection_line_length <= 2 * hook_length) {
+                    if (first_i.intersect_pl_idx == nearest_i.intersect_pl_idx) {
+                        if (!first_i.forward) { std::swap(first_i_point, nearest_i_point); }
+
+                        first_i.intersect_pl->points.front() = first_i_point;
+                        first_i.intersect_pl->points.back()  = nearest_i_point;
+                        first_i.intersect_pl->points.emplace(first_i.intersect_pl->points.begin(), nearest_i_point);
+                    } else {
+                        Points merge_polyline_points;
+                        size_t first_polyline_lenght = first_i.intersect_pl->points.size();
+                        size_t short_polyline_lenght = nearest_i.intersect_pl->points.size();
+                        merge_polyline_points.reserve(first_polyline_lenght + short_polyline_lenght);
+
+                        if (first_i.forward) {
+                            if (nearest_i.forward)
+                                for (auto it = nearest_i.intersect_pl->points.rbegin(); it != nearest_i.intersect_pl->points.rend(); ++it)
+                                    merge_polyline_points.emplace_back(*it);
+                            else
+                                for (auto it = nearest_i.intersect_pl->points.begin(); it != nearest_i.intersect_pl->points.end(); ++it)
+                                    merge_polyline_points.emplace_back(*it);
+
+                            append(merge_polyline_points, std::move(first_i.intersect_pl->points));
+                            merge_polyline_points[short_polyline_lenght - 1] = nearest_i_point;
+                            merge_polyline_points[short_polyline_lenght]     = first_i_point;
+                        } else {
+                            append(merge_polyline_points, std::move(first_i.intersect_pl->points));
+                            if (nearest_i.forward)
+                                for (auto it = nearest_i.intersect_pl->points.begin(); it != nearest_i.intersect_pl->points.end(); ++it)
+                                    merge_polyline_points.emplace_back(*it);
+                            else
+                                for (auto it = nearest_i.intersect_pl->points.rbegin(); it != nearest_i.intersect_pl->points.rend(); ++it)
+                                    merge_polyline_points.emplace_back(*it);
+
+                            merge_polyline_points[first_polyline_lenght - 1] = first_i_point;
+                            merge_polyline_points[first_polyline_lenght]     = nearest_i_point;
+                        }
+
+                        merged_with[nearest_i.intersect_pl_idx] = merged_with[first_i.intersect_pl_idx];
+
+                        nearest_i.intersect_pl->points.clear();
+                        first_i.intersect_pl->points = merge_polyline_points;
+                    }
+
+                    first_i.used   = true;
+                    nearest_i.used = true;
+                } else {
+                    if (first_i.forward) {
+                        first_i.intersect_pl->points.front() = first_i_point;
+                        first_i.intersect_pl->points.emplace(first_i.intersect_pl->points.begin(), first_i_point + hook_vector);
+                    } else {
+                        first_i.intersect_pl->points.back() = first_i_point;
+                        first_i.intersect_pl->points.emplace_back(first_i_point + hook_vector);
+                    }
+
+                    first_i.used = true;
+                }
+            }
+        }
+    }
+
+    polylines_out.reserve(polylines_out.size() + std::count_if(lines.begin(), lines.end(), [](const Polyline &pl) { return !pl.empty(); }));
+    for (Polyline &pl : lines)
+        if (!pl.empty()) polylines_out.emplace_back(std::move(pl));
+}
+
 void Filler::_fill_surface_single(
     const FillParams &             params,
     unsigned int                   thickness_layers,
@@ -591,6 +826,10 @@ void Filler::_fill_surface_single(
     // Crop all polylines
     all_polylines = intersection_pl(std::move(all_polylines), to_polygons(expolygon));
 
+    // After intersection_pl some polylines with only one line are split into more lines
+    for (Polyline &polyline : all_polylines)
+        if (polyline.points.size() > 2) polyline = Polyline(polyline.points.front(), polyline.points.back());
+
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {
         static int iRun = 0;
@@ -598,10 +837,13 @@ void Filler::_fill_surface_single(
     }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
-    if (params.dont_connect || all_polylines.size() <= 1)
-        append(polylines_out, std::move(all_polylines));
+    Polylines all_polylines_with_hooks;
+    connect_lines_with_hooks(std::move(all_polylines), all_polylines_with_hooks, this->spacing, int(scale_(2.)));
+
+    if (params.dont_connect || all_polylines_with_hooks.size() <= 1)
+        append(polylines_out, std::move(all_polylines_with_hooks));
     else
-        connect_infill(chain_polylines(std::move(all_polylines)), expolygon, polylines_out, this->spacing, params);
+        connect_infill(chain_polylines(std::move(all_polylines_with_hooks)), expolygon, polylines_out, this->spacing, params);
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {

From 7a9aec2b0bc24be1253b90efcb2452ec26c1665d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Fri, 2 Oct 2020 11:15:55 +0200
Subject: [PATCH 007/138] Connect infill with perimeters using hooks

---
 src/libslic3r/Fill/FillAdaptive.cpp |   2 +-
 src/libslic3r/Fill/FillBase.cpp     | 125 +++++++++++++++++++++++++++-
 src/libslic3r/Fill/FillBase.hpp     |   2 +-
 3 files changed, 125 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 4a3c1b9b2..b55a59c3e 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -843,7 +843,7 @@ void Filler::_fill_surface_single(
     if (params.dont_connect || all_polylines_with_hooks.size() <= 1)
         append(polylines_out, std::move(all_polylines_with_hooks));
     else
-        connect_infill(chain_polylines(std::move(all_polylines_with_hooks)), expolygon, polylines_out, this->spacing, params);
+        connect_infill(chain_polylines(std::move(all_polylines_with_hooks)), expolygon, polylines_out, this->spacing, params, int(scale_(2.)));
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index fc5f548a3..d68c770ab 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -833,7 +833,67 @@ void mark_boundary_segments_touching_infill(
 	}
 }
 
-void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_src, Polylines &polylines_out, const double spacing, const FillParams &params)
+static double compute_distance_to_consumed_point(const std::vector<Points> &                       boundary,
+                                                 const std::vector<std::vector<ContourPointData>> &boundary_data,
+                                                 size_t                                            contour_idx,
+                                                 size_t                                            point_index,
+                                                 bool                                              forward)
+{
+    Point  predecessor    = boundary[contour_idx][point_index];
+    double total_distance = 0;
+
+    do {
+        if (forward)
+            point_index = (point_index == (boundary[contour_idx].size() - 1)) ? 0 : (point_index + 1);
+        else
+            point_index = (point_index > 0) ? (point_index - 1) : (boundary[contour_idx].size() - 1);
+
+        Point successor = boundary[contour_idx][point_index];
+        total_distance += (successor - predecessor).cast<double>().norm();
+        predecessor = successor;
+    } while (!boundary_data[contour_idx][point_index].point_consumed);
+
+    return total_distance;
+}
+
+static std::pair<Points, double> get_hook_path(const std::vector<Points> &                       boundary,
+                                               const std::vector<std::vector<ContourPointData>> &boundary_data,
+                                               size_t                                            contour_idx,
+                                               size_t                                            point_index,
+                                               bool                                              forward,
+                                               int                                               hook_length,
+                                               std::vector<Point> &                              not_connected)
+{
+    double total_distance = 0;
+
+    Points points;
+    points.emplace_back(boundary[contour_idx][point_index]);
+
+    do {
+        if (forward)
+            point_index = (point_index == (boundary[contour_idx].size() - 1)) ? 0 : (point_index + 1);
+        else
+            point_index = (point_index > 0) ? (point_index - 1) : (boundary[contour_idx].size() - 1);
+
+        Point successor = boundary[contour_idx][point_index];
+        total_distance += (successor - points.back()).cast<double>().norm();
+        points.emplace_back(successor);
+    } while (!boundary_data[contour_idx][point_index].point_consumed && total_distance < hook_length &&
+             std::find(not_connected.begin(), not_connected.end(), points.back()) == not_connected.end());
+
+    if (total_distance > hook_length) {
+        Vec2d  vector            = (points.back() - points[points.size() - 2]).cast<double>();
+        double vector_length     = vector.norm();
+        double shrink_vec_length = vector_length - (total_distance - hook_length);
+
+        points.back() = ((vector / vector_length) * shrink_vec_length).cast<coord_t>() + points[points.size() - 2];
+        // total_distance += (shrink_vec_length - vector_length);
+    }
+
+    return std::make_pair(points, total_distance);
+}
+
+void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_src, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length)
 {
 	assert(! infill_ordered.empty());
 	assert(! boundary_src.contour.points.empty());
@@ -1005,7 +1065,68 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_
 		if (next_marked)
 			contour_data[cp2next->second].point_consumed = false;
 	}
-	polylines_out.reserve(polylines_out.size() + std::count_if(infill_ordered.begin(), infill_ordered.end(), [](const Polyline &pl) { return ! pl.empty(); }));
+
+    auto get_merged_index = [&merged_with](size_t polyline_idx) {
+        for (size_t last = polyline_idx;;) {
+            size_t lower = merged_with[last];
+            if (lower == last) {
+                merged_with[polyline_idx] = lower;
+                polyline_idx              = lower;
+                break;
+            }
+            last = lower;
+        }
+
+        return polyline_idx;
+    };
+
+    if (hook_length != 0) {
+        std::vector<Point> not_connect_points;
+        for (const std::pair<size_t, size_t> &contour_point : map_infill_end_point_to_boundary)
+            if (contour_point.first != boundary_idx_unconnected && !boundary_data[contour_point.first][contour_point.second].point_consumed)
+                not_connect_points.emplace_back(boundary[contour_point.first][contour_point.second]);
+
+        for (size_t endpoint_idx = 0; endpoint_idx < map_infill_end_point_to_boundary.size(); ++endpoint_idx) {
+            Polyline &                       polyline      = infill_ordered[get_merged_index(endpoint_idx / 2)];
+            const std::pair<size_t, size_t> &contour_point = map_infill_end_point_to_boundary[endpoint_idx];
+
+            if (contour_point.first != boundary_idx_unconnected &&
+                !boundary_data[contour_point.first][contour_point.second].point_consumed) {
+                Point boundary_point                          = boundary[contour_point.first][contour_point.second];
+                auto [points_forward, total_length_forward]   = get_hook_path(boundary, boundary_data, contour_point.first,
+                                                                            contour_point.second, true, hook_length, not_connect_points);
+                auto [points_backward, total_length_backward] = get_hook_path(boundary, boundary_data, contour_point.first,
+                                                                              contour_point.second, false, hook_length, not_connect_points);
+
+                Points points;
+                if (total_length_forward < hook_length && total_length_backward < hook_length) {
+                    continue;
+                } else if (total_length_forward < total_length_backward && total_length_forward >= hook_length) {
+                    points = std::move(points_forward);
+                } else if (total_length_backward < total_length_forward && total_length_backward >= hook_length) {
+                    points = std::move(points_backward);
+                } else if (total_length_forward > total_length_backward) {
+                    points = std::move(points_forward);
+                } else {
+                    points = std::move(points_backward);
+                }
+
+                if ((boundary_point - polyline.points.front()).cast<double>().squaredNorm() <= (SCALED_EPSILON * SCALED_EPSILON)) {
+                    Points merge_points;
+                    merge_points.reserve(polyline.points.size() + points.size() - 1);
+
+                    for (auto it = points.rbegin(); it != points.rend() - 1; ++it) merge_points.emplace_back(*it);
+
+                    append(merge_points, std::move(polyline.points));
+                    polyline.points = std::move(merge_points);
+                } else {
+                    for (auto it = points.begin() + 1; it != points.end(); ++it) polyline.points.emplace_back(*it);
+                }
+            }
+        }
+    }
+
+    polylines_out.reserve(polylines_out.size() + std::count_if(infill_ordered.begin(), infill_ordered.end(), [](const Polyline &pl) { return ! pl.empty(); }));
 	for (Polyline &pl : infill_ordered)
 		if (! pl.empty())
 			polylines_out.emplace_back(std::move(pl));
diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index 0779117eb..aedf39c81 100644
--- a/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
@@ -124,7 +124,7 @@ protected:
     virtual std::pair<float, Point> _infill_direction(const Surface *surface) const;
 
 public:
-    static void connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary, Polylines &polylines_out, double spacing, const FillParams &params);
+    static void connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary, Polylines &polylines_out, double spacing, const FillParams &params, const int hook_length = 0);
 
     static coord_t  _adjust_solid_spacing(const coord_t width, const coord_t distance);
 

From 0b4733f656dc953e1c72a00c69d60e1456753297 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Sat, 10 Oct 2020 21:34:04 +0200
Subject: [PATCH 008/138] The length of the hook is derived from spacing

---
 src/libslic3r/Fill/FillAdaptive.cpp | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index b55a59c3e..de6a596c5 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -781,6 +781,10 @@ static void connect_lines_with_hooks(Polylines &&lines, Polylines &polylines_out
         if (!pl.empty()) polylines_out.emplace_back(std::move(pl));
 }
 
+coord_t get_hook_length(const double spacing) {
+    return scale_(spacing) * 5;
+}
+
 void Filler::_fill_surface_single(
     const FillParams &             params,
     unsigned int                   thickness_layers,
@@ -837,13 +841,21 @@ void Filler::_fill_surface_single(
     }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
+    coord_t hook_length = get_hook_length(this->spacing);
     Polylines all_polylines_with_hooks;
-    connect_lines_with_hooks(std::move(all_polylines), all_polylines_with_hooks, this->spacing, int(scale_(2.)));
+    connect_lines_with_hooks(std::move(all_polylines), all_polylines_with_hooks, this->spacing, hook_length);
+
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+    {
+        static int iRun = 0;
+        export_infill_lines_to_svg(expolygon, all_polylines_with_hooks, debug_out_path("FillAdaptive-hooks-%d.svg", iRun ++));
+    }
+#endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
     if (params.dont_connect || all_polylines_with_hooks.size() <= 1)
         append(polylines_out, std::move(all_polylines_with_hooks));
     else
-        connect_infill(chain_polylines(std::move(all_polylines_with_hooks)), expolygon, polylines_out, this->spacing, params, int(scale_(2.)));
+        connect_infill(chain_polylines(std::move(all_polylines_with_hooks)), expolygon, polylines_out, this->spacing, params, hook_length);
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {

From 53975eeaa34e919e1f91234cb9680b7daa46ce31 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Sat, 10 Oct 2020 22:25:51 +0200
Subject: [PATCH 009/138] Rework of hooks adding

---
 src/libslic3r/Fill/FillAdaptive.cpp | 130 +++++++++++++++++++++-------
 src/libslic3r/Line.cpp              |   7 ++
 src/libslic3r/Line.hpp              |   2 +
 3 files changed, 109 insertions(+), 30 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index de6a596c5..c0583fa9a 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -621,27 +621,99 @@ static Line create_offset_line(const Line &line_to_offset, const Intersection &i
     return offset_line;
 };
 
-static void connect_lines_with_hooks(Polylines &&lines, Polylines &polylines_out, const double spacing, const int hook_length)
+namespace bg  = boost::geometry;
+namespace bgm = boost::geometry::model;
+namespace bgi = boost::geometry::index;
+
+// int64_t is needed because for coord_t bgi::intersects throws "bad numeric conversion: positive overflow"
+using rtree_point_t   = bgm::point<int64_t, 2, boost::geometry::cs::cartesian>;
+using rtree_segment_t = bgm::segment<rtree_point_t>;
+using rtree_t         = bgi::rtree<std::pair<rtree_segment_t, size_t>, bgi::rstar<16, 4>>;
+
+static void add_hook(const Intersection &intersection, const Line &hook_line, const double scaled_spacing, const int hook_length, const rtree_t &rtree)
 {
-    namespace bgm = boost::geometry::model;
-    namespace bgi = boost::geometry::index;
+    Vec2d  hook_vector_norm = hook_line.vector().cast<double>().normalized();
+    Vector hook_vector      = (hook_length * hook_vector_norm).cast<coord_t>();
+    Line   hook_line_offset = create_offset_line(hook_line, intersection, scaled_spacing);
 
-    using rtree_point_t   = bgm::point<coord_t, 2, boost::geometry::cs::cartesian>;
-    using rtree_segment_t = bgm::segment<rtree_point_t>;
-    using rtree_t         = bgi::rtree<std::pair<rtree_segment_t, size_t>, bgi::rstar<16, 4>>;
+    Point intersection_point;
+    bool  intersection_found = intersection.intersect_line.intersection(hook_line_offset, &intersection_point);
+    assert(intersection_found);
 
-    std::vector<std::pair<rtree_segment_t, size_t>> rtee_segments;
-    size_t                                          poly_idx = 0;
-    for (const Polyline &poly : lines) {
-        rtee_segments.emplace_back(rtree_segment_t(rtree_point_t(poly.points.front().x(), poly.points.front().y()),
-                                                   rtree_point_t(poly.points.back().x(), poly.points.back().y())),
-                                   poly_idx);
-        ++poly_idx;
+    Line hook_forward(intersection_point, intersection_point + hook_vector);
+    Line hook_backward(intersection_point, intersection_point - hook_vector);
+    Line hook_forward_o = hook_forward, hook_backward_o = hook_backward;
+    hook_forward_o.offset(-SCALED_EPSILON);
+    hook_backward_o.offset(-SCALED_EPSILON);
+
+    std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
+    rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(hook_forward_o.a.x(), hook_forward_o.a.y()),
+                                                rtree_point_t(hook_forward_o.b.x(), hook_forward_o.b.y()))),
+                std::back_inserter(hook_intersections));
+
+    auto max_hook_length = [&hook_intersections, &hook_length](const Line &hook) {
+        coord_t max_length = hook_length;
+        for (const auto &hook_intersection : hook_intersections) {
+            const rtree_segment_t &segment = hook_intersection.first;
+            double                 dist    = Line::distance_to(hook.a, Point(bg::get<0, 0>(segment), bg::get<0, 1>(segment)),
+                                            Point(bg::get<1, 0>(segment), bg::get<1, 1>(segment)));
+            max_length                     = std::min(coord_t(dist), max_length);
+        }
+        return max_length;
+    };
+
+    Line hook_final;
+    if (hook_intersections.empty()) {
+        hook_final = std::move(hook_forward);
+    } else {
+        // There is not enough space for the hook, try another direction
+        coord_t hook_forward_max_length = max_hook_length(hook_forward);
+        hook_intersections.clear();
+        rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(hook_backward_o.a.x(), hook_backward_o.a.y()),
+                                                    rtree_point_t(hook_backward_o.b.x(), hook_backward_o.b.y()))),
+                    std::back_inserter(hook_intersections));
+
+        if (hook_intersections.empty()) {
+            hook_final = std::move(hook_backward);
+        } else {
+            // There is not enough space for hook in both directions, shrink the hook
+            coord_t hook_backward_max_length = max_hook_length(hook_backward);
+            if (hook_forward_max_length > hook_backward_max_length) {
+                Vector hook_vector_reduced = (hook_forward_max_length * hook_vector_norm).cast<coord_t>();
+                hook_final                 = Line(intersection_point, intersection_point + hook_vector_reduced);
+            } else {
+                Vector hook_vector_reduced = (hook_backward_max_length * hook_vector_norm).cast<coord_t>();
+                hook_final                 = Line(intersection_point, intersection_point - hook_vector_reduced);
+            }
+        }
+    }
+
+    if (intersection.forward) {
+        intersection.intersect_pl->points.front() = hook_final.a;
+        intersection.intersect_pl->points.emplace(intersection.intersect_pl->points.begin(), hook_final.b);
+    } else {
+        intersection.intersect_pl->points.back() = hook_final.a;
+        intersection.intersect_pl->points.emplace_back(hook_final.b);
+    }
+}
+
+static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_out, const ExPolygon &boundary, const double spacing, const int hook_length)
+{
+    rtree_t rtree;
+    size_t  poly_idx = 0;
+    for (const Polyline &poly : lines) {
+        rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(poly.points.front().x(), poly.points.front().y()),
+                                                    rtree_point_t(poly.points.back().x(), poly.points.back().y())),
+                                    poly_idx++));
     }
-    rtree_t rtree(rtee_segments.begin(), rtee_segments.end());
 
     std::vector<Intersection> intersections;
+    coord_t                   scaled_spacing = scale_(spacing);
     for (Polyline &line : lines) {
+        // Lines shorter than spacing are skipped because it is needed to shrink a line by the value of spacing.
+        // A shorter line than spacing could produce a degenerate polyline.
+        if (line.length() <= scaled_spacing) continue;
+
         Point                                           front_point = line.points.front();
         Point                                           back_point  = line.points.back();
         std::vector<std::pair<rtree_segment_t, size_t>> closest;
@@ -664,6 +736,13 @@ static void connect_lines_with_hooks(Polylines &&lines, Polylines &polylines_out
     std::vector<size_t> merged_with(lines.size());
     std::iota(merged_with.begin(), merged_with.end(), 0);
 
+    // Appends the boundary polygon with all holes to rtee for detection if hooks not crossing the boundary
+    for (const Line &line : boundary.contour.lines())
+        rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(line.a.x(), line.a.y()), rtree_point_t(line.b.x(), line.b.y())), poly_idx++));
+    for (const Polygon &polygon : boundary.holes)
+        for (const Line &line : polygon.lines())
+            rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(line.a.x(), line.a.y()), rtree_point_t(line.b.x(), line.b.y())), poly_idx++));
+
     auto get_merged_index = [&merged_with](size_t polyline_idx) {
         for (size_t last = polyline_idx;;) {
             size_t lower = merged_with[last];
@@ -700,8 +779,8 @@ static void connect_lines_with_hooks(Polylines &&lines, Polylines &polylines_out
 
             if (first_i.used || first_i.intersect_pl->points.size() == 0) continue;
 
+            // A line between two intersections points
             Line   intersection_line(first_i.closest_point, nearest_i.closest_point);
-            Point  hook_vector              = (hook_length * intersection_line.vector().cast<double>().normalized()).cast<coord_t>();
             Line   offset_line              = create_offset_line(intersection_line, first_i, scale_(spacing));
             double intersection_line_length = intersection_line.length();
 
@@ -762,14 +841,7 @@ static void connect_lines_with_hooks(Polylines &&lines, Polylines &polylines_out
                     first_i.used   = true;
                     nearest_i.used = true;
                 } else {
-                    if (first_i.forward) {
-                        first_i.intersect_pl->points.front() = first_i_point;
-                        first_i.intersect_pl->points.emplace(first_i.intersect_pl->points.begin(), first_i_point + hook_vector);
-                    } else {
-                        first_i.intersect_pl->points.back() = first_i_point;
-                        first_i.intersect_pl->points.emplace_back(first_i_point + hook_vector);
-                    }
-
+                    add_hook(first_i, intersection_line, scale_(spacing), hook_length, rtree);
                     first_i.used = true;
                 }
             }
@@ -781,12 +853,10 @@ static void connect_lines_with_hooks(Polylines &&lines, Polylines &polylines_out
         if (!pl.empty()) polylines_out.emplace_back(std::move(pl));
 }
 
-coord_t get_hook_length(const double spacing) {
-    return scale_(spacing) * 5;
-}
+coord_t get_hook_length(const double spacing) { return scale_(spacing) * 5; }
 
 void Filler::_fill_surface_single(
-    const FillParams &             params,
+    const FillParams              &params,
     unsigned int                   thickness_layers,
     const std::pair<float, Point> &direction,
     ExPolygon                     &expolygon,
@@ -841,14 +911,14 @@ void Filler::_fill_surface_single(
     }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
-    coord_t hook_length = get_hook_length(this->spacing);
+    coord_t   hook_length = get_hook_length(this->spacing);
     Polylines all_polylines_with_hooks;
-    connect_lines_with_hooks(std::move(all_polylines), all_polylines_with_hooks, this->spacing, hook_length);
+    connect_lines_using_hooks(std::move(all_polylines), all_polylines_with_hooks, expolygon, this->spacing, hook_length);
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {
         static int iRun = 0;
-        export_infill_lines_to_svg(expolygon, all_polylines_with_hooks, debug_out_path("FillAdaptive-hooks-%d.svg", iRun ++));
+        export_infill_lines_to_svg(expolygon, all_polylines_with_hooks, debug_out_path("FillAdaptive-hooks-%d.svg", iRun++));
     }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
diff --git a/src/libslic3r/Line.cpp b/src/libslic3r/Line.cpp
index 0c43154a9..abea80f5f 100644
--- a/src/libslic3r/Line.cpp
+++ b/src/libslic3r/Line.cpp
@@ -100,6 +100,13 @@ bool Line::clip_with_bbox(const BoundingBox &bbox)
 	return result;
 }
 
+void Line::offset(double offset)
+{
+    Vector offset_vector = (offset * this->vector().cast<double>().normalized()).cast<coord_t>();
+    this->a -= offset_vector;
+    this->b += offset_vector;
+}
+
 Vec3d Linef3::intersect_plane(double z) const
 {
     auto   v = (this->b - this->a).cast<double>();
diff --git a/src/libslic3r/Line.hpp b/src/libslic3r/Line.hpp
index 980303fed..2cc8139f1 100644
--- a/src/libslic3r/Line.hpp
+++ b/src/libslic3r/Line.hpp
@@ -75,6 +75,8 @@ public:
     double ccw(const Point& point) const { return point.ccw(*this); }
     // Clip a line with a bounding box. Returns false if the line is completely outside of the bounding box.
 	bool   clip_with_bbox(const BoundingBox &bbox);
+    // Resize a line from both sides by the offset.
+    void   offset(double offset);
 
     static inline double distance_to_squared(const Point &point, const Point &a, const Point &b) { return line_alg::distance_to_squared(Line{a, b}, Vec<2, coord_t>{point}); }
     static double distance_to(const Point &point, const Point &a, const Point &b) { return sqrt(distance_to_squared(point, a, b)); }

From cd2881e14e25edba51b86853b8e4f1204ca05fae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Sat, 10 Oct 2020 22:38:22 +0200
Subject: [PATCH 010/138] Orient hooks in the direction of the adjacent
 extrusion line

---
 src/libslic3r/Fill/FillAdaptive.cpp | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index c0583fa9a..8080f16e7 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -769,10 +769,18 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
             }
         }
 
-        if (intersect_line.size() <= 1) continue;
+        assert(!intersect_line.empty());
+        if (intersect_line.size() <= 1) {
+            Intersection &first_i = intersect_line.front().first;
+            if (first_i.used || first_i.intersect_pl->points.size() == 0) continue;
 
+            add_hook(first_i, first_i.closest_line, scale_(spacing), hook_length, rtree);
+            first_i.used = true;
+            continue;
+        }
+
+        assert(intersect_line.size() >= 2);
         std::sort(intersect_line.begin(), intersect_line.end(), [](const auto &i1, const auto &i2) { return i1.second < i2.second; });
-
         for (size_t first_idx = 0; first_idx < intersect_line.size(); ++first_idx) {
             Intersection &first_i   = intersect_line[first_idx].first;
             Intersection &nearest_i = *get_nearest_intersection(intersect_line, first_idx);
@@ -841,7 +849,7 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
                     first_i.used   = true;
                     nearest_i.used = true;
                 } else {
-                    add_hook(first_i, intersection_line, scale_(spacing), hook_length, rtree);
+                    add_hook(first_i, first_i.closest_line, scale_(spacing), hook_length, rtree);
                     first_i.used = true;
                 }
             }

From de242f48cb05ea6ed85ccd240747c81e72eae805 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Sun, 11 Oct 2020 03:46:11 +0200
Subject: [PATCH 011/138] Refactoring of the adaptive infill using hooks

---
 src/libslic3r/Fill/FillAdaptive.cpp | 135 ++++++++++++++++------------
 1 file changed, 80 insertions(+), 55 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 8080f16e7..73dc0845b 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -565,33 +565,43 @@ static Matrix2d rotation_matrix_from_vector(const Point &vector)
 
 struct Intersection
 {
+    // Index of the closest line to intersect_line
     size_t    closest_line_idx;
+    // Copy of closest line to intersect_point, used for storing original line in an unchanged state
     Line      closest_line;
-    Point     closest_point;
+    // Point for which is computed closest line (closest_line)
+    Point     intersect_point;
+    // Index of the polyline from which is computed closest_line
     size_t    intersect_pl_idx;
+    // Pointer to the polyline from which is computed closest_line
     Polyline *intersect_pl;
+    // The line for which is computed closest line from intersect_point to closest_line
     Line      intersect_line;
+    // Indicate if intersect_point is the first or the last point of intersect_line
     bool      forward;
+    // Indication if this intersection has been proceed
     bool      used = false;
 
     Intersection(const size_t closest_line_idx,
-                 const Line & closest_line,
-                 const Point &closest_point,
+                 const Line  &closest_line,
+                 const Point &intersect_point,
                  size_t       intersect_pl_idx,
-                 Polyline *   intersect_pl,
-                 const Line & intersect_line,
+                 Polyline    *intersect_pl,
+                 const Line  &intersect_line,
                  bool         forward)
         : closest_line_idx(closest_line_idx)
         , closest_line(closest_line)
-        , closest_point(closest_point)
+        , intersect_point(intersect_point)
         , intersect_pl_idx(intersect_pl_idx)
         , intersect_pl(intersect_pl)
         , intersect_line(intersect_line)
-        , forward(forward){};
+        , forward(forward)
+    {}
 };
 
 static inline Intersection *get_nearest_intersection(std::vector<std::pair<Intersection, double>> &intersect_line, const size_t first_idx)
 {
+    assert(intersect_line.size() >= 2);
     if (first_idx == 0)
         return &intersect_line[first_idx + 1].first;
     else if (first_idx == (intersect_line.size() - 1))
@@ -600,8 +610,9 @@ static inline Intersection *get_nearest_intersection(std::vector<std::pair<Inter
         return &intersect_line[first_idx - 1].first;
     else
         return &intersect_line[first_idx + 1].first;
-};
+}
 
+// Create a line based on line_to_offset translated it in the direction of the intersection line (intersection.intersect_line)
 static Line create_offset_line(const Line &line_to_offset, const Intersection &intersection, const double scaled_spacing)
 {
     Matrix2d rotation          = rotation_matrix_from_vector(line_to_offset.vector());
@@ -612,12 +623,9 @@ static Line create_offset_line(const Line &line_to_offset, const Intersection &i
     if ((rotation * furthest_point).y() >= (rotation * offset_line_point).y()) offset_vector *= -1;
 
     Line  offset_line    = line_to_offset;
-    Point line_extension = (1000000. * line_to_offset.vector().cast<double>().normalized()).cast<coord_t>();
-
     offset_line.translate(offset_vector.x(), offset_vector.y());
-    offset_line.a -= line_extension;
-    offset_line.b += line_extension;
-
+    // Extend the line by small value to guarantee a collision with adjacent lines
+    offset_line.offset(1000000);
     return offset_line;
 };
 
@@ -630,6 +638,7 @@ using rtree_point_t   = bgm::point<int64_t, 2, boost::geometry::cs::cartesian>;
 using rtree_segment_t = bgm::segment<rtree_point_t>;
 using rtree_t         = bgi::rtree<std::pair<rtree_segment_t, size_t>, bgi::rstar<16, 4>>;
 
+// Create a hook based on hook_line and append it to the begin or end of the polyline in the intersection
 static void add_hook(const Intersection &intersection, const Line &hook_line, const double scaled_spacing, const int hook_length, const rtree_t &rtree)
 {
     Vec2d  hook_vector_norm = hook_line.vector().cast<double>().normalized();
@@ -642,13 +651,18 @@ static void add_hook(const Intersection &intersection, const Line &hook_line, co
 
     Line hook_forward(intersection_point, intersection_point + hook_vector);
     Line hook_backward(intersection_point, intersection_point - hook_vector);
-    Line hook_forward_o = hook_forward, hook_backward_o = hook_backward;
-    hook_forward_o.offset(-SCALED_EPSILON);
-    hook_backward_o.offset(-SCALED_EPSILON);
+
+    auto filter_itself = [&intersection](const auto &item) {
+        const rtree_segment_t &seg     = item.first;
+        const Point           &i_point = intersection.intersect_point;
+        return !((i_point.x() == bg::get<0, 0>(seg) && i_point.y() == bg::get<0, 1>(seg)) ||
+                 (i_point.x() == bg::get<1, 0>(seg) && i_point.y() == bg::get<1, 1>(seg)));
+    };
 
     std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
-    rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(hook_forward_o.a.x(), hook_forward_o.a.y()),
-                                                rtree_point_t(hook_forward_o.b.x(), hook_forward_o.b.y()))),
+    rtree.query(bgi::intersects(
+                    rtree_segment_t(rtree_point_t(hook_forward.a.x(), hook_forward.a.y()), rtree_point_t(hook_forward.b.x(), hook_forward.b.y()))) &&
+                    bgi::satisfies(filter_itself),
                 std::back_inserter(hook_intersections));
 
     auto max_hook_length = [&hook_intersections, &hook_length](const Line &hook) {
@@ -669,8 +683,9 @@ static void add_hook(const Intersection &intersection, const Line &hook_line, co
         // There is not enough space for the hook, try another direction
         coord_t hook_forward_max_length = max_hook_length(hook_forward);
         hook_intersections.clear();
-        rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(hook_backward_o.a.x(), hook_backward_o.a.y()),
-                                                    rtree_point_t(hook_backward_o.b.x(), hook_backward_o.b.y()))),
+        rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(hook_backward.a.x(), hook_backward.a.y()),
+                                                    rtree_point_t(hook_backward.b.x(), hook_backward.b.y()))) &&
+                        bgi::satisfies(filter_itself),
                     std::back_inserter(hook_intersections));
 
         if (hook_intersections.empty()) {
@@ -709,7 +724,8 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
 
     std::vector<Intersection> intersections;
     coord_t                   scaled_spacing = scale_(spacing);
-    for (Polyline &line : lines) {
+    for (size_t line_idx = 0; line_idx < lines.size(); ++line_idx) {
+        Polyline &line = lines[line_idx];
         // Lines shorter than spacing are skipped because it is needed to shrink a line by the value of spacing.
         // A shorter line than spacing could produce a degenerate polyline.
         if (line.length() <= scaled_spacing) continue;
@@ -718,16 +734,18 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
         Point                                           back_point  = line.points.back();
         std::vector<std::pair<rtree_segment_t, size_t>> closest;
 
-        closest.reserve(2);
-        rtree.query(bgi::nearest(rtree_point_t(front_point.x(), front_point.y()), 2), std::back_inserter(closest));
+        auto filter_itself = [line_idx](const auto &item) { return item.second != line_idx; };
+
+        // Find the nearest line from the start point of the line.
+        rtree.query(bgi::nearest(rtree_point_t(front_point.x(), front_point.y()), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
         if (((Line) lines[closest[0].second]).distance_to(front_point) <= 1000)
-            intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], front_point, &line - lines.data(), &line, (Line) line, true);
+            intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], front_point, line_idx, &line, (Line) line, true);
 
         closest.clear();
-        closest.reserve(2);
-        rtree.query(bgi::nearest(rtree_point_t(back_point.x(), back_point.y()), 2), std::back_inserter(closest));
+        // Find the nearest line from the end point of the line
+        rtree.query(bgi::nearest(rtree_point_t(back_point.x(), back_point.y()), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
         if (((Line) lines[closest[0].second]).distance_to(back_point) <= 1000)
-            intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], back_point, &line - lines.data(), &line, (Line) line, false);
+            intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], back_point, line_idx, &line, (Line) line, false);
     }
 
     std::sort(intersections.begin(), intersections.end(),
@@ -736,7 +754,7 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
     std::vector<size_t> merged_with(lines.size());
     std::iota(merged_with.begin(), merged_with.end(), 0);
 
-    // Appends the boundary polygon with all holes to rtee for detection if hooks not crossing the boundary
+    // Appends the boundary polygon with all holes to rtree for detection if hooks not crossing the boundary
     for (const Line &line : boundary.contour.lines())
         rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(line.a.x(), line.a.y()), rtree_point_t(line.b.x(), line.b.y())), poly_idx++));
     for (const Polygon &polygon : boundary.holes)
@@ -760,19 +778,20 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
     for (size_t min_idx = 0; min_idx < intersections.size(); ++min_idx) {
         std::vector<std::pair<Intersection, double>> intersect_line;
         Matrix2d                                     rotation = rotation_matrix_from_vector(intersections[min_idx].closest_line.vector());
-        intersect_line.emplace_back(intersections[min_idx], (rotation * intersections[min_idx].closest_point.cast<double>()).x());
-
+        intersect_line.emplace_back(intersections[min_idx], (rotation * intersections[min_idx].intersect_point.cast<double>()).x());
+        // All the nearest points on the same line are projected on this line. Because of it, it can easily find the nearest point
         for (size_t max_idx = min_idx + 1; max_idx < intersections.size(); ++max_idx) {
-            if (intersections[min_idx].closest_line_idx == intersections[max_idx].closest_line_idx) {
-                intersect_line.emplace_back(intersections[max_idx], (rotation * intersections[max_idx].closest_point.cast<double>()).x());
-                min_idx = max_idx;
-            }
+            if (intersections[min_idx].closest_line_idx != intersections[max_idx].closest_line_idx) break;
+
+            intersect_line.emplace_back(intersections[max_idx], (rotation * intersections[max_idx].intersect_point.cast<double>()).x());
+            min_idx = max_idx;
         }
 
         assert(!intersect_line.empty());
         if (intersect_line.size() <= 1) {
+            // On the adjacent line is only one intersection
             Intersection &first_i = intersect_line.front().first;
-            if (first_i.used || first_i.intersect_pl->points.size() == 0) continue;
+            if (first_i.used || first_i.intersect_pl->points.empty()) continue;
 
             add_hook(first_i, first_i.closest_line, scale_(spacing), hook_length, rtree);
             first_i.used = true;
@@ -785,59 +804,65 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
             Intersection &first_i   = intersect_line[first_idx].first;
             Intersection &nearest_i = *get_nearest_intersection(intersect_line, first_idx);
 
-            if (first_i.used || first_i.intersect_pl->points.size() == 0) continue;
+            // The intersection has been processer or polyline has been merge to another polyline
+            if (first_i.used || first_i.intersect_pl->points.empty()) continue;
 
             // A line between two intersections points
-            Line   intersection_line(first_i.closest_point, nearest_i.closest_point);
+            Line   intersection_line(first_i.intersect_point, nearest_i.intersect_point);
             Line   offset_line              = create_offset_line(intersection_line, first_i, scale_(spacing));
             double intersection_line_length = intersection_line.length();
 
-            {
-                nearest_i.intersect_pl_idx = get_merged_index(nearest_i.intersect_pl_idx);
-                nearest_i.intersect_pl     = &lines[nearest_i.intersect_pl_idx];
+            // Update the polyline index to index which is merged
+            nearest_i.intersect_pl_idx = get_merged_index(nearest_i.intersect_pl_idx);
+            nearest_i.intersect_pl     = &lines[nearest_i.intersect_pl_idx];
 
-                if (!nearest_i.used && nearest_i.intersect_pl->points.size() != 0)
-                    nearest_i.forward = (nearest_i.intersect_pl->points.front() == nearest_i.closest_point);
-            }
+            // The nearest intersection has been processer or polyline has been merge to another polyline
+            if (!nearest_i.used && !nearest_i.intersect_pl->points.empty())
+                nearest_i.forward = (nearest_i.intersect_pl->points.front() == nearest_i.intersect_point);
 
+            // Check if both intersections lie on the offset_line and simultaneously get their points of intersecting.
+            // These points are used as start and end of the hook
             Point first_i_point, nearest_i_point;
             if (first_i.intersect_line.intersection(offset_line, &first_i_point) &&
                 nearest_i.intersect_line.intersection(offset_line, &nearest_i_point)) {
-                if (!nearest_i.used && nearest_i.intersect_pl->points.size() != 0 && intersection_line_length <= 2 * hook_length) {
+                // Both intersections are so close that their polylines can be connected
+                if (!nearest_i.used && !nearest_i.intersect_pl->points.empty() && intersection_line_length <= 2 * hook_length) {
                     if (first_i.intersect_pl_idx == nearest_i.intersect_pl_idx) {
+                        // Both intersections are on the same polyline
                         if (!first_i.forward) { std::swap(first_i_point, nearest_i_point); }
 
                         first_i.intersect_pl->points.front() = first_i_point;
                         first_i.intersect_pl->points.back()  = nearest_i_point;
                         first_i.intersect_pl->points.emplace(first_i.intersect_pl->points.begin(), nearest_i_point);
                     } else {
+                        // Both intersections are on different polylines
                         Points merge_polyline_points;
-                        size_t first_polyline_lenght = first_i.intersect_pl->points.size();
-                        size_t short_polyline_lenght = nearest_i.intersect_pl->points.size();
-                        merge_polyline_points.reserve(first_polyline_lenght + short_polyline_lenght);
+                        size_t first_polyline_size     = first_i.intersect_pl->points.size();
+                        size_t nearest_polyline_size   = nearest_i.intersect_pl->points.size();
+                        merge_polyline_points.reserve(first_polyline_size + nearest_polyline_size);
 
                         if (first_i.forward) {
                             if (nearest_i.forward)
                                 for (auto it = nearest_i.intersect_pl->points.rbegin(); it != nearest_i.intersect_pl->points.rend(); ++it)
                                     merge_polyline_points.emplace_back(*it);
                             else
-                                for (auto it = nearest_i.intersect_pl->points.begin(); it != nearest_i.intersect_pl->points.end(); ++it)
-                                    merge_polyline_points.emplace_back(*it);
+                                for (const Point &point : nearest_i.intersect_pl->points)
+                                    merge_polyline_points.emplace_back(point);
 
                             append(merge_polyline_points, std::move(first_i.intersect_pl->points));
-                            merge_polyline_points[short_polyline_lenght - 1] = nearest_i_point;
-                            merge_polyline_points[short_polyline_lenght]     = first_i_point;
+                            merge_polyline_points[nearest_polyline_size - 1] = nearest_i_point;
+                            merge_polyline_points[nearest_polyline_size]     = first_i_point;
                         } else {
                             append(merge_polyline_points, std::move(first_i.intersect_pl->points));
                             if (nearest_i.forward)
-                                for (auto it = nearest_i.intersect_pl->points.begin(); it != nearest_i.intersect_pl->points.end(); ++it)
-                                    merge_polyline_points.emplace_back(*it);
+                                for (const Point &point : nearest_i.intersect_pl->points)
+                                    merge_polyline_points.emplace_back(point);
                             else
                                 for (auto it = nearest_i.intersect_pl->points.rbegin(); it != nearest_i.intersect_pl->points.rend(); ++it)
                                     merge_polyline_points.emplace_back(*it);
 
-                            merge_polyline_points[first_polyline_lenght - 1] = first_i_point;
-                            merge_polyline_points[first_polyline_lenght]     = nearest_i_point;
+                            merge_polyline_points[first_polyline_size - 1] = first_i_point;
+                            merge_polyline_points[first_polyline_size]     = nearest_i_point;
                         }
 
                         merged_with[nearest_i.intersect_pl_idx] = merged_with[first_i.intersect_pl_idx];

From b8d574093dfdfee3a2a0b7bf85e5a617c5d1c0f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Sun, 11 Oct 2020 15:45:50 +0200
Subject: [PATCH 012/138] Small rework of connecting infill with perimeters
 using hooks

Hooks are preferably generated in the direction of printed perimeters.
Small refactoring of the algorithm. Some parts of the algorithm are better documented.
---
 src/libslic3r/Fill/FillBase.cpp | 66 ++++++++++++++++++---------------
 1 file changed, 36 insertions(+), 30 deletions(-)

diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index d68c770ab..85f37de32 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -833,6 +833,7 @@ void mark_boundary_segments_touching_infill(
 	}
 }
 
+#if 0
 static double compute_distance_to_consumed_point(const std::vector<Points> &                       boundary,
                                                  const std::vector<std::vector<ContourPointData>> &boundary_data,
                                                  size_t                                            contour_idx,
@@ -855,20 +856,24 @@ static double compute_distance_to_consumed_point(const std::vector<Points> &
 
     return total_distance;
 }
+#endif
 
-static std::pair<Points, double> get_hook_path(const std::vector<Points> &                       boundary,
+// Returns possible path for an added hook. The path shrinks to max_lenght, by the closest consumed point or by the closest point in not_connected
+// Also returns not shrink path's length to closest consumed point or closest point in not_connected
+static std::pair<Points, double> get_hook_path(const std::vector<Points>                        &boundary,
                                                const std::vector<std::vector<ContourPointData>> &boundary_data,
                                                size_t                                            contour_idx,
                                                size_t                                            point_index,
                                                bool                                              forward,
                                                int                                               hook_length,
-                                               std::vector<Point> &                              not_connected)
+                                               std::unordered_set<Point, PointHash>             &not_connected)
 {
     double total_distance = 0;
 
     Points points;
     points.emplace_back(boundary[contour_idx][point_index]);
 
+    // Follow the path around the boundary to consumed point or to the point in not_connected
     do {
         if (forward)
             point_index = (point_index == (boundary[contour_idx].size() - 1)) ? 0 : (point_index + 1);
@@ -879,8 +884,9 @@ static std::pair<Points, double> get_hook_path(const std::vector<Points> &
         total_distance += (successor - points.back()).cast<double>().norm();
         points.emplace_back(successor);
     } while (!boundary_data[contour_idx][point_index].point_consumed && total_distance < hook_length &&
-             std::find(not_connected.begin(), not_connected.end(), points.back()) == not_connected.end());
+             not_connected.find(points.back()) == not_connected.end());
 
+    // If the path is longer than hook_length, shrink it to this its length
     if (total_distance > hook_length) {
         Vec2d  vector            = (points.back() - points[points.size() - 2]).cast<double>();
         double vector_length     = vector.norm();
@@ -1081,46 +1087,46 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_
     };
 
     if (hook_length != 0) {
-        std::vector<Point> not_connect_points;
+        // Create a set of points which has not been connected by the previous part of the algorithm
+        std::unordered_set<Point, PointHash> not_connect_points;
         for (const std::pair<size_t, size_t> &contour_point : map_infill_end_point_to_boundary)
             if (contour_point.first != boundary_idx_unconnected && !boundary_data[contour_point.first][contour_point.second].point_consumed)
-                not_connect_points.emplace_back(boundary[contour_point.first][contour_point.second]);
+                not_connect_points.emplace(boundary[contour_point.first][contour_point.second]);
 
         for (size_t endpoint_idx = 0; endpoint_idx < map_infill_end_point_to_boundary.size(); ++endpoint_idx) {
-            Polyline &                       polyline      = infill_ordered[get_merged_index(endpoint_idx / 2)];
+            Polyline                        &polyline      = infill_ordered[get_merged_index(endpoint_idx / 2)];
             const std::pair<size_t, size_t> &contour_point = map_infill_end_point_to_boundary[endpoint_idx];
 
-            if (contour_point.first != boundary_idx_unconnected &&
-                !boundary_data[contour_point.first][contour_point.second].point_consumed) {
-                Point boundary_point                          = boundary[contour_point.first][contour_point.second];
-                auto [points_forward, total_length_forward]   = get_hook_path(boundary, boundary_data, contour_point.first,
-                                                                            contour_point.second, true, hook_length, not_connect_points);
-                auto [points_backward, total_length_backward] = get_hook_path(boundary, boundary_data, contour_point.first,
-                                                                              contour_point.second, false, hook_length, not_connect_points);
-
-                Points points;
-                if (total_length_forward < hook_length && total_length_backward < hook_length) {
-                    continue;
-                } else if (total_length_forward < total_length_backward && total_length_forward >= hook_length) {
-                    points = std::move(points_forward);
-                } else if (total_length_backward < total_length_forward && total_length_backward >= hook_length) {
-                    points = std::move(points_backward);
-                } else if (total_length_forward > total_length_backward) {
-                    points = std::move(points_forward);
+            if (contour_point.first != boundary_idx_unconnected && !boundary_data[contour_point.first][contour_point.second].point_consumed) {
+                Point boundary_point                       = boundary[contour_point.first][contour_point.second];
+                auto [points_forward, forward_free_length] = get_hook_path(boundary, boundary_data, contour_point.first, contour_point.second, true,
+                                                                           hook_length, not_connect_points);
+                Points hook_points;
+                // Check if the hook could fit in space in the direction of perimeters
+                if (forward_free_length >= hook_length) {
+                    hook_points = std::move(points_forward);
                 } else {
-                    points = std::move(points_backward);
+                    auto [points_backward, backward_free_length] = get_hook_path(boundary, boundary_data, contour_point.first, contour_point.second,
+                                                                                 false, hook_length, not_connect_points);
+                    // Check if the hook could fit in space in the opposite direction of perimeters.
+                    // In this direction could be another hook. Because of it, it is required free space of size at least 2 * hook_length
+                    if (backward_free_length >= (2 * hook_length))
+                        hook_points = std::move(points_backward);
+                    else
+                        continue;
                 }
 
+                // Identify if the front point or back point of the polyline is touching the boundary
                 if ((boundary_point - polyline.points.front()).cast<double>().squaredNorm() <= (SCALED_EPSILON * SCALED_EPSILON)) {
-                    Points merge_points;
-                    merge_points.reserve(polyline.points.size() + points.size() - 1);
+                    Points merged_points;
+                    merged_points.reserve(polyline.points.size() + hook_points.size() - 1);
 
-                    for (auto it = points.rbegin(); it != points.rend() - 1; ++it) merge_points.emplace_back(*it);
+                    for (auto it = hook_points.rbegin(); it != hook_points.rend() - 1; ++it) merged_points.emplace_back(*it);
 
-                    append(merge_points, std::move(polyline.points));
-                    polyline.points = std::move(merge_points);
+                    append(merged_points, std::move(polyline.points));
+                    polyline.points = std::move(merged_points);
                 } else {
-                    for (auto it = points.begin() + 1; it != points.end(); ++it) polyline.points.emplace_back(*it);
+                    for (auto it = hook_points.begin() + 1; it != hook_points.end(); ++it) polyline.points.emplace_back(*it);
                 }
             }
         }

From caafcf43b04d1b2783538b18854a49f748d79410 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Sun, 11 Oct 2020 23:31:59 +0200
Subject: [PATCH 013/138] Fix compiler warning and fix a bug in connecting
 infill using hooks

---
 src/libslic3r/Fill/FillAdaptive.cpp | 47 ++++++++++++++---------------
 1 file changed, 23 insertions(+), 24 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 73dc0845b..cdc415dee 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -295,7 +295,7 @@ std::pair<double, double> adaptive_fill_line_spacing(const PrintObject &print_ob
     bool                       build_octree                   = false;
     const std::vector<double> &nozzle_diameters               = print_object.print()->config().nozzle_diameter.values;
     double                     max_nozzle_diameter            = *std::max_element(nozzle_diameters.begin(), nozzle_diameters.end());
-    double                     default_infill_extrusion_width = Flow::auto_extrusion_width(FlowRole::frInfill, max_nozzle_diameter);
+    double                     default_infill_extrusion_width = Flow::auto_extrusion_width(FlowRole::frInfill, float(max_nozzle_diameter));
     for (const PrintRegion *region : print_object.print()->regions()) {
         const PrintRegionConfig &config   = region->config();
         bool                     nonempty = config.fill_density > 0;
@@ -577,7 +577,7 @@ struct Intersection
     Polyline *intersect_pl;
     // The line for which is computed closest line from intersect_point to closest_line
     Line      intersect_line;
-    // Indicate if intersect_point is the first or the last point of intersect_line
+    // Indicate if intersect_point is the first or the last point of intersect_pl
     bool      forward;
     // Indication if this intersection has been proceed
     bool      used = false;
@@ -618,7 +618,7 @@ static Line create_offset_line(const Line &line_to_offset, const Intersection &i
     Matrix2d rotation          = rotation_matrix_from_vector(line_to_offset.vector());
     Vec2d    offset_vector     = ((scaled_spacing / 2.) * line_to_offset.normal().cast<double>().normalized());
     Vec2d    offset_line_point = line_to_offset.a.cast<double>();
-    Vec2d    furthest_point    = (intersection.forward ? intersection.intersect_line.b : intersection.intersect_line.a).cast<double>();
+    Vec2d    furthest_point    = (intersection.intersect_point == intersection.intersect_line.a ? intersection.intersect_line.b : intersection.intersect_line.a).cast<double>();
 
     if ((rotation * furthest_point).y() >= (rotation * offset_line_point).y()) offset_vector *= -1;
 
@@ -633,8 +633,8 @@ namespace bg  = boost::geometry;
 namespace bgm = boost::geometry::model;
 namespace bgi = boost::geometry::index;
 
-// int64_t is needed because for coord_t bgi::intersects throws "bad numeric conversion: positive overflow"
-using rtree_point_t   = bgm::point<int64_t, 2, boost::geometry::cs::cartesian>;
+// float is needed because for coord_t bgi::intersects throws "bad numeric conversion: positive overflow"
+using rtree_point_t   = bgm::point<float, 2, boost::geometry::cs::cartesian>;
 using rtree_segment_t = bgm::segment<rtree_point_t>;
 using rtree_t         = bgi::rtree<std::pair<rtree_segment_t, size_t>, bgi::rstar<16, 4>>;
 
@@ -655,8 +655,8 @@ static void add_hook(const Intersection &intersection, const Line &hook_line, co
     auto filter_itself = [&intersection](const auto &item) {
         const rtree_segment_t &seg     = item.first;
         const Point           &i_point = intersection.intersect_point;
-        return !((i_point.x() == bg::get<0, 0>(seg) && i_point.y() == bg::get<0, 1>(seg)) ||
-                 (i_point.x() == bg::get<1, 0>(seg) && i_point.y() == bg::get<1, 1>(seg)));
+        return !((float(i_point.x()) == bg::get<0, 0>(seg) && float(i_point.y()) == bg::get<0, 1>(seg)) ||
+                 (float(i_point.x()) == bg::get<1, 0>(seg) && float(i_point.y()) == bg::get<1, 1>(seg)));
     };
 
     std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
@@ -723,12 +723,12 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
     }
 
     std::vector<Intersection> intersections;
-    coord_t                   scaled_spacing = scale_(spacing);
+    coord_t                   scaled_spacing = coord_t(scale_(spacing));
     for (size_t line_idx = 0; line_idx < lines.size(); ++line_idx) {
         Polyline &line = lines[line_idx];
         // Lines shorter than spacing are skipped because it is needed to shrink a line by the value of spacing.
         // A shorter line than spacing could produce a degenerate polyline.
-        if (line.length() <= scaled_spacing) continue;
+        if (line.length() <= (scaled_spacing + SCALED_EPSILON)) continue;
 
         Point                                           front_point = line.points.front();
         Point                                           back_point  = line.points.back();
@@ -761,18 +761,22 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
         for (const Line &line : polygon.lines())
             rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(line.a.x(), line.a.y()), rtree_point_t(line.b.x(), line.b.y())), poly_idx++));
 
-    auto get_merged_index = [&merged_with](size_t polyline_idx) {
-        for (size_t last = polyline_idx;;) {
+    auto update_merged_polyline = [&lines, &merged_with](Intersection &intersection) {
+        // Update the polyline index to index which is merged
+        for (size_t last = intersection.intersect_pl_idx;;) {
             size_t lower = merged_with[last];
             if (lower == last) {
-                merged_with[polyline_idx] = lower;
-                polyline_idx              = lower;
+                merged_with[intersection.intersect_pl_idx] = lower;
+                intersection.intersect_pl_idx              = lower;
                 break;
             }
             last = lower;
         }
 
-        return polyline_idx;
+        intersection.intersect_pl = &lines[intersection.intersect_pl_idx];
+        // After polylines are merged, it is necessary to update "forward" based on if intersect_point is the first or the last point of intersect_pl.
+        if (!intersection.used && !intersection.intersect_pl->points.empty())
+            intersection.forward = (intersection.intersect_pl->points.front() == intersection.intersect_point);
     };
 
     for (size_t min_idx = 0; min_idx < intersections.size(); ++min_idx) {
@@ -804,7 +808,10 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
             Intersection &first_i   = intersect_line[first_idx].first;
             Intersection &nearest_i = *get_nearest_intersection(intersect_line, first_idx);
 
-            // The intersection has been processer or polyline has been merge to another polyline
+            update_merged_polyline(first_i);
+            update_merged_polyline(nearest_i);
+
+            // The intersection has been processed, or the polyline has been merge to another polyline.
             if (first_i.used || first_i.intersect_pl->points.empty()) continue;
 
             // A line between two intersections points
@@ -812,14 +819,6 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
             Line   offset_line              = create_offset_line(intersection_line, first_i, scale_(spacing));
             double intersection_line_length = intersection_line.length();
 
-            // Update the polyline index to index which is merged
-            nearest_i.intersect_pl_idx = get_merged_index(nearest_i.intersect_pl_idx);
-            nearest_i.intersect_pl     = &lines[nearest_i.intersect_pl_idx];
-
-            // The nearest intersection has been processer or polyline has been merge to another polyline
-            if (!nearest_i.used && !nearest_i.intersect_pl->points.empty())
-                nearest_i.forward = (nearest_i.intersect_pl->points.front() == nearest_i.intersect_point);
-
             // Check if both intersections lie on the offset_line and simultaneously get their points of intersecting.
             // These points are used as start and end of the hook
             Point first_i_point, nearest_i_point;
@@ -886,7 +885,7 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
         if (!pl.empty()) polylines_out.emplace_back(std::move(pl));
 }
 
-coord_t get_hook_length(const double spacing) { return scale_(spacing) * 5; }
+coord_t get_hook_length(const double spacing) { return coord_t(scale_(spacing)) * 5; }
 
 void Filler::_fill_surface_single(
     const FillParams              &params,

From 958acad85bb5d35f147c1bfb4b10d1814ca2cd6d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Mon, 12 Oct 2020 00:17:17 +0200
Subject: [PATCH 014/138] Fix another compiler warnings

---
 src/libslic3r/Fill/FillAdaptive.cpp | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index cdc415dee..be7f0bc59 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -660,8 +660,8 @@ static void add_hook(const Intersection &intersection, const Line &hook_line, co
     };
 
     std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
-    rtree.query(bgi::intersects(
-                    rtree_segment_t(rtree_point_t(hook_forward.a.x(), hook_forward.a.y()), rtree_point_t(hook_forward.b.x(), hook_forward.b.y()))) &&
+    rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(float(hook_forward.a.x()), float(hook_forward.a.y())),
+                                                rtree_point_t(float(hook_forward.b.x()), float(hook_forward.b.y())))) &&
                     bgi::satisfies(filter_itself),
                 std::back_inserter(hook_intersections));
 
@@ -683,8 +683,8 @@ static void add_hook(const Intersection &intersection, const Line &hook_line, co
         // There is not enough space for the hook, try another direction
         coord_t hook_forward_max_length = max_hook_length(hook_forward);
         hook_intersections.clear();
-        rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(hook_backward.a.x(), hook_backward.a.y()),
-                                                    rtree_point_t(hook_backward.b.x(), hook_backward.b.y()))) &&
+        rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(float(hook_backward.a.x()), float(hook_backward.a.y())),
+                                                    rtree_point_t(float(hook_backward.b.x()), float(hook_backward.b.y())))) &&
                         bgi::satisfies(filter_itself),
                     std::back_inserter(hook_intersections));
 
@@ -717,8 +717,8 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
     rtree_t rtree;
     size_t  poly_idx = 0;
     for (const Polyline &poly : lines) {
-        rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(poly.points.front().x(), poly.points.front().y()),
-                                                    rtree_point_t(poly.points.back().x(), poly.points.back().y())),
+        rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(float(poly.points.front().x()), float(poly.points.front().y())),
+                                                    rtree_point_t(float(poly.points.back().x()), float(poly.points.back().y()))),
                                     poly_idx++));
     }
 
@@ -737,13 +737,13 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
         auto filter_itself = [line_idx](const auto &item) { return item.second != line_idx; };
 
         // Find the nearest line from the start point of the line.
-        rtree.query(bgi::nearest(rtree_point_t(front_point.x(), front_point.y()), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
+        rtree.query(bgi::nearest(rtree_point_t(float(front_point.x()), float(front_point.y())), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
         if (((Line) lines[closest[0].second]).distance_to(front_point) <= 1000)
             intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], front_point, line_idx, &line, (Line) line, true);
 
         closest.clear();
         // Find the nearest line from the end point of the line
-        rtree.query(bgi::nearest(rtree_point_t(back_point.x(), back_point.y()), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
+        rtree.query(bgi::nearest(rtree_point_t(float(back_point.x()), float(back_point.y())), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
         if (((Line) lines[closest[0].second]).distance_to(back_point) <= 1000)
             intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], back_point, line_idx, &line, (Line) line, false);
     }
@@ -756,10 +756,14 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
 
     // Appends the boundary polygon with all holes to rtree for detection if hooks not crossing the boundary
     for (const Line &line : boundary.contour.lines())
-        rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(line.a.x(), line.a.y()), rtree_point_t(line.b.x(), line.b.y())), poly_idx++));
+        rtree.insert(
+            std::make_pair(rtree_segment_t(rtree_point_t(float(line.a.x()), float(line.a.y())), rtree_point_t(float(line.b.x()), float(line.b.y()))),
+                           poly_idx++));
     for (const Polygon &polygon : boundary.holes)
         for (const Line &line : polygon.lines())
-            rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(line.a.x(), line.a.y()), rtree_point_t(line.b.x(), line.b.y())), poly_idx++));
+            rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(float(line.a.x()), float(line.a.y())),
+                                                        rtree_point_t(float(line.b.x()), float(line.b.y()))),
+                                        poly_idx++));
 
     auto update_merged_polyline = [&lines, &merged_with](Intersection &intersection) {
         // Update the polyline index to index which is merged

From 3e50699576dcea42c6f97517f2c7829ee2a6a3a5 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Tue, 20 Oct 2020 09:17:26 +0200
Subject: [PATCH 015/138] Renamed Line::offset to extend Don't use unscaled
 constants! What if the scaling constant changes in the future?

---
 src/libslic3r/Fill/FillAdaptive.cpp | 2 +-
 src/libslic3r/Line.cpp              | 2 +-
 src/libslic3r/Line.hpp              | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index be7f0bc59..4435a43e7 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -625,7 +625,7 @@ static Line create_offset_line(const Line &line_to_offset, const Intersection &i
     Line  offset_line    = line_to_offset;
     offset_line.translate(offset_vector.x(), offset_vector.y());
     // Extend the line by small value to guarantee a collision with adjacent lines
-    offset_line.offset(1000000);
+    offset_line.extend(coord_t(scale_(1.)));
     return offset_line;
 };
 
diff --git a/src/libslic3r/Line.cpp b/src/libslic3r/Line.cpp
index abea80f5f..8a2a2875b 100644
--- a/src/libslic3r/Line.cpp
+++ b/src/libslic3r/Line.cpp
@@ -100,7 +100,7 @@ bool Line::clip_with_bbox(const BoundingBox &bbox)
 	return result;
 }
 
-void Line::offset(double offset)
+void Line::extend(double offset)
 {
     Vector offset_vector = (offset * this->vector().cast<double>().normalized()).cast<coord_t>();
     this->a -= offset_vector;
diff --git a/src/libslic3r/Line.hpp b/src/libslic3r/Line.hpp
index 2cc8139f1..aeb185160 100644
--- a/src/libslic3r/Line.hpp
+++ b/src/libslic3r/Line.hpp
@@ -75,8 +75,8 @@ public:
     double ccw(const Point& point) const { return point.ccw(*this); }
     // Clip a line with a bounding box. Returns false if the line is completely outside of the bounding box.
 	bool   clip_with_bbox(const BoundingBox &bbox);
-    // Resize a line from both sides by the offset.
-    void   offset(double offset);
+    // Extend the line from both sides by an offset.
+    void   extend(double offset);
 
     static inline double distance_to_squared(const Point &point, const Point &a, const Point &b) { return line_alg::distance_to_squared(Line{a, b}, Vec<2, coord_t>{point}); }
     static double distance_to(const Point &point, const Point &a, const Point &b) { return sqrt(distance_to_squared(point, a, b)); }

From 50b603df5d5063d77cad7b5352debb4a970c35bc Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Tue, 20 Oct 2020 10:55:10 +0200
Subject: [PATCH 016/138] Optimized for reduced memory allocation and clarity.

---
 src/libslic3r/Fill/FillAdaptive.cpp | 101 ++++++++++++++++------------
 1 file changed, 57 insertions(+), 44 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 4435a43e7..66a50dd1f 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -556,10 +556,9 @@ static void export_infill_lines_to_svg(const ExPolygon &expoly, const Polylines
 static Matrix2d rotation_matrix_from_vector(const Point &vector)
 {
     Matrix2d rotation;
-    rotation.block<1, 2>(0, 0) = vector.cast<double>() / vector.cast<double>().norm();
+    rotation.block<1, 2>(0, 0) = vector.cast<double>().normalized();
     rotation(1, 0)             = -rotation(0, 1);
     rotation(1, 1)             = rotation(0, 0);
-
     return rotation;
 }
 
@@ -638,6 +637,13 @@ using rtree_point_t   = bgm::point<float, 2, boost::geometry::cs::cartesian>;
 using rtree_segment_t = bgm::segment<rtree_point_t>;
 using rtree_t         = bgi::rtree<std::pair<rtree_segment_t, size_t>, bgi::rstar<16, 4>>;
 
+static inline rtree_segment_t mk_rtree_seg(const Point &a, const Point &b) {
+    return { rtree_point_t(float(a.x()), float(a.y())), rtree_point_t(float(b.x()), float(b.y())) };
+}
+static inline rtree_segment_t mk_rtree_seg(const Line &l) {
+    return mk_rtree_seg(l.a, l.b);
+}
+
 // Create a hook based on hook_line and append it to the begin or end of the polyline in the intersection
 static void add_hook(const Intersection &intersection, const Line &hook_line, const double scaled_spacing, const int hook_length, const rtree_t &rtree)
 {
@@ -660,9 +666,7 @@ static void add_hook(const Intersection &intersection, const Line &hook_line, co
     };
 
     std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
-    rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(float(hook_forward.a.x()), float(hook_forward.a.y())),
-                                                rtree_point_t(float(hook_forward.b.x()), float(hook_forward.b.y())))) &&
-                    bgi::satisfies(filter_itself),
+    rtree.query(bgi::intersects(mk_rtree_seg(hook_forward)) && bgi::satisfies(filter_itself),
                 std::back_inserter(hook_intersections));
 
     auto max_hook_length = [&hook_intersections, &hook_length](const Line &hook) {
@@ -683,9 +687,7 @@ static void add_hook(const Intersection &intersection, const Line &hook_line, co
         // There is not enough space for the hook, try another direction
         coord_t hook_forward_max_length = max_hook_length(hook_forward);
         hook_intersections.clear();
-        rtree.query(bgi::intersects(rtree_segment_t(rtree_point_t(float(hook_backward.a.x()), float(hook_backward.a.y())),
-                                                    rtree_point_t(float(hook_backward.b.x()), float(hook_backward.b.y())))) &&
-                        bgi::satisfies(filter_itself),
+        rtree.query(bgi::intersects(mk_rtree_seg(hook_backward)) && bgi::satisfies(filter_itself),
                     std::back_inserter(hook_intersections));
 
         if (hook_intersections.empty()) {
@@ -712,40 +714,42 @@ static void add_hook(const Intersection &intersection, const Line &hook_line, co
     }
 }
 
-static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_out, const ExPolygon &boundary, const double spacing, const int hook_length)
+static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &boundary, const double spacing, const int hook_length)
 {
     rtree_t rtree;
     size_t  poly_idx = 0;
     for (const Polyline &poly : lines) {
-        rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(float(poly.points.front().x()), float(poly.points.front().y())),
-                                                    rtree_point_t(float(poly.points.back().x()), float(poly.points.back().y()))),
-                                    poly_idx++));
+        rtree.insert(std::make_pair(mk_rtree_seg(poly.points.front(), poly.points.back()), poly_idx++));
     }
 
     std::vector<Intersection> intersections;
-    coord_t                   scaled_spacing = coord_t(scale_(spacing));
-    for (size_t line_idx = 0; line_idx < lines.size(); ++line_idx) {
-        Polyline &line = lines[line_idx];
-        // Lines shorter than spacing are skipped because it is needed to shrink a line by the value of spacing.
-        // A shorter line than spacing could produce a degenerate polyline.
-        if (line.length() <= (scaled_spacing + SCALED_EPSILON)) continue;
-
-        Point                                           front_point = line.points.front();
-        Point                                           back_point  = line.points.back();
+    {
+        const coord_t scaled_spacing = coord_t(scale_(spacing));
+        // Keeping the vector of closest points outside the loop, so the vector does not need to be reallocated.
         std::vector<std::pair<rtree_segment_t, size_t>> closest;
+        for (size_t line_idx = 0; line_idx < lines.size(); ++line_idx) {
+            Polyline &line = lines[line_idx];
+            // Lines shorter than spacing are skipped because it is needed to shrink a line by the value of spacing.
+            // A shorter line than spacing could produce a degenerate polyline.
+            if (line.length() <= (scaled_spacing + SCALED_EPSILON)) continue;
 
-        auto filter_itself = [line_idx](const auto &item) { return item.second != line_idx; };
+            Point                                           front_point = line.points.front();
+            Point                                           back_point  = line.points.back();
 
-        // Find the nearest line from the start point of the line.
-        rtree.query(bgi::nearest(rtree_point_t(float(front_point.x()), float(front_point.y())), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
-        if (((Line) lines[closest[0].second]).distance_to(front_point) <= 1000)
-            intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], front_point, line_idx, &line, (Line) line, true);
+            auto filter_itself = [line_idx](const auto &item) { return item.second != line_idx; };
 
-        closest.clear();
-        // Find the nearest line from the end point of the line
-        rtree.query(bgi::nearest(rtree_point_t(float(back_point.x()), float(back_point.y())), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
-        if (((Line) lines[closest[0].second]).distance_to(back_point) <= 1000)
-            intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], back_point, line_idx, &line, (Line) line, false);
+            // Find the nearest line from the start point of the line.
+            closest.clear();
+            rtree.query(bgi::nearest(rtree_point_t(float(front_point.x()), float(front_point.y())), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
+            if (((Line) lines[closest[0].second]).distance_to(front_point) <= 1000)
+                intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], front_point, line_idx, &line, (Line) line, true);
+
+            // Find the nearest line from the end point of the line
+            closest.clear();
+            rtree.query(bgi::nearest(rtree_point_t(float(back_point.x()), float(back_point.y())), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
+            if (((Line) lines[closest[0].second]).distance_to(back_point) <= 1000)
+                intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], back_point, line_idx, &line, (Line) line, false);
+        }
     }
 
     std::sort(intersections.begin(), intersections.end(),
@@ -755,15 +759,20 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
     std::iota(merged_with.begin(), merged_with.end(), 0);
 
     // Appends the boundary polygon with all holes to rtree for detection if hooks not crossing the boundary
-    for (const Line &line : boundary.contour.lines())
-        rtree.insert(
-            std::make_pair(rtree_segment_t(rtree_point_t(float(line.a.x()), float(line.a.y())), rtree_point_t(float(line.b.x()), float(line.b.y()))),
-                           poly_idx++));
-    for (const Polygon &polygon : boundary.holes)
-        for (const Line &line : polygon.lines())
-            rtree.insert(std::make_pair(rtree_segment_t(rtree_point_t(float(line.a.x()), float(line.a.y())),
-                                                        rtree_point_t(float(line.b.x()), float(line.b.y()))),
-                                        poly_idx++));
+    {
+        Point prev = boundary.contour.points.back();
+        for (const Point &point : boundary.contour.points) {
+            rtree.insert(std::make_pair(mk_rtree_seg(prev, point), poly_idx++));
+            prev = point;
+        }
+        for (const Polygon &polygon : boundary.holes) {
+            Point prev = polygon.points.back();
+            for (const Point &point : polygon.points) {
+                rtree.insert(std::make_pair(mk_rtree_seg(prev, point), poly_idx++));
+                prev = point;
+            }
+        }
+    }
 
     auto update_merged_polyline = [&lines, &merged_with](Intersection &intersection) {
         // Update the polyline index to index which is merged
@@ -884,9 +893,11 @@ static void connect_lines_using_hooks(Polylines &&lines, Polylines &polylines_ou
         }
     }
 
+    Polylines polylines_out;
     polylines_out.reserve(polylines_out.size() + std::count_if(lines.begin(), lines.end(), [](const Polyline &pl) { return !pl.empty(); }));
     for (Polyline &pl : lines)
         if (!pl.empty()) polylines_out.emplace_back(std::move(pl));
+    return polylines_out;
 }
 
 coord_t get_hook_length(const double spacing) { return coord_t(scale_(spacing)) * 5; }
@@ -937,8 +948,11 @@ void Filler::_fill_surface_single(
     all_polylines = intersection_pl(std::move(all_polylines), to_polygons(expolygon));
 
     // After intersection_pl some polylines with only one line are split into more lines
-    for (Polyline &polyline : all_polylines)
-        if (polyline.points.size() > 2) polyline = Polyline(polyline.points.front(), polyline.points.back());
+    for (Polyline &polyline : all_polylines) {
+        //FIXME assert that all the points are collinear and in between the start and end point.
+        if (polyline.points.size() > 2)
+            polyline.points.erase(polyline.points.begin() + 1, polyline.points.end() - 1);
+    }
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {
@@ -948,8 +962,7 @@ void Filler::_fill_surface_single(
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
     coord_t   hook_length = get_hook_length(this->spacing);
-    Polylines all_polylines_with_hooks;
-    connect_lines_using_hooks(std::move(all_polylines), all_polylines_with_hooks, expolygon, this->spacing, hook_length);
+    Polylines all_polylines_with_hooks = connect_lines_using_hooks(std::move(all_polylines), expolygon, this->spacing, hook_length);
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {

From 239d588c5dbc2a5f8edf698cacfff5aa3a2f8639 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Thu, 5 Nov 2020 17:32:40 +0100
Subject: [PATCH 017/138] 1) Implemented anchoring of infill lines to
 perimeters with length    limited anchors, while before a full perimeter
 segment was always    taken if possible. 2) Adapted the line infills (grid,
 stars, triangles, cubic) to 1).    This also solves a long standing issue of
 these infills producing    anchors for each sweep direction independently,
 thus possibly    overlapping and overextruding, which was quite detrimental  
  in narrow areas. 3) Refactored cubic adaptive infill anchroing algorithm   
 for performance and clarity.

---
 src/libslic3r/EdgeGrid.cpp              |   20 +-
 src/libslic3r/EdgeGrid.hpp              |    1 +
 src/libslic3r/Fill/FillAdaptive.cpp     |  340 ++++----
 src/libslic3r/Fill/FillBase.cpp         | 1044 ++++++++++++++++-------
 src/libslic3r/Fill/FillBase.hpp         |    4 +-
 src/libslic3r/Fill/FillRectilinear2.cpp |  207 +++--
 src/libslic3r/Fill/FillRectilinear2.hpp |    9 +
 src/libslic3r/Geometry.cpp              |    6 +-
 src/libslic3r/Geometry.hpp              |  136 ++-
 src/libslic3r/Point.hpp                 |    7 +
 src/libslic3r/libslic3r.h               |   34 +-
 tests/libslic3r/test_geometry.cpp       |   18 +-
 12 files changed, 1200 insertions(+), 626 deletions(-)

diff --git a/src/libslic3r/EdgeGrid.cpp b/src/libslic3r/EdgeGrid.cpp
index 486a7b1aa..fa68092ee 100644
--- a/src/libslic3r/EdgeGrid.cpp
+++ b/src/libslic3r/EdgeGrid.cpp
@@ -55,6 +55,24 @@ void EdgeGrid::Grid::create(const Polygons &polygons, coord_t resolution)
 	create_from_m_contours(resolution);
 }
 
+void EdgeGrid::Grid::create(const std::vector<const Polygon*> &polygons, coord_t resolution)
+{
+	// Count the contours.
+	size_t ncontours = 0;
+	for (size_t j = 0; j < polygons.size(); ++ j)
+		if (! polygons[j]->points.empty())
+			++ ncontours;
+
+	// Collect the contours.
+	m_contours.assign(ncontours, nullptr);
+	ncontours = 0;
+	for (size_t j = 0; j < polygons.size(); ++ j)
+		if (! polygons[j]->points.empty())
+			m_contours[ncontours ++] = &polygons[j]->points;
+
+	create_from_m_contours(resolution);	
+}
+
 void EdgeGrid::Grid::create(const std::vector<Points> &polygons, coord_t resolution)
 {
 	// Count the contours.
@@ -1150,7 +1168,7 @@ EdgeGrid::Grid::ClosestPointResult EdgeGrid::Grid::closest_point(const Point &pt
     if (result.contour_idx != size_t(-1) && d_min <= double(search_radius)) {
 		result.distance = d_min * sign_min;
 		result.t /= l2_seg_min;
-		assert(result.t >= 0. && result.t < 1.);
+		assert(result.t >= 0. && result.t <= 1.);
 #ifndef NDEBUG
 		{
 			const Slic3r::Points &pts = *m_contours[result.contour_idx];
diff --git a/src/libslic3r/EdgeGrid.hpp b/src/libslic3r/EdgeGrid.hpp
index 6a9f482a1..fc8e2c8ad 100644
--- a/src/libslic3r/EdgeGrid.hpp
+++ b/src/libslic3r/EdgeGrid.hpp
@@ -21,6 +21,7 @@ public:
 	void set_bbox(const BoundingBox &bbox) { m_bbox = bbox; }
 
 	void create(const Polygons &polygons, coord_t resolution);
+	void create(const std::vector<const Polygon*> &polygons, coord_t resolution);
 	void create(const std::vector<Points> &polygons, coord_t resolution);
 	void create(const ExPolygon &expoly, coord_t resolution);
 	void create(const ExPolygons &expolygons, coord_t resolution);
diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index b6f91b30c..65a7b95d6 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -553,21 +553,15 @@ static void export_infill_lines_to_svg(const ExPolygon &expoly, const Polylines
 }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
-static Matrix2d rotation_matrix_from_vector(const Point &vector)
-{
-    Matrix2d rotation;
-    rotation.block<1, 2>(0, 0) = vector.cast<double>().normalized();
-    rotation(1, 0)             = -rotation(0, 1);
-    rotation(1, 1)             = rotation(0, 0);
-    return rotation;
-}
-
+// Representing a T-joint (in general case) between two infill lines
+// (between one end point of intersect_pl/intersect_line and 
 struct Intersection
 {
     // Index of the closest line to intersect_line
     size_t    closest_line_idx;
     // Copy of closest line to intersect_point, used for storing original line in an unchanged state
     Line      closest_line;
+
     // Point for which is computed closest line (closest_line)
     Point     intersect_point;
     // Index of the polyline from which is computed closest_line
@@ -577,54 +571,53 @@ struct Intersection
     // The line for which is computed closest line from intersect_point to closest_line
     Line      intersect_line;
     // Indicate if intersect_point is the first or the last point of intersect_pl
-    bool      forward;
+    bool      front;
+
     // Indication if this intersection has been proceed
     bool      used = false;
 
-    Intersection(const size_t closest_line_idx,
-                 const Line  &closest_line,
-                 const Point &intersect_point,
-                 size_t       intersect_pl_idx,
-                 Polyline    *intersect_pl,
-                 const Line  &intersect_line,
-                 bool         forward)
-        : closest_line_idx(closest_line_idx)
-        , closest_line(closest_line)
-        , intersect_point(intersect_point)
-        , intersect_pl_idx(intersect_pl_idx)
-        , intersect_pl(intersect_pl)
-        , intersect_line(intersect_line)
-        , forward(forward)
-    {}
+    bool      fresh() const throw() { return ! used && ! intersect_pl->empty(); }
 };
 
-static inline Intersection *get_nearest_intersection(std::vector<std::pair<Intersection, double>> &intersect_line, const size_t first_idx)
+static inline Intersection *get_nearest_intersection(std::vector<std::pair<Intersection*, double>> &intersect_line, const size_t first_idx)
 {
     assert(intersect_line.size() >= 2);
+    bool take_next = false;
     if (first_idx == 0)
-        return &intersect_line[first_idx + 1].first;
-    else if (first_idx == (intersect_line.size() - 1))
-        return &intersect_line[first_idx - 1].first;
-    else if ((intersect_line[first_idx].second - intersect_line[first_idx - 1].second) < (intersect_line[first_idx + 1].second - intersect_line[first_idx].second))
-        return &intersect_line[first_idx - 1].first;
-    else
-        return &intersect_line[first_idx + 1].first;
+        take_next = true;
+    else if (first_idx + 1 == intersect_line.size())
+        take_next = false;
+    else {
+        // Has both prev and next.
+        const std::pair<Intersection*, double> &ithis = intersect_line[first_idx];
+        const std::pair<Intersection*, double> &iprev = intersect_line[first_idx - 1];
+        const std::pair<Intersection*, double> &inext = intersect_line[first_idx + 1];
+        take_next = iprev.first->fresh() && inext.first->fresh() ?
+            inext.second - ithis.second < ithis.second - iprev.second :
+            inext.first->fresh();
+    }
+    return intersect_line[take_next ? first_idx + 1 : first_idx - 1].first;
 }
 
-// Create a line based on line_to_offset translated it in the direction of the intersection line (intersection.intersect_line)
+// Create a line representing the anchor aka hook extrusion based on line_to_offset 
+// translated in the direction of the intersection line (intersection.intersect_line).
 static Line create_offset_line(const Line &line_to_offset, const Intersection &intersection, const double scaled_spacing)
 {
-    Matrix2d rotation          = rotation_matrix_from_vector(line_to_offset.vector());
-    Vec2d    offset_vector     = ((scaled_spacing / 2.) * line_to_offset.normal().cast<double>().normalized());
-    Vec2d    offset_line_point = line_to_offset.a.cast<double>();
-    Vec2d    furthest_point    = (intersection.intersect_point == intersection.intersect_line.a ? intersection.intersect_line.b : intersection.intersect_line.a).cast<double>();
+    Vec2d        dir            = line_to_offset.vector().cast<double>().normalized();
+    // 50% overlap of the extrusion lines to achieve strong bonding.
+    Vec2d        offset_vector  = Vec2d(- dir.y(), dir.x()) * (scaled_spacing / 2.);
+    const Point &furthest_point = (intersection.intersect_point == intersection.intersect_line.a ? intersection.intersect_line.b : intersection.intersect_line.a);
 
-    if ((rotation * furthest_point).y() >= (rotation * offset_line_point).y()) offset_vector *= -1;
+    // Move inside.
+    if (offset_vector.dot((furthest_point - intersection.intersect_point).cast<double>()) < 0.)
+        offset_vector *= -1.;
 
     Line  offset_line    = line_to_offset;
     offset_line.translate(offset_vector.x(), offset_vector.y());
-    // Extend the line by small value to guarantee a collision with adjacent lines
+    // Extend the line by a small value to guarantee a collision with adjacent lines
     offset_line.extend(coord_t(scale_(1.)));
+    //FIXME scaled_spacing * tan(PI/6)
+//    offset_line.extend(coord_t(scaled_spacing * 0.577));
     return offset_line;
 };
 
@@ -637,26 +630,29 @@ using rtree_point_t   = bgm::point<float, 2, boost::geometry::cs::cartesian>;
 using rtree_segment_t = bgm::segment<rtree_point_t>;
 using rtree_t         = bgi::rtree<std::pair<rtree_segment_t, size_t>, bgi::rstar<16, 4>>;
 
+static inline rtree_point_t mk_rtree_point(const Point &pt) {
+    return rtree_point_t(float(pt.x()), float(pt.y()));
+}
 static inline rtree_segment_t mk_rtree_seg(const Point &a, const Point &b) {
-    return { rtree_point_t(float(a.x()), float(a.y())), rtree_point_t(float(b.x()), float(b.y())) };
+    return { mk_rtree_point(a), mk_rtree_point(b) };
 }
 static inline rtree_segment_t mk_rtree_seg(const Line &l) {
     return mk_rtree_seg(l.a, l.b);
 }
 
 // Create a hook based on hook_line and append it to the begin or end of the polyline in the intersection
-static void add_hook(const Intersection &intersection, const Line &hook_line, const double scaled_spacing, const int hook_length, const rtree_t &rtree)
+static void add_hook(const Intersection &intersection, const double scaled_spacing, const int hook_length, const rtree_t &rtree)
 {
-    Vec2d  hook_vector_norm = hook_line.vector().cast<double>().normalized();
-    Vector hook_vector      = (hook_length * hook_vector_norm).cast<coord_t>();
-    Line   hook_line_offset = create_offset_line(hook_line, intersection, scaled_spacing);
-
-    Point intersection_point;
-    bool  intersection_found = intersection.intersect_line.intersection(hook_line_offset, &intersection_point);
+    // Trim the hook start by the infill line it will connect to.
+    Point hook_start;
+    bool  intersection_found = intersection.intersect_line.intersection(
+        create_offset_line(intersection.closest_line, intersection, scaled_spacing),
+        &hook_start);
     assert(intersection_found);
 
-    Line hook_forward(intersection_point, intersection_point + hook_vector);
-    Line hook_backward(intersection_point, intersection_point - hook_vector);
+    Vec2d   hook_vector_norm = intersection.closest_line.vector().cast<double>().normalized();
+    Vector  hook_vector      = (hook_length * hook_vector_norm).cast<coord_t>();
+    Line    hook_forward(hook_start, hook_start + hook_vector);
 
     auto filter_itself = [&intersection](const auto &item) {
         const rtree_segment_t &seg     = item.first;
@@ -666,51 +662,66 @@ static void add_hook(const Intersection &intersection, const Line &hook_line, co
     };
 
     std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
-    rtree.query(bgi::intersects(mk_rtree_seg(hook_forward)) && bgi::satisfies(filter_itself),
-                std::back_inserter(hook_intersections));
+    rtree.query(bgi::intersects(mk_rtree_seg(hook_forward)) && bgi::satisfies(filter_itself), std::back_inserter(hook_intersections));
 
-    auto max_hook_length = [&hook_intersections, &hook_length](const Line &hook) {
-        coord_t max_length = hook_length;
-        for (const auto &hook_intersection : hook_intersections) {
-            const rtree_segment_t &segment = hook_intersection.first;
-            double                 dist    = Line::distance_to(hook.a, Point(bg::get<0, 0>(segment), bg::get<0, 1>(segment)),
-                                            Point(bg::get<1, 0>(segment), bg::get<1, 1>(segment)));
-            max_length                     = std::min(coord_t(dist), max_length);
-        }
-        return max_length;
-    };
-
-    Line hook_final;
+    Point hook_end;
     if (hook_intersections.empty()) {
-        hook_final = std::move(hook_forward);
+        // The hook is not limited by another infill line. Extrude it in its full length.
+        hook_end = hook_forward.b;
     } else {
-        // There is not enough space for the hook, try another direction
-        coord_t hook_forward_max_length = max_hook_length(hook_forward);
+
+        // Find closest intersection of a line segment starting with pt pointing in dir
+        // with any of the hook_intersections, returns Euclidian distance.
+        // dir is normalized.
+        auto max_hook_length = [hook_length](const Vec2d &pt, const Vec2d &dir, const std::vector<std::pair<rtree_segment_t, size_t>> &hook_intersections) {
+            // No hook is longer than hook_length, there shouldn't be any intersection closer than that.
+            auto max_length = double(hook_length);
+            auto update_max_length = [&max_length](double d) {
+                if (d > 0. && d < max_length)
+                    max_length = d;
+            };
+            for (const auto &hook_intersection : hook_intersections) {
+                const rtree_segment_t &segment = hook_intersection.first;
+                // Segment start and end points.
+                Vec2d pt2(bg::get<0, 0>(segment), bg::get<0, 1>(segment));
+                Vec2d pt2b(bg::get<1, 0>(segment), bg::get<1, 1>(segment));
+                // Segment vector.
+                Vec2d dir2 = pt2b - pt2;
+                // Find intersection of (pt, dir) with (pt2, dir2), where dir is normalized.
+                double denom = cross2(dir, dir2);
+                if (std::abs(denom) < EPSILON) {
+                    update_max_length((pt2 - pt).dot(dir));
+                    update_max_length((pt2b - pt).dot(dir));
+                } else
+                    update_max_length(cross2(pt2 - pt, dir2) / denom);
+            }
+            return max_length;
+        };
+
+        // There is not enough space for the full hook length, try the opposite direction.
+        Vec2d  hook_startf             = hook_start.cast<double>();
+        double hook_forward_max_length = max_hook_length(hook_startf, hook_vector_norm, hook_intersections);
         hook_intersections.clear();
-        rtree.query(bgi::intersects(mk_rtree_seg(hook_backward)) && bgi::satisfies(filter_itself),
-                    std::back_inserter(hook_intersections));
+        Line hook_backward(hook_start, hook_start - hook_vector);
+        rtree.query(bgi::intersects(mk_rtree_seg(hook_backward)) && bgi::satisfies(filter_itself), std::back_inserter(hook_intersections));
 
         if (hook_intersections.empty()) {
-            hook_final = std::move(hook_backward);
+          // The hook in the other direction is not limited by another infill line. Extrude it in its full length.
+            hook_end = hook_backward.b;
         } else {
-            // There is not enough space for hook in both directions, shrink the hook
-            coord_t hook_backward_max_length = max_hook_length(hook_backward);
-            if (hook_forward_max_length > hook_backward_max_length) {
-                Vector hook_vector_reduced = (hook_forward_max_length * hook_vector_norm).cast<coord_t>();
-                hook_final                 = Line(intersection_point, intersection_point + hook_vector_reduced);
-            } else {
-                Vector hook_vector_reduced = (hook_backward_max_length * hook_vector_norm).cast<coord_t>();
-                hook_final                 = Line(intersection_point, intersection_point - hook_vector_reduced);
-            }
+            // There is not enough space for the full hook in both directions, take the longer one.
+            double hook_backward_max_length = max_hook_length(hook_startf, - hook_vector_norm, hook_intersections);
+            Vec2d hook_dir = (hook_forward_max_length > hook_backward_max_length ? hook_forward_max_length : - hook_backward_max_length) * hook_vector_norm;
+            hook_end = hook_start + hook_dir.cast<coord_t>();
         }
     }
 
-    if (intersection.forward) {
-        intersection.intersect_pl->points.front() = hook_final.a;
-        intersection.intersect_pl->points.emplace(intersection.intersect_pl->points.begin(), hook_final.b);
+    if (intersection.front) {
+        intersection.intersect_pl->points.front() = hook_start;
+        intersection.intersect_pl->points.emplace(intersection.intersect_pl->points.begin(), hook_end);
     } else {
-        intersection.intersect_pl->points.back() = hook_final.a;
-        intersection.intersect_pl->points.emplace_back(hook_final.b);
+        intersection.intersect_pl->points.back() = hook_start;
+        intersection.intersect_pl->points.emplace_back(hook_end);
     }
 }
 
@@ -719,6 +730,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
     rtree_t rtree;
     size_t  poly_idx = 0;
     for (const Polyline &poly : lines) {
+        assert(poly.points.size() == 2);
         rtree.insert(std::make_pair(mk_rtree_seg(poly.points.front(), poly.points.back()), poly_idx++));
     }
 
@@ -731,24 +743,28 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
             Polyline &line = lines[line_idx];
             // Lines shorter than spacing are skipped because it is needed to shrink a line by the value of spacing.
             // A shorter line than spacing could produce a degenerate polyline.
-            if (line.length() <= (scaled_spacing + SCALED_EPSILON)) continue;
+            //FIXME we should rather remove such short infill lines earlier!
+            if (line.length() <= (scaled_spacing + SCALED_EPSILON))
+                continue;
 
-            Point                                           front_point = line.points.front();
-            Point                                           back_point  = line.points.back();
+            const Point &front_point = line.points.front();
+            const Point &back_point  = line.points.back();
 
             auto filter_itself = [line_idx](const auto &item) { return item.second != line_idx; };
 
             // Find the nearest line from the start point of the line.
             closest.clear();
-            rtree.query(bgi::nearest(rtree_point_t(float(front_point.x()), float(front_point.y())), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
-            if (((Line) lines[closest[0].second]).distance_to(front_point) <= 1000)
-                intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], front_point, line_idx, &line, (Line) line, true);
+            rtree.query(bgi::nearest(mk_rtree_point(front_point), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
+            if (((Line) lines[closest.front().second]).distance_to(front_point) <= 1000)
+                // T-joint of line's front point with the 'closest' line.
+                intersections.push_back({ closest.front().second, (Line)lines[closest.front().second], front_point, line_idx, &line, (Line)line, true });
 
             // Find the nearest line from the end point of the line
             closest.clear();
-            rtree.query(bgi::nearest(rtree_point_t(float(back_point.x()), float(back_point.y())), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
-            if (((Line) lines[closest[0].second]).distance_to(back_point) <= 1000)
-                intersections.emplace_back(closest[0].second, (Line) lines[closest[0].second], back_point, line_idx, &line, (Line) line, false);
+            rtree.query(bgi::nearest(mk_rtree_point(back_point), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
+            if (((Line) lines[closest.front().second]).distance_to(back_point) <= 1000)
+                // T-joint of line's back point with the 'closest' line.
+                intersections.push_back({ closest.front().second, (Line)lines[closest.front().second], back_point, line_idx, &line, (Line)line, false });
         }
     }
 
@@ -758,7 +774,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
     std::vector<size_t> merged_with(lines.size());
     std::iota(merged_with.begin(), merged_with.end(), 0);
 
-    // Appends the boundary polygon with all holes to rtree for detection if hooks not crossing the boundary
+    // Appends the boundary polygon with all holes to rtree for detection to check whether hooks are not crossing the boundary
     {
         Point prev = boundary.contour.points.back();
         for (const Point &point : boundary.contour.points) {
@@ -788,107 +804,97 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 
         intersection.intersect_pl = &lines[intersection.intersect_pl_idx];
         // After polylines are merged, it is necessary to update "forward" based on if intersect_point is the first or the last point of intersect_pl.
-        if (!intersection.used && !intersection.intersect_pl->points.empty())
-            intersection.forward = (intersection.intersect_pl->points.front() == intersection.intersect_point);
+        if (intersection.fresh())
+            intersection.front = intersection.intersect_pl->points.front() == intersection.intersect_point;
     };
 
-    for (size_t min_idx = 0; min_idx < intersections.size(); ++min_idx) {
-        std::vector<std::pair<Intersection, double>> intersect_line;
-        Matrix2d                                     rotation = rotation_matrix_from_vector(intersections[min_idx].closest_line.vector());
-        intersect_line.emplace_back(intersections[min_idx], (rotation * intersections[min_idx].intersect_point.cast<double>()).x());
-        // All the nearest points on the same line are projected on this line. Because of it, it can easily find the nearest point
-        for (size_t max_idx = min_idx + 1; max_idx < intersections.size(); ++max_idx) {
-            if (intersections[min_idx].closest_line_idx != intersections[max_idx].closest_line_idx) break;
-
-            intersect_line.emplace_back(intersections[max_idx], (rotation * intersections[max_idx].intersect_point.cast<double>()).x());
+    // Keep intersect_line outside the loop, so it does not get reallocated.
+    std::vector<std::pair<Intersection*, double>> intersect_line;
+    for (size_t min_idx = 0; min_idx < intersections.size();) {
+        const Vec2d line_dir = intersections[min_idx].closest_line.vector().cast<double>();
+        intersect_line.clear();
+        // All the nearest points (T-joints) ending at the same line are projected onto this line. Because of it, it can easily find the nearest point.
+        {
+            const Point &p0 = intersections[min_idx].intersect_point;
+            size_t max_idx = min_idx + 1;
+            intersect_line.emplace_back(&intersections[min_idx], 0.);
+            for (; max_idx < intersections.size() && intersections[min_idx].closest_line_idx == intersections[max_idx].closest_line_idx; ++max_idx)
+                intersect_line.emplace_back(&intersections[max_idx], line_dir.dot((intersections[max_idx].intersect_point - p0).cast<double>()));
             min_idx = max_idx;
         }
-
-        assert(!intersect_line.empty());
-        if (intersect_line.size() <= 1) {
-            // On the adjacent line is only one intersection
-            Intersection &first_i = intersect_line.front().first;
-            if (first_i.used || first_i.intersect_pl->points.empty()) continue;
-
-            add_hook(first_i, first_i.closest_line, scale_(spacing), hook_length, rtree);
-            first_i.used = true;
+        if (intersect_line.size() == 1) {
+            // Simple case: The current intersection is the only one touching its adjacent line.
+            Intersection &first_i = *intersect_line.front().first;
+            if (first_i.fresh()) {
+                // Try to connect left or right. If not enough space for hook_length, take the longer side.
+                add_hook(first_i, scale_(spacing), hook_length, rtree);
+                first_i.used = true;
+            }
             continue;
         }
 
-        assert(intersect_line.size() >= 2);
+        assert(intersect_line.size() > 1);
+        // Sort the intersections along line_dir.
         std::sort(intersect_line.begin(), intersect_line.end(), [](const auto &i1, const auto &i2) { return i1.second < i2.second; });
-        for (size_t first_idx = 0; first_idx < intersect_line.size(); ++first_idx) {
-            Intersection &first_i   = intersect_line[first_idx].first;
-            Intersection &nearest_i = *get_nearest_intersection(intersect_line, first_idx);
+        for (size_t first_idx = 0; first_idx < intersect_line.size(); ++ first_idx) {
+            Intersection &first_i = *intersect_line[first_idx].first;
+            if (! first_i.fresh())
+                // The intersection has been processed, or the polyline has been merged to another polyline.
+                continue;
 
+            // Get the previous or next intersection on the same line, pick the closer one.
+            Intersection &nearest_i = *get_nearest_intersection(intersect_line, first_idx);
             update_merged_polyline(first_i);
             update_merged_polyline(nearest_i);
 
-            // The intersection has been processed, or the polyline has been merge to another polyline.
-            if (first_i.used || first_i.intersect_pl->points.empty()) continue;
-
             // A line between two intersections points
-            Line   intersection_line(first_i.intersect_point, nearest_i.intersect_point);
-            Line   offset_line              = create_offset_line(intersection_line, first_i, scale_(spacing));
-            double intersection_line_length = intersection_line.length();
-
+            Line offset_line = create_offset_line(Line(first_i.intersect_point, nearest_i.intersect_point), first_i, scale_(spacing));
             // Check if both intersections lie on the offset_line and simultaneously get their points of intersecting.
             // These points are used as start and end of the hook
             Point first_i_point, nearest_i_point;
             if (first_i.intersect_line.intersection(offset_line, &first_i_point) &&
                 nearest_i.intersect_line.intersection(offset_line, &nearest_i_point)) {
-                // Both intersections are so close that their polylines can be connected
-                if (!nearest_i.used && !nearest_i.intersect_pl->points.empty() && intersection_line_length <= 2 * hook_length) {
+                if (nearest_i.fresh() && (nearest_i_point - first_i_point).cast<double>().squaredNorm() <= Slic3r::sqr(3. * hook_length)) {
+                    // Both intersections are so close that their polylines can be connected.
                     if (first_i.intersect_pl_idx == nearest_i.intersect_pl_idx) {
-                        // Both intersections are on the same polyline
-                        if (!first_i.forward) { std::swap(first_i_point, nearest_i_point); }
-
+                        // Both intersections are on the same polyline, that means a loop is being closed.
+                        if (! first_i.front)
+                            std::swap(first_i_point, nearest_i_point);
                         first_i.intersect_pl->points.front() = first_i_point;
                         first_i.intersect_pl->points.back()  = nearest_i_point;
+                        //FIXME trim the end of a closed loop a bit?
                         first_i.intersect_pl->points.emplace(first_i.intersect_pl->points.begin(), nearest_i_point);
                     } else {
                         // Both intersections are on different polylines
-                        Points merge_polyline_points;
-                        size_t first_polyline_size     = first_i.intersect_pl->points.size();
-                        size_t nearest_polyline_size   = nearest_i.intersect_pl->points.size();
-                        merge_polyline_points.reserve(first_polyline_size + nearest_polyline_size);
-
-                        if (first_i.forward) {
-                            if (nearest_i.forward)
-                                for (auto it = nearest_i.intersect_pl->points.rbegin(); it != nearest_i.intersect_pl->points.rend(); ++it)
-                                    merge_polyline_points.emplace_back(*it);
-                            else
-                                for (const Point &point : nearest_i.intersect_pl->points)
-                                    merge_polyline_points.emplace_back(point);
-
-                            append(merge_polyline_points, std::move(first_i.intersect_pl->points));
-                            merge_polyline_points[nearest_polyline_size - 1] = nearest_i_point;
-                            merge_polyline_points[nearest_polyline_size]     = first_i_point;
+                        Points &first_points  = first_i.intersect_pl->points;
+                        Points &second_points = nearest_i.intersect_pl->points;
+                        first_points.reserve(first_points.size() + second_points.size());
+                        if (first_i.front)
+                            std::reverse(first_points.begin(), first_points.end());
+                        first_points.back() = first_i_point;
+                        first_points.emplace_back(nearest_i_point);
+                        if (nearest_i.front)
+                            first_points.insert(first_points.end(), second_points.begin() + 1, second_points.end());
+                        else
+                            first_points.insert(first_points.end(), second_points.rbegin() + 1, second_points.rend());
+                        // Keep the polyline at the lower index slot.
+                        if (first_i.intersect_pl_idx < nearest_i.intersect_pl_idx) {
+                            second_points.clear();
+                            merged_with[nearest_i.intersect_pl_idx] = merged_with[first_i.intersect_pl_idx];
                         } else {
-                            append(merge_polyline_points, std::move(first_i.intersect_pl->points));
-                            if (nearest_i.forward)
-                                for (const Point &point : nearest_i.intersect_pl->points)
-                                    merge_polyline_points.emplace_back(point);
-                            else
-                                for (auto it = nearest_i.intersect_pl->points.rbegin(); it != nearest_i.intersect_pl->points.rend(); ++it)
-                                    merge_polyline_points.emplace_back(*it);
-
-                            merge_polyline_points[first_polyline_size - 1] = first_i_point;
-                            merge_polyline_points[first_polyline_size]     = nearest_i_point;
+                            second_points = std::move(first_points);
+                            first_points.clear();
+                            merged_with[first_i.intersect_pl_idx] = merged_with[nearest_i.intersect_pl_idx];
                         }
-
-                        merged_with[nearest_i.intersect_pl_idx] = merged_with[first_i.intersect_pl_idx];
-
-                        nearest_i.intersect_pl->points.clear();
-                        first_i.intersect_pl->points = merge_polyline_points;
                     }
-
-                    first_i.used   = true;
                     nearest_i.used = true;
-                } else {
-                    add_hook(first_i, first_i.closest_line, scale_(spacing), hook_length, rtree);
-                    first_i.used = true;
-                }
+                } else
+                    // Try to connect left or right. If not enough space for hook_length, take the longer side.
+                    add_hook(first_i, scale_(spacing), hook_length, rtree);
+                first_i.used = true;
+            } else {
+                // The first & last point should always be found.
+                assert(false);
             }
         }
     }
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 8e0e980e3..bd29594c0 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -3,8 +3,9 @@
 #include "../ClipperUtils.hpp"
 #include "../EdgeGrid.hpp"
 #include "../Geometry.hpp"
-#include "../Surface.hpp"
+#include "../Point.hpp"
 #include "../PrintConfig.hpp"
+#include "../Surface.hpp"
 #include "../libslic3r.h"
 
 #include "FillBase.hpp"
@@ -79,7 +80,7 @@ Polylines Fill::fill_surface(const Surface *surface, const FillParams &params)
             params,
             surface->thickness_layers,
             _infill_direction(surface),
-            expp[i],
+            std::move(expp[i]),
             polylines_out);
     return polylines_out;
 }
@@ -524,36 +525,222 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary,
 
 #else
 
-struct ContourPointData {
-	ContourPointData(float param) : param(param) {}
-	// Eucleidean position of the contour point along the contour.
-	float param				= 0.f;
-	// Was the segment starting with this contour point extruded?
-	bool  segment_consumed	= false;
-	// Was this point extruded over?
-	bool  point_consumed	= false;
+// A single T joint of an infill line to a closed contour or one of its holes.
+struct ContourIntersectionPoint {
+    // Contour and point on a contour where an infill line is connected to.
+    size_t                      contour_idx;
+    size_t                      point_idx;
+    // Eucleidean parameter of point_idx along its contour.
+    float                       param;
+    // Other intersection points along the same contour. If there is only a single T-joint on a contour
+    // with an intersection line, then the prev_on_contour and next_on_contour remain nulls.
+    ContourIntersectionPoint*   prev_on_contour { nullptr };
+    ContourIntersectionPoint*   next_on_contour { nullptr };
+    // Length of the contour not yet allocated to some extrusion path going back (clockwise), or masked out by some overlapping infill line.
+    float                       contour_not_taken_length_prev { std::numeric_limits<float>::max() };
+    // Length of the contour not yet allocated to some extrusion path going forward (counter-clockwise), or masked out by some overlapping infill line.
+    float                       contour_not_taken_length_next { std::numeric_limits<float>::max() };
+    // End point is consumed if an infill line connected to this T-joint was already connected left or right along the contour,
+    // or if the infill line was processed, but it was not possible to connect it left or right along the contour.
+    bool                        consumed { false };
+    // Whether the contour was trimmed by an overlapping infill line, or whether part of this contour was connected to some infill line.
+    bool                        prev_trimmed { false };
+    bool                        next_trimmed { false };
+
+    void                        consume_prev() { this->contour_not_taken_length_prev = 0.; this->prev_trimmed = true; this->consumed = true; }
+    void                        consume_next() { this->contour_not_taken_length_next = 0.; this->next_trimmed = true; this->consumed = true; }
+
+    void                        trim_prev(const float new_len) { 
+        if (new_len < this->contour_not_taken_length_prev) {
+            this->contour_not_taken_length_prev = new_len;
+            this->prev_trimmed = true;
+        }
+    }
+    void                        trim_next(const float new_len) { 
+        if (new_len < this->contour_not_taken_length_next) {
+            this->contour_not_taken_length_next = new_len;
+            this->next_trimmed = true;
+        }
+    }
+
+    // The end point of an infill line connected to this T-joint was not processed yet and a piece of the contour could be extruded going backwards.
+    bool                        could_take_prev() const throw() { return ! this->consumed && this->contour_not_taken_length_prev > SCALED_EPSILON; }
+    // The end point of an infill line connected to this T-joint was not processed yet and a piece of the contour could be extruded going forward.
+    bool                        could_take_next() const throw() { return ! this->consumed && this->contour_not_taken_length_next > SCALED_EPSILON; }
+
+    // Could extrude a complete segment from this to this->prev_on_contour.
+    bool                        could_connect_prev() const throw() 
+        { return ! this->consumed && this->prev_on_contour && ! this->prev_on_contour->consumed && ! this->prev_trimmed && ! this->prev_on_contour->next_trimmed; }
+    // Could extrude a complete segment from this to this->next_on_contour.
+    bool                        could_connect_next() const throw() 
+        { return ! this->consumed && this->next_on_contour && ! this->next_on_contour->consumed && ! this->next_trimmed && ! this->next_on_contour->prev_trimmed; }
 };
 
-// Verify whether the contour from point idx_start to point idx_end could be taken (whether all segments along the contour were not yet extruded).
-static bool could_take(const std::vector<ContourPointData> &contour_data, size_t idx_start, size_t idx_end)
+// Distance from param1 to param2 when going counter-clockwise.
+static inline float closed_contour_distance_ccw(float param1, float param2, float contour_length)
 {
-	assert(idx_start != idx_end);
-	for (size_t i = idx_start; i != idx_end; ) {
-		if (contour_data[i].segment_consumed || contour_data[i].point_consumed)
-			return false;
-		if (++ i == contour_data.size())
-			i = 0;
-	}
-	return ! contour_data[idx_end].point_consumed;
+    float d = param2 - param1;
+    if (d < 0.f)
+        d += contour_length;
+    return d;
+}
+
+// Distance from param1 to param2 when going clockwise.
+static inline float closed_contour_distance_cw(float param1, float param2, float contour_length)
+{
+    return closed_contour_distance_ccw(param2, param1, contour_length);
+}
+
+// Length along the contour from cp1 to cp2 going counter-clockwise.
+float path_length_along_contour_ccw(const ContourIntersectionPoint *cp1, const ContourIntersectionPoint *cp2, float contour_length)
+{
+    assert(cp1 != nullptr);
+    assert(cp2 != nullptr);
+    assert(cp1->contour_idx == cp2->contour_idx);
+    assert(cp1 != cp2);
+    // Zero'th param is the length of the contour.
+    float param_lo  = cp1->param;
+    float param_hi  = cp2->param;
+    assert(param_lo >= 0.f && param_lo <= contour_length);
+    assert(param_hi >= 0.f && param_hi <= contour_length);
+    return cp1 < cp2 ? param_hi - param_lo : param_lo + contour_length - param_hi;
+}
+
+// Lengths along the contour from cp1 to cp2 going CCW and going CW.
+std::pair<float, float> path_lengths_along_contour(const ContourIntersectionPoint *cp1, const ContourIntersectionPoint *cp2, float contour_length)
+{
+    // Zero'th param is the length of the contour.
+    float param_lo  = cp1->param;
+    float param_hi  = cp2->param;
+    assert(param_lo >= 0.f && param_lo <= contour_length);
+    assert(param_hi >= 0.f && param_hi <= contour_length);
+    bool  reversed  = false;
+    if (param_lo > param_hi) {
+        std::swap(param_lo, param_hi);
+        reversed = true;
+    }
+    auto out = std::make_pair(param_hi - param_lo, param_lo + contour_length - param_hi);
+    if (reversed)
+        std::swap(out.first, out.second);
+    return out;
+}
+
+// Add contour points from interval (idx_start, idx_end> to polyline.
+static inline void take_cw_full(Polyline &pl, const Points& contour, size_t idx_start, size_t idx_end)
+{
+    assert(! pl.empty() && pl.points.back() == contour[idx_start]);
+    size_t i = (idx_end == 0) ? contour.size() - 1 : idx_start - 1;
+    while (i != idx_end) {
+        pl.points.emplace_back(contour[i]);
+        if (i == 0)
+            i = contour.size();
+        --i;
+    }
+    pl.points.emplace_back(contour[i]);
+}
+
+// Add contour points from interval (idx_start, idx_end> to polyline, limited by the Eucleidean length taken.
+static inline float take_cw_limited(Polyline &pl, const Points &contour, const std::vector<float> &params, size_t idx_start, size_t idx_end, float length_to_take)
+{
+    // If appending to an infill line, then the start point of a perimeter line shall match the end point of an infill line.
+    assert(pl.empty() || pl.points.back() == contour[idx_start]);
+    assert(contour.size() + 1 == params.size());
+    // Length of the contour.
+    float  length = params.back();
+    // Parameter (length from contour.front()) for the first point.
+    float  p0     = params[idx_start];
+    // Current (2nd) point of the contour.
+    size_t i      = (idx_start == 0) ? contour.size() - 1 : idx_start - 1;
+    // Previous point of the contour.
+    size_t iprev  = idx_start;
+    // Length of the contour curve taken for iprev.
+    float  lprev  = 0.f;
+
+    for (;;) {
+        float l = closed_contour_distance_cw(p0, params[i], length);
+        if (l >= length_to_take) {
+            // Trim the last segment.
+            double t = double(length_to_take - lprev) / (l - lprev);
+            pl.points.emplace_back(lerp(contour[iprev], contour[i], t));
+            return length_to_take;
+        }
+        // Continue with the other segments.
+        pl.points.emplace_back(contour[i]);
+        if (i == idx_end)
+            return l;
+        iprev = i;
+        lprev = l;
+        if (i == 0)
+            i = contour.size();
+        -- i;
+    }
+    assert(false);
+    return 0;
+}
+
+// Add contour points from interval (idx_start, idx_end> to polyline.
+static inline void take_ccw_full(Polyline &pl, const Points &contour, size_t idx_start, size_t idx_end)
+{
+    assert(! pl.empty() && pl.points.back() == contour[idx_start]);
+    size_t i = idx_start;
+    if (++ i == contour.size())
+        i = 0;
+    while (i != idx_end) {
+        pl.points.emplace_back(contour[i]);
+        if (++ i == contour.size())
+            i = 0;
+    }
+    pl.points.emplace_back(contour[i]);
+}
+
+// Add contour points from interval (idx_start, idx_end> to polyline, limited by the Eucleidean length taken.
+// Returns length of the contour taken.
+static inline float take_ccw_limited(Polyline &pl, const Points &contour, const std::vector<float> &params, size_t idx_start, size_t idx_end, float length_to_take)
+{
+    // If appending to an infill line, then the start point of a perimeter line shall match the end point of an infill line.
+    assert(pl.empty() || pl.points.back() == contour[idx_start]);
+    assert(contour.size() + 1 == params.size());
+    // Length of the contour.
+    float  length = params.back();
+    // Parameter (length from contour.front()) for the first point.
+    float  p0     = params[idx_start];
+    // Current (2nd) point of the contour.
+    size_t i      = idx_start;
+    if (++ i == contour.size())
+        i = 0;
+    // Previous point of the contour.
+    size_t iprev  = idx_start;
+    // Length of the contour curve taken at iprev.
+    float  lprev  = 0.f;
+    for (;;) {
+        float l = closed_contour_distance_ccw(p0, params[i], length);
+        if (l >= length_to_take) {
+            // Trim the last segment.
+            double t = double(length_to_take - lprev) / (l - lprev);
+            pl.points.emplace_back(lerp(contour[iprev], contour[i], t));
+            return length_to_take;
+        }
+        // Continue with the other segments.
+        pl.points.emplace_back(contour[i]);
+        if (i == idx_end)
+            return l;
+        iprev = i;
+        lprev = l;
+        if (++ i == contour.size())
+            i = 0;
+    }
+    assert(false);
+    return 0;
 }
 
 // Connect end of pl1 to the start of pl2 using the perimeter contour.
-// The idx_start and idx_end are ordered so that the connecting polyline points will be taken with increasing indices.
-static void take(Polyline &pl1, Polyline &&pl2, const Points &contour, std::vector<ContourPointData> &contour_data, size_t idx_start, size_t idx_end, bool reversed)
+// If clockwise, then a clockwise segment from idx_start to idx_end is taken, otherwise a counter-clockwise segment is being taken.
+static void take(Polyline &pl1, const Polyline &pl2, const Points &contour, size_t idx_start, size_t idx_end, bool clockwise)
 {
 #ifndef NDEBUG
-	size_t num_points_initial = pl1.points.size();
 	assert(idx_start != idx_end);
+    assert(pl1.size() >= 2);
+    assert(pl2.size() >= 2);
 #endif /* NDEBUG */
 
 	{
@@ -564,34 +751,108 @@ static void take(Polyline &pl1, Polyline &&pl2, const Points &contour, std::vect
 		pl1.points.reserve(pl1.points.size() + size_t(new_points) + pl2.points.size());
 	}
 
-	contour_data[idx_start].point_consumed   = true;
-	contour_data[idx_start].segment_consumed = true;
-	contour_data[idx_end  ].point_consumed   = true;
+	if (clockwise)
+        take_cw_full(pl1, contour, idx_start, idx_end);
+	else
+        take_ccw_full(pl1, contour, idx_start, idx_end);
 
-	if (reversed) {
-		size_t i = (idx_end == 0) ? contour_data.size() - 1 : idx_end - 1;
-		while (i != idx_start) {
-			contour_data[i].point_consumed   = true;
-			contour_data[i].segment_consumed = true;
-			pl1.points.emplace_back(contour[i]);
-			if (i == 0)
-				i = contour_data.size();
-			-- i;
-		}
-	} else {
-		size_t i = idx_start;
-		if (++ i == contour_data.size())
-			i = 0;
-		while (i != idx_end) {
-			contour_data[i].point_consumed   = true;
-			contour_data[i].segment_consumed = true;
-			pl1.points.emplace_back(contour[i]);
-			if (++ i == contour_data.size())
-				i = 0;
-		}
-	}
+    pl1.points.insert(pl1.points.end(), pl2.points.begin() + 1, pl2.points.end());
+}
 
-	append(pl1.points, std::move(pl2.points));
+static void take(Polyline &pl1, const Polyline &pl2, const Points &contour, ContourIntersectionPoint *cp_start, ContourIntersectionPoint *cp_end, bool clockwise)
+{
+    assert(cp_start != cp_end);
+    take(pl1, pl2, contour, cp_start->point_idx, cp_end->point_idx, clockwise);
+
+    // Mark the contour segments in between cp_start and cp_end as consumed.
+    if (clockwise)
+        std::swap(cp_start, cp_end);
+    if (cp_start->next_on_contour != cp_end)
+        for (auto *cp = cp_start->next_on_contour; cp->next_on_contour != cp_end; cp = cp->next_on_contour) {
+            cp->consume_prev();
+            cp->consume_next();
+        }
+    cp_start->consume_next();
+    cp_end->consume_prev();
+}
+
+static void take_limited(
+    Polyline &pl1, const Points &contour, const std::vector<float> &params, 
+    ContourIntersectionPoint *cp_start, ContourIntersectionPoint *cp_end, bool clockwise, float take_max_length, float line_half_width)
+{
+#ifndef NDEBUG
+    assert(cp_start != cp_end);
+    assert(pl1.size() >= 2);
+    assert(contour.size() + 1 == params.size());
+#endif /* NDEBUG */
+
+    if (! (clockwise ? cp_start->could_take_prev() : cp_start->could_take_next()))
+        return;
+
+    assert(pl1.points.front() == contour[cp_start->point_idx] || pl1.points.back() == contour[cp_start->point_idx]);
+    bool        add_at_start = pl1.points.front() == contour[cp_start->point_idx];
+    Points      pl_tmp;
+    if (add_at_start) {
+        pl_tmp = std::move(pl1.points);
+        pl1.points.clear();
+    }
+
+    {
+        // Reserve memory at pl1 for the perimeter segment.
+        // Pessimizing - take the complete segment.
+        int new_points = int(cp_end->point_idx) - int(cp_start->point_idx) - 1;
+        if (new_points < 0)
+            new_points += int(contour.size());
+        pl1.points.reserve(pl1.points.size() + pl_tmp.size() + size_t(new_points));
+    }
+
+    float length = params.back();
+    float length_to_go = take_max_length;
+    cp_start->consumed = true;
+    if (clockwise) {
+        // Going clockwise from cp_start to cp_end.
+        for (ContourIntersectionPoint *cp = cp_start; cp != cp_end; cp = cp->prev_on_contour) {
+            // Length of the segment from cp to cp->prev_on_contour.
+            float l = closed_contour_distance_cw(cp->param, cp->prev_on_contour->param, length);
+            length_to_go = std::min(length_to_go, cp->contour_not_taken_length_prev);
+            if (cp->prev_on_contour->consumed)
+                // Don't overlap with an already extruded infill line.
+                length_to_go = std::max(0.f, std::min(length_to_go, l - line_half_width));
+            cp->consume_prev();
+            if (l >= length_to_go) {
+                cp->prev_on_contour->trim_next(l - length_to_go);
+                take_cw_limited(pl1, contour, params, cp->point_idx, cp->prev_on_contour->point_idx, length_to_go);
+                break;
+            } else {
+                cp->prev_on_contour->trim_next(0.f);
+                take_cw_full(pl1, contour, cp->point_idx, cp->prev_on_contour->point_idx);
+                length_to_go -= l;
+            }
+        }
+    } else {
+        for (ContourIntersectionPoint *cp = cp_start; cp != cp_end; cp = cp->next_on_contour) {
+            float l = closed_contour_distance_ccw(cp->param, cp->next_on_contour->param, length);
+            length_to_go = std::min(length_to_go, cp->contour_not_taken_length_next);
+            if (cp->next_on_contour->consumed)
+                // Don't overlap with an already extruded infill line.
+                length_to_go = std::max(0.f, std::min(length_to_go, l - line_half_width));
+            cp->consume_next();
+            if (l >= length_to_go) {
+                cp->next_on_contour->trim_prev(l - length_to_go);
+                take_ccw_limited(pl1, contour, params, cp->point_idx, cp->next_on_contour->point_idx, length_to_go);
+                break;
+            } else {
+                cp->next_on_contour->trim_prev(0.f);
+                take_ccw_full(pl1, contour, cp->point_idx, cp->next_on_contour->point_idx);
+                length_to_go -= l;
+            }
+        }
+    }
+
+    if (add_at_start) {
+        pl1.reverse();
+        append(pl1.points, pl_tmp);
+    }
 }
 
 // Return an index of start of a segment and a point of the clipping point at distance from the end of polyline.
@@ -657,69 +918,159 @@ static inline SegmentPoint clip_end_segment_and_point(const Points &polyline, do
 	return out;
 }
 
-// Optimized version with the precalculated v1 = p1b - p1a and l1_2 = v1.squaredNorm().
-// Assumption: l1_2 < EPSILON.
-static inline double segment_point_distance_squared(const Vec2d &p1a, const Vec2d &p1b, const Vec2d &v1, const double l1_2, const Vec2d &p2)
+// Calculate intersection of a line with a thick segment.
+// Returns Eucledian parameters of the line / thick segment overlap.
+static inline bool line_rounded_thick_segment_collision(
+    const Vec2d &line_a,    const Vec2d &line_b, 
+    const Vec2d &segment_a, const Vec2d &segment_b, const double offset, 
+    std::pair<double, double> &out_interval)
 {
-	assert(l1_2 > EPSILON);
-	Vec2d  v12 = p2 - p1a;
-	double t   = v12.dot(v1);
-	return (t <= 0.  ) ? v12.squaredNorm() :
-	       (t >= l1_2) ? (p2 - p1a).squaredNorm() :
-		   ((t / l1_2) * v1 - v12).squaredNorm();
+    const Vec2d  line_v0   = line_b - line_a;
+    double       lv        = line_v0.squaredNorm();
+
+    const Vec2d  segment_v = segment_b - segment_a;
+    const double segment_l = segment_v.norm();
+    const double offset2   = offset * offset;
+
+    bool intersects = false;
+    if (lv < SCALED_EPSILON * SCALED_EPSILON)
+    {
+        // Very short line vector. Just test whether the center point is inside the offset line.
+        Vec2d lpt = 0.5 * (line_a + line_b);
+
+        if (segment_l > SCALED_EPSILON) {
+            intersects  = (segment_a - lpt).squaredNorm() < offset2;
+            intersects |= (segment_b - lpt).squaredNorm() < offset2;
+            if (! intersects) {
+
+            }
+        } else
+            intersects = (0.5 * (segment_a + segment_b) - lpt).squaredNorm() < offset2;
+        if (intersects) {
+            out_interval.first = 0.;
+            out_interval.second = sqrt(lv);
+        }
+    }
+    else
+    {
+        // Output interval.
+        double tmin = std::numeric_limits<double>::max();
+        double tmax = -tmin;
+        auto extend_interval = [&tmin, &tmax](double atmin, double atmax) {
+            tmin = std::min(tmin, atmin);
+            tmax = std::max(tmax, atmax);
+        };
+
+        // Intersections with the inflated segment end points.
+        auto ray_circle_intersection_interval_extend = [&extend_interval, &line_v0](const Vec2d &segment_pt, const double offset2, const Vec2d &line_pt, const Vec2d &line_vec) {
+            std::pair<Vec2d, Vec2d> pts;
+            Vec2d  p0 = line_pt - segment_pt;
+            double c  = - line_pt.dot(p0);
+            if (Geometry::ray_circle_intersections_r2_lv2_c(offset2, line_vec.x(), line_vec.y(), line_vec.squaredNorm(), c, pts)) {
+                double tmin = (pts.first  - p0).dot(line_v0);
+                double tmax = (pts.second - p0).dot(line_v0);
+                if (tmin > tmax)
+                    std::swap(tmin, tmax);
+                tmin = std::max(tmin, 0.);
+                tmax = std::min(tmax, 1.);
+                if (tmin <= tmax)
+                    extend_interval(tmin, tmax);
+            }
+        };
+
+        // Intersections with the inflated segment.
+        if (segment_l > SCALED_EPSILON) {
+            ray_circle_intersection_interval_extend(segment_a, offset2, line_a, line_v0);
+            ray_circle_intersection_interval_extend(segment_b, offset2, line_a, line_v0);
+            // Clip the line segment transformed into a coordinate space of the segment,
+            // where the segment spans (0, 0) to (segment_l, 0).
+            const Vec2d dir_x = segment_v / segment_l;
+            const Vec2d dir_y(- dir_x.y(), dir_x.x());
+            std::pair<double, double> interval;
+            if (Geometry::liang_barsky_line_clipping_interval(
+                    Vec2d(line_a - segment_a), 
+                    Vec2d(line_v0.dot(dir_x), line_v0.dot(dir_y)), 
+                    BoundingBoxf(Vec2d(0., - offset), Vec2d(segment_l, offset)), 
+                    interval))
+                extend_interval(interval.first, interval.second);
+        } else
+            ray_circle_intersection_interval_extend(0.5 * (segment_a + segment_b), offset, line_a, line_v0);
+
+        intersects = tmin <= tmax;
+        if (intersects) {
+            lv = sqrt(lv);
+            out_interval.first  = tmin * lv;
+            out_interval.second = tmax * lv;
+        }
+    }
+
+    return intersects;
 }
 
-static inline double segment_point_distance_squared(const Vec2d &p1a, const Vec2d &p1b, const Vec2d &p2)
+static inline bool inside_interval(float low, float high, float p)
 {
-    const Vec2d  v  = p1b - p1a;
-    const double l2 = v.squaredNorm();
-    if (l2 < EPSILON)
-        // p1a == p1b
-        return (p2  - p1a).squaredNorm();
-    return segment_point_distance_squared(p1a, p1b, v, v.squaredNorm(), p2);
+    return p >= low && p <= high;
 }
 
-// Distance to the closest point of line.
-static inline double min_distance_of_segments(const Vec2d &p1a, const Vec2d &p1b, const Vec2d &p2a, const Vec2d &p2b)
+static inline bool interval_inside_interval(float outer_low, float outer_high, float inner_low, float inner_high, float epsilon)
 {
-    Vec2d   v1 		= p1b - p1a;
-    double  l1_2 	= v1.squaredNorm();
-    if (l1_2 < EPSILON)
-        // p1a == p1b: Return distance of p1a from the (p2a, p2b) segment.
-        return segment_point_distance_squared(p2a, p2b, p1a);
+    outer_low -= epsilon;
+    outer_high += epsilon;
+    return inside_interval(outer_low, outer_high, inner_low) && inside_interval(outer_low, outer_high, inner_high);
+}
 
-    Vec2d   v2 		= p2b - p2a;
-    double  l2_2 	= v2.squaredNorm();
-    if (l2_2 < EPSILON)
-        // p2a == p2b: Return distance of p2a from the (p1a, p1b) segment.
-        return segment_point_distance_squared(p1a, p1b, v1, l1_2, p2a);
-
-    return std::min(
-		std::min(segment_point_distance_squared(p1a, p1b, v1, l1_2, p2a), segment_point_distance_squared(p1a, p1b, v1, l1_2, p2b)),
-		std::min(segment_point_distance_squared(p2a, p2b, v2, l2_2, p1a), segment_point_distance_squared(p2a, p2b, v2, l2_2, p1b)));
+static inline bool cyclic_interval_inside_interval(float outer_low, float outer_high, float inner_low, float inner_high, float length)
+{
+    if (outer_low > outer_high)
+        outer_high += length;
+    if (inner_low > inner_high)
+        inner_high += length;
+    else if (inner_high < outer_low) {
+        inner_low += length;
+        inner_high += length;
+    }
+    return interval_inside_interval(outer_low, outer_high, inner_low, inner_high, float(SCALED_EPSILON));
 }
 
 // Mark the segments of split boundary as consumed if they are very close to some of the infill line.
 void mark_boundary_segments_touching_infill(
-	const std::vector<Points> 					&boundary,
-	std::vector<std::vector<ContourPointData>> 	&boundary_data,
-	const BoundingBox 							&boundary_bbox,
-	const Polylines 							&infill,
-	const double							     clip_distance,
-	const double 								 distance_colliding)
+    // Boundary contour, along which the perimeter extrusions will be drawn.
+	const std::vector<Points>                              &boundary,
+    // Parametrization of boundary with Euclidian length.
+	const std::vector<std::vector<float>>                  &boundary_parameters,
+    // Intersections (T-joints) of the infill lines with the boundary.
+    std::vector<std::vector<ContourIntersectionPoint*>>    &boundary_intersections,
+    // Bounding box around the boundary.
+	const BoundingBox 		                               &boundary_bbox,
+    // Infill lines, either completely inside the boundary, or touching the boundary.
+	const Polylines 		                               &infill,
+    // How much of the infill ends should be ignored when marking the boundary segments?
+	const double			                                clip_distance,
+    // Roughly width of the infill line.
+	const double 				                            distance_colliding)
 {
+    assert(boundary.size() == boundary_parameters.size());
+#ifndef NDEBUG
+    for (size_t i = 0; i < boundary.size(); ++ i)
+        assert(boundary[i].size() + 1 == boundary_parameters[i].size());
+#endif
+
 	EdgeGrid::Grid grid;
 	grid.set_bbox(boundary_bbox);
 	// Inflate the bounding box by a thick line width.
-	grid.create(boundary, clip_distance + scale_(10.));
+	grid.create(boundary, std::max(clip_distance, distance_colliding) + scale_(10.));
 
+    // Visitor for the EdgeGrid to trim boundary_intersections with existing infill lines.
 	struct Visitor {
-		Visitor(const EdgeGrid::Grid &grid, const std::vector<Points> &boundary, std::vector<std::vector<ContourPointData>> &boundary_data, const double dist2_max) :
-			grid(grid), boundary(boundary), boundary_data(boundary_data), dist2_max(dist2_max) {}
+		Visitor(const EdgeGrid::Grid &grid,
+                const std::vector<Points> &boundary, const std::vector<std::vector<float>> &boundary_parameters, std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections,
+                const double radius) :
+			grid(grid), boundary(boundary), boundary_parameters(boundary_parameters), boundary_intersections(boundary_intersections), radius(radius) {}
 
-		void init(const Vec2d &pt1, const Vec2d &pt2) {
-			this->pt1 = &pt1;
-			this->pt2 = &pt2;
+        // Init with a segment of an infill line.
+		void init(const Vec2d &infill_pt1, const Vec2d &infill_pt2) {
+			this->infill_pt1 = &infill_pt1;
+			this->infill_pt2 = &infill_pt2;
 		}
 
 		bool operator()(coord_t iy, coord_t ix) {
@@ -730,16 +1081,42 @@ void mark_boundary_segments_touching_infill(
 				auto segment = this->grid.segment(*it_contour_and_segment);
 				const Vec2d seg_pt1 = segment.first.cast<double>();
 				const Vec2d seg_pt2 = segment.second.cast<double>();
-				if (min_distance_of_segments(seg_pt1, seg_pt2, *this->pt1, *this->pt2) < this->dist2_max) {
-					// Mark this boundary segment as touching the infill line.
-					ContourPointData &bdp = boundary_data[it_contour_and_segment->first][it_contour_and_segment->second];
-					bdp.segment_consumed = true;
-					// There is no need for checking seg_pt2 as it will be checked the next time.
-					bool point_touching = false;
-					if (segment_point_distance_squared(*this->pt1, *this->pt2, seg_pt1) < this->dist2_max) {
-						point_touching = true;
-						bdp.point_consumed = true;
-					}
+                std::pair<double, double> interval;
+                if (line_rounded_thick_segment_collision(seg_pt1, seg_pt2, *this->infill_pt1, *this->infill_pt2, this->radius, interval)) {
+                    // The boundary segment intersects with the infill segment thickened by radius.
+                    // Interval is specified in Euclidian length from seg_pt1 to seg_pt2.
+                    // 1) Find the Euclidian parameters of seg_pt1 and seg_pt2 on its boundary contour.
+                    const std::vector<float> &contour_parameters = boundary_parameters[it_contour_and_segment->first];
+                    const float contour_length = contour_parameters.back();
+					const float param_seg_pt1  = contour_parameters[it_contour_and_segment->second];
+                    const float param_overlap1 = param_seg_pt1 + interval.first;
+                    const float param_overlap2 = param_seg_pt1 + interval.second;
+                    // 2) Find the ContourIntersectionPoints before param_overlap1 and after param_overlap2.
+                    std::vector<ContourIntersectionPoint*> &intersections = boundary_intersections[it_contour_and_segment->first];
+                    // Find the span of ContourIntersectionPoints, that is trimmed by the interval (param_overlap1, param_overlap2).
+                    ContourIntersectionPoint *ip_low, *ip_high;
+                    {
+                        auto it_low  = Slic3r::lower_bound_by_predicate(intersections.begin(), intersections.end(), [param_overlap1](const ContourIntersectionPoint *l) { return l->param < param_overlap1; });
+                        auto it_high = Slic3r::lower_bound_by_predicate(intersections.begin(), intersections.end(), [param_overlap2](const ContourIntersectionPoint *l) { return l->param < param_overlap2; });
+                        ip_low  = it_low  == intersections.end() ? intersections.front() : *it_low;
+                        ip_high = it_high == intersections.end() ? intersections.front() : *it_high;
+                        if (ip_low->param != param_overlap1)
+                            ip_low = ip_low->prev_on_contour;
+                    }
+                    assert(ip_low != ip_high);
+                    // Verify that the interval (param_overlap1, param_overlap2) is inside the interval (ip_low->param, ip_high->param).
+                    assert(cyclic_interval_inside_interval(ip_low->param, ip_high->param, param_overlap1, param_overlap2, contour_length));
+                    // Mark all ContourIntersectionPoints between ip_low and ip_high as consumed.
+                    if (ip_low->next_on_contour != ip_high)
+                        for (ContourIntersectionPoint *ip = ip_low->next_on_contour; ip->next_on_contour != ip_high; ip = ip->next_on_contour) {
+                            ip->consume_prev();
+                            ip->consume_next();
+                        }
+                    // Subtract the interval from the first and last segments.
+                    ip_low->trim_next(closed_contour_distance_ccw(ip_low->param, param_overlap1, contour_length));
+                    ip_high->trim_prev(closed_contour_distance_ccw(param_overlap2, ip_high->param, contour_length));
+                    //FIXME mark point as consumed?
+                    //FIXME verify the sequence between prev and next?
 #if 0
 					{
 						static size_t iRun = 0;
@@ -758,15 +1135,16 @@ void mark_boundary_segments_touching_infill(
 			return true;
 		}
 
-		const EdgeGrid::Grid 			   			&grid;
-		const std::vector<Points> 					&boundary;
-		std::vector<std::vector<ContourPointData>> 	&boundary_data;
+		const EdgeGrid::Grid 			   			        &grid;
+		const std::vector<Points> 					        &boundary;
+        const std::vector<std::vector<float>>               &boundary_parameters;
+        std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections;
 		// Maximum distance between the boundary and the infill line allowed to consider the boundary not touching the infill line.
-		const double								 dist2_max;
+		const double								         radius;
 
-		const Vec2d 								*pt1;
-		const Vec2d 								*pt2;
-	} visitor(grid, boundary, boundary_data, distance_colliding * distance_colliding);
+		const Vec2d 								        *infill_pt1;
+		const Vec2d 								        *infill_pt2;
+	} visitor(grid, boundary, boundary_parameters, boundary_intersections, distance_colliding);
 
 	BoundingBoxf bboxf(boundary_bbox.min.cast<double>(), boundary_bbox.max.cast<double>());
 	bboxf.offset(- SCALED_EPSILON);
@@ -832,89 +1210,46 @@ void mark_boundary_segments_touching_infill(
 	}
 }
 
-#if 0
-static double compute_distance_to_consumed_point(const std::vector<Points> &                       boundary,
-                                                 const std::vector<std::vector<ContourPointData>> &boundary_data,
-                                                 size_t                                            contour_idx,
-                                                 size_t                                            point_index,
-                                                 bool                                              forward)
-{
-    Point  predecessor    = boundary[contour_idx][point_index];
-    double total_distance = 0;
-
-    do {
-        if (forward)
-            point_index = (point_index == (boundary[contour_idx].size() - 1)) ? 0 : (point_index + 1);
-        else
-            point_index = (point_index > 0) ? (point_index - 1) : (boundary[contour_idx].size() - 1);
-
-        Point successor = boundary[contour_idx][point_index];
-        total_distance += (successor - predecessor).cast<double>().norm();
-        predecessor = successor;
-    } while (!boundary_data[contour_idx][point_index].point_consumed);
-
-    return total_distance;
-}
-#endif
-
-// Returns possible path for an added hook. The path shrinks to max_lenght, by the closest consumed point or by the closest point in not_connected
-// Also returns not shrink path's length to closest consumed point or closest point in not_connected
-static std::pair<Points, double> get_hook_path(const std::vector<Points>                        &boundary,
-                                               const std::vector<std::vector<ContourPointData>> &boundary_data,
-                                               size_t                                            contour_idx,
-                                               size_t                                            point_index,
-                                               bool                                              forward,
-                                               int                                               hook_length,
-                                               std::unordered_set<Point, PointHash>             &not_connected)
-{
-    double total_distance = 0;
-
-    Points points;
-    points.emplace_back(boundary[contour_idx][point_index]);
-
-    // Follow the path around the boundary to consumed point or to the point in not_connected
-    do {
-        if (forward)
-            point_index = (point_index == (boundary[contour_idx].size() - 1)) ? 0 : (point_index + 1);
-        else
-            point_index = (point_index > 0) ? (point_index - 1) : (boundary[contour_idx].size() - 1);
-
-        Point successor = boundary[contour_idx][point_index];
-        total_distance += (successor - points.back()).cast<double>().norm();
-        points.emplace_back(successor);
-    } while (!boundary_data[contour_idx][point_index].point_consumed && total_distance < hook_length &&
-             not_connected.find(points.back()) == not_connected.end());
-
-    // If the path is longer than hook_length, shrink it to this its length
-    if (total_distance > hook_length) {
-        Vec2d  vector            = (points.back() - points[points.size() - 2]).cast<double>();
-        double vector_length     = vector.norm();
-        double shrink_vec_length = vector_length - (total_distance - hook_length);
-
-        points.back() = ((vector / vector_length) * shrink_vec_length).cast<coord_t>() + points[points.size() - 2];
-        // total_distance += (shrink_vec_length - vector_length);
-    }
-
-    return std::make_pair(points, total_distance);
-}
-
 void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_src, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length)
 {
-	assert(! infill_ordered.empty());
 	assert(! boundary_src.contour.points.empty());
+    BoundingBox bbox = get_extents(boundary_src.contour);
+    bbox.offset(SCALED_EPSILON);
 
-	BoundingBox bbox = get_extents(boundary_src.contour);
-	bbox.offset(SCALED_EPSILON);
+    auto polygons_src = reserve_vector<const Polygon*>(boundary_src.holes.size() + 1);
+    polygons_src.emplace_back(&boundary_src.contour);
+    for (const Polygon &polygon : boundary_src.holes)
+        polygons_src.emplace_back(&polygon);
+
+    connect_infill(std::move(infill_ordered), polygons_src, bbox, polylines_out, spacing, params, hook_length);
+}
+
+void Fill::connect_infill(Polylines &&infill_ordered, const Polygons &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length)
+{
+    auto polygons_src = reserve_vector<const Polygon*>(boundary_src.size());
+    for (const Polygon &polygon : boundary_src)
+        polygons_src.emplace_back(&polygon);
+
+    connect_infill(std::move(infill_ordered), polygons_src, bbox, polylines_out, spacing, params, hook_length);
+}
+
+void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length)
+{
+	assert(! infill_ordered.empty());
+
+#if 0
+    append(polylines_out, infill_ordered);
+    return;
+#endif
 
 	// 1) Add the end points of infill_ordered to boundary_src.
-	std::vector<Points>					   		boundary;
-	std::vector<std::vector<ContourPointData>> 	boundary_data;
-	boundary.assign(boundary_src.holes.size() + 1, Points());
-	boundary_data.assign(boundary_src.holes.size() + 1, std::vector<ContourPointData>());
+	std::vector<Points>					   	boundary;
+	std::vector<std::vector<float>>         boundary_params;
+	boundary.assign(boundary_src.size(), Points());
+	boundary_params.assign(boundary_src.size(), std::vector<float>());
 	// Mapping the infill_ordered end point to a (contour, point) of boundary.
-	std::vector<std::pair<size_t, size_t>>      map_infill_end_point_to_boundary;
-    static constexpr auto                       boundary_idx_unconnected = std::numeric_limits<size_t>::max();
-	map_infill_end_point_to_boundary.assign(infill_ordered.size() * 2, std::pair<size_t, size_t>(boundary_idx_unconnected, boundary_idx_unconnected));
+    static constexpr auto                   boundary_idx_unconnected = std::numeric_limits<size_t>::max();
+	std::vector<ContourIntersectionPoint>   map_infill_end_point_to_boundary(infill_ordered.size() * 2, ContourIntersectionPoint{ boundary_idx_unconnected, boundary_idx_unconnected });
 	{
 		// Project the infill_ordered end points onto boundary_src.
 		std::vector<std::pair<EdgeGrid::Grid::ClosestPointResult, size_t>> intersection_points;
@@ -941,54 +1276,96 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_
 		}
 		auto it = intersection_points.begin();
 		auto it_end = intersection_points.end();
-		for (size_t idx_contour = 0; idx_contour <= boundary_src.holes.size(); ++ idx_contour) {
-			const Polygon &contour_src = (idx_contour == 0) ? boundary_src.contour : boundary_src.holes[idx_contour - 1];
+        std::vector<std::vector<ContourIntersectionPoint*>> boundary_intersection_points(boundary.size(), std::vector<ContourIntersectionPoint*>());
+		for (size_t idx_contour = 0; idx_contour < boundary_src.size(); ++ idx_contour) {
+            // Copy contour_src to contour_dst while adding intersection points.
+            // Map infill end points map_infill_end_point_to_boundary to the newly inserted boundary points of contour_dst.
+            // chain the points of map_infill_end_point_to_boundary along their respective contours.
+			const Polygon &contour_src = *boundary_src[idx_contour];
 			Points		  &contour_dst = boundary[idx_contour];
+            std::vector<ContourIntersectionPoint*> &contour_intersection_points = boundary_intersection_points[idx_contour];
+            ContourIntersectionPoint *pfirst = nullptr;
+            ContourIntersectionPoint *pprev  = nullptr;
+            {
+                // Reserve intersection points.
+                size_t n_intersection_points = 0;
+                for (auto itx = it; itx != it_end && itx->first.contour_idx == idx_contour; ++ itx)
+                    ++ n_intersection_points;
+                contour_intersection_points.reserve(n_intersection_points);
+            }
 			for (size_t idx_point = 0; idx_point < contour_src.points.size(); ++ idx_point) {
 				contour_dst.emplace_back(contour_src.points[idx_point]);
 				for (; it != it_end && it->first.contour_idx == idx_contour && it->first.start_point_idx == idx_point; ++ it) {
 					// Add these points to the destination contour.
-					const Vec2d pt1 = contour_src[idx_point].cast<double>();
-					const Vec2d pt2 = (idx_point + 1 == contour_src.size() ? contour_src.points.front() : contour_src.points[idx_point + 1]).cast<double>();
-					const Vec2d pt  = lerp(pt1, pt2, it->first.t);
-					map_infill_end_point_to_boundary[it->second] = std::make_pair(idx_contour, contour_dst.size());
-					contour_dst.emplace_back(pt.cast<coord_t>());
+#ifndef NDEBUG
+                    const Polyline  &infill_line = infill_ordered[it->second / 2];
+                    const Point     &pt          = (it->second & 1) ? infill_line.points.back() : infill_line.points.front();
+                    {
+					    const Vec2d pt1 = contour_src[idx_point].cast<double>();
+					    const Vec2d pt2 = (idx_point + 1 == contour_src.size() ? contour_src.points.front() : contour_src.points[idx_point + 1]).cast<double>();
+					    const Vec2d ptx = lerp(pt1, pt2, it->first.t);
+                        assert(std::abs(pt.x() - pt.x()) < SCALED_EPSILON);
+                        assert(std::abs(pt.y() - pt.y()) < SCALED_EPSILON);
+                    }
+#endif // NDEBUG
+					map_infill_end_point_to_boundary[it->second] = ContourIntersectionPoint{ idx_contour, contour_dst.size() };
+                    ContourIntersectionPoint *pthis = &map_infill_end_point_to_boundary[it->second];
+                    if (pprev) {
+                        pprev->next_on_contour = pthis;
+                        pthis->prev_on_contour = pprev;                        
+                    } else
+                        pfirst = pthis;
+                    contour_intersection_points.emplace_back(pthis);
+                    pprev = pthis;
+                    //add new point here
+					contour_dst.emplace_back(pt);
 				}
+                if (pprev != pfirst) {
+                    pprev->next_on_contour = pfirst;
+                    pfirst->prev_on_contour = pprev;
+                }
 			}
-			// Parametrize the curve.
-			std::vector<ContourPointData> &contour_data = boundary_data[idx_contour];
-			contour_data.reserve(contour_dst.size());
-			contour_data.emplace_back(ContourPointData(0.f));
+			// Parametrize the new boundary with the intersection points inserted.
+			std::vector<float> &contour_params = boundary_params[idx_contour];
+			contour_params.assign(contour_dst.size() + 1, 0.f);
 			for (size_t i = 1; i < contour_dst.size(); ++ i)
-				contour_data.emplace_back(contour_data.back().param + (contour_dst[i].cast<float>() - contour_dst[i - 1].cast<float>()).norm());
-			contour_data.front().param = contour_data.back().param + (contour_dst.back().cast<float>() - contour_dst.front().cast<float>()).norm();
+				contour_params[i] = contour_params[i - 1] + (contour_dst[i].cast<float>() - contour_dst[i - 1].cast<float>()).norm();
+			contour_params.back() = contour_params[contour_params.size() - 2] + (contour_dst.back().cast<float>() - contour_dst.front().cast<float>()).norm();
+            // Map parameters from contour_params to boundary_intersection_points.
+            for (ContourIntersectionPoint *ip : contour_intersection_points)
+                ip->param = contour_params[ip->point_idx];
+            // and measure distance to the previous and next intersection point.
+            const float contour_length = contour_params.back();
+            for (ContourIntersectionPoint *ip : contour_intersection_points) {
+                ip->contour_not_taken_length_prev = closed_contour_distance_ccw(ip->prev_on_contour->param, ip->param, contour_length);
+                ip->contour_not_taken_length_next = closed_contour_distance_ccw(ip->param, ip->next_on_contour->param, contour_length);
+            }
 		}
 
-		assert(boundary.size() == boundary_src.num_contours());
+		assert(boundary.size() == boundary_src.size());
 #if 0
         // Adaptive Cubic Infill produces infill lines, which not always end at the outer boundary.
         assert(std::all_of(map_infill_end_point_to_boundary.begin(), map_infill_end_point_to_boundary.end(),
-			[&boundary](const std::pair<size_t, size_t> &contour_point) {
-				return contour_point.first < boundary.size() && contour_point.second < boundary[contour_point.first].size();
+			[&boundary](const ContourIntersectionPoint &contour_point) {
+				return contour_point.contour_idx < boundary.size() && contour_point.point_idx < boundary[contour_point.contour_idx].size();
 			}));
 #endif
-	}
 
-	// Mark the points and segments of split boundary as consumed if they are very close to some of the infill line.
-	{
-		// @supermerill used 2. * scale_(spacing)
-		const double clip_distance		= 3. * scale_(spacing);
-		const double distance_colliding = 1.1 * scale_(spacing);
-		mark_boundary_segments_touching_infill(boundary, boundary_data, bbox, infill_ordered, clip_distance, distance_colliding);
+        // Mark the points and segments of split boundary as consumed if they are very close to some of the infill line.
+        {
+            // @supermerill used 2. * scale_(spacing)
+            const double clip_distance      = 3. * scale_(spacing);
+            const double distance_colliding = 1.1 * scale_(spacing);
+            mark_boundary_segments_touching_infill(boundary, boundary_params, boundary_intersection_points, bbox, infill_ordered, clip_distance, distance_colliding);
+        }
 	}
 
 	// Connection from end of one infill line to the start of another infill line.
 	//const float length_max = scale_(spacing);
-//	const float length_max = scale_((2. / params.density) * spacing);
-	const float length_max = scale_((1000. / params.density) * spacing);
+//	const auto length_max = float(scale_((2. / params.density) * spacing));
+	const auto length_max = float(scale_((1000. / params.density) * spacing));
 	std::vector<size_t> merged_with(infill_ordered.size());
-	for (size_t i = 0; i < merged_with.size(); ++ i)
-		merged_with[i] = i;
+    std::iota(merged_with.begin(), merged_with.end(), 0);
 	struct ConnectionCost {
 		ConnectionCost(size_t idx_first, double cost, bool reversed) : idx_first(idx_first), cost(cost), reversed(reversed) {}
 		size_t  idx_first;
@@ -1000,136 +1377,149 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_
 	for (size_t idx_chain = 1; idx_chain < infill_ordered.size(); ++ idx_chain) {
 		const Polyline 						&pl1 			= infill_ordered[idx_chain - 1];
 		const Polyline 						&pl2 			= infill_ordered[idx_chain];
-		const std::pair<size_t, size_t>		*cp1			= &map_infill_end_point_to_boundary[(idx_chain - 1) * 2 + 1];
-		const std::pair<size_t, size_t>		*cp2			= &map_infill_end_point_to_boundary[idx_chain * 2];
-		if (cp1->first != boundary_idx_unconnected && cp1->first == cp2->first) {
+		const ContourIntersectionPoint		*cp1			= &map_infill_end_point_to_boundary[(idx_chain - 1) * 2 + 1];
+		const ContourIntersectionPoint		*cp2			= &map_infill_end_point_to_boundary[idx_chain * 2];
+		if (cp1->contour_idx != boundary_idx_unconnected && cp1->contour_idx == cp2->contour_idx) {
 			// End points on the same contour. Try to connect them.
-    		const std::vector<ContourPointData>	&contour_data = boundary_data[cp1->first];
-			float param_lo  = (cp1->second == 0) ? 0.f : contour_data[cp1->second].param;
-			float param_hi  = (cp2->second == 0) ? 0.f : contour_data[cp2->second].param;
-			float param_end = contour_data.front().param;
-			bool  reversed  = false;
-			if (param_lo > param_hi) {
-				std::swap(param_lo, param_hi);
-				reversed = true;
-			}
-			assert(param_lo >= 0.f && param_lo <= param_end);
-			assert(param_hi >= 0.f && param_hi <= param_end);
-			double len = param_hi - param_lo;
-			if (len < length_max)
-				connections_sorted.emplace_back(idx_chain - 1, len, reversed);
-			len = param_lo + param_end - param_hi;
-			if (len < length_max)
-				connections_sorted.emplace_back(idx_chain - 1, len, ! reversed);
+            std::pair<float, float> len = path_lengths_along_contour(cp1, cp2, boundary_params[cp1->contour_idx].back());
+			if (len.first < length_max)
+				connections_sorted.emplace_back(idx_chain - 1, len.first, false);
+			if (len.second < length_max)
+				connections_sorted.emplace_back(idx_chain - 1, len.second, true);
 		}
 	}
 	std::sort(connections_sorted.begin(), connections_sorted.end(), [](const ConnectionCost& l, const ConnectionCost& r) { return l.cost < r.cost; });
 
-	size_t idx_chain_last = 0;
-	for (ConnectionCost &connection_cost : connections_sorted) {
-		const std::pair<size_t, size_t>	*cp1     = &map_infill_end_point_to_boundary[connection_cost.idx_first * 2 + 1];
-		const std::pair<size_t, size_t>	*cp1prev = cp1 - 1;
-		const std::pair<size_t, size_t>	*cp2     = &map_infill_end_point_to_boundary[(connection_cost.idx_first + 1) * 2];
-		const std::pair<size_t, size_t>	*cp2next = cp2 + 1;
-		assert(cp1->first == cp2->first && cp1->first != boundary_idx_unconnected);
-		std::vector<ContourPointData>	&contour_data = boundary_data[cp1->first];
-		if (connection_cost.reversed)
-			std::swap(cp1, cp2);
-		// Mark the the other end points of the segments to be taken as consumed temporarily, so they will not be crossed
-		// by the new connection line.
-		bool prev_marked = false;
-		bool next_marked = false;
-		if (cp1prev->first == cp1->first && ! contour_data[cp1prev->second].point_consumed) {
-			contour_data[cp1prev->second].point_consumed = true;
-			prev_marked = true;
-		}
-		if (cp2next->first == cp1->first && ! contour_data[cp2next->second].point_consumed) {
-			contour_data[cp2next->second].point_consumed = true;
-			next_marked = true;
-		}
-		if (could_take(contour_data, cp1->second, cp2->second)) {
-			// Indices of the polygons to be connected.
-			size_t idx_first  = connection_cost.idx_first;
-			size_t idx_second = idx_first + 1;
-			for (size_t last = idx_first;;) {
-				size_t lower = merged_with[last];
-				if (lower == last) {
-					merged_with[idx_first] = lower;
-					idx_first = lower;
-					break;
-				}
-				last = lower;
-			}
-			// Connect the two polygons using the boundary contour.
-			take(infill_ordered[idx_first], std::move(infill_ordered[idx_second]), boundary[cp1->first], contour_data, cp1->second, cp2->second, connection_cost.reversed);
-			// Mark the second polygon as merged with the first one.
-			merged_with[idx_second] = merged_with[idx_first];
-		}
-		if (prev_marked)
-			contour_data[cp1prev->second].point_consumed = false;
-		if (next_marked)
-			contour_data[cp2next->second].point_consumed = false;
-	}
-
-    auto get_merged_index = [&merged_with](size_t polyline_idx) {
+    auto get_and_update_merged_with = [&merged_with](size_t polyline_idx) -> size_t {
         for (size_t last = polyline_idx;;) {
             size_t lower = merged_with[last];
+            assert(lower <= last);
             if (lower == last) {
-                merged_with[polyline_idx] = lower;
-                polyline_idx              = lower;
-                break;
+                merged_with[polyline_idx] = last;
+                return last;
             }
             last = lower;
         }
-
-        return polyline_idx;
+        assert(false);
+        return std::numeric_limits<size_t>::max();
     };
 
-    if (hook_length != 0) {
-        // Create a set of points which has not been connected by the previous part of the algorithm
-        std::unordered_set<Point, PointHash> not_connect_points;
-        for (const std::pair<size_t, size_t> &contour_point : map_infill_end_point_to_boundary)
-            if (contour_point.first != boundary_idx_unconnected && !boundary_data[contour_point.first][contour_point.second].point_consumed)
-                not_connect_points.emplace(boundary[contour_point.first][contour_point.second]);
-
-        for (size_t endpoint_idx = 0; endpoint_idx < map_infill_end_point_to_boundary.size(); ++endpoint_idx) {
-            Polyline                        &polyline      = infill_ordered[get_merged_index(endpoint_idx / 2)];
-            const std::pair<size_t, size_t> &contour_point = map_infill_end_point_to_boundary[endpoint_idx];
-
-            if (contour_point.first != boundary_idx_unconnected && !boundary_data[contour_point.first][contour_point.second].point_consumed) {
-                Point boundary_point                       = boundary[contour_point.first][contour_point.second];
-                auto [points_forward, forward_free_length] = get_hook_path(boundary, boundary_data, contour_point.first, contour_point.second, true,
-                                                                           hook_length, not_connect_points);
-                Points hook_points;
-                // Check if the hook could fit in space in the direction of perimeters
-                if (forward_free_length >= hook_length) {
-                    hook_points = std::move(points_forward);
-                } else {
-                    auto [points_backward, backward_free_length] = get_hook_path(boundary, boundary_data, contour_point.first, contour_point.second,
-                                                                                 false, hook_length, not_connect_points);
-                    // Check if the hook could fit in space in the opposite direction of perimeters.
-                    // In this direction could be another hook. Because of it, it is required free space of size at least 2 * hook_length
-                    if (backward_free_length >= (2 * hook_length))
-                        hook_points = std::move(points_backward);
-                    else
-                        continue;
-                }
-
-                // Identify if the front point or back point of the polyline is touching the boundary
-                if ((boundary_point - polyline.points.front()).cast<double>().squaredNorm() <= (SCALED_EPSILON * SCALED_EPSILON)) {
-                    Points merged_points;
-                    merged_points.reserve(polyline.points.size() + hook_points.size() - 1);
-
-                    for (auto it = hook_points.rbegin(); it != hook_points.rend() - 1; ++it) merged_points.emplace_back(*it);
-
-                    append(merged_points, std::move(polyline.points));
-                    polyline.points = std::move(merged_points);
-                } else {
-                    for (auto it = hook_points.begin() + 1; it != hook_points.end(); ++it) polyline.points.emplace_back(*it);
+    const float take_max_length = hook_length > 0.f ? hook_length : std::numeric_limits<float>::max();
+    const float line_half_width = 0.5f * scale_(spacing);
+    for (ConnectionCost &connection_cost : connections_sorted) {
+		ContourIntersectionPoint *cp1    = &map_infill_end_point_to_boundary[connection_cost.idx_first * 2 + 1];
+		ContourIntersectionPoint *cp2    = &map_infill_end_point_to_boundary[(connection_cost.idx_first + 1) * 2];
+        assert(cp1 != cp2);
+        assert(cp1->contour_idx == cp2->contour_idx && cp1->contour_idx != boundary_idx_unconnected);
+        if (cp1->consumed || cp2->consumed)
+            continue;
+        const float               length = connection_cost.cost;
+        bool                      could_connect;
+        {
+            // cp1, cp2 sorted CCW.
+            ContourIntersectionPoint *cp_low  = connection_cost.reversed ? cp2 : cp1;
+            ContourIntersectionPoint *cp_high = connection_cost.reversed ? cp1 : cp2;
+            assert(std::abs(length - closed_contour_distance_ccw(cp_low->param, cp_high->param, boundary_params[cp1->contour_idx].back())) < SCALED_EPSILON);
+            could_connect = ! cp_low->next_trimmed && ! cp_high->prev_trimmed;
+            if (! could_connect && cp_low->next_on_contour != cp_high) {
+                // Other end of cp1, may or may not be on the same contour as cp1.
+                const ContourIntersectionPoint* cp1prev = cp1 - 1;
+                // Other end of cp2, may or may not be on the same contour as cp2.
+                const ContourIntersectionPoint* cp2next = cp2 + 1;
+                for (auto *cp = cp_low->next_on_contour; cp->next_on_contour != cp_high; cp = cp->next_on_contour) {
+                    if (cp->consumed || cp == cp1prev || cp == cp2next || cp->prev_trimmed || cp->next_trimmed) {
+                        could_connect = false;
+                        break;
+                    }
+                }
+            }
+        }
+        // Indices of the polylines to be connected by a perimeter segment.
+        size_t idx_first  = connection_cost.idx_first;
+        size_t idx_second = idx_first + 1;
+        idx_first = get_and_update_merged_with(idx_first);
+        assert(idx_first < idx_second);
+        assert(idx_second == merged_with[idx_second]);
+        if (could_connect && (hook_length == 0.f || length < hook_length * 2.5)) {
+            // Take the complete contour.
+            // Connect the two polygons using the boundary contour.
+            take(infill_ordered[idx_first], infill_ordered[idx_second], boundary[cp1->contour_idx], cp1, cp2, connection_cost.reversed);
+            // Mark the second polygon as merged with the first one.
+            merged_with[idx_second] = merged_with[idx_first];
+            infill_ordered[idx_second].points.clear();
+        } else {
+            // Try to connect cp1 resp. cp2 with a piece of perimeter line.
+            take_limited(infill_ordered[idx_first],  boundary[cp1->contour_idx], boundary_params[cp1->contour_idx], cp1, cp2, connection_cost.reversed, take_max_length, line_half_width);
+            take_limited(infill_ordered[idx_second], boundary[cp1->contour_idx], boundary_params[cp1->contour_idx], cp2, cp1, ! connection_cost.reversed, take_max_length, line_half_width);
+        }
+	}
+
+    // Connect the remaining open infill lines to the perimeter lines if possible.
+    for (ContourIntersectionPoint &contour_point : map_infill_end_point_to_boundary)
+        if (! contour_point.consumed && contour_point.contour_idx != boundary_idx_unconnected) {
+            const Points             &contour        = boundary[contour_point.contour_idx];
+            const std::vector<float> &contour_params = boundary_params[contour_point.contour_idx];
+            const size_t              contour_pt_idx = contour_point.point_idx;
+
+            float     lprev         = contour_point.could_connect_prev() ?
+                path_length_along_contour_ccw(contour_point.prev_on_contour, &contour_point, contour_params.back()) :
+                std::numeric_limits<float>::max();
+            float     lnext         = contour_point.could_connect_next() ?
+                path_length_along_contour_ccw(&contour_point, contour_point.next_on_contour, contour_params.back()) :
+                std::numeric_limits<float>::max();
+            size_t    polyline_idx  = get_and_update_merged_with(((&contour_point - map_infill_end_point_to_boundary.data()) / 2));
+            Polyline &polyline      = infill_ordered[polyline_idx];
+            assert(! polyline.empty());
+            assert(contour[contour_point.point_idx] == polyline.points.front() || contour[contour_point.point_idx] == polyline.points.back());
+            bool connected = false;
+            for (float l : { std::min(lprev, lnext), std::max(lprev, lnext) }) {
+                if (l == std::numeric_limits<float>::max() || (hook_length > 0.f && l > hook_length * 2.5))
+                    break;
+                // Take the complete contour.
+                bool      reversed      = l == lprev;
+                ContourIntersectionPoint *cp2 = reversed ? contour_point.prev_on_contour : contour_point.next_on_contour;
+                // Identify which end of the polyline touches the boundary.
+                size_t    polyline_idx2 = get_and_update_merged_with(((cp2 - map_infill_end_point_to_boundary.data()) / 2));
+                if (polyline_idx == polyline_idx2)
+                    // Try the other side.
+                    continue;
+                // Not closing a loop.
+                if (contour[contour_point.point_idx] == polyline.points.front())
+                    polyline.reverse();
+                Polyline &polyline2 = infill_ordered[polyline_idx2];
+                assert(! polyline.empty());
+                assert(contour[cp2->point_idx] == polyline2.points.front() || contour[cp2->point_idx] == polyline2.points.back());
+                if (contour[cp2->point_idx] == polyline2.points.back())
+                    polyline2.reverse();
+                take(polyline, polyline2, contour, &contour_point, cp2, reversed);
+                if (polyline_idx < polyline_idx2) {
+                    // Mark the second polyline as merged with the first one.
+                    merged_with[polyline_idx2] = polyline_idx;
+                    polyline2.points.clear();
+                } else {
+                    // Mark the first polyline as merged with the second one.
+                    merged_with[polyline_idx] = polyline_idx2;
+                    polyline2 = std::move(polyline);
+                    polyline.points.clear();
+                }
+                connected = true;
+                break;
+            }
+            if (! connected) {
+                // Which to take? One could optimize for:
+                // 1) Shortest path
+                // 2) Hook length
+                // ...
+                // Let's take the longer now, as this improves the chance of another hook to be placed on the other side of this contour point.
+                float l = std::max(contour_point.contour_not_taken_length_prev, contour_point.contour_not_taken_length_next);
+                if (l > SCALED_EPSILON) {
+                    if (contour_point.contour_not_taken_length_prev > contour_point.contour_not_taken_length_next)
+                        take_limited(polyline, contour, contour_params, &contour_point, contour_point.prev_on_contour, true, take_max_length, line_half_width);
+                    else
+                        take_limited(polyline, contour, contour_params, &contour_point, contour_point.next_on_contour, false, take_max_length, line_half_width);
                 }
             }
         }
-    }
 
     polylines_out.reserve(polylines_out.size() + std::count_if(infill_ordered.begin(), infill_ordered.end(), [](const Polyline &pl) { return ! pl.empty(); }));
 	for (Polyline &pl : infill_ordered)
diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index 0df4bd6c1..87885e655 100644
--- a/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
@@ -124,7 +124,9 @@ protected:
     virtual std::pair<float, Point> _infill_direction(const Surface *surface) const;
 
 public:
-    static void connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary, Polylines &polylines_out, double spacing, const FillParams &params, const int hook_length = 0);
+    static void connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length = 0);
+    static void connect_infill(Polylines &&infill_ordered, const Polygons &boundary, const BoundingBox& bbox, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length = 0);
+    static void connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary, const BoundingBox &bbox, Polylines &polylines_out, double spacing, const FillParams &params, const int hook_length = 0);
 
     static coord_t  _adjust_solid_spacing(const coord_t width, const coord_t distance);
 
diff --git a/src/libslic3r/Fill/FillRectilinear2.cpp b/src/libslic3r/Fill/FillRectilinear2.cpp
index 493bb7c6f..a110dd144 100644
--- a/src/libslic3r/Fill/FillRectilinear2.cpp
+++ b/src/libslic3r/Fill/FillRectilinear2.cpp
@@ -7,12 +7,14 @@
 #include <random>
 
 #include <boost/container/small_vector.hpp>
+#include <boost/log/trivial.hpp>
 #include <boost/static_assert.hpp>
 
 #include "../ClipperUtils.hpp"
 #include "../ExPolygon.hpp"
 #include "../Geometry.hpp"
 #include "../Surface.hpp"
+#include "../ShortestPath.hpp"
 
 #include "FillRectilinear2.hpp"
 
@@ -128,6 +130,13 @@ struct SegmentIntersection
         return coord_t(p / int64_t(pos_q)); 
     }
 
+    // Left vertical line / contour intersection point.
+    // null if next_on_contour_vertical.
+    int32_t	prev_on_contour { 0 };
+    // Right vertical line / contour intersection point.
+    // If next_on_contour_vertical, then then next_on_contour contains next contour point on the same vertical line.
+    int32_t	next_on_contour { 0 };
+
     // Kind of intersection. With the original contour, or with the inner offestted contour?
     // A vertical segment will be at least intersected by OUTER_LOW, OUTER_HIGH,
     // but it could be intersected with OUTER_LOW, INNER_LOW, INNER_HIGH, OUTER_HIGH,
@@ -141,13 +150,6 @@ struct SegmentIntersection
     };
     SegmentIntersectionType type { UNKNOWN };
 
-    // Left vertical line / contour intersection point.
-    // null if next_on_contour_vertical.
-    int32_t	prev_on_contour { 0 };
-    // Right vertical line / contour intersection point.
-    // If next_on_contour_vertical, then then next_on_contour contains next contour point on the same vertical line.
-    int32_t	next_on_contour { 0 };
-
     enum class LinkType : uint8_t {
     	// Horizontal link (left or right).
     	Horizontal,
@@ -383,30 +385,31 @@ public:
         const ExPolygon &expolygon,
         float   angle,
         coord_t aoffset1,
-        coord_t aoffset2)
+        // If the 2nd offset is zero, then it is ignored and only OUTER_LOW / OUTER_HIGH intersections are
+        // populated into vertical intersection lines.
+        coord_t aoffset2 = 0)
     {
         // Copy and rotate the source polygons.
         polygons_src = expolygon;
-        polygons_src.contour.rotate(angle);
-        for (Polygons::iterator it = polygons_src.holes.begin(); it != polygons_src.holes.end(); ++ it)
-            it->rotate(angle);
+        if (angle != 0.f) {
+            polygons_src.contour.rotate(angle);
+            for (Polygon &hole : polygons_src.holes)
+                hole.rotate(angle);
+        }
 
         double mitterLimit = 3.;
         // for the infill pattern, don't cut the corners.
         // default miterLimt = 3
         //double mitterLimit = 10.;
         assert(aoffset1 < 0);
-        assert(aoffset2 < 0);
-        assert(aoffset2 < aoffset1);
+        assert(aoffset2 <= 0);
+        assert(aoffset2 == 0 || aoffset2 < aoffset1);
 //        bool sticks_removed = 
         remove_sticks(polygons_src);
-//        if (sticks_removed) printf("Sticks removed!\n");
-        polygons_outer = offset(polygons_src, float(aoffset1),
-            ClipperLib::jtMiter,
-            mitterLimit);
-        polygons_inner = offset(polygons_outer, float(aoffset2 - aoffset1),
-            ClipperLib::jtMiter,
-            mitterLimit);
+//        if (sticks_removed) BOOST_LOG_TRIVIAL(error) << "Sticks removed!";
+        polygons_outer = offset(polygons_src, float(aoffset1), ClipperLib::jtMiter, mitterLimit);
+        if (aoffset2 < 0)
+            polygons_inner = offset(polygons_outer, float(aoffset2 - aoffset1), ClipperLib::jtMiter, mitterLimit);
 		// Filter out contours with zero area or small area, contours with 2 points only.
         const double min_area_threshold = 0.01 * aoffset2 * aoffset2;
         remove_small(polygons_outer, min_area_threshold);
@@ -424,6 +427,18 @@ public:
         }
     }
 
+    ExPolygonWithOffset(const ExPolygonWithOffset &rhs, float angle) : ExPolygonWithOffset(rhs) {
+        if (angle != 0.f) {
+            this->polygons_src.contour.rotate(angle);
+            for (Polygon &hole : this->polygons_src.holes)
+                hole.rotate(angle);
+            for (Polygon &poly : this->polygons_outer)
+                poly.rotate(angle);
+            for (Polygon &poly : this->polygons_inner)
+                poly.rotate(angle);
+        }
+    }
+
     // Any contour with offset1
     bool             is_contour_outer(size_t idx) const { return idx < n_contours_outer; }
     // Any contour with offset2
@@ -2644,7 +2659,7 @@ bool FillRectilinear2::fill_surface_by_lines(const Surface *surface, const FillP
         Point refpt = rotate_vector.second.rotated(- rotate_vector.first);
         // _align_to_grid will not work correctly with positive pattern_shift.
         coord_t pattern_shift_scaled = coord_t(scale_(pattern_shift)) % line_spacing;
-        refpt(0) -= (pattern_shift_scaled >= 0) ? pattern_shift_scaled : (line_spacing + pattern_shift_scaled);
+        refpt.x() -= (pattern_shift_scaled >= 0) ? pattern_shift_scaled : (line_spacing + pattern_shift_scaled);
         bounding_box.merge(_align_to_grid(
             bounding_box.min, 
             Point(line_spacing, line_spacing), 
@@ -2747,12 +2762,93 @@ bool FillRectilinear2::fill_surface_by_lines(const Surface *surface, const FillP
     return true;
 }
 
+#define FILL_MULTIPLE_SWEEPS_NEW
+
+#ifdef FILL_MULTIPLE_SWEEPS_NEW
+bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out)
+{
+    assert(sweep_params.size() > 1);
+    assert(! params.full_infill());
+    params.density /= double(sweep_params.size());
+    assert(params.density > 0.0001f && params.density <= 1.f);
+
+    ExPolygonWithOffset poly_with_offset_base(surface->expolygon, 0, float(scale_(this->overlap - 0.5 * this->spacing)));
+    if (poly_with_offset_base.n_contours == 0)
+        // Not a single infill line fits.
+        return true;
+
+    Polylines fill_lines;
+    coord_t line_spacing = coord_t(scale_(this->spacing) / params.density);
+    std::pair<float, Point> rotate_vector = this->_infill_direction(surface);
+    for (const SweepParams &sweep : sweep_params) {
+        size_t n_fill_lines_initial = fill_lines.size();
+
+        // Rotate polygons so that we can work with vertical lines here
+        double angle = rotate_vector.first + sweep.angle_base;
+        ExPolygonWithOffset poly_with_offset(poly_with_offset_base, - angle);
+        BoundingBox bounding_box = poly_with_offset.bounding_box_src();
+        // extend bounding box so that our pattern will be aligned with other layers
+        // Transform the reference point to the rotated coordinate system.
+        Point refpt = rotate_vector.second.rotated(- angle);
+        // _align_to_grid will not work correctly with positive pattern_shift.
+        coord_t pattern_shift_scaled = coord_t(scale_(sweep.pattern_shift)) % line_spacing;
+        refpt.x() -= (pattern_shift_scaled >= 0) ? pattern_shift_scaled : (line_spacing + pattern_shift_scaled);
+        bounding_box.merge(_align_to_grid(bounding_box.min, Point(line_spacing, line_spacing), refpt));
+
+        // Intersect a set of euqally spaced vertical lines wiht expolygon.
+        // n_vlines = ceil(bbox_width / line_spacing)
+        const size_t n_vlines = (bounding_box.max.x() - bounding_box.min.x() + line_spacing - 1) / line_spacing;
+        const double cos_a    = cos(angle);
+        const double sin_a    = sin(angle);
+        for (const SegmentedIntersectionLine &vline : slice_region_by_vertical_lines(poly_with_offset, n_vlines, bounding_box.min.x(), line_spacing)) {
+            for (auto it = vline.intersections.begin(); it != vline.intersections.end();) {
+                auto it_low  = it ++;
+                assert(it_low->type == SegmentIntersection::OUTER_LOW);
+                if (it_low->type != SegmentIntersection::OUTER_LOW)
+                    continue;
+                auto it_high = it;
+                assert(it_high->type == SegmentIntersection::OUTER_HIGH);
+                if (it_high->type == SegmentIntersection::OUTER_HIGH) {
+                    fill_lines.emplace_back(Point(vline.pos, it_low->pos()).rotated(cos_a, sin_a), Point(vline.pos, it_high->pos()).rotated(cos_a, sin_a));
+                    ++ it;
+                }
+            }
+        }
+    }
+
+    if (fill_lines.size() > 1)
+        fill_lines = chain_polylines(std::move(fill_lines));
+
+    if (params.dont_connect || fill_lines.size() <= 1)
+        append(polylines_out, std::move(fill_lines));
+    else {
+//        coord_t hook_length = 0;
+        coord_t hook_length = coord_t(scale_(this->spacing)) * 5;
+        connect_infill(std::move(fill_lines), poly_with_offset_base.polygons_outer, get_extents(surface->expolygon.contour), polylines_out, this->spacing, params, hook_length);
+    }
+
+    return true;
+}
+#else
+bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out)
+{
+    params.density /= double(sweep_params.size());
+    bool success = true;
+    int  idx = 0;
+    for (const SweepParams &sweep_param : sweep_params) {
+        if (++ idx == 3)
+            params.dont_connect = true;
+        success &= this->fill_surface_by_lines(surface, params, sweep_param.angle_base, sweep_param.pattern_shift, polylines_out);
+    }
+    return success;
+}
+#endif
+
 Polylines FillRectilinear2::fill_surface(const Surface *surface, const FillParams &params)
 {
     Polylines polylines_out;
-    if (! fill_surface_by_lines(surface, params, 0.f, 0.f, polylines_out)) {
-        printf("FillRectilinear2::fill_surface() failed to fill a region.\n");
-    }
+    if (! fill_surface_by_lines(surface, params, 0.f, 0.f, polylines_out))
+        BOOST_LOG_TRIVIAL(error) << "FillRectilinear2::fill_surface() failed to fill a region.";
     return polylines_out;
 }
 
@@ -2761,72 +2857,53 @@ Polylines FillMonotonic::fill_surface(const Surface *surface, const FillParams &
     FillParams params2 = params;
     params2.monotonic = true;
     Polylines polylines_out;
-    if (! fill_surface_by_lines(surface, params2, 0.f, 0.f, polylines_out)) {
-        printf("FillMonotonic::fill_surface() failed to fill a region.\n");
-    }
+    if (! fill_surface_by_lines(surface, params2, 0.f, 0.f, polylines_out))
+        BOOST_LOG_TRIVIAL(error) << "FillMonotonous::fill_surface() failed to fill a region.";
     return polylines_out;
 }
 
 Polylines FillGrid2::fill_surface(const Surface *surface, const FillParams &params)
 {
-    // Each linear fill covers half of the target coverage.
-    FillParams params2 = params;
-    params2.density *= 0.5f;
     Polylines polylines_out;
-    if (! fill_surface_by_lines(surface, params2, 0.f, 0.f, polylines_out) ||
-        ! fill_surface_by_lines(surface, params2, float(M_PI / 2.), 0.f, polylines_out)) {
-        printf("FillGrid2::fill_surface() failed to fill a region.\n");
-    }
+    if (! this->fill_surface_by_multilines(
+            surface, params,
+            { { 0.f, 0.f }, { float(M_PI / 2.), 0.f } },
+            polylines_out))
+        BOOST_LOG_TRIVIAL(error) << "FillGrid2::fill_surface() failed to fill a region.";
     return polylines_out;
 }
 
 Polylines FillTriangles::fill_surface(const Surface *surface, const FillParams &params)
 {
-    // Each linear fill covers 1/3 of the target coverage.
-    FillParams params2 = params;
-    params2.density *= 0.333333333f;
-    FillParams params3 = params2;
-    params3.dont_connect = true;
     Polylines polylines_out;
-    if (! fill_surface_by_lines(surface, params2, 0.f, 0., polylines_out) ||
-        ! fill_surface_by_lines(surface, params2, float(M_PI / 3.), 0., polylines_out) ||
-        ! fill_surface_by_lines(surface, params3, float(2. * M_PI / 3.), 0., polylines_out)) {
-        printf("FillTriangles::fill_surface() failed to fill a region.\n");
-    }
+    if (! this->fill_surface_by_multilines(
+            surface, params,
+            { { 0.f, 0.f }, { float(M_PI / 3.), 0.f }, { float(2. * M_PI / 3.), 0. } },
+            polylines_out))
+        BOOST_LOG_TRIVIAL(error) << "FillTriangles::fill_surface() failed to fill a region.";
     return polylines_out;
 }
 
 Polylines FillStars::fill_surface(const Surface *surface, const FillParams &params)
 {
-    // Each linear fill covers 1/3 of the target coverage.
-    FillParams params2 = params;
-    params2.density *= 0.333333333f;
-    FillParams params3 = params2;
-    params3.dont_connect = true;
     Polylines polylines_out;
-    if (! fill_surface_by_lines(surface, params2, 0.f, 0., polylines_out) ||
-        ! fill_surface_by_lines(surface, params2, float(M_PI / 3.), 0., polylines_out) ||
-        ! fill_surface_by_lines(surface, params3, float(2. * M_PI / 3.), 0.5 * this->spacing / params2.density, polylines_out)) {
-        printf("FillStars::fill_surface() failed to fill a region.\n");
-    }
+    if (! this->fill_surface_by_multilines(
+            surface, params,
+            { { 0.f, 0.f }, { float(M_PI / 3.), 0.f }, { float(2. * M_PI / 3.), float((3./2.) * this->spacing / params.density) } },
+            polylines_out))
+        BOOST_LOG_TRIVIAL(error) << "FillStars::fill_surface() failed to fill a region.";
     return polylines_out;
 }
 
 Polylines FillCubic::fill_surface(const Surface *surface, const FillParams &params)
 {
-    // Each linear fill covers 1/3 of the target coverage.
-    FillParams params2 = params;
-    params2.density *= 0.333333333f;
-    FillParams params3 = params2;
-    params3.dont_connect = true;
     Polylines polylines_out;
     coordf_t dx = sqrt(0.5) * z;
-    if (! fill_surface_by_lines(surface, params2, 0.f, float(dx), polylines_out) ||
-        ! fill_surface_by_lines(surface, params2, float(M_PI / 3.), - float(dx), polylines_out) ||
-        // Rotated by PI*2/3 + PI to achieve reverse sloping wall.
-        ! fill_surface_by_lines(surface, params3, float(M_PI * 2. / 3.), float(dx), polylines_out)) {
-        printf("FillCubic::fill_surface() failed to fill a region.\n");
-    } 
+    if (! this->fill_surface_by_multilines(
+            surface, params, 
+            { { 0.f, float(dx) }, { float(M_PI / 3.), - float(dx) }, { float(M_PI * 2. / 3.), float(dx) } },
+            polylines_out))
+        BOOST_LOG_TRIVIAL(error) << "FillCubic::fill_surface() failed to fill a region.";
     return polylines_out; 
 }
 
diff --git a/src/libslic3r/Fill/FillRectilinear2.hpp b/src/libslic3r/Fill/FillRectilinear2.hpp
index fd28f155d..1d8c61a94 100644
--- a/src/libslic3r/Fill/FillRectilinear2.hpp
+++ b/src/libslic3r/Fill/FillRectilinear2.hpp
@@ -17,7 +17,16 @@ public:
     virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
 
 protected:
+    // Fill by single directional lines, interconnect the lines along perimeters.
 	bool fill_surface_by_lines(const Surface *surface, const FillParams &params, float angleBase, float pattern_shift, Polylines &polylines_out);
+
+
+    // Fill by multiple sweeps of differing directions.
+    struct SweepParams {
+        float angle_base;
+        float pattern_shift;
+    };
+    bool fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out);
 };
 
 class FillMonotonic : public FillRectilinear2
diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp
index 3b9fcd617..b263aecfd 100644
--- a/src/libslic3r/Geometry.cpp
+++ b/src/libslic3r/Geometry.cpp
@@ -338,19 +338,19 @@ double rad2deg_dir(double angle)
     return rad2deg(angle);
 }
 
-Point circle_taubin_newton(const Points::const_iterator& input_begin, const Points::const_iterator& input_end, size_t cycles)
+Point circle_center_taubin_newton(const Points::const_iterator& input_begin, const Points::const_iterator& input_end, size_t cycles)
 {
     Vec2ds tmp;
     tmp.reserve(std::distance(input_begin, input_end));
     std::transform(input_begin, input_end, std::back_inserter(tmp), [] (const Point& in) { return unscale(in); } );
-    Vec2d center = circle_taubin_newton(tmp.cbegin(), tmp.end(), cycles);
+    Vec2d center = circle_center_taubin_newton(tmp.cbegin(), tmp.end(), cycles);
 	return Point::new_scale(center.x(), center.y());
 }
 
 /// Adapted from work in "Circular and Linear Regression: Fitting circles and lines by least squares", pg 126
 /// Returns a point corresponding to the center of a circle for which all of the points from input_begin to input_end
 /// lie on.
-Vec2d circle_taubin_newton(const Vec2ds::const_iterator& input_begin, const Vec2ds::const_iterator& input_end, size_t cycles)
+Vec2d circle_center_taubin_newton(const Vec2ds::const_iterator& input_begin, const Vec2ds::const_iterator& input_end, size_t cycles)
 {
     // calculate the centroid of the data set
     const Vec2d sum = std::accumulate(input_begin, input_end, Vec2d(0,0));
diff --git a/src/libslic3r/Geometry.hpp b/src/libslic3r/Geometry.hpp
index b690b478d..2bf9453c4 100644
--- a/src/libslic3r/Geometry.hpp
+++ b/src/libslic3r/Geometry.hpp
@@ -201,6 +201,58 @@ inline double ray_point_distance(const Line &iline, const Point &ipt)
 }
 
 // Based on Liang-Barsky function by Daniel White @ http://www.skytopia.com/project/articles/compsci/clipping.html
+template<typename T>
+inline bool liang_barsky_line_clipping_interval(
+    // Start and end points of the source line, result will be stored there as well.
+    const Eigen::Matrix<T, 2, 1, Eigen::DontAlign>                  &x0,
+    const Eigen::Matrix<T, 2, 1, Eigen::DontAlign>                  &v,
+    // Bounding box to clip with.
+    const BoundingBoxBase<Eigen::Matrix<T, 2, 1, Eigen::DontAlign>> &bbox,
+    std::pair<double, double>                                       &out_interval)
+{
+    double t0 = 0.0;
+    double t1 = 1.0;
+    // Traverse through left, right, bottom, top edges.
+    for (int edge = 0; edge < 4; ++ edge)
+    {
+        double p, q;
+        switch (edge) {
+        case 0:  p = - v.x();    q = - bbox.min.x() + x0.x();   break;
+        case 1:  p =   v.x();    q =   bbox.max.x() - x0.x();   break;
+        case 2:  p = - v.y();    q = - bbox.min.y() + x0.y();   break;
+        default: p =   v.y();    q =   bbox.max.y() - x0.y();   break;
+        }
+        
+        if (p == 0) {
+            if (q < 0)
+                // Line parallel to the bounding box edge is fully outside of the bounding box.
+                return false;
+            // else don't clip
+        } else {
+            double r = q / p;
+            if (p < 0) {
+                if (r > t1)
+                    // Fully clipped.
+                    return false;
+                if (r > t0)
+                    // Partially clipped.
+                    t0 = r;
+            } else {
+                assert(p > 0);
+                if (r < t0)
+                    // Fully clipped.
+                    return false;
+                if (r < t1)
+                    // Partially clipped.
+                    t1 = r;
+            }
+        }
+    }
+    out_interval.first = t0;
+    out_interval.second = t1;
+    return true;
+}
+
 template<typename T>
 inline bool liang_barsky_line_clipping(
 	// Start and end points of the source line, result will be stored there as well.
@@ -210,49 +262,12 @@ inline bool liang_barsky_line_clipping(
 	const BoundingBoxBase<Eigen::Matrix<T, 2, 1, Eigen::DontAlign>> &bbox)
 {
     Eigen::Matrix<T, 2, 1, Eigen::DontAlign> v = x1 - x0;
-    double t0 = 0.0;
-    double t1 = 1.0;
-
-	// Traverse through left, right, bottom, top edges.
-    for (int edge = 0; edge < 4; ++ edge)
-    {
-		double p, q;
-    	switch (edge) {
-    	case 0:	 p = - v.x();    q = - bbox.min.x() + x0.x();	break;
-        case 1:  p =   v.x();    q =   bbox.max.x() - x0.x();	break;
-        case 2:  p = - v.y();    q = - bbox.min.y() + x0.y();	break;
-        default: p =   v.y();    q =   bbox.max.y() - x0.y();   break;
-    	}
-        
-		if (p == 0) {
-			if (q < 0)
-				// Line parallel to the bounding box edge is fully outside of the bounding box.
-				return false;
-			// else don't clip
-		} else {
-	        double r = q / p;
-			if (p < 0) {
-				if (r > t1)
-            		// Fully clipped.
-            		return false;
-				if (r > t0)
-            		// Partially clipped.
-            		t0 = r;
-			} else {
-				assert(p > 0);
-				if (r < t0)
-            		// Fully clipped.
-            		return false;
-				if (r < t1)
-            		// Partially clipped.
-            		t1 = r;
-			}
-        }
+    std::pair<double, double> interval;
+    if (liang_barsky_line_clipping_interval(x0, v, bbox, interval)) {
+        // Clipped successfully.
+        x1  = x0 + interval.second * v;
+        x0 += interval.first * v;
     }
-
-    // Clipped successfully.
-    x1  = x0 + t1 * v;
-    x0 += t0 * v;
     return true;
 }
 
@@ -273,6 +288,35 @@ bool liang_barsky_line_clipping(
 	return liang_barsky_line_clipping(x0clip, x1clip, bbox);
 }
 
+// Ugly named variant, that accepts the squared line 
+// Don't call me with a nearly zero length vector!
+template<typename T>
+int ray_circle_intersections_r2_lv2_c(T r2, T a, T b, T lv2, T c, std::pair<Eigen::Matrix<T, 2, 1, Eigen::DontAlign>, Eigen::Matrix<T, 2, 1, Eigen::DontAlign>> &out)
+{
+    T x0 = - a * c / lv2;
+    T y0 = - b * c / lv2;
+    T d = r2 - c * c / lv2;
+    if (d < T(0))
+        return 0;
+    T mult = sqrt(d / lv2);
+    out.first.x() = x0 + b * mult;
+    out.first.y() = y0 - a * mult;
+    out.second.x() = x0 - b * mult;
+    out.second.y() = y0 + a * mult;
+    return mult == T(0) ? 1 : 2;
+}
+template<typename T>
+int ray_circle_intersections(T r, T a, T b, T c, std::pair<Eigen::Matrix<T, 2, 1, Eigen::DontAlign>, Eigen::Matrix<T, 2, 1, Eigen::DontAlign>> &out)
+{
+    T lv2 = a * a + b * b;
+    if (lv2 < T(SCALED_EPSILON * SCALED_EPSILON)) {
+        //FIXME what is the correct epsilon?
+        // What if the line touches the circle?
+        return false;
+    }
+    return ray_circle_intersections_r2_lv2_c2(r * r, a, b, a * a + b * b, c, out);
+}
+
 Pointf3s convex_hull(Pointf3s points);
 Polygon convex_hull(Points points);
 Polygon convex_hull(const Polygons &polygons);
@@ -298,12 +342,12 @@ template<typename T> T angle_to_0_2PI(T angle)
 }
 
 /// Find the center of the circle corresponding to the vector of Points as an arc.
-Point circle_taubin_newton(const Points::const_iterator& input_start, const Points::const_iterator& input_end, size_t cycles = 20);
-inline Point circle_taubin_newton(const Points& input, size_t cycles = 20) { return circle_taubin_newton(input.cbegin(), input.cend(), cycles); }
+Point circle_center_taubin_newton(const Points::const_iterator& input_start, const Points::const_iterator& input_end, size_t cycles = 20);
+inline Point circle_center_taubin_newton(const Points& input, size_t cycles = 20) { return circle_center_taubin_newton(input.cbegin(), input.cend(), cycles); }
 
 /// Find the center of the circle corresponding to the vector of Pointfs as an arc.
-Vec2d circle_taubin_newton(const Vec2ds::const_iterator& input_start, const Vec2ds::const_iterator& input_end, size_t cycles = 20);
-inline Vec2d circle_taubin_newton(const Vec2ds& input, size_t cycles = 20) { return circle_taubin_newton(input.cbegin(), input.cend(), cycles); }
+Vec2d circle_center_taubin_newton(const Vec2ds::const_iterator& input_start, const Vec2ds::const_iterator& input_end, size_t cycles = 20);
+inline Vec2d circle_center_taubin_newton(const Vec2ds& input, size_t cycles = 20) { return circle_center_taubin_newton(input.cbegin(), input.cend(), cycles); }
 
 void simplify_polygons(const Polygons &polygons, double tolerance, Polygons* retval);
 
diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp
index 5082bb746..1e7ca1656 100644
--- a/src/libslic3r/Point.hpp
+++ b/src/libslic3r/Point.hpp
@@ -132,6 +132,7 @@ public:
 
     void   rotate(double angle, const Point &center);
     Point  rotated(double angle) const { Point res(*this); res.rotate(angle); return res; }
+    Point  rotated(double cos_a, double sin_a) const { Point res(*this); res.rotate(cos_a, sin_a); return res; }
     Point  rotated(double angle, const Point &center) const { Point res(*this); res.rotate(angle, center); return res; }
     int    nearest_point_index(const Points &points) const;
     int    nearest_point_index(const PointConstPtrs &points) const;
@@ -174,6 +175,12 @@ inline bool is_approx(const Vec3d &p1, const Vec3d &p2, double epsilon = EPSILON
 	return d.x() < epsilon && d.y() < epsilon && d.z() < epsilon;
 }
 
+inline Point lerp(const Point &a, const Point &b, double t)
+{
+    assert((t >= -EPSILON) && (t <= 1. + EPSILON));
+    return ((1. - t) * a.cast<double>() + t * b.cast<double>()).cast<coord_t>();
+}
+
 namespace int128 {
     // Exact orientation predicate,
     // returns +1: CCW, 0: collinear, -1: CW.
diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h
index a404d230d..4371cbeee 100644
--- a/src/libslic3r/libslic3r.h
+++ b/src/libslic3r/libslic3r.h
@@ -103,12 +103,6 @@ enum Axis {
 	NUM_AXES_WITH_UNKNOWN,
 };
 
-template <class T>
-inline void append_to(std::vector<T> &dst, const std::vector<T> &src)
-{
-    dst.insert(dst.end(), src.begin(), src.end());
-}
-
 template <typename T>
 inline void append(std::vector<T>& dest, const std::vector<T>& src)
 {
@@ -123,8 +117,34 @@ inline void append(std::vector<T>& dest, std::vector<T>&& src)
 {
     if (dest.empty())
         dest = std::move(src);
-    else
+    else {
+        dest.reserve(dest.size() + src.size());
         std::move(std::begin(src), std::end(src), std::back_inserter(dest));
+    }
+    src.clear();
+    src.shrink_to_fit();
+}
+
+// Append the source in reverse.
+template <typename T>
+inline void append_reversed(std::vector<T>& dest, const std::vector<T>& src)
+{
+    if (dest.empty())
+        dest = src;
+    else
+        dest.insert(dest.end(), src.rbegin(), src.rend());
+}
+
+// Append the source in reverse.
+template <typename T>
+inline void append_reversed(std::vector<T>& dest, std::vector<T>&& src)
+{
+    if (dest.empty())
+        dest = std::move(src);
+    else {
+        dest.reserve(dest.size() + src.size());
+        std::move(std::rbegin(src), std::rend(src), std::back_inserter(dest));
+    }
     src.clear();
     src.shrink_to_fit();
 }
diff --git a/tests/libslic3r/test_geometry.cpp b/tests/libslic3r/test_geometry.cpp
index 6f2bd1c39..24e0908cc 100644
--- a/tests/libslic3r/test_geometry.cpp
+++ b/tests/libslic3r/test_geometry.cpp
@@ -168,21 +168,21 @@ SCENARIO("Circle Fit, TaubinFit with Newton's method", "[Geometry]") {
 
         WHEN("Circle fit is called on the entire array") {
             Vec2d result_center(0,0);
-            result_center = Geometry::circle_taubin_newton(sample);
+            result_center = Geometry::circle_center_taubin_newton(sample);
             THEN("A center point of -6,0 is returned.") {
                 REQUIRE(is_approx(result_center, expected_center));
             }
         }
         WHEN("Circle fit is called on the first four points") {
             Vec2d result_center(0,0);
-            result_center = Geometry::circle_taubin_newton(sample.cbegin(), sample.cbegin()+4);
+            result_center = Geometry::circle_center_taubin_newton(sample.cbegin(), sample.cbegin()+4);
             THEN("A center point of -6,0 is returned.") {
                 REQUIRE(is_approx(result_center, expected_center));
             }
         }
         WHEN("Circle fit is called on the middle four points") {
             Vec2d result_center(0,0);
-            result_center = Geometry::circle_taubin_newton(sample.cbegin()+2, sample.cbegin()+6);
+            result_center = Geometry::circle_center_taubin_newton(sample.cbegin()+2, sample.cbegin()+6);
             THEN("A center point of -6,0 is returned.") {
                 REQUIRE(is_approx(result_center, expected_center));
             }
@@ -199,21 +199,21 @@ SCENARIO("Circle Fit, TaubinFit with Newton's method", "[Geometry]") {
 
         WHEN("Circle fit is called on the entire array") {
             Vec2d result_center(0,0);
-            result_center = Geometry::circle_taubin_newton(sample);
+            result_center = Geometry::circle_center_taubin_newton(sample);
             THEN("A center point of 3,9 is returned.") {
                 REQUIRE(is_approx(result_center, expected_center));
             }
         }
         WHEN("Circle fit is called on the first four points") {
             Vec2d result_center(0,0);
-            result_center = Geometry::circle_taubin_newton(sample.cbegin(), sample.cbegin()+4);
+            result_center = Geometry::circle_center_taubin_newton(sample.cbegin(), sample.cbegin()+4);
             THEN("A center point of 3,9 is returned.") {
                 REQUIRE(is_approx(result_center, expected_center));
             }
         }
         WHEN("Circle fit is called on the middle four points") {
             Vec2d result_center(0,0);
-            result_center = Geometry::circle_taubin_newton(sample.cbegin()+2, sample.cbegin()+6);
+            result_center = Geometry::circle_center_taubin_newton(sample.cbegin()+2, sample.cbegin()+6);
             THEN("A center point of 3,9 is returned.") {
                 REQUIRE(is_approx(result_center, expected_center));
             }
@@ -230,21 +230,21 @@ SCENARIO("Circle Fit, TaubinFit with Newton's method", "[Geometry]") {
 
         WHEN("Circle fit is called on the entire array") {
             Point result_center(0,0);
-            result_center = Geometry::circle_taubin_newton(sample);
+            result_center = Geometry::circle_center_taubin_newton(sample);
             THEN("A center point of scaled 3,9 is returned.") {
                 REQUIRE(is_approx(result_center, expected_center));
             }
         }
         WHEN("Circle fit is called on the first four points") {
             Point result_center(0,0);
-            result_center = Geometry::circle_taubin_newton(sample.cbegin(), sample.cbegin()+4);
+            result_center = Geometry::circle_center_taubin_newton(sample.cbegin(), sample.cbegin()+4);
             THEN("A center point of scaled 3,9 is returned.") {
                 REQUIRE(is_approx(result_center, expected_center));
             }
         }
         WHEN("Circle fit is called on the middle four points") {
             Point result_center(0,0);
-            result_center = Geometry::circle_taubin_newton(sample.cbegin()+2, sample.cbegin()+6);
+            result_center = Geometry::circle_center_taubin_newton(sample.cbegin()+2, sample.cbegin()+6);
             THEN("A center point of scaled 3,9 is returned.") {
                 REQUIRE(is_approx(result_center, expected_center));
             }

From 139b58a6f2583b929f897331d11490640f9cb977 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Fri, 6 Nov 2020 08:56:53 +0100
Subject: [PATCH 018/138] Adaptive Cubic infill with anchors: Trimming anchors
 with not only with a neighbor T-joint line, but also with other crossing
 lines.

---
 src/libslic3r/Fill/FillAdaptive.cpp | 92 ++++++++++++++++-------------
 1 file changed, 50 insertions(+), 42 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 65a7b95d6..cbe1f26a6 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -564,8 +564,8 @@ struct Intersection
 
     // Point for which is computed closest line (closest_line)
     Point     intersect_point;
-    // Index of the polyline from which is computed closest_line
-    size_t    intersect_pl_idx;
+    // Index of the source infill from which is computed closest_line
+    size_t    intersect_line_idx;
     // Pointer to the polyline from which is computed closest_line
     Polyline *intersect_pl;
     // The line for which is computed closest line from intersect_point to closest_line
@@ -654,12 +654,7 @@ static void add_hook(const Intersection &intersection, const double scaled_spaci
     Vector  hook_vector      = (hook_length * hook_vector_norm).cast<coord_t>();
     Line    hook_forward(hook_start, hook_start + hook_vector);
 
-    auto filter_itself = [&intersection](const auto &item) {
-        const rtree_segment_t &seg     = item.first;
-        const Point           &i_point = intersection.intersect_point;
-        return !((float(i_point.x()) == bg::get<0, 0>(seg) && float(i_point.y()) == bg::get<0, 1>(seg)) ||
-                 (float(i_point.x()) == bg::get<1, 0>(seg) && float(i_point.y()) == bg::get<1, 1>(seg)));
-    };
+    auto filter_itself = [&intersection](const auto &item) { return item.second != intersection.intersect_line_idx; };
 
     std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
     rtree.query(bgi::intersects(mk_rtree_seg(hook_forward)) && bgi::satisfies(filter_itself), std::back_inserter(hook_intersections));
@@ -792,17 +787,18 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 
     auto update_merged_polyline = [&lines, &merged_with](Intersection &intersection) {
         // Update the polyline index to index which is merged
-        for (size_t last = intersection.intersect_pl_idx;;) {
+        size_t intersect_pl_idx = intersection.intersect_pl - lines.data();
+        for (size_t last = intersect_pl_idx;;) {
             size_t lower = merged_with[last];
             if (lower == last) {
-                merged_with[intersection.intersect_pl_idx] = lower;
-                intersection.intersect_pl_idx              = lower;
+                merged_with[intersect_pl_idx] = lower;
+                intersect_pl_idx              = lower;
                 break;
             }
             last = lower;
         }
 
-        intersection.intersect_pl = &lines[intersection.intersect_pl_idx];
+        intersection.intersect_pl = &lines[intersect_pl_idx];
         // After polylines are merged, it is necessary to update "forward" based on if intersect_point is the first or the last point of intersect_pl.
         if (intersection.fresh())
             intersection.front = intersection.intersect_pl->points.front() == intersection.intersect_point;
@@ -854,41 +850,53 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
             Point first_i_point, nearest_i_point;
             if (first_i.intersect_line.intersection(offset_line, &first_i_point) &&
                 nearest_i.intersect_line.intersection(offset_line, &nearest_i_point)) {
+                bool connected = false;
                 if (nearest_i.fresh() && (nearest_i_point - first_i_point).cast<double>().squaredNorm() <= Slic3r::sqr(3. * hook_length)) {
                     // Both intersections are so close that their polylines can be connected.
-                    if (first_i.intersect_pl_idx == nearest_i.intersect_pl_idx) {
-                        // Both intersections are on the same polyline, that means a loop is being closed.
-                        if (! first_i.front)
-                            std::swap(first_i_point, nearest_i_point);
-                        first_i.intersect_pl->points.front() = first_i_point;
-                        first_i.intersect_pl->points.back()  = nearest_i_point;
-                        //FIXME trim the end of a closed loop a bit?
-                        first_i.intersect_pl->points.emplace(first_i.intersect_pl->points.begin(), nearest_i_point);
-                    } else {
-                        // Both intersections are on different polylines
-                        Points &first_points  = first_i.intersect_pl->points;
-                        Points &second_points = nearest_i.intersect_pl->points;
-                        first_points.reserve(first_points.size() + second_points.size());
-                        if (first_i.front)
-                            std::reverse(first_points.begin(), first_points.end());
-                        first_points.back() = first_i_point;
-                        first_points.emplace_back(nearest_i_point);
-                        if (nearest_i.front)
-                            first_points.insert(first_points.end(), second_points.begin() + 1, second_points.end());
-                        else
-                            first_points.insert(first_points.end(), second_points.rbegin() + 1, second_points.rend());
-                        // Keep the polyline at the lower index slot.
-                        if (first_i.intersect_pl_idx < nearest_i.intersect_pl_idx) {
-                            second_points.clear();
-                            merged_with[nearest_i.intersect_pl_idx] = merged_with[first_i.intersect_pl_idx];
+                    // Verify that no other infill line intersects this anchor line.
+                    std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
+                    rtree.query(
+                        bgi::intersects(mk_rtree_seg(first_i_point, nearest_i_point)) &&
+                        bgi::satisfies([&first_i, &nearest_i](const auto &item) { return item.second != first_i.intersect_line_idx && item.second != nearest_i.intersect_line_idx; }),
+                        std::back_inserter(hook_intersections));
+                    if (hook_intersections.empty()) {
+                        // No other infill line intersects this anchor line. Extrude it as a whole.
+                        if (first_i.intersect_pl == nearest_i.intersect_pl) {
+                            // Both intersections are on the same polyline, that means a loop is being closed.
+                            if (! first_i.front)
+                                std::swap(first_i_point, nearest_i_point);
+                            first_i.intersect_pl->points.front() = first_i_point;
+                            first_i.intersect_pl->points.back()  = nearest_i_point;
+                            //FIXME trim the end of a closed loop a bit?
+                            first_i.intersect_pl->points.emplace(first_i.intersect_pl->points.begin(), nearest_i_point);
                         } else {
-                            second_points = std::move(first_points);
-                            first_points.clear();
-                            merged_with[first_i.intersect_pl_idx] = merged_with[nearest_i.intersect_pl_idx];
+                            // Both intersections are on different polylines
+                            Points &first_points  = first_i.intersect_pl->points;
+                            Points &second_points = nearest_i.intersect_pl->points;
+                            first_points.reserve(first_points.size() + second_points.size());
+                            if (first_i.front)
+                                std::reverse(first_points.begin(), first_points.end());
+                            first_points.back() = first_i_point;
+                            first_points.emplace_back(nearest_i_point);
+                            if (nearest_i.front)
+                                first_points.insert(first_points.end(), second_points.begin() + 1, second_points.end());
+                            else
+                                first_points.insert(first_points.end(), second_points.rbegin() + 1, second_points.rend());
+                            // Keep the polyline at the lower index slot.
+                            if (first_i.intersect_pl < nearest_i.intersect_pl) {
+                                second_points.clear();
+                                merged_with[nearest_i.intersect_pl - lines.data()] = merged_with[first_i.intersect_pl - lines.data()];
+                            } else {
+                                second_points = std::move(first_points);
+                                first_points.clear();
+                                merged_with[first_i.intersect_pl - lines.data()] = merged_with[nearest_i.intersect_pl - lines.data()];
+                            }
                         }
+                        nearest_i.used = true;
+                        connected = true;
                     }
-                    nearest_i.used = true;
-                } else
+                }
+                if (! connected)
                     // Try to connect left or right. If not enough space for hook_length, take the longer side.
                     add_hook(first_i, scale_(spacing), hook_length, rtree);
                 first_i.used = true;

From 517477f0ddfc18522f9a58e3b2cc3e443f321cc1 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Fri, 6 Nov 2020 16:24:15 +0100
Subject: [PATCH 019/138] Fix of the previous Adaptive Cubic infill refactoring
 plus couple of fixes of the old logic.

---
 src/libslic3r/BoundingBox.hpp       |   4 +
 src/libslic3r/EdgeGrid.hpp          |   4 +
 src/libslic3r/Fill/FillAdaptive.cpp | 158 ++++++++++++++++++----------
 src/libslic3r/Fill/FillBase.cpp     |  10 +-
 4 files changed, 115 insertions(+), 61 deletions(-)

diff --git a/src/libslic3r/BoundingBox.hpp b/src/libslic3r/BoundingBox.hpp
index 065476cb2..819162ec9 100644
--- a/src/libslic3r/BoundingBox.hpp
+++ b/src/libslic3r/BoundingBox.hpp
@@ -47,6 +47,7 @@ public:
     void translate(coordf_t x, coordf_t y) { assert(this->defined); PointClass v(x, y); this->min += v; this->max += v; }
     void translate(const Vec2d &v) { this->min += v; this->max += v; }
     void offset(coordf_t delta);
+    BoundingBoxBase<PointClass> inflated(coordf_t delta) const throw() { BoundingBoxBase<PointClass> out(*this); out.offset(delta); return out; }
     PointClass center() const;
     bool contains(const PointClass &point) const {
         return point(0) >= this->min(0) && point(0) <= this->max(0)
@@ -91,6 +92,7 @@ public:
     void translate(coordf_t x, coordf_t y, coordf_t z) { assert(this->defined); PointClass v(x, y, z); this->min += v; this->max += v; }
     void translate(const Vec3d &v) { this->min += v; this->max += v; }
     void offset(coordf_t delta);
+    BoundingBoxBase<PointClass> inflated(coordf_t delta) const throw() { BoundingBoxBase<PointClass> out(*this); out.offset(delta); return out; }
     PointClass center() const;
     coordf_t max_size() const;
 
@@ -159,6 +161,8 @@ public:
     BoundingBox(const Point &pmin, const Point &pmax) : BoundingBoxBase<Point>(pmin, pmax) {}
     BoundingBox(const Points &points) : BoundingBoxBase<Point>(points) {}
 
+    BoundingBox inflated(coordf_t delta) const throw() { BoundingBox out(*this); out.offset(delta); return out; }
+
     friend BoundingBox get_extents_rotated(const Points &points, double angle);
 };
 
diff --git a/src/libslic3r/EdgeGrid.hpp b/src/libslic3r/EdgeGrid.hpp
index fc8e2c8ad..71d636628 100644
--- a/src/libslic3r/EdgeGrid.hpp
+++ b/src/libslic3r/EdgeGrid.hpp
@@ -231,6 +231,10 @@ public:
 
 	std::pair<std::vector<std::pair<size_t, size_t>>::const_iterator, std::vector<std::pair<size_t, size_t>>::const_iterator> cell_data_range(coord_t row, coord_t col) const
 	{
+		assert(row >= 0);
+		assert(row < m_rows);
+		assert(col >= 0);
+		assert(col < m_cols);
 		const EdgeGrid::Grid::Cell &cell = m_cells[row * m_cols + col];
 		return std::make_pair(m_cell_data.begin() + cell.begin, m_cell_data.begin() + cell.end);
 	}
diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index cbe1f26a6..b8b18e3a6 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -508,7 +508,7 @@ static void generate_infill_lines_recursive(
 #endif
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-static void export_infill_lines_to_svg(const ExPolygon &expoly, const Polylines &polylines, const std::string &path)
+static void export_infill_lines_to_svg(const ExPolygon &expoly, const Polylines &polylines, const std::string &path, const Points &pts = Points())
 {
     BoundingBox bbox = get_extents(expoly);
     bbox.offset(scale_(3.));
@@ -518,38 +518,40 @@ static void export_infill_lines_to_svg(const ExPolygon &expoly, const Polylines
     svg.draw_outline(expoly, "green");
     svg.draw(polylines, "red");
     static constexpr double trim_length = scale_(0.4);
-    for (Polyline polyline : polylines) {
-        Vec2d a = polyline.points.front().cast<double>();
-        Vec2d d = polyline.points.back().cast<double>();
-        if (polyline.size() == 2) {
-            Vec2d v = d - a;
-            double l = v.norm();
-            if (l > 2. * trim_length) {
-                a += v * trim_length / l;
-                d -= v * trim_length / l;
-                polyline.points.front() = a.cast<coord_t>();
-                polyline.points.back() = d.cast<coord_t>();
-            } else
-                polyline.points.clear();
-        } else if (polyline.size() > 2) {
-            Vec2d b = polyline.points[1].cast<double>();
-            Vec2d c = polyline.points[polyline.points.size() - 2].cast<double>();
-            Vec2d v = b - a;
-            double l = v.norm();
-            if (l > trim_length) {
-                a += v * trim_length / l;
-                polyline.points.front() = a.cast<coord_t>();
-            } else
-                polyline.points.erase(polyline.points.begin());
-            v = d - c;
-            l = v.norm();
-            if (l > trim_length)
-                polyline.points.back() = (d - v * trim_length / l).cast<coord_t>();
-            else
-                polyline.points.pop_back();
+    for (Polyline polyline : polylines)
+        if (! polyline.empty()) {
+            Vec2d a = polyline.points.front().cast<double>();
+            Vec2d d = polyline.points.back().cast<double>();
+            if (polyline.size() == 2) {
+                Vec2d v = d - a;
+                double l = v.norm();
+                if (l > 2. * trim_length) {
+                    a += v * trim_length / l;
+                    d -= v * trim_length / l;
+                    polyline.points.front() = a.cast<coord_t>();
+                    polyline.points.back() = d.cast<coord_t>();
+                } else
+                    polyline.points.clear();
+            } else if (polyline.size() > 2) {
+                Vec2d b = polyline.points[1].cast<double>();
+                Vec2d c = polyline.points[polyline.points.size() - 2].cast<double>();
+                Vec2d v = b - a;
+                double l = v.norm();
+                if (l > trim_length) {
+                    a += v * trim_length / l;
+                    polyline.points.front() = a.cast<coord_t>();
+                } else
+                    polyline.points.erase(polyline.points.begin());
+                v = d - c;
+                l = v.norm();
+                if (l > trim_length)
+                    polyline.points.back() = (d - v * trim_length / l).cast<coord_t>();
+                else
+                    polyline.points.pop_back();
+            }
+            svg.draw(polyline, "black");
         }
-        svg.draw(polyline, "black");
-    }
+    svg.draw(pts, "magenta");
 }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
@@ -601,11 +603,11 @@ static inline Intersection *get_nearest_intersection(std::vector<std::pair<Inter
 
 // Create a line representing the anchor aka hook extrusion based on line_to_offset 
 // translated in the direction of the intersection line (intersection.intersect_line).
-static Line create_offset_line(const Line &line_to_offset, const Intersection &intersection, const double scaled_spacing)
+static Line create_offset_line(const Line &line_to_offset, const Intersection &intersection, const double scaled_offset)
 {
     Vec2d        dir            = line_to_offset.vector().cast<double>().normalized();
     // 50% overlap of the extrusion lines to achieve strong bonding.
-    Vec2d        offset_vector  = Vec2d(- dir.y(), dir.x()) * (scaled_spacing / 2.);
+    Vec2d        offset_vector  = Vec2d(- dir.y(), dir.x()) * scaled_offset;
     const Point &furthest_point = (intersection.intersect_point == intersection.intersect_line.a ? intersection.intersect_line.b : intersection.intersect_line.a);
 
     // Move inside.
@@ -615,9 +617,7 @@ static Line create_offset_line(const Line &line_to_offset, const Intersection &i
     Line  offset_line    = line_to_offset;
     offset_line.translate(offset_vector.x(), offset_vector.y());
     // Extend the line by a small value to guarantee a collision with adjacent lines
-    offset_line.extend(coord_t(scale_(1.)));
-    //FIXME scaled_spacing * tan(PI/6)
-//    offset_line.extend(coord_t(scaled_spacing * 0.577));
+    offset_line.extend(coord_t(scaled_offset * 1.16)); // / cos(PI/6)
     return offset_line;
 };
 
@@ -641,12 +641,12 @@ static inline rtree_segment_t mk_rtree_seg(const Line &l) {
 }
 
 // Create a hook based on hook_line and append it to the begin or end of the polyline in the intersection
-static void add_hook(const Intersection &intersection, const double scaled_spacing, const int hook_length, const rtree_t &rtree)
+static void add_hook(const Intersection &intersection, const double scaled_offset, const int hook_length, const rtree_t &rtree)
 {
     // Trim the hook start by the infill line it will connect to.
     Point hook_start;
     bool  intersection_found = intersection.intersect_line.intersection(
-        create_offset_line(intersection.closest_line, intersection, scaled_spacing),
+        create_offset_line(intersection.closest_line, intersection, scaled_offset),
         &hook_start);
     assert(intersection_found);
 
@@ -729,17 +729,24 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
         rtree.insert(std::make_pair(mk_rtree_seg(poly.points.front(), poly.points.back()), poly_idx++));
     }
 
+    const float scaled_offset = float(scale_(spacing) * 0.7); // 30% overlap
+
     std::vector<Intersection> intersections;
     {
-        const coord_t scaled_spacing = coord_t(scale_(spacing));
         // Keeping the vector of closest points outside the loop, so the vector does not need to be reallocated.
         std::vector<std::pair<rtree_segment_t, size_t>> closest;
+        // Minimum lenght of an infill line to anchor. Very short lines cannot be trimmed from both sides,
+        // it does not help to anchor extremely short infill lines, it consumes too much plastic while not adding
+        // to the object rigidity.
+        const double line_len_threshold = scaled_offset * 4.;
+        // Minimum length of an infill line to be trimmed from both sides.
+        assert(line_len_threshold > scaled_offset * (2. / cos(PI / 6.)) + SCALED_EPSILON);
         for (size_t line_idx = 0; line_idx < lines.size(); ++line_idx) {
             Polyline &line = lines[line_idx];
             // Lines shorter than spacing are skipped because it is needed to shrink a line by the value of spacing.
             // A shorter line than spacing could produce a degenerate polyline.
             //FIXME we should rather remove such short infill lines earlier!
-            if (line.length() <= (scaled_spacing + SCALED_EPSILON))
+            if (line.length() < line_len_threshold)
                 continue;
 
             const Point &front_point = line.points.front();
@@ -763,6 +770,17 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
         }
     }
 
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+    static int iRun = 0;
+    int iStep = 0;
+    {
+        Points pts;
+        for (const Intersection &i : intersections)
+            pts.emplace_back(i.intersect_point);
+        export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-Tjoints-%d.svg", iRun++), pts);
+    }
+#endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
+
     std::sort(intersections.begin(), intersections.end(),
               [](const Intersection &i1, const Intersection &i2) { return i1.closest_line_idx < i2.closest_line_idx; });
 
@@ -800,8 +818,11 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 
         intersection.intersect_pl = &lines[intersect_pl_idx];
         // After polylines are merged, it is necessary to update "forward" based on if intersect_point is the first or the last point of intersect_pl.
-        if (intersection.fresh())
+        if (intersection.fresh()) {
+            assert(intersection.intersect_pl->points.front() == intersection.intersect_point ||
+                   intersection.intersect_pl->points.back()  == intersection.intersect_point);
             intersection.front = intersection.intersect_pl->points.front() == intersection.intersect_point;
+        }
     };
 
     // Keep intersect_line outside the loop, so it does not get reallocated.
@@ -811,19 +832,25 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
         intersect_line.clear();
         // All the nearest points (T-joints) ending at the same line are projected onto this line. Because of it, it can easily find the nearest point.
         {
-            const Point &p0 = intersections[min_idx].intersect_point;
-            size_t max_idx = min_idx + 1;
-            intersect_line.emplace_back(&intersections[min_idx], 0.);
-            for (; max_idx < intersections.size() && intersections[min_idx].closest_line_idx == intersections[max_idx].closest_line_idx; ++max_idx)
-                intersect_line.emplace_back(&intersections[max_idx], line_dir.dot((intersections[max_idx].intersect_point - p0).cast<double>()));
+            size_t max_idx = min_idx;
+            for (; max_idx < intersections.size() && intersections[min_idx].closest_line_idx == intersections[max_idx].closest_line_idx; ++ max_idx)
+                intersect_line.emplace_back(&intersections[max_idx], line_dir.dot(intersections[max_idx].intersect_point.cast<double>()));
             min_idx = max_idx;
         }
         if (intersect_line.size() == 1) {
             // Simple case: The current intersection is the only one touching its adjacent line.
             Intersection &first_i = *intersect_line.front().first;
+            update_merged_polyline(first_i);
             if (first_i.fresh()) {
                 // Try to connect left or right. If not enough space for hook_length, take the longer side.
-                add_hook(first_i, scale_(spacing), hook_length, rtree);
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook0-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
+#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                add_hook(first_i, scaled_offset, hook_length, rtree);
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook0-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
+                ++ iStep;
+#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 first_i.used = true;
             }
             continue;
@@ -832,19 +859,23 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
         assert(intersect_line.size() > 1);
         // Sort the intersections along line_dir.
         std::sort(intersect_line.begin(), intersect_line.end(), [](const auto &i1, const auto &i2) { return i1.second < i2.second; });
+
         for (size_t first_idx = 0; first_idx < intersect_line.size(); ++ first_idx) {
             Intersection &first_i = *intersect_line[first_idx].first;
+            update_merged_polyline(first_i);
             if (! first_i.fresh())
                 // The intersection has been processed, or the polyline has been merged to another polyline.
                 continue;
 
             // Get the previous or next intersection on the same line, pick the closer one.
+            if (first_idx > 0)
+                update_merged_polyline(*intersect_line[first_idx - 1].first);
+            if (first_idx + 1 < intersect_line.size())
+                update_merged_polyline(*intersect_line[first_idx + 1].first);
             Intersection &nearest_i = *get_nearest_intersection(intersect_line, first_idx);
-            update_merged_polyline(first_i);
-            update_merged_polyline(nearest_i);
 
             // A line between two intersections points
-            Line offset_line = create_offset_line(Line(first_i.intersect_point, nearest_i.intersect_point), first_i, scale_(spacing));
+            Line offset_line = create_offset_line(Line(first_i.intersect_point, nearest_i.intersect_point), first_i, scaled_offset);
             // Check if both intersections lie on the offset_line and simultaneously get their points of intersecting.
             // These points are used as start and end of the hook
             Point first_i_point, nearest_i_point;
@@ -860,9 +891,13 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                         bgi::satisfies([&first_i, &nearest_i](const auto &item) { return item.second != first_i.intersect_line_idx && item.second != nearest_i.intersect_line_idx; }),
                         std::back_inserter(hook_intersections));
                     if (hook_intersections.empty()) {
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                        export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-connecting-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point, nearest_i.intersect_point });
+#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                         // No other infill line intersects this anchor line. Extrude it as a whole.
                         if (first_i.intersect_pl == nearest_i.intersect_pl) {
                             // Both intersections are on the same polyline, that means a loop is being closed.
+                            assert(first_i.front != nearest_i.front);
                             if (! first_i.front)
                                 std::swap(first_i_point, nearest_i_point);
                             first_i.intersect_pl->points.front() = first_i_point;
@@ -885,20 +920,33 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                             // Keep the polyline at the lower index slot.
                             if (first_i.intersect_pl < nearest_i.intersect_pl) {
                                 second_points.clear();
-                                merged_with[nearest_i.intersect_pl - lines.data()] = merged_with[first_i.intersect_pl - lines.data()];
+                                merged_with[nearest_i.intersect_pl - lines.data()] = first_i.intersect_pl - lines.data();
                             } else {
                                 second_points = std::move(first_points);
                                 first_points.clear();
-                                merged_with[first_i.intersect_pl - lines.data()] = merged_with[nearest_i.intersect_pl - lines.data()];
+                                merged_with[first_i.intersect_pl - lines.data()] = nearest_i.intersect_pl - lines.data();
                             }
                         }
                         nearest_i.used = true;
                         connected = true;
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                        export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-connecting-post-%d-%d.svg", iRun, iStep), { first_i.intersect_point, nearest_i.intersect_point });
+#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                     }
                 }
-                if (! connected)
+                if (! connected) {
                     // Try to connect left or right. If not enough space for hook_length, take the longer side.
-                    add_hook(first_i, scale_(spacing), hook_length, rtree);
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                    export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
+#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                    add_hook(first_i, scaled_offset, hook_length, rtree);
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                    export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
+#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                }
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                ++iStep;
+#endif ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 first_i.used = true;
             } else {
                 // The first & last point should always be found.
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index bd29594c0..a3b83e38f 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -1056,7 +1056,8 @@ void mark_boundary_segments_touching_infill(
 #endif
 
 	EdgeGrid::Grid grid;
-	grid.set_bbox(boundary_bbox);
+    // Make sure that the the grid is big enough for queries against the thick segment.
+	grid.set_bbox(boundary_bbox.inflated(distance_colliding + SCALED_EPSILON));
 	// Inflate the bounding box by a thick line width.
 	grid.create(boundary, std::max(clip_distance, distance_colliding) + scale_(10.));
 
@@ -1213,15 +1214,12 @@ void mark_boundary_segments_touching_infill(
 void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_src, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length)
 {
 	assert(! boundary_src.contour.points.empty());
-    BoundingBox bbox = get_extents(boundary_src.contour);
-    bbox.offset(SCALED_EPSILON);
-
     auto polygons_src = reserve_vector<const Polygon*>(boundary_src.holes.size() + 1);
     polygons_src.emplace_back(&boundary_src.contour);
     for (const Polygon &polygon : boundary_src.holes)
         polygons_src.emplace_back(&polygon);
 
-    connect_infill(std::move(infill_ordered), polygons_src, bbox, polylines_out, spacing, params, hook_length);
+    connect_infill(std::move(infill_ordered), polygons_src, get_extents(boundary_src.contour), polylines_out, spacing, params, hook_length);
 }
 
 void Fill::connect_infill(Polylines &&infill_ordered, const Polygons &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length)
@@ -1255,7 +1253,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
 		std::vector<std::pair<EdgeGrid::Grid::ClosestPointResult, size_t>> intersection_points;
 		{
 			EdgeGrid::Grid grid;
-			grid.set_bbox(bbox);
+			grid.set_bbox(bbox.inflated(SCALED_EPSILON));
 			grid.create(boundary_src, scale_(10.));
 			intersection_points.reserve(infill_ordered.size() * 2);
 			for (const Polyline &pl : infill_ordered)

From 89df9c1038bef78d9b89ad1b911b2ca5d62a6076 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Tue, 10 Nov 2020 13:56:12 +0100
Subject: [PATCH 020/138] Improvement of AdaptiveFill: 1) Merging of collinear
 infill lines separated by a thin gap created    by trimming with the boundary
 polygon. 2) Sorting of the T-joints separately to the left / right of the
 common    line. 3) Trimming self intersections of the anchor lines. 4)
 Dropping of very short segments, not anchoring short segments.

---
 src/libslic3r/Fill/FillAdaptive.cpp | 481 ++++++++++++++++++++--------
 src/libslic3r/Line.hpp              |   2 +-
 src/libslic3r/Point.hpp             |  27 ++
 3 files changed, 383 insertions(+), 127 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index b8b18e3a6..18df5b277 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -574,14 +574,49 @@ struct Intersection
     Line      intersect_line;
     // Indicate if intersect_point is the first or the last point of intersect_pl
     bool      front;
+    // Signum of intersect_line_dir.cross(closest_line.dir()):
+    bool      left;
 
     // Indication if this intersection has been proceed
     bool      used = false;
 
     bool      fresh() const throw() { return ! used && ! intersect_pl->empty(); }
+
+    std::optional<Line> other_hook() const {
+        std::optional<Line> out;
+        const Points &pts = intersect_pl->points;
+        if (pts.size() >= 3)
+            out = this->front ? Line(pts[1], pts[2]) : Line(pts[pts.size() - 2], pts[pts.size() - 3]);
+        return out;
+    }
+
+    bool      other_hook_intersects(const Line &l, Point &pt) {
+        std::optional<Line> h = other_hook();
+        return h && h->intersection(l, &pt);
+    }
+    bool      other_hook_intersects(const Line &l) { Point pt; return this->other_hook_intersects(l, pt); }
+
+    // Direction to intersect_point.
+    Vec2d     intersect_line_dir() const throw() {
+        return (this->intersect_point == intersect_line.a ? intersect_line.b - intersect_line.a : intersect_line.a - intersect_line.b).cast<double>();
+    }
+
+    void      update_left_right() {
+        Vec2d v1((this->closest_line.b - this->closest_line.a).cast<double>());
+        Vec2d v2(this->intersect_line_dir());
+#ifndef NDEBUG
+        {
+            Vec2d v1n = v1.normalized();
+            Vec2d v2n = v2.normalized();
+            double c = cross2(v1n, v2n);
+            assert(std::abs(c) > sin(M_PI / 12.));
+        }
+#endif // NDEBUG
+        this->left = cross2(v1, v2) > 0.;
+    }
 };
 
-static inline Intersection *get_nearest_intersection(std::vector<std::pair<Intersection*, double>> &intersect_line, const size_t first_idx)
+static inline Intersection* get_nearest_intersection(std::vector<std::pair<Intersection*, double>>& intersect_line, const size_t first_idx)
 {
     assert(intersect_line.size() >= 2);
     bool take_next = false;
@@ -603,23 +638,16 @@ static inline Intersection *get_nearest_intersection(std::vector<std::pair<Inter
 
 // Create a line representing the anchor aka hook extrusion based on line_to_offset 
 // translated in the direction of the intersection line (intersection.intersect_line).
-static Line create_offset_line(const Line &line_to_offset, const Intersection &intersection, const double scaled_offset)
+static Line create_offset_line(Line offset_line, const Intersection &intersection, const double scaled_offset)
 {
-    Vec2d        dir            = line_to_offset.vector().cast<double>().normalized();
+    Vec2d        dir            = intersection.closest_line.vector().cast<double>().normalized();
     // 50% overlap of the extrusion lines to achieve strong bonding.
-    Vec2d        offset_vector  = Vec2d(- dir.y(), dir.x()) * scaled_offset;
-    const Point &furthest_point = (intersection.intersect_point == intersection.intersect_line.a ? intersection.intersect_line.b : intersection.intersect_line.a);
-
-    // Move inside.
-    if (offset_vector.dot((furthest_point - intersection.intersect_point).cast<double>()) < 0.)
-        offset_vector *= -1.;
-
-    Line  offset_line    = line_to_offset;
+    Vec2d        offset_vector  = Vec2d(- dir.y(), dir.x()) * (intersection.left ? scaled_offset : - scaled_offset);
     offset_line.translate(offset_vector.x(), offset_vector.y());
     // Extend the line by a small value to guarantee a collision with adjacent lines
     offset_line.extend(coord_t(scaled_offset * 1.16)); // / cos(PI/6)
     return offset_line;
-};
+}
 
 namespace bg  = boost::geometry;
 namespace bgm = boost::geometry::model;
@@ -650,6 +678,8 @@ static void add_hook(const Intersection &intersection, const double scaled_offse
         &hook_start);
     assert(intersection_found);
 
+    std::optional<Line> other_hook = intersection.other_hook();
+
     Vec2d   hook_vector_norm = intersection.closest_line.vector().cast<double>().normalized();
     Vector  hook_vector      = (hook_length * hook_vector_norm).cast<coord_t>();
     Line    hook_forward(hook_start, hook_start + hook_vector);
@@ -658,9 +688,11 @@ static void add_hook(const Intersection &intersection, const double scaled_offse
 
     std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
     rtree.query(bgi::intersects(mk_rtree_seg(hook_forward)) && bgi::satisfies(filter_itself), std::back_inserter(hook_intersections));
+    Point self_intersection_point;
+    bool  self_intersection = other_hook && other_hook->intersection(hook_forward, &self_intersection_point);
 
     Point hook_end;
-    if (hook_intersections.empty()) {
+    if (hook_intersections.empty() && ! self_intersection) {
         // The hook is not limited by another infill line. Extrude it in its full length.
         hook_end = hook_forward.b;
     } else {
@@ -668,7 +700,10 @@ static void add_hook(const Intersection &intersection, const double scaled_offse
         // Find closest intersection of a line segment starting with pt pointing in dir
         // with any of the hook_intersections, returns Euclidian distance.
         // dir is normalized.
-        auto max_hook_length = [hook_length](const Vec2d &pt, const Vec2d &dir, const std::vector<std::pair<rtree_segment_t, size_t>> &hook_intersections) {
+        auto max_hook_length = [hook_length](
+            const Vec2d &pt, const Vec2d &dir,
+            const std::vector<std::pair<rtree_segment_t, size_t>> &hook_intersections,
+            bool self_intersection, const Point &self_intersection_point) {
             // No hook is longer than hook_length, there shouldn't be any intersection closer than that.
             auto max_length = double(hook_length);
             auto update_max_length = [&max_length](double d) {
@@ -690,33 +725,39 @@ static void add_hook(const Intersection &intersection, const double scaled_offse
                 } else
                     update_max_length(cross2(pt2 - pt, dir2) / denom);
             }
+            if (self_intersection) {
+                double t = (self_intersection_point.cast<double>() - pt).norm();
+                max_length = std::min(max_length, t);
+            }
             return max_length;
         };
 
         // There is not enough space for the full hook length, try the opposite direction.
         Vec2d  hook_startf             = hook_start.cast<double>();
-        double hook_forward_max_length = max_hook_length(hook_startf, hook_vector_norm, hook_intersections);
+        double hook_forward_max_length = max_hook_length(hook_startf, hook_vector_norm, hook_intersections, self_intersection, self_intersection_point);
         hook_intersections.clear();
         Line hook_backward(hook_start, hook_start - hook_vector);
         rtree.query(bgi::intersects(mk_rtree_seg(hook_backward)) && bgi::satisfies(filter_itself), std::back_inserter(hook_intersections));
+        self_intersection = other_hook && other_hook->intersection(hook_backward, &self_intersection_point);
 
-        if (hook_intersections.empty()) {
-          // The hook in the other direction is not limited by another infill line. Extrude it in its full length.
+        if (hook_intersections.empty() && ! self_intersection) {
+            // The hook in the other direction is not limited by another infill line. Extrude it in its full length.
             hook_end = hook_backward.b;
         } else {
             // There is not enough space for the full hook in both directions, take the longer one.
-            double hook_backward_max_length = max_hook_length(hook_startf, - hook_vector_norm, hook_intersections);
+            double hook_backward_max_length = max_hook_length(hook_startf, - hook_vector_norm, hook_intersections, self_intersection, self_intersection_point);
             Vec2d hook_dir = (hook_forward_max_length > hook_backward_max_length ? hook_forward_max_length : - hook_backward_max_length) * hook_vector_norm;
             hook_end = hook_start + hook_dir.cast<coord_t>();
         }
     }
 
+    Points &pl = intersection.intersect_pl->points;
     if (intersection.front) {
-        intersection.intersect_pl->points.front() = hook_start;
-        intersection.intersect_pl->points.emplace(intersection.intersect_pl->points.begin(), hook_end);
+        pl.front() = hook_start;
+        pl.emplace(pl.begin(), hook_end);
     } else {
-        intersection.intersect_pl->points.back() = hook_start;
-        intersection.intersect_pl->points.emplace_back(hook_end);
+        pl.back() = hook_start;
+        pl.emplace_back(hook_end);
     }
 }
 
@@ -724,49 +765,146 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 {
     rtree_t rtree;
     size_t  poly_idx = 0;
-    for (const Polyline &poly : lines) {
-        assert(poly.points.size() == 2);
-        rtree.insert(std::make_pair(mk_rtree_seg(poly.points.front(), poly.points.back()), poly_idx++));
+    // Keeping the vector of closest points outside the loop, so the vector does not need to be reallocated.
+    std::vector<std::pair<rtree_segment_t, size_t>> closest;
+    {
+        // Insert infill lines into rtree, merge close collinear segments split by the infill boundary.
+        double r2_close = Slic3r::sqr(1200.);
+        for (Polyline &poly : lines) {
+            assert(poly.points.size() == 2);
+            if (&poly != lines.data()) {
+                // Join collinear segments separated by a tiny gap. These gaps were likely created by clipping the infill lines with a concave dent in an infill boundary.
+                auto collinear_segment = [&rtree, &closest, &lines, r2_close](const Point &pt, const Point &pt_other) -> std::pair<Polyline*, bool> {
+                    closest.clear();
+                    rtree.query(bgi::nearest(mk_rtree_point(pt), 1), std::back_inserter(closest));
+                    Polyline &other = lines[closest.front().second];
+                    double dist2_front = (other.points.front() - pt).cast<double>().squaredNorm();
+                    double dist2_back  = (other.points.back() - pt).cast<double>().squaredNorm();
+                    double dist2_min = std::min(dist2_front, dist2_back);
+                    if (dist2_min < r2_close) {
+                        // Don't connect the segments in an opposite direction.
+                        double dist2_min_other = std::min((other.points.front() - pt_other).cast<double>().squaredNorm(), (other.points.back() - pt_other).cast<double>().squaredNorm());
+                        if (dist2_min_other > dist2_min) {
+                            // End points of the two lines are very close, they should have been merged together if they are collinear.
+                            Vec2d v1 = (pt_other - pt).cast<double>();
+                            Vec2d v2 = (other.points.back() - other.points.front()).cast<double>();
+                            Vec2d v1n = v1.normalized();
+                            Vec2d v2n = v2.normalized();
+                            // The vectors must not be collinear.
+                            double d = v1n.dot(v2n);
+                            if (std::abs(d) > 0.99f) {
+                                // Lines are collinear, merge them.
+                                rtree.remove(closest.front());
+                                return std::make_pair(&other, dist2_min == dist2_front);
+                            }
+                        }
+                    }
+                    return std::make_pair(static_cast<Polyline*>(nullptr), false);
+                };
+                auto collinear_front = collinear_segment(poly.points.front(), poly.points.back());
+                if (collinear_front.first) {
+                    Polyline &other = *collinear_front.first;
+                    poly.points.front() = collinear_front.second ? other.points.back() : other.points.front();
+                    other.points.clear();
+                }
+                auto collinear_back = collinear_segment(poly.points.back(), poly.points.front());
+                if (collinear_back.first) {
+                    Polyline &other = *collinear_front.first;
+                    poly.points.back() = collinear_front.second ? other.points.back() : other.points.front();
+                    other.points.clear();
+                }
+            }
+            rtree.insert(std::make_pair(mk_rtree_seg(poly.points.front(), poly.points.back()), poly_idx++));
+        }
     }
 
     const float scaled_offset = float(scale_(spacing) * 0.7); // 30% overlap
 
     std::vector<Intersection> intersections;
     {
-        // Keeping the vector of closest points outside the loop, so the vector does not need to be reallocated.
-        std::vector<std::pair<rtree_segment_t, size_t>> closest;
         // Minimum lenght of an infill line to anchor. Very short lines cannot be trimmed from both sides,
         // it does not help to anchor extremely short infill lines, it consumes too much plastic while not adding
         // to the object rigidity.
-        const double line_len_threshold = scaled_offset * 4.;
-        // Minimum length of an infill line to be trimmed from both sides.
-        assert(line_len_threshold > scaled_offset * (2. / cos(PI / 6.)) + SCALED_EPSILON);
-        for (size_t line_idx = 0; line_idx < lines.size(); ++line_idx) {
-            Polyline &line = lines[line_idx];
-            // Lines shorter than spacing are skipped because it is needed to shrink a line by the value of spacing.
-            // A shorter line than spacing could produce a degenerate polyline.
-            //FIXME we should rather remove such short infill lines earlier!
-            if (line.length() < line_len_threshold)
+        const double line_len_threshold_drop_both_sides    = scaled_offset * (2. / cos(PI / 6.) + 0.5) + SCALED_EPSILON;
+        const double line_len_threshold_anchor_both_sides  = line_len_threshold_drop_both_sides + scaled_offset;
+        const double line_len_threshold_drop_single_side   = scaled_offset * (1. / cos(PI / 6.) + 1.5) + SCALED_EPSILON;
+        const double line_len_threshold_anchor_single_side = line_len_threshold_drop_single_side + scaled_offset;
+        for (size_t line_idx = 0; line_idx < lines.size(); ++ line_idx) {
+            Polyline    &line        = lines[line_idx];
+            if (line.points.empty())
                 continue;
 
             const Point &front_point = line.points.front();
             const Point &back_point  = line.points.back();
 
-            auto filter_itself = [line_idx](const auto &item) { return item.second != line_idx; };
-
             // Find the nearest line from the start point of the line.
-            closest.clear();
-            rtree.query(bgi::nearest(mk_rtree_point(front_point), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
-            if (((Line) lines[closest.front().second]).distance_to(front_point) <= 1000)
-                // T-joint of line's front point with the 'closest' line.
-                intersections.push_back({ closest.front().second, (Line)lines[closest.front().second], front_point, line_idx, &line, (Line)line, true });
+            std::optional<size_t> tjoint_front, tjoint_back;
+            {
+                auto has_tjoint = [&closest, line_idx, &rtree, &lines](const Point &pt) {
+                    auto filter_itself = [line_idx](const auto &item) { return item.second != line_idx; };
+                    closest.clear();
+                    rtree.query(bgi::nearest(mk_rtree_point(pt), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
+                    const Polyline &pl = lines[closest.front().second];
+                    std::optional<size_t> out;
+                    if (pl.points.empty()) {
+                        // The closest infill line was already dropped as it was too short.
+                        // Such an infill line should not make a T-joint anyways.
+#if 0 // #ifndef NDEBUG
+                        const auto &seg = closest.front().first;
+                        struct Linef { Vec2d a; Vec2d b; };
+                        Linef l { { bg::get<0, 0>(seg), bg::get<0, 1>(seg) }, { bg::get<1, 0>(seg), bg::get<1, 1>(seg) } };
+                        assert(line_alg::distance_to_squared(l, Vec2d(pt.cast<double>())) > 1000 * 1000);
+#endif // NDEBUG
+                    } else if (((Line)pl).distance_to_squared(pt) <= 1000 * 1000)
+                        out = closest.front().second;
+                    return out;
+                };
+                tjoint_front = has_tjoint(front_point);
+                tjoint_back  = has_tjoint(back_point);
+            }
 
-            // Find the nearest line from the end point of the line
-            closest.clear();
-            rtree.query(bgi::nearest(mk_rtree_point(back_point), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
-            if (((Line) lines[closest.front().second]).distance_to(back_point) <= 1000)
-                // T-joint of line's back point with the 'closest' line.
-                intersections.push_back({ closest.front().second, (Line)lines[closest.front().second], back_point, line_idx, &line, (Line)line, false });
+            int num_tjoints = int(tjoint_front.has_value()) + int(tjoint_back.has_value());
+            if (num_tjoints > 0) {
+                double line_len   = line.length();
+                bool   drop       = false;
+                bool   anchor     = false;
+                if (num_tjoints == 1) {
+                    // Connected to perimeters on a single side only, connected to another infill line on the other side.
+                    drop   = line_len < line_len_threshold_drop_single_side;
+                    anchor = line_len > line_len_threshold_anchor_single_side;
+                } else {
+                    // Not connected to perimeters at all, connected to two infill lines.
+                    assert(num_tjoints == 2);                    
+                    drop   = line_len < line_len_threshold_drop_both_sides;
+                    anchor = line_len > line_len_threshold_anchor_both_sides;
+                }
+                if (drop) {
+                    // Drop a very short line if connected to another infill line.
+                    // Lines shorter than spacing are skipped because it is needed to shrink a line by the value of spacing.
+                    // A shorter line than spacing could produce a degenerate polyline.
+                    line.points.clear();
+                } else if (anchor) {
+                    if (tjoint_front) {
+                        // T-joint of line's front point with the 'closest' line.
+                        intersections.push_back({ tjoint_front.value(), (Line)lines[tjoint_front.value()], front_point, line_idx, &line, (Line)line, true  });
+                        intersections.back().update_left_right();
+                    }
+                    if (tjoint_back) {
+                        // T-joint of line's back point with the 'closest' line.
+                        intersections.push_back({ tjoint_back.value(),  (Line)lines[tjoint_back.value()],  back_point,  line_idx, &line, (Line)line, false });                    
+                        intersections.back().update_left_right();
+                    }
+                }
+            }
+        }
+        // Remove those intersections, that point to a dropped line.
+        for (auto it = intersections.begin(); it != intersections.end(); ) {
+            assert(! lines[it->intersect_line_idx].points.empty());
+            if (lines[it->closest_line_idx].points.empty()) {
+                *it = intersections.back();
+                intersections.pop_back();
+            } else
+                ++ it;
         }
     }
 
@@ -781,8 +919,13 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
     }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
+    // Sort lexicographically by closest_line_idx and left/right orientation.
     std::sort(intersections.begin(), intersections.end(),
-              [](const Intersection &i1, const Intersection &i2) { return i1.closest_line_idx < i2.closest_line_idx; });
+      [](const Intersection &i1, const Intersection &i2) {
+            return (i1.closest_line_idx == i2.closest_line_idx) ?
+                int(i1.left) < int(i2.left) :
+                i1.closest_line_idx < i2.closest_line_idx;
+        });
 
     std::vector<size_t> merged_with(lines.size());
     std::iota(merged_with.begin(), merged_with.end(), 0);
@@ -833,7 +976,10 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
         // All the nearest points (T-joints) ending at the same line are projected onto this line. Because of it, it can easily find the nearest point.
         {
             size_t max_idx = min_idx;
-            for (; max_idx < intersections.size() && intersections[min_idx].closest_line_idx == intersections[max_idx].closest_line_idx; ++ max_idx)
+            for (; max_idx < intersections.size() && 
+                    intersections[min_idx].closest_line_idx == intersections[max_idx].closest_line_idx &&
+                    intersections[min_idx].left             == intersections[max_idx].left;
+                    ++ max_idx)
                 intersect_line.emplace_back(&intersections[max_idx], line_dir.dot(intersections[max_idx].intersect_point.cast<double>()));
             min_idx = max_idx;
         }
@@ -873,85 +1019,105 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
             if (first_idx + 1 < intersect_line.size())
                 update_merged_polyline(*intersect_line[first_idx + 1].first);
             Intersection &nearest_i = *get_nearest_intersection(intersect_line, first_idx);
-
+            assert(first_i.closest_line_idx == nearest_i.closest_line_idx);
+            assert(first_i.intersect_line_idx != nearest_i.intersect_line_idx);
+            assert(first_i.intersect_line_idx != first_i.closest_line_idx);
+            assert(nearest_i.intersect_line_idx != first_i.closest_line_idx);
             // A line between two intersections points
             Line offset_line = create_offset_line(Line(first_i.intersect_point, nearest_i.intersect_point), first_i, scaled_offset);
             // Check if both intersections lie on the offset_line and simultaneously get their points of intersecting.
             // These points are used as start and end of the hook
             Point first_i_point, nearest_i_point;
-            if (first_i.intersect_line.intersection(offset_line, &first_i_point) &&
-                nearest_i.intersect_line.intersection(offset_line, &nearest_i_point)) {
-                bool connected = false;
-                if (nearest_i.fresh() && (nearest_i_point - first_i_point).cast<double>().squaredNorm() <= Slic3r::sqr(3. * hook_length)) {
-                    // Both intersections are so close that their polylines can be connected.
-                    // Verify that no other infill line intersects this anchor line.
-                    std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
-                    rtree.query(
-                        bgi::intersects(mk_rtree_seg(first_i_point, nearest_i_point)) &&
-                        bgi::satisfies([&first_i, &nearest_i](const auto &item) { return item.second != first_i.intersect_line_idx && item.second != nearest_i.intersect_line_idx; }),
-                        std::back_inserter(hook_intersections));
-                    if (hook_intersections.empty()) {
+            bool could_connect = false;
+            if (nearest_i.fresh()) {
+                could_connect = first_i.intersect_line.intersection(offset_line, &first_i_point) &&
+                                nearest_i.intersect_line.intersection(offset_line, &nearest_i_point);
+                assert(could_connect);
+            }
+            Points &first_points  = first_i.intersect_pl->points;
+            Points &second_points = nearest_i.intersect_pl->points;
+            could_connect &= (nearest_i_point - first_i_point).cast<double>().squaredNorm() <= Slic3r::sqr(3. * hook_length);
+            if (could_connect) {
+                // Both intersections are so close that their polylines can be connected.
+                // Verify that no other infill line intersects this anchor line.
+                closest.clear();
+                rtree.query(
+                    bgi::intersects(mk_rtree_seg(first_i_point, nearest_i_point)) &&
+                    bgi::satisfies([&first_i, &nearest_i](const auto &item) { return item.second != first_i.intersect_line_idx && item.second != nearest_i.intersect_line_idx; }),
+                    std::back_inserter(closest));
+                could_connect = closest.empty();
+#if 0
+                // Avoid self intersections. Maybe it is better to trim the self intersection after the connection?
+                if (could_connect && first_i.intersect_pl != nearest_i.intersect_pl) {
+                    Line l(first_i_point, nearest_i_point);
+                    could_connect = ! first_i.other_hook_intersects(l) && ! nearest_i.other_hook_intersects(l);
+                }
+#endif
+            }
+            bool connected = false;
+            if (could_connect) {
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                        export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-connecting-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point, nearest_i.intersect_point });
-#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                        // No other infill line intersects this anchor line. Extrude it as a whole.
-                        if (first_i.intersect_pl == nearest_i.intersect_pl) {
-                            // Both intersections are on the same polyline, that means a loop is being closed.
-                            assert(first_i.front != nearest_i.front);
-                            if (! first_i.front)
-                                std::swap(first_i_point, nearest_i_point);
-                            first_i.intersect_pl->points.front() = first_i_point;
-                            first_i.intersect_pl->points.back()  = nearest_i_point;
-                            //FIXME trim the end of a closed loop a bit?
-                            first_i.intersect_pl->points.emplace(first_i.intersect_pl->points.begin(), nearest_i_point);
-                        } else {
-                            // Both intersections are on different polylines
-                            Points &first_points  = first_i.intersect_pl->points;
-                            Points &second_points = nearest_i.intersect_pl->points;
-                            first_points.reserve(first_points.size() + second_points.size());
-                            if (first_i.front)
-                                std::reverse(first_points.begin(), first_points.end());
-                            first_points.back() = first_i_point;
-                            first_points.emplace_back(nearest_i_point);
-                            if (nearest_i.front)
-                                first_points.insert(first_points.end(), second_points.begin() + 1, second_points.end());
-                            else
-                                first_points.insert(first_points.end(), second_points.rbegin() + 1, second_points.rend());
-                            // Keep the polyline at the lower index slot.
-                            if (first_i.intersect_pl < nearest_i.intersect_pl) {
-                                second_points.clear();
-                                merged_with[nearest_i.intersect_pl - lines.data()] = first_i.intersect_pl - lines.data();
-                            } else {
-                                second_points = std::move(first_points);
-                                first_points.clear();
-                                merged_with[first_i.intersect_pl - lines.data()] = nearest_i.intersect_pl - lines.data();
-                            }
-                        }
-                        nearest_i.used = true;
-                        connected = true;
-#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                        export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-connecting-post-%d-%d.svg", iRun, iStep), { first_i.intersect_point, nearest_i.intersect_point });
+                export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-connecting-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point, nearest_i.intersect_point });
 #endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                // No other infill line intersects this anchor line. Extrude it as a whole.
+                if (first_i.intersect_pl == nearest_i.intersect_pl) {
+                    // Both intersections are on the same polyline, that means a loop is being closed.
+                    assert(first_i.front != nearest_i.front);
+                    if (! first_i.front)
+                        std::swap(first_i_point, nearest_i_point);
+                    first_points.front() = first_i_point;
+                    first_points.back()  = nearest_i_point;
+                    //FIXME trim the end of a closed loop a bit?
+                    first_points.emplace(first_points.begin(), nearest_i_point);
+                } else {
+                    // Both intersections are on different polylines
+                    Line  l(first_i_point, nearest_i_point);
+                    Point pt_start, pt_end;
+                    bool  trim_start = first_i  .intersect_pl->points.size() == 3 && first_i  .other_hook_intersects(l, pt_start);
+                    bool  trim_end   = nearest_i.intersect_pl->points.size() == 3 && nearest_i.other_hook_intersects(l, pt_end);
+                    first_points.reserve(first_points.size() + second_points.size());
+                    if (first_i.front)
+                        std::reverse(first_points.begin(), first_points.end());
+                    if (trim_start)
+                        first_points.front() = pt_start;
+                    first_points.back() = first_i_point;
+                    first_points.emplace_back(nearest_i_point);
+                    if (nearest_i.front)
+                        first_points.insert(first_points.end(), second_points.begin() + 1, second_points.end());
+                    else
+                        first_points.insert(first_points.end(), second_points.rbegin() + 1, second_points.rend());
+                    if (trim_end)
+                        first_points.back() = pt_end;
+                    // Keep the polyline at the lower index slot.
+                    if (first_i.intersect_pl < nearest_i.intersect_pl) {
+                        second_points.clear();
+                        merged_with[nearest_i.intersect_pl - lines.data()] = first_i.intersect_pl - lines.data();
+                    } else {
+                        second_points = std::move(first_points);
+                        first_points.clear();
+                        merged_with[first_i.intersect_pl - lines.data()] = nearest_i.intersect_pl - lines.data();
                     }
                 }
-                if (! connected) {
-                    // Try to connect left or right. If not enough space for hook_length, take the longer side.
+                nearest_i.used = true;
+                connected = true;
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                    export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
+                export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-connecting-post-%d-%d.svg", iRun, iStep), { first_i.intersect_point, nearest_i.intersect_point });
 #endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                    add_hook(first_i, scaled_offset, hook_length, rtree);
-#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                    export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
-#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                }
-#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                ++iStep;
-#endif ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                first_i.used = true;
-            } else {
-                // The first & last point should always be found.
-                assert(false);
             }
+            if (! connected) {
+                // Try to connect left or right. If not enough space for hook_length, take the longer side.
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
+#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                add_hook(first_i, scaled_offset, hook_length, rtree);
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+                export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-post-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
+#endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+            }
+#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+            ++ iStep;
+#endif ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
+            first_i.used = true;
         }
     }
 
@@ -962,8 +1128,58 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
     return polylines_out;
 }
 
+//coord_t get_hook_length(const double spacing) { return coord_t(scale_(spacing)) * 2; }
 coord_t get_hook_length(const double spacing) { return coord_t(scale_(spacing)) * 5; }
 
+#ifndef NDEBUG
+bool has_no_collinear_lines(const Polylines &polylines)
+{
+    // Create line end point lookup.
+    struct LineEnd {
+        LineEnd(const Polyline *line, bool start) : line(line), start(start) {}
+        const Polyline *line;
+        // Is it the start or end point?
+        bool            start;
+        const Point&    point() const { return start ? line->points.front() : line->points.back(); }
+        const Point&    other_point() const { return start ? line->points.back() : line->points.front(); }
+        LineEnd         other_end() const { return LineEnd(line, !start); }
+        Vec2d           vec() const { return Vec2d((this->other_point() - this->point()).cast<double>()); }
+        bool operator==(const LineEnd &rhs) const { return this->line == rhs.line && this->start == rhs.start; }
+    };
+    struct LineEndAccessor {
+        const Point* operator()(const LineEnd &pt) const { return &pt.point(); }
+    };
+    typedef ClosestPointInRadiusLookup<LineEnd, LineEndAccessor> ClosestPointLookupType;
+    ClosestPointLookupType closest_end_point_lookup(1001. * sqrt(2.));
+    for (const Polyline& pl : polylines) {
+//        assert(pl.points.size() == 2);
+        auto line_start = LineEnd(&pl, true);
+        auto line_end   = LineEnd(&pl, false);
+
+        auto assert_not_collinear = [&closest_end_point_lookup](const LineEnd &line_start) {
+            std::vector<std::pair<const LineEnd*, double>> hits = closest_end_point_lookup.find_all(line_start.point());
+            for (const std::pair<const LineEnd*, double> &hit : hits)
+                if ((line_start.point() - hit.first->point()).cwiseAbs().maxCoeff() <= 1000) {
+                    // End points of the two lines are very close, they should have been merged together if they are collinear.
+                    Vec2d v1 = line_start.vec();
+                    Vec2d v2 = hit.first->vec();
+                    Vec2d v1n = v1.normalized();
+                    Vec2d v2n = v2.normalized();
+                    // The vectors must not be collinear.
+                    assert(std::abs(v1n.dot(v2n)) < cos(M_PI / 12.));
+                }
+        };
+        assert_not_collinear(line_start);
+        assert_not_collinear(line_end);
+
+        closest_end_point_lookup.insert(line_start);
+        closest_end_point_lookup.insert(line_end);
+    }
+
+    return true;
+}
+#endif
+
 void Filler::_fill_surface_single(
     const FillParams              &params,
     unsigned int                   thickness_layers,
@@ -987,6 +1203,23 @@ void Filler::_fill_surface_single(
             generate_infill_lines_recursive(context, adapt_fill_octree->root_cube, 0, int(adapt_fill_octree->cubes_properties.size()) - 1);
             num_lines += context.output_lines.size() + context.temp_lines.size();
         }
+
+#if 0
+        // Collect the lines, trim them by the expolygon.
+        all_polylines.reserve(num_lines);
+        auto boundary = to_polygons(expolygon);
+        for (auto &context : contexts) {
+            Polylines lines;
+            lines.reserve(context.output_lines.size() + context.temp_lines.size());
+            std::transform(context.output_lines.begin(), context.output_lines.end(), std::back_inserter(lines), [](const Line& l) { return Polyline{ l.a, l.b }; });
+            for (const Line &l : context.temp_lines)
+                if (l.a.x() != std::numeric_limits<coord_t>::max())
+                    lines.push_back({ l.a, l.b });
+            // Crop all polylines
+            append(all_polylines, intersection_pl(std::move(lines), boundary));
+        }
+//        assert(has_no_collinear_lines(all_polylines));        
+#else
         // Collect the lines.
         std::vector<Line> lines;
         lines.reserve(num_lines);
@@ -996,25 +1229,21 @@ void Filler::_fill_surface_single(
                 if (line.a.x() != std::numeric_limits<coord_t>::max())
                     lines.emplace_back(line);
         }
-#if 0
-        // Chain touching line segments, convert lines to polylines.
-        //all_polylines = chain_lines(lines, 300.); // SCALED_EPSILON is 100 and it is not enough
-#else
         // Convert lines to polylines.
         all_polylines.reserve(lines.size());
         std::transform(lines.begin(), lines.end(), std::back_inserter(all_polylines), [](const Line& l) { return Polyline{ l.a, l.b }; });
+        // Crop all polylines
+        all_polylines = intersection_pl(std::move(all_polylines), to_polygons(expolygon));
 #endif
     }
 
-    // Crop all polylines
-    all_polylines = intersection_pl(std::move(all_polylines), to_polygons(expolygon));
-
     // After intersection_pl some polylines with only one line are split into more lines
     for (Polyline &polyline : all_polylines) {
         //FIXME assert that all the points are collinear and in between the start and end point.
         if (polyline.points.size() > 2)
             polyline.points.erase(polyline.points.begin() + 1, polyline.points.end() - 1);
     }
+//    assert(has_no_collinear_lines(all_polylines));
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {
@@ -1024,7 +1253,7 @@ void Filler::_fill_surface_single(
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
     coord_t   hook_length = get_hook_length(this->spacing);
-    Polylines all_polylines_with_hooks = connect_lines_using_hooks(std::move(all_polylines), expolygon, this->spacing, hook_length);
+    Polylines all_polylines_with_hooks = all_polylines.size() > 1 ? connect_lines_using_hooks(std::move(all_polylines), expolygon, this->spacing, hook_length) : std::move(all_polylines);
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {
diff --git a/src/libslic3r/Line.hpp b/src/libslic3r/Line.hpp
index aeb185160..46f1a0442 100644
--- a/src/libslic3r/Line.hpp
+++ b/src/libslic3r/Line.hpp
@@ -24,7 +24,7 @@ namespace line_alg {
 template<class L, class T, int N>
 double distance_to_squared(const L &line, const Vec<N, T> &point)
 {
-    const Vec<N, double>  v  = line.vector().template cast<double>();
+    const Vec<N, double>  v  = (line.b - line.a).template cast<double>();
     const Vec<N, double>  va = (point  - line.a).template cast<double>();
     const double  l2 = v.squaredNorm();  // avoid a sqrt
     if (l2 == 0.0)
diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp
index 1e7ca1656..883933cd7 100644
--- a/src/libslic3r/Point.hpp
+++ b/src/libslic3r/Point.hpp
@@ -298,6 +298,33 @@ public:
             std::make_pair(nullptr, std::numeric_limits<double>::max());
     }
 
+    // Returns all pairs of values and squared distances.
+    std::vector<std::pair<const ValueType*, double>> find_all(const Vec2crd &pt) {
+        // Iterate over 4 closest grid cells around pt,
+        // Round pt to a closest grid_cell corner.
+        Vec2crd      grid_corner((pt(0)+(m_grid_resolution>>1))>>m_grid_log2, (pt(1)+(m_grid_resolution>>1))>>m_grid_log2);
+        // For four neighbors of grid_corner:
+        std::vector<std::pair<const ValueType*, double>> out;
+        const double r2 = double(m_search_radius) * m_search_radius;
+        for (coord_t neighbor_y = -1; neighbor_y < 1; ++ neighbor_y) {
+            for (coord_t neighbor_x = -1; neighbor_x < 1; ++ neighbor_x) {
+                // Range of fragment starts around grid_corner, close to pt.
+                auto range = m_map.equal_range(Vec2crd(grid_corner(0) + neighbor_x, grid_corner(1) + neighbor_y));
+                // Find the map entry closest to pt.
+                for (auto it = range.first; it != range.second; ++it) {
+                    const ValueType &value = it->second;
+                    const Vec2crd *pt2 = m_point_accessor(value);
+                    if (pt2 != nullptr) {
+                        const double d2 = (pt - *pt2).cast<double>().squaredNorm();
+                        if (d2 <= r2)
+                            out.emplace_back(&value, d2);
+                    }
+                }
+            }
+        }
+        return out;
+    }
+
 private:
     typedef typename std::unordered_multimap<Vec2crd, ValueType, PointHash> map_type;
     PointAccessor m_point_accessor;

From decda763446a7f7f44a54476670f03021cf3c48f Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Tue, 10 Nov 2020 15:54:32 +0100
Subject: [PATCH 021/138] AdaptiveInfill: 1) Shortening the anchor lines when
 touching another infill line    to avoid over extrusion. 2) Reduction of the
 Intersection structure complexity by referencing    the source lines.

---
 src/libslic3r/Fill/FillAdaptive.cpp | 158 +++++++++++++++-------------
 src/libslic3r/Point.hpp             |   3 +-
 2 files changed, 84 insertions(+), 77 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 18df5b277..b6750d4f8 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -559,28 +559,41 @@ static void export_infill_lines_to_svg(const ExPolygon &expoly, const Polylines
 // (between one end point of intersect_pl/intersect_line and 
 struct Intersection
 {
-    // Index of the closest line to intersect_line
-    size_t    closest_line_idx;
-    // Copy of closest line to intersect_point, used for storing original line in an unchanged state
-    Line      closest_line;
+    // Closest line to intersect_point.
+    const Line  *closest_line;
 
-    // Point for which is computed closest line (closest_line)
-    Point     intersect_point;
-    // Index of the source infill from which is computed closest_line
-    size_t    intersect_line_idx;
-    // Pointer to the polyline from which is computed closest_line
-    Polyline *intersect_pl;
     // The line for which is computed closest line from intersect_point to closest_line
-    Line      intersect_line;
+    const Line  *intersect_line;
+    // Pointer to the polyline from which is computed closest_line
+    Polyline    *intersect_pl;
+    // Point for which is computed closest line (closest_line)
+    Point        intersect_point;
     // Indicate if intersect_point is the first or the last point of intersect_pl
-    bool      front;
+    bool         front;
     // Signum of intersect_line_dir.cross(closest_line.dir()):
-    bool      left;
+    bool         left;
 
     // Indication if this intersection has been proceed
-    bool      used = false;
+    bool         used = false;
 
-    bool      fresh() const throw() { return ! used && ! intersect_pl->empty(); }
+    bool         fresh() const throw() { return ! used && ! intersect_pl->empty(); }
+
+    Intersection(const Line &closest_line, const Line &intersect_line, Polyline *intersect_pl, const Point &intersect_point, bool front) :
+        closest_line(&closest_line), intersect_line(&intersect_line), intersect_pl(intersect_pl), intersect_point(intersect_point), front(front)
+    {
+        // Calculate side of this intersection line of the closest line.
+        Vec2d v1((this->closest_line->b - this->closest_line->a).cast<double>());
+        Vec2d v2(this->intersect_line_dir());
+#ifndef NDEBUG
+        {
+            Vec2d v1n = v1.normalized();
+            Vec2d v2n = v2.normalized();
+            double c = cross2(v1n, v2n);
+            assert(std::abs(c) > sin(M_PI / 12.));
+        }
+#endif // NDEBUG
+        this->left = cross2(v1, v2) > 0.;
+    }
 
     std::optional<Line> other_hook() const {
         std::optional<Line> out;
@@ -598,21 +611,7 @@ struct Intersection
 
     // Direction to intersect_point.
     Vec2d     intersect_line_dir() const throw() {
-        return (this->intersect_point == intersect_line.a ? intersect_line.b - intersect_line.a : intersect_line.a - intersect_line.b).cast<double>();
-    }
-
-    void      update_left_right() {
-        Vec2d v1((this->closest_line.b - this->closest_line.a).cast<double>());
-        Vec2d v2(this->intersect_line_dir());
-#ifndef NDEBUG
-        {
-            Vec2d v1n = v1.normalized();
-            Vec2d v2n = v2.normalized();
-            double c = cross2(v1n, v2n);
-            assert(std::abs(c) > sin(M_PI / 12.));
-        }
-#endif // NDEBUG
-        this->left = cross2(v1, v2) > 0.;
+        return (this->intersect_point == intersect_line->a ? intersect_line->b - intersect_line->a : intersect_line->a - intersect_line->b).cast<double>();
     }
 };
 
@@ -640,7 +639,7 @@ static inline Intersection* get_nearest_intersection(std::vector<std::pair<Inter
 // translated in the direction of the intersection line (intersection.intersect_line).
 static Line create_offset_line(Line offset_line, const Intersection &intersection, const double scaled_offset)
 {
-    Vec2d        dir            = intersection.closest_line.vector().cast<double>().normalized();
+    Vec2d        dir            = intersection.closest_line->vector().cast<double>().normalized();
     // 50% overlap of the extrusion lines to achieve strong bonding.
     Vec2d        offset_vector  = Vec2d(- dir.y(), dir.x()) * (intersection.left ? scaled_offset : - scaled_offset);
     offset_line.translate(offset_vector.x(), offset_vector.y());
@@ -669,22 +668,22 @@ static inline rtree_segment_t mk_rtree_seg(const Line &l) {
 }
 
 // Create a hook based on hook_line and append it to the begin or end of the polyline in the intersection
-static void add_hook(const Intersection &intersection, const double scaled_offset, const int hook_length, const rtree_t &rtree)
+static void add_hook(const Intersection &intersection, const double scaled_offset, const int hook_length, const rtree_t &rtree, const Lines &lines_src)
 {
     // Trim the hook start by the infill line it will connect to.
     Point hook_start;
-    bool  intersection_found = intersection.intersect_line.intersection(
-        create_offset_line(intersection.closest_line, intersection, scaled_offset),
+    bool  intersection_found = intersection.intersect_line->intersection(
+        create_offset_line(*intersection.closest_line, intersection, scaled_offset),
         &hook_start);
     assert(intersection_found);
 
     std::optional<Line> other_hook = intersection.other_hook();
 
-    Vec2d   hook_vector_norm = intersection.closest_line.vector().cast<double>().normalized();
+    Vec2d   hook_vector_norm = intersection.closest_line->vector().cast<double>().normalized();
     Vector  hook_vector      = (hook_length * hook_vector_norm).cast<coord_t>();
     Line    hook_forward(hook_start, hook_start + hook_vector);
 
-    auto filter_itself = [&intersection](const auto &item) { return item.second != intersection.intersect_line_idx; };
+    auto filter_itself = [&intersection, &lines_src](const auto &item) { return item.second != intersection.intersect_line - lines_src.data(); };
 
     std::vector<std::pair<rtree_segment_t, size_t>> hook_intersections;
     rtree.query(bgi::intersects(mk_rtree_seg(hook_forward)) && bgi::satisfies(filter_itself), std::back_inserter(hook_intersections));
@@ -700,33 +699,38 @@ static void add_hook(const Intersection &intersection, const double scaled_offse
         // Find closest intersection of a line segment starting with pt pointing in dir
         // with any of the hook_intersections, returns Euclidian distance.
         // dir is normalized.
-        auto max_hook_length = [hook_length](
+        auto max_hook_length = [hook_length, scaled_offset, &lines_src](
             const Vec2d &pt, const Vec2d &dir,
             const std::vector<std::pair<rtree_segment_t, size_t>> &hook_intersections,
-            bool self_intersection, const Point &self_intersection_point) {
+            bool self_intersection, const std::optional<Line> &self_intersection_line, const Point &self_intersection_point) {
             // No hook is longer than hook_length, there shouldn't be any intersection closer than that.
             auto max_length = double(hook_length);
             auto update_max_length = [&max_length](double d) {
-                if (d > 0. && d < max_length)
-                    max_length = d;
+                if (d < max_length)
+                    max_length = std::max(0., d);
             };
+            // Shift the trimming point away from the colliding thick line.
+            auto shift_from_thick_line = [&dir, scaled_offset](const Vec2d& dir2) -> Vec2d {
+                Vec2d perp = Vec2d(-dir2.y(), dir2.x()).normalized();
+                double shift = perp.dot(dir) > 0. ? -scaled_offset : scaled_offset;
+                return perp * (0.5 * shift);
+            };
+
             for (const auto &hook_intersection : hook_intersections) {
                 const rtree_segment_t &segment = hook_intersection.first;
-                // Segment start and end points.
+                // Segment start and end points, segment vector.
                 Vec2d pt2(bg::get<0, 0>(segment), bg::get<0, 1>(segment));
-                Vec2d pt2b(bg::get<1, 0>(segment), bg::get<1, 1>(segment));
-                // Segment vector.
-                Vec2d dir2 = pt2b - pt2;
+                Vec2d dir2 = Vec2d(bg::get<1, 0>(segment), bg::get<1, 1>(segment)) - pt2;
                 // Find intersection of (pt, dir) with (pt2, dir2), where dir is normalized.
                 double denom = cross2(dir, dir2);
-                if (std::abs(denom) < EPSILON) {
-                    update_max_length((pt2 - pt).dot(dir));
-                    update_max_length((pt2b - pt).dot(dir));
-                } else
-                    update_max_length(cross2(pt2 - pt, dir2) / denom);
+                assert(std::abs(denom) > EPSILON);
+                if (hook_intersection.second < lines_src.size())
+                    // Trimming by another infill line. Reduce overlap.
+                    pt2 += shift_from_thick_line(dir2);
+                update_max_length(cross2(pt2 - pt, dir2) / denom);
             }
             if (self_intersection) {
-                double t = (self_intersection_point.cast<double>() - pt).norm();
+                double t = (self_intersection_point.cast<double>() + shift_from_thick_line(self_intersection_line.value().vector().cast<double>()) - pt).norm();
                 max_length = std::min(max_length, t);
             }
             return max_length;
@@ -734,7 +738,7 @@ static void add_hook(const Intersection &intersection, const double scaled_offse
 
         // There is not enough space for the full hook length, try the opposite direction.
         Vec2d  hook_startf             = hook_start.cast<double>();
-        double hook_forward_max_length = max_hook_length(hook_startf, hook_vector_norm, hook_intersections, self_intersection, self_intersection_point);
+        double hook_forward_max_length = max_hook_length(hook_startf, hook_vector_norm, hook_intersections, self_intersection, other_hook, self_intersection_point);
         hook_intersections.clear();
         Line hook_backward(hook_start, hook_start - hook_vector);
         rtree.query(bgi::intersects(mk_rtree_seg(hook_backward)) && bgi::satisfies(filter_itself), std::back_inserter(hook_intersections));
@@ -745,7 +749,7 @@ static void add_hook(const Intersection &intersection, const double scaled_offse
             hook_end = hook_backward.b;
         } else {
             // There is not enough space for the full hook in both directions, take the longer one.
-            double hook_backward_max_length = max_hook_length(hook_startf, - hook_vector_norm, hook_intersections, self_intersection, self_intersection_point);
+            double hook_backward_max_length = max_hook_length(hook_startf, - hook_vector_norm, hook_intersections, self_intersection, other_hook, self_intersection_point);
             Vec2d hook_dir = (hook_forward_max_length > hook_backward_max_length ? hook_forward_max_length : - hook_backward_max_length) * hook_vector_norm;
             hook_end = hook_start + hook_dir.cast<coord_t>();
         }
@@ -765,6 +769,11 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 {
     rtree_t rtree;
     size_t  poly_idx = 0;
+
+    Lines lines_src;
+    lines_src.reserve(lines.size());
+    std::transform(lines.begin(), lines.end(), std::back_inserter(lines_src), [](const Line& l) { return Polyline{ l.a, l.b }; });
+
     // Keeping the vector of closest points outside the loop, so the vector does not need to be reallocated.
     std::vector<std::pair<rtree_segment_t, size_t>> closest;
     {
@@ -884,23 +893,19 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                     // A shorter line than spacing could produce a degenerate polyline.
                     line.points.clear();
                 } else if (anchor) {
-                    if (tjoint_front) {
+                    if (tjoint_front)
                         // T-joint of line's front point with the 'closest' line.
-                        intersections.push_back({ tjoint_front.value(), (Line)lines[tjoint_front.value()], front_point, line_idx, &line, (Line)line, true  });
-                        intersections.back().update_left_right();
-                    }
-                    if (tjoint_back) {
+                        intersections.emplace_back(lines_src[tjoint_front.value()], lines_src[line_idx], &line, front_point, true);
+                    if (tjoint_back)
                         // T-joint of line's back point with the 'closest' line.
-                        intersections.push_back({ tjoint_back.value(),  (Line)lines[tjoint_back.value()],  back_point,  line_idx, &line, (Line)line, false });                    
-                        intersections.back().update_left_right();
-                    }
+                        intersections.emplace_back(lines_src[tjoint_back.value()],  lines_src[line_idx], &line, back_point,  false);
                 }
             }
         }
         // Remove those intersections, that point to a dropped line.
         for (auto it = intersections.begin(); it != intersections.end(); ) {
-            assert(! lines[it->intersect_line_idx].points.empty());
-            if (lines[it->closest_line_idx].points.empty()) {
+            assert(! lines[it->intersect_line - lines_src.data()].points.empty());
+            if (lines[it->closest_line - lines_src.data()].points.empty()) {
                 *it = intersections.back();
                 intersections.pop_back();
             } else
@@ -922,9 +927,9 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
     // Sort lexicographically by closest_line_idx and left/right orientation.
     std::sort(intersections.begin(), intersections.end(),
       [](const Intersection &i1, const Intersection &i2) {
-            return (i1.closest_line_idx == i2.closest_line_idx) ?
+            return (i1.closest_line == i2.closest_line) ?
                 int(i1.left) < int(i2.left) :
-                i1.closest_line_idx < i2.closest_line_idx;
+                i1.closest_line < i2.closest_line;
         });
 
     std::vector<size_t> merged_with(lines.size());
@@ -971,14 +976,14 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
     // Keep intersect_line outside the loop, so it does not get reallocated.
     std::vector<std::pair<Intersection*, double>> intersect_line;
     for (size_t min_idx = 0; min_idx < intersections.size();) {
-        const Vec2d line_dir = intersections[min_idx].closest_line.vector().cast<double>();
+        const Vec2d line_dir = intersections[min_idx].closest_line->vector().cast<double>();
         intersect_line.clear();
         // All the nearest points (T-joints) ending at the same line are projected onto this line. Because of it, it can easily find the nearest point.
         {
             size_t max_idx = min_idx;
             for (; max_idx < intersections.size() && 
-                    intersections[min_idx].closest_line_idx == intersections[max_idx].closest_line_idx &&
-                    intersections[min_idx].left             == intersections[max_idx].left;
+                    intersections[min_idx].closest_line == intersections[max_idx].closest_line &&
+                    intersections[min_idx].left         == intersections[max_idx].left;
                     ++ max_idx)
                 intersect_line.emplace_back(&intersections[max_idx], line_dir.dot(intersections[max_idx].intersect_point.cast<double>()));
             min_idx = max_idx;
@@ -992,7 +997,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook0-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
 #endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                add_hook(first_i, scaled_offset, hook_length, rtree);
+                add_hook(first_i, scaled_offset, hook_length, rtree, lines_src);
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook0-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
                 ++ iStep;
@@ -1019,10 +1024,10 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
             if (first_idx + 1 < intersect_line.size())
                 update_merged_polyline(*intersect_line[first_idx + 1].first);
             Intersection &nearest_i = *get_nearest_intersection(intersect_line, first_idx);
-            assert(first_i.closest_line_idx == nearest_i.closest_line_idx);
-            assert(first_i.intersect_line_idx != nearest_i.intersect_line_idx);
-            assert(first_i.intersect_line_idx != first_i.closest_line_idx);
-            assert(nearest_i.intersect_line_idx != first_i.closest_line_idx);
+            assert(first_i.closest_line == nearest_i.closest_line);
+            assert(first_i.intersect_line != nearest_i.intersect_line);
+            assert(first_i.intersect_line != first_i.closest_line);
+            assert(nearest_i.intersect_line != first_i.closest_line);
             // A line between two intersections points
             Line offset_line = create_offset_line(Line(first_i.intersect_point, nearest_i.intersect_point), first_i, scaled_offset);
             // Check if both intersections lie on the offset_line and simultaneously get their points of intersecting.
@@ -1030,8 +1035,8 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
             Point first_i_point, nearest_i_point;
             bool could_connect = false;
             if (nearest_i.fresh()) {
-                could_connect = first_i.intersect_line.intersection(offset_line, &first_i_point) &&
-                                nearest_i.intersect_line.intersection(offset_line, &nearest_i_point);
+                could_connect = first_i.intersect_line->intersection(offset_line, &first_i_point) &&
+                                nearest_i.intersect_line->intersection(offset_line, &nearest_i_point);
                 assert(could_connect);
             }
             Points &first_points  = first_i.intersect_pl->points;
@@ -1043,7 +1048,8 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                 closest.clear();
                 rtree.query(
                     bgi::intersects(mk_rtree_seg(first_i_point, nearest_i_point)) &&
-                    bgi::satisfies([&first_i, &nearest_i](const auto &item) { return item.second != first_i.intersect_line_idx && item.second != nearest_i.intersect_line_idx; }),
+                    bgi::satisfies([&first_i, &nearest_i, &lines_src](const auto &item) 
+                        { return item.second != first_i.intersect_line - lines_src.data() && item.second != nearest_i.intersect_line - lines_src.data(); }),
                     std::back_inserter(closest));
                 could_connect = closest.empty();
 #if 0
@@ -1109,7 +1115,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
 #endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                add_hook(first_i, scaled_offset, hook_length, rtree);
+                add_hook(first_i, scaled_offset, hook_length, rtree, lines_src);
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-post-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
 #endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp
index 883933cd7..dac4d5877 100644
--- a/src/libslic3r/Point.hpp
+++ b/src/libslic3r/Point.hpp
@@ -55,7 +55,8 @@ typedef Eigen::Transform<double, 3, Eigen::Affine, Eigen::DontAlign> Transform3d
 
 inline bool operator<(const Vec2d &lhs, const Vec2d &rhs) { return lhs(0) < rhs(0) || (lhs(0) == rhs(0) && lhs(1) < rhs(1)); }
 
-inline int32_t cross2(const Vec2i32 &v1, const Vec2i32 &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
+// One likely does not want to perform the cross product with a 32bit accumulator.
+//inline int32_t cross2(const Vec2i32 &v1, const Vec2i32 &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
 inline int64_t cross2(const Vec2i64 &v1, const Vec2i64 &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
 inline float   cross2(const Vec2f   &v1, const Vec2f   &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
 inline double  cross2(const Vec2d   &v1, const Vec2d   &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }

From 26836db6296d7d5756b4ff99a53e744668d6c0a0 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Wed, 11 Nov 2020 11:51:26 +0100
Subject: [PATCH 022/138] FillAdaptive: Handling of a special case when the
 infill lines touch at their ends.

---
 src/libslic3r/Fill/FillAdaptive.cpp | 112 +++++++++++++++++++++-------
 1 file changed, 86 insertions(+), 26 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index b6750d4f8..94b9a2b74 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -776,27 +776,30 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 
     // Keeping the vector of closest points outside the loop, so the vector does not need to be reallocated.
     std::vector<std::pair<rtree_segment_t, size_t>> closest;
+    // Pairs of lines touching at one end point. The pair is sorted to make the end point connection test symmetric.
+    std::vector<std::pair<const Polyline*, const Polyline*>> lines_touching_at_endpoints;
     {
-        // Insert infill lines into rtree, merge close collinear segments split by the infill boundary.
+        // Insert infill lines into rtree, merge close collinear segments split by the infill boundary,
+        // collect lines_touching_at_endpoints.
         double r2_close = Slic3r::sqr(1200.);
         for (Polyline &poly : lines) {
             assert(poly.points.size() == 2);
             if (&poly != lines.data()) {
                 // Join collinear segments separated by a tiny gap. These gaps were likely created by clipping the infill lines with a concave dent in an infill boundary.
-                auto collinear_segment = [&rtree, &closest, &lines, r2_close](const Point &pt, const Point &pt_other) -> std::pair<Polyline*, bool> {
+                auto collinear_segment = [&rtree, &closest, &lines, &lines_touching_at_endpoints, r2_close](const Point& pt, const Point& pt_other, const Polyline* polyline) -> std::pair<Polyline*, bool> {
                     closest.clear();
                     rtree.query(bgi::nearest(mk_rtree_point(pt), 1), std::back_inserter(closest));
-                    Polyline &other = lines[closest.front().second];
-                    double dist2_front = (other.points.front() - pt).cast<double>().squaredNorm();
-                    double dist2_back  = (other.points.back() - pt).cast<double>().squaredNorm();
-                    double dist2_min = std::min(dist2_front, dist2_back);
+                    const Polyline *other = &lines[closest.front().second];
+                    double dist2_front = (other->points.front() - pt).cast<double>().squaredNorm();
+                    double dist2_back  = (other->points.back() - pt).cast<double>().squaredNorm();
+                    double dist2_min   = std::min(dist2_front, dist2_back);
                     if (dist2_min < r2_close) {
                         // Don't connect the segments in an opposite direction.
-                        double dist2_min_other = std::min((other.points.front() - pt_other).cast<double>().squaredNorm(), (other.points.back() - pt_other).cast<double>().squaredNorm());
+                        double dist2_min_other = std::min((other->points.front() - pt_other).cast<double>().squaredNorm(), (other->points.back() - pt_other).cast<double>().squaredNorm());
                         if (dist2_min_other > dist2_min) {
                             // End points of the two lines are very close, they should have been merged together if they are collinear.
                             Vec2d v1 = (pt_other - pt).cast<double>();
-                            Vec2d v2 = (other.points.back() - other.points.front()).cast<double>();
+                            Vec2d v2 = (other->points.back() - other->points.front()).cast<double>();
                             Vec2d v1n = v1.normalized();
                             Vec2d v2n = v2.normalized();
                             // The vectors must not be collinear.
@@ -804,19 +807,23 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                             if (std::abs(d) > 0.99f) {
                                 // Lines are collinear, merge them.
                                 rtree.remove(closest.front());
-                                return std::make_pair(&other, dist2_min == dist2_front);
+                                return std::make_pair(const_cast<Polyline*>(other), dist2_min == dist2_front);
+                            } else {
+                                if (polyline > other)
+                                    std::swap(polyline, other);
+                                lines_touching_at_endpoints.emplace_back(polyline, other);
                             }
                         }
                     }
                     return std::make_pair(static_cast<Polyline*>(nullptr), false);
                 };
-                auto collinear_front = collinear_segment(poly.points.front(), poly.points.back());
+                auto collinear_front = collinear_segment(poly.points.front(), poly.points.back(), &poly);
                 if (collinear_front.first) {
                     Polyline &other = *collinear_front.first;
                     poly.points.front() = collinear_front.second ? other.points.back() : other.points.front();
                     other.points.clear();
                 }
-                auto collinear_back = collinear_segment(poly.points.back(), poly.points.front());
+                auto collinear_back = collinear_segment(poly.points.back(), poly.points.front(), &poly);
                 if (collinear_back.first) {
                     Polyline &other = *collinear_front.first;
                     poly.points.back() = collinear_front.second ? other.points.back() : other.points.front();
@@ -827,6 +834,8 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
         }
     }
 
+    sort_remove_duplicates(lines_touching_at_endpoints);
+
     const float scaled_offset = float(scale_(spacing) * 0.7); // 30% overlap
 
     std::vector<Intersection> intersections;
@@ -868,8 +877,22 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                         out = closest.front().second;
                     return out;
                 };
-                tjoint_front = has_tjoint(front_point);
-                tjoint_back  = has_tjoint(back_point);
+                // Refuse to create a T-joint if the infill lines touch at their ends.
+                auto filter_end_point_connections = [&lines_touching_at_endpoints, &lines, &line](std::optional<size_t> in) {
+                    std::optional<size_t> out;
+                    if (in) {
+                        const Polyline *lo = &line;
+                        const Polyline *hi = &lines[in.value()];
+                        if (lo > hi)
+                            std::swap(lo, hi);
+                        if (! std::binary_search(lines_touching_at_endpoints.begin(), lines_touching_at_endpoints.end(), std::make_pair(lo, hi)))
+                            // Not an end-point connection, it is a valid T-joint.
+                            out = in;
+                    }
+                    return out;
+                };
+                tjoint_front = filter_end_point_connections(has_tjoint(front_point));
+                tjoint_back  = filter_end_point_connections(has_tjoint(back_point));
             }
 
             int num_tjoints = int(tjoint_front.has_value()) + int(tjoint_back.has_value());
@@ -951,35 +974,72 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
         }
     }
 
-    auto update_merged_polyline = [&lines, &merged_with](Intersection &intersection) {
+    auto update_merged_polyline_idx = [&merged_with](size_t pl_idx) {
         // Update the polyline index to index which is merged
-        size_t intersect_pl_idx = intersection.intersect_pl - lines.data();
-        for (size_t last = intersect_pl_idx;;) {
+        for (size_t last = pl_idx;;) {
             size_t lower = merged_with[last];
             if (lower == last) {
-                merged_with[intersect_pl_idx] = lower;
-                intersect_pl_idx              = lower;
-                break;
+                merged_with[pl_idx] = lower;
+                return lower;
             }
             last = lower;
         }
-
+        assert(false);
+        return size_t(0);
+    };
+    auto update_merged_polyline = [&lines, update_merged_polyline_idx](Intersection& intersection) {
+        // Update the polyline index to index which is merged
+        size_t intersect_pl_idx = update_merged_polyline_idx(intersection.intersect_pl - lines.data());
         intersection.intersect_pl = &lines[intersect_pl_idx];
         // After polylines are merged, it is necessary to update "forward" based on if intersect_point is the first or the last point of intersect_pl.
         if (intersection.fresh()) {
             assert(intersection.intersect_pl->points.front() == intersection.intersect_point ||
-                   intersection.intersect_pl->points.back()  == intersection.intersect_point);
+                   intersection.intersect_pl->points.back() == intersection.intersect_point);
             intersection.front = intersection.intersect_pl->points.front() == intersection.intersect_point;
         }
     };
 
+    // Merge polylines touching at their ends. This should be a very rare case, but it happens surprisingly often.
+    for (auto it = lines_touching_at_endpoints.rbegin(); it != lines_touching_at_endpoints.rend(); ++ it) {
+        Polyline *pl1 = const_cast<Polyline*>(it->first);
+        Polyline *pl2 = const_cast<Polyline*>(it->second);
+        assert(pl1 < pl2);
+        // pl1 was visited for the 1st time.
+        // pl2 may have alread been merged with another polyline, even with this one.
+        pl2 = &lines[update_merged_polyline_idx(pl2 - lines.data())];
+        assert(pl1 <= pl2);
+        // Avoid closing a loop.
+        if (pl1 != pl2) {
+            // Merge the polylines.
+            assert(pl1 < pl2);
+            assert(pl1->points.size() >= 2);
+            assert(pl2->points.size() >= 2);
+            double d11 = (pl1->points.front() - pl2->points.front()).cast<double>().squaredNorm();
+            double d12 = (pl1->points.front() - pl2->points.back()) .cast<double>().squaredNorm();
+            double d21 = (pl1->points.back()  - pl2->points.front()).cast<double>().squaredNorm();
+            double d22 = (pl1->points.back()  - pl2->points.back()) .cast<double>().squaredNorm();
+            double d1min = std::min(d11, d12);
+            double d2min = std::min(d21, d22);
+            if (d1min < d2min) {
+                pl1->reverse();
+                if (d12 == d1min)
+                    pl2->reverse();
+            } else if (d22 == d2min)
+                pl2->reverse();
+            pl1->points.back() = (pl1->points.back() + pl2->points.front()) / 2;
+            pl1->append(pl2->points.begin() + 1, pl2->points.end());
+            pl2->points.clear();
+            merged_with[pl2 - lines.data()] = pl1 - lines.data();
+        }
+    }
+
     // Keep intersect_line outside the loop, so it does not get reallocated.
     std::vector<std::pair<Intersection*, double>> intersect_line;
     for (size_t min_idx = 0; min_idx < intersections.size();) {
-        const Vec2d line_dir = intersections[min_idx].closest_line->vector().cast<double>();
         intersect_line.clear();
         // All the nearest points (T-joints) ending at the same line are projected onto this line. Because of it, it can easily find the nearest point.
         {
+            const Vec2d line_dir = intersections[min_idx].closest_line->vector().cast<double>();
             size_t max_idx = min_idx;
             for (; max_idx < intersections.size() && 
                     intersections[min_idx].closest_line == intersections[max_idx].closest_line &&
@@ -987,7 +1047,11 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                     ++ max_idx)
                 intersect_line.emplace_back(&intersections[max_idx], line_dir.dot(intersections[max_idx].intersect_point.cast<double>()));
             min_idx = max_idx;
+            assert(intersect_line.size() > 0);
+            // Sort the intersections along line_dir.
+            std::sort(intersect_line.begin(), intersect_line.end(), [](const auto &i1, const auto &i2) { return i1.second < i2.second; });
         }
+
         if (intersect_line.size() == 1) {
             // Simple case: The current intersection is the only one touching its adjacent line.
             Intersection &first_i = *intersect_line.front().first;
@@ -1007,10 +1071,6 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
             continue;
         }
 
-        assert(intersect_line.size() > 1);
-        // Sort the intersections along line_dir.
-        std::sort(intersect_line.begin(), intersect_line.end(), [](const auto &i1, const auto &i2) { return i1.second < i2.second; });
-
         for (size_t first_idx = 0; first_idx < intersect_line.size(); ++ first_idx) {
             Intersection &first_i = *intersect_line[first_idx].first;
             update_merged_polyline(first_i);

From 4d102ac8caf5e5c47849c0b723f88ba027af0fce Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Wed, 11 Nov 2020 16:49:11 +0100
Subject: [PATCH 023/138] FillAdaptive: 1) More accurate trimming of an anchor
 with another infill line    or by another anchor line. 2) Trimming of very
 short infill lines, which are not anchored,    by another infill lines.

---
 src/libslic3r/Fill/FillAdaptive.cpp | 145 ++++++++++++++--------------
 src/libslic3r/Line.hpp              |   3 +-
 src/libslic3r/Point.hpp             |  16 ++-
 3 files changed, 83 insertions(+), 81 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 94b9a2b74..c96e4e023 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -639,10 +639,8 @@ static inline Intersection* get_nearest_intersection(std::vector<std::pair<Inter
 // translated in the direction of the intersection line (intersection.intersect_line).
 static Line create_offset_line(Line offset_line, const Intersection &intersection, const double scaled_offset)
 {
-    Vec2d        dir            = intersection.closest_line->vector().cast<double>().normalized();
     // 50% overlap of the extrusion lines to achieve strong bonding.
-    Vec2d        offset_vector  = Vec2d(- dir.y(), dir.x()) * (intersection.left ? scaled_offset : - scaled_offset);
-    offset_line.translate(offset_vector.x(), offset_vector.y());
+    offset_line.translate((perp(intersection.closest_line->vector().cast<double>().normalized()) * (intersection.left ? scaled_offset : - scaled_offset)).cast<coord_t>());
     // Extend the line by a small value to guarantee a collision with adjacent lines
     offset_line.extend(coord_t(scaled_offset * 1.16)); // / cos(PI/6)
     return offset_line;
@@ -668,7 +666,10 @@ static inline rtree_segment_t mk_rtree_seg(const Line &l) {
 }
 
 // Create a hook based on hook_line and append it to the begin or end of the polyline in the intersection
-static void add_hook(const Intersection &intersection, const double scaled_offset, const int hook_length, const rtree_t &rtree, const Lines &lines_src)
+static void add_hook(
+    const Intersection &intersection, const double scaled_offset, 
+    const int hook_length, double scaled_trim_distance, 
+    const rtree_t &rtree, const Lines &lines_src)
 {
     // Trim the hook start by the infill line it will connect to.
     Point hook_start;
@@ -680,7 +681,9 @@ static void add_hook(const Intersection &intersection, const double scaled_offse
     std::optional<Line> other_hook = intersection.other_hook();
 
     Vec2d   hook_vector_norm = intersection.closest_line->vector().cast<double>().normalized();
-    Vector  hook_vector      = (hook_length * hook_vector_norm).cast<coord_t>();
+    // hook_vector is extended by the thickness of the infill line, so that a collision is found against
+    // the infill centerline to be later trimmed by the thickened line.
+    Vector  hook_vector      = ((hook_length + 1.16 * scaled_trim_distance) * hook_vector_norm).cast<coord_t>();
     Line    hook_forward(hook_start, hook_start + hook_vector);
 
     auto filter_itself = [&intersection, &lines_src](const auto &item) { return item.second != intersection.intersect_line - lines_src.data(); };
@@ -690,71 +693,61 @@ static void add_hook(const Intersection &intersection, const double scaled_offse
     Point self_intersection_point;
     bool  self_intersection = other_hook && other_hook->intersection(hook_forward, &self_intersection_point);
 
-    Point hook_end;
-    if (hook_intersections.empty() && ! self_intersection) {
-        // The hook is not limited by another infill line. Extrude it in its full length.
-        hook_end = hook_forward.b;
-    } else {
-
-        // Find closest intersection of a line segment starting with pt pointing in dir
-        // with any of the hook_intersections, returns Euclidian distance.
-        // dir is normalized.
-        auto max_hook_length = [hook_length, scaled_offset, &lines_src](
-            const Vec2d &pt, const Vec2d &dir,
-            const std::vector<std::pair<rtree_segment_t, size_t>> &hook_intersections,
-            bool self_intersection, const std::optional<Line> &self_intersection_line, const Point &self_intersection_point) {
-            // No hook is longer than hook_length, there shouldn't be any intersection closer than that.
-            auto max_length = double(hook_length);
-            auto update_max_length = [&max_length](double d) {
-                if (d < max_length)
-                    max_length = std::max(0., d);
-            };
-            // Shift the trimming point away from the colliding thick line.
-            auto shift_from_thick_line = [&dir, scaled_offset](const Vec2d& dir2) -> Vec2d {
-                Vec2d perp = Vec2d(-dir2.y(), dir2.x()).normalized();
-                double shift = perp.dot(dir) > 0. ? -scaled_offset : scaled_offset;
-                return perp * (0.5 * shift);
-            };
-
-            for (const auto &hook_intersection : hook_intersections) {
-                const rtree_segment_t &segment = hook_intersection.first;
-                // Segment start and end points, segment vector.
-                Vec2d pt2(bg::get<0, 0>(segment), bg::get<0, 1>(segment));
-                Vec2d dir2 = Vec2d(bg::get<1, 0>(segment), bg::get<1, 1>(segment)) - pt2;
-                // Find intersection of (pt, dir) with (pt2, dir2), where dir is normalized.
-                double denom = cross2(dir, dir2);
-                assert(std::abs(denom) > EPSILON);
-                if (hook_intersection.second < lines_src.size())
-                    // Trimming by another infill line. Reduce overlap.
-                    pt2 += shift_from_thick_line(dir2);
-                update_max_length(cross2(pt2 - pt, dir2) / denom);
-            }
-            if (self_intersection) {
-                double t = (self_intersection_point.cast<double>() + shift_from_thick_line(self_intersection_line.value().vector().cast<double>()) - pt).norm();
-                max_length = std::min(max_length, t);
-            }
-            return max_length;
+    // Find closest intersection of a line segment starting with pt pointing in dir
+    // with any of the hook_intersections, returns Euclidian distance.
+    // dir is normalized.
+    auto max_hook_length = [hook_length, scaled_trim_distance, &lines_src](
+        const Vec2d &pt, const Vec2d &dir,
+        const std::vector<std::pair<rtree_segment_t, size_t>> &hook_intersections,
+        bool self_intersection, const std::optional<Line> &self_intersection_line, const Point &self_intersection_point) {
+        // No hook is longer than hook_length, there shouldn't be any intersection closer than that.
+        auto max_length = double(hook_length);
+        auto update_max_length = [&max_length](double d) {
+            if (d < max_length)
+                max_length = d;
+        };
+        // Shift the trimming point away from the colliding thick line.
+        auto shift_from_thick_line = [&dir, scaled_trim_distance](const Vec2d& dir2) {
+            return scaled_trim_distance * std::abs(cross2(dir, dir2.normalized()));
         };
 
-        // There is not enough space for the full hook length, try the opposite direction.
-        Vec2d  hook_startf             = hook_start.cast<double>();
-        double hook_forward_max_length = max_hook_length(hook_startf, hook_vector_norm, hook_intersections, self_intersection, other_hook, self_intersection_point);
+        for (const auto &hook_intersection : hook_intersections) {
+            const rtree_segment_t &segment = hook_intersection.first;
+            // Segment start and end points, segment vector.
+            Vec2d pt2(bg::get<0, 0>(segment), bg::get<0, 1>(segment));
+            Vec2d dir2 = Vec2d(bg::get<1, 0>(segment), bg::get<1, 1>(segment)) - pt2;
+            // Find intersection of (pt, dir) with (pt2, dir2), where dir is normalized.
+            double denom = cross2(dir, dir2);
+            assert(std::abs(denom) > EPSILON);
+            double t = cross2(pt2 - pt, dir2) / denom;
+            if (hook_intersection.second < lines_src.size())
+                // Trimming by another infill line. Reduce overlap.
+                t -= shift_from_thick_line(dir2);
+            update_max_length(t);
+        }
+        if (self_intersection) {
+            double t = (self_intersection_point.cast<double>() - pt).dot(dir) - shift_from_thick_line(self_intersection_line.value().vector().cast<double>());
+            max_length = std::min(max_length, t);
+        }
+        return std::max(0., max_length);
+    };
+
+    Vec2d  hook_startf              = hook_start.cast<double>();
+    double hook_forward_max_length  = max_hook_length(hook_startf, hook_vector_norm, hook_intersections, self_intersection, other_hook, self_intersection_point);
+    double hook_backward_max_length = 0.;
+    if (hook_forward_max_length < hook_length - SCALED_EPSILON) {
+        // Try the other side.
         hook_intersections.clear();
         Line hook_backward(hook_start, hook_start - hook_vector);
         rtree.query(bgi::intersects(mk_rtree_seg(hook_backward)) && bgi::satisfies(filter_itself), std::back_inserter(hook_intersections));
         self_intersection = other_hook && other_hook->intersection(hook_backward, &self_intersection_point);
-
-        if (hook_intersections.empty() && ! self_intersection) {
-            // The hook in the other direction is not limited by another infill line. Extrude it in its full length.
-            hook_end = hook_backward.b;
-        } else {
-            // There is not enough space for the full hook in both directions, take the longer one.
-            double hook_backward_max_length = max_hook_length(hook_startf, - hook_vector_norm, hook_intersections, self_intersection, other_hook, self_intersection_point);
-            Vec2d hook_dir = (hook_forward_max_length > hook_backward_max_length ? hook_forward_max_length : - hook_backward_max_length) * hook_vector_norm;
-            hook_end = hook_start + hook_dir.cast<coord_t>();
-        }
+        hook_backward_max_length = max_hook_length(hook_startf, - hook_vector_norm, hook_intersections, self_intersection, other_hook, self_intersection_point);
     }
 
+    // Take the longer hook.
+    Vec2d hook_dir = (hook_forward_max_length > hook_backward_max_length ? hook_forward_max_length : - hook_backward_max_length) * hook_vector_norm;
+    Point hook_end = hook_start + hook_dir.cast<coord_t>();
+
     Points &pl = intersection.intersect_pl->points;
     if (intersection.front) {
         pl.front() = hook_start;
@@ -774,6 +767,9 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
     lines_src.reserve(lines.size());
     std::transform(lines.begin(), lines.end(), std::back_inserter(lines_src), [](const Line& l) { return Polyline{ l.a, l.b }; });
 
+    const float scaled_offset           = float(scale_(spacing) * 0.7); // 30% overlap
+    const float scaled_trim_distance    = float(scale_(spacing) * 0.5 * 0.75); // 25% overlap
+
     // Keeping the vector of closest points outside the loop, so the vector does not need to be reallocated.
     std::vector<std::pair<rtree_segment_t, size_t>> closest;
     // Pairs of lines touching at one end point. The pair is sorted to make the end point connection test symmetric.
@@ -836,13 +832,12 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 
     sort_remove_duplicates(lines_touching_at_endpoints);
 
-    const float scaled_offset = float(scale_(spacing) * 0.7); // 30% overlap
-
     std::vector<Intersection> intersections;
     {
         // Minimum lenght of an infill line to anchor. Very short lines cannot be trimmed from both sides,
         // it does not help to anchor extremely short infill lines, it consumes too much plastic while not adding
         // to the object rigidity.
+        assert(scaled_offset > scaled_trim_distance);
         const double line_len_threshold_drop_both_sides    = scaled_offset * (2. / cos(PI / 6.) + 0.5) + SCALED_EPSILON;
         const double line_len_threshold_anchor_both_sides  = line_len_threshold_drop_both_sides + scaled_offset;
         const double line_len_threshold_drop_single_side   = scaled_offset * (1. / cos(PI / 6.) + 1.5) + SCALED_EPSILON;
@@ -852,8 +847,8 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
             if (line.points.empty())
                 continue;
 
-            const Point &front_point = line.points.front();
-            const Point &back_point  = line.points.back();
+            Point &front_point = line.points.front();
+            Point &back_point  = line.points.back();
 
             // Find the nearest line from the start point of the line.
             std::optional<size_t> tjoint_front, tjoint_back;
@@ -922,6 +917,15 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                     if (tjoint_back)
                         // T-joint of line's back point with the 'closest' line.
                         intersections.emplace_back(lines_src[tjoint_back.value()],  lines_src[line_idx], &line, back_point,  false);
+                } else {
+                    if (tjoint_front)
+                        // T joint at the front at a 60 degree angle, the line is very short.
+                        // Trim the front side.
+                        front_point += ((scaled_trim_distance * 1.155) * (back_point - front_point).cast<double>().normalized()).cast<coord_t>();
+                    if (tjoint_back)
+                        // T joint at the front at a 60 degree angle, the line is very short.
+                        // Trim the front side.
+                        back_point  += ((scaled_trim_distance * 1.155) * (front_point - back_point).cast<double>().normalized()).cast<coord_t>();
                 }
             }
         }
@@ -1008,8 +1012,8 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
         // pl2 may have alread been merged with another polyline, even with this one.
         pl2 = &lines[update_merged_polyline_idx(pl2 - lines.data())];
         assert(pl1 <= pl2);
-        // Avoid closing a loop.
-        if (pl1 != pl2) {
+        // Avoid closing a loop, ignore dropped infill lines.
+        if (pl1 != pl2 && ! pl1->points.empty() && ! pl2->points.empty()) {
             // Merge the polylines.
             assert(pl1 < pl2);
             assert(pl1->points.size() >= 2);
@@ -1061,7 +1065,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook0-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
 #endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                add_hook(first_i, scaled_offset, hook_length, rtree, lines_src);
+                add_hook(first_i, scaled_offset, hook_length, scaled_trim_distance, rtree, lines_src);
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook0-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
                 ++ iStep;
@@ -1138,6 +1142,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                 } else {
                     // Both intersections are on different polylines
                     Line  l(first_i_point, nearest_i_point);
+                    l.translate((perp(first_i.closest_line->vector().cast<double>().normalized()) * (first_i.left ? scaled_trim_distance : - scaled_trim_distance)).cast<coord_t>());
                     Point pt_start, pt_end;
                     bool  trim_start = first_i  .intersect_pl->points.size() == 3 && first_i  .other_hook_intersects(l, pt_start);
                     bool  trim_end   = nearest_i.intersect_pl->points.size() == 3 && nearest_i.other_hook_intersects(l, pt_end);
@@ -1175,7 +1180,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-pre-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
 #endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
-                add_hook(first_i, scaled_offset, hook_length, rtree, lines_src);
+                add_hook(first_i, scaled_offset, hook_length, scaled_trim_distance, rtree, lines_src);
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
                 export_infill_lines_to_svg(boundary, lines, debug_out_path("FillAdaptive-add_hook-post-%d-%d.svg", iRun, iStep), { first_i.intersect_point });
 #endif // ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
diff --git a/src/libslic3r/Line.hpp b/src/libslic3r/Line.hpp
index 46f1a0442..72532b4e3 100644
--- a/src/libslic3r/Line.hpp
+++ b/src/libslic3r/Line.hpp
@@ -54,7 +54,8 @@ public:
     Line(const Point& _a, const Point& _b) : a(_a), b(_b) {}
     explicit operator Lines() const { Lines lines; lines.emplace_back(*this); return lines; }
     void   scale(double factor) { this->a *= factor; this->b *= factor; }
-    void   translate(double x, double y) { Vector v(x, y); this->a += v; this->b += v; }
+    void   translate(const Point &v) { this->a += v; this->b += v; }
+    void   translate(double x, double y) { this->translate(Point(x, y)); }
     void   rotate(double angle, const Point &center) { this->a.rotate(angle, center); this->b.rotate(angle, center); }
     void   reverse() { std::swap(this->a, this->b); }
     double length() const { return (b - a).cast<double>().norm(); }
diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp
index dac4d5877..3b0c54324 100644
--- a/src/libslic3r/Point.hpp
+++ b/src/libslic3r/Point.hpp
@@ -61,18 +61,14 @@ inline int64_t cross2(const Vec2i64 &v1, const Vec2i64 &v2) { return v1(0) * v2(
 inline float   cross2(const Vec2f   &v1, const Vec2f   &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
 inline double  cross2(const Vec2d   &v1, const Vec2d   &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
 
-template<class T, int N> Eigen::Matrix<T,  2, 1, Eigen::DontAlign>
-to_2d(const Eigen::Matrix<T,  N, 1, Eigen::DontAlign> &ptN) { return {ptN(0), ptN(1)}; }
+template<typename T, int Options>
+inline Eigen::Matrix<T, 2, 1, Eigen::DontAlign> perp(const Eigen::MatrixBase<Eigen::Matrix<T, 2, 1, Options>> &v) { return Eigen::Matrix<T, 2, 1, Eigen::DontAlign>(- v.y(), v.x()); }
 
-//inline Vec2i32 to_2d(const Vec3i32 &pt3) { return Vec2i32(pt3(0), pt3(1)); }
-//inline Vec2i64 to_2d(const Vec3i64 &pt3) { return Vec2i64(pt3(0), pt3(1)); }
-//inline Vec2f   to_2d(const Vec3f   &pt3) { return Vec2f  (pt3(0), pt3(1)); }
-//inline Vec2d   to_2d(const Vec3d   &pt3) { return Vec2d  (pt3(0), pt3(1)); }
+template<class T, int N, int Options>
+Eigen::Matrix<T, 2, 1, Eigen::DontAlign> to_2d(const Eigen::MatrixBase<Eigen::Matrix<T, N, 1, Options>> &ptN) { return { ptN(0), ptN(1) }; }
 
-inline Vec3d   to_3d(const Vec2d &v, double z) { return Vec3d(v(0), v(1), z); }
-inline Vec3f   to_3d(const Vec2f &v, float z) { return Vec3f(v(0), v(1), z); }
-inline Vec3i64 to_3d(const Vec2i64 &v, float z) { return Vec3i64(int64_t(v(0)), int64_t(v(1)), int64_t(z)); }
-inline Vec3crd to_3d(const Vec3crd &p, coord_t z) { return Vec3crd(p(0), p(1), z); }
+template<class T, int Options>
+Eigen::Matrix<T, 3, 1, Eigen::DontAlign> to_3d(const Eigen::MatrixBase<Eigen::Matrix<T, 2, 1, Options>> & pt, const T z) { return { pt(0), pt(1), z }; }
 
 inline Vec2d   unscale(coord_t x, coord_t y) { return Vec2d(unscale<double>(x), unscale<double>(y)); }
 inline Vec2d   unscale(const Vec2crd &pt) { return Vec2d(unscale<double>(pt(0)), unscale<double>(pt(1))); }

From 32362cff0b09a60125b3650c2d7fcc1d81c7b238 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 16 Nov 2020 10:18:51 +0100
Subject: [PATCH 024/138] SVG export: Implemented flipping in Y axis. Now
 flipped by default to match the 3D print paths view when looking at the print
 from the top.

---
 src/libslic3r/SVG.cpp | 148 +++++++++++++++++-------------------------
 src/libslic3r/SVG.hpp |  24 ++++---
 2 files changed, 74 insertions(+), 98 deletions(-)

diff --git a/src/libslic3r/SVG.cpp b/src/libslic3r/SVG.cpp
index 1c1c906c9..da30a197f 100644
--- a/src/libslic3r/SVG.cpp
+++ b/src/libslic3r/SVG.cpp
@@ -3,8 +3,6 @@
 
 #include <boost/nowide/cstdio.hpp>
 
-#define COORD(x) (unscale<float>((x))*10)
-
 namespace Slic3r {
 
 bool SVG::open(const char* afilename)
@@ -33,8 +31,9 @@ bool SVG::open(const char* afilename, const BoundingBox &bbox, const coord_t bbo
     this->f        = boost::nowide::fopen(afilename, "w");
     if (f == NULL)
         return false;
-    float w = COORD(bbox.max(0) - bbox.min(0) + 2 * bbox_offset);
-    float h = COORD(bbox.max(1) - bbox.min(1) + 2 * bbox_offset);
+    float w = to_svg_coord(bbox.max(0) - bbox.min(0) + 2 * bbox_offset);
+    float h = to_svg_coord(bbox.max(1) - bbox.min(1) + 2 * bbox_offset);
+    this->height   = h;
     fprintf(this->f,
         "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"
         "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\" \"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">\n"
@@ -47,12 +46,11 @@ bool SVG::open(const char* afilename, const BoundingBox &bbox, const coord_t bbo
     return true;
 }
 
-void
-SVG::draw(const Line &line, std::string stroke, coordf_t stroke_width)
+void SVG::draw(const Line &line, std::string stroke, coordf_t stroke_width)
 {
     fprintf(this->f,
         "   <line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" style=\"stroke: %s; stroke-width: %f\"",
-        COORD(line.a(0) - origin(0)), COORD(line.a(1) - origin(1)), COORD(line.b(0) - origin(0)), COORD(line.b(1) - origin(1)), stroke.c_str(), (stroke_width == 0) ? 1.f : COORD(stroke_width));
+        to_svg_x(line.a(0) - origin(0)), to_svg_y(line.a(1) - origin(1)), to_svg_x(line.b(0) - origin(0)), to_svg_y(line.b(1) - origin(1)), stroke.c_str(), (stroke_width == 0) ? 1.f : to_svg_coord(stroke_width));
     if (this->arrows)
         fprintf(this->f, " marker-end=\"url(#endArrow)\"");
     fprintf(this->f, "/>\n");
@@ -67,34 +65,31 @@ void SVG::draw(const ThickLine &line, const std::string &fill, const std::string
     coordf_t db  = coordf_t(0.5)*line.b_width/len;
     fprintf(this->f,
         "   <polygon points=\"%f,%f %f,%f %f,%f %f,%f\" style=\"fill:%s; stroke: %s; stroke-width: %f\"/>\n",
-        COORD(line.a(0)-da*perp(0)-origin(0)),
-        COORD(line.a(1)-da*perp(1)-origin(1)),
-        COORD(line.b(0)-db*perp(0)-origin(0)),
-        COORD(line.b(1)-db*perp(1)-origin(1)),
-        COORD(line.b(0)+db*perp(0)-origin(0)),
-        COORD(line.b(1)+db*perp(1)-origin(1)),
-        COORD(line.a(0)+da*perp(0)-origin(0)),
-        COORD(line.a(1)+da*perp(1)-origin(1)),
+        to_svg_x(line.a(0)-da*perp(0)-origin(0)),
+        to_svg_y(line.a(1)-da*perp(1)-origin(1)),
+        to_svg_x(line.b(0)-db*perp(0)-origin(0)),
+        to_svg_y(line.b(1)-db*perp(1)-origin(1)),
+        to_svg_x(line.b(0)+db*perp(0)-origin(0)),
+        to_svg_y(line.b(1)+db*perp(1)-origin(1)),
+        to_svg_x(line.a(0)+da*perp(0)-origin(0)),
+        to_svg_y(line.a(1)+da*perp(1)-origin(1)),
         fill.c_str(), stroke.c_str(),
-        (stroke_width == 0) ? 1.f : COORD(stroke_width));
+        (stroke_width == 0) ? 1.f : to_svg_coord(stroke_width));
 }
 
-void
-SVG::draw(const Lines &lines, std::string stroke, coordf_t stroke_width)
+void SVG::draw(const Lines &lines, std::string stroke, coordf_t stroke_width)
 {
-    for (Lines::const_iterator it = lines.begin(); it != lines.end(); ++it)
-        this->draw(*it, stroke, stroke_width);
+    for (const Line &l : lines)
+        this->draw(l, stroke, stroke_width);
 }
 
-void
-SVG::draw(const IntersectionLines &lines, std::string stroke)
+void SVG::draw(const IntersectionLines &lines, std::string stroke)
 {
-    for (IntersectionLines::const_iterator it = lines.begin(); it != lines.end(); ++it)
-        this->draw((Line)*it, stroke);
+    for (const IntersectionLine &il : lines)
+        this->draw((Line)il, stroke);
 }
 
-void
-SVG::draw(const ExPolygon &expolygon, std::string fill, const float fill_opacity)
+void SVG::draw(const ExPolygon &expolygon, std::string fill, const float fill_opacity)
 {
     this->fill = fill;
     
@@ -106,8 +101,7 @@ SVG::draw(const ExPolygon &expolygon, std::string fill, const float fill_opacity
     this->path(d, true, 0, fill_opacity);
 }
 
-void 
-SVG::draw_outline(const ExPolygon &expolygon, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
+void SVG::draw_outline(const ExPolygon &expolygon, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
 {
     draw_outline(expolygon.contour, stroke_outer, stroke_width);
     for (Polygons::const_iterator it = expolygon.holes.begin(); it != expolygon.holes.end(); ++ it) {
@@ -115,83 +109,71 @@ SVG::draw_outline(const ExPolygon &expolygon, std::string stroke_outer, std::str
     }
 }
 
-void
-SVG::draw(const ExPolygons &expolygons, std::string fill, const float fill_opacity)
+void SVG::draw(const ExPolygons &expolygons, std::string fill, const float fill_opacity)
 {
     for (ExPolygons::const_iterator it = expolygons.begin(); it != expolygons.end(); ++it)
         this->draw(*it, fill, fill_opacity);
 }
 
-void 
-SVG::draw_outline(const ExPolygons &expolygons, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
+void SVG::draw_outline(const ExPolygons &expolygons, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
 {
     for (ExPolygons::const_iterator it = expolygons.begin(); it != expolygons.end(); ++ it)
         draw_outline(*it, stroke_outer, stroke_holes, stroke_width);
 }
 
-void
-SVG::draw(const Surface &surface, std::string fill, const float fill_opacity)
+void SVG::draw(const Surface &surface, std::string fill, const float fill_opacity)
 {
     draw(surface.expolygon, fill, fill_opacity);
 }
 
-void 
-SVG::draw_outline(const Surface &surface, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
+void SVG::draw_outline(const Surface &surface, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
 {
     draw_outline(surface.expolygon, stroke_outer, stroke_holes, stroke_width);
 }
 
-void
-SVG::draw(const Surfaces &surfaces, std::string fill, const float fill_opacity)
+void SVG::draw(const Surfaces &surfaces, std::string fill, const float fill_opacity)
 {
     for (Surfaces::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it)
         this->draw(*it, fill, fill_opacity);
 }
 
-void 
-SVG::draw_outline(const Surfaces &surfaces, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
+void SVG::draw_outline(const Surfaces &surfaces, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
 {
     for (Surfaces::const_iterator it = surfaces.begin(); it != surfaces.end(); ++ it)
         draw_outline(*it, stroke_outer, stroke_holes, stroke_width);
 }
 
-void
-SVG::draw(const SurfacesPtr &surfaces, std::string fill, const float fill_opacity)
+void SVG::draw(const SurfacesPtr &surfaces, std::string fill, const float fill_opacity)
 {
     for (SurfacesPtr::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it)
         this->draw(*(*it), fill, fill_opacity);
 }
 
-void 
-SVG::draw_outline(const SurfacesPtr &surfaces, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
+void SVG::draw_outline(const SurfacesPtr &surfaces, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
 {
     for (SurfacesPtr::const_iterator it = surfaces.begin(); it != surfaces.end(); ++ it)
         draw_outline(*(*it), stroke_outer, stroke_holes, stroke_width);
 }
 
-void
-SVG::draw(const Polygon &polygon, std::string fill)
+void SVG::draw(const Polygon &polygon, std::string fill)
 {
     this->fill = fill;
     this->path(this->get_path_d(polygon, true), !fill.empty(), 0, 1.f);
 }
 
-void
-SVG::draw(const Polygons &polygons, std::string fill)
+void SVG::draw(const Polygons &polygons, std::string fill)
 {
     for (Polygons::const_iterator it = polygons.begin(); it != polygons.end(); ++it)
         this->draw(*it, fill);
 }
 
-void
-SVG::draw(const Polyline &polyline, std::string stroke, coordf_t stroke_width)
+void SVG::draw(const Polyline &polyline, std::string stroke, coordf_t stroke_width)
 {
     this->stroke = stroke;
     this->path(this->get_path_d(polyline, false), false, stroke_width, 1.f);
 }
 
-void
-SVG::draw(const Polylines &polylines, std::string stroke, coordf_t stroke_width)
+void SVG::draw(const Polylines &polylines, std::string stroke, coordf_t stroke_width)
 {
     for (Polylines::const_iterator it = polylines.begin(); it != polylines.end(); ++it)
         this->draw(*it, stroke, stroke_width);
@@ -203,73 +185,64 @@ void SVG::draw(const ThickLines &thicklines, const std::string &fill, const std:
         this->draw(*it, fill, stroke, stroke_width);
 }
 
-void
-SVG::draw(const ThickPolylines &polylines, const std::string &stroke, coordf_t stroke_width)
+void SVG::draw(const ThickPolylines &polylines, const std::string &stroke, coordf_t stroke_width)
 {
     for (ThickPolylines::const_iterator it = polylines.begin(); it != polylines.end(); ++it)
         this->draw((Polyline)*it, stroke, stroke_width);
 }
 
-void 
-SVG::draw(const ThickPolylines &thickpolylines, const std::string &fill, const std::string &stroke, coordf_t stroke_width)
+void SVG::draw(const ThickPolylines &thickpolylines, const std::string &fill, const std::string &stroke, coordf_t stroke_width)
 {
     for (ThickPolylines::const_iterator it = thickpolylines.begin(); it != thickpolylines.end(); ++ it)
         draw(it->thicklines(), fill, stroke, stroke_width);
 }
 
-void
-SVG::draw(const Point &point, std::string fill, coord_t iradius)
+void SVG::draw(const Point &point, std::string fill, coord_t iradius)
 {
-    float radius = (iradius == 0) ? 3.f : COORD(iradius);
+    float radius = (iradius == 0) ? 3.f : to_svg_coord(iradius);
     std::ostringstream svg;
-    svg << "   <circle cx=\"" << COORD(point(0) - origin(0)) << "\" cy=\"" << COORD(point(1) - origin(1))
+    svg << "   <circle cx=\"" << to_svg_x(point(0) - origin(0)) << "\" cy=\"" << to_svg_y(point(1) - origin(1))
         << "\" r=\"" << radius << "\" "
         << "style=\"stroke: none; fill: " << fill << "\" />";
     
     fprintf(this->f, "%s\n", svg.str().c_str());
 }
 
-void
-SVG::draw(const Points &points, std::string fill, coord_t radius)
+void SVG::draw(const Points &points, std::string fill, coord_t radius)
 {
     for (Points::const_iterator it = points.begin(); it != points.end(); ++it)
         this->draw(*it, fill, radius);
 }
 
-void 
-SVG::draw(const ClipperLib::Path &polygon, double scale, std::string stroke, coordf_t stroke_width)
+void SVG::draw(const ClipperLib::Path &polygon, double scale, std::string stroke, coordf_t stroke_width)
 {
     this->stroke = stroke;
     this->path(this->get_path_d(polygon, scale, true), false, stroke_width, 1.f);
 }
 
-void 
-SVG::draw(const ClipperLib::Paths &polygons, double scale, std::string stroke, coordf_t stroke_width)
+void SVG::draw(const ClipperLib::Paths &polygons, double scale, std::string stroke, coordf_t stroke_width)
 {
     for (ClipperLib::Paths::const_iterator it = polygons.begin(); it != polygons.end(); ++ it)
         draw(*it, scale, stroke, stroke_width);
 }
 
-void 
-SVG::draw_outline(const Polygon &polygon, std::string stroke, coordf_t stroke_width)
+void SVG::draw_outline(const Polygon &polygon, std::string stroke, coordf_t stroke_width)
 {
     this->stroke = stroke;
     this->path(this->get_path_d(polygon, true), false, stroke_width, 1.f);
 }
 
-void 
-SVG::draw_outline(const Polygons &polygons, std::string stroke, coordf_t stroke_width)
+void SVG::draw_outline(const Polygons &polygons, std::string stroke, coordf_t stroke_width)
 {
     for (Polygons::const_iterator it = polygons.begin(); it != polygons.end(); ++ it)
         draw_outline(*it, stroke, stroke_width);
 }
 
-void
-SVG::path(const std::string &d, bool fill, coordf_t stroke_width, const float fill_opacity)
+void SVG::path(const std::string &d, bool fill, coordf_t stroke_width, const float fill_opacity)
 {
     float lineWidth = 0.f;
     if (! fill)
-        lineWidth = (stroke_width == 0) ? 2.f : COORD(stroke_width);
+        lineWidth = (stroke_width == 0) ? 2.f : to_svg_coord(stroke_width);
 
     fprintf(
         this->f,
@@ -283,27 +256,25 @@ SVG::path(const std::string &d, bool fill, coordf_t stroke_width, const float fi
     );
 }
 
-std::string
-SVG::get_path_d(const MultiPoint &mp, bool closed) const
+std::string SVG::get_path_d(const MultiPoint &mp, bool closed) const
 {
     std::ostringstream d;
     d << "M ";
     for (Points::const_iterator p = mp.points.begin(); p != mp.points.end(); ++p) {
-        d << COORD((*p)(0) - origin(0)) << " ";
-        d << COORD((*p)(1) - origin(1)) << " ";
+        d << to_svg_x((*p)(0) - origin(0)) << " ";
+        d << to_svg_y((*p)(1) - origin(1)) << " ";
     }
     if (closed) d << "z";
     return d.str();
 }
 
-std::string
-SVG::get_path_d(const ClipperLib::Path &path, double scale, bool closed) const
+std::string SVG::get_path_d(const ClipperLib::Path &path, double scale, bool closed) const
 {
     std::ostringstream d;
     d << "M ";
     for (ClipperLib::Path::const_iterator p = path.begin(); p != path.end(); ++p) {
-        d << COORD(scale * p->X - origin(0)) << " ";
-        d << COORD(scale * p->Y - origin(1)) << " ";
+        d << to_svg_x(scale * p->X - origin(0)) << " ";
+        d << to_svg_y(scale * p->Y - origin(1)) << " ";
     }
     if (closed) d << "z";
     return d.str();
@@ -313,8 +284,8 @@ void SVG::draw_text(const Point &pt, const char *text, const char *color)
 {
     fprintf(this->f,
         "<text x=\"%f\" y=\"%f\" font-family=\"sans-serif\" font-size=\"20px\" fill=\"%s\">%s</text>",
-        COORD(pt(0)-origin(0)),
-        COORD(pt(1)-origin(1)),
+        to_svg_x(pt(0)-origin(0)),
+        to_svg_y(pt(1)-origin(1)),
         color, text);
 }
 
@@ -322,18 +293,17 @@ void SVG::draw_legend(const Point &pt, const char *text, const char *color)
 {
     fprintf(this->f,
         "<circle cx=\"%f\" cy=\"%f\" r=\"10\" fill=\"%s\"/>",
-        COORD(pt(0)-origin(0)),
-        COORD(pt(1)-origin(1)),
+        to_svg_x(pt(0)-origin(0)),
+        to_svg_y(pt(1)-origin(1)),
         color);
     fprintf(this->f,
         "<text x=\"%f\" y=\"%f\" font-family=\"sans-serif\" font-size=\"10px\" fill=\"%s\">%s</text>",
-        COORD(pt(0)-origin(0)) + 20.f,
-        COORD(pt(1)-origin(1)),
+        to_svg_x(pt(0)-origin(0)) + 20.f,
+        to_svg_y(pt(1)-origin(1)),
         "black", text);
 }
 
-void
-SVG::Close()
+void SVG::Close()
 {
     fprintf(this->f, "</svg>\n");
     fclose(this->f);
diff --git a/src/libslic3r/SVG.hpp b/src/libslic3r/SVG.hpp
index c1b387554..1ebd8d918 100644
--- a/src/libslic3r/SVG.hpp
+++ b/src/libslic3r/SVG.hpp
@@ -16,27 +16,28 @@ public:
     bool arrows;
     std::string fill, stroke;
     Point origin;
-    bool flipY;
+    float height;
+    bool  flipY;
 
     SVG(const char* afilename) :
         arrows(false), fill("grey"), stroke("black"), filename(afilename), flipY(false)
         { open(filename); }
-    SVG(const char* afilename, const BoundingBox &bbox, const coord_t bbox_offset = scale_(1.), bool aflipY = false) : 
-        arrows(false), fill("grey"), stroke("black"), filename(afilename), origin(bbox.min - Point(bbox_offset, bbox_offset)), flipY(aflipY)
-        { open(filename, bbox, bbox_offset, aflipY); }
+    SVG(const char* afilename, const BoundingBox &bbox, const coord_t bbox_offset = scale_(1.), bool flipY = true) : 
+        arrows(false), fill("grey"), stroke("black"), filename(afilename), origin(bbox.min - Point(bbox_offset, bbox_offset)), flipY(flipY)
+        { open(filename, bbox, bbox_offset, flipY); }
     SVG(const std::string &filename) :
         arrows(false), fill("grey"), stroke("black"), filename(filename), flipY(false)
         { open(filename); }
-    SVG(const std::string &filename, const BoundingBox &bbox, const coord_t bbox_offset = scale_(1.), bool aflipY = false) : 
-        arrows(false), fill("grey"), stroke("black"), filename(filename), origin(bbox.min - Point(bbox_offset, bbox_offset)), flipY(aflipY)
-        { open(filename, bbox, bbox_offset, aflipY); }
+    SVG(const std::string &filename, const BoundingBox &bbox, const coord_t bbox_offset = scale_(1.), bool flipY = true) : 
+        arrows(false), fill("grey"), stroke("black"), filename(filename), origin(bbox.min - Point(bbox_offset, bbox_offset)), flipY(flipY)
+        { open(filename, bbox, bbox_offset, flipY); }
     ~SVG() { if (f != NULL) Close(); }
 
     bool open(const char* filename);
-    bool open(const char* filename, const BoundingBox &bbox, const coord_t bbox_offset = scale_(1.), bool flipY = false);
+    bool open(const char* filename, const BoundingBox &bbox, const coord_t bbox_offset = scale_(1.), bool flipY = true);
     bool open(const std::string &filename) 
         { return open(filename.c_str()); }
-    bool open(const std::string &filename, const BoundingBox &bbox, const coord_t bbox_offset = scale_(1.), bool flipY = false)
+    bool open(const std::string &filename, const BoundingBox &bbox, const coord_t bbox_offset = scale_(1.), bool flipY = true)
         { return open(filename.c_str(), bbox, bbox_offset, flipY); }
 
     void draw(const Line &line, std::string stroke = "black", coordf_t stroke_width = 0);
@@ -127,6 +128,11 @@ public:
     };
 
     static void export_expolygons(const char *path, const std::vector<std::pair<Slic3r::ExPolygons, ExPolygonAttributes>> &expolygons_with_attributes);
+
+private:
+    static float    to_svg_coord(float x) throw() { return unscale<float>(x) * 10.f; }
+    static float    to_svg_x(float x) throw() { return to_svg_coord(x); }
+    float           to_svg_y(float x) const throw() { return flipY ? this->height - to_svg_coord(x) : to_svg_coord(x); }
 };
 
 }

From 84693a58109082282b5e193140dd72cb06c36cdd Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 16 Nov 2020 10:20:47 +0100
Subject: [PATCH 025/138] New get_extents(const std::vector<Points> &pts),
 refactored Lian Barsky line clipping

---
 src/libslic3r/Geometry.hpp | 25 ++++++++++++-------------
 src/libslic3r/Point.cpp    | 13 +++++++++++++
 src/libslic3r/Point.hpp    |  4 ++++
 src/libslic3r/Polygon.cpp  |  5 -----
 src/libslic3r/Polygon.hpp  |  1 -
 5 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/src/libslic3r/Geometry.hpp b/src/libslic3r/Geometry.hpp
index 2bf9453c4..92333f203 100644
--- a/src/libslic3r/Geometry.hpp
+++ b/src/libslic3r/Geometry.hpp
@@ -213,16 +213,7 @@ inline bool liang_barsky_line_clipping_interval(
     double t0 = 0.0;
     double t1 = 1.0;
     // Traverse through left, right, bottom, top edges.
-    for (int edge = 0; edge < 4; ++ edge)
-    {
-        double p, q;
-        switch (edge) {
-        case 0:  p = - v.x();    q = - bbox.min.x() + x0.x();   break;
-        case 1:  p =   v.x();    q =   bbox.max.x() - x0.x();   break;
-        case 2:  p = - v.y();    q = - bbox.min.y() + x0.y();   break;
-        default: p =   v.y();    q =   bbox.max.y() - x0.y();   break;
-        }
-        
+    auto clip_side = [&x0, &v, &bbox, &t0, &t1](double p, double q) -> bool {
         if (p == 0) {
             if (q < 0)
                 // Line parallel to the bounding box edge is fully outside of the bounding box.
@@ -247,10 +238,18 @@ inline bool liang_barsky_line_clipping_interval(
                     t1 = r;
             }
         }
+        return true;
+    };
+
+    if (clip_side(- v.x(), - bbox.min.x() + x0.x()) &&
+        clip_side(  v.x(),   bbox.max.x() - x0.x()) &&
+        clip_side(- v.y(), - bbox.min.y() + x0.y()) &&
+        clip_side(  v.y(),   bbox.max.y() - x0.y())) {
+        out_interval.first = t0;
+        out_interval.second = t1;
+        return true;
     }
-    out_interval.first = t0;
-    out_interval.second = t1;
-    return true;
+    return false;
 }
 
 template<typename T>
diff --git a/src/libslic3r/Point.cpp b/src/libslic3r/Point.cpp
index f3ed41342..555a1cb2d 100644
--- a/src/libslic3r/Point.cpp
+++ b/src/libslic3r/Point.cpp
@@ -176,6 +176,19 @@ Point Point::projection_onto(const Line &line) const
     return ((line.a - *this).cast<double>().squaredNorm() < (line.b - *this).cast<double>().squaredNorm()) ? line.a : line.b;
 }
 
+BoundingBox get_extents(const Points &pts)
+{ 
+    return BoundingBox(pts);
+}
+
+BoundingBox get_extents(const std::vector<Points> &pts)
+{
+    BoundingBox bbox;
+    for (const Points &p : pts)
+        bbox.merge(get_extents(p));
+    return bbox;
+}
+
 std::ostream& operator<<(std::ostream &stm, const Vec2d &pointf)
 {
     return stm << pointf(0) << "," << pointf(1);
diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp
index 3b0c54324..a6525af4e 100644
--- a/src/libslic3r/Point.hpp
+++ b/src/libslic3r/Point.hpp
@@ -13,6 +13,7 @@
 
 namespace Slic3r {
 
+class BoundingBox;
 class Line;
 class MultiPoint;
 class Point;
@@ -178,6 +179,9 @@ inline Point lerp(const Point &a, const Point &b, double t)
     return ((1. - t) * a.cast<double>() + t * b.cast<double>()).cast<coord_t>();
 }
 
+extern BoundingBox get_extents(const Points &pts);
+extern BoundingBox get_extents(const std::vector<Points> &pts);
+
 namespace int128 {
     // Exact orientation predicate,
     // returns +1: CCW, 0: collinear, -1: CW.
diff --git a/src/libslic3r/Polygon.cpp b/src/libslic3r/Polygon.cpp
index 13cdf65b4..f74df1c9a 100644
--- a/src/libslic3r/Polygon.cpp
+++ b/src/libslic3r/Polygon.cpp
@@ -298,11 +298,6 @@ void Polygon::densify(float min_length, std::vector<float>* lengths_ptr)
     assert(points.size() == lengths.size() - 1);
 }
 
-BoundingBox get_extents(const Points &points)
-{ 
-	return BoundingBox(points);
-}
-
 BoundingBox get_extents(const Polygon &poly) 
 { 
     return poly.bounding_box();
diff --git a/src/libslic3r/Polygon.hpp b/src/libslic3r/Polygon.hpp
index f5aa28914..3c44f66f7 100644
--- a/src/libslic3r/Polygon.hpp
+++ b/src/libslic3r/Polygon.hpp
@@ -74,7 +74,6 @@ public:
 inline bool operator==(const Polygon &lhs, const Polygon &rhs) { return lhs.points == rhs.points; }
 inline bool operator!=(const Polygon &lhs, const Polygon &rhs) { return lhs.points != rhs.points; }
 
-extern BoundingBox get_extents(const Points &points);
 extern BoundingBox get_extents(const Polygon &poly);
 extern BoundingBox get_extents(const Polygons &polygons);
 extern BoundingBox get_extents_rotated(const Polygon &poly, double angle);

From 4280fdb5f26b382f6c2c75d1febf1af57364e266 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 16 Nov 2020 10:54:00 +0100
Subject: [PATCH 026/138] Reworked connection of infill lines to perimeter
 lines. Added a new "infill_anchor" parameter.

---
 src/libslic3r/Fill/Fill.cpp             |  22 +-
 src/libslic3r/Fill/FillAdaptive.cpp     |  15 +-
 src/libslic3r/Fill/FillBase.cpp         | 749 ++++++++++--------------
 src/libslic3r/Fill/FillBase.hpp         |   9 +-
 src/libslic3r/Fill/FillRectilinear2.cpp |  38 +-
 src/libslic3r/Preset.cpp                |   2 +-
 src/libslic3r/PrintConfig.cpp           |  10 +
 src/libslic3r/PrintConfig.hpp           |   2 +
 src/libslic3r/PrintObject.cpp           |   2 +-
 src/slic3r/GUI/Tab.cpp                  |   1 +
 xs/lib/Slic3r/XS.pm                     |   1 -
 xs/xsp/Filler.xsp                       |   2 -
 12 files changed, 383 insertions(+), 470 deletions(-)

diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp
index 3e24d502d..95c8bb9b9 100644
--- a/src/libslic3r/Fill/Fill.cpp
+++ b/src/libslic3r/Fill/Fill.cpp
@@ -37,6 +37,8 @@ struct SurfaceFillParams
     bool        	dont_connect = false;
     // Don't adjust spacing to fill the space evenly.
     bool        	dont_adjust = false;
+    // Length of the infill anchor along the perimeter line.
+    float 			anchor_length = std::numeric_limits<float>::max();
 
     // width, height of extrusion, nozzle diameter, is bridge
     // For the output, for fill generator.
@@ -67,6 +69,7 @@ struct SurfaceFillParams
 		RETURN_COMPARE_NON_EQUAL(density);
 		RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, dont_connect);
 		RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, dont_adjust);
+		RETURN_COMPARE_NON_EQUAL(anchor_length);
 		RETURN_COMPARE_NON_EQUAL(flow.width);
 		RETURN_COMPARE_NON_EQUAL(flow.height);
 		RETURN_COMPARE_NON_EQUAL(flow.nozzle_diameter);
@@ -85,6 +88,7 @@ struct SurfaceFillParams
 				this->density   		== rhs.density   		&&
 				this->dont_connect  	== rhs.dont_connect 	&&
 				this->dont_adjust   	== rhs.dont_adjust 		&&
+				this->anchor_length		== rhs.anchor_length    &&
 				this->flow 				== rhs.flow 			&&
 				this->extrusion_role	== rhs.extrusion_role;
 	}
@@ -115,16 +119,17 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
 	        if (surface.surface_type == stInternalVoid)
 	        	has_internal_voids = true;
 	        else {
+		        const PrintRegionConfig &region_config = layerm.region()->config();
 		        FlowRole extrusion_role = surface.is_top() ? frTopSolidInfill : (surface.is_solid() ? frSolidInfill : frInfill);
 		        bool     is_bridge 	    = layer.id() > 0 && surface.is_bridge();
 		        params.extruder 	 = layerm.region()->extruder(extrusion_role);
-		        params.pattern 		 = layerm.region()->config().fill_pattern.value;
-		        params.density       = float(layerm.region()->config().fill_density);
+		        params.pattern 		 = region_config.fill_pattern.value;
+		        params.density       = float(region_config.fill_density);
 
 		        if (surface.is_solid()) {
 		            params.density = 100.f;
 		            params.pattern = (surface.is_external() && ! is_bridge) ? 
-						(surface.is_top() ? layerm.region()->config().top_fill_pattern.value : layerm.region()->config().bottom_fill_pattern.value) :
+						(surface.is_top() ? region_config.top_fill_pattern.value : region_config.bottom_fill_pattern.value) :
 		                ipRectilinear;
 		        } else if (params.density <= 0)
 		            continue;
@@ -136,7 +141,7 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
 		                    (surface.is_top() ? erTopSolidInfill : erSolidInfill) :
 		                    erInternalInfill);
 		        params.bridge_angle = float(surface.bridge_angle);
-		        params.angle 		= float(Geometry::deg2rad(layerm.region()->config().fill_angle.value));
+		        params.angle 		= float(Geometry::deg2rad(region_config.fill_angle.value));
 		        
 		        // calculate the actual flow we'll be using for this infill
 		        params.flow = layerm.region()->flow(
@@ -165,6 +170,10 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
 		        } else
 		            params.spacing = params.flow.spacing();
 
+		        params.anchor_length = float(region_config.infill_anchor);
+		        if (region_config.infill_anchor.percent)
+		        	params.anchor_length *= 0.01 * params.spacing;
+
 		        auto it_params = set_surface_params.find(params);
 		        if (it_params == set_surface_params.end())
 		        	it_params = set_surface_params.insert(it_params, params);
@@ -367,8 +376,9 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
 
         // apply half spacing using this flow's own spacing and generate infill
         FillParams params;
-        params.density 		= float(0.01 * surface_fill.params.density);
-        params.dont_adjust 	= surface_fill.params.dont_adjust; // false
+        params.density 		 = float(0.01 * surface_fill.params.density);
+        params.dont_adjust 	 = surface_fill.params.dont_adjust; // false
+        params.anchor_length = surface_fill.params.anchor_length;
 
         for (ExPolygon &expoly : surface_fill.expolygons) {
 			// Spacing is modified by the filler to indicate adjustments. Reset it for each expolygon.
diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index c96e4e023..188deca7c 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -639,7 +639,6 @@ static inline Intersection* get_nearest_intersection(std::vector<std::pair<Inter
 // translated in the direction of the intersection line (intersection.intersect_line).
 static Line create_offset_line(Line offset_line, const Intersection &intersection, const double scaled_offset)
 {
-    // 50% overlap of the extrusion lines to achieve strong bonding.
     offset_line.translate((perp(intersection.closest_line->vector().cast<double>().normalized()) * (intersection.left ? scaled_offset : - scaled_offset)).cast<coord_t>());
     // Extend the line by a small value to guarantee a collision with adjacent lines
     offset_line.extend(coord_t(scaled_offset * 1.16)); // / cos(PI/6)
@@ -767,8 +766,10 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
     lines_src.reserve(lines.size());
     std::transform(lines.begin(), lines.end(), std::back_inserter(lines_src), [](const Line& l) { return Polyline{ l.a, l.b }; });
 
-    const float scaled_offset           = float(scale_(spacing) * 0.7); // 30% overlap
-    const float scaled_trim_distance    = float(scale_(spacing) * 0.5 * 0.75); // 25% overlap
+    // 19% overlap, slightly lower than the allowed overlap in Fill::connect_infill()
+    const float scaled_offset           = float(scale_(spacing) * 0.81);
+    // 25% overlap
+    const float scaled_trim_distance    = float(scale_(spacing) * 0.5 * 0.75);
 
     // Keeping the vector of closest points outside the loop, so the vector does not need to be reallocated.
     std::vector<std::pair<rtree_segment_t, size_t>> closest;
@@ -1199,9 +1200,6 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
     return polylines_out;
 }
 
-//coord_t get_hook_length(const double spacing) { return coord_t(scale_(spacing)) * 2; }
-coord_t get_hook_length(const double spacing) { return coord_t(scale_(spacing)) * 5; }
-
 #ifndef NDEBUG
 bool has_no_collinear_lines(const Polylines &polylines)
 {
@@ -1323,7 +1321,8 @@ void Filler::_fill_surface_single(
     }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
-    coord_t   hook_length = get_hook_length(this->spacing);
+    const auto hook_length = coord_t(std::min(scale_(this->spacing * 5), scale_(params.anchor_length)));
+
     Polylines all_polylines_with_hooks = all_polylines.size() > 1 ? connect_lines_using_hooks(std::move(all_polylines), expolygon, this->spacing, hook_length) : std::move(all_polylines);
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
@@ -1336,7 +1335,7 @@ void Filler::_fill_surface_single(
     if (params.dont_connect || all_polylines_with_hooks.size() <= 1)
         append(polylines_out, std::move(all_polylines_with_hooks));
     else
-        connect_infill(chain_polylines(std::move(all_polylines_with_hooks)), expolygon, polylines_out, this->spacing, params, hook_length);
+        connect_infill(chain_polylines(std::move(all_polylines_with_hooks)), expolygon, polylines_out, this->spacing, params);
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index a3b83e38f..782545114 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -154,377 +154,6 @@ std::pair<float, Point> Fill::_infill_direction(const Surface *surface) const
     return std::pair<float, Point>(out_angle, out_shift);
 }
 
-#if 0
-// From pull request "Gyroid improvements" #2730 by @supermerill
-
-/// cut poly between poly.point[idx_1] & poly.point[idx_1+1]
-/// add p1+-width to one part and p2+-width to the other one.
-/// add the "new" polyline to polylines (to part cut from poly)
-/// p1 & p2 have to be between poly.point[idx_1] & poly.point[idx_1+1]
-/// if idx_1 is ==0 or == size-1, then we don't need to create a new polyline.
-static void cut_polyline(Polyline &poly, Polylines &polylines, size_t idx_1, Point p1, Point p2) {
-    //reorder points
-    if (p1.distance_to_square(poly.points[idx_1]) > p2.distance_to_square(poly.points[idx_1])) {
-        Point temp = p2;
-        p2 = p1;
-        p1 = temp;
-    }
-    if (idx_1 == poly.points.size() - 1) {
-        //shouldn't be possible.
-        poly.points.erase(poly.points.end() - 1);
-    } else {
-        // create new polyline
-        Polyline new_poly;
-        //put points in new_poly
-        new_poly.points.push_back(p2);
-        new_poly.points.insert(new_poly.points.end(), poly.points.begin() + idx_1 + 1, poly.points.end());
-        //erase&put points in poly
-        poly.points.erase(poly.points.begin() + idx_1 + 1, poly.points.end());
-        poly.points.push_back(p1);
-        //safe test
-        if (poly.length() == 0)
-            poly.points = new_poly.points;
-        else
-            polylines.emplace_back(new_poly);
-    }
-}
-
-/// the poly is like a polygon but with first_point != last_point (already removed)
-static void cut_polygon(Polyline &poly, size_t idx_1, Point p1, Point p2) {
-    //reorder points
-    if (p1.distance_to_square(poly.points[idx_1]) > p2.distance_to_square(poly.points[idx_1])) {
-        Point temp = p2;
-        p2 = p1;
-        p1 = temp;
-    }
-    //check if we need to rotate before cutting
-    if (idx_1 != poly.size() - 1) {
-        //put points in new_poly 
-        poly.points.insert(poly.points.end(), poly.points.begin(), poly.points.begin() + idx_1 + 1);
-        poly.points.erase(poly.points.begin(), poly.points.begin() + idx_1 + 1);
-    }
-    //put points in poly
-    poly.points.push_back(p1);
-    poly.points.insert(poly.points.begin(), p2);
-}
-
-/// check if the polyline from pts_to_check may be at 'width' distance of a point in polylines_blocker
-/// it use equally_spaced_points with width/2 precision, so don't worry with pts_to_check number of points.
-/// it use the given polylines_blocker points, be sure to put enough of them to be reliable.
-/// complexity : N(pts_to_check.equally_spaced_points(width / 2)) x N(polylines_blocker.points)
-static bool collision(const Points &pts_to_check, const Polylines &polylines_blocker, const coordf_t width) {
-    //check if it's not too close to a polyline
-    coordf_t min_dist_square = width * width * 0.9 - SCALED_EPSILON;
-    Polyline better_polylines(pts_to_check);
-    Points better_pts = better_polylines.equally_spaced_points(width / 2);
-    for (const Point &p : better_pts) {
-        for (const Polyline &poly2 : polylines_blocker) {
-            for (const Point &p2 : poly2.points) {
-                if (p.distance_to_square(p2) < min_dist_square) {
-                    return true;
-                }
-            }
-        }
-    }
-    return false;
-}
-
-/// Try to find a path inside polylines that allow to go from p1 to p2.
-/// width if the width of the extrusion
-/// polylines_blockers are the array of polylines to check if the path isn't blocked by something.
-/// complexity: N(polylines.points) + a collision check after that if we finded a path: N(2(p2-p1)/width) x N(polylines_blocker.points)
-static Points get_frontier(Polylines &polylines, const Point& p1, const Point& p2, const coord_t width, const Polylines &polylines_blockers, coord_t max_size = -1) {
-    for (size_t idx_poly = 0; idx_poly < polylines.size(); ++idx_poly) {
-        Polyline &poly = polylines[idx_poly];
-        if (poly.size() <= 1) continue;
-
-        //loop?
-        if (poly.first_point() == poly.last_point()) {
-            //polygon : try to find a line for p1 & p2.
-            size_t idx_11, idx_12, idx_21, idx_22;
-            idx_11 = poly.closest_point_index(p1);
-            idx_12 = idx_11;
-            if (Line(poly.points[idx_11], poly.points[(idx_11 + 1) % (poly.points.size() - 1)]).distance_to(p1) < SCALED_EPSILON) {
-                idx_12 = (idx_11 + 1) % (poly.points.size() - 1);
-            } else if (Line(poly.points[(idx_11 > 0) ? (idx_11 - 1) : (poly.points.size() - 2)], poly.points[idx_11]).distance_to(p1) < SCALED_EPSILON) {
-                idx_11 = (idx_11 > 0) ? (idx_11 - 1) : (poly.points.size() - 2);
-            } else {
-                continue;
-            }
-            idx_21 = poly.closest_point_index(p2);
-            idx_22 = idx_21;
-            if (Line(poly.points[idx_21], poly.points[(idx_21 + 1) % (poly.points.size() - 1)]).distance_to(p2) < SCALED_EPSILON) {
-                idx_22 = (idx_21 + 1) % (poly.points.size() - 1);
-            } else if (Line(poly.points[(idx_21 > 0) ? (idx_21 - 1) : (poly.points.size() - 2)], poly.points[idx_21]).distance_to(p2) < SCALED_EPSILON) {
-                idx_21 = (idx_21 > 0) ? (idx_21 - 1) : (poly.points.size() - 2);
-            } else {
-                continue;
-            }
-
-
-            //edge case: on the same line
-            if (idx_11 == idx_21 && idx_12 == idx_22) {
-                if (collision(Points() = { p1, p2 }, polylines_blockers, width)) return Points();
-                //break loop
-                poly.points.erase(poly.points.end() - 1);
-                cut_polygon(poly, idx_11, p1, p2);
-                return Points() = { Line(p1, p2).midpoint() };
-            }
-
-            //compute distance & array for the ++ path
-            Points ret_1_to_2;
-            double dist_1_to_2 = p1.distance_to(poly.points[idx_12]);
-            ret_1_to_2.push_back(poly.points[idx_12]);
-            size_t max = idx_12 <= idx_21 ? idx_21+1 : poly.points.size();
-            for (size_t i = idx_12 + 1; i < max; i++) {
-                dist_1_to_2 += poly.points[i - 1].distance_to(poly.points[i]);
-                ret_1_to_2.push_back(poly.points[i]);
-            }
-            if (idx_12 > idx_21) {
-                dist_1_to_2 += poly.points.back().distance_to(poly.points.front());
-                ret_1_to_2.push_back(poly.points[0]);
-                for (size_t i = 1; i <= idx_21; i++) {
-                    dist_1_to_2 += poly.points[i - 1].distance_to(poly.points[i]);
-                    ret_1_to_2.push_back(poly.points[i]);
-                }
-            }
-            dist_1_to_2 += p2.distance_to(poly.points[idx_21]);
-
-            //compute distance & array for the -- path
-            Points ret_2_to_1;
-            double dist_2_to_1 = p1.distance_to(poly.points[idx_11]);
-            ret_2_to_1.push_back(poly.points[idx_11]);
-            size_t min = idx_22 <= idx_11 ? idx_22 : 0;
-            for (size_t i = idx_11; i > min; i--) {
-                dist_2_to_1 += poly.points[i - 1].distance_to(poly.points[i]);
-                ret_2_to_1.push_back(poly.points[i - 1]);
-            }
-            if (idx_22 > idx_11) {
-                dist_2_to_1 += poly.points.back().distance_to(poly.points.front());
-                ret_2_to_1.push_back(poly.points[poly.points.size() - 1]);
-                for (size_t i = poly.points.size() - 1; i > idx_22; i--) {
-                    dist_2_to_1 += poly.points[i - 1].distance_to(poly.points[i]);
-                    ret_2_to_1.push_back(poly.points[i - 1]);
-                }
-            }
-            dist_2_to_1 += p2.distance_to(poly.points[idx_22]);
-
-            if (max_size < dist_2_to_1 && max_size < dist_1_to_2) {
-                return Points();
-            }
-
-            //choose between the two direction (keep the short one)
-            if (dist_1_to_2 < dist_2_to_1) {
-                if (collision(ret_1_to_2, polylines_blockers, width)) return Points();
-                //break loop
-                poly.points.erase(poly.points.end() - 1);
-                //remove points
-                if (idx_12 <= idx_21) {
-                    poly.points.erase(poly.points.begin() + idx_12, poly.points.begin() + idx_21 + 1);
-                    if (idx_12 != 0) {
-                        cut_polygon(poly, idx_11, p1, p2);
-                    } //else : already cut at the good place
-                } else {
-                    poly.points.erase(poly.points.begin() + idx_12, poly.points.end());
-                    poly.points.erase(poly.points.begin(), poly.points.begin() + idx_21);
-                    cut_polygon(poly, poly.points.size() - 1, p1, p2);
-                }
-                return ret_1_to_2;
-            } else {
-                if (collision(ret_2_to_1, polylines_blockers, width)) return Points();
-                //break loop
-                poly.points.erase(poly.points.end() - 1);
-                //remove points
-                if (idx_22 <= idx_11) {
-                    poly.points.erase(poly.points.begin() + idx_22, poly.points.begin() + idx_11 + 1);
-                    if (idx_22 != 0) {
-                        cut_polygon(poly, idx_21, p1, p2);
-                    } //else : already cut at the good place
-                } else {
-                    poly.points.erase(poly.points.begin() + idx_22, poly.points.end());
-                    poly.points.erase(poly.points.begin(), poly.points.begin() + idx_11);
-                    cut_polygon(poly, poly.points.size() - 1, p1, p2);
-                }
-                return ret_2_to_1;
-            }
-        } else {
-            //polyline : try to find a line for p1 & p2.
-            size_t idx_1, idx_2;
-            idx_1 = poly.closest_point_index(p1);
-            if (idx_1 < poly.points.size() - 1 && Line(poly.points[idx_1], poly.points[idx_1 + 1]).distance_to(p1) < SCALED_EPSILON) {
-            } else if (idx_1 > 0 && Line(poly.points[idx_1 - 1], poly.points[idx_1]).distance_to(p1) < SCALED_EPSILON) {
-                idx_1 = idx_1 - 1;
-            } else {
-                continue;
-            }
-            idx_2 = poly.closest_point_index(p2);
-            if (idx_2 < poly.points.size() - 1 && Line(poly.points[idx_2], poly.points[idx_2 + 1]).distance_to(p2) < SCALED_EPSILON) {
-            } else if (idx_2 > 0 && Line(poly.points[idx_2 - 1], poly.points[idx_2]).distance_to(p2) < SCALED_EPSILON) {
-                idx_2 = idx_2 - 1;
-            } else {
-                continue;
-            }
-
-            //edge case: on the same line
-            if (idx_1 == idx_2) {
-                if (collision(Points() = { p1, p2 }, polylines_blockers, width)) return Points();
-                cut_polyline(poly, polylines, idx_1, p1, p2);
-                return Points() = { Line(p1, p2).midpoint() };
-            }
-
-            //create ret array
-            size_t first_idx = idx_1;
-            size_t last_idx = idx_2 + 1;
-            if (idx_1 > idx_2) {
-                first_idx = idx_2;
-                last_idx = idx_1 + 1;
-            }
-            Points p_ret;
-            p_ret.insert(p_ret.end(), poly.points.begin() + first_idx + 1, poly.points.begin() + last_idx);
-
-            coordf_t length = 0;
-            for (size_t i = 1; i < p_ret.size(); i++) length += p_ret[i - 1].distance_to(p_ret[i]);
-
-            if (max_size < length) {
-                return Points();
-            }
-
-            if (collision(p_ret, polylines_blockers, width)) return Points();
-            //cut polyline
-            poly.points.erase(poly.points.begin() + first_idx + 1, poly.points.begin() + last_idx);
-            cut_polyline(poly, polylines, first_idx, p1, p2);
-            //order the returned array to be p1->p2
-            if (idx_1 > idx_2) {
-                std::reverse(p_ret.begin(), p_ret.end());
-            }
-            return p_ret;
-        }
-
-    }
-
-    return Points();
-}
-
-/// Connect the infill_ordered polylines, in this order, from the back point to the next front point.
-/// It uses only the boundary polygons to do so, and can't pass two times at the same place.
-/// It avoid passing over the infill_ordered's polylines (preventing local over-extrusion).
-/// return the connected polylines in polylines_out. Can output polygons (stored as polylines with first_point = last_point).
-/// complexity: worst: N(infill_ordered.points) x N(boundary.points)
-///             typical: N(infill_ordered) x ( N(boundary.points) + N(infill_ordered.points) )
-void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary, Polylines &polylines_out, const FillParams &params) {
-
-    //TODO: fallback to the quick & dirty old algorithm when n(points) is too high.
-    Polylines polylines_frontier = to_polylines(((Polygons)boundary));
-
-    Polylines polylines_blocker;
-    coord_t clip_size = scale_(this->spacing) * 2;
-    for (const Polyline &polyline : infill_ordered) {
-        if (polyline.length() > 2.01 * clip_size) {
-            polylines_blocker.push_back(polyline);
-            polylines_blocker.back().clip_end(clip_size);
-            polylines_blocker.back().clip_start(clip_size);
-        }
-    }
-
-    //length between two lines
-    coordf_t ideal_length = (1 / params.density) * this->spacing;
-
-    Polylines polylines_connected_first;
-    bool first = true;
-    for (const Polyline &polyline : infill_ordered) {
-        if (!first) {
-            // Try to connect the lines.
-            Points &pts_end = polylines_connected_first.back().points;
-            const Point &last_point = pts_end.back();
-            const Point &first_point = polyline.points.front();
-            if (last_point.distance_to(first_point) < scale_(this->spacing) * 10) {
-                Points pts_frontier = get_frontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker, (coord_t)scale_(ideal_length) * 2);
-                if (!pts_frontier.empty()) {
-                    // The lines can be connected.
-                    pts_end.insert(pts_end.end(), pts_frontier.begin(), pts_frontier.end());
-                    pts_end.insert(pts_end.end(), polyline.points.begin(), polyline.points.end());
-                    continue;
-                }
-            }
-        }
-        // The lines cannot be connected.
-        polylines_connected_first.emplace_back(std::move(polyline));
-
-        first = false;
-    }
-
-    Polylines polylines_connected;
-    first = true;
-    for (const Polyline &polyline : polylines_connected_first) {
-        if (!first) {
-            // Try to connect the lines.
-            Points &pts_end = polylines_connected.back().points;
-            const Point &last_point = pts_end.back();
-            const Point &first_point = polyline.points.front();
-
-            Polylines before = polylines_frontier;
-            Points pts_frontier = get_frontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker);
-            if (!pts_frontier.empty()) {
-                // The lines can be connected.
-                pts_end.insert(pts_end.end(), pts_frontier.begin(), pts_frontier.end());
-                pts_end.insert(pts_end.end(), polyline.points.begin(), polyline.points.end());
-                continue;
-            }
-        }
-        // The lines cannot be connected.
-        polylines_connected.emplace_back(std::move(polyline));
-
-        first = false;
-    }
-
-    //try to link to nearest point if possible
-    for (size_t idx1 = 0; idx1 < polylines_connected.size(); idx1++) {
-        size_t min_idx = 0;
-        coordf_t min_length = 0;
-        bool switch_id1 = false;
-        bool switch_id2 = false;
-        for (size_t idx2 = idx1 + 1; idx2 < polylines_connected.size(); idx2++) {
-            double last_first = polylines_connected[idx1].last_point().distance_to_square(polylines_connected[idx2].first_point());
-            double first_first = polylines_connected[idx1].first_point().distance_to_square(polylines_connected[idx2].first_point());
-            double first_last = polylines_connected[idx1].first_point().distance_to_square(polylines_connected[idx2].last_point());
-            double last_last = polylines_connected[idx1].last_point().distance_to_square(polylines_connected[idx2].last_point());
-            double min = std::min(std::min(last_first, last_last), std::min(first_first, first_last));
-            if (min < min_length || min_length == 0) {
-                min_idx = idx2;
-                switch_id1 = (std::min(last_first, last_last) > std::min(first_first, first_last));
-                switch_id2 = (std::min(last_first, first_first) > std::min(last_last, first_last));
-                min_length = min;
-            }
-        }
-        if (min_idx > idx1 && min_idx < polylines_connected.size()){
-            Points pts_frontier = get_frontier(polylines_frontier, 
-                switch_id1 ? polylines_connected[idx1].first_point() : polylines_connected[idx1].last_point(), 
-                switch_id2 ? polylines_connected[min_idx].last_point() : polylines_connected[min_idx].first_point(),
-                scale_(this->spacing), polylines_blocker);
-            if (!pts_frontier.empty()) {
-                if (switch_id1) polylines_connected[idx1].reverse();
-                if (switch_id2) polylines_connected[min_idx].reverse();
-                Points &pts_end = polylines_connected[idx1].points;
-                pts_end.insert(pts_end.end(), pts_frontier.begin(), pts_frontier.end());
-                pts_end.insert(pts_end.end(), polylines_connected[min_idx].points.begin(), polylines_connected[min_idx].points.end());
-                polylines_connected.erase(polylines_connected.begin() + min_idx);
-            }
-        }
-    }
-
-    //try to create some loops if possible
-    for (Polyline &polyline : polylines_connected) {
-        Points pts_frontier = get_frontier(polylines_frontier, polyline.last_point(), polyline.first_point(), scale_(this->spacing), polylines_blocker);
-        if (!pts_frontier.empty()) {
-            polyline.points.insert(polyline.points.end(), pts_frontier.begin(), pts_frontier.end());
-            polyline.points.insert(polyline.points.begin(), polyline.points.back());
-        }
-        polylines_out.emplace_back(polyline);
-    }
-}
-
-#else
-
 // A single T joint of an infill line to a closed contour or one of its holes.
 struct ContourIntersectionPoint {
     // Contour and point on a contour where an infill line is connected to.
@@ -579,6 +208,8 @@ struct ContourIntersectionPoint {
 // Distance from param1 to param2 when going counter-clockwise.
 static inline float closed_contour_distance_ccw(float param1, float param2, float contour_length)
 {
+    assert(param1 >= 0.f && param1 <= contour_length);
+    assert(param2 >= 0.f && param2 <= contour_length);
     float d = param2 - param1;
     if (d < 0.f)
         d += contour_length;
@@ -598,12 +229,7 @@ float path_length_along_contour_ccw(const ContourIntersectionPoint *cp1, const C
     assert(cp2 != nullptr);
     assert(cp1->contour_idx == cp2->contour_idx);
     assert(cp1 != cp2);
-    // Zero'th param is the length of the contour.
-    float param_lo  = cp1->param;
-    float param_hi  = cp2->param;
-    assert(param_lo >= 0.f && param_lo <= contour_length);
-    assert(param_hi >= 0.f && param_hi <= contour_length);
-    return cp1 < cp2 ? param_hi - param_lo : param_lo + contour_length - param_hi;
+    return closed_contour_distance_ccw(cp1->param, cp2->param, contour_length);
 }
 
 // Lengths along the contour from cp1 to cp2 going CCW and going CW.
@@ -645,6 +271,7 @@ static inline float take_cw_limited(Polyline &pl, const Points &contour, const s
     // If appending to an infill line, then the start point of a perimeter line shall match the end point of an infill line.
     assert(pl.empty() || pl.points.back() == contour[idx_start]);
     assert(contour.size() + 1 == params.size());
+    assert(length_to_take > SCALED_EPSILON);
     // Length of the contour.
     float  length = params.back();
     // Parameter (length from contour.front()) for the first point.
@@ -700,6 +327,7 @@ static inline float take_ccw_limited(Polyline &pl, const Points &contour, const
     // If appending to an infill line, then the start point of a perimeter line shall match the end point of an infill line.
     assert(pl.empty() || pl.points.back() == contour[idx_start]);
     assert(contour.size() + 1 == params.size());
+    assert(length_to_take > SCALED_EPSILON);
     // Length of the contour.
     float  length = params.back();
     // Parameter (length from contour.front()) for the first point.
@@ -815,13 +443,15 @@ static void take_limited(
             // Length of the segment from cp to cp->prev_on_contour.
             float l = closed_contour_distance_cw(cp->param, cp->prev_on_contour->param, length);
             length_to_go = std::min(length_to_go, cp->contour_not_taken_length_prev);
-            if (cp->prev_on_contour->consumed)
+            //if (cp->prev_on_contour->consumed)
                 // Don't overlap with an already extruded infill line.
                 length_to_go = std::max(0.f, std::min(length_to_go, l - line_half_width));
             cp->consume_prev();
             if (l >= length_to_go) {
-                cp->prev_on_contour->trim_next(l - length_to_go);
-                take_cw_limited(pl1, contour, params, cp->point_idx, cp->prev_on_contour->point_idx, length_to_go);
+                if (length_to_go > SCALED_EPSILON) {
+                    cp->prev_on_contour->trim_next(l - length_to_go);
+                    take_cw_limited(pl1, contour, params, cp->point_idx, cp->prev_on_contour->point_idx, length_to_go);
+                }
                 break;
             } else {
                 cp->prev_on_contour->trim_next(0.f);
@@ -833,13 +463,15 @@ static void take_limited(
         for (ContourIntersectionPoint *cp = cp_start; cp != cp_end; cp = cp->next_on_contour) {
             float l = closed_contour_distance_ccw(cp->param, cp->next_on_contour->param, length);
             length_to_go = std::min(length_to_go, cp->contour_not_taken_length_next);
-            if (cp->next_on_contour->consumed)
+            //if (cp->next_on_contour->consumed)
                 // Don't overlap with an already extruded infill line.
                 length_to_go = std::max(0.f, std::min(length_to_go, l - line_half_width));
             cp->consume_next();
             if (l >= length_to_go) {
-                cp->next_on_contour->trim_prev(l - length_to_go);
-                take_ccw_limited(pl1, contour, params, cp->point_idx, cp->next_on_contour->point_idx, length_to_go);
+                if (length_to_go > SCALED_EPSILON) {
+                    cp->next_on_contour->trim_prev(l - length_to_go);
+                    take_ccw_limited(pl1, contour, params, cp->point_idx, cp->next_on_contour->point_idx, length_to_go);
+                }
                 break;
             } else {
                 cp->next_on_contour->trim_prev(0.f);
@@ -877,14 +509,14 @@ static inline SegmentPoint clip_start_segment_and_point(const Points &polyline,
         for (size_t i = 1; i < polyline.size(); ++ i) {
 			Vec2d pt = polyline[i].cast<double>();
 			Vec2d v = pt - pt_prev;
-	        double l2 = v.squaredNorm();
-	        if (l2 > distance * distance) {
-	        	out.idx_segment = i;
-	        	out.t 			= distance / sqrt(l2);
+	        double l = v.norm();
+	        if (l > distance) {
+	        	out.idx_segment = i - 1;
+	        	out.t 			= distance / l;
 	        	out.point 		= pt_prev + out.t * v;
 	            break;
 	        }
-	        distance -= sqrt(l2);
+	        distance -= l;
 	        pt_prev = pt;
 	    }
 	}
@@ -902,16 +534,16 @@ static inline SegmentPoint clip_end_segment_and_point(const Points &polyline, do
 		for (int i = int(polyline.size()) - 2; i >= 0; -- i) {
 			Vec2d pt = polyline[i].cast<double>();
 			Vec2d v = pt - pt_next;
-	        double l2 = v.squaredNorm();
-	        if (l2 > distance * distance) {
+	        double l = v.norm();
+	        if (l > distance) {
 	        	out.idx_segment = i;
-	        	out.t 			= distance / sqrt(l2);
+	        	out.t 			= distance / l;
 	        	out.point 		= pt_next + out.t * v;
 				// Store the parameter referenced to the starting point of a segment.
 				out.t			= 1. - out.t;
 	            break;
 	        }
-	        distance -= sqrt(l2);
+	        distance -= l;
 	        pt_next = pt;
 	    }
 	}
@@ -937,13 +569,9 @@ static inline bool line_rounded_thick_segment_collision(
     {
         // Very short line vector. Just test whether the center point is inside the offset line.
         Vec2d lpt = 0.5 * (line_a + line_b);
-
         if (segment_l > SCALED_EPSILON) {
-            intersects  = (segment_a - lpt).squaredNorm() < offset2;
-            intersects |= (segment_b - lpt).squaredNorm() < offset2;
-            if (! intersects) {
-
-            }
+            struct Linef { Vec2d a, b; };
+            intersects = line_alg::distance_to_squared(Linef{ segment_a, segment_b }, lpt) < offset2;
         } else
             intersects = (0.5 * (segment_a + segment_b) - lpt).squaredNorm() < offset2;
         if (intersects) {
@@ -986,9 +614,10 @@ static inline bool line_rounded_thick_segment_collision(
             // where the segment spans (0, 0) to (segment_l, 0).
             const Vec2d dir_x = segment_v / segment_l;
             const Vec2d dir_y(- dir_x.y(), dir_x.x());
+            const Vec2d line_p0(line_a - segment_a);
             std::pair<double, double> interval;
             if (Geometry::liang_barsky_line_clipping_interval(
-                    Vec2d(line_a - segment_a), 
+                    Vec2d(line_p0.dot(dir_x), line_p0.dot(dir_y)),
                     Vec2d(line_v0.dot(dir_x), line_v0.dot(dir_y)), 
                     BoundingBoxf(Vec2d(0., - offset), Vec2d(segment_l, offset)), 
                     interval))
@@ -1004,6 +633,26 @@ static inline bool line_rounded_thick_segment_collision(
         }
     }
 
+#if 0
+    {
+        BoundingBox bbox;
+        bbox.merge(line_a.cast<coord_t>());
+        bbox.merge(line_a.cast<coord_t>());
+        bbox.merge(segment_a.cast<coord_t>());
+        bbox.merge(segment_b.cast<coord_t>());
+        static int iRun = 0;
+        ::Slic3r::SVG svg(debug_out_path("%s-%03d.svg", "line-thick-segment-intersect", iRun ++), bbox);
+        svg.draw(Line(line_a.cast<coord_t>(), line_b.cast<coord_t>()), "black");
+        svg.draw(Line(segment_a.cast<coord_t>(), segment_b.cast<coord_t>()), "blue", offset * 2.);
+        svg.draw(segment_a.cast<coord_t>(), "blue", offset);
+        svg.draw(segment_b.cast<coord_t>(), "blue", offset);
+        svg.draw(Line(segment_a.cast<coord_t>(), segment_b.cast<coord_t>()), "black");
+        if (intersects)
+            svg.draw(Line((line_a + (line_b - line_a).normalized() * out_interval.first).cast<coord_t>(),
+                          (line_a + (line_b - line_a).normalized() * out_interval.second).cast<coord_t>()), "red");
+    }
+#endif
+
     return intersects;
 }
 
@@ -1032,6 +681,132 @@ static inline bool cyclic_interval_inside_interval(float outer_low, float outer_
     return interval_inside_interval(outer_low, outer_high, inner_low, inner_high, float(SCALED_EPSILON));
 }
 
+// #define INFILL_DEBUG_OUTPUT
+
+#ifdef INFILL_DEBUG_OUTPUT
+static void export_infill_to_svg(
+    // Boundary contour, along which the perimeter extrusions will be drawn.
+    const std::vector<Points>                              &boundary,
+    // Parametrization of boundary with Euclidian length.
+    const std::vector<std::vector<float>>                  &boundary_parameters,
+    // Intersections (T-joints) of the infill lines with the boundary.
+    std::vector<std::vector<ContourIntersectionPoint*>>    &boundary_intersections,
+    // Infill lines, either completely inside the boundary, or touching the boundary.
+    const Polylines                                        &infill,
+    const coord_t                                           scaled_spacing,
+    const std::string                                      &path,
+    const Polylines                                        &overlap_lines = Polylines(),
+    const Polylines                                        &polylines = Polylines(),
+    const Points                                           &pts = Points())
+{
+    Polygons    polygons;
+    std::transform(boundary.begin(), boundary.end(), std::back_inserter(polygons), [](auto &pts) { return Polygon(pts); });
+    ExPolygons  expolygons = union_ex(polygons);
+    BoundingBox bbox = get_extents(polygons);
+    bbox.offset(scale_(3.));
+
+    ::Slic3r::SVG svg(path, bbox);
+    // Draw the filled infill polygons.
+    svg.draw(expolygons);
+
+    // Draw the pieces of boundary allowed to be used as anchors of infill lines, not yet consumed.
+    const std::string color_boundary_trimmed     = "blue";
+    const std::string color_boundary_not_trimmed = "yellow";
+    const coordf_t    boundary_line_width        = scaled_spacing;
+    svg.draw_outline(polygons, "red", boundary_line_width);
+    for (const std::vector<ContourIntersectionPoint*> &intersections : boundary_intersections) {
+        const size_t                 boundary_idx  = &intersections - boundary_intersections.data();
+        const Points                &contour       = boundary[boundary_idx];
+        const std::vector<float>    &contour_param = boundary_parameters[boundary_idx];
+        for (const ContourIntersectionPoint *ip : intersections) {
+            assert(ip->next_trimmed == ip->next_on_contour->prev_trimmed);
+            assert(ip->prev_trimmed == ip->prev_on_contour->next_trimmed);
+            {
+                Polyline pl { contour[ip->point_idx] };
+                if (ip->next_trimmed) {
+                    if (ip->contour_not_taken_length_next > SCALED_EPSILON) {
+                        take_ccw_limited(pl, contour, contour_param, ip->point_idx, ip->next_on_contour->point_idx, ip->contour_not_taken_length_next);
+                        svg.draw(pl, color_boundary_trimmed, boundary_line_width);
+                    }
+                } else {
+                    take_ccw_full(pl, contour, ip->point_idx, ip->next_on_contour->point_idx);
+                    svg.draw(pl, color_boundary_not_trimmed, boundary_line_width);
+                }
+            }
+            {
+                Polyline pl { contour[ip->point_idx] };
+                if (ip->prev_trimmed) {
+                    if (ip->contour_not_taken_length_prev > SCALED_EPSILON) {
+                        take_cw_limited(pl, contour, contour_param, ip->point_idx, ip->prev_on_contour->point_idx, ip->contour_not_taken_length_prev);
+                        svg.draw(pl, color_boundary_trimmed, boundary_line_width);
+                    }
+                } else {
+                    take_cw_full(pl, contour, ip->point_idx, ip->prev_on_contour->point_idx);
+                    svg.draw(pl, color_boundary_not_trimmed, boundary_line_width);
+                }
+            }
+        }
+    }
+
+    // Draw the full infill polygon boundary.
+    svg.draw_outline(polygons, "green");
+
+    // Draw the infill lines, first the full length with red color, then a slightly shortened length with black color.
+    svg.draw(infill, "brown");
+    static constexpr double trim_length = scale_(0.15);
+    for (Polyline polyline : infill)
+        if (! polyline.empty()) {
+            Vec2d a = polyline.points.front().cast<double>();
+            Vec2d d = polyline.points.back().cast<double>();
+            if (polyline.size() == 2) {
+                Vec2d v = d - a;
+                double l = v.norm();
+                if (l > 2. * trim_length) {
+                    a += v * trim_length / l;
+                    d -= v * trim_length / l;
+                    polyline.points.front() = a.cast<coord_t>();
+                    polyline.points.back() = d.cast<coord_t>();
+                } else
+                    polyline.points.clear();
+            } else if (polyline.size() > 2) {
+                Vec2d b = polyline.points[1].cast<double>();
+                Vec2d c = polyline.points[polyline.points.size() - 2].cast<double>();
+                Vec2d v = b - a;
+                double l = v.norm();
+                if (l > trim_length) {
+                    a += v * trim_length / l;
+                    polyline.points.front() = a.cast<coord_t>();
+                } else
+                    polyline.points.erase(polyline.points.begin());
+                v = d - c;
+                l = v.norm();
+                if (l > trim_length)
+                    polyline.points.back() = (d - v * trim_length / l).cast<coord_t>();
+                else
+                    polyline.points.pop_back();
+            }
+            svg.draw(polyline, "black");
+        }
+
+    svg.draw(overlap_lines, "red", scale_(0.05));
+    svg.draw(polylines, "magenta", scale_(0.05));
+    svg.draw(pts, "magenta");
+}
+#endif // INFILL_DEBUG_OUTPUT
+
+#ifndef NDEBUG
+bool validate_boundary_intersections(const std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections)
+{
+    for (const std::vector<ContourIntersectionPoint*>& contour : boundary_intersections) {
+        for (ContourIntersectionPoint* ip : contour) {
+            assert(ip->next_trimmed == ip->next_on_contour->prev_trimmed);
+            assert(ip->prev_trimmed == ip->prev_on_contour->next_trimmed);
+        }
+    }
+    return true;
+}
+#endif // NDEBUG
+
 // Mark the segments of split boundary as consumed if they are very close to some of the infill line.
 void mark_boundary_segments_touching_infill(
     // Boundary contour, along which the perimeter extrusions will be drawn.
@@ -1053,8 +828,17 @@ void mark_boundary_segments_touching_infill(
 #ifndef NDEBUG
     for (size_t i = 0; i < boundary.size(); ++ i)
         assert(boundary[i].size() + 1 == boundary_parameters[i].size());
+    assert(validate_boundary_intersections(boundary_intersections));
 #endif
 
+#ifdef INFILL_DEBUG_OUTPUT
+    static int iRun = 0;
+    ++ iRun;
+    int iStep = 0;
+    export_infill_to_svg(boundary, boundary_parameters, boundary_intersections, infill, distance_colliding * 2, debug_out_path("%s-%03d.svg", "FillBase-mark_boundary_segments_touching_infill-start", iRun));
+    Polylines perimeter_overlaps;
+#endif // INFILL_DEBUG_OUTPUT
+
 	EdgeGrid::Grid grid;
     // Make sure that the the grid is big enough for queries against the thick segment.
 	grid.set_bbox(boundary_bbox.inflated(distance_colliding + SCALED_EPSILON));
@@ -1066,13 +850,17 @@ void mark_boundary_segments_touching_infill(
 		Visitor(const EdgeGrid::Grid &grid,
                 const std::vector<Points> &boundary, const std::vector<std::vector<float>> &boundary_parameters, std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections,
                 const double radius) :
-			grid(grid), boundary(boundary), boundary_parameters(boundary_parameters), boundary_intersections(boundary_intersections), radius(radius) {}
+			grid(grid), boundary(boundary), boundary_parameters(boundary_parameters), boundary_intersections(boundary_intersections), radius(radius), trim_l_threshold(0.5 * radius) {}
 
         // Init with a segment of an infill line.
 		void init(const Vec2d &infill_pt1, const Vec2d &infill_pt2) {
 			this->infill_pt1 = &infill_pt1;
 			this->infill_pt2 = &infill_pt2;
-		}
+            this->infill_bbox.reset();
+            this->infill_bbox.merge(infill_pt1);
+            this->infill_bbox.merge(infill_pt2);
+            this->infill_bbox.offset(this->radius + SCALED_EPSILON);
+        }
 
 		bool operator()(coord_t iy, coord_t ix) {
 			// Called with a row and colum of the grid cell, which is intersected by a line.
@@ -1083,13 +871,23 @@ void mark_boundary_segments_touching_infill(
 				const Vec2d seg_pt1 = segment.first.cast<double>();
 				const Vec2d seg_pt2 = segment.second.cast<double>();
                 std::pair<double, double> interval;
-                if (line_rounded_thick_segment_collision(seg_pt1, seg_pt2, *this->infill_pt1, *this->infill_pt2, this->radius, interval)) {
+                BoundingBoxf bbox_seg;
+                bbox_seg.merge(seg_pt1);
+                bbox_seg.merge(seg_pt2);
+#ifdef INFILL_DEBUG_OUTPUT
+                //if (this->infill_bbox.overlap(bbox_seg)) this->perimeter_overlaps.push_back({ segment.first, segment.second });
+#endif // INFILL_DEBUG_OUTPUT
+                if (this->infill_bbox.overlap(bbox_seg) && line_rounded_thick_segment_collision(seg_pt1, seg_pt2, *this->infill_pt1, *this->infill_pt2, this->radius, interval)) {
                     // The boundary segment intersects with the infill segment thickened by radius.
                     // Interval is specified in Euclidian length from seg_pt1 to seg_pt2.
                     // 1) Find the Euclidian parameters of seg_pt1 and seg_pt2 on its boundary contour.
                     const std::vector<float> &contour_parameters = boundary_parameters[it_contour_and_segment->first];
                     const float contour_length = contour_parameters.back();
 					const float param_seg_pt1  = contour_parameters[it_contour_and_segment->second];
+#ifdef INFILL_DEBUG_OUTPUT
+                    this->perimeter_overlaps.push_back({ Point((seg_pt1 + (seg_pt2 - seg_pt1).normalized() * interval.first).cast<coord_t>()),
+                                                         Point((seg_pt1 + (seg_pt2 - seg_pt1).normalized() * interval.second).cast<coord_t>()) });
+#endif // INFILL_DEBUG_OUTPUT
                     const float param_overlap1 = param_seg_pt1 + interval.first;
                     const float param_overlap2 = param_seg_pt1 + interval.second;
                     // 2) Find the ContourIntersectionPoints before param_overlap1 and after param_overlap2.
@@ -1107,29 +905,38 @@ void mark_boundary_segments_touching_infill(
                     assert(ip_low != ip_high);
                     // Verify that the interval (param_overlap1, param_overlap2) is inside the interval (ip_low->param, ip_high->param).
                     assert(cyclic_interval_inside_interval(ip_low->param, ip_high->param, param_overlap1, param_overlap2, contour_length));
+                    assert(validate_boundary_intersections(boundary_intersections));
                     // Mark all ContourIntersectionPoints between ip_low and ip_high as consumed.
                     if (ip_low->next_on_contour != ip_high)
-                        for (ContourIntersectionPoint *ip = ip_low->next_on_contour; ip->next_on_contour != ip_high; ip = ip->next_on_contour) {
+                        for (ContourIntersectionPoint *ip = ip_low->next_on_contour; ip != ip_high; ip = ip->next_on_contour) {
                             ip->consume_prev();
                             ip->consume_next();
                         }
                     // Subtract the interval from the first and last segments.
-                    ip_low->trim_next(closed_contour_distance_ccw(ip_low->param, param_overlap1, contour_length));
-                    ip_high->trim_prev(closed_contour_distance_ccw(param_overlap2, ip_high->param, contour_length));
+                    float trim_l = closed_contour_distance_ccw(ip_low->param, param_overlap1, contour_length);
+                    //if (trim_l > trim_l_threshold)
+                        ip_low->trim_next(trim_l);
+                    trim_l = closed_contour_distance_ccw(param_overlap2, ip_high->param, contour_length);
+                    //if (trim_l > trim_l_threshold)
+                        ip_high->trim_prev(trim_l);
+                    assert(ip_low->next_trimmed == ip_high->prev_trimmed);
+                    assert(validate_boundary_intersections(boundary_intersections));
                     //FIXME mark point as consumed?
                     //FIXME verify the sequence between prev and next?
-#if 0
+#ifdef INFILL_DEBUG_OUTPUT
 					{
-						static size_t iRun = 0;
+#if 0
+                        static size_t iRun = 0;
 						ExPolygon expoly(Polygon(*grid.contours().front()));
 						for (size_t i = 1; i < grid.contours().size(); ++i)
 							expoly.holes.emplace_back(Polygon(*grid.contours()[i]));
 						SVG svg(debug_out_path("%s-%d.svg", "FillBase-mark_boundary_segments_touching_infill", iRun ++).c_str(), get_extents(expoly));
 						svg.draw(expoly, "green");
 						svg.draw(Line(segment.first, segment.second), "red");
-						svg.draw(Line(this->pt1->cast<coord_t>(), this->pt2->cast<coord_t>()), "magenta");
-					}
+						svg.draw(Line(this->infill_pt1->cast<coord_t>(), this->infill_pt2->cast<coord_t>()), "magenta");
 #endif
+                    }
+#endif // INFILL_DEBUG_OUTPUT
 				}
 			}
 			// Continue traversing the grid along the edge.
@@ -1142,21 +949,34 @@ void mark_boundary_segments_touching_infill(
         std::vector<std::vector<ContourIntersectionPoint*>> &boundary_intersections;
 		// Maximum distance between the boundary and the infill line allowed to consider the boundary not touching the infill line.
 		const double								         radius;
+        // Region around the contour / infill line intersection point, where the intersections are ignored.
+        const float                                          trim_l_threshold;
 
 		const Vec2d 								        *infill_pt1;
 		const Vec2d 								        *infill_pt2;
+        BoundingBoxf                                         infill_bbox;
+
+#ifdef INFILL_DEBUG_OUTPUT
+        Polylines                                            perimeter_overlaps;
+#endif // INFILL_DEBUG_OUTPUT
 	} visitor(grid, boundary, boundary_parameters, boundary_intersections, distance_colliding);
 
 	BoundingBoxf bboxf(boundary_bbox.min.cast<double>(), boundary_bbox.max.cast<double>());
 	bboxf.offset(- SCALED_EPSILON);
 
 	for (const Polyline &polyline : infill) {
+#ifdef INFILL_DEBUG_OUTPUT
+        ++ iStep;
+#endif // INFILL_DEBUG_OUTPUT
 		// Clip the infill polyline by the Eucledian distance along the polyline.
 		SegmentPoint start_point = clip_start_segment_and_point(polyline.points, clip_distance);
 		SegmentPoint end_point   = clip_end_segment_and_point(polyline.points, clip_distance);
 		if (start_point.valid() && end_point.valid() && 
 			(start_point.idx_segment < end_point.idx_segment || (start_point.idx_segment == end_point.idx_segment && start_point.t < end_point.t))) {
 			// The clipped polyline is non-empty.
+#ifdef INFILL_DEBUG_OUTPUT
+            visitor.perimeter_overlaps.clear();
+#endif // INFILL_DEBUG_OUTPUT
 			for (size_t point_idx = start_point.idx_segment; point_idx <= end_point.idx_segment; ++ point_idx) {
 //FIXME extend the EdgeGrid to suport tracing a thick line.
 #if 0
@@ -1196,22 +1016,36 @@ void mark_boundary_segments_touching_infill(
 				visitor.init(pt1, pt2);
 				// Simulate tracing of a thick line. This only works reliably if distance_colliding <= grid cell size.
 				Vec2d v = (pt2 - pt1).normalized() * distance_colliding;
-				Vec2d vperp(-v.y(), v.x());
+				Vec2d vperp = perp(v);
 				Vec2d a = pt1 - v - vperp;
-				Vec2d b = pt1 + v - vperp;
+				Vec2d b = pt2 + v - vperp;
 				if (Geometry::liang_barsky_line_clipping(a, b, bboxf))
 					grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor);
 				a = pt1 - v + vperp;
-				b = pt1 + v + vperp;
+				b = pt2 + v + vperp;
 				if (Geometry::liang_barsky_line_clipping(a, b, bboxf))
 					grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor);
 #endif
+#ifdef INFILL_DEBUG_OUTPUT
+//                export_infill_to_svg(boundary, boundary_parameters, boundary_intersections, infill, distance_colliding * 2, debug_out_path("%s-%03d-%03d-%03d.svg", "FillBase-mark_boundary_segments_touching_infill-step", iRun, iStep, int(point_idx)), { polyline });
+#endif // INFILL_DEBUG_OUTPUT
 			}
-		}
+#ifdef INFILL_DEBUG_OUTPUT
+            Polylines perimeter_overlaps;
+            export_infill_to_svg(boundary, boundary_parameters, boundary_intersections, infill, distance_colliding * 2, debug_out_path("%s-%03d-%03d.svg", "FillBase-mark_boundary_segments_touching_infill-step", iRun, iStep), visitor.perimeter_overlaps, { polyline });
+            append(perimeter_overlaps, std::move(visitor.perimeter_overlaps));
+            perimeter_overlaps.clear();
+#endif // INFILL_DEBUG_OUTPUT
+        }
 	}
+
+#ifdef INFILL_DEBUG_OUTPUT
+    export_infill_to_svg(boundary, boundary_parameters, boundary_intersections, infill, distance_colliding * 2, debug_out_path("%s-%03d.svg", "FillBase-mark_boundary_segments_touching_infill-end", iRun), perimeter_overlaps);
+#endif // INFILL_DEBUG_OUTPUT
+    assert(validate_boundary_intersections(boundary_intersections));
 }
 
-void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_src, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length)
+void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_src, Polylines &polylines_out, const double spacing, const FillParams &params)
 {
 	assert(! boundary_src.contour.points.empty());
     auto polygons_src = reserve_vector<const Polygon*>(boundary_src.holes.size() + 1);
@@ -1219,21 +1053,22 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_
     for (const Polygon &polygon : boundary_src.holes)
         polygons_src.emplace_back(&polygon);
 
-    connect_infill(std::move(infill_ordered), polygons_src, get_extents(boundary_src.contour), polylines_out, spacing, params, hook_length);
+    connect_infill(std::move(infill_ordered), polygons_src, get_extents(boundary_src.contour), polylines_out, spacing, params);
 }
 
-void Fill::connect_infill(Polylines &&infill_ordered, const Polygons &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length)
+void Fill::connect_infill(Polylines &&infill_ordered, const Polygons &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params)
 {
     auto polygons_src = reserve_vector<const Polygon*>(boundary_src.size());
     for (const Polygon &polygon : boundary_src)
         polygons_src.emplace_back(&polygon);
 
-    connect_infill(std::move(infill_ordered), polygons_src, bbox, polylines_out, spacing, params, hook_length);
+    connect_infill(std::move(infill_ordered), polygons_src, bbox, polylines_out, spacing, params);
 }
 
-void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length)
+void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params)
 {
 	assert(! infill_ordered.empty());
+    const auto anchor_length = float(scale_(params.anchor_length));
 
 #if 0
     append(polylines_out, infill_ordered);
@@ -1295,9 +1130,9 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
 				contour_dst.emplace_back(contour_src.points[idx_point]);
 				for (; it != it_end && it->first.contour_idx == idx_contour && it->first.start_point_idx == idx_point; ++ it) {
 					// Add these points to the destination contour.
-#ifndef NDEBUG
                     const Polyline  &infill_line = infill_ordered[it->second / 2];
                     const Point     &pt          = (it->second & 1) ? infill_line.points.back() : infill_line.points.front();
+#ifndef NDEBUG
                     {
 					    const Vec2d pt1 = contour_src[idx_point].cast<double>();
 					    const Vec2d pt2 = (idx_point + 1 == contour_src.size() ? contour_src.points.front() : contour_src.points[idx_point + 1]).cast<double>();
@@ -1352,8 +1187,11 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
         // Mark the points and segments of split boundary as consumed if they are very close to some of the infill line.
         {
             // @supermerill used 2. * scale_(spacing)
-            const double clip_distance      = 3. * scale_(spacing);
-            const double distance_colliding = 1.1 * scale_(spacing);
+            const double clip_distance      = 1.7 * scale_(spacing);
+            // Allow a bit of overlap. This value must be slightly higher than the overlap of FillAdaptive, otherwise
+            // the anchors of the adaptive infill will mask the other side of the perimeter line.
+            // (see connect_lines_using_hooks() in FillAdaptive.cpp)
+            const double distance_colliding = 0.8 * scale_(spacing);
             mark_boundary_segments_touching_infill(boundary, boundary_params, boundary_intersection_points, bbox, infill_ordered, clip_distance, distance_colliding);
         }
 	}
@@ -1402,8 +1240,10 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
         return std::numeric_limits<size_t>::max();
     };
 
-    const float take_max_length = hook_length > 0.f ? hook_length : std::numeric_limits<float>::max();
+    const float take_max_length = anchor_length > 0.f ? anchor_length : std::numeric_limits<float>::max();
     const float line_half_width = 0.5f * scale_(spacing);
+
+#if 0
     for (ConnectionCost &connection_cost : connections_sorted) {
 		ContourIntersectionPoint *cp1    = &map_infill_end_point_to_boundary[connection_cost.idx_first * 2 + 1];
 		ContourIntersectionPoint *cp2    = &map_infill_end_point_to_boundary[(connection_cost.idx_first + 1) * 2];
@@ -1419,17 +1259,16 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
             ContourIntersectionPoint *cp_high = connection_cost.reversed ? cp1 : cp2;
             assert(std::abs(length - closed_contour_distance_ccw(cp_low->param, cp_high->param, boundary_params[cp1->contour_idx].back())) < SCALED_EPSILON);
             could_connect = ! cp_low->next_trimmed && ! cp_high->prev_trimmed;
-            if (! could_connect && cp_low->next_on_contour != cp_high) {
+            if (could_connect && cp_low->next_on_contour != cp_high) {
                 // Other end of cp1, may or may not be on the same contour as cp1.
-                const ContourIntersectionPoint* cp1prev = cp1 - 1;
+                const ContourIntersectionPoint *cp1prev = cp1 - 1;
                 // Other end of cp2, may or may not be on the same contour as cp2.
-                const ContourIntersectionPoint* cp2next = cp2 + 1;
-                for (auto *cp = cp_low->next_on_contour; cp->next_on_contour != cp_high; cp = cp->next_on_contour) {
+                const ContourIntersectionPoint *cp2next = cp2 + 1;
+                for (auto *cp = cp_low->next_on_contour; cp != cp_high; cp = cp->next_on_contour)
                     if (cp->consumed || cp == cp1prev || cp == cp2next || cp->prev_trimmed || cp->next_trimmed) {
                         could_connect = false;
                         break;
                     }
-                }
             }
         }
         // Indices of the polylines to be connected by a perimeter segment.
@@ -1438,7 +1277,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
         idx_first = get_and_update_merged_with(idx_first);
         assert(idx_first < idx_second);
         assert(idx_second == merged_with[idx_second]);
-        if (could_connect && (hook_length == 0.f || length < hook_length * 2.5)) {
+        if (could_connect && (anchor_length == 0.f || length < anchor_length * 2.5)) {
             // Take the complete contour.
             // Connect the two polygons using the boundary contour.
             take(infill_ordered[idx_first], infill_ordered[idx_second], boundary[cp1->contour_idx], cp1, cp2, connection_cost.reversed);
@@ -1451,6 +1290,56 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
             take_limited(infill_ordered[idx_second], boundary[cp1->contour_idx], boundary_params[cp1->contour_idx], cp2, cp1, ! connection_cost.reversed, take_max_length, line_half_width);
         }
 	}
+#endif
+
+    struct Arc {
+        ContourIntersectionPoint    *intersection;
+        float                        arc_length;
+    };
+    std::vector<Arc> arches;
+    arches.reserve(map_infill_end_point_to_boundary.size());
+    for (ContourIntersectionPoint &cp : map_infill_end_point_to_boundary)
+        if (! cp.contour_idx != boundary_idx_unconnected && cp.next_on_contour != &cp && cp.could_connect_next())
+            arches.push_back({ &cp, path_length_along_contour_ccw(&cp, cp.next_on_contour, boundary_params[cp.contour_idx].back()) });
+    std::sort(arches.begin(), arches.end(), [](const auto &l, const auto &r) { return l.arc_length < r.arc_length; });
+
+    for (Arc &arc : arches)
+        if (! arc.intersection->consumed && ! arc.intersection->next_on_contour->consumed) {
+            // Indices of the polylines to be connected by a perimeter segment.
+            ContourIntersectionPoint *cp1            = arc.intersection;
+            ContourIntersectionPoint *cp2            = arc.intersection->next_on_contour;
+            size_t                    polyline_idx1  = get_and_update_merged_with(((cp1 - map_infill_end_point_to_boundary.data()) / 2));
+            size_t                    polyline_idx2  = get_and_update_merged_with(((cp2 - map_infill_end_point_to_boundary.data()) / 2));
+            const Points             &contour        = boundary[cp1->contour_idx];
+            const std::vector<float> &contour_params = boundary_params[cp1->contour_idx];
+            if (polyline_idx1 != polyline_idx2) {
+                Polyline &polyline1 = infill_ordered[polyline_idx1];
+                Polyline &polyline2 = infill_ordered[polyline_idx2];
+                if (anchor_length == 0.f || arc.arc_length < anchor_length * 2.5) {
+                    // Not closing a loop, connecting the lines.
+                    assert(contour[cp1->point_idx] == polyline1.points.front() || contour[cp1->point_idx] == polyline1.points.back());
+                    if (contour[cp1->point_idx] == polyline1.points.front())
+                        polyline1.reverse();
+                    assert(contour[cp2->point_idx] == polyline2.points.front() || contour[cp2->point_idx] == polyline2.points.back());
+                    if (contour[cp2->point_idx] == polyline2.points.back())
+                        polyline2.reverse();
+                    take(polyline1, polyline2, contour, cp1, cp2, false);
+                    // Mark the second polygon as merged with the first one.
+                    if (polyline_idx2 < polyline_idx1) {
+                        polyline2 = std::move(polyline1);
+                        polyline1.points.clear();
+                        merged_with[polyline_idx1] = merged_with[polyline_idx2];
+                    } else {
+                        polyline2.points.clear();
+                        merged_with[polyline_idx2] = merged_with[polyline_idx1];
+                    }
+                } else {
+                    // Move along the perimeter, but don't take the whole arc.
+                    take_limited(polyline1, contour, contour_params, cp1, cp2, false, anchor_length, line_half_width);
+                    take_limited(polyline2, contour, contour_params, cp2, cp1, true,  anchor_length, line_half_width);
+                }
+            }
+        }
 
     // Connect the remaining open infill lines to the perimeter lines if possible.
     for (ContourIntersectionPoint &contour_point : map_infill_end_point_to_boundary)
@@ -1471,7 +1360,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
             assert(contour[contour_point.point_idx] == polyline.points.front() || contour[contour_point.point_idx] == polyline.points.back());
             bool connected = false;
             for (float l : { std::min(lprev, lnext), std::max(lprev, lnext) }) {
-                if (l == std::numeric_limits<float>::max() || (hook_length > 0.f && l > hook_length * 2.5))
+                if (l == std::numeric_limits<float>::max() || (anchor_length > 0.f && l > anchor_length * 2.5))
                     break;
                 // Take the complete contour.
                 bool      reversed      = l == lprev;
@@ -1525,6 +1414,4 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
 			polylines_out.emplace_back(std::move(pl));
 }
 
-#endif
-
 } // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index 87885e655..2d225a73d 100644
--- a/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
@@ -37,6 +37,9 @@ struct FillParams
     // Fill density, fraction in <0, 1>
     float       density 		{ 0.f };
 
+    // Length of an infill anchor along the perimeter.
+    float       anchor_length   { std::numeric_limits<float>::max() };
+
     // Don't connect the fill lines around the inner perimeter.
     bool        dont_connect 	{ false };
 
@@ -124,9 +127,9 @@ protected:
     virtual std::pair<float, Point> _infill_direction(const Surface *surface) const;
 
 public:
-    static void connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length = 0);
-    static void connect_infill(Polylines &&infill_ordered, const Polygons &boundary, const BoundingBox& bbox, Polylines &polylines_out, const double spacing, const FillParams &params, const int hook_length = 0);
-    static void connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary, const BoundingBox &bbox, Polylines &polylines_out, double spacing, const FillParams &params, const int hook_length = 0);
+    static void connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary, Polylines &polylines_out, const double spacing, const FillParams &params);
+    static void connect_infill(Polylines &&infill_ordered, const Polygons &boundary, const BoundingBox& bbox, Polylines &polylines_out, const double spacing, const FillParams &params);
+    static void connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary, const BoundingBox &bbox, Polylines &polylines_out, double spacing, const FillParams &params);
 
     static coord_t  _adjust_solid_spacing(const coord_t width, const coord_t distance);
 
diff --git a/src/libslic3r/Fill/FillRectilinear2.cpp b/src/libslic3r/Fill/FillRectilinear2.cpp
index a110dd144..0da865ba8 100644
--- a/src/libslic3r/Fill/FillRectilinear2.cpp
+++ b/src/libslic3r/Fill/FillRectilinear2.cpp
@@ -2778,6 +2778,7 @@ bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillPa
         return true;
 
     Polylines fill_lines;
+    coord_t line_width   = coord_t(scale_(this->spacing));
     coord_t line_spacing = coord_t(scale_(this->spacing) / params.density);
     std::pair<float, Point> rotate_vector = this->_infill_direction(surface);
     for (const SweepParams &sweep : sweep_params) {
@@ -2787,6 +2788,9 @@ bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillPa
         double angle = rotate_vector.first + sweep.angle_base;
         ExPolygonWithOffset poly_with_offset(poly_with_offset_base, - angle);
         BoundingBox bounding_box = poly_with_offset.bounding_box_src();
+        // Don't produce infill lines, which fully overlap with the infill perimeter.
+        coord_t     x_min = bounding_box.min.x() + line_width + coord_t(SCALED_EPSILON);
+        coord_t     x_max = bounding_box.max.x() - line_width - coord_t(SCALED_EPSILON);
         // extend bounding box so that our pattern will be aligned with other layers
         // Transform the reference point to the rotated coordinate system.
         Point refpt = rotate_vector.second.rotated(- angle);
@@ -2800,20 +2804,23 @@ bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillPa
         const size_t n_vlines = (bounding_box.max.x() - bounding_box.min.x() + line_spacing - 1) / line_spacing;
         const double cos_a    = cos(angle);
         const double sin_a    = sin(angle);
-        for (const SegmentedIntersectionLine &vline : slice_region_by_vertical_lines(poly_with_offset, n_vlines, bounding_box.min.x(), line_spacing)) {
-            for (auto it = vline.intersections.begin(); it != vline.intersections.end();) {
-                auto it_low  = it ++;
-                assert(it_low->type == SegmentIntersection::OUTER_LOW);
-                if (it_low->type != SegmentIntersection::OUTER_LOW)
-                    continue;
-                auto it_high = it;
-                assert(it_high->type == SegmentIntersection::OUTER_HIGH);
-                if (it_high->type == SegmentIntersection::OUTER_HIGH) {
-                    fill_lines.emplace_back(Point(vline.pos, it_low->pos()).rotated(cos_a, sin_a), Point(vline.pos, it_high->pos()).rotated(cos_a, sin_a));
-                    ++ it;
+        for (const SegmentedIntersectionLine &vline : slice_region_by_vertical_lines(poly_with_offset, n_vlines, bounding_box.min.x(), line_spacing))
+            if (vline.pos > x_min) {
+                if (vline.pos >= x_max)
+                    break;
+                for (auto it = vline.intersections.begin(); it != vline.intersections.end();) {
+                    auto it_low  = it ++;
+                    assert(it_low->type == SegmentIntersection::OUTER_LOW);
+                    if (it_low->type != SegmentIntersection::OUTER_LOW)
+                        continue;
+                    auto it_high = it;
+                    assert(it_high->type == SegmentIntersection::OUTER_HIGH);
+                    if (it_high->type == SegmentIntersection::OUTER_HIGH) {
+                        fill_lines.emplace_back(Point(vline.pos, it_low->pos()).rotated(cos_a, sin_a), Point(vline.pos, it_high->pos()).rotated(cos_a, sin_a));
+                        ++ it;
+                    }
                 }
             }
-        }
     }
 
     if (fill_lines.size() > 1)
@@ -2821,11 +2828,8 @@ bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillPa
 
     if (params.dont_connect || fill_lines.size() <= 1)
         append(polylines_out, std::move(fill_lines));
-    else {
-//        coord_t hook_length = 0;
-        coord_t hook_length = coord_t(scale_(this->spacing)) * 5;
-        connect_infill(std::move(fill_lines), poly_with_offset_base.polygons_outer, get_extents(surface->expolygon.contour), polylines_out, this->spacing, params, hook_length);
-    }
+    else
+        connect_infill(std::move(fill_lines), poly_with_offset_base.polygons_outer, get_extents(surface->expolygon.contour), polylines_out, this->spacing, params);
 
     return true;
 }
diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp
index 1982a91fb..a245adb89 100644
--- a/src/libslic3r/Preset.cpp
+++ b/src/libslic3r/Preset.cpp
@@ -427,7 +427,7 @@ const std::vector<std::string>& Preset::print_options()
         "infill_extruder", "solid_infill_extruder", "support_material_extruder", "support_material_interface_extruder",
         "ooze_prevention", "standby_temperature_delta", "interface_shells", "extrusion_width", "first_layer_extrusion_width",
         "perimeter_extrusion_width", "external_perimeter_extrusion_width", "infill_extrusion_width", "solid_infill_extrusion_width",
-        "top_infill_extrusion_width", "support_material_extrusion_width", "infill_overlap", "bridge_flow_ratio", "clip_multipart_objects",
+        "top_infill_extrusion_width", "support_material_extrusion_width", "infill_overlap", "infill_anchor", "bridge_flow_ratio", "clip_multipart_objects",
         "elefant_foot_compensation", "xy_size_compensation", "threads", "resolution", "wipe_tower", "wipe_tower_x", "wipe_tower_y",
         "wipe_tower_width", "wipe_tower_rotation_angle", "wipe_tower_bridging", "single_extruder_multi_material_priming",
         "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits"
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index ee4a0945e..c6b1fc309 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -1050,6 +1050,16 @@ void PrintConfigDef::init_fff_params()
     def->mode = comAdvanced;
     def->set_default_value(new ConfigOptionInt(1));
 
+    def = this->add("infill_anchor", coFloatOrPercent);
+    def->label = L("Length of the infill anchor");
+    def->category = L("Advanced");
+    def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
+                     "If expressed as percentage (example: 15%) it is calculated over infill extrusion width.");
+    def->sidetext = L("mm or %");
+    def->ratio_over = "infill_extrusion_width";
+    def->mode = comAdvanced;
+    def->set_default_value(new ConfigOptionFloatOrPercent(300, true));
+
     def = this->add("infill_extruder", coInt);
     def->label = L("Infill extruder");
     def->category = L("Extruders");
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 89c9c7a97..790e15af6 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -530,6 +530,7 @@ public:
     ConfigOptionPercent             fill_density;
     ConfigOptionEnum<InfillPattern> fill_pattern;
     ConfigOptionFloat               gap_fill_speed;
+    ConfigOptionFloatOrPercent      infill_anchor;
     ConfigOptionInt                 infill_extruder;
     ConfigOptionFloatOrPercent      infill_extrusion_width;
     ConfigOptionInt                 infill_every_layers;
@@ -581,6 +582,7 @@ protected:
         OPT_PTR(fill_density);
         OPT_PTR(fill_pattern);
         OPT_PTR(gap_fill_speed);
+        OPT_PTR(infill_anchor);
         OPT_PTR(infill_extruder);
         OPT_PTR(infill_extrusion_width);
         OPT_PTR(infill_every_layers);
diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp
index db654bb34..3937f4fed 100644
--- a/src/libslic3r/PrintObject.cpp
+++ b/src/libslic3r/PrintObject.cpp
@@ -590,7 +590,7 @@ bool PrintObject::invalidate_state_by_config_options(const std::vector<t_config_
             || opt_key == "external_fill_link_max_length"
             || opt_key == "fill_angle"
             || opt_key == "fill_pattern"
-            || opt_key == "fill_link_max_length"
+            || opt_key == "infill_anchor"
             || opt_key == "top_infill_extrusion_width"
             || opt_key == "first_layer_extrusion_width") {
             steps.emplace_back(posInfill);
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index f4bd92728..2aae37ab6 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -1424,6 +1424,7 @@ void TabPrint::build()
         optgroup->append_single_option_line("fill_pattern", category_path + "fill-pattern");
         optgroup->append_single_option_line("top_fill_pattern", category_path + "top-fill-pattern");
         optgroup->append_single_option_line("bottom_fill_pattern", category_path + "bottom-fill-pattern");
+        optgroup->append_single_option_line("infill_anchor", category_path + "fill-pattern");
 
         optgroup = page->new_optgroup(L("Ironing"));
         optgroup->append_single_option_line("ironing");
diff --git a/xs/lib/Slic3r/XS.pm b/xs/lib/Slic3r/XS.pm
index 3073d068e..fa4dde43a 100644
--- a/xs/lib/Slic3r/XS.pm
+++ b/xs/lib/Slic3r/XS.pm
@@ -145,7 +145,6 @@ package Slic3r::Filler;
 sub fill_surface {
     my ($self, $surface, %args) = @_;
     $self->set_density($args{density}) if defined($args{density});
-    $self->set_dont_connect($args{dont_connect}) if defined($args{dont_connect});
     $self->set_dont_adjust($args{dont_adjust}) if defined($args{dont_adjust});
     $self->set_complete($args{complete}) if defined($args{complete});
     return $self->_fill_surface($surface);
diff --git a/xs/xsp/Filler.xsp b/xs/xsp/Filler.xsp
index 647d851eb..caeb2af9a 100644
--- a/xs/xsp/Filler.xsp
+++ b/xs/xsp/Filler.xsp
@@ -34,8 +34,6 @@
 
     void set_density(float density)
         %code{% THIS->params.density = density; %};
-    void set_dont_connect(bool dont_connect)
-        %code{% THIS->params.dont_connect = dont_connect; %};
     void set_dont_adjust(bool dont_adjust)
         %code{% THIS->params.dont_adjust = dont_adjust; %};
     void set_complete(bool complete)

From e9fa36ea7d94ae38eb150194f1d3d96f34e99b71 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 16 Nov 2020 11:16:44 +0100
Subject: [PATCH 027/138] Fillers: Removal of old FillRectilinear, using of
 "override" instead of "virtual" where applicable.

---
 src/libslic3r/Fill/Fill.hpp             |  4 +--
 src/libslic3r/Fill/Fill3DHoneycomb.hpp  | 10 +++---
 src/libslic3r/Fill/FillAdaptive.hpp     | 10 +++---
 src/libslic3r/Fill/FillBase.cpp         |  1 -
 src/libslic3r/Fill/FillBase.hpp         |  1 +
 src/libslic3r/Fill/FillConcentric.hpp   | 10 +++---
 src/libslic3r/Fill/FillGyroid.hpp       |  8 ++---
 src/libslic3r/Fill/FillHoneycomb.hpp    | 10 +++---
 src/libslic3r/Fill/FillPlanePath.hpp    | 32 ++++++++---------
 src/libslic3r/Fill/FillRectilinear.cpp  |  7 +---
 src/libslic3r/Fill/FillRectilinear.hpp  | 44 ++++-------------------
 src/libslic3r/Fill/FillRectilinear2.cpp | 26 +++-----------
 src/libslic3r/Fill/FillRectilinear2.hpp | 46 ++++++++++++-------------
 13 files changed, 78 insertions(+), 131 deletions(-)

diff --git a/src/libslic3r/Fill/Fill.hpp b/src/libslic3r/Fill/Fill.hpp
index 64963495a..e92ab2dee 100644
--- a/src/libslic3r/Fill/Fill.hpp
+++ b/src/libslic3r/Fill/Fill.hpp
@@ -19,10 +19,10 @@ class LayerRegion;
 class Filler
 {
 public:
-    Filler() : fill(NULL) {}
+    Filler() : fill(nullptr) {}
     ~Filler() { 
         delete fill; 
-        fill = NULL;
+        fill = nullptr;
     }
     Fill        *fill;
     FillParams   params;
diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.hpp b/src/libslic3r/Fill/Fill3DHoneycomb.hpp
index 52b792251..92c459a8d 100644
--- a/src/libslic3r/Fill/Fill3DHoneycomb.hpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.hpp
@@ -12,19 +12,19 @@ namespace Slic3r {
 class Fill3DHoneycomb : public Fill
 {
 public:
-    virtual Fill* clone() const { return new Fill3DHoneycomb(*this); };
-    virtual ~Fill3DHoneycomb() {}
+    Fill* clone() const override { return new Fill3DHoneycomb(*this); };
+    ~Fill3DHoneycomb() override {}
 
 	// require bridge flow since most of this pattern hangs in air
-    virtual bool use_bridge_flow() const { return true; }
+    bool use_bridge_flow() const override { return true; }
 
 protected:
-	virtual void _fill_surface_single(
+	void _fill_surface_single(
 	    const FillParams                &params, 
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction, 
 	    ExPolygon                       &expolygon, 
-	    Polylines                       &polylines_out);
+	    Polylines                       &polylines_out) override;
 };
 
 } // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillAdaptive.hpp b/src/libslic3r/Fill/FillAdaptive.hpp
index f10c40b99..01d9efb10 100644
--- a/src/libslic3r/Fill/FillAdaptive.hpp
+++ b/src/libslic3r/Fill/FillAdaptive.hpp
@@ -56,17 +56,17 @@ FillAdaptive::OctreePtr         build_octree(
 class Filler : public Slic3r::Fill
 {
 public:
-    virtual ~Filler() {}
+    ~Filler() override {}
 
 protected:
-    virtual Fill* clone() const { return new Filler(*this); };
-	virtual void _fill_surface_single(
+    Fill* clone() const override { return new Filler(*this); };
+	void _fill_surface_single(
 	    const FillParams                &params,
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction,
 	    ExPolygon                       &expolygon,
-	    Polylines                       &polylines_out);
-	virtual bool no_sort() const { return true; }
+	    Polylines                       &polylines_out) override;
+	bool no_sort() const override { return true; }
 };
 
 }; // namespace FillAdaptive
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 782545114..87a4c23b6 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -34,7 +34,6 @@ Fill* Fill::new_from_type(const InfillPattern type)
     case ipTriangles:           return new FillTriangles();
     case ipStars:               return new FillStars();
     case ipCubic:               return new FillCubic();
-//  case ipGrid:                return new FillGrid();
     case ipArchimedeanChords:   return new FillArchimedeanChords();
     case ipHilbertCurve:        return new FillHilbertCurve();
     case ipOctagramSpiral:      return new FillOctagramSpiral();
diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index 2d225a73d..f73e6f528 100644
--- a/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
@@ -83,6 +83,7 @@ public:
 
 public:
     virtual ~Fill() {}
+    virtual Fill* clone() const = 0;
 
     static Fill* new_from_type(const InfillPattern type);
     static Fill* new_from_type(const std::string &type);
diff --git a/src/libslic3r/Fill/FillConcentric.hpp b/src/libslic3r/Fill/FillConcentric.hpp
index 1286858ea..72adad3a4 100644
--- a/src/libslic3r/Fill/FillConcentric.hpp
+++ b/src/libslic3r/Fill/FillConcentric.hpp
@@ -8,18 +8,18 @@ namespace Slic3r {
 class FillConcentric : public Fill
 {
 public:
-    virtual ~FillConcentric() {}
+    ~FillConcentric() override {}
 
 protected:
-    virtual Fill* clone() const { return new FillConcentric(*this); };
-	virtual void _fill_surface_single(
+    Fill* clone() const override { return new FillConcentric(*this); };
+	void _fill_surface_single(
 	    const FillParams                &params, 
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction, 
 	    ExPolygon                       &expolygon, 
-	    Polylines                       &polylines_out);
+	    Polylines                       &polylines_out) override;
 
-	virtual bool no_sort() const { return true; }
+	bool no_sort() const override { return true; }
 };
 
 } // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillGyroid.hpp b/src/libslic3r/Fill/FillGyroid.hpp
index 37babb25e..4d45c47b0 100644
--- a/src/libslic3r/Fill/FillGyroid.hpp
+++ b/src/libslic3r/Fill/FillGyroid.hpp
@@ -11,10 +11,10 @@ class FillGyroid : public Fill
 {
 public:
     FillGyroid() {}
-    virtual Fill* clone() const { return new FillGyroid(*this); }
+    Fill* clone() const override { return new FillGyroid(*this); }
 
     // require bridge flow since most of this pattern hangs in air
-    virtual bool use_bridge_flow() const { return false; }
+    bool use_bridge_flow() const override { return false; }
 
     // Correction applied to regular infill angle to maximize printing
     // speed in default configuration (degrees)
@@ -28,12 +28,12 @@ public:
 
 
 protected:
-    virtual void _fill_surface_single(
+    void _fill_surface_single(
         const FillParams                &params, 
         unsigned int                     thickness_layers,
         const std::pair<float, Point>   &direction, 
         ExPolygon                       &expolygon, 
-        Polylines                       &polylines_out);
+        Polylines                       &polylines_out) override;
 };
 
 } // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillHoneycomb.hpp b/src/libslic3r/Fill/FillHoneycomb.hpp
index 4717602d4..98a5f7a59 100644
--- a/src/libslic3r/Fill/FillHoneycomb.hpp
+++ b/src/libslic3r/Fill/FillHoneycomb.hpp
@@ -12,16 +12,16 @@ namespace Slic3r {
 class FillHoneycomb : public Fill
 {
 public:
-    virtual ~FillHoneycomb() {}
+    ~FillHoneycomb() override {}
 
 protected:
-    virtual Fill* clone() const { return new FillHoneycomb(*this); };
-	virtual void _fill_surface_single(
+    Fill* clone() const override { return new FillHoneycomb(*this); };
+	void _fill_surface_single(
 	    const FillParams                &params, 
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction, 
 	    ExPolygon                       &expolygon, 
-	    Polylines                       &polylines_out);
+	    Polylines                       &polylines_out) override;
 
 	// Caching the 
 	struct CacheID 
@@ -49,7 +49,7 @@ protected:
     typedef std::map<CacheID, CacheData> Cache;
 	Cache cache;
 
-    virtual float _layer_angle(size_t idx) const { return float(M_PI/3.) * (idx % 3); }
+    float _layer_angle(size_t idx) const override { return float(M_PI/3.) * (idx % 3); }
 };
 
 } // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillPlanePath.hpp b/src/libslic3r/Fill/FillPlanePath.hpp
index 49fb2b387..fe6b94162 100644
--- a/src/libslic3r/Fill/FillPlanePath.hpp
+++ b/src/libslic3r/Fill/FillPlanePath.hpp
@@ -16,17 +16,17 @@ namespace Slic3r {
 class FillPlanePath : public Fill
 {
 public:
-    virtual ~FillPlanePath() {}
+    ~FillPlanePath() override = default;
 
 protected:
-    virtual void _fill_surface_single(
+    void _fill_surface_single(
         const FillParams                &params, 
         unsigned int                     thickness_layers,
         const std::pair<float, Point>   &direction, 
         ExPolygon                       &expolygon, 
-        Polylines                       &polylines_out);
+        Polylines                       &polylines_out) override;
 
-    virtual float _layer_angle(size_t idx) const { return 0.f; }
+    float _layer_angle(size_t idx) const override { return 0.f; }
     virtual bool  _centered() const = 0;
     virtual Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y) = 0;
 };
@@ -34,34 +34,34 @@ protected:
 class FillArchimedeanChords : public FillPlanePath
 {
 public:
-    virtual Fill* clone() const { return new FillArchimedeanChords(*this); };
-    virtual ~FillArchimedeanChords() {}
+    Fill* clone() const override { return new FillArchimedeanChords(*this); };
+    ~FillArchimedeanChords() override = default;
 
 protected:
-    virtual bool  _centered() const { return true; }
-    virtual Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y);
+    bool  _centered() const override { return true; }
+    Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y) override;
 };
 
 class FillHilbertCurve : public FillPlanePath
 {
 public:
-    virtual Fill* clone() const { return new FillHilbertCurve(*this); };
-    virtual ~FillHilbertCurve() {}
+    Fill* clone() const override { return new FillHilbertCurve(*this); };
+    ~FillHilbertCurve() override = default;
 
 protected:
-    virtual bool  _centered() const { return false; }
-    virtual Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y);
+    bool  _centered() const override { return false; }
+    Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y) override;
 };
 
 class FillOctagramSpiral : public FillPlanePath
 {
 public:
-    virtual Fill* clone() const { return new FillOctagramSpiral(*this); };
-    virtual ~FillOctagramSpiral() {}
+    Fill* clone() const override { return new FillOctagramSpiral(*this); };
+    ~FillOctagramSpiral() override = default;
 
 protected:
-    virtual bool  _centered() const { return true; }
-    virtual Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y);
+    bool  _centered() const override { return true; }
+    Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y) override;
 };
 
 } // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp
index 629e5b6f4..c8c75f302 100644
--- a/src/libslic3r/Fill/FillRectilinear.cpp
+++ b/src/libslic3r/Fill/FillRectilinear.cpp
@@ -7,7 +7,7 @@
 
 namespace Slic3r {
 
-void FillRectilinear::_fill_surface_single(
+void FillLine::_fill_surface_single(
     const FillParams                &params,
     unsigned int                     thickness_layers,
     const std::pair<float, Point>   &direction,
@@ -42,11 +42,6 @@ void FillRectilinear::_fill_surface_single(
     Lines lines;
     for (coord_t x = bounding_box.min(0); x <= x_max; x += this->_line_spacing)
         lines.push_back(this->_line(lines.size(), x, bounding_box.min(1), bounding_box.max(1)));
-    if (this->_horizontal_lines()) {
-        coord_t y_max = bounding_box.max(1) + SCALED_EPSILON;
-        for (coord_t y = bounding_box.min(1); y <= y_max; y += this->_line_spacing)
-            lines.push_back(Line(Point(bounding_box.min(0), y), Point(bounding_box.max(0), y)));
-    }
 
     // clip paths against a slightly larger expolygon, so that the first and last paths
     // are kept even if the expolygon has vertical sides
diff --git a/src/libslic3r/Fill/FillRectilinear.hpp b/src/libslic3r/Fill/FillRectilinear.hpp
index 1be85f755..b7d27de22 100644
--- a/src/libslic3r/Fill/FillRectilinear.hpp
+++ b/src/libslic3r/Fill/FillRectilinear.hpp
@@ -9,19 +9,19 @@ namespace Slic3r {
 
 class Surface;
 
-class FillRectilinear : public Fill
+class FillLine : public Fill
 {
 public:
-    virtual Fill* clone() const { return new FillRectilinear(*this); };
-    virtual ~FillRectilinear() {}
+    Fill* clone() const override { return new FillLine(*this); };
+    ~FillLine() override = default;
 
 protected:
-	virtual void _fill_surface_single(
+	void _fill_surface_single(
 	    const FillParams                &params, 
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction, 
 	    ExPolygon                       &expolygon, 
-	    Polylines                       &polylines_out);
+	    Polylines                       &polylines_out) override;
 
 	coord_t _min_spacing;
 	coord_t _line_spacing;
@@ -30,30 +30,12 @@ protected:
 	// only for line infill
 	coord_t _line_oscillation;
 
-	// Enabled for the grid infill, disabled for the rectilinear and line infill.
-	virtual bool _horizontal_lines() const { return false; }
-
-	virtual Line _line(int i, coord_t x, coord_t y_min, coord_t y_max) const 
-		{ return Line(Point(x, y_min), Point(x, y_max)); }
-	
-	virtual bool _can_connect(coord_t dist_X, coord_t dist_Y) {
-	    return dist_X <= this->_diagonal_distance
-	        && dist_Y <= this->_diagonal_distance;
-    }
-};
-
-class FillLine : public FillRectilinear
-{
-public:
-    virtual ~FillLine() {}
-
-protected:
-	virtual Line _line(int i, coord_t x, coord_t y_min, coord_t y_max) const {
+	Line _line(int i, coord_t x, coord_t y_min, coord_t y_max) const {
 		coord_t osc = (i & 1) ? this->_line_oscillation : 0;
 		return Line(Point(x - osc, y_min), Point(x + osc, y_max));
 	}
 
-	virtual bool _can_connect(coord_t dist_X, coord_t dist_Y)
+	bool _can_connect(coord_t dist_X, coord_t dist_Y)
 	{
 	    coord_t TOLERANCE = 10 * SCALED_EPSILON;
     	return (dist_X >= (this->_line_spacing - this->_line_oscillation) - TOLERANCE)
@@ -62,18 +44,6 @@ protected:
     }
 };
 
-class FillGrid : public FillRectilinear
-{
-public:
-    virtual ~FillGrid() {}
-
-protected:
-	// The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill.
-    virtual float _layer_angle(size_t idx) const { return 0.f; }
-	// Flag for Slic3r::Fill::Rectilinear to fill both directions.
-	virtual bool _horizontal_lines() const { return true; }
-};
-
 }; // namespace Slic3r
 
 #endif // slic3r_FillRectilinear_hpp_
diff --git a/src/libslic3r/Fill/FillRectilinear2.cpp b/src/libslic3r/Fill/FillRectilinear2.cpp
index 0da865ba8..d8e0e746a 100644
--- a/src/libslic3r/Fill/FillRectilinear2.cpp
+++ b/src/libslic3r/Fill/FillRectilinear2.cpp
@@ -2762,9 +2762,6 @@ bool FillRectilinear2::fill_surface_by_lines(const Surface *surface, const FillP
     return true;
 }
 
-#define FILL_MULTIPLE_SWEEPS_NEW
-
-#ifdef FILL_MULTIPLE_SWEEPS_NEW
 bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out)
 {
     assert(sweep_params.size() > 1);
@@ -2823,30 +2820,15 @@ bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillPa
             }
     }
 
-    if (fill_lines.size() > 1)
-        fill_lines = chain_polylines(std::move(fill_lines));
-
-    if (params.dont_connect || fill_lines.size() <= 1)
+    if (params.dont_connect || fill_lines.size() <= 1) {
+        if (fill_lines.size() > 1)
+            fill_lines = chain_polylines(std::move(fill_lines));
         append(polylines_out, std::move(fill_lines));
-    else
+    } else
         connect_infill(std::move(fill_lines), poly_with_offset_base.polygons_outer, get_extents(surface->expolygon.contour), polylines_out, this->spacing, params);
 
     return true;
 }
-#else
-bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out)
-{
-    params.density /= double(sweep_params.size());
-    bool success = true;
-    int  idx = 0;
-    for (const SweepParams &sweep_param : sweep_params) {
-        if (++ idx == 3)
-            params.dont_connect = true;
-        success &= this->fill_surface_by_lines(surface, params, sweep_param.angle_base, sweep_param.pattern_shift, polylines_out);
-    }
-    return success;
-}
-#endif
 
 Polylines FillRectilinear2::fill_surface(const Surface *surface, const FillParams &params)
 {
diff --git a/src/libslic3r/Fill/FillRectilinear2.hpp b/src/libslic3r/Fill/FillRectilinear2.hpp
index 1d8c61a94..4ceb0d2b6 100644
--- a/src/libslic3r/Fill/FillRectilinear2.hpp
+++ b/src/libslic3r/Fill/FillRectilinear2.hpp
@@ -12,9 +12,9 @@ class Surface;
 class FillRectilinear2 : public Fill
 {
 public:
-    virtual Fill* clone() const { return new FillRectilinear2(*this); };
-    virtual ~FillRectilinear2() = default;
-    virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
+    Fill* clone() const override { return new FillRectilinear2(*this); };
+    ~FillRectilinear2() override = default;
+    Polylines fill_surface(const Surface *surface, const FillParams &params) override;
 
 protected:
     // Fill by single directional lines, interconnect the lines along perimeters.
@@ -32,58 +32,58 @@ protected:
 class FillMonotonic : public FillRectilinear2
 {
 public:
-    virtual Fill* clone() const { return new FillMonotonic(*this); };
-    virtual ~FillMonotonic() = default;
-    virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
-	virtual bool no_sort() const { return true; }
+    Fill* clone() const override { return new FillMonotonic(*this); };
+    ~FillMonotonic() override = default;
+    Polylines fill_surface(const Surface *surface, const FillParams &params) override;
+	bool no_sort() const override { return true; }
 };
 
 class FillGrid2 : public FillRectilinear2
 {
 public:
-    virtual Fill* clone() const { return new FillGrid2(*this); };
-    virtual ~FillGrid2() = default;
-    virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
+    Fill* clone() const override { return new FillGrid2(*this); };
+    ~FillGrid2() override = default;
+    Polylines fill_surface(const Surface *surface, const FillParams &params) override;
 
 protected:
 	// The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill.
-    virtual float _layer_angle(size_t idx) const { return 0.f; }
+    float _layer_angle(size_t idx) const override { return 0.f; }
 };
 
 class FillTriangles : public FillRectilinear2
 {
 public:
-    virtual Fill* clone() const { return new FillTriangles(*this); };
-    virtual ~FillTriangles() = default;
-    virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
+    Fill* clone() const override { return new FillTriangles(*this); };
+    ~FillTriangles() override = default;
+    Polylines fill_surface(const Surface *surface, const FillParams &params) override;
 
 protected:
 	// The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill.
-    virtual float _layer_angle(size_t idx) const { return 0.f; }
+    float _layer_angle(size_t idx) const override { return 0.f; }
 };
 
 class FillStars : public FillRectilinear2
 {
 public:
-    virtual Fill* clone() const { return new FillStars(*this); };
-    virtual ~FillStars() = default;
-    virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
+    Fill* clone() const override { return new FillStars(*this); };
+    ~FillStars() override = default;
+    Polylines fill_surface(const Surface *surface, const FillParams &params) override;
 
 protected:
     // The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill.
-    virtual float _layer_angle(size_t idx) const { return 0.f; }
+    float _layer_angle(size_t idx) const override { return 0.f; }
 };
 
 class FillCubic : public FillRectilinear2
 {
 public:
-    virtual Fill* clone() const { return new FillCubic(*this); };
-    virtual ~FillCubic() = default;
-    virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
+    Fill* clone() const override { return new FillCubic(*this); };
+    ~FillCubic() override = default;
+    Polylines fill_surface(const Surface *surface, const FillParams &params) override;
 
 protected:
 	// The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill.
-    virtual float _layer_angle(size_t idx) const { return 0.f; }
+    float _layer_angle(size_t idx) const override { return 0.f; }
 };
 
 

From 812cbade4d6cd8f157f39d78daafbaa13e030540 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 16 Nov 2020 12:51:51 +0100
Subject: [PATCH 028/138] Fills: 1) New algorithm for connecting along the
 perimeters is now applied    to Honeycomb, Hilbert and similar planar filling
 curves. 2) The old expensive path chaining is not applied if the new
 algorithm    to connect along the perimeter lines is called afterwards.

---
 src/libslic3r/Fill/Fill3DHoneycomb.cpp |  12 ++-
 src/libslic3r/Fill/FillAdaptive.cpp    |   4 +-
 src/libslic3r/Fill/FillGyroid.cpp      |   3 +-
 src/libslic3r/Fill/FillHoneycomb.cpp   |  78 +++++--------------
 src/libslic3r/Fill/FillPlanePath.cpp   | 101 ++++++++++---------------
 src/libslic3r/SupportMaterial.cpp      |   2 -
 xs/xsp/Filler.xsp                      |   2 -
 7 files changed, 69 insertions(+), 133 deletions(-)

diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
index 8aac6e49c..144a27505 100644
--- a/src/libslic3r/Fill/Fill3DHoneycomb.cpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
@@ -162,15 +162,13 @@ void Fill3DHoneycomb::_fill_surface_single(
 		pl.translate(bb.min);
 
     // clip pattern to boundaries, chain the clipped polylines
-    Polylines polylines_chained = chain_polylines(intersection_pl(polylines, to_polygons(expolygon)));
+    polylines = intersection_pl(polylines, to_polygons(expolygon));
 
     // connect lines if needed
-    if (! polylines_chained.empty()) {
-        if (params.dont_connect)
-            append(polylines_out, std::move(polylines_chained));
-        else
-            this->connect_infill(std::move(polylines_chained), expolygon, polylines_out, this->spacing, params);
-    }
+    if (params.dont_connect || polylines.size() <= 1)
+        append(polylines_out, chain_polylines(std::move(polylines)));
+    else
+        this->connect_infill(std::move(polylines), expolygon, polylines_out, this->spacing, params);
 }
 
 } // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 188deca7c..a1d592bc3 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -1333,9 +1333,9 @@ void Filler::_fill_surface_single(
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
     if (params.dont_connect || all_polylines_with_hooks.size() <= 1)
-        append(polylines_out, std::move(all_polylines_with_hooks));
+        append(polylines_out, chain_polylines(std::move(all_polylines_with_hooks)));
     else
-        connect_infill(chain_polylines(std::move(all_polylines_with_hooks)), expolygon, polylines_out, this->spacing, params);
+        connect_infill(std::move(all_polylines_with_hooks), expolygon, polylines_out, this->spacing, params);
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {
diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index 964b87cef..b0cd507bc 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -190,11 +190,10 @@ void FillGyroid::_fill_surface_single(
 			polylines.end());
 
 	if (! polylines.empty()) {
-		polylines = chain_polylines(polylines);
 		// connect lines
 		size_t polylines_out_first_idx = polylines_out.size();
 		if (params.dont_connect)
-        	append(polylines_out, std::move(polylines));
+        	append(polylines_out, chain_polylines(polylines));
         else
             this->connect_infill(std::move(polylines), expolygon, polylines_out, this->spacing, params);
 
diff --git a/src/libslic3r/Fill/FillHoneycomb.cpp b/src/libslic3r/Fill/FillHoneycomb.cpp
index 948af182b..aa0157fb9 100644
--- a/src/libslic3r/Fill/FillHoneycomb.cpp
+++ b/src/libslic3r/Fill/FillHoneycomb.cpp
@@ -18,21 +18,21 @@ void FillHoneycomb::_fill_surface_single(
     Cache::iterator it_m = this->cache.find(cache_id);
     if (it_m == this->cache.end()) {
         it_m = this->cache.insert(it_m, std::pair<CacheID, CacheData>(cache_id, CacheData()));
-        CacheData &m = it_m->second;
-        coord_t min_spacing = scale_(this->spacing);
-        m.distance = min_spacing / params.density;
-        m.hex_side = m.distance / (sqrt(3)/2);
-        m.hex_width = m.distance * 2; // $m->{hex_width} == $m->{hex_side} * sqrt(3);
-        coord_t hex_height = m.hex_side * 2;
-        m.pattern_height = hex_height + m.hex_side;
-        m.y_short = m.distance * sqrt(3)/3;
-        m.x_offset = min_spacing / 2;
-        m.y_offset = m.x_offset * sqrt(3)/3;
-        m.hex_center = Point(m.hex_width/2, m.hex_side);
+        CacheData &m        = it_m->second;
+        coord_t min_spacing = coord_t(scale_(this->spacing));
+        m.distance          = coord_t(min_spacing / params.density);
+        m.hex_side          = coord_t(m.distance / (sqrt(3)/2));
+        m.hex_width         = m.distance * 2; // $m->{hex_width} == $m->{hex_side} * sqrt(3);
+        coord_t hex_height  = m.hex_side * 2;
+        m.pattern_height    = hex_height + m.hex_side;
+        m.y_short           = coord_t(m.distance * sqrt(3)/3);
+        m.x_offset          = min_spacing / 2;
+        m.y_offset          = coord_t(m.x_offset * sqrt(3)/3);
+        m.hex_center        = Point(m.hex_width/2, m.hex_side);
     }
     CacheData &m = it_m->second;
 
-    Polygons polygons;
+    Polylines all_polylines;
     {
         // adjust actual bounding box to the nearest multiple of our hex pattern
         // and align it so that it matches across layers
@@ -52,7 +52,7 @@ void FillHoneycomb::_fill_surface_single(
 
         coord_t x = bounding_box.min(0);
         while (x <= bounding_box.max(0)) {
-            Polygon p;
+            Polyline p;
             coord_t ax[2] = { x + m.x_offset, x + m.distance - m.x_offset };
             for (size_t i = 0; i < 2; ++ i) {
                 std::reverse(p.points.begin(), p.points.end()); // turn first half upside down
@@ -69,55 +69,15 @@ void FillHoneycomb::_fill_surface_single(
                 x += m.distance;
             }
             p.rotate(-direction.first, m.hex_center);
-            polygons.push_back(p);
+            all_polylines.push_back(p);
         }
     }
     
-    if (params.complete || true) {
-        // we were requested to complete each loop;
-        // in this case we don't try to make more continuous paths
-        Polygons polygons_trimmed = intersection((Polygons)expolygon, polygons);
-        for (Polygons::iterator it = polygons_trimmed.begin(); it != polygons_trimmed.end(); ++ it)
-            polylines_out.push_back(it->split_at_first_point());
-    } else {
-        // consider polygons as polylines without re-appending the initial point:
-        // this cuts the last segment on purpose, so that the jump to the next 
-        // path is more straight
-        Polylines paths;
-        {
-            Polylines p;
-            for (Polygon &poly : polygons)
-                p.emplace_back(poly.points);
-            paths = intersection_pl(p, to_polygons(expolygon));
-        }
-
-        // connect paths
-        if (! paths.empty()) { // prevent calling leftmost_point() on empty collections
-            Polylines chained = chain_polylines(std::move(paths));
-            assert(paths.empty());
-            paths.clear();
-            for (Polyline &path : chained) {
-                if (! paths.empty()) {
-                    // distance between first point of this path and last point of last path
-                    double distance = (path.first_point() - paths.back().last_point()).cast<double>().norm();
-                    if (distance <= m.hex_width) {
-                        paths.back().points.insert(paths.back().points.end(), path.points.begin(), path.points.end());
-                        continue;
-                    }
-                }
-                // Don't connect the paths.
-                paths.push_back(std::move(path));
-            }
-        }
-        
-        // clip paths again to prevent connection segments from crossing the expolygon boundaries
-        paths = intersection_pl(paths, to_polygons(offset_ex(expolygon, SCALED_EPSILON)));
-        // Move the polylines to the output, avoid a deep copy.
-        size_t j = polylines_out.size();
-        polylines_out.resize(j + paths.size(), Polyline());
-        for (size_t i = 0; i < paths.size(); ++ i)
-            std::swap(polylines_out[j ++], paths[i]);
-    }
+    all_polylines = intersection_pl(std::move(all_polylines), to_polygons(expolygon));
+    if (params.dont_connect || all_polylines.size() <= 1)
+        append(polylines_out, chain_polylines(std::move(all_polylines)));
+    else
+        connect_infill(std::move(all_polylines), expolygon, polylines_out, this->spacing, params);
 }
 
 } // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillPlanePath.cpp b/src/libslic3r/Fill/FillPlanePath.cpp
index 7a322ce99..002fcadc0 100644
--- a/src/libslic3r/Fill/FillPlanePath.cpp
+++ b/src/libslic3r/Fill/FillPlanePath.cpp
@@ -1,4 +1,5 @@
 #include "../ClipperUtils.hpp"
+#include "../ShortestPath.hpp"
 #include "../Surface.hpp"
 
 #include "FillPlanePath.hpp"
@@ -23,14 +24,14 @@ void FillPlanePath::_fill_surface_single(
     Point shift = this->_centered() ? 
         bounding_box.center() :
         bounding_box.min;
-    expolygon.translate(-shift(0), -shift(1));
-    bounding_box.translate(-shift(0), -shift(1));
+    expolygon.translate(-shift.x(), -shift.y());
+    bounding_box.translate(-shift.x(), -shift.y());
 
     Pointfs pts = _generate(
-        coord_t(ceil(coordf_t(bounding_box.min(0)) / distance_between_lines)),
-        coord_t(ceil(coordf_t(bounding_box.min(1)) / distance_between_lines)),
-        coord_t(ceil(coordf_t(bounding_box.max(0)) / distance_between_lines)),
-        coord_t(ceil(coordf_t(bounding_box.max(1)) / distance_between_lines)));
+        coord_t(ceil(coordf_t(bounding_box.min.x()) / distance_between_lines)),
+        coord_t(ceil(coordf_t(bounding_box.min.y()) / distance_between_lines)),
+        coord_t(ceil(coordf_t(bounding_box.max.x()) / distance_between_lines)),
+        coord_t(ceil(coordf_t(bounding_box.max.y()) / distance_between_lines)));
 
     Polylines polylines;
     if (pts.size() >= 2) {
@@ -38,39 +39,24 @@ void FillPlanePath::_fill_surface_single(
         polylines.push_back(Polyline());
         Polyline &polyline = polylines.back();
         polyline.points.reserve(pts.size());
-        for (Pointfs::iterator it = pts.begin(); it != pts.end(); ++ it)
+        for (const Vec2d &pt : pts)
             polyline.points.push_back(Point(
-                coord_t(floor((*it)(0) * distance_between_lines + 0.5)), 
-                coord_t(floor((*it)(1) * distance_between_lines + 0.5))));
+                coord_t(floor(pt.x() * distance_between_lines + 0.5)), 
+                coord_t(floor(pt.y() * distance_between_lines + 0.5))));
 //      intersection(polylines_src, offset((Polygons)expolygon, scale_(0.02)), &polylines);
-        polylines = intersection_pl(polylines, to_polygons(expolygon));
-
-/*        
-        if (1) {
-            require "Slic3r/SVG.pm";
-            print "Writing fill.svg\n";
-            Slic3r::SVG::output("fill.svg",
-                no_arrows       => 1,
-                polygons        => \@$expolygon,
-                green_polygons  => [ $bounding_box->polygon ],
-                polylines       => [ $polyline ],
-                red_polylines   => \@paths,
-            );
-        }
-*/
-        
+        polylines = intersection_pl(std::move(polylines), to_polygons(expolygon));
+        Polylines chained;
+        if (params.dont_connect || params.density > 0.5 || polylines.size() <= 1)
+            chained = chain_polylines(std::move(polylines));
+        else
+            connect_infill(std::move(polylines), expolygon, chained, this->spacing, params);
         // paths must be repositioned and rotated back
-        for (Polylines::iterator it = polylines.begin(); it != polylines.end(); ++ it) {
-            it->translate(shift(0), shift(1));
-            it->rotate(direction.first);
+        for (Polyline &pl : chained) {
+            pl.translate(shift.x(), shift.y());
+            pl.rotate(direction.first);
         }
+        append(polylines_out, std::move(chained));
     }
-
-    // Move the polylines to the output, avoid a deep copy.
-    size_t j = polylines_out.size();
-    polylines_out.resize(j + polylines.size(), Polyline());
-    for (size_t i = 0; i < polylines.size(); ++ i)
-        std::swap(polylines_out[j ++], polylines[i]);
 }
 
 // Follow an Archimedean spiral, in polar coordinates: r=a+b\theta
@@ -85,13 +71,13 @@ Pointfs FillArchimedeanChords::_generate(coord_t min_x, coord_t min_y, coord_t m
     coordf_t r = 1;
     Pointfs out;
     //FIXME Vojtech: If used as a solid infill, there is a gap left at the center.
-    out.push_back(Vec2d(0, 0));
-    out.push_back(Vec2d(1, 0));
+    out.emplace_back(0, 0);
+    out.emplace_back(1, 0);
     while (r < rmax) {
         // Discretization angle to achieve a discretization error lower than RESOLUTION.
         theta += 2. * acos(1. - RESOLUTION / r);
         r = a + b * theta;
-        out.push_back(Vec2d(r * cos(theta), r * sin(theta)));
+        out.emplace_back(r * cos(theta), r * sin(theta));
     }
     return out;
 }
@@ -128,15 +114,12 @@ static inline Point hilbert_n_to_xy(const size_t n)
             ++ ndigits;
         }
     }
-    int state    = (ndigits & 1) ? 4 : 0;
-//    int dirstate = (ndigits & 1) ? 0 : 4;
+    int state = (ndigits & 1) ? 4 : 0;
     coord_t x = 0;
     coord_t y = 0;
     for (int i = (int)ndigits - 1; i >= 0; -- i) {
         int digit = (n >> (i * 2)) & 3;
         state += digit;
-//        if (digit != 3)
-//            dirstate = state; // lowest non-3 digit
         x |= digit_to_x[state] << i;
         y |= digit_to_y[state] << i;
         state = next_state[state];
@@ -162,7 +145,7 @@ Pointfs FillHilbertCurve::_generate(coord_t min_x, coord_t min_y, coord_t max_x,
     line.reserve(sz2);
     for (size_t i = 0; i < sz2; ++ i) {
         Point p = hilbert_n_to_xy(i);
-        line.push_back(Vec2d(p(0) + min_x, p(1) + min_y));
+        line.emplace_back(p.x() + min_x, p.y() + min_y);
     }
     return line;
 }
@@ -175,27 +158,27 @@ Pointfs FillOctagramSpiral::_generate(coord_t min_x, coord_t min_y, coord_t max_
     coordf_t r = 0;
     coordf_t r_inc = sqrt(2.);
     Pointfs out;
-    out.push_back(Vec2d(0, 0));
+    out.emplace_back(0., 0.);
     while (r < rmax) {
         r += r_inc;
         coordf_t rx = r / sqrt(2.);
         coordf_t r2 = r + rx;
-        out.push_back(Vec2d( r,  0.));
-        out.push_back(Vec2d( r2, rx));
-        out.push_back(Vec2d( rx, rx));
-        out.push_back(Vec2d( rx, r2));
-        out.push_back(Vec2d(0.,  r));
-        out.push_back(Vec2d(-rx, r2));
-        out.push_back(Vec2d(-rx, rx));
-        out.push_back(Vec2d(-r2, rx));
-        out.push_back(Vec2d(-r,  0.));
-        out.push_back(Vec2d(-r2, -rx));
-        out.push_back(Vec2d(-rx, -rx));
-        out.push_back(Vec2d(-rx, -r2));
-        out.push_back(Vec2d(0., -r));
-        out.push_back(Vec2d( rx, -r2));
-        out.push_back(Vec2d( rx, -rx));
-        out.push_back(Vec2d( r2+r_inc, -rx));
+        out.emplace_back( r,  0.);
+        out.emplace_back( r2, rx);
+        out.emplace_back( rx, rx);
+        out.emplace_back( rx, r2);
+        out.emplace_back( 0.,  r);
+        out.emplace_back(-rx, r2);
+        out.emplace_back(-rx, rx);
+        out.emplace_back(-r2, rx);
+        out.emplace_back(- r, 0.);
+        out.emplace_back(-r2, -rx);
+        out.emplace_back(-rx, -rx);
+        out.emplace_back(-rx, -r2);
+        out.emplace_back( 0., -r);
+        out.emplace_back( rx, -r2);
+        out.emplace_back( rx, -rx);
+        out.emplace_back( r2+r_inc, -rx);
     }
     return out;
 }
diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp
index 1669f60d2..a27b85734 100644
--- a/src/libslic3r/SupportMaterial.cpp
+++ b/src/libslic3r/SupportMaterial.cpp
@@ -2324,7 +2324,6 @@ static inline void fill_expolygons_generate_paths(
 {
     FillParams fill_params;
     fill_params.density = density;
-    fill_params.complete = true;
     fill_params.dont_adjust = true;
     for (const ExPolygon &expoly : expolygons) {
         Surface surface(stInternal, expoly);
@@ -2351,7 +2350,6 @@ static inline void fill_expolygons_generate_paths(
 {
     FillParams fill_params;
     fill_params.density = density;
-    fill_params.complete = true;
     fill_params.dont_adjust = true;
     for (ExPolygon &expoly : expolygons) {
         Surface surface(stInternal, std::move(expoly));
diff --git a/xs/xsp/Filler.xsp b/xs/xsp/Filler.xsp
index caeb2af9a..2ea2b34d5 100644
--- a/xs/xsp/Filler.xsp
+++ b/xs/xsp/Filler.xsp
@@ -36,8 +36,6 @@
         %code{% THIS->params.density = density; %};
     void set_dont_adjust(bool dont_adjust)
         %code{% THIS->params.dont_adjust = dont_adjust; %};
-    void set_complete(bool complete)
-        %code{% THIS->params.complete = complete; %};
 
     PolylineCollection* _fill_surface(Surface *surface)
         %code{% 

From db05f00860f58d36f7c3a9a4bcba9eb581b5b55c Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 16 Nov 2020 13:11:58 +0100
Subject: [PATCH 029/138]  Fixing compilation issues.

---
 src/libslic3r/ExPolygon.hpp            | 12 ++++++------
 src/libslic3r/Fill/Fill3DHoneycomb.cpp |  2 +-
 src/libslic3r/Fill/Fill3DHoneycomb.hpp |  2 +-
 src/libslic3r/Fill/FillAdaptive.cpp    |  2 +-
 src/libslic3r/Fill/FillAdaptive.hpp    |  2 +-
 src/libslic3r/Fill/FillBase.hpp        |  2 +-
 src/libslic3r/Fill/FillConcentric.cpp  |  2 +-
 src/libslic3r/Fill/FillConcentric.hpp  |  2 +-
 src/libslic3r/Fill/FillGyroid.cpp      | 12 ++++++------
 src/libslic3r/Fill/FillGyroid.hpp      |  2 +-
 src/libslic3r/Fill/FillHoneycomb.cpp   |  2 +-
 src/libslic3r/Fill/FillHoneycomb.hpp   |  2 +-
 src/libslic3r/Fill/FillPlanePath.cpp   |  2 +-
 src/libslic3r/Fill/FillPlanePath.hpp   |  2 +-
 src/libslic3r/Fill/FillRectilinear.cpp |  2 +-
 src/libslic3r/Fill/FillRectilinear.hpp |  2 +-
 src/libslic3r/Polygon.hpp              |  2 +-
 17 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/src/libslic3r/ExPolygon.hpp b/src/libslic3r/ExPolygon.hpp
index 373853f97..0056100b1 100644
--- a/src/libslic3r/ExPolygon.hpp
+++ b/src/libslic3r/ExPolygon.hpp
@@ -17,9 +17,9 @@ typedef std::vector<ExPolygon> ExPolygons;
 class ExPolygon
 {
 public:
-    ExPolygon() {}
-	ExPolygon(const ExPolygon &other) : contour(other.contour), holes(other.holes) {}
-    ExPolygon(ExPolygon &&other) noexcept : contour(std::move(other.contour)), holes(std::move(other.holes)) {}
+    ExPolygon() = default;
+	ExPolygon(const ExPolygon &other) = default;
+    ExPolygon(ExPolygon &&other) = default;
 	explicit ExPolygon(const Polygon &contour) : contour(contour) {}
 	explicit ExPolygon(Polygon &&contour) : contour(std::move(contour)) {}
 	explicit ExPolygon(const Points &contour) : contour(contour) {}
@@ -31,10 +31,10 @@ public:
 	ExPolygon(std::initializer_list<Point> contour) : contour(contour) {}
 	ExPolygon(std::initializer_list<Point> contour, std::initializer_list<Point> hole) : contour(contour), holes({ hole }) {}
 
-    ExPolygon& operator=(const ExPolygon &other) { contour = other.contour; holes = other.holes; return *this; }
-    ExPolygon& operator=(ExPolygon &&other) noexcept { contour = std::move(other.contour); holes = std::move(other.holes); return *this; }
+    ExPolygon& operator=(const ExPolygon &other) = default;
+    ExPolygon& operator=(ExPolygon &&other) = default;
 
-    Polygon contour;
+    Polygon  contour;
     Polygons holes;
 
     operator Points() const;
diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
index 144a27505..69a7f9923 100644
--- a/src/libslic3r/Fill/Fill3DHoneycomb.cpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
@@ -137,7 +137,7 @@ void Fill3DHoneycomb::_fill_surface_single(
     const FillParams                &params, 
     unsigned int                     thickness_layers,
     const std::pair<float, Point>   &direction, 
-    ExPolygon                       &expolygon, 
+    ExPolygon                        expolygon,
     Polylines                       &polylines_out)
 {
     // no rotation is supported for this infill pattern
diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.hpp b/src/libslic3r/Fill/Fill3DHoneycomb.hpp
index 92c459a8d..2fc1cbe81 100644
--- a/src/libslic3r/Fill/Fill3DHoneycomb.hpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.hpp
@@ -23,7 +23,7 @@ protected:
 	    const FillParams                &params, 
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction, 
-	    ExPolygon                       &expolygon, 
+	    ExPolygon                 		 expolygon,
 	    Polylines                       &polylines_out) override;
 };
 
diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index a1d592bc3..b9775fcda 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -1253,7 +1253,7 @@ void Filler::_fill_surface_single(
     const FillParams              &params,
     unsigned int                   thickness_layers,
     const std::pair<float, Point> &direction,
-    ExPolygon                     &expolygon,
+    ExPolygon                      expolygon,
     Polylines                     &polylines_out)
 {
     assert (this->adapt_fill_octree);
diff --git a/src/libslic3r/Fill/FillAdaptive.hpp b/src/libslic3r/Fill/FillAdaptive.hpp
index 01d9efb10..8ed05ba54 100644
--- a/src/libslic3r/Fill/FillAdaptive.hpp
+++ b/src/libslic3r/Fill/FillAdaptive.hpp
@@ -64,7 +64,7 @@ protected:
 	    const FillParams                &params,
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction,
-	    ExPolygon                       &expolygon,
+	    ExPolygon                        expolygon,
 	    Polylines                       &polylines_out) override;
 	bool no_sort() const override { return true; }
 };
diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index f73e6f528..4f8456bfa 100644
--- a/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
@@ -120,7 +120,7 @@ protected:
         const FillParams                & /* params */, 
         unsigned int                      /* thickness_layers */,
         const std::pair<float, Point>   & /* direction */, 
-        ExPolygon                       & /* expolygon */, 
+        ExPolygon                         /* expolygon */,
         Polylines                       & /* polylines_out */) {};
 
     virtual float _layer_angle(size_t idx) const { return (idx & 1) ? float(M_PI/2.) : 0; }
diff --git a/src/libslic3r/Fill/FillConcentric.cpp b/src/libslic3r/Fill/FillConcentric.cpp
index 8a3a7ea89..587038178 100644
--- a/src/libslic3r/Fill/FillConcentric.cpp
+++ b/src/libslic3r/Fill/FillConcentric.cpp
@@ -10,7 +10,7 @@ void FillConcentric::_fill_surface_single(
     const FillParams                &params, 
     unsigned int                     thickness_layers,
     const std::pair<float, Point>   &direction, 
-    ExPolygon                       &expolygon, 
+    ExPolygon                        expolygon,
     Polylines                       &polylines_out)
 {
     // no rotation is supported for this infill pattern
diff --git a/src/libslic3r/Fill/FillConcentric.hpp b/src/libslic3r/Fill/FillConcentric.hpp
index 72adad3a4..04c2f4e31 100644
--- a/src/libslic3r/Fill/FillConcentric.hpp
+++ b/src/libslic3r/Fill/FillConcentric.hpp
@@ -16,7 +16,7 @@ protected:
 	    const FillParams                &params, 
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction, 
-	    ExPolygon                       &expolygon, 
+	    ExPolygon     		             expolygon,
 	    Polylines                       &polylines_out) override;
 
 	bool no_sort() const override { return true; }
diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index b0cd507bc..c70c4439e 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -37,12 +37,12 @@ static inline Polyline make_wave(
     double period = points.back()(0);
     if (width != period) // do not extend if already truncated
     {
-        points.reserve(one_period.size() * floor(width / period));
+        points.reserve(one_period.size() * size_t(floor(width / period)));
         points.pop_back();
 
-        int n = points.size();
+        size_t n = points.size();
         do {
-            points.emplace_back(Vec2d(points[points.size()-n](0) + period, points[points.size()-n](1)));
+            points.emplace_back(points[points.size()-n].x() + period, points[points.size()-n].y());
         } while (points.back()(0) < width - EPSILON);
 
         points.emplace_back(Vec2d(width, f(width, z_sin, z_cos, vertical, flip)));
@@ -67,7 +67,7 @@ static std::vector<Vec2d> make_one_period(double width, double scaleFactor, doub
     std::vector<Vec2d> points;
     double dx = M_PI_2; // exact coordinates on main inflexion lobes
     double limit = std::min(2*M_PI, width);
-    points.reserve(ceil(limit / tolerance / 3));
+    points.reserve(coord_t(ceil(limit / tolerance / 3)));
 
     for (double x = 0.; x < limit - EPSILON; x += dx) {
         points.emplace_back(Vec2d(x, f(x, z_sin, z_cos, vertical, flip)));
@@ -152,10 +152,10 @@ void FillGyroid::_fill_surface_single(
     const FillParams                &params, 
     unsigned int                     thickness_layers,
     const std::pair<float, Point>   &direction, 
-    ExPolygon                       &expolygon, 
+    ExPolygon                        expolygon, 
     Polylines                       &polylines_out)
 {
-    float infill_angle = this->angle + (CorrectionAngle * 2*M_PI) / 360.;
+    auto infill_angle = float(this->angle + (CorrectionAngle * 2*M_PI) / 360.);
     if(std::abs(infill_angle) >= EPSILON)
         expolygon.rotate(-infill_angle);
 
diff --git a/src/libslic3r/Fill/FillGyroid.hpp b/src/libslic3r/Fill/FillGyroid.hpp
index 4d45c47b0..ac66dfca9 100644
--- a/src/libslic3r/Fill/FillGyroid.hpp
+++ b/src/libslic3r/Fill/FillGyroid.hpp
@@ -32,7 +32,7 @@ protected:
         const FillParams                &params, 
         unsigned int                     thickness_layers,
         const std::pair<float, Point>   &direction, 
-        ExPolygon                       &expolygon, 
+        ExPolygon                        expolygon,
         Polylines                       &polylines_out) override;
 };
 
diff --git a/src/libslic3r/Fill/FillHoneycomb.cpp b/src/libslic3r/Fill/FillHoneycomb.cpp
index aa0157fb9..8d80529ec 100644
--- a/src/libslic3r/Fill/FillHoneycomb.cpp
+++ b/src/libslic3r/Fill/FillHoneycomb.cpp
@@ -10,7 +10,7 @@ void FillHoneycomb::_fill_surface_single(
     const FillParams                &params, 
     unsigned int                     thickness_layers,
     const std::pair<float, Point>   &direction, 
-    ExPolygon                       &expolygon, 
+    ExPolygon                        expolygon,
     Polylines                       &polylines_out)
 {
     // cache hexagons math
diff --git a/src/libslic3r/Fill/FillHoneycomb.hpp b/src/libslic3r/Fill/FillHoneycomb.hpp
index 98a5f7a59..707e976fd 100644
--- a/src/libslic3r/Fill/FillHoneycomb.hpp
+++ b/src/libslic3r/Fill/FillHoneycomb.hpp
@@ -20,7 +20,7 @@ protected:
 	    const FillParams                &params, 
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction, 
-	    ExPolygon                       &expolygon, 
+	    ExPolygon                 		 expolygon,
 	    Polylines                       &polylines_out) override;
 
 	// Caching the 
diff --git a/src/libslic3r/Fill/FillPlanePath.cpp b/src/libslic3r/Fill/FillPlanePath.cpp
index 002fcadc0..0ce992ca3 100644
--- a/src/libslic3r/Fill/FillPlanePath.cpp
+++ b/src/libslic3r/Fill/FillPlanePath.cpp
@@ -10,7 +10,7 @@ void FillPlanePath::_fill_surface_single(
     const FillParams                &params, 
     unsigned int                     thickness_layers,
     const std::pair<float, Point>   &direction, 
-    ExPolygon                       &expolygon, 
+    ExPolygon                        expolygon,
     Polylines                       &polylines_out)
 {
     expolygon.rotate(- direction.first);
diff --git a/src/libslic3r/Fill/FillPlanePath.hpp b/src/libslic3r/Fill/FillPlanePath.hpp
index fe6b94162..cf19a95f8 100644
--- a/src/libslic3r/Fill/FillPlanePath.hpp
+++ b/src/libslic3r/Fill/FillPlanePath.hpp
@@ -23,7 +23,7 @@ protected:
         const FillParams                &params, 
         unsigned int                     thickness_layers,
         const std::pair<float, Point>   &direction, 
-        ExPolygon                       &expolygon, 
+        ExPolygon                        expolygon,
         Polylines                       &polylines_out) override;
 
     float _layer_angle(size_t idx) const override { return 0.f; }
diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp
index c8c75f302..53f4dab33 100644
--- a/src/libslic3r/Fill/FillRectilinear.cpp
+++ b/src/libslic3r/Fill/FillRectilinear.cpp
@@ -11,7 +11,7 @@ void FillLine::_fill_surface_single(
     const FillParams                &params,
     unsigned int                     thickness_layers,
     const std::pair<float, Point>   &direction,
-    ExPolygon                       &expolygon,
+    ExPolygon                        expolygon,
     Polylines                       &polylines_out)
 {
     // rotate polygons so that we can work with vertical lines here
diff --git a/src/libslic3r/Fill/FillRectilinear.hpp b/src/libslic3r/Fill/FillRectilinear.hpp
index b7d27de22..c01224e6e 100644
--- a/src/libslic3r/Fill/FillRectilinear.hpp
+++ b/src/libslic3r/Fill/FillRectilinear.hpp
@@ -20,7 +20,7 @@ protected:
 	    const FillParams                &params, 
 	    unsigned int                     thickness_layers,
 	    const std::pair<float, Point>   &direction, 
-	    ExPolygon                       &expolygon, 
+	    ExPolygon    		             expolygon,
 	    Polylines                       &polylines_out) override;
 
 	coord_t _min_spacing;
diff --git a/src/libslic3r/Polygon.hpp b/src/libslic3r/Polygon.hpp
index 3c44f66f7..8479a0bd6 100644
--- a/src/libslic3r/Polygon.hpp
+++ b/src/libslic3r/Polygon.hpp
@@ -21,7 +21,7 @@ public:
     Point& operator[](Points::size_type idx) { return this->points[idx]; }
     const Point& operator[](Points::size_type idx) const { return this->points[idx]; }
 
-    Polygon() {}
+    Polygon() = default;
     virtual ~Polygon() = default;
     explicit Polygon(const Points &points) : MultiPoint(points) {}
 	Polygon(std::initializer_list<Point> points) : MultiPoint(points) {}

From 2249e5d4b273aebe6949d14dbb21b325584f6d05 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 16 Nov 2020 13:17:18 +0100
Subject: [PATCH 030/138] Renamed FillRectilinear.cpp,h to FillLine.cpp,h

---
 src/libslic3r/CMakeLists.txt                             | 4 ++--
 src/libslic3r/Fill/{FillRectilinear.cpp => FillLine.cpp} | 0
 src/libslic3r/Fill/{FillRectilinear.hpp => FillLine.hpp} | 0
 3 files changed, 2 insertions(+), 2 deletions(-)
 rename src/libslic3r/Fill/{FillRectilinear.cpp => FillLine.cpp} (100%)
 rename src/libslic3r/Fill/{FillRectilinear.hpp => FillLine.hpp} (100%)

diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
index 150d66d75..937c41f02 100644
--- a/src/libslic3r/CMakeLists.txt
+++ b/src/libslic3r/CMakeLists.txt
@@ -58,8 +58,8 @@ add_library(libslic3r STATIC
     Fill/FillGyroid.hpp
     Fill/FillPlanePath.cpp
     Fill/FillPlanePath.hpp
-    Fill/FillRectilinear.cpp
-    Fill/FillRectilinear.hpp
+    Fill/FillLine.cpp
+    Fill/FillLine.hpp
     Fill/FillRectilinear2.cpp
     Fill/FillRectilinear2.hpp
     Flow.cpp
diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillLine.cpp
similarity index 100%
rename from src/libslic3r/Fill/FillRectilinear.cpp
rename to src/libslic3r/Fill/FillLine.cpp
diff --git a/src/libslic3r/Fill/FillRectilinear.hpp b/src/libslic3r/Fill/FillLine.hpp
similarity index 100%
rename from src/libslic3r/Fill/FillRectilinear.hpp
rename to src/libslic3r/Fill/FillLine.hpp

From a864d584a6f0b4299c758bde56b8855e6fbbe4f6 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 16 Nov 2020 13:24:57 +0100
Subject: [PATCH 031/138] Fillers: Renamed Rectilinear2 to Rectilinear.

---
 src/libslic3r/CMakeLists.txt                  |  4 +--
 src/libslic3r/Fill/Fill.cpp                   |  4 +--
 src/libslic3r/Fill/FillBase.cpp               |  6 ++---
 src/libslic3r/Fill/FillLine.cpp               |  2 +-
 src/libslic3r/Fill/FillLine.hpp               |  6 ++---
 ...llRectilinear2.cpp => FillRectilinear.cpp} | 22 ++++++++--------
 ...llRectilinear2.hpp => FillRectilinear.hpp} | 26 +++++++++----------
 7 files changed, 35 insertions(+), 35 deletions(-)
 rename src/libslic3r/Fill/{FillRectilinear2.cpp => FillRectilinear.cpp} (99%)
 rename src/libslic3r/Fill/{FillRectilinear2.hpp => FillRectilinear.hpp} (80%)

diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
index 937c41f02..0cf5af93c 100644
--- a/src/libslic3r/CMakeLists.txt
+++ b/src/libslic3r/CMakeLists.txt
@@ -60,8 +60,8 @@ add_library(libslic3r STATIC
     Fill/FillPlanePath.hpp
     Fill/FillLine.cpp
     Fill/FillLine.hpp
-    Fill/FillRectilinear2.cpp
-    Fill/FillRectilinear2.hpp
+    Fill/FillRectilinear.cpp
+    Fill/FillRectilinear.hpp
     Flow.cpp
     Flow.hpp
     format.hpp
diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp
index 95c8bb9b9..33ebf4ca2 100644
--- a/src/libslic3r/Fill/Fill.cpp
+++ b/src/libslic3r/Fill/Fill.cpp
@@ -10,7 +10,7 @@
 #include "../Surface.hpp"
 
 #include "FillBase.hpp"
-#include "FillRectilinear2.hpp"
+#include "FillRectilinear.hpp"
 
 namespace Slic3r {
 
@@ -536,7 +536,7 @@ void Layer::make_ironing()
 		}
 	std::sort(by_extruder.begin(), by_extruder.end());
 
-    FillRectilinear2 	fill;
+    FillRectilinear 	fill;
     FillParams 			fill_params;
 	fill.set_bounding_box(this->object()->bounding_box());
 	fill.layer_id 			 = this->id();
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 87a4c23b6..cacc79d52 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -14,8 +14,8 @@
 #include "Fill3DHoneycomb.hpp"
 #include "FillGyroid.hpp"
 #include "FillPlanePath.hpp"
+#include "FillLine.hpp"
 #include "FillRectilinear.hpp"
-#include "FillRectilinear2.hpp"
 #include "FillAdaptive.hpp"
 
 namespace Slic3r {
@@ -27,10 +27,10 @@ Fill* Fill::new_from_type(const InfillPattern type)
     case ipHoneycomb:           return new FillHoneycomb();
     case ip3DHoneycomb:         return new Fill3DHoneycomb();
     case ipGyroid:              return new FillGyroid();
-    case ipRectilinear:         return new FillRectilinear2();
+    case ipRectilinear:         return new FillRectilinear();
     case ipMonotonic:           return new FillMonotonic();
     case ipLine:                return new FillLine();
-    case ipGrid:                return new FillGrid2();
+    case ipGrid:                return new FillGrid();
     case ipTriangles:           return new FillTriangles();
     case ipStars:               return new FillStars();
     case ipCubic:               return new FillCubic();
diff --git a/src/libslic3r/Fill/FillLine.cpp b/src/libslic3r/Fill/FillLine.cpp
index 53f4dab33..1e6ed5284 100644
--- a/src/libslic3r/Fill/FillLine.cpp
+++ b/src/libslic3r/Fill/FillLine.cpp
@@ -3,7 +3,7 @@
 #include "../ShortestPath.hpp"
 #include "../Surface.hpp"
 
-#include "FillRectilinear.hpp"
+#include "FillLine.hpp"
 
 namespace Slic3r {
 
diff --git a/src/libslic3r/Fill/FillLine.hpp b/src/libslic3r/Fill/FillLine.hpp
index c01224e6e..b66309e1f 100644
--- a/src/libslic3r/Fill/FillLine.hpp
+++ b/src/libslic3r/Fill/FillLine.hpp
@@ -1,5 +1,5 @@
-#ifndef slic3r_FillRectilinear_hpp_
-#define slic3r_FillRectilinear_hpp_
+#ifndef slic3r_FillLine_hpp_
+#define slic3r_FillLine_hpp_
 
 #include "../libslic3r.h"
 
@@ -46,4 +46,4 @@ protected:
 
 }; // namespace Slic3r
 
-#endif // slic3r_FillRectilinear_hpp_
+#endif // slic3r_FillLine_hpp_
diff --git a/src/libslic3r/Fill/FillRectilinear2.cpp b/src/libslic3r/Fill/FillRectilinear.cpp
similarity index 99%
rename from src/libslic3r/Fill/FillRectilinear2.cpp
rename to src/libslic3r/Fill/FillRectilinear.cpp
index d8e0e746a..09bb44201 100644
--- a/src/libslic3r/Fill/FillRectilinear2.cpp
+++ b/src/libslic3r/Fill/FillRectilinear.cpp
@@ -16,7 +16,7 @@
 #include "../Surface.hpp"
 #include "../ShortestPath.hpp"
 
-#include "FillRectilinear2.hpp"
+#include "FillRectilinear.hpp"
 
 // #define SLIC3R_DEBUG
 
@@ -2618,7 +2618,7 @@ static void polylines_from_paths(const std::vector<MonotonicRegionLink> &path, c
     }
 }
 
-bool FillRectilinear2::fill_surface_by_lines(const Surface *surface, const FillParams &params, float angleBase, float pattern_shift, Polylines &polylines_out)
+bool FillRectilinear::fill_surface_by_lines(const Surface *surface, const FillParams &params, float angleBase, float pattern_shift, Polylines &polylines_out)
 {
     // At the end, only the new polylines will be rotated back.
     size_t n_polylines_out_initial = polylines_out.size();
@@ -2676,10 +2676,10 @@ bool FillRectilinear2::fill_surface_by_lines(const Surface *surface, const FillP
 #ifdef SLIC3R_DEBUG
     static int iRun = 0;
     BoundingBox bbox_svg = poly_with_offset.bounding_box_outer();
-    ::Slic3r::SVG svg(debug_out_path("FillRectilinear2-%d.svg", iRun), bbox_svg); // , scale_(1.));
+    ::Slic3r::SVG svg(debug_out_path("FillRectilinear-%d.svg", iRun), bbox_svg); // , scale_(1.));
     poly_with_offset.export_to_svg(svg);
     {
-        ::Slic3r::SVG svg(debug_out_path("FillRectilinear2-initial-%d.svg", iRun), bbox_svg); // , scale_(1.));
+        ::Slic3r::SVG svg(debug_out_path("FillRectilinear-initial-%d.svg", iRun), bbox_svg); // , scale_(1.));
         poly_with_offset.export_to_svg(svg);
     }
     iRun ++;
@@ -2729,14 +2729,14 @@ bool FillRectilinear2::fill_surface_by_lines(const Surface *surface, const FillP
 #ifdef SLIC3R_DEBUG
     {
         {
-            ::Slic3r::SVG svg(debug_out_path("FillRectilinear2-final-%03d.svg", iRun), bbox_svg); // , scale_(1.));
+            ::Slic3r::SVG svg(debug_out_path("FillRectilinear-final-%03d.svg", iRun), bbox_svg); // , scale_(1.));
             poly_with_offset.export_to_svg(svg);
             for (size_t i = n_polylines_out_initial; i < polylines_out.size(); ++ i)
                 svg.draw(polylines_out[i].lines(), "black");
         }
         // Paint a picture per polyline. This makes it easier to discover the order of the polylines and their overlap.
         for (size_t i_polyline = n_polylines_out_initial; i_polyline < polylines_out.size(); ++ i_polyline) {
-            ::Slic3r::SVG svg(debug_out_path("FillRectilinear2-final-%03d-%03d.svg", iRun, i_polyline), bbox_svg); // , scale_(1.));
+            ::Slic3r::SVG svg(debug_out_path("FillRectilinear-final-%03d-%03d.svg", iRun, i_polyline), bbox_svg); // , scale_(1.));
             svg.draw(polylines_out[i_polyline].lines(), "black");
         }
     }
@@ -2762,7 +2762,7 @@ bool FillRectilinear2::fill_surface_by_lines(const Surface *surface, const FillP
     return true;
 }
 
-bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out)
+bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out)
 {
     assert(sweep_params.size() > 1);
     assert(! params.full_infill());
@@ -2830,11 +2830,11 @@ bool FillRectilinear2::fill_surface_by_multilines(const Surface *surface, FillPa
     return true;
 }
 
-Polylines FillRectilinear2::fill_surface(const Surface *surface, const FillParams &params)
+Polylines FillRectilinear::fill_surface(const Surface *surface, const FillParams &params)
 {
     Polylines polylines_out;
     if (! fill_surface_by_lines(surface, params, 0.f, 0.f, polylines_out))
-        BOOST_LOG_TRIVIAL(error) << "FillRectilinear2::fill_surface() failed to fill a region.";
+        BOOST_LOG_TRIVIAL(error) << "FillRectilinear::fill_surface() failed to fill a region.";
     return polylines_out;
 }
 
@@ -2848,14 +2848,14 @@ Polylines FillMonotonic::fill_surface(const Surface *surface, const FillParams &
     return polylines_out;
 }
 
-Polylines FillGrid2::fill_surface(const Surface *surface, const FillParams &params)
+Polylines FillGrid::fill_surface(const Surface *surface, const FillParams &params)
 {
     Polylines polylines_out;
     if (! this->fill_surface_by_multilines(
             surface, params,
             { { 0.f, 0.f }, { float(M_PI / 2.), 0.f } },
             polylines_out))
-        BOOST_LOG_TRIVIAL(error) << "FillGrid2::fill_surface() failed to fill a region.";
+        BOOST_LOG_TRIVIAL(error) << "FillGrid::fill_surface() failed to fill a region.";
     return polylines_out;
 }
 
diff --git a/src/libslic3r/Fill/FillRectilinear2.hpp b/src/libslic3r/Fill/FillRectilinear.hpp
similarity index 80%
rename from src/libslic3r/Fill/FillRectilinear2.hpp
rename to src/libslic3r/Fill/FillRectilinear.hpp
index 4ceb0d2b6..806b29be1 100644
--- a/src/libslic3r/Fill/FillRectilinear2.hpp
+++ b/src/libslic3r/Fill/FillRectilinear.hpp
@@ -1,5 +1,5 @@
-#ifndef slic3r_FillRectilinear2_hpp_
-#define slic3r_FillRectilinear2_hpp_
+#ifndef slic3r_FillRectilinear_hpp_
+#define slic3r_FillRectilinear_hpp_
 
 #include "../libslic3r.h"
 
@@ -9,11 +9,11 @@ namespace Slic3r {
 
 class Surface;
 
-class FillRectilinear2 : public Fill
+class FillRectilinear : public Fill
 {
 public:
-    Fill* clone() const override { return new FillRectilinear2(*this); };
-    ~FillRectilinear2() override = default;
+    Fill* clone() const override { return new FillRectilinear(*this); };
+    ~FillRectilinear() override = default;
     Polylines fill_surface(const Surface *surface, const FillParams &params) override;
 
 protected:
@@ -29,7 +29,7 @@ protected:
     bool fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out);
 };
 
-class FillMonotonic : public FillRectilinear2
+class FillMonotonic : public FillRectilinear
 {
 public:
     Fill* clone() const override { return new FillMonotonic(*this); };
@@ -38,11 +38,11 @@ public:
 	bool no_sort() const override { return true; }
 };
 
-class FillGrid2 : public FillRectilinear2
+class FillGrid : public FillRectilinear
 {
 public:
-    Fill* clone() const override { return new FillGrid2(*this); };
-    ~FillGrid2() override = default;
+    Fill* clone() const override { return new FillGrid(*this); };
+    ~FillGrid() override = default;
     Polylines fill_surface(const Surface *surface, const FillParams &params) override;
 
 protected:
@@ -50,7 +50,7 @@ protected:
     float _layer_angle(size_t idx) const override { return 0.f; }
 };
 
-class FillTriangles : public FillRectilinear2
+class FillTriangles : public FillRectilinear
 {
 public:
     Fill* clone() const override { return new FillTriangles(*this); };
@@ -62,7 +62,7 @@ protected:
     float _layer_angle(size_t idx) const override { return 0.f; }
 };
 
-class FillStars : public FillRectilinear2
+class FillStars : public FillRectilinear
 {
 public:
     Fill* clone() const override { return new FillStars(*this); };
@@ -74,7 +74,7 @@ protected:
     float _layer_angle(size_t idx) const override { return 0.f; }
 };
 
-class FillCubic : public FillRectilinear2
+class FillCubic : public FillRectilinear
 {
 public:
     Fill* clone() const override { return new FillCubic(*this); };
@@ -89,4 +89,4 @@ protected:
 
 }; // namespace Slic3r
 
-#endif // slic3r_FillRectilinear2_hpp_
+#endif // slic3r_FillRectilinear_hpp_

From 620f94331c65aa50f59b9728b2e6c4cd13d7c78b Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 16 Nov 2020 13:44:15 +0100
Subject: [PATCH 032/138] fix of OSX build: workaround of non-standard
 std::optional

---
 src/libslic3r/Fill/FillAdaptive.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index b9775fcda..07c454c80 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -725,7 +725,7 @@ static void add_hook(
             update_max_length(t);
         }
         if (self_intersection) {
-            double t = (self_intersection_point.cast<double>() - pt).dot(dir) - shift_from_thick_line(self_intersection_line.value().vector().cast<double>());
+            double t = (self_intersection_point.cast<double>() - pt).dot(dir) - shift_from_thick_line((*self_intersection_line).vector().cast<double>());
             max_length = std::min(max_length, t);
         }
         return std::max(0., max_length);
@@ -878,7 +878,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                     std::optional<size_t> out;
                     if (in) {
                         const Polyline *lo = &line;
-                        const Polyline *hi = &lines[in.value()];
+                        const Polyline *hi = &lines[*in];
                         if (lo > hi)
                             std::swap(lo, hi);
                         if (! std::binary_search(lines_touching_at_endpoints.begin(), lines_touching_at_endpoints.end(), std::make_pair(lo, hi)))
@@ -914,10 +914,10 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                 } else if (anchor) {
                     if (tjoint_front)
                         // T-joint of line's front point with the 'closest' line.
-                        intersections.emplace_back(lines_src[tjoint_front.value()], lines_src[line_idx], &line, front_point, true);
+                        intersections.emplace_back(lines_src[*tjoint_front], lines_src[line_idx], &line, front_point, true);
                     if (tjoint_back)
                         // T-joint of line's back point with the 'closest' line.
-                        intersections.emplace_back(lines_src[tjoint_back.value()],  lines_src[line_idx], &line, back_point,  false);
+                        intersections.emplace_back(lines_src[*tjoint_back],  lines_src[line_idx], &line, back_point,  false);
                 } else {
                     if (tjoint_front)
                         // T joint at the front at a 60 degree angle, the line is very short.

From afddcf71db684a8351a51021ce701560c0bc213d Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Mon, 16 Nov 2020 15:01:13 +0100
Subject: [PATCH 033/138] Preview - Paint in grey toolpaths belonging to layers
 containing pause prints or custom gcodes

---
 src/libslic3r/Technologies.hpp |  1 +
 src/slic3r/GUI/GCodeViewer.cpp | 61 ++++++++++++++++++++++++++--------
 2 files changed, 49 insertions(+), 13 deletions(-)

diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 7b30958a9..66258fe62 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -71,6 +71,7 @@
 #define ENABLE_2_3_0_ALPHA4 1
 
 #define ENABLE_FIXED_SCREEN_SIZE_POINT_MARKERS (1 && ENABLE_GCODE_VIEWER && ENABLE_2_3_0_ALPHA4)
+#define ENABLE_SHOW_OPTION_POINT_LAYERS (1 && ENABLE_GCODE_VIEWER && ENABLE_2_3_0_ALPHA4)
 
 
 #endif // _prusaslicer_technologies_h_
diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index 5e2702b3c..4be9f5fbd 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -1197,6 +1197,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
             prev_up = up;
             prev_length = length;
     };
+
     auto add_indices_as_solid = [](const GCodeProcessor::MoveVertex& prev, const GCodeProcessor::MoveVertex& curr, TBuffer& buffer,
         size_t& buffer_vertices_size, unsigned int index_buffer_id, IndexBuffer& buffer_indices, size_t move_id) {
             static Vec3f prev_dir;
@@ -1339,6 +1340,9 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
     // the data are deleted as soon as they are sent to the gpu.
     std::vector<std::vector<float>> vertices(m_buffers.size());
     std::vector<MultiIndexBuffer> indices(m_buffers.size());
+#if ENABLE_SHOW_OPTION_POINT_LAYERS
+    std::vector<float> options_zs;
+#endif // ENABLE_SHOW_OPTION_POINT_LAYERS
 
     // toolpaths data -> extract vertices from result
     for (size_t i = 0; i < m_moves_count; ++i) {
@@ -1363,22 +1367,29 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
 
         switch (buffer.render_primitive_type)
         {
-        case TBuffer::ERenderPrimitiveType::Point:
-        {
+        case TBuffer::ERenderPrimitiveType::Point: {
             add_vertices_as_point(curr, buffer_vertices);
             break;
         }
-        case TBuffer::ERenderPrimitiveType::Line:
-        {
+        case TBuffer::ERenderPrimitiveType::Line: {
             add_vertices_as_line(prev, curr, buffer, buffer_vertices);
             break;
         }
-        case TBuffer::ERenderPrimitiveType::Triangle:
-        {
+        case TBuffer::ERenderPrimitiveType::Triangle: {
             add_vertices_as_solid(prev, curr, buffer, buffer_vertices, i);
             break;
         }
         }
+
+#if ENABLE_SHOW_OPTION_POINT_LAYERS
+        EMoveType type = buffer_type(id);
+        if (type == EMoveType::Pause_Print || type == EMoveType::Custom_GCode) {
+            const float* const last_z = options_zs.empty() ? nullptr : &options_zs.back();
+            float z = static_cast<double>(curr.position[2]);
+            if (last_z == nullptr || z < *last_z - EPSILON || *last_z + EPSILON < z)
+                options_zs.emplace_back(curr.position[2]);
+        }
+#endif // ENABLE_SHOW_OPTION_POINT_LAYERS
     }
 
     log_memory_usage("Loaded G-code generated vertex buffers, ", vertices, indices);
@@ -1464,18 +1475,15 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
 
         switch (buffer.render_primitive_type)
         {
-        case TBuffer::ERenderPrimitiveType::Point:
-        {
+        case TBuffer::ERenderPrimitiveType::Point: {
             add_indices_as_point(curr, buffer, static_cast<unsigned int>(buffer_indices.size()) - 1, buffer_indices.back(), i);
             break;
         }
-        case TBuffer::ERenderPrimitiveType::Line:
-        {
+        case TBuffer::ERenderPrimitiveType::Line: {
             add_indices_as_line(prev, curr, buffer, static_cast<unsigned int>(buffer_indices.size()) - 1, buffer_indices.back(), i);
             break;
         }
-        case TBuffer::ERenderPrimitiveType::Triangle:
-        {
+        case TBuffer::ERenderPrimitiveType::Triangle: {
             add_indices_as_solid(prev, curr, buffer, curr_buffer_vertices_size, static_cast<unsigned int>(buffer_indices.size()) - 1, buffer_indices.back(), i);
             break;
         }
@@ -1558,9 +1566,20 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
     }
 
     // set layers z range
-    if (!m_layers.empty()) {
+    if (!m_layers.empty())
         m_layers_z_range = { 0, static_cast<unsigned int>(m_layers.size() - 1) };
+
+#if ENABLE_SHOW_OPTION_POINT_LAYERS
+    // change color of paths whose layer contains option points
+    if (!options_zs.empty()) {
+        TBuffer& extrude_buffer = m_buffers[buffer_id(EMoveType::Extrude)];
+        for (Path& path : extrude_buffer.paths) {
+            float z = path.first.position[2];
+            if (std::find_if(options_zs.begin(), options_zs.end(), [z](float f) { return f - EPSILON <= z && z <= f + EPSILON; }) != options_zs.end())
+                path.cp_color_id = 255 - path.cp_color_id;
+        }
     }
+#endif // ENABLE_SHOW_OPTION_POINT_LAYERS
 
     // roles -> remove duplicates
     std::sort(m_roles.begin(), m_roles.end());
@@ -1657,9 +1676,25 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
         case EViewType::FanSpeed:       { color = m_extrusions.ranges.fan_speed.get_color_at(path.fan_speed); break; }
         case EViewType::VolumetricRate: { color = m_extrusions.ranges.volumetric_rate.get_color_at(path.volumetric_rate); break; }
         case EViewType::Tool:           { color = m_tool_colors[path.extruder_id]; break; }
+#if ENABLE_SHOW_OPTION_POINT_LAYERS
+        case EViewType::ColorPrint:     {
+            if (path.cp_color_id >= static_cast<unsigned char>(m_tool_colors.size())) {
+                color = { 0.5f, 0.5f, 0.5f };
+//                // complementary color
+//                color = m_tool_colors[255 - path.cp_color_id];
+//                color = { 1.0f - color[0], 1.0f - color[1], 1.0f - color[2] };
+            }
+            else
+                color = m_tool_colors[path.cp_color_id];
+
+            break;
+        }
+#else
         case EViewType::ColorPrint:     { color = m_tool_colors[path.cp_color_id]; break; }
+#endif // ENABLE_SHOW_OPTION_POINT_LAYERS
         default:                        { color = { 1.0f, 1.0f, 1.0f }; break; }
         }
+
         return color;
     };
 

From a20ce2f484765f0a4af743420eb3c0696a56b7bf Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Mon, 16 Nov 2020 17:29:21 +0100
Subject: [PATCH 034/138] ENABLE_GCODE_VIEWER set as default in 3DBed.hpp/.cpp

---
 src/slic3r/GUI/3DBed.cpp | 127 ---------------------------------------
 src/slic3r/GUI/3DBed.hpp |  41 -------------
 2 files changed, 168 deletions(-)

diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp
index 8a29d08bd..244f9eae0 100644
--- a/src/slic3r/GUI/3DBed.cpp
+++ b/src/slic3r/GUI/3DBed.cpp
@@ -5,24 +5,18 @@
 #include "libslic3r/Polygon.hpp"
 #include "libslic3r/ClipperUtils.hpp"
 #include "libslic3r/BoundingBox.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "libslic3r/Geometry.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 #include "GUI_App.hpp"
 #include "libslic3r/PresetBundle.hpp"
 #include "GLCanvas3D.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "3DScene.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 #include <GL/glew.h>
 
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/filesystem/operations.hpp>
-#if ENABLE_GCODE_VIEWER
 #include <boost/log/trivial.hpp>
-#endif // ENABLE_GCODE_VIEWER
 
 static const float GROUND_Z = -0.02f;
 
@@ -121,43 +115,19 @@ const float* GeometryBuffer::get_vertices_data() const
     return (m_vertices.size() > 0) ? (const float*)m_vertices.data() : nullptr;
 }
 
-#if ENABLE_GCODE_VIEWER
 const float Bed3D::Axes::DefaultStemRadius = 0.5f;
 const float Bed3D::Axes::DefaultStemLength = 25.0f;
 const float Bed3D::Axes::DefaultTipRadius = 2.5f * Bed3D::Axes::DefaultStemRadius;
 const float Bed3D::Axes::DefaultTipLength = 5.0f;
-#else
-const double Bed3D::Axes::Radius = 0.5;
-const double Bed3D::Axes::ArrowBaseRadius = 2.5 * Bed3D::Axes::Radius;
-const double Bed3D::Axes::ArrowLength = 5.0;
-#endif // ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
 void Bed3D::Axes::set_stem_length(float length)
 {
     m_stem_length = length;
     m_arrow.reset();
 }
-#else
-Bed3D::Axes::Axes()
-: origin(Vec3d::Zero())
-, length(25.0 * Vec3d::Ones())
-{
-    m_quadric = ::gluNewQuadric();
-    if (m_quadric != nullptr)
-        ::gluQuadricDrawStyle(m_quadric, GLU_FILL);
-}
-
-Bed3D::Axes::~Axes()
-{
-    if (m_quadric != nullptr)
-        ::gluDeleteQuadric(m_quadric);
-}
-#endif // ENABLE_GCODE_VIEWER
 
 void Bed3D::Axes::render() const
 {
-#if ENABLE_GCODE_VIEWER
     auto render_axis = [this](const Transform3f& transform) {
         glsafe(::glPushMatrix());
         glsafe(::glMultMatrixf(transform.data()));
@@ -193,56 +163,8 @@ void Bed3D::Axes::render() const
     shader->stop_using();
 
     glsafe(::glDisable(GL_DEPTH_TEST));
-#else
-    if (m_quadric == nullptr)
-        return;
-
-    glsafe(::glEnable(GL_DEPTH_TEST));
-    glsafe(::glEnable(GL_LIGHTING));
-
-    // x axis
-    glsafe(::glColor3fv(AXES_COLOR[0]));
-    glsafe(::glPushMatrix());
-    glsafe(::glTranslated(origin(0), origin(1), origin(2)));
-    glsafe(::glRotated(90.0, 0.0, 1.0, 0.0));
-    render_axis(length(0));
-    glsafe(::glPopMatrix());
-
-    // y axis
-    glsafe(::glColor3fv(AXES_COLOR[1]));
-    glsafe(::glPushMatrix());
-    glsafe(::glTranslated(origin(0), origin(1), origin(2)));
-    glsafe(::glRotated(-90.0, 1.0, 0.0, 0.0));
-    render_axis(length(1));
-    glsafe(::glPopMatrix());
-
-    // z axis
-    glsafe(::glColor3fv(AXES_COLOR[2]));
-    glsafe(::glPushMatrix());
-    glsafe(::glTranslated(origin(0), origin(1), origin(2)));
-    render_axis(length(2));
-    glsafe(::glPopMatrix());
-
-    glsafe(::glDisable(GL_LIGHTING));
-    glsafe(::glDisable(GL_DEPTH_TEST));
-#endif // !ENABLE_GCODE_VIEWER
 }
 
-#if !ENABLE_GCODE_VIEWER
-void Bed3D::Axes::render_axis(double length) const
-{
-    ::gluQuadricOrientation(m_quadric, GLU_OUTSIDE);
-    ::gluCylinder(m_quadric, Radius, Radius, length, 32, 1);
-    ::gluQuadricOrientation(m_quadric, GLU_INSIDE);
-    ::gluDisk(m_quadric, 0.0, Radius, 32, 1);
-    glsafe(::glTranslated(0.0, 0.0, length));
-    ::gluQuadricOrientation(m_quadric, GLU_OUTSIDE);
-    ::gluCylinder(m_quadric, ArrowBaseRadius, 0.0, ArrowLength, 32, 1);
-    ::gluQuadricOrientation(m_quadric, GLU_INSIDE);
-    ::gluDisk(m_quadric, 0.0, ArrowBaseRadius, 32, 1);
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 Bed3D::Bed3D()
     : m_type(Custom)
     , m_vbo_id(0)
@@ -308,13 +230,8 @@ bool Bed3D::set_shape(const Pointfs& shape, const std::string& custom_texture, c
     m_model.reset();
 
     // Set the origin and size for rendering the coordinate system axes.
-#if ENABLE_GCODE_VIEWER
     m_axes.set_origin({ 0.0, 0.0, static_cast<double>(GROUND_Z) });
     m_axes.set_stem_length(0.1f * static_cast<float>(m_bounding_box.max_size()));
-#else
-    m_axes.origin = Vec3d(0.0, 0.0, (double)GROUND_Z);
-    m_axes.length = 0.1 * m_bounding_box.max_size() * Vec3d::Ones();
-#endif // ENABLE_GCODE_VIEWER
 
     // Let the calee to update the UI.
     return true;
@@ -360,7 +277,6 @@ void Bed3D::calc_bounding_boxes() const
     m_extended_bounding_box = m_bounding_box;
 
     // extend to contain axes
-#if ENABLE_GCODE_VIEWER
     m_extended_bounding_box.merge(m_axes.get_origin() + m_axes.get_total_length() * Vec3d::Ones());
     m_extended_bounding_box.merge(m_extended_bounding_box.min + Vec3d(-Axes::DefaultTipRadius, -Axes::DefaultTipRadius, m_extended_bounding_box.max(2)));
 
@@ -370,12 +286,6 @@ void Bed3D::calc_bounding_boxes() const
         model_bb.translate(m_model_offset);
         m_extended_bounding_box.merge(model_bb);
     }
-#else
-    m_extended_bounding_box.merge(m_axes.length + Axes::ArrowLength * Vec3d::Ones());
-    // extend to contain model, if any
-    if (!m_model.get_filename().empty())
-        m_extended_bounding_box.merge(m_model.get_transformed_bounding_box());
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void Bed3D::calc_triangles(const ExPolygon& poly)
@@ -414,26 +324,6 @@ void Bed3D::calc_gridlines(const ExPolygon& poly, const BoundingBox& bed_bbox)
         printf("Unable to create bed grid lines\n");
 }
 
-#if !ENABLE_GCODE_VIEWER
-static std::string system_print_bed_model(const Preset &preset)
-{
-	std::string out;
-	const VendorProfile::PrinterModel *pm = PresetUtils::system_printer_model(preset);
-	if (pm != nullptr && ! pm->bed_model.empty())
-		out = Slic3r::resources_dir() + "/profiles/" + preset.vendor->id + "/" + pm->bed_model;
-	return out;
-}
-
-static std::string system_print_bed_texture(const Preset &preset)
-{
-	std::string out;
-	const VendorProfile::PrinterModel *pm = PresetUtils::system_printer_model(preset);
-	if (pm != nullptr && ! pm->bed_texture.empty())
-		out = Slic3r::resources_dir() + "/profiles/" + preset.vendor->id + "/" + pm->bed_texture;
-	return out;
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 std::tuple<Bed3D::EType, std::string, std::string> Bed3D::detect_type(const Pointfs& shape) const
 {
     auto bundle = wxGetApp().preset_bundle;
@@ -442,13 +332,8 @@ std::tuple<Bed3D::EType, std::string, std::string> Bed3D::detect_type(const Poin
         while (curr != nullptr) {
             if (curr->config.has("bed_shape")) {
                 if (shape == dynamic_cast<const ConfigOptionPoints*>(curr->config.option("bed_shape"))->values) {
-#if ENABLE_GCODE_VIEWER
                     std::string model_filename = PresetUtils::system_printer_bed_model(*curr);
                     std::string texture_filename = PresetUtils::system_printer_bed_texture(*curr);
-#else
-                    std::string model_filename = system_print_bed_model(*curr);
-                    std::string texture_filename = system_print_bed_texture(*curr);
-#endif // ENABLE_GCODE_VIEWER
                     if (!model_filename.empty() && !texture_filename.empty())
                         return { System, model_filename, texture_filename };
                 }
@@ -614,11 +499,7 @@ void Bed3D::render_model() const
         // move the model so that its origin (0.0, 0.0, 0.0) goes into the bed shape center and a bit down to avoid z-fighting with the texture quad
         Vec3d shift = m_bounding_box.center();
         shift(2) = -0.03;
-#if ENABLE_GCODE_VIEWER
         m_model_offset = shift;
-#else
-        m_model.set_offset(shift);
-#endif // ENABLE_GCODE_VIEWER
 
         // update extended bounding box
         calc_bounding_boxes();
@@ -628,15 +509,11 @@ void Bed3D::render_model() const
         GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light");
         if (shader != nullptr) {
             shader->start_using();
-#if ENABLE_GCODE_VIEWER
             shader->set_uniform("uniform_color", m_model_color);
             ::glPushMatrix();
             ::glTranslated(m_model_offset(0), m_model_offset(1), m_model_offset(2));
-#endif // ENABLE_GCODE_VIEWER
             m_model.render();
-#if ENABLE_GCODE_VIEWER
             ::glPopMatrix();
-#endif // ENABLE_GCODE_VIEWER
             shader->stop_using();
         }
     }
@@ -673,11 +550,7 @@ void Bed3D::render_default(bool bottom) const
         if (!has_model && !bottom) {
             // draw background
             glsafe(::glDepthMask(GL_FALSE));
-#if ENABLE_GCODE_VIEWER
             glsafe(::glColor4fv(m_model_color.data()));
-#else
-            glsafe(::glColor4f(0.35f, 0.35f, 0.35f, 0.4f));
-#endif // ENABLE_GCODE_VIEWER
             glsafe(::glNormal3d(0.0f, 0.0f, 1.0f));
             glsafe(::glVertexPointer(3, GL_FLOAT, m_triangles.get_vertex_data_size(), (GLvoid*)m_triangles.get_vertices_data()));
             glsafe(::glDrawArrays(GL_TRIANGLES, 0, (GLsizei)triangles_vcount));
diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp
index fbfc3078c..b5b063e6f 100644
--- a/src/slic3r/GUI/3DBed.hpp
+++ b/src/slic3r/GUI/3DBed.hpp
@@ -3,19 +3,10 @@
 
 #include "GLTexture.hpp"
 #include "3DScene.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "GLModel.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 #include <tuple>
-#if ENABLE_GCODE_VIEWER
 #include <array>
-#endif // ENABLE_GCODE_VIEWER
-
-#if !ENABLE_GCODE_VIEWER
-class GLUquadric;
-typedef class GLUquadric GLUquadricObj;
-#endif // !ENABLE_GCODE_VIEWER
 
 namespace Slic3r {
 namespace GUI {
@@ -52,7 +43,6 @@ public:
 
 class Bed3D
 {
-#if ENABLE_GCODE_VIEWER
     class Axes
     {
     public:
@@ -62,43 +52,16 @@ class Bed3D
         static const float DefaultTipLength;
 
     private:
-#else
-    struct Axes
-    {
-        static const double Radius;
-        static const double ArrowBaseRadius;
-        static const double ArrowLength;
-#endif // ENABLE_GCODE_VIEWER
-
-#if ENABLE_GCODE_VIEWER
         Vec3d m_origin{ Vec3d::Zero() };
         float m_stem_length{ DefaultStemLength };
         mutable GLModel m_arrow;
 
     public:
-#else
-        Vec3d origin;
-        Vec3d length;
-        GLUquadricObj* m_quadric;
-#endif // ENABLE_GCODE_VIEWER
-
-#if !ENABLE_GCODE_VIEWER
-        Axes();
-        ~Axes();
-#endif // !ENABLE_GCODE_VIEWER
-
-#if ENABLE_GCODE_VIEWER
         const Vec3d& get_origin() const { return m_origin; }
         void set_origin(const Vec3d& origin) { m_origin = origin; }
         void set_stem_length(float length);
         float get_total_length() const { return m_stem_length + DefaultTipLength; }
-#endif // ENABLE_GCODE_VIEWER
         void render() const;
-
-#if !ENABLE_GCODE_VIEWER
-    private:
-        void render_axis(double length) const;
-#endif // !ENABLE_GCODE_VIEWER
     };
 
 public:
@@ -120,13 +83,9 @@ private:
     GeometryBuffer m_triangles;
     GeometryBuffer m_gridlines;
     mutable GLTexture m_texture;
-#if ENABLE_GCODE_VIEWER
     mutable GLModel m_model;
     mutable Vec3d m_model_offset{ Vec3d::Zero() };
     std::array<float, 4> m_model_color{ 0.235f, 0.235f, 0.235f, 1.0f };
-#else
-    mutable GLBed m_model;
-#endif // ENABLE_GCODE_VIEWER
     // temporary texture shown until the main texture has still no levels compressed
     mutable GLTexture m_temp_texture;
     mutable unsigned int m_vbo_id;

From 1e12b99338300ae3e491b94124563e4c0c482527 Mon Sep 17 00:00:00 2001
From: David Kocik <kocikdav@gmail.com>
Date: Sat, 14 Nov 2020 11:17:09 +0100
Subject: [PATCH 035/138] fix of segfault on startup at SplashScreen::SetText

---
 src/slic3r/GUI/GUI_App.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index bea8b6487..cab19796b 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -825,7 +825,9 @@ bool GUI_App::on_init_inner()
         // create splash screen with updated bmp
         scrn = new SplashScreen(bmp.IsOk() ? bmp : create_scaled_bitmap("prusa_slicer_logo", nullptr, 400), 
                                 wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT, 4000, splashscreen_pos);
+#ifndef __linux__
         wxYield();
+#endif
         scrn->SetText(_L("Loading configuration..."));
     }
 

From 16dd7c74f121a7ffd5a4e7bdf629dc59c13f9ad1 Mon Sep 17 00:00:00 2001
From: David Kocik <kocikdav@gmail.com>
Date: Tue, 17 Nov 2020 14:44:18 +0100
Subject: [PATCH 036/138] boost canonical fix at instance check. Hopefully a
 fix of #4973

---
 src/slic3r/GUI/InstanceCheck.cpp | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/InstanceCheck.cpp b/src/slic3r/GUI/InstanceCheck.cpp
index 4aaecd2b2..8067fc7f3 100644
--- a/src/slic3r/GUI/InstanceCheck.cpp
+++ b/src/slic3r/GUI/InstanceCheck.cpp
@@ -251,11 +251,24 @@ namespace instance_check_internal
 
 bool instance_check(int argc, char** argv, bool app_config_single_instance)
 {
+#ifndef _WIN32
+	boost::system::error_code ec;
+#endif
 	std::size_t hashed_path = 
 #ifdef _WIN32
 		std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string());
 #else
-		std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0])).string());
+		std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0]), ec).string());
+		if(ec.value() > 0) { // canonical was not able to find execitable (can happen with appimage on some systems)
+			ec.clear();
+			// Compose path with boost canonical of folder and filename
+			hashed_path = std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0]).parent_path(), ec).string() + "/" + boost::filesystem::system_complete(argv[0]).filename().string());
+			if(ec.value() > 0) {
+				// Still not valid, process without canonical
+				hashed_path = std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string());
+				
+			}
+		}
 #endif // win32
 
 	std::string lock_name 	= std::to_string(hashed_path);

From faff112ea8f1f3ad27537bf886208f64fb07c0e1 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Wed, 18 Nov 2020 10:44:03 +0100
Subject: [PATCH 037/138] ENABLE_GCODE_VIEWER set as default in:

3DScene hpp/cpp

AboutDialog.cpp

BackgroundSlicingProcess hpp/cpp

BitmapCache.cpp

ConfigWizard_private.hpp

GUI_App hpp/cpp

GUI_Init.cpp
---
 src/slic3r/GUI/3DScene.cpp                  | 567 --------------------
 src/slic3r/GUI/3DScene.hpp                  |  66 ---
 src/slic3r/GUI/AboutDialog.cpp              |  22 +-
 src/slic3r/GUI/BackgroundSlicingProcess.cpp |  17 +-
 src/slic3r/GUI/BackgroundSlicingProcess.hpp |  14 -
 src/slic3r/GUI/BitmapCache.cpp              |  13 -
 src/slic3r/GUI/ConfigWizard_private.hpp     |   2 -
 src/slic3r/GUI/GUI_App.cpp                  |  86 ---
 src/slic3r/GUI/GUI_App.hpp                  |  13 -
 src/slic3r/GUI/GUI_Init.cpp                 |  12 -
 10 files changed, 2 insertions(+), 810 deletions(-)

diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp
index 436df201c..e97ba0764 100644
--- a/src/slic3r/GUI/3DScene.cpp
+++ b/src/slic3r/GUI/3DScene.cpp
@@ -993,290 +993,6 @@ bool GLVolumeCollection::has_toolpaths_to_export() const
     return false;
 }
 
-#if !ENABLE_GCODE_VIEWER
-void GLVolumeCollection::export_toolpaths_to_obj(const char* filename) const
-{
-    if (filename == nullptr)
-        return;
-
-    if (!has_toolpaths_to_export())
-        return;
-
-    // collect color information to generate materials
-    typedef std::array<float, 4> Color;
-    std::set<Color> colors;
-    for (const GLVolume* volume : this->volumes)
-    {
-        if (!can_export_to_obj(*volume))
-            continue;
-
-        Color color;
-        ::memcpy((void*)color.data(), (const void*)volume->color, 4 * sizeof(float));
-        colors.insert(color);
-    }
-
-    // save materials file
-    boost::filesystem::path mat_filename(filename);
-    mat_filename.replace_extension("mtl");
-    FILE* fp = boost::nowide::fopen(mat_filename.string().c_str(), "w");
-    if (fp == nullptr) {
-        BOOST_LOG_TRIVIAL(error) << "GLVolumeCollection::export_toolpaths_to_obj: Couldn't open " << mat_filename.string().c_str() << " for writing";
-        return;
-    }
-
-    fprintf(fp, "# G-Code Toolpaths Materials\n");
-    fprintf(fp, "# Generated by %s based on Slic3r\n", SLIC3R_BUILD_ID);
-
-    unsigned int colors_count = 1;
-    for (const Color& color : colors)
-    {
-        fprintf(fp, "\nnewmtl material_%d\n", colors_count++);
-        fprintf(fp, "Ka 1 1 1\n");
-        fprintf(fp, "Kd %f %f %f\n", color[0], color[1], color[2]);
-        fprintf(fp, "Ks 0 0 0\n");
-    }
-
-    fclose(fp);
-
-    // save geometry file
-    fp = boost::nowide::fopen(filename, "w");
-    if (fp == nullptr) {
-        BOOST_LOG_TRIVIAL(error) << "GLVolumeCollection::export_toolpaths_to_obj: Couldn't open " << filename << " for writing";
-        return;
-    }
-
-    fprintf(fp, "# G-Code Toolpaths\n");
-    fprintf(fp, "# Generated by %s based on Slic3r\n", SLIC3R_BUILD_ID);
-    fprintf(fp, "\nmtllib ./%s\n", mat_filename.filename().string().c_str());
-
-    unsigned int vertices_count = 0;
-    unsigned int normals_count = 0;
-    unsigned int volumes_count = 0;
-
-    for (const GLVolume* volume : this->volumes)
-    {
-        if (!can_export_to_obj(*volume))
-            continue;
-
-        std::vector<float> src_vertices_and_normals_interleaved;
-        std::vector<int>   src_triangle_indices;
-        std::vector<int>   src_quad_indices;
-
-        if (!volume->indexed_vertex_array.vertices_and_normals_interleaved.empty())
-            // data are in CPU memory
-            src_vertices_and_normals_interleaved = volume->indexed_vertex_array.vertices_and_normals_interleaved;
-        else if ((volume->indexed_vertex_array.vertices_and_normals_interleaved_VBO_id != 0) && (volume->indexed_vertex_array.vertices_and_normals_interleaved_size != 0))
-        {
-            // data are in GPU memory
-            src_vertices_and_normals_interleaved = std::vector<float>(volume->indexed_vertex_array.vertices_and_normals_interleaved_size, 0.0f);
-
-            glsafe(::glBindBuffer(GL_ARRAY_BUFFER, volume->indexed_vertex_array.vertices_and_normals_interleaved_VBO_id));
-            glsafe(::glGetBufferSubData(GL_ARRAY_BUFFER, 0, src_vertices_and_normals_interleaved.size() * sizeof(float), src_vertices_and_normals_interleaved.data()));
-            glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0));
-        }
-        else
-            continue;
-
-        if (!volume->indexed_vertex_array.triangle_indices.empty())
-        {
-            // data are in CPU memory
-            size_t size = std::min(volume->indexed_vertex_array.triangle_indices.size(), volume->tverts_range.second - volume->tverts_range.first);
-            if (size != 0)
-            {
-                std::vector<int>::const_iterator it_begin = volume->indexed_vertex_array.triangle_indices.begin() + volume->tverts_range.first;
-                std::vector<int>::const_iterator it_end = volume->indexed_vertex_array.triangle_indices.begin() + volume->tverts_range.first + size;
-                std::copy(it_begin, it_end, std::back_inserter(src_triangle_indices));
-            }
-        }
-        else if ((volume->indexed_vertex_array.triangle_indices_VBO_id != 0) && (volume->indexed_vertex_array.triangle_indices_size != 0))
-        {
-            // data are in GPU memory
-            size_t size = std::min(volume->indexed_vertex_array.triangle_indices_size, volume->tverts_range.second - volume->tverts_range.first);
-            if (size != 0)
-            {
-                src_triangle_indices = std::vector<int>(size, 0);
-
-                glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, volume->indexed_vertex_array.triangle_indices_VBO_id));
-                glsafe(::glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, volume->tverts_range.first * sizeof(int), size * sizeof(int), src_triangle_indices.data()));
-                glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
-            }
-        }
-
-        if (!volume->indexed_vertex_array.quad_indices.empty())
-        {
-            // data are in CPU memory
-            size_t size = std::min(volume->indexed_vertex_array.quad_indices.size(), volume->qverts_range.second - volume->qverts_range.first);
-            if (size != 0)
-            {
-                std::vector<int>::const_iterator it_begin = volume->indexed_vertex_array.quad_indices.begin() + volume->qverts_range.first;
-                std::vector<int>::const_iterator it_end = volume->indexed_vertex_array.quad_indices.begin() + volume->qverts_range.first + size;
-                std::copy(it_begin, it_end, std::back_inserter(src_quad_indices));
-            }
-        }
-        else if ((volume->indexed_vertex_array.quad_indices_VBO_id != 0) && (volume->indexed_vertex_array.quad_indices_size != 0))
-        {
-            // data are in GPU memory
-            size_t size = std::min(volume->indexed_vertex_array.quad_indices_size, volume->qverts_range.second - volume->qverts_range.first);
-            if (size != 0)
-            {
-                src_quad_indices = std::vector<int>(size, 0);
-
-                glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, volume->indexed_vertex_array.quad_indices_VBO_id));
-                glsafe(::glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, volume->qverts_range.first * sizeof(int), size * sizeof(int), src_quad_indices.data()));
-                glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
-            }
-        }
-
-        if (src_triangle_indices.empty() && src_quad_indices.empty())
-            continue;
-
-        ++volumes_count;
-
-        // reduce output size by keeping only used vertices and normals
-
-        struct Vector
-        {
-            std::array<coord_t, 3> vector;
-
-            explicit Vector(float* ptr)
-            {
-                vector[0] = scale_(*(ptr + 0));
-                vector[1] = scale_(*(ptr + 1));
-                vector[2] = scale_(*(ptr + 2));
-            }
-        };
-        typedef std::vector<Vector> Vectors;
-
-        auto vector_less = [](const Vector& v1, const Vector& v2)->bool {
-            return v1.vector < v2.vector;
-        };
-
-        auto vector_equal = [](const Vector& v1, const Vector& v2)->bool {
-            return (v1.vector[0] == v2.vector[0]) && (v1.vector[1] == v2.vector[1]) && (v1.vector[2] == v2.vector[2]);
-        };
-
-        // copy used vertices and normals data
-        Vectors dst_normals;
-        Vectors dst_vertices;
-
-        unsigned int src_triangle_indices_size = (unsigned int)src_triangle_indices.size();
-        for (unsigned int i = 0; i < src_triangle_indices_size; ++i)
-        {
-            float* src_ptr = src_vertices_and_normals_interleaved.data() + src_triangle_indices[i] * 6;
-            dst_normals.emplace_back(src_ptr + 0);
-            dst_vertices.emplace_back(src_ptr + 3);
-        }
-
-        unsigned int src_quad_indices_size = (unsigned int)src_quad_indices.size();
-        for (unsigned int i = 0; i < src_quad_indices_size; ++i)
-        {
-            float* src_ptr = src_vertices_and_normals_interleaved.data() + src_quad_indices[i] * 6;
-            dst_normals.emplace_back(src_ptr + 0);
-            dst_vertices.emplace_back(src_ptr + 3);
-        }
-
-        // sort vertices and normals
-        std::sort(dst_normals.begin(), dst_normals.end(), vector_less);
-        std::sort(dst_vertices.begin(), dst_vertices.end(), vector_less);
-
-        // remove duplicated vertices and normals
-        dst_normals.erase(std::unique(dst_normals.begin(), dst_normals.end(), vector_equal), dst_normals.end());
-        dst_vertices.erase(std::unique(dst_vertices.begin(), dst_vertices.end(), vector_equal), dst_vertices.end());
-
-        // reindex triangles and quads
-        struct IndicesPair
-        {
-            int vertex;
-            int normal;
-            IndicesPair(int vertex, int normal) : vertex(vertex), normal(normal) {}
-        };
-        typedef std::vector<IndicesPair> Indices;
-
-        unsigned int src_vertices_count = (unsigned int)src_vertices_and_normals_interleaved.size() / 6;
-        std::vector<int> src_dst_vertex_indices_map(src_vertices_count, -1);
-        std::vector<int> src_dst_normal_indices_map(src_vertices_count, -1);
-
-        for (unsigned int i = 0; i < src_vertices_count; ++i)
-        {
-            float* src_ptr = src_vertices_and_normals_interleaved.data() + i * 6;
-            src_dst_normal_indices_map[i] = std::distance(dst_normals.begin(), std::lower_bound(dst_normals.begin(), dst_normals.end(), Vector(src_ptr + 0), vector_less));
-            src_dst_vertex_indices_map[i] = std::distance(dst_vertices.begin(), std::lower_bound(dst_vertices.begin(), dst_vertices.end(), Vector(src_ptr + 3), vector_less));
-        }
-
-        Indices dst_triangle_indices;
-        if (src_triangle_indices_size > 0)
-            dst_triangle_indices.reserve(src_triangle_indices_size);
-
-        for (unsigned int i = 0; i < src_triangle_indices_size; ++i)
-        {
-            int id = src_triangle_indices[i];
-            dst_triangle_indices.emplace_back(src_dst_vertex_indices_map[id], src_dst_normal_indices_map[id]);
-        }
-
-        Indices dst_quad_indices;
-        if (src_quad_indices_size > 0)
-            dst_quad_indices.reserve(src_quad_indices_size);
-
-        for (unsigned int i = 0; i < src_quad_indices_size; ++i)
-        {
-            int id = src_quad_indices[i];
-            dst_quad_indices.emplace_back(src_dst_vertex_indices_map[id], src_dst_normal_indices_map[id]);
-        }
-
-        // save to file
-        fprintf(fp, "\n# vertices volume %d\n", volumes_count);
-        for (const Vector& v : dst_vertices)
-        {
-            fprintf(fp, "v %g %g %g\n", unscale<float>(v.vector[0]), unscale<float>(v.vector[1]), unscale<float>(v.vector[2]));
-        }
-
-        fprintf(fp, "\n# normals volume %d\n", volumes_count);
-        for (const Vector& n : dst_normals)
-        {
-            fprintf(fp, "vn %g %g %g\n", unscale<float>(n.vector[0]), unscale<float>(n.vector[1]), unscale<float>(n.vector[2]));
-        }
-
-        Color color;
-        ::memcpy((void*)color.data(), (const void*)volume->color, 4 * sizeof(float));
-        fprintf(fp, "\n# material volume %d\n", volumes_count);
-        fprintf(fp, "usemtl material_%lld\n", (long long)(1 + std::distance(colors.begin(), colors.find(color))));
-
-        int base_vertex_id = vertices_count + 1;
-        int base_normal_id = normals_count + 1;
-
-        if (!dst_triangle_indices.empty())
-        {
-            fprintf(fp, "\n# triangular facets volume %d\n", volumes_count);
-            for (unsigned int i = 0; i < (unsigned int)dst_triangle_indices.size(); i += 3)
-            {
-                fprintf(fp, "f %d//%d %d//%d %d//%d\n", 
-                    base_vertex_id + dst_triangle_indices[i + 0].vertex, base_normal_id + dst_triangle_indices[i + 0].normal,
-                    base_vertex_id + dst_triangle_indices[i + 1].vertex, base_normal_id + dst_triangle_indices[i + 1].normal,
-                    base_vertex_id + dst_triangle_indices[i + 2].vertex, base_normal_id + dst_triangle_indices[i + 2].normal);
-            }
-        }
-
-        if (!dst_quad_indices.empty())
-        {
-            fprintf(fp, "\n# quadrangular facets volume %d\n", volumes_count);
-            for (unsigned int i = 0; i < (unsigned int)src_quad_indices.size(); i += 4)
-            {
-                fprintf(fp, "f %d//%d %d//%d %d//%d %d//%d\n", 
-                    base_vertex_id + dst_quad_indices[i + 0].vertex, base_normal_id + dst_quad_indices[i + 0].normal,
-                    base_vertex_id + dst_quad_indices[i + 1].vertex, base_normal_id + dst_quad_indices[i + 1].normal,
-                    base_vertex_id + dst_quad_indices[i + 2].vertex, base_normal_id + dst_quad_indices[i + 2].normal,
-                    base_vertex_id + dst_quad_indices[i + 3].vertex, base_normal_id + dst_quad_indices[i + 3].normal);
-            }
-        }
-
-        vertices_count += (unsigned int)dst_vertices.size();
-        normals_count += (unsigned int)dst_normals.size();
-    }
-
-    fclose(fp);
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 // caller is responsible for supplying NO lines with zero length
 static void thick_lines_to_indexed_vertex_array(
     const Lines                 &lines, 
@@ -1923,287 +1639,4 @@ void _3DScene::point3_to_verts(const Vec3crd& point, double width, double height
     thick_point_to_verts(point, width, height, volume);
 }
 
-#if !ENABLE_GCODE_VIEWER
-GLModel::GLModel()
-    : m_filename("")
-{
-    m_volume.shader_outside_printer_detection_enabled = false;
-}
-
-GLModel::~GLModel()
-{
-    reset();
-}
-
-void GLModel::set_color(const float* color, unsigned int size)
-{
-    ::memcpy((void*)m_volume.color, (const void*)color, (size_t)(std::min((unsigned int)4, size) * sizeof(float)));
-    m_volume.set_render_color(color, size);
-}
-
-const Vec3d& GLModel::get_offset() const
-{
-    return m_volume.get_volume_offset();
-}
-
-void GLModel::set_offset(const Vec3d& offset)
-{
-    m_volume.set_volume_offset(offset);
-}
-
-const Vec3d& GLModel::get_rotation() const
-{
-    return m_volume.get_volume_rotation();
-}
-
-void GLModel::set_rotation(const Vec3d& rotation)
-{
-    m_volume.set_volume_rotation(rotation);
-}
-
-const Vec3d& GLModel::get_scale() const
-{
-    return m_volume.get_volume_scaling_factor();
-}
-
-void GLModel::set_scale(const Vec3d& scale)
-{
-    m_volume.set_volume_scaling_factor(scale);
-}
-
-void GLModel::reset()
-{
-    m_volume.indexed_vertex_array.release_geometry();
-    m_filename = "";
-}
-
-void GLModel::render() const
-{
-    GLShaderProgram* shader = GUI::wxGetApp().get_current_shader();
-    if (shader == nullptr)
-        return;
-
-    glsafe(::glEnable(GL_BLEND));
-    glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
-
-    glsafe(::glCullFace(GL_BACK));
-    glsafe(::glEnableClientState(GL_VERTEX_ARRAY));
-    glsafe(::glEnableClientState(GL_NORMAL_ARRAY));
-
-    shader->set_uniform("uniform_color", m_volume.render_color, 4);
-    m_volume.render();
-
-    glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0));
-    glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
-
-    glsafe(::glDisableClientState(GL_VERTEX_ARRAY));
-    glsafe(::glDisableClientState(GL_NORMAL_ARRAY));
-
-    glsafe(::glDisable(GL_BLEND));
-}
-
-bool GLArrow::on_init()
-{
-    Pointf3s vertices;
-    std::vector<Vec3i> triangles;
-
-    // bottom face
-    vertices.emplace_back(0.5, 0.0, -0.1);
-    vertices.emplace_back(0.5, 2.0, -0.1);
-    vertices.emplace_back(1.0, 2.0, -0.1);
-    vertices.emplace_back(0.0, 3.0, -0.1);
-    vertices.emplace_back(-1.0, 2.0, -0.1);
-    vertices.emplace_back(-0.5, 2.0, -0.1);
-    vertices.emplace_back(-0.5, 0.0, -0.1);
-
-    // top face
-    vertices.emplace_back(0.5, 0.0, 0.1);
-    vertices.emplace_back(0.5, 2.0, 0.1);
-    vertices.emplace_back(1.0, 2.0, 0.1);
-    vertices.emplace_back(0.0, 3.0, 0.1);
-    vertices.emplace_back(-1.0, 2.0, 0.1);
-    vertices.emplace_back(-0.5, 2.0, 0.1);
-    vertices.emplace_back(-0.5, 0.0, 0.1);
-
-    // bottom face
-    triangles.emplace_back(0, 6, 1);
-    triangles.emplace_back(6, 5, 1);
-    triangles.emplace_back(5, 4, 3);
-    triangles.emplace_back(5, 3, 1);
-    triangles.emplace_back(1, 3, 2);
-
-    // top face
-    triangles.emplace_back(7, 8, 13);
-    triangles.emplace_back(13, 8, 12);
-    triangles.emplace_back(12, 10, 11);
-    triangles.emplace_back(8, 10, 12);
-    triangles.emplace_back(8, 9, 10);
-
-    // side face
-    triangles.emplace_back(0, 1, 8);
-    triangles.emplace_back(8, 7, 0);
-    triangles.emplace_back(1, 2, 9);
-    triangles.emplace_back(9, 8, 1);
-    triangles.emplace_back(2, 3, 10);
-    triangles.emplace_back(10, 9, 2);
-    triangles.emplace_back(3, 4, 11);
-    triangles.emplace_back(11, 10, 3);
-    triangles.emplace_back(4, 5, 12);
-    triangles.emplace_back(12, 11, 4);
-    triangles.emplace_back(5, 6, 13);
-    triangles.emplace_back(13, 12, 5);
-    triangles.emplace_back(6, 0, 7);
-    triangles.emplace_back(7, 13, 6);
-
-    m_volume.indexed_vertex_array.load_mesh(TriangleMesh(vertices, triangles));
-	m_volume.indexed_vertex_array.finalize_geometry(true);
-    return true;
-}
-
-GLCurvedArrow::GLCurvedArrow(unsigned int resolution)
-    : GLModel()
-    , m_resolution(resolution)
-{
-    if (m_resolution == 0)
-        m_resolution = 1;
-}
-
-bool GLCurvedArrow::on_init()
-{
-    Pointf3s vertices;
-    std::vector<Vec3i> triangles;
-
-    double ext_radius = 2.5;
-    double int_radius = 1.5;
-    double step = 0.5 * (double)PI / (double)m_resolution;
-
-    unsigned int vertices_per_level = 4 + 2 * m_resolution;
-
-    // bottom face
-    vertices.emplace_back(0.0, 1.5, -0.1);
-    vertices.emplace_back(0.0, 1.0, -0.1);
-    vertices.emplace_back(-1.0, 2.0, -0.1);
-    vertices.emplace_back(0.0, 3.0, -0.1);
-    vertices.emplace_back(0.0, 2.5, -0.1);
-
-    for (unsigned int i = 1; i <= m_resolution; ++i)
-    {
-        double angle = (double)i * step;
-        double x = ext_radius * ::sin(angle);
-        double y = ext_radius * ::cos(angle);
-
-        vertices.emplace_back(x, y, -0.1);
-    }
-
-    for (unsigned int i = 0; i < m_resolution; ++i)
-    {
-        double angle = (double)i * step;
-        double x = int_radius * ::cos(angle);
-        double y = int_radius * ::sin(angle);
-
-        vertices.emplace_back(x, y, -0.1);
-    }
-
-    // top face
-    vertices.emplace_back(0.0, 1.5, 0.1);
-    vertices.emplace_back(0.0, 1.0, 0.1);
-    vertices.emplace_back(-1.0, 2.0, 0.1);
-    vertices.emplace_back(0.0, 3.0, 0.1);
-    vertices.emplace_back(0.0, 2.5, 0.1);
-
-    for (unsigned int i = 1; i <= m_resolution; ++i)
-    {
-        double angle = (double)i * step;
-        double x = ext_radius * ::sin(angle);
-        double y = ext_radius * ::cos(angle);
-
-        vertices.emplace_back(x, y, 0.1);
-    }
-
-    for (unsigned int i = 0; i < m_resolution; ++i)
-    {
-        double angle = (double)i * step;
-        double x = int_radius * ::cos(angle);
-        double y = int_radius * ::sin(angle);
-
-        vertices.emplace_back(x, y, 0.1);
-    }
-
-    // bottom face
-    triangles.emplace_back(0, 1, 2);
-    triangles.emplace_back(0, 2, 4);
-    triangles.emplace_back(4, 2, 3);
-
-    int first_id = 4;
-    int last_id = (int)vertices_per_level;
-    triangles.emplace_back(last_id, 0, first_id);
-    triangles.emplace_back(last_id, first_id, first_id + 1);
-    for (unsigned int i = 1; i < m_resolution; ++i)
-    {
-        triangles.emplace_back(last_id - i, last_id - i + 1, first_id + i);
-        triangles.emplace_back(last_id - i, first_id + i, first_id + i + 1);
-    }
-
-    // top face
-    last_id += 1;
-    triangles.emplace_back(last_id + 0, last_id + 2, last_id + 1);
-    triangles.emplace_back(last_id + 0, last_id + 4, last_id + 2);
-    triangles.emplace_back(last_id + 4, last_id + 3, last_id + 2);
-
-    first_id = last_id + 4;
-    last_id = last_id + 4 + 2 * (int)m_resolution;
-    triangles.emplace_back(last_id, first_id, (int)vertices_per_level + 1);
-    triangles.emplace_back(last_id, first_id + 1, first_id);
-    for (unsigned int i = 1; i < m_resolution; ++i)
-    {
-        triangles.emplace_back(last_id - i, first_id + i, last_id - i + 1);
-        triangles.emplace_back(last_id - i, first_id + i + 1, first_id + i);
-    }
-
-    // side face
-	for (unsigned int i = 0; i < 4 + 2 * (unsigned int)m_resolution; ++i)
-    {
-        triangles.emplace_back(i, vertices_per_level + 2 + i, i + 1);
-        triangles.emplace_back(i, vertices_per_level + 1 + i, vertices_per_level + 2 + i);
-    }
-    triangles.emplace_back(vertices_per_level, vertices_per_level + 1, 0);
-    triangles.emplace_back(vertices_per_level, 2 * vertices_per_level + 1, vertices_per_level + 1);
-
-    m_volume.indexed_vertex_array.load_mesh(TriangleMesh(vertices, triangles));
-	m_volume.indexed_vertex_array.finalize_geometry(true);
-    return true;
-}
-
-bool GLBed::on_init_from_file(const std::string& filename)
-{
-    reset();
-
-    if (!boost::filesystem::exists(filename))
-        return false;
-
-    if (!boost::algorithm::iends_with(filename, ".stl"))
-        return false;
-
-    Model model;
-    try
-    {
-        model = Model::read_from_file(filename);
-    }
-    catch (std::exception & /* ex */)
-    {
-        return false;
-    }
-
-    m_filename = filename;
-
-    m_volume.indexed_vertex_array.load_mesh(model.mesh());
-	m_volume.indexed_vertex_array.finalize_geometry(true);
-
-    float color[4] = { 0.235f, 0.235f, 0.235f, 1.0f };
-    set_color(color, 4);
-
-    return true;
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 } // namespace Slic3r
diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp
index a6362dadc..930f63c8e 100644
--- a/src/slic3r/GUI/3DScene.hpp
+++ b/src/slic3r/GUI/3DScene.hpp
@@ -588,10 +588,6 @@ public:
     std::string         log_memory_info() const;
 
     bool                has_toolpaths_to_export() const;
-#if !ENABLE_GCODE_VIEWER
-    // Export the geometry of the GLVolumes toolpaths of this collection into the file with the given path, in obj format 
-    void                export_toolpaths_to_obj(const char* filename) const;
-#endif // !ENABLE_GCODE_VIEWER
 
 private:
     GLVolumeCollection(const GLVolumeCollection &other);
@@ -600,68 +596,6 @@ private:
 
 GLVolumeWithIdAndZList volumes_to_render(const GLVolumePtrs& volumes, GLVolumeCollection::ERenderType type, const Transform3d& view_matrix, std::function<bool(const GLVolume&)> filter_func = nullptr);
 
-#if !ENABLE_GCODE_VIEWER
-class GLModel
-{
-protected:
-    GLVolume m_volume;
-    std::string m_filename;
-
-public:
-    GLModel();
-    virtual ~GLModel();
-
-    // init() / init_from_file() shall be called with the OpenGL context active!
-    bool init() { return on_init(); }
-    bool init_from_file(const std::string& filename) { return on_init_from_file(filename); }
-
-    void center_around(const Vec3d& center) { m_volume.set_volume_offset(center - m_volume.bounding_box().center()); }
-    void set_color(const float* color, unsigned int size);
-
-    const Vec3d& get_offset() const;
-    void set_offset(const Vec3d& offset);
-    const Vec3d& get_rotation() const;
-    void set_rotation(const Vec3d& rotation);
-    const Vec3d& get_scale() const;
-    void set_scale(const Vec3d& scale);
-
-    const std::string& get_filename() const { return m_filename; }
-    const BoundingBoxf3& get_bounding_box() const { return m_volume.bounding_box(); }
-    const BoundingBoxf3& get_transformed_bounding_box() const { return m_volume.transformed_bounding_box(); }
-
-    void reset();
-
-    void render() const; 
-
-protected:
-    virtual bool on_init() { return false; }
-    virtual bool on_init_from_file(const std::string& filename) { return false; }
-};
-
-class GLArrow : public GLModel
-{
-protected:
-    bool on_init() override;
-};
-
-class GLCurvedArrow : public GLModel
-{
-    unsigned int m_resolution;
-
-public:
-    explicit GLCurvedArrow(unsigned int resolution);
-
-protected:
-    bool on_init() override;
-};
-
-class GLBed : public GLModel
-{
-protected:
-    bool on_init_from_file(const std::string& filename) override;
-};
-#endif // !ENABLE_GCODE_VIEWER
-
 struct _3DScene
 {
     static void thick_lines_to_verts(const Lines& lines, const std::vector<double>& widths, const std::vector<double>& heights, bool closed, double top_z, GLVolume& volume);
diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp
index c6161bc24..6e3f8ecc8 100644
--- a/src/slic3r/GUI/AboutDialog.cpp
+++ b/src/slic3r/GUI/AboutDialog.cpp
@@ -37,17 +37,10 @@ void AboutDialogLogo::onRepaint(wxEvent &event)
 // CopyrightsDialog
 // -----------------------------------------
 CopyrightsDialog::CopyrightsDialog()
-#if ENABLE_GCODE_VIEWER
     : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, from_u8((boost::format("%1% - %2%")
         % (wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME)
         % _utf8(L("Portions copyright"))).str()),
         wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
-#else
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, from_u8((boost::format("%1% - %2%")
-                                                       % SLIC3R_APP_NAME
-                                                       % _utf8(L("Portions copyright"))).str()),
-                wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
-#endif // ENABLE_GCODE_VIEWER
 {
     this->SetFont(wxGetApp().normal_font());
 	this->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
@@ -208,13 +201,8 @@ void CopyrightsDialog::onCloseDialog(wxEvent &)
 }
 
 AboutDialog::AboutDialog()
-#if ENABLE_GCODE_VIEWER
     : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, from_u8((boost::format(_utf8(L("About %s"))) % (wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME)).str()), wxDefaultPosition,
         wxDefaultSize, /*wxCAPTION*/wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
-#else
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, from_u8((boost::format(_utf8(L("About %s"))) % SLIC3R_APP_NAME).str()), wxDefaultPosition,
-                wxDefaultSize, /*wxCAPTION*/wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
-#endif // ENABLE_GCODE_VIEWER
 {
     SetFont(wxGetApp().normal_font());
 
@@ -226,11 +214,7 @@ AboutDialog::AboutDialog()
 	main_sizer->Add(hsizer, 0, wxEXPAND | wxALL, 20);
 
     // logo
-#if ENABLE_GCODE_VIEWER
     m_logo_bitmap = ScalableBitmap(this, wxGetApp().is_editor() ? "PrusaSlicer_192px.png" : "PrusaSlicer-gcodeviewer_192px.png", 192);
-#else
-    m_logo_bitmap = ScalableBitmap(this, "PrusaSlicer_192px.png", 192);
-#endif // ENABLE_GCODE_VIEWER
     m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bitmap.bmp());
 	hsizer->Add(m_logo, 1, wxALIGN_CENTER_VERTICAL);
     
@@ -239,11 +223,7 @@ AboutDialog::AboutDialog()
 
     // title
     {
-#if ENABLE_GCODE_VIEWER
         wxStaticText* title = new wxStaticText(this, wxID_ANY, wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME, wxDefaultPosition, wxDefaultSize);
-#else
-        wxStaticText* title = new wxStaticText(this, wxID_ANY, SLIC3R_APP_NAME, wxDefaultPosition, wxDefaultSize);
-#endif // ENABLE_GCODE_VIEWER
         wxFont title_font = GUI::wxGetApp().bold_font();
         title_font.SetFamily(wxFONTFAMILY_ROMAN);
         title_font.SetPointSize(24);
@@ -253,7 +233,7 @@ AboutDialog::AboutDialog()
     
     // version
     {
-        auto version_string = _L("Version")+ " " + std::string(SLIC3R_VERSION);
+        auto version_string = _L("Version") + " " + std::string(SLIC3R_VERSION);
         wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize);
         wxFont version_font = GetFont();
         #ifdef __WXMSW__
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index df8878cd8..66d1f551f 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -141,11 +141,7 @@ void BackgroundSlicingProcess::process_fff()
 	// Passing the timestamp 
 	evt.SetInt((int)(m_fff_print->step_state_with_timestamp(PrintStep::psSlicingFinished).timestamp));
 	wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, evt.Clone());
-#if ENABLE_GCODE_VIEWER
 	m_fff_print->export_gcode(m_temp_output_path, m_gcode_result, m_thumbnail_cb);
-#else
-	m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data, m_thumbnail_cb);
-#endif // ENABLE_GCODE_VIEWER
 	if (this->set_step_started(bspsGCodeFinalize)) {
 	    if (! m_export_path.empty()) {
 			wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id));
@@ -433,25 +429,14 @@ Print::ApplyStatus BackgroundSlicingProcess::apply(const Model &model, const Dyn
 	assert(m_print != nullptr);
 	assert(config.opt_enum<PrinterTechnology>("printer_technology") == m_print->technology());
 	Print::ApplyStatus invalidated = m_print->apply(model, config);
-#if ENABLE_GCODE_VIEWER
 	if ((invalidated & PrintBase::APPLY_STATUS_INVALIDATED) != 0 && m_print->technology() == ptFFF &&
-		!this->m_fff_print->is_step_done(psGCodeExport))
-	{
+		!this->m_fff_print->is_step_done(psGCodeExport)) {
 		// Some FFF status was invalidated, and the G-code was not exported yet.
 		// Let the G-code preview UI know that the final G-code preview is not valid.
 		// In addition, this early memory deallocation reduces memory footprint.
 		if (m_gcode_result != nullptr)
 			m_gcode_result->reset();
 	}
-#else
-	if ((invalidated & PrintBase::APPLY_STATUS_INVALIDATED) != 0 && m_print->technology() == ptFFF &&
-		m_gcode_preview_data != nullptr && ! this->m_fff_print->is_step_done(psGCodeExport)) {
-		// Some FFF status was invalidated, and the G-code was not exported yet.
-		// Let the G-code preview UI know that the final G-code preview is not valid.
-		// In addition, this early memory deallocation reduces memory footprint.
-		m_gcode_preview_data->reset();
-	}
-#endif // ENABLE_GCODE_VIEWER
 	return invalidated;
 }
 
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
index e6314068e..d4fc3ddcc 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
@@ -11,9 +11,7 @@
 #include "libslic3r/GCode/ThumbnailData.hpp"
 #include "libslic3r/Format/SL1.hpp"
 #include "slic3r/Utils/PrintHost.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "libslic3r/GCode/GCodeProcessor.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 
 namespace boost { namespace filesystem { class path; } }
@@ -21,9 +19,6 @@ namespace boost { namespace filesystem { class path; } }
 namespace Slic3r {
 
 class DynamicPrintConfig;
-#if !ENABLE_GCODE_VIEWER
-class GCodePreviewData;
-#endif // !ENABLE_GCODE_VIEWER
 class Model;
 class SLAPrint;
 
@@ -88,11 +83,7 @@ public:
 	void set_fff_print(Print *print) { m_fff_print = print; }
     void set_sla_print(SLAPrint *print) { m_sla_print = print; m_sla_print->set_printer(&m_sla_archive); }
 	void set_thumbnail_cb(ThumbnailsGeneratorCallback cb) { m_thumbnail_cb = cb; }
-#if ENABLE_GCODE_VIEWER
 	void set_gcode_result(GCodeProcessor::Result* result) { m_gcode_result = result; }
-#else
-	void set_gcode_preview_data(GCodePreviewData* gpd) { m_gcode_preview_data = gpd; }
-#endif // ENABLE_GCODE_VIEWER
 
 	// The following wxCommandEvent will be sent to the UI thread / Plater window, when the slicing is finished
 	// and the background processing will transition into G-code export.
@@ -198,13 +189,8 @@ private:
 	// Non-owned pointers to Print instances.
 	Print 					   *m_fff_print 		 = nullptr;
 	SLAPrint 				   *m_sla_print			 = nullptr;
-#if ENABLE_GCODE_VIEWER
 	// Data structure, to which the G-code export writes its annotations.
 	GCodeProcessor::Result     *m_gcode_result = nullptr;
-#else
-	// Data structure, to which the G-code export writes its annotations.
-	GCodePreviewData 		   *m_gcode_preview_data = nullptr;
-#endif // ENABLE_GCODE_VIEWER
 	// Callback function, used to write thumbnails into gcode.
 	ThumbnailsGeneratorCallback m_thumbnail_cb = nullptr;
 	SL1Archive                  m_sla_archive;
diff --git a/src/slic3r/GUI/BitmapCache.cpp b/src/slic3r/GUI/BitmapCache.cpp
index cc4c831ae..41609954e 100644
--- a/src/slic3r/GUI/BitmapCache.cpp
+++ b/src/slic3r/GUI/BitmapCache.cpp
@@ -3,9 +3,7 @@
 #include "libslic3r/Utils.hpp"
 #include "../Utils/MacDarkMode.hpp"
 #include "GUI.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "GUI_Utils.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 #include <boost/filesystem.hpp>
 
@@ -357,17 +355,6 @@ wxBitmap BitmapCache::mksolid(size_t width, size_t height, unsigned char r, unsi
     return wxImage_to_wxBitmap_with_alpha(std::move(image), scale);
 }
 
-
-#if !ENABLE_GCODE_VIEWER
-static inline int hex_digit_to_int(const char c)
-{
-    return
-        (c >= '0' && c <= '9') ? int(c - '0') :
-        (c >= 'A' && c <= 'F') ? int(c - 'A') + 10 :
-        (c >= 'a' && c <= 'f') ? int(c - 'a') + 10 : -1;
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 bool BitmapCache::parse_color(const std::string& scolor, unsigned char* rgb_out)
 {
     rgb_out[0] = rgb_out[1] = rgb_out[2] = 0;
diff --git a/src/slic3r/GUI/ConfigWizard_private.hpp b/src/slic3r/GUI/ConfigWizard_private.hpp
index 0f0febe91..9fcc9267d 100644
--- a/src/slic3r/GUI/ConfigWizard_private.hpp
+++ b/src/slic3r/GUI/ConfigWizard_private.hpp
@@ -565,9 +565,7 @@ struct ConfigWizard::priv
 
     priv(ConfigWizard *q)
         : q(q)
-#if ENABLE_GCODE_VIEWER
         , appconfig_new(AppConfig::EAppMode::Editor)
-#endif // ENABLE_GCODE_VIEWER
         , filaments(T_FFF)
         , sla_materials(T_SLA)
     {}
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index cab19796b..f5c0d8f53 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -177,11 +177,7 @@ public:
         // load bitmap for logo
         BitmapCache bmp_cache;
         int logo_size = lround(width * 0.25);
-#if ENABLE_GCODE_VIEWER
         wxBitmap logo_bmp = *bmp_cache.load_svg(wxGetApp().is_editor() ? "prusa_slicer_logo" : "add_gcode", logo_size, logo_size);
-#else
-        wxBitmap logo_bmp = *bmp_cache.load_svg("prusa_slicer_logo", logo_size, logo_size);
-#endif // ENABLE_GCODE_VIEWER
 
         wxCoord margin = int(m_scale * 20);
 
@@ -229,11 +225,7 @@ private:
         void init(wxFont init_font)
         {
             // title
-#if ENABLE_GCODE_VIEWER
             title = wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME;
-#else
-            title = SLIC3R_APP_NAME;
-#endif // ENABLE_GCODE_VIEWER
 
             // dynamically get the version to display
             version = _L("Version") + " " + std::string(SLIC3R_VERSION);
@@ -601,13 +593,11 @@ void GUI_App::post_init()
     if (! this->initialized())
         throw Slic3r::RuntimeError("Calling post_init() while not yet initialized");
 
-#if ENABLE_GCODE_VIEWER
     if (this->init_params->start_as_gcodeviewer) {
         if (! this->init_params->input_files.empty())
             this->plater()->load_gcode(wxString::FromUTF8(this->init_params->input_files[0].c_str()));
     }
     else {
-#endif // ENABLE_GCODE_VIEWER_AS
 #if 0
         // Load the cummulative config over the currently active profiles.
         //FIXME if multiple configs are loaded, only the last one will have an effect.
@@ -626,22 +616,14 @@ void GUI_App::post_init()
             this->plater()->load_files(this->init_params->input_files, true, true);
         if (! this->init_params->extra_config.empty())
             this->mainframe->load_config(this->init_params->extra_config);
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 }
 
 IMPLEMENT_APP(GUI_App)
 
-#if ENABLE_GCODE_VIEWER
 GUI_App::GUI_App(EAppMode mode)
-#else
-GUI_App::GUI_App()
-#endif // ENABLE_GCODE_VIEWER
     : wxApp()
-#if ENABLE_GCODE_VIEWER
     , m_app_mode(mode)
-#endif // ENABLE_GCODE_VIEWER
     , m_em_unit(10)
     , m_imgui(new ImGuiWrapper())
     , m_wizard(nullptr)
@@ -705,11 +687,7 @@ void GUI_App::init_app_config()
     }
 
 	if (!app_config)
-#if ENABLE_GCODE_VIEWER
         app_config = new AppConfig(is_editor() ? AppConfig::EAppMode::Editor : AppConfig::EAppMode::GCodeViewer);
-#else
-        app_config = new AppConfig();
-#endif // ENABLE_GCODE_VIEWER
 
 	// load settings
 	m_app_conf_exists = app_config->exists();
@@ -717,7 +695,6 @@ void GUI_App::init_app_config()
         std::string error = app_config->load();
         if (!error.empty()) {
             // Error while parsing config file. We'll customize the error message and rethrow to be displayed.
-#if ENABLE_GCODE_VIEWER
             if (is_editor()) {
                 throw Slic3r::RuntimeError(
                     _u8L("Error parsing PrusaSlicer config file, it is probably corrupted. "
@@ -725,14 +702,11 @@ void GUI_App::init_app_config()
                     "\n\n" + app_config->config_path() + "\n\n" + error);
             }
             else {
-#endif // ENABLE_GCODE_VIEWER
                 throw Slic3r::RuntimeError(
                     _u8L("Error parsing PrusaGCodeViewer config file, it is probably corrupted. "
                         "Try to manually delete the file to recover from the error.") +
                     "\n\n" + app_config->config_path() + "\n\n" + error);
-#if ENABLE_GCODE_VIEWER
             }
-#endif // ENABLE_GCODE_VIEWER
         }
     }
 }
@@ -775,9 +749,7 @@ bool GUI_App::on_init_inner()
 
 //     Slic3r::debugf "wxWidgets version %s, Wx version %s\n", wxVERSION_STRING, wxVERSION;
 
-#if ENABLE_GCODE_VIEWER
     if (is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         std::string msg = Http::tls_global_init();
         std::string ssl_cert_store = app_config->get("tls_accepted_cert_store_location");
         bool ssl_accept = app_config->get("tls_cert_store_accepted") == "yes" && ssl_cert_store == Http::tls_system_cert_store();
@@ -795,9 +767,7 @@ bool GUI_App::on_init_inner()
             app_config->set("tls_accepted_cert_store_location",
                 dlg.IsCheckBoxChecked() ? Http::tls_system_cert_store() : "");
         }
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 
     app_config->set("version", SLIC3R_VERSION);
     app_config->save();
@@ -807,11 +777,7 @@ bool GUI_App::on_init_inner()
     SplashScreen* scrn = nullptr;
     if (app_config->get("show_splash_screen") == "1") {
         // make a bitmap with dark grey banner on the left side
-#if ENABLE_GCODE_VIEWER
         wxBitmap bmp = SplashScreen::MakeBitmap(wxBitmap(from_u8(var(is_editor() ? "splashscreen.jpg" : "splashscreen-gcodepreview.jpg")), wxBITMAP_TYPE_JPEG));
-#else
-        wxBitmap bmp = SplashScreen::MakeBitmap(wxBitmap(from_u8(var("splashscreen.jpg")), wxBITMAP_TYPE_JPEG));
-#endif // ENABLE_GCODE_VIEWER
 
         // Detect position (display) to show the splash screen
         // Now this position is equal to the mainframe position
@@ -837,9 +803,7 @@ bool GUI_App::on_init_inner()
     // supplied as argument to --datadir; in that case we should still run the wizard
     preset_bundle->setup_directories();
 
-#if ENABLE_GCODE_VIEWER
     if (is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
 #ifdef __WXMSW__ 
         associate_3mf_files();
 #endif // __WXMSW__
@@ -854,14 +818,12 @@ bool GUI_App::on_init_inner()
                 }
             }
             });
-#if ENABLE_GCODE_VIEWER
     }
     else {
 #ifdef __WXMSW__ 
         associate_gcode_files();
 #endif // __WXMSW__
     }
-#endif // ENABLE_GCODE_VIEWER
 
     // initialize label colors and fonts
     init_label_colours();
@@ -889,18 +851,12 @@ bool GUI_App::on_init_inner()
     Slic3r::I18N::set_translate_callback(libslic3r_translate_callback);
 
     // application frame
-#if ENABLE_GCODE_VIEWER
     if (scrn && is_editor())
-#else
-    if (scrn)
-#endif // ENABLE_GCODE_VIEWER
         scrn->SetText(_L("Preparing settings tabs..."));
 
     mainframe = new MainFrame();
     // hide settings tabs after first Layout
-#if ENABLE_GCODE_VIEWER
     if (is_editor())
-#endif // ENABLE_GCODE_VIEWER
         mainframe->select_tab(size_t(0));
 
     sidebar().obj_list()->init_objects(); // propagate model objects to object list
@@ -941,9 +897,7 @@ bool GUI_App::on_init_inner()
         if (once) {
             once = false;
 
-#if ENABLE_GCODE_VIEWER
             if (preset_updater != nullptr) {
-#endif // ENABLE_GCODE_VIEWER
                 check_updates(false);
 
                 CallAfter([this] {
@@ -951,9 +905,7 @@ bool GUI_App::on_init_inner()
                     preset_updater->slic3r_update_notify();
                     preset_updater->sync(preset_bundle);
                     });
-#if ENABLE_GCODE_VIEWER
             }
-#endif // ENABLE_GCODE_VIEWER
 
 #ifdef _WIN32
 			//sets window property to mainframe so other instances can indentify it
@@ -962,7 +914,6 @@ bool GUI_App::on_init_inner()
         }
     });
 
-#if ENABLE_GCODE_VIEWER
     if (is_gcode_viewer()) {
         mainframe->update_layout();
         if (plater_ != nullptr)
@@ -970,7 +921,6 @@ bool GUI_App::on_init_inner()
             plater_->set_printer_technology(ptFFF);
     }
     else
-#endif // ENABLE_GCODE_VIEWER
         load_current_presets();
     mainframe->Show(true);
 
@@ -1163,9 +1113,7 @@ void GUI_App::check_printer_presets()
 
 void GUI_App::recreate_GUI(const wxString& msg_name)
 {
-#if ENABLE_GCODE_VIEWER
     m_is_recreating_gui = true;
-#endif // ENABLE_GCODE_VIEWER
 
     mainframe->shutdown();
 
@@ -1175,9 +1123,7 @@ void GUI_App::recreate_GUI(const wxString& msg_name)
 
     MainFrame *old_main_frame = mainframe;
     mainframe = new MainFrame();
-#if ENABLE_GCODE_VIEWER
     if (is_editor())
-#endif // ENABLE_GCODE_VIEWER
         // hide settings tabs after first Layout
         mainframe->select_tab(size_t(0));
     // Propagate model objects to object list.
@@ -1210,9 +1156,7 @@ void GUI_App::recreate_GUI(const wxString& msg_name)
 //         config_wizard_startup(true);
 //     });
 
-#if ENABLE_GCODE_VIEWER
     m_is_recreating_gui = false;
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void GUI_App::system_info()
@@ -1297,7 +1241,6 @@ void GUI_App::import_model(wxWindow *parent, wxArrayString& input_files) const
         dialog.GetPaths(input_files);
 }
 
-#if ENABLE_GCODE_VIEWER
 void GUI_App::load_gcode(wxWindow* parent, wxString& input_file) const
 {
     input_file.Clear();
@@ -1309,7 +1252,6 @@ void GUI_App::load_gcode(wxWindow* parent, wxString& input_file) const
     if (dialog.ShowModal() == wxID_OK)
         input_file = dialog.GetPath();
 }
-#endif // ENABLE_GCODE_VIEWER
 
 bool GUI_App::switch_language()
 {
@@ -1545,17 +1487,13 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
     const auto config_wizard_name = _(ConfigWizard::name(true));
     const auto config_wizard_tooltip = from_u8((boost::format(_utf8(L("Run %s"))) % config_wizard_name).str());
     // Cmd+, is standard on OS X - what about other operating systems?
-#if ENABLE_GCODE_VIEWER
     if (is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         local_menu->Append(config_id_base + ConfigMenuWizard, config_wizard_name + dots, config_wizard_tooltip);
         local_menu->Append(config_id_base + ConfigMenuSnapshots, _L("&Configuration Snapshots") + dots, _L("Inspect / activate configuration snapshots"));
         local_menu->Append(config_id_base + ConfigMenuTakeSnapshot, _L("Take Configuration &Snapshot"), _L("Capture a configuration snapshot"));
         local_menu->Append(config_id_base + ConfigMenuUpdate, _L("Check for updates"), _L("Check for configuration updates"));
         local_menu->AppendSeparator();
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
     local_menu->Append(config_id_base + ConfigMenuPreferences, _L("&Preferences") + dots +
 #ifdef __APPLE__
         "\tCtrl+,",
@@ -1563,16 +1501,10 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
         "\tCtrl+P",
 #endif
         _L("Application preferences"));
-#if ENABLE_GCODE_VIEWER
     wxMenu* mode_menu = nullptr;
     if (is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         local_menu->AppendSeparator();
-#if ENABLE_GCODE_VIEWER
         mode_menu = new wxMenu();
-#else
-        auto mode_menu = new wxMenu();
-#endif // ENABLE_GCODE_VIEWER
         mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _L("Simple"), _L("Simple View Mode"));
 //    mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _L("Advanced"), _L("Advanced View Mode"));
         mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _CTX(L_CONTEXT("Advanced", "Mode"), "Mode"), _L("Advanced View Mode"));
@@ -1582,21 +1514,15 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
         Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if (get_mode() == comExpert) evt.Check(true); }, config_id_base + ConfigMenuModeExpert);
 
         local_menu->AppendSubMenu(mode_menu, _L("Mode"), wxString::Format(_L("%s View Mode"), SLIC3R_APP_NAME));
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
     local_menu->AppendSeparator();
     local_menu->Append(config_id_base + ConfigMenuLanguage, _L("&Language"));
-#if ENABLE_GCODE_VIEWER
     if (is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         local_menu->AppendSeparator();
         local_menu->Append(config_id_base + ConfigMenuFlashFirmware, _L("Flash printer &firmware"), _L("Upload a firmware image into an Arduino based printer"));
         // TODO: for when we're able to flash dictionaries
         // local_menu->Append(config_id_base + FirmwareMenuDict,  _L("Flash language file"),    _L("Upload a language dictionary file into a Prusa printer"));
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 
     local_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent &event) {
         switch (event.GetId() - config_id_base) {
@@ -1650,10 +1576,8 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
                 PreferencesDialog dlg(mainframe);
                 dlg.ShowModal();
                 app_layout_changed = dlg.settings_layout_changed();
-#if ENABLE_GCODE_VIEWER
                 if (dlg.seq_top_layer_only_changed())
                     this->plater_->refresh_print();
-#endif // ENABLE_GCODE_VIEWER
             }
             if (app_layout_changed) {
                 // hide full main_sizer for mainFrame
@@ -1672,19 +1596,13 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
                 // the dialog needs to be destroyed before the call to switch_language()
                 // or sometimes the application crashes into wxDialogBase() destructor
                 // so we put it into an inner scope
-#if ENABLE_GCODE_VIEWER
                 wxString title = is_editor() ? wxString(SLIC3R_APP_NAME) : wxString(GCODEVIEWER_APP_NAME);
                 title += " - " + _L("Language selection");
-#endif // ENABLE_GCODE_VIEWER
                 wxMessageDialog dialog(nullptr,
                     _L("Switching the language will trigger application restart.\n"
                         "You will lose content of the plater.") + "\n\n" +
                     _L("Do you want to proceed?"),
-#if ENABLE_GCODE_VIEWER
                     title,
-#else
-                    wxString(SLIC3R_APP_NAME) + " - " + _L("Language selection"),
-#endif // ENABLE_GCODE_VIEWER
                     wxICON_QUESTION | wxOK | wxCANCEL);
                 if (dialog.ShowModal() == wxID_CANCEL)
                     return;
@@ -1703,16 +1621,12 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
     
     using std::placeholders::_1;
 
-#if ENABLE_GCODE_VIEWER
     if (mode_menu != nullptr) {
-#endif // ENABLE_GCODE_VIEWER
         auto modfn = [this](int mode, wxCommandEvent&) { if (get_mode() != mode) save_mode(mode); };
         mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comSimple, _1), config_id_base + ConfigMenuModeSimple);
         mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comAdvanced, _1), config_id_base + ConfigMenuModeAdvanced);
         mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comExpert, _1), config_id_base + ConfigMenuModeExpert);
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 
     menu->Append(local_menu, _L("&Configuration"));
 }
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index f00cf02df..fec73b724 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -97,7 +97,6 @@ static wxString dots("…", wxConvUTF8);
 
 class GUI_App : public wxApp
 {
-#if ENABLE_GCODE_VIEWER
 public:
     enum class EAppMode : unsigned char
     {
@@ -106,14 +105,10 @@ public:
     };
 
 private:
-#endif // ENABLE_GCODE_VIEWER
-
     bool            m_initialized { false };
     bool            m_app_conf_exists{ false };
-#if ENABLE_GCODE_VIEWER
     EAppMode        m_app_mode{ EAppMode::Editor };
     bool            m_is_recreating_gui{ false };
-#endif // ENABLE_GCODE_VIEWER
 
     wxColour        m_color_label_modified;
     wxColour        m_color_label_sys;
@@ -149,19 +144,13 @@ public:
     bool            OnInit() override;
     bool            initialized() const { return m_initialized; }
 
-#if ENABLE_GCODE_VIEWER
     explicit GUI_App(EAppMode mode = EAppMode::Editor);
-#else
-    GUI_App();
-#endif // ENABLE_GCODE_VIEWER
     ~GUI_App() override;
 
-#if ENABLE_GCODE_VIEWER
     EAppMode get_app_mode() const { return m_app_mode; }
     bool is_editor() const { return m_app_mode == EAppMode::Editor; }
     bool is_gcode_viewer() const { return m_app_mode == EAppMode::GCodeViewer; }
     bool is_recreating_gui() const { return m_is_recreating_gui; }
-#endif // ENABLE_GCODE_VIEWER
 
     // To be called after the GUI is fully built up.
     // Process command line parameters cached in this->init_params,
@@ -199,9 +188,7 @@ public:
     void            keyboard_shortcuts();
     void            load_project(wxWindow *parent, wxString& input_file) const;
     void            import_model(wxWindow *parent, wxArrayString& input_files) const;
-#if ENABLE_GCODE_VIEWER
     void            load_gcode(wxWindow* parent, wxString& input_file) const;
-#endif // ENABLE_GCODE_VIEWER
 
     static bool     catch_error(std::function<void()> cb, const std::string& err);
 
diff --git a/src/slic3r/GUI/GUI_Init.cpp b/src/slic3r/GUI/GUI_Init.cpp
index d1c17bc89..70536c6ba 100644
--- a/src/slic3r/GUI/GUI_Init.cpp
+++ b/src/slic3r/GUI/GUI_Init.cpp
@@ -22,7 +22,6 @@ namespace GUI {
 int GUI_Run(GUI_InitParams &params)
 {
     try {
-#if ENABLE_GCODE_VIEWER
         GUI::GUI_App* gui = new GUI::GUI_App(params.start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor);
         if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) {
             // G-code viewer is currently not performing instance check, a new G-code viewer is started every time.
@@ -32,29 +31,20 @@ int GUI_Run(GUI_InitParams &params)
                 return -1;
             }
         }
-#else
-        GUI::GUI_App *gui = new GUI::GUI_App();
-#endif // ENABLE_GCODE_VIEWER
 
 //      gui->autosave = m_config.opt_string("autosave");
         GUI::GUI_App::SetInstance(gui);
         gui->init_params = &params;
 /*
-#if ENABLE_GCODE_VIEWER
         gui->CallAfter([gui, this, &load_configs, params.start_as_gcodeviewer] {
-#else
-        gui->CallAfter([gui, this, &load_configs] {
-#endif // ENABLE_GCODE_VIEWER
             if (!gui->initialized()) {
                 return;
             }
 
-#if ENABLE_GCODE_VIEWER
             if (params.start_as_gcodeviewer) {
                 if (!m_input_files.empty())
                     gui->plater()->load_gcode(wxString::FromUTF8(m_input_files[0].c_str()));
             } else {
-#endif // ENABLE_GCODE_VIEWER_AS
 #if 0
                 // Load the cummulative config over the currently active profiles.
                 //FIXME if multiple configs are loaded, only the last one will have an effect.
@@ -73,9 +63,7 @@ int GUI_Run(GUI_InitParams &params)
                     gui->plater()->load_files(m_input_files, true, true);
                 if (!m_extra_config.empty())
                     gui->mainframe->load_config(m_extra_config);
-#if ENABLE_GCODE_VIEWER
             }
-#endif // ENABLE_GCODE_VIEWER
         });
 */
         int result = wxEntry(params.argc, params.argv);

From a9f6e6da9dd59ab76e837fbe2bebc417bd827073 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Wed, 18 Nov 2020 12:08:09 +0100
Subject: [PATCH 038/138] Changed layout of the "Machine limits" settings tab

---
 src/slic3r/GUI/OG_CustomCtrl.cpp | 14 +++++++++-----
 src/slic3r/GUI/OptionsGroup.cpp  | 31 ++++++++++++++++++++++---------
 src/slic3r/GUI/OptionsGroup.hpp  |  9 +++------
 src/slic3r/GUI/Tab.cpp           |  6 ++----
 4 files changed, 36 insertions(+), 24 deletions(-)

diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp
index 7feaacedc..30c7e76e4 100644
--- a/src/slic3r/GUI/OG_CustomCtrl.cpp
+++ b/src/slic3r/GUI/OG_CustomCtrl.cpp
@@ -90,7 +90,7 @@ void OG_CustomCtrl::init_ctrl_lines()
             height = m_bmp_blinking_sz.GetHeight() + m_v_gap;
             ctrl_lines.emplace_back(CtrlLine(height, this, line, true));
         }
-        else if (opt_group->label_width != 0 && !line.label.IsEmpty())
+        else if (opt_group->label_width != 0 && (!line.label.IsEmpty() || option_set.front().opt.gui_type == "legend") )
         {
             wxSize label_sz = GetTextExtent(line.label);
             height = label_sz.y * (label_sz.GetWidth() > int(opt_group->label_width * m_em_unit) ? 2 : 1) + m_v_gap;
@@ -135,7 +135,7 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
             }
 
             wxString label = line.label;
-            if (opt_group->label_width != 0 && !label.IsEmpty())
+            if (opt_group->label_width != 0)
                 h_pos += opt_group->label_width * m_em_unit + m_h_gap;
 
             int blinking_button_width = m_bmp_blinking_sz.GetWidth() + m_h_gap;
@@ -177,10 +177,13 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
                     GetTextExtent(label, &label_w, &label_h, 0, 0, &m_font);
                     h_pos += label_w + 1 + m_h_gap;
                 }                
-                h_pos += 3 * blinking_button_width;
+                h_pos += (opt.opt.gui_type == "legend" ? 1 : 3) * blinking_button_width;
                 
                 if (field == field_in)
-                    break;    
+                    break;
+                if (opt.opt.gui_type == "legend")
+                    h_pos += 2 * blinking_button_width;
+
                 h_pos += field->getWindow()->GetSize().x;
 
                 if (option_set.size() == 1 && option_set.front().opt.full_width)
@@ -556,7 +559,8 @@ wxCoord OG_CustomCtrl::CtrlLine::draw_mode_bmp(wxDC& dc, wxCoord v_pos)
     wxBitmap bmp = create_scaled_bitmap(bmp_name, ctrl, wxOSX ? 10 : 12);
     wxCoord y_draw = v_pos + lround((height - get_bitmap_size(bmp).GetHeight()) / 2);
 
-    dc.DrawBitmap(bmp, 0, y_draw);
+    if (og_line.get_options().front().opt.gui_type != "legend")
+        dc.DrawBitmap(bmp, 0, y_draw);
 
     return get_bitmap_size(bmp).GetWidth() + ctrl->m_h_gap;
 }
diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp
index b1065da66..dee250fa7 100644
--- a/src/slic3r/GUI/OptionsGroup.cpp
+++ b/src/slic3r/GUI/OptionsGroup.cpp
@@ -106,11 +106,20 @@ OptionsGroup::OptionsGroup(	wxWindow* _parent, const wxString& title,
                             bool is_tab_opt /* = false */,
                             column_t extra_clmn /* = nullptr */) :
                 m_parent(_parent), title(title),
-                m_show_modified_btns(is_tab_opt),
+                m_use_custom_ctrl(is_tab_opt),
                 staticbox(title!=""), extra_column(extra_clmn)
 {
 }
 
+bool OptionsGroup::is_legend_line()
+{
+	if (m_lines.size() == 1) {
+		const std::vector<Option>& option_set = m_lines.front().get_options();
+		return !option_set.empty() && option_set.front().opt.gui_type == "legend";
+	}
+	return false;
+}
+
 void OptionsGroup::show_field(const t_config_option_key& opt_key, bool show/* = true*/)
 {
     Field* field = get_field(opt_key);
@@ -196,16 +205,20 @@ void OptionsGroup::activate_line(Line& line)
 		}
     }
 
-    if (!custom_ctrl && m_show_modified_btns) {
-        custom_ctrl = new OG_CustomCtrl((wxWindow*)this->stb, this);
-        sizer->Add(custom_ctrl, 0, wxEXPAND | wxALL, wxOSX || !staticbox ? 0 : 5);
-    }
-
 	auto option_set = line.get_options();
+	bool is_legend_line = option_set.front().opt.gui_type == "legend";
+
+    if (!custom_ctrl && m_use_custom_ctrl) {
+        custom_ctrl = new OG_CustomCtrl(is_legend_line ? this->parent() : (wxWindow*)this->stb, this);
+		if (is_legend_line)
+			sizer->Add(custom_ctrl, 0, wxEXPAND | wxLEFT, wxOSX ? 0 : 10);
+		else
+            sizer->Add(custom_ctrl, 0, wxEXPAND | wxALL, wxOSX || !staticbox ? 0 : 5);
+    }
 
 	// Set sidetext width for a better alignment of options in line
 	// "m_show_modified_btns==true" means that options groups are in tabs
-	if (option_set.size() > 1 && m_show_modified_btns) {
+	if (option_set.size() > 1 && m_use_custom_ctrl) {
 		sidetext_width = Field::def_width_thinner();
 	}
 
@@ -231,7 +244,7 @@ void OptionsGroup::activate_line(Line& line)
         m_use_custom_ctrl_as_parent = true;
 
 	// if we have an extra column, build it
-	if (extra_column && !m_show_modified_btns)
+	if (extra_column)
 	{
 		m_extra_column_item_ptrs.push_back(extra_column(this->ctrl_parent(), line));
 		grid_sizer->Add(m_extra_column_item_ptrs.back(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 3);
@@ -511,7 +524,7 @@ Option ConfigOptionsGroup::get_option(const std::string& opt_key, int opt_index
 	std::pair<std::string, int> pair(opt_key, opt_index);
 	m_opt_map.emplace(opt_id, pair);
 
-	if (m_show_modified_btns) // fill group and category values just fro options from Settings Tab 
+	if (m_use_custom_ctrl) // fill group and category values just for options from Settings Tab 
 	    wxGetApp().sidebar().get_searcher().add_key(opt_id, title, this->config_category());
 
 	return Option(*m_config->def()->get(opt_key), opt_id);
diff --git a/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp
index 53d3b13de..5a18332cd 100644
--- a/src/slic3r/GUI/OptionsGroup.hpp
+++ b/src/slic3r/GUI/OptionsGroup.hpp
@@ -129,7 +129,7 @@ public:
 #endif /* __WXGTK__ */
 
     wxWindow* ctrl_parent() const {
-    	return this->stb ? (this->custom_ctrl && m_use_custom_ctrl_as_parent ? (wxWindow*)this->custom_ctrl : (wxWindow*)this->stb) : this->parent();
+    	return this->custom_ctrl && m_use_custom_ctrl_as_parent ? (wxWindow*)this->custom_ctrl : (this->stb ? (wxWindow*)this->stb : this->parent());
     }
 
 	void		append_line(const Line& line);
@@ -173,10 +173,6 @@ public:
     inline void		disable() { for (auto& field : m_fields) field.second->disable(); }
 	void			set_grid_vgap(int gap) { m_grid_sizer->SetVGap(gap); }
 
-	void            set_show_modified_btns_val(bool show) {
-		                m_show_modified_btns = show;
-    }
-
     void            clear_fields_except_of(const std::vector<std::string> left_fields);
 
     void            hide_labels() { label_width = 0; }
@@ -187,6 +183,7 @@ public:
 
     wxGridSizer*        get_grid_sizer() { return m_grid_sizer; }
 	const std::vector<Line>& get_lines() { return m_lines; }
+	bool				is_legend_line();
 
 protected:
 	std::map<t_config_option_key, Option>	m_options;
@@ -203,7 +200,7 @@ protected:
     bool					m_disabled {false};
     wxGridSizer*			m_grid_sizer {nullptr};
 	// "true" if option is created in preset tabs
-	bool					m_show_modified_btns{ false };
+	bool					m_use_custom_ctrl{ false };
 
 	// "true" if control should be created on custom_ctrl
 	bool					m_use_custom_ctrl_as_parent { false };
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index 45ee92c74..78beac3f0 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -2372,13 +2372,11 @@ PageShp TabPrinter::build_kinematics_page()
     if (m_use_silent_mode) {
         // Legend for OptionsGroups
         auto optgroup = page->new_optgroup("");
-        optgroup->set_show_modified_btns_val(false);
-        optgroup->label_width = 23;// 230;
         auto line = Line{ "", "" };
 
         ConfigOptionDef def;
         def.type = coString;
-        def.width = 15;
+        def.width = Field::def_width();
         def.gui_type = "legend";
         def.mode = comAdvanced;
         def.tooltip = L("Values in this column are for Normal mode");
@@ -3783,7 +3781,7 @@ void Page::activate(ConfigOptionMode mode, std::function<void()> throw_if_cancel
     for (auto group : m_optgroups) {
         if (!group->activate(throw_if_canceled))
             continue;
-        m_vsizer->Add(group->sizer, 0, wxEXPAND | wxALL, 10);
+        m_vsizer->Add(group->sizer, 0, wxEXPAND | (group->is_legend_line() ? (wxLEFT|wxTOP) : wxALL), 10);
         group->update_visibility(mode);
         group->reload_config();
         throw_if_canceled();

From 5be9d42519e06990f2b18743500a7beb1fada36e Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Wed, 18 Nov 2020 12:30:00 +0100
Subject: [PATCH 039/138] Localization, new POT

---
 resources/localization/PrusaSlicer.pot | 914 +++++++++++++------------
 src/slic3r/GUI/GUI_App.cpp             |   4 +-
 src/slic3r/GUI/Jobs/SLAImportJob.cpp   |   4 +-
 src/slic3r/GUI/MainFrame.cpp           |   6 +-
 src/slic3r/GUI/Plater.cpp              |   4 +-
 5 files changed, 476 insertions(+), 456 deletions(-)

diff --git a/resources/localization/PrusaSlicer.pot b/resources/localization/PrusaSlicer.pot
index aad74f6ce..6b4ec495e 100644
--- a/resources/localization/PrusaSlicer.pot
+++ b/resources/localization/PrusaSlicer.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-12 21:27+0100\n"
+"POT-Creation-Date: 2020-11-18 12:28+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,48 +18,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: src/slic3r/GUI/AboutDialog.cpp:43 src/slic3r/GUI/AboutDialog.cpp:48
-#: src/slic3r/GUI/AboutDialog.cpp:317
+#: src/slic3r/GUI/AboutDialog.cpp:42 src/slic3r/GUI/AboutDialog.cpp:297
 msgid "Portions copyright"
 msgstr ""
 
-#: src/slic3r/GUI/AboutDialog.cpp:139 src/slic3r/GUI/AboutDialog.cpp:281
+#: src/slic3r/GUI/AboutDialog.cpp:132 src/slic3r/GUI/AboutDialog.cpp:261
 msgid "Copyright"
 msgstr ""
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:141
+#: src/slic3r/GUI/AboutDialog.cpp:134
 msgid ""
 "License agreements of all following programs (libraries) are part of "
 "application license agreement"
 msgstr ""
 
-#: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215
+#: src/slic3r/GUI/AboutDialog.cpp:204
 #, possible-c-format
 msgid "About %s"
 msgstr ""
 
-#: src/slic3r/GUI/AboutDialog.cpp:256 src/slic3r/GUI/GUI_App.cpp:239
+#: src/slic3r/GUI/AboutDialog.cpp:236 src/slic3r/GUI/GUI_App.cpp:231
 #: src/slic3r/GUI/MainFrame.cpp:164
 msgid "Version"
 msgstr ""
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:283 src/slic3r/GUI/GUI_App.cpp:244
+#: src/slic3r/GUI/AboutDialog.cpp:263 src/slic3r/GUI/GUI_App.cpp:236
 msgid "is licensed under the"
 msgstr ""
 
-#: src/slic3r/GUI/AboutDialog.cpp:284 src/slic3r/GUI/GUI_App.cpp:244
+#: src/slic3r/GUI/AboutDialog.cpp:264 src/slic3r/GUI/GUI_App.cpp:236
 msgid "GNU Affero General Public License, version 3"
 msgstr ""
 
-#: src/slic3r/GUI/AboutDialog.cpp:285
+#: src/slic3r/GUI/AboutDialog.cpp:265
 msgid ""
 "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap "
 "community."
 msgstr ""
 
-#: src/slic3r/GUI/AboutDialog.cpp:286
+#: src/slic3r/GUI/AboutDialog.cpp:266
 msgid ""
 "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, "
 "Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and "
@@ -74,71 +73,71 @@ msgid ""
 "and we would be glad if you reported it."
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:160
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
 msgid ""
 "Copying of the temporary G-code to the output G-code failed. Maybe the SD "
 "card is write locked?\n"
 "Error message: %1%"
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:159
 msgid ""
 "Copying of the temporary G-code to the output G-code failed. There might be "
 "problem with target device, please try exporting again or using different "
 "device. The corrupted output G-code is at %1%.tmp."
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:166
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:162
 msgid ""
 "Renaming of the G-code after copying to the selected destination folder has "
 "failed. Current path is %1%.tmp. Please try exporting again."
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:169
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:165
 msgid ""
 "Copying of the temporary G-code has finished but the original code at %1% "
 "couldn't be opened during copy check. The output G-code is at %2%.tmp."
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:172
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:168
 msgid ""
 "Copying of the temporary G-code has finished but the exported code couldn't "
 "be opened during copy check. The output G-code is at %1%.tmp."
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:175
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:171
 msgid "Unknown error occured during exporting G-code."
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:180
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:540
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:176
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:525
 msgid "Running post-processing scripts"
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:182
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:178
 msgid "G-code file exported to %1%"
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:187
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:236
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:183
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:232
 msgid "Slicing complete"
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:231
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:227
 msgid "Masked SLA file exported to %1%"
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:543
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:528
 msgid "Copying of the temporary G-code to the output G-code failed"
 msgstr ""
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:566
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:551
 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
 msgstr ""
 
 #: src/slic3r/GUI/BedShapeDialog.cpp:93
 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:240 src/slic3r/GUI/Plater.cpp:161
-#: src/slic3r/GUI/Tab.cpp:2506
+#: src/slic3r/GUI/Tab.cpp:2504
 msgid "Size"
 msgstr ""
 
@@ -163,8 +162,8 @@ msgstr ""
 #: src/slic3r/GUI/BedShapeDialog.cpp:129 src/slic3r/GUI/ConfigWizard.cpp:240
 #: src/slic3r/GUI/ConfigWizard.cpp:1346 src/slic3r/GUI/ConfigWizard.cpp:1360
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87
-#: src/slic3r/GUI/GCodeViewer.cpp:2219 src/slic3r/GUI/GCodeViewer.cpp:2225
-#: src/slic3r/GUI/GCodeViewer.cpp:2233 src/slic3r/GUI/GUI_ObjectLayers.cpp:145
+#: src/slic3r/GUI/GCodeViewer.cpp:2275 src/slic3r/GUI/GCodeViewer.cpp:2281
+#: src/slic3r/GUI/GCodeViewer.cpp:2289 src/slic3r/GUI/GUI_ObjectLayers.cpp:145
 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
 #: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
@@ -249,7 +248,7 @@ msgid "Load..."
 msgstr ""
 
 #: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/BedShapeDialog.cpp:413
-#: src/slic3r/GUI/Tab.cpp:3449
+#: src/slic3r/GUI/Tab.cpp:3447
 msgid "Remove"
 msgstr ""
 
@@ -565,7 +564,7 @@ msgid "Standard"
 msgstr ""
 
 #: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/ConfigWizard.cpp:599
-#: src/slic3r/GUI/Tab.cpp:3530 src/slic3r/GUI/UnsavedChangesDialog.cpp:921
+#: src/slic3r/GUI/Tab.cpp:3528 src/slic3r/GUI/UnsavedChangesDialog.cpp:921
 msgid "All"
 msgstr ""
 
@@ -700,8 +699,8 @@ msgid ""
 msgstr ""
 
 #: src/slic3r/GUI/ConfigWizard.cpp:1167 src/slic3r/GUI/GUI_ObjectList.cpp:1793
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3045
-#: src/slic3r/GUI/Plater.cpp:3878 src/slic3r/GUI/Plater.cpp:3907
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3120
+#: src/slic3r/GUI/Plater.cpp:3953 src/slic3r/GUI/Plater.cpp:3982
 msgid "Reload from disk"
 msgstr ""
 
@@ -1080,7 +1079,7 @@ msgstr ""
 
 #: src/slic3r/GUI/DoubleSlider.cpp:1274 src/slic3r/GUI/DoubleSlider.cpp:1308
 #: src/slic3r/GUI/GLCanvas3D.cpp:980 src/slic3r/GUI/GUI_ObjectList.cpp:1832
-#: src/slic3r/GUI/Tab.cpp:2502
+#: src/slic3r/GUI/Tab.cpp:2500
 #, possible-c-format
 msgid "Extruder %d"
 msgstr ""
@@ -1274,7 +1273,7 @@ msgstr ""
 msgid "parameter name"
 msgstr ""
 
-#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:761
+#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:774
 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:874
 msgid "N/A"
 msgstr ""
@@ -1285,11 +1284,11 @@ msgid "%s doesn't support percentage"
 msgstr ""
 
 #: src/slic3r/GUI/Field.cpp:240 src/slic3r/GUI/Field.cpp:271
-#: src/slic3r/GUI/Field.cpp:1412 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
+#: src/slic3r/GUI/Field.cpp:1417 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
 msgid "Invalid numeric input."
 msgstr ""
 
-#: src/slic3r/GUI/Field.cpp:249 src/slic3r/GUI/Field.cpp:1424
+#: src/slic3r/GUI/Field.cpp:249 src/slic3r/GUI/Field.cpp:1429
 msgid "Input value is out of range"
 msgstr ""
 
@@ -1439,210 +1438,210 @@ msgstr ""
 msgid "Generating toolpaths"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:1352
+#: src/slic3r/GUI/GCodeViewer.cpp:1356
 msgid "Generating vertex buffer"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:1426
+#: src/slic3r/GUI/GCodeViewer.cpp:1437
 msgid "Generating index buffers"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2107
+#: src/slic3r/GUI/GCodeViewer.cpp:2163
 msgid "Click to hide"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2107
+#: src/slic3r/GUI/GCodeViewer.cpp:2163
 msgid "Click to show"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2219
+#: src/slic3r/GUI/GCodeViewer.cpp:2275
 msgid "up to"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2225
+#: src/slic3r/GUI/GCodeViewer.cpp:2281
 msgid "above"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2233
+#: src/slic3r/GUI/GCodeViewer.cpp:2289
 msgid "from"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2233
+#: src/slic3r/GUI/GCodeViewer.cpp:2289
 msgid "to"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2261 src/slic3r/GUI/GCodeViewer.cpp:2269
+#: src/slic3r/GUI/GCodeViewer.cpp:2317 src/slic3r/GUI/GCodeViewer.cpp:2325
 #: src/slic3r/GUI/GUI_Preview.cpp:270 src/slic3r/GUI/GUI_Preview.cpp:788
 msgid "Feature type"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2261 src/slic3r/GUI/GCodeViewer.cpp:2269
+#: src/slic3r/GUI/GCodeViewer.cpp:2317 src/slic3r/GUI/GCodeViewer.cpp:2325
 #: src/slic3r/GUI/RammingChart.cpp:76
 msgid "Time"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2269
+#: src/slic3r/GUI/GCodeViewer.cpp:2325
 msgid "Percentage"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2272
+#: src/slic3r/GUI/GCodeViewer.cpp:2328
 msgid "Height (mm)"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2273
+#: src/slic3r/GUI/GCodeViewer.cpp:2329
 msgid "Width (mm)"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2274
+#: src/slic3r/GUI/GCodeViewer.cpp:2330
 msgid "Speed (mm/s)"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2275
+#: src/slic3r/GUI/GCodeViewer.cpp:2331
 msgid "Fan Speed (%)"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2276
+#: src/slic3r/GUI/GCodeViewer.cpp:2332
 msgid "Volumetric flow rate (mm³/s)"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2277 src/slic3r/GUI/GUI_Preview.cpp:276
+#: src/slic3r/GUI/GCodeViewer.cpp:2333 src/slic3r/GUI/GUI_Preview.cpp:276
 #: src/slic3r/GUI/GUI_Preview.cpp:447 src/slic3r/GUI/GUI_Preview.cpp:694
 #: src/slic3r/GUI/GUI_Preview.cpp:787 src/slic3r/GUI/GUI_Preview.cpp:1266
 msgid "Tool"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2278 src/slic3r/GUI/GUI_Preview.cpp:277
+#: src/slic3r/GUI/GCodeViewer.cpp:2334 src/slic3r/GUI/GUI_Preview.cpp:277
 #: src/slic3r/GUI/GUI_Preview.cpp:785
 msgid "Color Print"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2314 src/slic3r/GUI/GCodeViewer.cpp:2349
-#: src/slic3r/GUI/GCodeViewer.cpp:2354 src/slic3r/GUI/GUI_ObjectList.cpp:296
+#: src/slic3r/GUI/GCodeViewer.cpp:2370 src/slic3r/GUI/GCodeViewer.cpp:2405
+#: src/slic3r/GUI/GCodeViewer.cpp:2410 src/slic3r/GUI/GUI_ObjectList.cpp:296
 #: src/slic3r/GUI/wxExtensions.cpp:515 src/libslic3r/PrintConfig.cpp:530
 msgid "Extruder"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2325
+#: src/slic3r/GUI/GCodeViewer.cpp:2381
 msgid "Default color"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2349
+#: src/slic3r/GUI/GCodeViewer.cpp:2405
 msgid "default color"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2444 src/slic3r/GUI/GCodeViewer.cpp:2490
+#: src/slic3r/GUI/GCodeViewer.cpp:2500 src/slic3r/GUI/GCodeViewer.cpp:2546
 msgid "Color change"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2463 src/slic3r/GUI/GCodeViewer.cpp:2488
+#: src/slic3r/GUI/GCodeViewer.cpp:2519 src/slic3r/GUI/GCodeViewer.cpp:2544
 msgid "Print"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2489 src/slic3r/GUI/GCodeViewer.cpp:2506
+#: src/slic3r/GUI/GCodeViewer.cpp:2545 src/slic3r/GUI/GCodeViewer.cpp:2562
 #: src/slic3r/GUI/Plater.cpp:1201
 msgid "Pause"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/GCodeViewer.cpp:2497
+#: src/slic3r/GUI/GCodeViewer.cpp:2550 src/slic3r/GUI/GCodeViewer.cpp:2553
 msgid "Event"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/GCodeViewer.cpp:2497
+#: src/slic3r/GUI/GCodeViewer.cpp:2550 src/slic3r/GUI/GCodeViewer.cpp:2553
 msgid "Remaining time"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2497
+#: src/slic3r/GUI/GCodeViewer.cpp:2553
 msgid "Duration"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2532 src/slic3r/GUI/GUI_Preview.cpp:330
-#: src/slic3r/GUI/GUI_Preview.cpp:1468 src/libslic3r/PrintConfig.cpp:2286
+#: src/slic3r/GUI/GCodeViewer.cpp:2588 src/slic3r/GUI/GUI_Preview.cpp:330
+#: src/slic3r/GUI/GUI_Preview.cpp:1466 src/libslic3r/PrintConfig.cpp:2286
 msgid "Travel"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2535
+#: src/slic3r/GUI/GCodeViewer.cpp:2591
 msgid "Movement"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2536
+#: src/slic3r/GUI/GCodeViewer.cpp:2592
 msgid "Extrusion"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2537 src/slic3r/GUI/Tab.cpp:1680
-#: src/slic3r/GUI/Tab.cpp:2552
+#: src/slic3r/GUI/GCodeViewer.cpp:2593 src/slic3r/GUI/Tab.cpp:1680
+#: src/slic3r/GUI/Tab.cpp:2550
 msgid "Retraction"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2568 src/slic3r/GUI/GUI_Preview.cpp:315
+#: src/slic3r/GUI/GCodeViewer.cpp:2624 src/slic3r/GUI/GUI_Preview.cpp:315
 #: src/slic3r/GUI/GUI_Preview.cpp:328
 msgid "Options"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2571 src/slic3r/GUI/GUI_Preview.cpp:331
-#: src/slic3r/GUI/GUI_Preview.cpp:1469
+#: src/slic3r/GUI/GCodeViewer.cpp:2627 src/slic3r/GUI/GUI_Preview.cpp:331
+#: src/slic3r/GUI/GUI_Preview.cpp:1467
 msgid "Retractions"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2572 src/slic3r/GUI/GUI_Preview.cpp:332
-#: src/slic3r/GUI/GUI_Preview.cpp:1470
+#: src/slic3r/GUI/GCodeViewer.cpp:2628 src/slic3r/GUI/GUI_Preview.cpp:332
+#: src/slic3r/GUI/GUI_Preview.cpp:1468
 msgid "Deretractions"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2573 src/slic3r/GUI/GUI_Preview.cpp:1471
+#: src/slic3r/GUI/GCodeViewer.cpp:2629 src/slic3r/GUI/GUI_Preview.cpp:1469
 msgid "Tool changes"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2574 src/slic3r/GUI/GUI_Preview.cpp:1472
+#: src/slic3r/GUI/GCodeViewer.cpp:2630 src/slic3r/GUI/GUI_Preview.cpp:1470
 msgid "Color changes"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2575 src/slic3r/GUI/GUI_Preview.cpp:1473
+#: src/slic3r/GUI/GCodeViewer.cpp:2631 src/slic3r/GUI/GUI_Preview.cpp:1471
 msgid "Print pauses"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2576 src/slic3r/GUI/GUI_Preview.cpp:1474
+#: src/slic3r/GUI/GCodeViewer.cpp:2632 src/slic3r/GUI/GUI_Preview.cpp:1472
 msgid "Custom G-codes"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2587 src/slic3r/GUI/GCodeViewer.cpp:2611
+#: src/slic3r/GUI/GCodeViewer.cpp:2643 src/slic3r/GUI/GCodeViewer.cpp:2667
 #: src/slic3r/GUI/Plater.cpp:689 src/libslic3r/PrintConfig.cpp:113
 msgid "Printer"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2589 src/slic3r/GUI/GCodeViewer.cpp:2616
+#: src/slic3r/GUI/GCodeViewer.cpp:2645 src/slic3r/GUI/GCodeViewer.cpp:2672
 #: src/slic3r/GUI/Plater.cpp:685
 msgid "Print settings"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2592 src/slic3r/GUI/GCodeViewer.cpp:2622
+#: src/slic3r/GUI/GCodeViewer.cpp:2648 src/slic3r/GUI/GCodeViewer.cpp:2678
 #: src/slic3r/GUI/Plater.cpp:686 src/slic3r/GUI/Tab.cpp:1780
 #: src/slic3r/GUI/Tab.cpp:1781
 msgid "Filament"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2645 src/slic3r/GUI/GCodeViewer.cpp:2650
+#: src/slic3r/GUI/GCodeViewer.cpp:2701 src/slic3r/GUI/GCodeViewer.cpp:2706
 #: src/slic3r/GUI/Plater.cpp:241 src/slic3r/GUI/Plater.cpp:1127
 #: src/slic3r/GUI/Plater.cpp:1177 src/slic3r/GUI/Plater.cpp:1198
 msgid "Estimated printing time"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2645
+#: src/slic3r/GUI/GCodeViewer.cpp:2701
 msgid "Normal mode"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2650
+#: src/slic3r/GUI/GCodeViewer.cpp:2706
 msgid "Stealth mode"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2677
+#: src/slic3r/GUI/GCodeViewer.cpp:2733
 msgid "Show stealth mode"
 msgstr ""
 
-#: src/slic3r/GUI/GCodeViewer.cpp:2681
+#: src/slic3r/GUI/GCodeViewer.cpp:2737
 msgid "Show normal mode"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:228 src/slic3r/GUI/GLCanvas3D.cpp:4961
+#: src/slic3r/GUI/GLCanvas3D.cpp:228 src/slic3r/GUI/GLCanvas3D.cpp:4965
 msgid "Variable layer height"
 msgstr ""
 
@@ -1785,152 +1784,152 @@ msgstr ""
 msgid "Variable layer height - Smooth all"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2224
+#: src/slic3r/GUI/GLCanvas3D.cpp:2228
 msgid "Mirror Object"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3187
+#: src/slic3r/GUI/GLCanvas3D.cpp:3191
 #: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520
 msgid "Gizmo-Move"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3271
+#: src/slic3r/GUI/GLCanvas3D.cpp:3275
 #: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:522
 msgid "Gizmo-Rotate"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3798
+#: src/slic3r/GUI/GLCanvas3D.cpp:3802
 msgid "Move Object"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4285 src/slic3r/GUI/GLCanvas3D.cpp:4922
+#: src/slic3r/GUI/GLCanvas3D.cpp:4289 src/slic3r/GUI/GLCanvas3D.cpp:4926
 msgid "Switch to Settings"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4286 src/slic3r/GUI/GLCanvas3D.cpp:4922
+#: src/slic3r/GUI/GLCanvas3D.cpp:4290 src/slic3r/GUI/GLCanvas3D.cpp:4926
 msgid "Print Settings Tab"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4287 src/slic3r/GUI/GLCanvas3D.cpp:4923
+#: src/slic3r/GUI/GLCanvas3D.cpp:4291 src/slic3r/GUI/GLCanvas3D.cpp:4927
 msgid "Filament Settings Tab"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4287 src/slic3r/GUI/GLCanvas3D.cpp:4923
+#: src/slic3r/GUI/GLCanvas3D.cpp:4291 src/slic3r/GUI/GLCanvas3D.cpp:4927
 msgid "Material Settings Tab"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4288 src/slic3r/GUI/GLCanvas3D.cpp:4924
+#: src/slic3r/GUI/GLCanvas3D.cpp:4292 src/slic3r/GUI/GLCanvas3D.cpp:4928
 msgid "Printer Settings Tab"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4344
+#: src/slic3r/GUI/GLCanvas3D.cpp:4348
 msgid "Undo History"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4344
+#: src/slic3r/GUI/GLCanvas3D.cpp:4348
 msgid "Redo History"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4365
+#: src/slic3r/GUI/GLCanvas3D.cpp:4369
 #, possible-c-format
 msgid "Undo %1$d Action"
 msgid_plural "Undo %1$d Actions"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4365
+#: src/slic3r/GUI/GLCanvas3D.cpp:4369
 #, possible-c-format
 msgid "Redo %1$d Action"
 msgid_plural "Redo %1$d Actions"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4385 src/slic3r/GUI/GLCanvas3D.cpp:4940
+#: src/slic3r/GUI/GLCanvas3D.cpp:4389 src/slic3r/GUI/GLCanvas3D.cpp:4944
 #: src/slic3r/GUI/KBShortcutsDialog.cpp:130 src/slic3r/GUI/Search.cpp:426
 msgid "Search"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4399 src/slic3r/GUI/GLCanvas3D.cpp:4407
+#: src/slic3r/GUI/GLCanvas3D.cpp:4403 src/slic3r/GUI/GLCanvas3D.cpp:4411
 #: src/slic3r/GUI/Search.cpp:433
 msgid "Enter a search term"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4816
+#: src/slic3r/GUI/GLCanvas3D.cpp:4820
 msgid "Add..."
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4824 src/slic3r/GUI/GUI_ObjectList.cpp:1846
-#: src/slic3r/GUI/Plater.cpp:3875 src/slic3r/GUI/Plater.cpp:3897
-#: src/slic3r/GUI/Tab.cpp:3449
+#: src/slic3r/GUI/GLCanvas3D.cpp:4828 src/slic3r/GUI/GUI_ObjectList.cpp:1846
+#: src/slic3r/GUI/Plater.cpp:3950 src/slic3r/GUI/Plater.cpp:3972
+#: src/slic3r/GUI/Tab.cpp:3447
 msgid "Delete"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4833 src/slic3r/GUI/KBShortcutsDialog.cpp:124
-#: src/slic3r/GUI/Plater.cpp:4807
+#: src/slic3r/GUI/GLCanvas3D.cpp:4837 src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/Plater.cpp:4882
 msgid "Delete all"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4842 src/slic3r/GUI/KBShortcutsDialog.cpp:151
-#: src/slic3r/GUI/Plater.cpp:1558
+#: src/slic3r/GUI/GLCanvas3D.cpp:4846 src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/Plater.cpp:1633
 msgid "Arrange"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4842 src/slic3r/GUI/KBShortcutsDialog.cpp:152
+#: src/slic3r/GUI/GLCanvas3D.cpp:4846 src/slic3r/GUI/KBShortcutsDialog.cpp:152
 msgid "Arrange selection"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4854
+#: src/slic3r/GUI/GLCanvas3D.cpp:4858
 msgid "Copy"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4863
+#: src/slic3r/GUI/GLCanvas3D.cpp:4867
 msgid "Paste"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4875 src/slic3r/GUI/Plater.cpp:3734
-#: src/slic3r/GUI/Plater.cpp:3746 src/slic3r/GUI/Plater.cpp:3884
+#: src/slic3r/GUI/GLCanvas3D.cpp:4879 src/slic3r/GUI/Plater.cpp:3809
+#: src/slic3r/GUI/Plater.cpp:3821 src/slic3r/GUI/Plater.cpp:3959
 msgid "Add instance"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4886 src/slic3r/GUI/Plater.cpp:3886
+#: src/slic3r/GUI/GLCanvas3D.cpp:4890 src/slic3r/GUI/Plater.cpp:3961
 msgid "Remove instance"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4899
+#: src/slic3r/GUI/GLCanvas3D.cpp:4903
 msgid "Split to objects"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4909 src/slic3r/GUI/GUI_ObjectList.cpp:1618
+#: src/slic3r/GUI/GLCanvas3D.cpp:4913 src/slic3r/GUI/GUI_ObjectList.cpp:1618
 msgid "Split to parts"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:5011 src/slic3r/GUI/KBShortcutsDialog.cpp:125
+#: src/slic3r/GUI/GLCanvas3D.cpp:5015 src/slic3r/GUI/KBShortcutsDialog.cpp:125
 #: src/slic3r/GUI/MainFrame.cpp:1199
 msgid "Undo"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:5011 src/slic3r/GUI/GLCanvas3D.cpp:5050
+#: src/slic3r/GUI/GLCanvas3D.cpp:5015 src/slic3r/GUI/GLCanvas3D.cpp:5054
 msgid "Click right mouse button to open/close History"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:5034
+#: src/slic3r/GUI/GLCanvas3D.cpp:5038
 msgid "Next Undo action: %1%"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:5050 src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/GLCanvas3D.cpp:5054 src/slic3r/GUI/KBShortcutsDialog.cpp:126
 #: src/slic3r/GUI/MainFrame.cpp:1202
 msgid "Redo"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:5072
+#: src/slic3r/GUI/GLCanvas3D.cpp:5076
 msgid "Next Redo action: %1%"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:7175
+#: src/slic3r/GUI/GLCanvas3D.cpp:7179
 msgid "Selection-Add from rectangle"
 msgstr ""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:7194
+#: src/slic3r/GUI/GLCanvas3D.cpp:7198
 msgid "Selection-Remove from rectangle"
 msgstr ""
 
@@ -2100,6 +2099,7 @@ msgid "Offset"
 msgstr ""
 
 #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:56
 msgid "Quality"
 msgstr ""
 
@@ -2394,21 +2394,21 @@ msgstr ""
 msgid "Add supports"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:243
+#: src/slic3r/GUI/GUI_App.cpp:235
 msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community."
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:245
+#: src/slic3r/GUI/GUI_App.cpp:237
 msgid ""
 "Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas "
 "Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others."
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:246
+#: src/slic3r/GUI/GUI_App.cpp:238
 msgid "Artwork model by Nora Al-Badri and Jan Nikolai Nelles"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:386
+#: src/slic3r/GUI/GUI_App.cpp:378
 msgid ""
 "Starting with %1% 2.3, configuration directory on Linux has changed "
 "(according to XDG Base Directory Specification) to \n"
@@ -2427,20 +2427,20 @@ msgid ""
 "What do you want to do now?"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:394
+#: src/slic3r/GUI/GUI_App.cpp:386
 #, possible-c-format
 msgid "%s - BREAKING CHANGE"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:396
+#: src/slic3r/GUI/GUI_App.cpp:388
 msgid "Quit, I will move my data now"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:396
+#: src/slic3r/GUI/GUI_App.cpp:388
 msgid "Start the application"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:585
+#: src/slic3r/GUI/GUI_App.cpp:577
 #, possible-c-format
 msgid ""
 "%s has encountered an error. It was likely caused by running out of memory. "
@@ -2450,240 +2450,240 @@ msgid ""
 "The application will now terminate."
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:588
+#: src/slic3r/GUI/GUI_App.cpp:580
 msgid "Fatal error"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:723
+#: src/slic3r/GUI/GUI_App.cpp:700
 msgid ""
 "Error parsing PrusaSlicer config file, it is probably corrupted. Try to "
 "manually delete the file to recover from the error. Your user profiles will "
 "not be affected."
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:730
+#: src/slic3r/GUI/GUI_App.cpp:706
 msgid ""
 "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to "
 "manually delete the file to recover from the error."
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:788
+#: src/slic3r/GUI/GUI_App.cpp:760
 #, possible-c-format
 msgid ""
 "%s\n"
 "Do you want to continue?"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:790 src/slic3r/GUI/UnsavedChangesDialog.cpp:653
+#: src/slic3r/GUI/GUI_App.cpp:762 src/slic3r/GUI/UnsavedChangesDialog.cpp:653
 msgid "Remember my choice"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:829
-msgid "Loading configuration..."
+#: src/slic3r/GUI/GUI_App.cpp:797
+msgid "Loading configuration"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:895
-msgid "Preparing settings tabs..."
+#: src/slic3r/GUI/GUI_App.cpp:855
+msgid "Preparing settings tabs"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1148
+#: src/slic3r/GUI/GUI_App.cpp:1100
 msgid ""
 "You have the following presets with saved options for \"Print Host upload\""
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1152
+#: src/slic3r/GUI/GUI_App.cpp:1104
 msgid ""
 "But since this version of PrusaSlicer we don't show this information in "
 "Printer Settings anymore.\n"
 "Settings will be available in physical printers settings."
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1154
+#: src/slic3r/GUI/GUI_App.cpp:1106
 msgid ""
 "By default new Printer devices will be named as \"Printer N\" during its "
 "creation.\n"
 "Note: This name can be changed later from the physical printers settings"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1157
+#: src/slic3r/GUI/GUI_App.cpp:1109
 msgid "Information"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1172 src/slic3r/GUI/GUI_App.cpp:1185
+#: src/slic3r/GUI/GUI_App.cpp:1122 src/slic3r/GUI/GUI_App.cpp:1133
 msgid "Recreating"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1190
+#: src/slic3r/GUI/GUI_App.cpp:1138
 msgid "Loading of current presets"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1195
+#: src/slic3r/GUI/GUI_App.cpp:1143
 msgid "Loading of a mode view"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1278
+#: src/slic3r/GUI/GUI_App.cpp:1224
 msgid "Choose one file (3MF/AMF):"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1290
+#: src/slic3r/GUI/GUI_App.cpp:1236
 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1303
+#: src/slic3r/GUI/GUI_App.cpp:1248
 msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1315
+#: src/slic3r/GUI/GUI_App.cpp:1259
 msgid "Changing of an application language"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1365
+#: src/slic3r/GUI/GUI_App.cpp:1309
 msgid "Select the language"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1365
+#: src/slic3r/GUI/GUI_App.cpp:1309
 msgid "Language"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1495
+#: src/slic3r/GUI/GUI_App.cpp:1439
 msgid "modified"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1544
+#: src/slic3r/GUI/GUI_App.cpp:1488
 #, possible-c-format
 msgid "Run %s"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1550
+#: src/slic3r/GUI/GUI_App.cpp:1492
 msgid "&Configuration Snapshots"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1550
+#: src/slic3r/GUI/GUI_App.cpp:1492
 msgid "Inspect / activate configuration snapshots"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1551
+#: src/slic3r/GUI/GUI_App.cpp:1493
 msgid "Take Configuration &Snapshot"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1551
+#: src/slic3r/GUI/GUI_App.cpp:1493
 msgid "Capture a configuration snapshot"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1552
+#: src/slic3r/GUI/GUI_App.cpp:1494
 msgid "Check for updates"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1552
+#: src/slic3r/GUI/GUI_App.cpp:1494
 msgid "Check for configuration updates"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1557
+#: src/slic3r/GUI/GUI_App.cpp:1497
 msgid "&Preferences"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1563
+#: src/slic3r/GUI/GUI_App.cpp:1503
 msgid "Application preferences"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1574 src/slic3r/GUI/wxExtensions.cpp:673
+#: src/slic3r/GUI/GUI_App.cpp:1508 src/slic3r/GUI/wxExtensions.cpp:673
 msgid "Simple"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1574
+#: src/slic3r/GUI/GUI_App.cpp:1508
 msgid "Simple View Mode"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1576 src/slic3r/GUI/wxExtensions.cpp:675
+#: src/slic3r/GUI/GUI_App.cpp:1510 src/slic3r/GUI/wxExtensions.cpp:675
 msgctxt "Mode"
 msgid "Advanced"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1576
+#: src/slic3r/GUI/GUI_App.cpp:1510
 msgid "Advanced View Mode"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1577 src/slic3r/GUI/wxExtensions.cpp:676
+#: src/slic3r/GUI/GUI_App.cpp:1511 src/slic3r/GUI/wxExtensions.cpp:676
 msgid "Expert"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1577
+#: src/slic3r/GUI/GUI_App.cpp:1511
 msgid "Expert View Mode"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1582
+#: src/slic3r/GUI/GUI_App.cpp:1516
 msgid "Mode"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1582
+#: src/slic3r/GUI/GUI_App.cpp:1516
 #, possible-c-format
 msgid "%s View Mode"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1587
+#: src/slic3r/GUI/GUI_App.cpp:1519
 msgid "&Language"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1592
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Flash printer &firmware"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1592
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Upload a firmware image into an Arduino based printer"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1610
+#: src/slic3r/GUI/GUI_App.cpp:1538
 msgid "Taking configuration snapshot"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1610
+#: src/slic3r/GUI/GUI_App.cpp:1538
 msgid "Snapshot name"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1675 src/slic3r/GUI/GUI_App.cpp:1684
+#: src/slic3r/GUI/GUI_App.cpp:1600
 msgid "Language selection"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1678
+#: src/slic3r/GUI/GUI_App.cpp:1602
 msgid ""
 "Switching the language will trigger application restart.\n"
 "You will lose content of the plater."
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1680
+#: src/slic3r/GUI/GUI_App.cpp:1604
 msgid "Do you want to proceed?"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1715
+#: src/slic3r/GUI/GUI_App.cpp:1631
 msgid "&Configuration"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1746
+#: src/slic3r/GUI/GUI_App.cpp:1662
 msgid "The preset(s) modifications are successfully saved"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1946 src/slic3r/GUI/Tab.cpp:3207
+#: src/slic3r/GUI/GUI_App.cpp:1862 src/slic3r/GUI/Tab.cpp:3205
 msgid "It's impossible to print multi-part object(s) with SLA technology."
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1947
+#: src/slic3r/GUI/GUI_App.cpp:1863
 msgid "Please check and fix your object list."
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1948 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210
-#: src/slic3r/GUI/Plater.cpp:2272 src/slic3r/GUI/Tab.cpp:3209
+#: src/slic3r/GUI/GUI_App.cpp:1864 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210
+#: src/slic3r/GUI/Plater.cpp:2347 src/slic3r/GUI/Tab.cpp:3207
 msgid "Attention!"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_App.cpp:1965
+#: src/slic3r/GUI/GUI_App.cpp:1881
 msgid "Select a gcode file:"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_Init.cpp:85 src/slic3r/GUI/GUI_Init.cpp:88
+#: src/slic3r/GUI/GUI_Init.cpp:73 src/slic3r/GUI/GUI_Init.cpp:76
 msgid "PrusaSlicer GUI initialization failed"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_Init.cpp:88
+#: src/slic3r/GUI/GUI_Init.cpp:76
 msgid "Fatal error, exception catched: %1%"
 msgstr ""
 
@@ -2798,7 +2798,7 @@ msgstr ""
 #: src/slic3r/GUI/Tab.cpp:1416 src/slic3r/GUI/Tab.cpp:1438
 #: src/slic3r/GUI/Tab.cpp:1541 src/slic3r/GUI/Tab.cpp:1544
 #: src/slic3r/GUI/Tab.cpp:1828 src/slic3r/GUI/Tab.cpp:2165
-#: src/slic3r/GUI/Tab.cpp:4079 src/libslic3r/PrintConfig.cpp:90
+#: src/slic3r/GUI/Tab.cpp:4077 src/libslic3r/PrintConfig.cpp:90
 #: src/libslic3r/PrintConfig.cpp:128 src/libslic3r/PrintConfig.cpp:264
 #: src/libslic3r/PrintConfig.cpp:1090 src/libslic3r/PrintConfig.cpp:2410
 #: src/libslic3r/PrintConfig.cpp:2582
@@ -2806,8 +2806,8 @@ msgid "Advanced"
 msgstr ""
 
 #: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:663
-#: src/slic3r/GUI/Plater.cpp:356 src/slic3r/GUI/Tab.cpp:4013
-#: src/slic3r/GUI/Tab.cpp:4014 src/libslic3r/PrintConfig.cpp:2748
+#: src/slic3r/GUI/Plater.cpp:356 src/slic3r/GUI/Tab.cpp:4011
+#: src/slic3r/GUI/Tab.cpp:4012 src/libslic3r/PrintConfig.cpp:2748
 #: src/libslic3r/PrintConfig.cpp:2755 src/libslic3r/PrintConfig.cpp:2764
 #: src/libslic3r/PrintConfig.cpp:2773 src/libslic3r/PrintConfig.cpp:2783
 #: src/libslic3r/PrintConfig.cpp:2793 src/libslic3r/PrintConfig.cpp:2830
@@ -2820,8 +2820,8 @@ msgid "Supports"
 msgstr ""
 
 #: src/slic3r/GUI/GUI_ObjectList.cpp:105 src/slic3r/GUI/GUI_ObjectList.cpp:664
-#: src/slic3r/GUI/Plater.cpp:496 src/slic3r/GUI/Tab.cpp:4054
-#: src/slic3r/GUI/Tab.cpp:4055 src/slic3r/GUI/Tab.cpp:4126
+#: src/slic3r/GUI/Plater.cpp:496 src/slic3r/GUI/Tab.cpp:4052
+#: src/slic3r/GUI/Tab.cpp:4053 src/slic3r/GUI/Tab.cpp:4124
 #: src/libslic3r/PrintConfig.cpp:2936 src/libslic3r/PrintConfig.cpp:2943
 #: src/libslic3r/PrintConfig.cpp:2957 src/libslic3r/PrintConfig.cpp:2968
 #: src/libslic3r/PrintConfig.cpp:2978 src/libslic3r/PrintConfig.cpp:3000
@@ -2831,8 +2831,8 @@ msgstr ""
 msgid "Pad"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4072
-#: src/slic3r/GUI/Tab.cpp:4073 src/libslic3r/SLA/Hollowing.cpp:45
+#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4070
+#: src/slic3r/GUI/Tab.cpp:4071 src/libslic3r/SLA/Hollowing.cpp:45
 #: src/libslic3r/SLA/Hollowing.cpp:57 src/libslic3r/SLA/Hollowing.cpp:66
 #: src/libslic3r/SLA/Hollowing.cpp:75 src/libslic3r/PrintConfig.cpp:3064
 #: src/libslic3r/PrintConfig.cpp:3071 src/libslic3r/PrintConfig.cpp:3081
@@ -3010,12 +3010,12 @@ msgstr ""
 msgid "Fix through the Netfabb"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3910
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3985
 msgid "Export as STL"
 msgstr ""
 
 #: src/slic3r/GUI/GUI_ObjectList.cpp:1793
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3878
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3953
 msgid "Reload the selected volumes from disk"
 msgstr ""
 
@@ -3035,11 +3035,11 @@ msgstr ""
 msgid "Scale the selected object to fit the print volume"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4919
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4994
 msgid "Convert from imperial units"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4919
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4994
 msgid "Revert conversion from imperial units"
 msgstr ""
 
@@ -3107,7 +3107,7 @@ msgstr ""
 msgid "Delete Instance"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2787
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2862
 msgid ""
 "The selected object couldn't be split because it contains only one part."
 msgstr ""
@@ -3520,7 +3520,7 @@ msgstr ""
 msgid "Wipe tower"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_Preview.cpp:333 src/slic3r/GUI/GUI_Preview.cpp:1475
+#: src/slic3r/GUI/GUI_Preview.cpp:333 src/slic3r/GUI/GUI_Preview.cpp:1473
 msgid "Shells"
 msgstr ""
 
@@ -3528,11 +3528,11 @@ msgstr ""
 msgid "Legend"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_Preview.cpp:1476
+#: src/slic3r/GUI/GUI_Preview.cpp:1474
 msgid "Tool marker"
 msgstr ""
 
-#: src/slic3r/GUI/GUI_Preview.cpp:1477
+#: src/slic3r/GUI/GUI_Preview.cpp:1475
 msgid "Legend/Estimated printing time"
 msgstr ""
 
@@ -3585,7 +3585,7 @@ msgid "Choose SLA archive:"
 msgstr ""
 
 #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39
-msgid "Import file: "
+msgid "Import file"
 msgstr ""
 
 #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46
@@ -3600,10 +3600,6 @@ msgstr ""
 msgid "Import model only"
 msgstr ""
 
-#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:56
-msgid "Quality: "
-msgstr ""
-
 #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:59
 msgid "Accurate"
 msgstr ""
@@ -3628,12 +3624,12 @@ msgstr ""
 msgid "Importing done."
 msgstr ""
 
-#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2270
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2345
 msgid "You cannot load SLA project with a multi-part object on the bed"
 msgstr ""
 
-#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2271
-#: src/slic3r/GUI/Tab.cpp:3208
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2346
+#: src/slic3r/GUI/Tab.cpp:3206
 msgid "Please check your object list before preset changing."
 msgstr ""
 
@@ -3676,11 +3672,11 @@ msgid "Load Config from ini/amf/3mf/gcode and merge"
 msgstr ""
 
 #: src/slic3r/GUI/KBShortcutsDialog.cpp:115 src/slic3r/GUI/Plater.cpp:762
-#: src/slic3r/GUI/Plater.cpp:5774 src/libslic3r/PrintConfig.cpp:3538
+#: src/slic3r/GUI/Plater.cpp:5849 src/libslic3r/PrintConfig.cpp:3538
 msgid "Export G-code"
 msgstr ""
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5775
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5850
 msgid "Send G-code"
 msgstr ""
 
@@ -3688,7 +3684,7 @@ msgstr ""
 msgid "Export config"
 msgstr ""
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:118
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 src/slic3r/GUI/Plater.cpp:750
 msgid "Export to SD card / Flash drive"
 msgstr ""
 
@@ -3978,8 +3974,8 @@ msgstr ""
 msgid "Show/Hide Legend & Estimated printing time"
 msgstr ""
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:219 src/slic3r/GUI/Plater.cpp:4078
-#: src/slic3r/GUI/Tab.cpp:2572
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:219 src/slic3r/GUI/Plater.cpp:4153
+#: src/slic3r/GUI/Tab.cpp:2570
 msgid "Preview"
 msgstr ""
 
@@ -4063,7 +4059,7 @@ msgstr ""
 
 #: src/slic3r/GUI/MainFrame.cpp:166
 msgid ""
-" - Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/"
+"Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/"
 "releases"
 msgstr ""
 
@@ -4585,7 +4581,7 @@ msgstr ""
 msgid "&Collapse sidebar"
 msgstr ""
 
-#: src/slic3r/GUI/MainFrame.cpp:1309 src/slic3r/GUI/Plater.cpp:2160
+#: src/slic3r/GUI/MainFrame.cpp:1309 src/slic3r/GUI/Plater.cpp:2235
 msgid "Collapse sidebar"
 msgstr ""
 
@@ -4673,9 +4669,9 @@ msgstr ""
 msgid "Save zip file as:"
 msgstr ""
 
-#: src/slic3r/GUI/MainFrame.cpp:1560 src/slic3r/GUI/Plater.cpp:2938
-#: src/slic3r/GUI/Plater.cpp:5275 src/slic3r/GUI/Tab.cpp:1561
-#: src/slic3r/GUI/Tab.cpp:4080
+#: src/slic3r/GUI/MainFrame.cpp:1560 src/slic3r/GUI/Plater.cpp:3013
+#: src/slic3r/GUI/Plater.cpp:5350 src/slic3r/GUI/Tab.cpp:1561
+#: src/slic3r/GUI/Tab.cpp:4078
 msgid "Slicing"
 msgstr ""
 
@@ -4686,7 +4682,7 @@ msgid "Processing %s"
 msgstr ""
 
 #: src/slic3r/GUI/MainFrame.cpp:1585
-msgid " was successfully sliced."
+msgid "%1% was successfully sliced."
 msgstr ""
 
 #: src/slic3r/GUI/MainFrame.cpp:1587
@@ -4838,8 +4834,8 @@ msgstr ""
 msgid "Instance %d"
 msgstr ""
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3927
-#: src/slic3r/GUI/Tab.cpp:4009
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3925
+#: src/slic3r/GUI/Tab.cpp:4007
 msgid "Layers"
 msgstr ""
 
@@ -4879,12 +4875,12 @@ msgstr ""
 msgid "Error loading shaders"
 msgstr ""
 
-#: src/slic3r/GUI/OptionsGroup.cpp:315
+#: src/slic3r/GUI/OptionsGroup.cpp:328
 msgctxt "Layers"
 msgid "Top"
 msgstr ""
 
-#: src/slic3r/GUI/OptionsGroup.cpp:315
+#: src/slic3r/GUI/OptionsGroup.cpp:328
 msgctxt "Layers"
 msgid "Bottom"
 msgstr ""
@@ -5090,16 +5086,12 @@ msgstr ""
 msgid "SLA print settings"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:748
-msgid "Send to printer "
+#: src/slic3r/GUI/Plater.cpp:748 src/slic3r/GUI/Plater.cpp:5850
+msgid "Send to printer"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:750
-msgid "Export to SD card / Flash drive "
-msgstr ""
-
-#: src/slic3r/GUI/Plater.cpp:763 src/slic3r/GUI/Plater.cpp:2938
-#: src/slic3r/GUI/Plater.cpp:5278
+#: src/slic3r/GUI/Plater.cpp:763 src/slic3r/GUI/Plater.cpp:3013
+#: src/slic3r/GUI/Plater.cpp:5353
 msgid "Slice now"
 msgstr ""
 
@@ -5173,414 +5165,431 @@ msgstr ""
 msgid "Color"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:1407
+#: src/slic3r/GUI/Plater.cpp:1410
+#, possible-c-format
+msgid "%s - Drop project file"
+msgstr ""
+
+#: src/slic3r/GUI/Plater.cpp:1417
+msgid "Open as project"
+msgstr ""
+
+#: src/slic3r/GUI/Plater.cpp:1418
+msgid "Import geometry only"
+msgstr ""
+
+#: src/slic3r/GUI/Plater.cpp:1419
+msgid "Import config only"
+msgstr ""
+
+#: src/slic3r/GUI/Plater.cpp:1422
+msgid "Select an action to apply to the file"
+msgstr ""
+
+#: src/slic3r/GUI/Plater.cpp:1423
+msgid "Action"
+msgstr ""
+
+#: src/slic3r/GUI/Plater.cpp:1431
+msgid "Don't show again"
+msgstr ""
+
+#: src/slic3r/GUI/Plater.cpp:1471
 msgid "You can open only one .gcode file at a time."
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:1408
+#: src/slic3r/GUI/Plater.cpp:1472
 msgid "Drag and drop G-code file"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:1438
-msgid "Load File"
+#: src/slic3r/GUI/Plater.cpp:1528 src/slic3r/GUI/Plater.cpp:4753
+msgid "Import Object"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:1442
-msgid "Load Files"
-msgstr ""
-
-#: src/slic3r/GUI/Plater.cpp:1564
+#: src/slic3r/GUI/Plater.cpp:1639
 msgid "Optimize Rotation"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:1570
+#: src/slic3r/GUI/Plater.cpp:1645
 msgid "Import SLA archive"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2048
+#: src/slic3r/GUI/Plater.cpp:2123
 #, possible-c-format
 msgid ""
 "Successfully unmounted. The device %s(%s) can now be safely removed from the "
 "computer."
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2051
+#: src/slic3r/GUI/Plater.cpp:2126
 #, possible-c-format
 msgid "Ejecting of device %s(%s) has failed."
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2072
+#: src/slic3r/GUI/Plater.cpp:2147
 msgid "New Project"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2159
+#: src/slic3r/GUI/Plater.cpp:2234
 msgid "Expand sidebar"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2232
+#: src/slic3r/GUI/Plater.cpp:2307
 msgid "Loading"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2242
+#: src/slic3r/GUI/Plater.cpp:2317
 msgid "Loading file"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2325
+#: src/slic3r/GUI/Plater.cpp:2400
 #, possible-c-format
 msgid ""
 "Some object(s) in file %s looks like saved in inches.\n"
 "Should I consider them as a saved in inches and convert them?"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2327
+#: src/slic3r/GUI/Plater.cpp:2402
 msgid "The object appears to be saved in inches"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2335
+#: src/slic3r/GUI/Plater.cpp:2410
 msgid ""
 "This file contains several objects positioned at multiple heights.\n"
 "Instead of considering them as multiple objects, should I consider\n"
 "this file as a single object having multiple parts?"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2338 src/slic3r/GUI/Plater.cpp:2391
+#: src/slic3r/GUI/Plater.cpp:2413 src/slic3r/GUI/Plater.cpp:2466
 msgid "Multi-part object detected"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2345
+#: src/slic3r/GUI/Plater.cpp:2420
 msgid ""
 "This file cannot be loaded in a simple mode. Do you want to switch to an "
 "advanced mode?"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2346
+#: src/slic3r/GUI/Plater.cpp:2421
 msgid "Detected advanced data"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2368
+#: src/slic3r/GUI/Plater.cpp:2443
 #, possible-c-format
 msgid ""
 "You can't to add the object(s) from %s because of one or some of them "
 "is(are) multi-part"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2388
+#: src/slic3r/GUI/Plater.cpp:2463
 msgid ""
 "Multiple objects were loaded for a multi-material printer.\n"
 "Instead of considering them as multiple objects, should I consider\n"
 "these files to represent a single object having multiple parts?"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2404
+#: src/slic3r/GUI/Plater.cpp:2479
 msgid "Loaded"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2506
+#: src/slic3r/GUI/Plater.cpp:2581
 msgid ""
 "Your object appears to be too large, so it was automatically scaled down to "
 "fit your print bed."
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2507
+#: src/slic3r/GUI/Plater.cpp:2582
 msgid "Object too large?"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2569
+#: src/slic3r/GUI/Plater.cpp:2644
 msgid "Export STL file:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2576
+#: src/slic3r/GUI/Plater.cpp:2651
 msgid "Export AMF file:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2582
+#: src/slic3r/GUI/Plater.cpp:2657
 msgid "Save file as:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2588
+#: src/slic3r/GUI/Plater.cpp:2663
 msgid "Export OBJ file:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2689
+#: src/slic3r/GUI/Plater.cpp:2764
 msgid "Delete Object"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2700
+#: src/slic3r/GUI/Plater.cpp:2775
 msgid "Reset Project"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2779
+#: src/slic3r/GUI/Plater.cpp:2854
 msgid ""
 "The selected object can't be split because it contains more than one volume/"
 "material."
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2790
+#: src/slic3r/GUI/Plater.cpp:2865
 msgid "Split to Objects"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2922 src/slic3r/GUI/Plater.cpp:3605
+#: src/slic3r/GUI/Plater.cpp:2997 src/slic3r/GUI/Plater.cpp:3680
 msgid "Invalid data"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2932
+#: src/slic3r/GUI/Plater.cpp:3007
 msgid "Ready to slice"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2970 src/slic3r/GUI/PrintHostDialogs.cpp:260
+#: src/slic3r/GUI/Plater.cpp:3045 src/slic3r/GUI/PrintHostDialogs.cpp:260
 msgid "Cancelling"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:2989
+#: src/slic3r/GUI/Plater.cpp:3064
 msgid "Another export job is currently running."
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3106
+#: src/slic3r/GUI/Plater.cpp:3181
 msgid "Please select the file to reload"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3141
+#: src/slic3r/GUI/Plater.cpp:3216
 msgid "It is not allowed to change the file to reload"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3141
+#: src/slic3r/GUI/Plater.cpp:3216
 msgid "Do you want to retry"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3159
+#: src/slic3r/GUI/Plater.cpp:3234
 msgid "Reload from:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3250
+#: src/slic3r/GUI/Plater.cpp:3325
 msgid "Unable to reload:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3255
+#: src/slic3r/GUI/Plater.cpp:3330
 msgid "Error during reload"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3274
+#: src/slic3r/GUI/Plater.cpp:3349
 msgid "Reload all from disk"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3295
+#: src/slic3r/GUI/Plater.cpp:3370
 msgid "Fix Throught NetFabb"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3563
+#: src/slic3r/GUI/Plater.cpp:3638
 msgid "There are active warnings concerning sliced models:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3574
+#: src/slic3r/GUI/Plater.cpp:3649
 msgid "generated warnings"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3613 src/slic3r/GUI/PrintHostDialogs.cpp:261
+#: src/slic3r/GUI/Plater.cpp:3688 src/slic3r/GUI/PrintHostDialogs.cpp:261
 msgid "Cancelled"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3875 src/slic3r/GUI/Plater.cpp:3897
+#: src/slic3r/GUI/Plater.cpp:3950 src/slic3r/GUI/Plater.cpp:3972
 msgid "Remove the selected object"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3884
+#: src/slic3r/GUI/Plater.cpp:3959
 msgid "Add one more instance of the selected object"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3886
+#: src/slic3r/GUI/Plater.cpp:3961
 msgid "Remove one instance of the selected object"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3888
+#: src/slic3r/GUI/Plater.cpp:3963
 msgid "Set number of instances"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3888
+#: src/slic3r/GUI/Plater.cpp:3963
 msgid "Change the number of instances of the selected object"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3907
+#: src/slic3r/GUI/Plater.cpp:3982
 msgid "Reload the selected object from disk"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3910
+#: src/slic3r/GUI/Plater.cpp:3985
 msgid "Export the selected object as STL file"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3941
+#: src/slic3r/GUI/Plater.cpp:4016
 msgid "Along X axis"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3941
+#: src/slic3r/GUI/Plater.cpp:4016
 msgid "Mirror the selected object along the X axis"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3943
+#: src/slic3r/GUI/Plater.cpp:4018
 msgid "Along Y axis"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3943
+#: src/slic3r/GUI/Plater.cpp:4018
 msgid "Mirror the selected object along the Y axis"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3945
+#: src/slic3r/GUI/Plater.cpp:4020
 msgid "Along Z axis"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3945
+#: src/slic3r/GUI/Plater.cpp:4020
 msgid "Mirror the selected object along the Z axis"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3948
+#: src/slic3r/GUI/Plater.cpp:4023
 msgid "Mirror"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3948
+#: src/slic3r/GUI/Plater.cpp:4023
 msgid "Mirror the selected object"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3960
+#: src/slic3r/GUI/Plater.cpp:4035
 msgid "To objects"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3960 src/slic3r/GUI/Plater.cpp:3980
+#: src/slic3r/GUI/Plater.cpp:4035 src/slic3r/GUI/Plater.cpp:4055
 msgid "Split the selected object into individual objects"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3962
+#: src/slic3r/GUI/Plater.cpp:4037
 msgid "To parts"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3962 src/slic3r/GUI/Plater.cpp:3998
+#: src/slic3r/GUI/Plater.cpp:4037 src/slic3r/GUI/Plater.cpp:4073
 msgid "Split the selected object into individual sub-parts"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3965 src/slic3r/GUI/Plater.cpp:3980
-#: src/slic3r/GUI/Plater.cpp:3998 src/libslic3r/PrintConfig.cpp:3662
+#: src/slic3r/GUI/Plater.cpp:4040 src/slic3r/GUI/Plater.cpp:4055
+#: src/slic3r/GUI/Plater.cpp:4073 src/libslic3r/PrintConfig.cpp:3662
 msgid "Split"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3965
+#: src/slic3r/GUI/Plater.cpp:4040
 msgid "Split the selected object"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3987
+#: src/slic3r/GUI/Plater.cpp:4062
 msgid "Optimize orientation"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:3988
+#: src/slic3r/GUI/Plater.cpp:4063
 msgid "Optimize the rotation of the object for better print results."
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4070
+#: src/slic3r/GUI/Plater.cpp:4145
 msgid "3D editor view"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4446
+#: src/slic3r/GUI/Plater.cpp:4521
 msgid ""
 "%1% printer was active at the time the target Undo / Redo snapshot was "
 "taken. Switching to %1% printer requires reloading of %1% presets."
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4650
+#: src/slic3r/GUI/Plater.cpp:4725
 msgid "Load Project"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4678
-msgid "Import Object"
-msgstr ""
-
-#: src/slic3r/GUI/Plater.cpp:4682
+#: src/slic3r/GUI/Plater.cpp:4757
 msgid "Import Objects"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4752
+#: src/slic3r/GUI/Plater.cpp:4827
 msgid "The selected file"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4752
+#: src/slic3r/GUI/Plater.cpp:4827
 msgid "does not contain valid gcode."
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4753
+#: src/slic3r/GUI/Plater.cpp:4828
 msgid "Error while loading .gcode file"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4807
+#: src/slic3r/GUI/Plater.cpp:4882
 msgid "All objects will be removed, continue?"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4815
+#: src/slic3r/GUI/Plater.cpp:4890
 msgid "Delete Selected Objects"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4823
+#: src/slic3r/GUI/Plater.cpp:4898
 msgid "Increase Instances"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4857
+#: src/slic3r/GUI/Plater.cpp:4932
 msgid "Decrease Instances"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4888
+#: src/slic3r/GUI/Plater.cpp:4963
 msgid "Enter the number of copies:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4889
+#: src/slic3r/GUI/Plater.cpp:4964
 msgid "Copies of the selected object"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4893
+#: src/slic3r/GUI/Plater.cpp:4968
 #, possible-c-format
 msgid "Set numbers of copies to %d"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:4954
+#: src/slic3r/GUI/Plater.cpp:5029
 msgid "Cut by Plane"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:5008
+#: src/slic3r/GUI/Plater.cpp:5083
 msgid "Save G-code file as:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:5008
+#: src/slic3r/GUI/Plater.cpp:5083
 msgid "Save SL1 file as:"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:5155
+#: src/slic3r/GUI/Plater.cpp:5230
 #, possible-c-format
 msgid "STL file exported to %s"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:5172
+#: src/slic3r/GUI/Plater.cpp:5247
 #, possible-c-format
 msgid "AMF file exported to %s"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:5175
+#: src/slic3r/GUI/Plater.cpp:5250
 #, possible-c-format
 msgid "Error exporting AMF file %s"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:5204
+#: src/slic3r/GUI/Plater.cpp:5279
 #, possible-c-format
 msgid "3MF file exported to %s"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:5209
+#: src/slic3r/GUI/Plater.cpp:5284
 #, possible-c-format
 msgid "Error exporting 3MF file %s"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:5774
+#: src/slic3r/GUI/Plater.cpp:5849
 msgid "Export"
 msgstr ""
 
-#: src/slic3r/GUI/Plater.cpp:5775
-msgid "Send to printer"
-msgstr ""
-
-#: src/slic3r/GUI/Plater.cpp:5871
+#: src/slic3r/GUI/Plater.cpp:5946
 msgid "Paste From Clipboard"
 msgstr ""
 
@@ -5666,156 +5675,167 @@ msgid ""
 "even if they are marked as incompatible with the active printer"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:120 src/libslic3r/PrintConfig.cpp:3689
+#: src/slic3r/GUI/Preferences.cpp:120
+msgid "Show drop project dialog"
+msgstr ""
+
+#: src/slic3r/GUI/Preferences.cpp:122
+msgid ""
+"When checked, whenever dragging and dropping a project file on the "
+"application, shows a dialog asking to select the action to take on the file "
+"to load."
+msgstr ""
+
+#: src/slic3r/GUI/Preferences.cpp:127 src/libslic3r/PrintConfig.cpp:3689
 msgid "Single instance mode"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:123
+#: src/slic3r/GUI/Preferences.cpp:130
 msgid ""
 "On OSX there is always only one instance of app running by default. However "
 "it is allowed to run multiple instances of same app from the command line. "
 "In such case this settings will allow only one instance."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:125
+#: src/slic3r/GUI/Preferences.cpp:132
 msgid ""
 "If this is enabled, when starting PrusaSlicer and another instance of the "
 "same PrusaSlicer is already running, that instance will be reactivated "
 "instead."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:135
+#: src/slic3r/GUI/Preferences.cpp:142
 msgid "Use Retina resolution for the 3D scene"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:137
+#: src/slic3r/GUI/Preferences.cpp:144
 msgid ""
 "If enabled, the 3D scene will be rendered in Retina resolution. If you are "
 "experiencing 3D performance problems, disabling this option may help."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:154
+#: src/slic3r/GUI/Preferences.cpp:161
 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:659
 msgid "Ask for unsaved changes when closing application"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:156
+#: src/slic3r/GUI/Preferences.cpp:163
 msgid "When closing the application, always ask for unsaved changes"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:161
+#: src/slic3r/GUI/Preferences.cpp:168
 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:660
 msgid "Ask for unsaved changes when selecting new preset"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:163
+#: src/slic3r/GUI/Preferences.cpp:170
 msgid "Always ask for unsaved changes when selecting new preset"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:169 src/slic3r/GUI/Preferences.cpp:171
+#: src/slic3r/GUI/Preferences.cpp:176 src/slic3r/GUI/Preferences.cpp:178
 msgid "Show splash screen"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:178
+#: src/slic3r/GUI/Preferences.cpp:185
 msgid "Camera"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:184
+#: src/slic3r/GUI/Preferences.cpp:191
 msgid "Use perspective camera"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:186
+#: src/slic3r/GUI/Preferences.cpp:193
 msgid ""
 "If enabled, use perspective camera. If not enabled, use orthographic camera."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:191
+#: src/slic3r/GUI/Preferences.cpp:198
 msgid "Use free camera"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:193
+#: src/slic3r/GUI/Preferences.cpp:200
 msgid "If enabled, use free camera. If not enabled, use constrained camera."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:198
+#: src/slic3r/GUI/Preferences.cpp:205
 msgid "Reverse direction of zoom with mouse wheel"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:200
+#: src/slic3r/GUI/Preferences.cpp:207
 msgid "If enabled, reverses the direction of zoom with mouse wheel"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:207
+#: src/slic3r/GUI/Preferences.cpp:214
 msgid "GUI"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:220
+#: src/slic3r/GUI/Preferences.cpp:227
 msgid "Show sidebar collapse/expand button"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:222
+#: src/slic3r/GUI/Preferences.cpp:229
 msgid ""
 "If enabled, the button for the collapse sidebar will be appeared in top "
 "right corner of the 3D Scene"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:227
+#: src/slic3r/GUI/Preferences.cpp:234
 msgid "Use custom size for toolbar icons"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:229
+#: src/slic3r/GUI/Preferences.cpp:236
 msgid "If enabled, you can change size of toolbar icons manually."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:236
+#: src/slic3r/GUI/Preferences.cpp:243
 msgid "Sequential slider applied only to top layer"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:238
+#: src/slic3r/GUI/Preferences.cpp:245
 msgid ""
 "If enabled, changes made using the sequential slider, in preview, apply only "
 "to gcode top layer. If disabled, changes made using the sequential slider, "
 "in preview, apply to the whole gcode."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:262
+#: src/slic3r/GUI/Preferences.cpp:269
 msgid "Render"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:268
+#: src/slic3r/GUI/Preferences.cpp:275
 msgid "Use environment map"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:270
+#: src/slic3r/GUI/Preferences.cpp:277
 msgid "If enabled, renders object using the environment map."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:306
+#: src/slic3r/GUI/Preferences.cpp:313
 #, possible-c-format
 msgid "You need to restart %s to make the changes effective."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:383
+#: src/slic3r/GUI/Preferences.cpp:390
 msgid "Icon size in a respect to the default size"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:398
+#: src/slic3r/GUI/Preferences.cpp:405
 msgid "Select toolbar icon size in respect to the default one."
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:429
+#: src/slic3r/GUI/Preferences.cpp:436
 msgid "Old regular layout with the tab bar"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:430
+#: src/slic3r/GUI/Preferences.cpp:437
 msgid "New layout, access via settings button in the top menu"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:431
+#: src/slic3r/GUI/Preferences.cpp:438
 msgid "Settings in non-modal window"
 msgstr ""
 
-#: src/slic3r/GUI/Preferences.cpp:440
+#: src/slic3r/GUI/Preferences.cpp:447
 msgid "Layout Options"
 msgstr ""
 
@@ -5856,7 +5876,7 @@ msgid "Add/Remove presets"
 msgstr ""
 
 #: src/slic3r/GUI/PresetComboBoxes.cpp:676
-#: src/slic3r/GUI/PresetComboBoxes.cpp:706 src/slic3r/GUI/Tab.cpp:2960
+#: src/slic3r/GUI/PresetComboBoxes.cpp:706 src/slic3r/GUI/Tab.cpp:2958
 msgid "Add physical printer"
 msgstr ""
 
@@ -5864,7 +5884,7 @@ msgstr ""
 msgid "Edit preset"
 msgstr ""
 
-#: src/slic3r/GUI/PresetComboBoxes.cpp:694 src/slic3r/GUI/Tab.cpp:2960
+#: src/slic3r/GUI/PresetComboBoxes.cpp:694 src/slic3r/GUI/Tab.cpp:2958
 msgid "Edit physical printer"
 msgstr ""
 
@@ -6202,11 +6222,11 @@ msgstr ""
 msgid "Just switch to \"%1%\" preset"
 msgstr ""
 
-#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2391
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2389
 msgid "Stealth"
 msgstr ""
 
-#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2385
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2383
 msgid "Normal"
 msgstr ""
 
@@ -6388,7 +6408,7 @@ msgstr ""
 msgid "symbolic profile name"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:1374 src/slic3r/GUI/Tab.cpp:4007
+#: src/slic3r/GUI/Tab.cpp:1374 src/slic3r/GUI/Tab.cpp:4005
 msgid "Layers and perimeters"
 msgstr ""
 
@@ -6472,7 +6492,7 @@ msgstr ""
 msgid "Other"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:1570 src/slic3r/GUI/Tab.cpp:4083
+#: src/slic3r/GUI/Tab.cpp:1570 src/slic3r/GUI/Tab.cpp:4081
 msgid "Output options"
 msgstr ""
 
@@ -6484,7 +6504,7 @@ msgstr ""
 msgid "Extruder clearance (mm)"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:1578 src/slic3r/GUI/Tab.cpp:4084
+#: src/slic3r/GUI/Tab.cpp:1578 src/slic3r/GUI/Tab.cpp:4082
 msgid "Output file"
 msgstr ""
 
@@ -6496,19 +6516,19 @@ msgstr ""
 #: src/slic3r/GUI/Tab.cpp:1900 src/slic3r/GUI/Tab.cpp:1901
 #: src/slic3r/GUI/Tab.cpp:2234 src/slic3r/GUI/Tab.cpp:2235
 #: src/slic3r/GUI/Tab.cpp:2310 src/slic3r/GUI/Tab.cpp:2311
-#: src/slic3r/GUI/Tab.cpp:3950 src/slic3r/GUI/Tab.cpp:3951
+#: src/slic3r/GUI/Tab.cpp:3948 src/slic3r/GUI/Tab.cpp:3949
 msgid "Notes"
 msgstr ""
 
 #: src/slic3r/GUI/Tab.cpp:1598 src/slic3r/GUI/Tab.cpp:1908
 #: src/slic3r/GUI/Tab.cpp:2241 src/slic3r/GUI/Tab.cpp:2317
-#: src/slic3r/GUI/Tab.cpp:3958 src/slic3r/GUI/Tab.cpp:4089
+#: src/slic3r/GUI/Tab.cpp:3956 src/slic3r/GUI/Tab.cpp:4087
 msgid "Dependencies"
 msgstr ""
 
 #: src/slic3r/GUI/Tab.cpp:1599 src/slic3r/GUI/Tab.cpp:1909
 #: src/slic3r/GUI/Tab.cpp:2242 src/slic3r/GUI/Tab.cpp:2318
-#: src/slic3r/GUI/Tab.cpp:3959 src/slic3r/GUI/Tab.cpp:4090
+#: src/slic3r/GUI/Tab.cpp:3957 src/slic3r/GUI/Tab.cpp:4088
 msgid "Profile dependencies"
 msgstr ""
 
@@ -6617,7 +6637,7 @@ msgid ""
 "nozzle diameter value?"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2117 src/slic3r/GUI/Tab.cpp:2522
+#: src/slic3r/GUI/Tab.cpp:2117 src/slic3r/GUI/Tab.cpp:2520
 #: src/libslic3r/PrintConfig.cpp:1443
 msgid "Nozzle diameter"
 msgstr ""
@@ -6662,15 +6682,15 @@ msgstr ""
 msgid "Tilt time"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2283 src/slic3r/GUI/Tab.cpp:3934
+#: src/slic3r/GUI/Tab.cpp:2283 src/slic3r/GUI/Tab.cpp:3932
 msgid "Corrections"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2300 src/slic3r/GUI/Tab.cpp:3930
+#: src/slic3r/GUI/Tab.cpp:2300 src/slic3r/GUI/Tab.cpp:3928
 msgid "Exposure"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2359 src/slic3r/GUI/Tab.cpp:2455
+#: src/slic3r/GUI/Tab.cpp:2359 src/slic3r/GUI/Tab.cpp:2453
 #: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1246
 #: src/libslic3r/PrintConfig.cpp:1263 src/libslic3r/PrintConfig.cpp:1280
 #: src/libslic3r/PrintConfig.cpp:1296 src/libslic3r/PrintConfig.cpp:1306
@@ -6678,170 +6698,170 @@ msgstr ""
 msgid "Machine limits"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2384
+#: src/slic3r/GUI/Tab.cpp:2382
 msgid "Values in this column are for Normal mode"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2390
+#: src/slic3r/GUI/Tab.cpp:2388
 msgid "Values in this column are for Stealth mode"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2399
+#: src/slic3r/GUI/Tab.cpp:2397
 msgid "Maximum feedrates"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2404
+#: src/slic3r/GUI/Tab.cpp:2402
 msgid "Maximum accelerations"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2411
+#: src/slic3r/GUI/Tab.cpp:2409
 msgid "Jerk limits"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2416
+#: src/slic3r/GUI/Tab.cpp:2414
 msgid "Minimum feedrates"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2480 src/slic3r/GUI/Tab.cpp:2488
+#: src/slic3r/GUI/Tab.cpp:2478 src/slic3r/GUI/Tab.cpp:2486
 msgid "Single extruder MM setup"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2489
+#: src/slic3r/GUI/Tab.cpp:2487
 msgid "Single extruder multimaterial parameters"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2520
+#: src/slic3r/GUI/Tab.cpp:2518
 msgid ""
 "This is a single extruder multimaterial printer, diameters of all extruders "
 "will be set to the new value. Do you want to proceed?"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2544
+#: src/slic3r/GUI/Tab.cpp:2542
 msgid "Layer height limits"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2549
+#: src/slic3r/GUI/Tab.cpp:2547
 msgid "Position (for multi-extruder printers)"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2555
+#: src/slic3r/GUI/Tab.cpp:2553
 msgid "Only lift Z"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2568
+#: src/slic3r/GUI/Tab.cpp:2566
 msgid ""
 "Retraction when tool is disabled (advanced settings for multi-extruder "
 "setups)"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2575
+#: src/slic3r/GUI/Tab.cpp:2573
 msgid "Reset to Filament Color"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2753
+#: src/slic3r/GUI/Tab.cpp:2751
 msgid ""
 "The Wipe option is not available when using the Firmware Retraction mode.\n"
 "\n"
 "Shall I disable it in order to enable Firmware Retraction?"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:2755
+#: src/slic3r/GUI/Tab.cpp:2753
 msgid "Firmware Retraction"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3341
+#: src/slic3r/GUI/Tab.cpp:3339
 msgid "Detached"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3404
+#: src/slic3r/GUI/Tab.cpp:3402
 msgid "remove"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3404
+#: src/slic3r/GUI/Tab.cpp:3402
 msgid "delete"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3413
+#: src/slic3r/GUI/Tab.cpp:3411
 msgid "It's a last preset for this physical printer."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3418
+#: src/slic3r/GUI/Tab.cpp:3416
 msgid ""
 "Are you sure you want to delete \"%1%\" preset from the physical printer "
 "\"%2%\"?"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3430
+#: src/slic3r/GUI/Tab.cpp:3428
 msgid ""
 "The physical printer(s) below is based on the preset, you are going to "
 "delete."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3434
+#: src/slic3r/GUI/Tab.cpp:3432
 msgid ""
 "Note, that selected preset will be deleted from this/those printer(s) too."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3438
+#: src/slic3r/GUI/Tab.cpp:3436
 msgid ""
 "The physical printer(s) below is based only on the preset, you are going to "
 "delete."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3442
+#: src/slic3r/GUI/Tab.cpp:3440
 msgid ""
 "Note, that this/those printer(s) will be deleted after deleting of the "
 "selected preset."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3446
+#: src/slic3r/GUI/Tab.cpp:3444
 msgid "Are you sure you want to %1% the selected preset?"
 msgstr ""
 
 #. TRN  Remove/Delete
-#: src/slic3r/GUI/Tab.cpp:3451
+#: src/slic3r/GUI/Tab.cpp:3449
 msgid "%1% Preset"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3532 src/slic3r/GUI/Tab.cpp:3604
+#: src/slic3r/GUI/Tab.cpp:3530 src/slic3r/GUI/Tab.cpp:3602
 msgid "Set"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3668
+#: src/slic3r/GUI/Tab.cpp:3666
 msgid ""
 "Machine limits will be emitted to G-code and used to estimate print time."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3671
+#: src/slic3r/GUI/Tab.cpp:3669
 msgid ""
 "Machine limits will NOT be emitted to G-code, however they will be used to "
 "estimate print time, which may therefore not be accurate as the printer may "
 "apply a different set of machine limits."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3675
+#: src/slic3r/GUI/Tab.cpp:3673
 msgid ""
 "Machine limits are not set, therefore the print time estimate may not be "
 "accurate."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3697
+#: src/slic3r/GUI/Tab.cpp:3695
 msgid "LOCKED LOCK"
 msgstr ""
 
 #. TRN Description for "LOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3699
+#: src/slic3r/GUI/Tab.cpp:3697
 msgid ""
 "indicates that the settings are the same as the system (or default) values "
 "for the current option group"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3701
+#: src/slic3r/GUI/Tab.cpp:3699
 msgid "UNLOCKED LOCK"
 msgstr ""
 
 #. TRN Description for "UNLOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3703
+#: src/slic3r/GUI/Tab.cpp:3701
 msgid ""
 "indicates that some settings were changed and are not equal to the system "
 "(or default) values for the current option group.\n"
@@ -6849,23 +6869,23 @@ msgid ""
 "to the system (or default) values."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3708
+#: src/slic3r/GUI/Tab.cpp:3706
 msgid "WHITE BULLET"
 msgstr ""
 
 #. TRN Description for "WHITE BULLET"
-#: src/slic3r/GUI/Tab.cpp:3710
+#: src/slic3r/GUI/Tab.cpp:3708
 msgid ""
 "for the left button: indicates a non-system (or non-default) preset,\n"
 "for the right button: indicates that the settings hasn't been modified."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3713
+#: src/slic3r/GUI/Tab.cpp:3711
 msgid "BACK ARROW"
 msgstr ""
 
 #. TRN Description for "BACK ARROW"
-#: src/slic3r/GUI/Tab.cpp:3715
+#: src/slic3r/GUI/Tab.cpp:3713
 msgid ""
 "indicates that the settings were changed and are not equal to the last saved "
 "preset for the current option group.\n"
@@ -6873,13 +6893,13 @@ msgid ""
 "to the last saved preset."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3725
+#: src/slic3r/GUI/Tab.cpp:3723
 msgid ""
 "LOCKED LOCK icon indicates that the settings are the same as the system (or "
 "default) values for the current option group"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3727
+#: src/slic3r/GUI/Tab.cpp:3725
 msgid ""
 "UNLOCKED LOCK icon indicates that some settings were changed and are not "
 "equal to the system (or default) values for the current option group.\n"
@@ -6887,17 +6907,17 @@ msgid ""
 "default) values."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3730
+#: src/slic3r/GUI/Tab.cpp:3728
 msgid "WHITE BULLET icon indicates a non system (or non default) preset."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3733
+#: src/slic3r/GUI/Tab.cpp:3731
 msgid ""
 "WHITE BULLET icon indicates that the settings are the same as in the last "
 "saved preset for the current option group."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3735
+#: src/slic3r/GUI/Tab.cpp:3733
 msgid ""
 "BACK ARROW icon indicates that the settings were changed and are not equal "
 "to the last saved preset for the current option group.\n"
@@ -6905,63 +6925,63 @@ msgid ""
 "preset."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3741
+#: src/slic3r/GUI/Tab.cpp:3739
 msgid ""
 "LOCKED LOCK icon indicates that the value is the same as the system (or "
 "default) value."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3742
+#: src/slic3r/GUI/Tab.cpp:3740
 msgid ""
 "UNLOCKED LOCK icon indicates that the value was changed and is not equal to "
 "the system (or default) value.\n"
 "Click to reset current value to the system (or default) value."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3748
+#: src/slic3r/GUI/Tab.cpp:3746
 msgid ""
 "WHITE BULLET icon indicates that the value is the same as in the last saved "
 "preset."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3749
+#: src/slic3r/GUI/Tab.cpp:3747
 msgid ""
 "BACK ARROW icon indicates that the value was changed and is not equal to the "
 "last saved preset.\n"
 "Click to reset current value to the last saved preset."
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:3893 src/slic3r/GUI/Tab.cpp:3895
+#: src/slic3r/GUI/Tab.cpp:3891 src/slic3r/GUI/Tab.cpp:3893
 msgid "Material"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:4017
+#: src/slic3r/GUI/Tab.cpp:4015
 msgid "Support head"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:4022
+#: src/slic3r/GUI/Tab.cpp:4020
 msgid "Support pillar"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:4045
+#: src/slic3r/GUI/Tab.cpp:4043
 msgid "Connection of the support sticks and junctions"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:4050
+#: src/slic3r/GUI/Tab.cpp:4048
 msgid "Automatic generation"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:4124
+#: src/slic3r/GUI/Tab.cpp:4122
 msgid ""
 "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n"
 "To enable \"%1%\", please switch off \"%2%\""
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:4126 src/libslic3r/PrintConfig.cpp:2908
+#: src/slic3r/GUI/Tab.cpp:4124 src/libslic3r/PrintConfig.cpp:2908
 msgid "Object elevation"
 msgstr ""
 
-#: src/slic3r/GUI/Tab.cpp:4126 src/libslic3r/PrintConfig.cpp:3010
+#: src/slic3r/GUI/Tab.cpp:4124 src/libslic3r/PrintConfig.cpp:3010
 msgid "Pad around object"
 msgstr ""
 
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index f5c0d8f53..694cd7103 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -794,7 +794,7 @@ bool GUI_App::on_init_inner()
 #ifndef __linux__
         wxYield();
 #endif
-        scrn->SetText(_L("Loading configuration..."));
+        scrn->SetText(_L("Loading configuration")+ dots);
     }
 
     preset_bundle = new PresetBundle();
@@ -852,7 +852,7 @@ bool GUI_App::on_init_inner()
 
     // application frame
     if (scrn && is_editor())
-        scrn->SetText(_L("Preparing settings tabs..."));
+        scrn->SetText(_L("Preparing settings tabs") + dots);
 
     mainframe = new MainFrame();
     // hide settings tabs after first Layout
diff --git a/src/slic3r/GUI/Jobs/SLAImportJob.cpp b/src/slic3r/GUI/Jobs/SLAImportJob.cpp
index adecae6ac..ec289ae34 100644
--- a/src/slic3r/GUI/Jobs/SLAImportJob.cpp
+++ b/src/slic3r/GUI/Jobs/SLAImportJob.cpp
@@ -36,7 +36,7 @@ public:
                                             "SL1 archive files (*.sl1, *.zip)|*.sl1;*.SL1;*.zip;*.ZIP",
                                             wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE | wxFD_OPEN | wxFD_FILE_MUST_EXIST);
         
-        szfilepck->Add(new wxStaticText(this, wxID_ANY, _(L("Import file: "))), 0, wxALIGN_CENTER);
+        szfilepck->Add(new wxStaticText(this, wxID_ANY, _L("Import file") + ": "), 0, wxALIGN_CENTER);
         szfilepck->Add(m_filepicker, 1);
         szvert->Add(szfilepck, 0, wxALL | wxEXPAND, 5);
         
@@ -53,7 +53,7 @@ public:
             inp_choices.size(), inp_choices.data(), wxCB_READONLY | wxCB_DROPDOWN);
         
         szchoices->Add(m_import_dropdown);
-        szchoices->Add(new wxStaticText(this, wxID_ANY, _(L("Quality: "))), 0, wxALIGN_CENTER | wxALL, 5);
+        szchoices->Add(new wxStaticText(this, wxID_ANY, _L("Quality") + ": "), 0, wxALIGN_CENTER | wxALL, 5);
         
         static const std::vector<wxString> qual_choices = {
             _(L("Accurate")),
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index 0a6ad968e..fc0b6c46d 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -162,8 +162,8 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
 #endif // ENABLE_GCODE_VIEWER
         m_statusbar->embed(this);
     m_statusbar->set_status_text(_L("Version") + " " +
-        SLIC3R_VERSION +
-        _L(" - Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases"));
+        SLIC3R_VERSION + " - " +
+        _L("Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases"));
 
     // initialize tabpanel and menubar
     init_tabpanel();
@@ -1582,7 +1582,7 @@ void MainFrame::quick_slice(const int qs)
     m_progress_dialog->Destroy();
     m_progress_dialog = nullptr;
 
-    auto message = input_file_basename + _L(" was successfully sliced.");
+    auto message = format(_L("%1% was successfully sliced."), input_file_basename);
 //     wxTheApp->notify(message);
     wxMessageDialog(this, message, _L("Slicing Done!"), wxOK | wxICON_INFORMATION).ShowModal();
 //     };
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 37de7b1d8..ea09e1d9b 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -745,9 +745,9 @@ Sidebar::Sidebar(Plater *parent)
         (*btn)->Hide();
     };
 
-    init_scalable_btn(&p->btn_send_gcode   , "export_gcode", _L("Send to printer ") + GUI::shortkey_ctrl_prefix() + "Shift+G");
+    init_scalable_btn(&p->btn_send_gcode   , "export_gcode", _L("Send to printer") + " " +GUI::shortkey_ctrl_prefix() + "Shift+G");
 //    init_scalable_btn(&p->btn_eject_device, "eject_sd"       , _L("Remove device ") + GUI::shortkey_ctrl_prefix() + "T");
-	init_scalable_btn(&p->btn_export_gcode_removable, "export_to_sd", _L("Export to SD card / Flash drive ") + GUI::shortkey_ctrl_prefix() + "U");
+	init_scalable_btn(&p->btn_export_gcode_removable, "export_to_sd", _L("Export to SD card / Flash drive") + " " + GUI::shortkey_ctrl_prefix() + "U");
 
     // regular buttons "Slice now" and "Export G-code" 
 

From 87e187582243f20cc296e8a883e7b30c86ae8724 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Wed, 18 Nov 2020 13:04:34 +0100
Subject: [PATCH 040/138] ENABLE_GCODE_VIEWER set as default in:

SysInfoDialog.cpp

Selection hpp/cpp

Preferences.cpp

GUI_Utils.hpp

KBShortcutsDialog.cpp
---
 src/slic3r/GUI/GUI_Utils.hpp         |   2 -
 src/slic3r/GUI/KBShortcutsDialog.cpp |  16 -----
 src/slic3r/GUI/Preferences.cpp       |  24 -------
 src/slic3r/GUI/Selection.cpp         | 101 +--------------------------
 src/slic3r/GUI/Selection.hpp         |  14 ----
 src/slic3r/GUI/SysInfoDialog.cpp     |  20 ------
 6 files changed, 3 insertions(+), 174 deletions(-)

diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp
index 0c6dd299b..3235d6e9e 100644
--- a/src/slic3r/GUI/GUI_Utils.hpp
+++ b/src/slic3r/GUI/GUI_Utils.hpp
@@ -385,7 +385,6 @@ public:
 
 std::ostream& operator<<(std::ostream &os, const WindowMetrics& metrics);
 
-#if ENABLE_GCODE_VIEWER
 inline int hex_digit_to_int(const char c)
 {
     return
@@ -393,7 +392,6 @@ inline int hex_digit_to_int(const char c)
         (c >= 'A' && c <= 'F') ? int(c - 'A') + 10 :
         (c >= 'a' && c <= 'f') ? int(c - 'a') + 10 : -1;
 }
-#endif // ENABLE_GCODE_VIEWER
 
 class TaskTimer
 {
diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp
index 7146ea077..62fb1cec9 100644
--- a/src/slic3r/GUI/KBShortcutsDialog.cpp
+++ b/src/slic3r/GUI/KBShortcutsDialog.cpp
@@ -7,9 +7,7 @@
 #include <wx/display.h>
 #include "GUI_App.hpp"
 #include "wxExtensions.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "MainFrame.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 #define NOTEBOOK_TOP 1
 #define NOTEBOOK_LEFT 2
@@ -33,11 +31,7 @@ namespace Slic3r {
 namespace GUI {
 
 KBShortcutsDialog::KBShortcutsDialog()
-#if ENABLE_GCODE_VIEWER
     : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, wxString(wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME) + " - " + _L("Keyboard Shortcuts"),
-#else
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("Keyboard Shortcuts"),
-#endif // ENABLE_GCODE_VIEWER
     wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
@@ -97,9 +91,7 @@ void KBShortcutsDialog::fill_shortcuts()
     const std::string& ctrl = GUI::shortkey_ctrl_prefix();
     const std::string& alt = GUI::shortkey_alt_prefix();
 
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         Shortcuts commands_shortcuts = {
             // File
             { ctrl + "N", L("New project, clear plater") },
@@ -204,9 +196,7 @@ void KBShortcutsDialog::fill_shortcuts()
         };
 
         m_full_shortcuts.push_back(std::make_pair(_L("Gizmos"), gizmos_shortcuts));
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 
     Shortcuts preview_shortcuts = {
         { L("Arrow Up"), L("Upper Layer") },
@@ -231,7 +221,6 @@ void KBShortcutsDialog::fill_shortcuts()
 
     m_full_shortcuts.push_back(std::make_pair(_L("Layers Slider"), layers_slider_shortcuts));
 
-#if ENABLE_GCODE_VIEWER
     Shortcuts sequential_slider_shortcuts = {
         { L("Arrow Left"), L("Move current slider thumb Left") },
         { L("Arrow Right"), L("Move current slider thumb Right") },
@@ -240,7 +229,6 @@ void KBShortcutsDialog::fill_shortcuts()
     };
 
     m_full_shortcuts.push_back(std::make_pair(_L("Sequential Slider"), sequential_slider_shortcuts));
-#endif // ENABLE_GCODE_VIEWER
 }
 
 wxPanel* KBShortcutsDialog::create_header(wxWindow* parent, const wxFont& bold_font)
@@ -258,11 +246,7 @@ wxPanel* KBShortcutsDialog::create_header(wxWindow* parent, const wxFont& bold_f
     sizer->AddStretchSpacer();
 
     // logo
-#if ENABLE_GCODE_VIEWER
     m_logo_bmp = ScalableBitmap(this, wxGetApp().is_editor() ? "PrusaSlicer_32px.png" : "PrusaSlicer-gcodeviewer_32px.png", 32);
-#else
-    m_logo_bmp = ScalableBitmap(this, "PrusaSlicer_32px.png", 32);
-#endif // ENABLE_GCODE_VIEWER
     m_header_bitmap = new wxStaticBitmap(panel, wxID_ANY, m_logo_bmp.bmp());
     sizer->Add(m_header_bitmap, 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
 
diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index fd4714dca..aed336b5c 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -40,25 +40,17 @@ void PreferencesDialog::build()
 //        readonly = > !wxTheApp->have_version_check,
 //    ));
 
-#if ENABLE_GCODE_VIEWER
 	bool is_editor = wxGetApp().is_editor();
-#endif // ENABLE_GCODE_VIEWER
 
 	ConfigOptionDef def;
-#if ENABLE_GCODE_VIEWER
 	Option option(def, "");
 	if (is_editor) {
-#endif // ENABLE_GCODE_VIEWER
 		def.label = L("Remember output directory");
 		def.type = coBool;
 		def.tooltip = L("If this is enabled, Slic3r will prompt the last output directory "
 			"instead of the one containing the input files.");
 		def.set_default_value(new ConfigOptionBool{ app_config->has("remember_output_path") ? app_config->get("remember_output_path") == "1" : true });
-#if ENABLE_GCODE_VIEWER
 		option = Option(def, "remember_output_path");
-#else
-		Option option(def, "remember_output_path");
-#endif // ENABLE_GCODE_VIEWER
 		m_optgroup_general->append_single_option_line(option);
 
 		def.label = L("Auto-center parts");
@@ -134,9 +126,7 @@ void PreferencesDialog::build()
 		def.set_default_value(new ConfigOptionBool{ app_config->has("single_instance") ? app_config->get("single_instance") == "1" : false });
 		option = Option(def, "single_instance");
 		m_optgroup_general->append_single_option_line(option);
-#if ENABLE_GCODE_VIEWER
 	}
-#endif // ENABLE_GCODE_VIEWER
 
 #if __APPLE__
 	def.label = L("Use Retina resolution for the 3D scene");
@@ -221,9 +211,7 @@ void PreferencesDialog::build()
 		}
 	};
 
-#if ENABLE_GCODE_VIEWER
 	if (is_editor) {
-#endif // ENABLE_GCODE_VIEWER
 		def.label = L("Show sidebar collapse/expand button");
 		def.type = coBool;
 		def.tooltip = L("If enabled, the button for the collapse sidebar will be appeared in top right corner of the 3D Scene");
@@ -237,7 +225,6 @@ void PreferencesDialog::build()
 		def.set_default_value(new ConfigOptionBool{ app_config->get("use_custom_toolbar_size") == "1" });
 		option = Option(def, "use_custom_toolbar_size");
 		m_optgroup_gui->append_single_option_line(option);
-#if ENABLE_GCODE_VIEWER
 	}
 
 	def.label = L("Sequential slider applied only to top layer");
@@ -247,24 +234,17 @@ void PreferencesDialog::build()
 	def.set_default_value(new ConfigOptionBool{ app_config->get("seq_top_layer_only") == "1" });
 	option = Option(def, "seq_top_layer_only");
 	m_optgroup_gui->append_single_option_line(option);
-#endif // ENABLE_GCODE_VIEWER
 
 	m_optgroup_gui->activate();
 
-#if ENABLE_GCODE_VIEWER
 	if (is_editor) {
-#endif // ENABLE_GCODE_VIEWER
 		create_icon_size_slider();
 		m_icon_size_sizer->ShowItems(app_config->get("use_custom_toolbar_size") == "1");
 
 		create_settings_mode_widget();
-#if ENABLE_GCODE_VIEWER
 	}
-#endif // ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
 	if (is_editor) {
-#endif // ENABLE_GCODE_VIEWER
 #if ENABLE_ENVIRONMENT_MAP
 		m_optgroup_render = std::make_shared<ConfigOptionsGroup>(this, _L("Render"));
 		m_optgroup_render->label_width = 40;
@@ -281,18 +261,14 @@ void PreferencesDialog::build()
 
 		m_optgroup_render->activate();
 #endif // ENABLE_ENVIRONMENT_MAP
-#if ENABLE_GCODE_VIEWER
 	}
-#endif // ENABLE_GCODE_VIEWER
 
 	auto sizer = new wxBoxSizer(wxVERTICAL);
 	sizer->Add(m_optgroup_general->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10);
 	sizer->Add(m_optgroup_camera->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10);
 	sizer->Add(m_optgroup_gui->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10);
 #if ENABLE_ENVIRONMENT_MAP
-#if ENABLE_GCODE_VIEWER
 	if (m_optgroup_render != nullptr)
-#endif // ENABLE_GCODE_VIEWER
 		sizer->Add(m_optgroup_render->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10);
 #endif // ENABLE_ENVIRONMENT_MAP
 
diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp
index f7a62a468..610881aed 100644
--- a/src/slic3r/GUI/Selection.cpp
+++ b/src/slic3r/GUI/Selection.cpp
@@ -16,9 +16,7 @@
 #include <GL/glew.h>
 
 #include <boost/algorithm/string/predicate.hpp>
-#if ENABLE_GCODE_VIEWER
 #include <boost/log/trivial.hpp>
-#endif // ENABLE_GCODE_VIEWER
 
 static const float UNIFORM_SCALE_COLOR[4] = { 0.923f, 0.504f, 0.264f, 1.0f };
 
@@ -113,11 +111,6 @@ Selection::Selection()
     , m_valid(false)
     , m_scale_factor(1.0f)
 {
-#if !ENABLE_GCODE_VIEWER
-    m_arrow.reset(new GLArrow);
-    m_curved_arrow.reset(new GLCurvedArrow(16));
-#endif // !ENABLE_GCODE_VIEWER
-
     this->set_bounding_boxes_dirty();
 #if ENABLE_RENDER_SELECTION_CENTER
     m_quadric = ::gluNewQuadric();
@@ -143,20 +136,8 @@ void Selection::set_volumes(GLVolumePtrs* volumes)
 // Init shall be called from the OpenGL render function, so that the OpenGL context is initialized!
 bool Selection::init()
 {
-#if ENABLE_GCODE_VIEWER
     m_arrow.init_from(straight_arrow(10.0f, 5.0f, 5.0f, 10.0f, 1.0f));
     m_curved_arrow.init_from(circular_arrow(16, 10.0f, 5.0f, 10.0f, 5.0f, 1.0f));
-#else
-    if (!m_arrow->init())
-        return false;
-
-    m_arrow->set_scale(5.0 * Vec3d::Ones());
-
-    if (!m_curved_arrow->init())
-        return false;
-
-    m_curved_arrow->set_scale(5.0 * Vec3d::Ones());
-#endif //ENABLE_GCODE_VIEWER
     return true;
 }
 
@@ -1962,7 +1943,6 @@ void Selection::render_bounding_box(const BoundingBoxf3& box, float* color) cons
     glsafe(::glEnd());
 }
 
-#if ENABLE_GCODE_VIEWER
 void Selection::render_sidebar_position_hints(const std::string& sidebar_field) const
 {
     auto set_color = [](Axis axis) {
@@ -1984,25 +1964,7 @@ void Selection::render_sidebar_position_hints(const std::string& sidebar_field)
         m_arrow.render();
     }
 }
-#else
-void Selection::render_sidebar_position_hints(const std::string& sidebar_field) const
-{
-    if (boost::ends_with(sidebar_field, "x"))
-    {
-        glsafe(::glRotated(-90.0, 0.0, 0.0, 1.0));
-        render_sidebar_position_hint(X);
-    }
-    else if (boost::ends_with(sidebar_field, "y"))
-        render_sidebar_position_hint(Y);
-    else if (boost::ends_with(sidebar_field, "z"))
-    {
-        glsafe(::glRotated(90.0, 1.0, 0.0, 0.0));
-        render_sidebar_position_hint(Z);
-    }
-}
-#endif // ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
 void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field) const
 {
     auto set_color = [](Axis axis) {
@@ -2030,23 +1992,6 @@ void Selection::render_sidebar_rotation_hints(const std::string& sidebar_field)
         render_sidebar_rotation_hint();
     }
 }
-#else
-void Selection::render_sidebar_rotation_hints(const std::string & sidebar_field) const
-{
-    if (boost::ends_with(sidebar_field, "x"))
-    {
-        glsafe(::glRotated(90.0, 0.0, 1.0, 0.0));
-        render_sidebar_rotation_hint(X);
-    }
-    else if (boost::ends_with(sidebar_field, "y"))
-    {
-        glsafe(::glRotated(-90.0, 1.0, 0.0, 0.0));
-        render_sidebar_rotation_hint(Y);
-    }
-    else if (boost::ends_with(sidebar_field, "z"))
-        render_sidebar_rotation_hint(Z);
-}
-#endif // ENABLE_GCODE_VIEWER
 
 void Selection::render_sidebar_scale_hints(const std::string& sidebar_field) const
 {
@@ -2058,38 +2003,27 @@ void Selection::render_sidebar_scale_hints(const std::string& sidebar_field) con
             shader->set_uniform("uniform_color", uniform_scale ? UNIFORM_SCALE_COLOR : AXES_COLOR[axis], 4);
 
         glsafe(::glTranslated(0.0, 5.0, 0.0));
-#if ENABLE_GCODE_VIEWER
         m_arrow.render();
-#else
-        m_arrow->render();
-#endif // ENABLE_GCODE_VIEWER
 
         glsafe(::glTranslated(0.0, -10.0, 0.0));
         glsafe(::glRotated(180.0, 0.0, 0.0, 1.0));
-#if ENABLE_GCODE_VIEWER
         m_arrow.render();
-#else
-        m_arrow->render();
-#endif // ENABLE_GCODE_VIEWER
     };
 
-    if (boost::ends_with(sidebar_field, "x") || uniform_scale)
-    {
+    if (boost::ends_with(sidebar_field, "x") || uniform_scale) {
         glsafe(::glPushMatrix());
         glsafe(::glRotated(-90.0, 0.0, 0.0, 1.0));
         render_sidebar_scale_hint(X);
         glsafe(::glPopMatrix());
     }
 
-    if (boost::ends_with(sidebar_field, "y") || uniform_scale)
-    {
+    if (boost::ends_with(sidebar_field, "y") || uniform_scale) {
         glsafe(::glPushMatrix());
         render_sidebar_scale_hint(Y);
         glsafe(::glPopMatrix());
     }
 
-    if (boost::ends_with(sidebar_field, "z") || uniform_scale)
-    {
+    if (boost::ends_with(sidebar_field, "z") || uniform_scale) {
         glsafe(::glPushMatrix());
         glsafe(::glRotated(90.0, 1.0, 0.0, 0.0));
         render_sidebar_scale_hint(Z);
@@ -2169,35 +2103,6 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) co
     glsafe(::glDisable(GL_BLEND));
 }
 
-#if !ENABLE_GCODE_VIEWER
-void Selection::render_sidebar_position_hint(Axis axis) const
-{
-    m_arrow->set_color(AXES_COLOR[axis], 3);
-    m_arrow->render();
-}
-
-void Selection::render_sidebar_rotation_hint(Axis axis) const
-{
-    m_curved_arrow->set_color(AXES_COLOR[axis], 3);
-    m_curved_arrow->render();
-
-    glsafe(::glRotated(180.0, 0.0, 0.0, 1.0));
-    m_curved_arrow->render();
-}
-
-void Selection::render_sidebar_scale_hint(Axis axis) const
-{
-    m_arrow->set_color(((requires_uniform_scale() || wxGetApp().obj_manipul()->get_uniform_scaling()) ? UNIFORM_SCALE_COLOR : AXES_COLOR[axis]), 3);
-
-    glsafe(::glTranslated(0.0, 5.0, 0.0));
-    m_arrow->render();
-
-    glsafe(::glTranslated(0.0, -10.0, 0.0));
-    glsafe(::glRotated(180.0, 0.0, 0.0, 1.0));
-    m_arrow->render();
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 #ifndef NDEBUG
 static bool is_rotation_xy_synchronized(const Vec3d &rot_xyz_from, const Vec3d &rot_xyz_to)
 {
diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp
index 2d87b9873..4da9e44a3 100644
--- a/src/slic3r/GUI/Selection.hpp
+++ b/src/slic3r/GUI/Selection.hpp
@@ -3,9 +3,7 @@
 
 #include <set>
 #include "libslic3r/Geometry.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "GLModel.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 #if ENABLE_RENDER_SELECTION_CENTER
 class GLUquadric;
@@ -221,15 +219,8 @@ private:
     GLUquadricObj* m_quadric;
 #endif // ENABLE_RENDER_SELECTION_CENTER
 
-#if ENABLE_GCODE_VIEWER
     GLModel m_arrow;
     GLModel m_curved_arrow;
-#else
-    // Arrows are saved through pointers to avoid including 3DScene.hpp.
-    // It also allows mutability.
-    std::unique_ptr<GLArrow> m_arrow;
-    std::unique_ptr<GLCurvedArrow> m_curved_arrow;
-#endif // ENABLE_GCODE_VIEWER
 
     mutable float m_scale_factor;
 
@@ -386,11 +377,6 @@ private:
     void render_sidebar_rotation_hints(const std::string& sidebar_field) const;
     void render_sidebar_scale_hints(const std::string& sidebar_field) const;
     void render_sidebar_layers_hints(const std::string& sidebar_field) const;
-#if !ENABLE_GCODE_VIEWER
-    void render_sidebar_position_hint(Axis axis) const;
-    void render_sidebar_rotation_hint(Axis axis) const;
-    void render_sidebar_scale_hint(Axis axis) const;
-#endif // !ENABLE_GCODE_VIEWER
 
 public:
     enum SyncRotationType {
diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp
index 6c2e99709..d112a295b 100644
--- a/src/slic3r/GUI/SysInfoDialog.cpp
+++ b/src/slic3r/GUI/SysInfoDialog.cpp
@@ -34,17 +34,9 @@ std::string get_main_info(bool format_as_html)
     std::string line_end = format_as_html ? "<br>" : "\n";
 
     if (!format_as_html)
-#if ENABLE_GCODE_VIEWER
         out << b_start << (wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME) << b_end << line_end;
-#else
-        out << b_start << SLIC3R_APP_NAME << b_end << line_end;
-#endif // ENABLE_GCODE_VIEWER
     out << b_start << "Version:   "             << b_end << SLIC3R_VERSION << line_end;
-#if ENABLE_GCODE_VIEWER
     out << b_start << "Build:     " << b_end << (wxGetApp().is_editor() ? SLIC3R_BUILD_ID : GCODEVIEWER_BUILD_ID) << line_end;
-#else
-    out << b_start << "Build:     "             << b_end << SLIC3R_BUILD_ID << line_end;
-#endif // ENABLE_GCODE_VIEWER
     out << line_end;
     out << b_start << "Operating System:    "   << b_end << wxPlatformInfo::Get().GetOperatingSystemFamilyName() << line_end;
     out << b_start << "System Architecture: "   << b_end << wxPlatformInfo::Get().GetArchName() << line_end;
@@ -86,11 +78,7 @@ std::string get_mem_info(bool format_as_html)
 }
 
 SysInfoDialog::SysInfoDialog()
-#if ENABLE_GCODE_VIEWER
     : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, (wxGetApp().is_editor() ? wxString(SLIC3R_APP_NAME) : wxString(GCODEVIEWER_APP_NAME)) + " - " + _L("System Information"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
-#else
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("System Information"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
-#endif // ENABLE_GCODE_VIEWER
 {
 	wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
 	SetBackgroundColour(bgr_clr);
@@ -103,11 +91,7 @@ SysInfoDialog::SysInfoDialog()
 	main_sizer->Add(hsizer, 1, wxEXPAND | wxALL, 10);
 
     // logo
-#if ENABLE_GCODE_VIEWER
     m_logo_bmp = ScalableBitmap(this, wxGetApp().is_editor() ? "PrusaSlicer_192px.png" : "PrusaSlicer-gcodeviewer_192px.png", 192);
-#else
-    m_logo_bmp = ScalableBitmap(this, "PrusaSlicer_192px.png", 192);
-#endif // ENABLE_GCODE_VIEWER
     m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bmp.bmp());
 	hsizer->Add(m_logo, 0, wxALIGN_CENTER_VERTICAL);
     
@@ -116,11 +100,7 @@ SysInfoDialog::SysInfoDialog()
 
     // title
     {
-#if ENABLE_GCODE_VIEWER
         wxStaticText* title = new wxStaticText(this, wxID_ANY, wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME, wxDefaultPosition, wxDefaultSize);
-#else
-        wxStaticText* title = new wxStaticText(this, wxID_ANY, SLIC3R_APP_NAME, wxDefaultPosition, wxDefaultSize);
-#endif // ENABLE_GCODE_VIEWER
         wxFont title_font = wxGetApp().bold_font();
         title_font.SetFamily(wxFONTFAMILY_ROMAN);
         title_font.SetPointSize(22);

From 24b425cf575c9b78b5ef22f82e51a8bdca3199d2 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Wed, 18 Nov 2020 13:42:17 +0100
Subject: [PATCH 041/138] Follow-up of 808c43cb4b05b4e61abe07deee934bf63918bd22
 -> Fixed drag and drop of non-project files

---
 src/slic3r/GUI/Plater.cpp | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 37de7b1d8..197c861e0 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1496,6 +1496,7 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi
         // Likely all paths processed were gcodes, for which a G-code viewer instance has hopefully been started.
         return false;
 
+    // searches for project files
     for (std::vector<fs::path>::const_reverse_iterator it = paths.rbegin(); it != paths.rend(); ++it) {
         std::string filename = (*it).filename().string();
         if (boost::algorithm::iends_with(filename, ".3mf") || boost::algorithm::iends_with(filename, ".amf")) {
@@ -1538,10 +1539,31 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi
                 break;
             }
             }
-            break;
+
+            return true;
         }
     }
 
+    // other files
+    wxString snapshot_label;
+    assert(!paths.empty());
+    if (paths.size() == 1) {
+        snapshot_label = _L("Load File");
+        snapshot_label += ": ";
+        snapshot_label += wxString::FromUTF8(paths.front().filename().string().c_str());
+    }
+    else {
+        snapshot_label = _L("Load Files");
+        snapshot_label += ": ";
+        snapshot_label += wxString::FromUTF8(paths.front().filename().string().c_str());
+        for (size_t i = 1; i < paths.size(); ++i) {
+            snapshot_label += ", ";
+            snapshot_label += wxString::FromUTF8(paths[i].filename().string().c_str());
+        }
+    }
+    Plater::TakeSnapshot snapshot(plater, snapshot_label);
+    plater->load_files(paths);
+
     return true;
 }
 

From 6e748f2e4ac30b49201c0e4bc067a6100bb86d52 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Wed, 11 Nov 2020 18:12:32 +0100
Subject: [PATCH 042/138] Implemented ruler for the vertical DoubleSlider

---
 src/slic3r/GUI/DoubleSlider.cpp | 175 +++++++++++++++++++++++++++-----
 src/slic3r/GUI/DoubleSlider.hpp |  13 ++-
 2 files changed, 159 insertions(+), 29 deletions(-)

diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 6e1b6a8cd..64ea70514 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -4,6 +4,7 @@
 #include "libslic3r/GCode.hpp"
 #else
 #include "wxExtensions.hpp"
+#include "libslic3r/GCode/PreviewData.hpp"
 #endif // ENABLE_GCODE_VIEWER
 #include "GUI.hpp"
 #include "GUI_App.hpp"
@@ -12,6 +13,7 @@
 #include "ExtruderSequenceDialog.hpp"
 #include "libslic3r/Print.hpp"
 #include "libslic3r/AppConfig.hpp"
+#include "GUI_Utils.hpp"
 
 #include <wx/button.h>
 #include <wx/dialog.h>
@@ -68,7 +70,8 @@ Control::Control( wxWindow *parent,
     m_higher_value (higherValue), 
     m_min_value(minValue), 
     m_max_value(maxValue),
-    m_style(style == wxSL_HORIZONTAL || style == wxSL_VERTICAL ? style: wxSL_HORIZONTAL)
+    m_style(style == wxSL_HORIZONTAL || style == wxSL_VERTICAL ? style: wxSL_HORIZONTAL),
+    m_extra_style(style == wxSL_VERTICAL ? wxSL_AUTOTICKS | wxSL_VALUE_LABEL : 0)
 {
 #ifdef __WXOSX__ 
     is_osx = true;
@@ -443,6 +446,9 @@ void Control::render()
     // and only in a case of no-empty m_values
     draw_colored_band(dc);
 
+    if (m_extra_style & wxSL_AUTOTICKS)
+        draw_ruler(dc);
+
     if (!m_render_as_disabled) {
         // draw line
         draw_scroll_line(dc, lower_pos, higher_pos);
@@ -569,9 +575,16 @@ void Control::draw_tick_on_mouse_position(wxDC& dc)
     //draw info line
     dc.SetPen(LIGHT_GREY_PEN);
     draw_ticks(dc, pos);
+
+    if (m_extra_style & wxSL_VALUE_LABEL) {
+        wxColour old_clr = dc.GetTextForeground();
+        dc.SetTextForeground(LIGHT_GREY_PEN.GetColour());
+        draw_tick_text(dc, pos, tick, ltEstimatedTime, false);
+        dc.SetTextForeground(old_clr);
+    }
 }
 
-wxString Control::get_label(int tick) const
+wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer*/) const
 {
     const int value = tick;
 
@@ -584,23 +597,33 @@ wxString Control::get_label(int tick) const
     if (m_draw_mode == dmSequentialGCodeView)
         return wxString::Format("%d", static_cast<unsigned int>(m_values[value]));
     else {
-        const wxString str = m_values.empty() ?
+        if (label_type == ltEstimatedTime)
+            // ysFIXME get estimated time for the current tick
+            return "time";
+        wxString str = m_values.empty() ?
             wxString::Format("%.*f", 2, m_label_koef * value) :
             wxString::Format("%.*f", 2, m_values[value]);
-        return format_wxstr("%1%\n(%2%)", str, m_values.empty() ? value : value + 1);
+        if (label_type == ltHeight)
+            return str;
+        if (label_type == ltHeightWithLayer)
+            return format_wxstr("%1%\n(%2%)", str, m_values.empty() ? value : value + 1);
     }
 #else
         const wxString str = m_values.empty() ?
             wxNumberFormatter::ToString(m_label_koef * value, 2, wxNumberFormatter::Style_None) :
             wxNumberFormatter::ToString(m_values[value], 2, wxNumberFormatter::Style_None);
-        return format_wxstr("%1%\n(%2%)", str, m_values.empty() ? value : value + 1);
+        if (label_type == ltHeight)
+            return str;
+        if (label_type == ltHeightWithLayer)
+            return format_wxstr("%1%\n(%2%)", str, m_values.empty() ? value : value + 1);
 #endif // ENABLE_GCODE_VIEWER
+    return wxEmptyString;
 }
 
-void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, bool right_side/*=true*/) const
+void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, LabelType label_type/* = ltHeight*/, bool right_side/*=true*/) const
 {
     wxCoord text_width, text_height;
-    const wxString label = get_label(tick);
+    const wxString label = get_label(tick, label_type);
     dc.GetMultiLineTextExtent(label, &text_width, &text_height);
     wxPoint text_pos;
     if (right_side) {
@@ -615,9 +638,6 @@ void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, bool right_
         }
         else
             text_pos = wxPoint(pos.x + m_thumb_size.x + 1, pos.y - 0.5 * text_height - 1);
-
-        // update text rectangle
-        m_rect_lower_thumb_text = wxRect(text_pos, wxSize(text_width, text_height));
     }
     else {
         if (is_horizontal()) {
@@ -627,9 +647,6 @@ void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, bool right_
         }
         else
             text_pos = wxPoint(pos.x - text_width - 1 - m_thumb_size.x, pos.y - 0.5 * text_height + 1);
-
-        // update text rectangle
-        m_rect_higher_thumb_text = wxRect(text_pos, wxSize(text_width, text_height));
     }
 
     dc.DrawText(label, text_pos);
@@ -637,7 +654,7 @@ void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, bool right_
 
 void Control::draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) const
 {
-    draw_tick_text(dc, pos, selection == ssLower ? m_lower_value : m_higher_value, selection == ssLower);
+    draw_tick_text(dc, pos, selection == ssLower ? m_lower_value : m_higher_value, ltHeightWithLayer, selection == ssLower);
 }
 
 void Control::draw_thumb_item(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection)
@@ -866,6 +883,98 @@ void Control::draw_colored_band(wxDC& dc)
     }
 }
 
+void Control::draw_ruler(wxDC& dc)
+{
+    int height, width;
+    get_size(&width, &height);
+    const wxCoord mid = is_horizontal() ? 0.5 * height : 0.5 * width;
+
+    int DPI = GUI::get_dpi_for_window(this->GetParent());
+    int pixels_per_sm = lround((double)(DPI) * 5.0/25.4);
+
+    int pow = -1;
+    int step = 0;
+    double ruler_short_step;
+
+    while (pow < 3) {
+        for (int istep : {1, 2, 5}) {
+            double val = (double)istep * std::pow(10,pow);
+            auto val_it = std::lower_bound(m_values.begin(), m_values.end(), val - epsilon());
+
+            if (val_it == m_values.end())
+                break;
+            int tick = val_it - m_values.begin();
+
+            if (lround(tick * get_scroll_step()) > pixels_per_sm) {
+                step = istep;
+
+                // find next tick with istep
+                val *= 2;
+                val_it = std::lower_bound(m_values.begin(), m_values.end(), val - epsilon());
+                // count of short ticks between ticks
+                int short_ticks_cnt = val_it == m_values.end() ? tick : val_it - m_values.begin() - tick;
+                // there couldn't be more then 10 short ticks between thicks
+                ruler_short_step = 0.1 * short_ticks_cnt;
+                break;
+            }
+        }
+        if (step > 0)
+            break;
+        pow++;
+    }
+
+    if (step == 0)
+        return; 
+
+    auto draw_ticks = [this, mid](wxDC& dc, wxCoord pos, int tick_len)
+    {
+        int mid_space = 9;
+        is_horizontal() ?   dc.DrawLine(pos, mid - (mid_space + tick_len), pos, mid - mid_space) :
+                            dc.DrawLine(mid - (mid_space + tick_len), pos, mid - mid_space, pos);
+        is_horizontal() ?   dc.DrawLine(pos, mid + (mid_space + tick_len), pos, mid + mid_space) :
+                            dc.DrawLine(mid + (mid_space + tick_len), pos, mid + mid_space, pos);
+    };
+
+    auto draw_short_ticks = [this, draw_ticks, ruler_short_step](wxDC& dc, double& current_tick, int max_tick)
+    {
+        while (current_tick < max_tick) {
+            wxCoord pos = get_position_from_value(lround(current_tick));
+            draw_ticks(dc, pos, 2);
+            current_tick += ruler_short_step;
+        }
+    };   
+
+    dc.SetPen(LIGHT_GREY_PEN);
+    wxColour old_clr = dc.GetTextForeground();
+    dc.SetTextForeground(LIGHT_GREY_PEN.GetColour());
+
+    double short_tick;
+    int tick = 0;
+    double value = 0.0;
+
+    double interval = (double)step * std::pow(10, pow);
+    while (tick <= m_max_value)
+    {
+        value += interval;
+        short_tick = tick;
+        auto val_it = std::lower_bound(m_values.begin(), m_values.end(), value - epsilon());
+
+        if (val_it == m_values.end())
+            break;
+        tick = val_it - m_values.begin();
+
+        wxCoord pos = get_position_from_value(tick);
+        draw_ticks(dc, pos, 5);
+
+        draw_tick_text(dc, wxPoint(mid/* + 2*/, pos), tick);
+        draw_short_ticks(dc, short_tick, tick);
+    }
+    // short ticks from the last tick to the end 
+    draw_short_ticks(dc, short_tick, m_max_value);
+
+    dc.SetTextForeground(old_clr);
+}
+
 void Control::draw_one_layer_icon(wxDC& dc)
 {
 #if ENABLE_GCODE_VIEWER
@@ -1083,9 +1192,9 @@ wxString Control::get_tooltip(int tick/*=-1*/)
         else
 #endif // ENABLE_GCODE_VIEWER
             return m_mode == MultiAsSingle ?
-               GUI::from_u8((boost::format(_u8L("Jump to height %s or "
-                   "Set extruder sequence for the entire print")) % " (Shift + G)\n").str()) :
-        _L("Jump to height") + " (Shift + G)";
+            GUI::from_u8((boost::format(_u8L("Jump to height %s Set ruler mode\n or "
+                "Set extruder sequence for the entire print")) % " (Shift + G)\n").str()) :
+            GUI::from_u8((boost::format(_u8L("Jump to height %s or Set ruler mode")) % " (Shift + G)\n").str());
 #if ENABLE_GCODE_VIEWER
     }
 #endif // ENABLE_GCODE_VIEWER
@@ -1339,14 +1448,7 @@ void Control::OnLeftUp(wxMouseEvent& event)
         add_current_tick();
         break;
     case maCogIconClick :
-        if (m_mode == MultiAsSingle && m_draw_mode == dmRegular)
-            show_cog_icon_context_menu();
-        else
-#if ENABLE_GCODE_VIEWER
-            jump_to_value();
-#else
-            jump_to_print_z();
-#endif // ENABLE_GCODE_VIEWER
+        show_cog_icon_context_menu();
         break;
     case maOneLayerIconClick:
         switch_one_layer_mode();
@@ -1736,8 +1838,27 @@ void Control::show_cog_icon_context_menu()
                      [this](wxCommandEvent&) { jump_to_print_z(); }, "", &menu);
 #endif // ENABLE_GCODE_VIEWER
 
-    append_menu_item(&menu, wxID_ANY, _L("Set extruder sequence for the entire print"), "",
-        [this](wxCommandEvent&) { edit_extruder_sequence(); }, "", &menu);
+    wxMenu* ruler_mode_menu = new wxMenu();
+    if (ruler_mode_menu) {
+        append_menu_check_item(ruler_mode_menu, wxID_ANY, _L("None"), _L("Supprese show the ruler"), 
+            [this](wxCommandEvent&) { if (m_extra_style != 0) m_extra_style = 0; }, ruler_mode_menu, 
+            []() { return true; }, [this]() { return m_extra_style == 0; }, GUI::wxGetApp().plater());
+
+        append_menu_check_item(ruler_mode_menu, wxID_ANY, _L("Show object height"), _L("Show object height on the ruler"),
+            [this](wxCommandEvent&) { m_extra_style & wxSL_AUTOTICKS ? m_extra_style &= wxSL_AUTOTICKS : m_extra_style |= wxSL_AUTOTICKS; }, ruler_mode_menu,
+            []() { return true; }, [this]() { return m_extra_style & wxSL_AUTOTICKS; }, GUI::wxGetApp().plater());
+
+        append_menu_check_item(ruler_mode_menu, wxID_ANY, _L("Show estimated print time"), _L("Show estimated print time on the ruler"),
+            [this](wxCommandEvent&) { m_extra_style & wxSL_VALUE_LABEL ? m_extra_style &= wxSL_VALUE_LABEL : m_extra_style |= wxSL_VALUE_LABEL; }, ruler_mode_menu,
+            []() { return true; }, [this]() { return m_extra_style & wxSL_VALUE_LABEL; }, GUI::wxGetApp().plater());
+
+        append_submenu(&menu, ruler_mode_menu, wxID_ANY, _L("Ruler mode"), _L("Set ruler mode"), "",
+            [this]() { return true; }, this);
+    }
+
+    if (m_mode == MultiAsSingle && m_draw_mode == dmRegular)
+        append_menu_item(&menu, wxID_ANY, _L("Set extruder sequence for the entire print"), "",
+            [this](wxCommandEvent&) { edit_extruder_sequence(); }, "", &menu);
 
     GUI::wxGetApp().plater()->PopupMenu(&menu);
 }
diff --git a/src/slic3r/GUI/DoubleSlider.hpp b/src/slic3r/GUI/DoubleSlider.hpp
index 511858dd5..f909f105a 100644
--- a/src/slic3r/GUI/DoubleSlider.hpp
+++ b/src/slic3r/GUI/DoubleSlider.hpp
@@ -84,6 +84,13 @@ enum DrawMode
 #endif // ENABLE_GCODE_VIEWER
 };
 
+enum LabelType
+{
+    ltHeightWithLayer,
+    ltHeight,
+    ltEstimatedTime,
+};
+
 struct TickCode
 {
     bool operator<(const TickCode& other) const { return other.tick > this->tick; }
@@ -283,13 +290,14 @@ protected:
     void    draw_thumbs(wxDC& dc, const wxCoord& lower_pos, const wxCoord& higher_pos);
     void    draw_ticks(wxDC& dc);
     void    draw_colored_band(wxDC& dc);
+    void    draw_ruler(wxDC& dc);
     void    draw_one_layer_icon(wxDC& dc);
     void    draw_revert_icon(wxDC& dc);
     void    draw_cog_icon(wxDC &dc);
     void    draw_thumb_item(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection);
     void    draw_info_line_with_icon(wxDC& dc, const wxPoint& pos, SelectedSlider selection);
     void    draw_tick_on_mouse_position(wxDC &dc);
-    void    draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, bool right_side = true) const;
+    void    draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, LabelType label_type = ltHeight, bool right_side = true) const;
     void    draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) const;
 
     void    update_thumb_rect(const wxCoord begin_x, const wxCoord begin_y, const SelectedSlider& selection);
@@ -306,7 +314,7 @@ private:
     int     get_tick_near_point(const wxPoint& pt);
 
     double      get_scroll_step();
-    wxString    get_label(int tick) const;
+    wxString    get_label(int tick, LabelType label_type = ltHeightWithLayer) const;
     void        get_lower_and_higher_position(int& lower_pos, int& higher_pos);
     int         get_value_from_position(const wxCoord x, const wxCoord y);
     int         get_value_from_position(const wxPoint pos) { return get_value_from_position(pos.x, pos.y); }
@@ -387,6 +395,7 @@ private:
     int         m_revert_icon_dim;
     int         m_cog_icon_dim;
     long        m_style;
+    long        m_extra_style;
     float       m_label_koef = 1.0;
 
     std::vector<double> m_values;

From cb844a4034e3445e7d15632fe5f00ee9c4330a97 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Mon, 16 Nov 2020 21:33:07 +0100
Subject: [PATCH 043/138] DoubleSlider's ruler is implemented in respect to the
 use with sequential printing of objects

---
 src/slic3r/GUI/DoubleSlider.cpp | 117 ++++++++++++++++++++------------
 src/slic3r/GUI/DoubleSlider.hpp |  12 +++-
 2 files changed, 85 insertions(+), 44 deletions(-)

diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 64ea70514..40463288e 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -243,6 +243,12 @@ void Control::SetMaxValue(const int max_value)
     Update();
 }
 
+void Control::SetSliderValues(const std::vector<double>& values)
+{
+    m_values = values;
+    m_ruler.count = std::count(m_values.begin(), m_values.end(), m_values.front());
+}
+
 void Control::draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_pos)
 {
     int width;
@@ -732,6 +738,15 @@ void Control::draw_thumbs(wxDC& dc, const wxCoord& lower_pos, const wxCoord& hig
     draw_thumb_text(dc, pos_l, ssLower);
 }
 
+void Control::draw_ticks_pair(wxDC& dc, wxCoord pos, wxCoord mid, int tick_len)
+{
+    int mid_space = 9;
+    is_horizontal() ? dc.DrawLine(pos, mid - (mid_space + tick_len), pos, mid - mid_space) :
+        dc.DrawLine(mid - (mid_space + tick_len), pos, mid - mid_space, pos);
+    is_horizontal() ? dc.DrawLine(pos, mid + (mid_space + tick_len), pos, mid + mid_space) :
+        dc.DrawLine(mid + (mid_space + tick_len), pos, mid + mid_space, pos);
+};
+
 void Control::draw_ticks(wxDC& dc)
 {
     if (m_draw_mode == dmSlaPrint)
@@ -743,11 +758,7 @@ void Control::draw_ticks(wxDC& dc)
     const wxCoord mid = is_horizontal() ? 0.5*height : 0.5*width;
     for (auto tick : m_ticks.ticks) {
         const wxCoord pos = get_position_from_value(tick.tick);
-
-        is_horizontal() ?   dc.DrawLine(pos, mid-14, pos, mid-9) :
-                            dc.DrawLine(mid - 14, pos/* - 1*/, mid - 9, pos/* - 1*/);
-        is_horizontal() ?   dc.DrawLine(pos, mid+14, pos, mid+9) :
-                            dc.DrawLine(mid + 14, pos/* - 1*/, mid + 9, pos/* - 1*/);
+        draw_ticks_pair(dc, pos, mid, 7);
 
         // if current tick if focused, we should to use a specific "focused" icon 
         bool focused_tick = m_moving_pos != wxDefaultPosition && tick.tick == get_tick_near_point(m_moving_pos);
@@ -883,38 +894,35 @@ void Control::draw_colored_band(wxDC& dc)
     }
 }
 
-void Control::draw_ruler(wxDC& dc)
+void Control::Ruler::update(wxWindow* win, const std::vector<double>& values, double scroll_step)
 {
-    int height, width;
-    get_size(&width, &height);
-    const wxCoord mid = is_horizontal() ? 0.5 * height : 0.5 * width;
-
-    int DPI = GUI::get_dpi_for_window(this->GetParent());
+    int DPI = GUI::get_dpi_for_window(win);
     int pixels_per_sm = lround((double)(DPI) * 5.0/25.4);
 
-    int pow = -1;
+    int pow = -2;
     int step = 0;
-    double ruler_short_step;
+    auto end_it = count == 1 ? values.end() : values.begin() + lround(values.size() / count);
 
     while (pow < 3) {
+        int tick = 0;
         for (int istep : {1, 2, 5}) {
             double val = (double)istep * std::pow(10,pow);
-            auto val_it = std::lower_bound(m_values.begin(), m_values.end(), val - epsilon());
+            auto val_it = std::lower_bound(values.begin(), end_it, val - epsilon());
 
-            if (val_it == m_values.end())
+            if (val_it == values.end())
                 break;
-            int tick = val_it - m_values.begin();
+            int tick = val_it - values.begin();
 
-            if (lround(tick * get_scroll_step()) > pixels_per_sm) {
+            if (lround(tick * scroll_step) > pixels_per_sm) {
                 step = istep;
 
                 // find next tick with istep
                 val *= 2;
-                val_it = std::lower_bound(m_values.begin(), m_values.end(), val - epsilon());
+                val_it = std::lower_bound(values.begin(), end_it, val - epsilon());
                 // count of short ticks between ticks
-                int short_ticks_cnt = val_it == m_values.end() ? tick : val_it - m_values.begin() - tick;
+                int short_ticks_cnt = val_it == values.end() ? tick : val_it - values.begin() - tick;
                 // there couldn't be more then 10 short ticks between thicks
-                ruler_short_step = 0.1 * short_ticks_cnt;
+                short_step = 0.1 * short_ticks_cnt;
                 break;
             }
         }
@@ -923,24 +931,26 @@ void Control::draw_ruler(wxDC& dc)
         pow++;
     }
 
-    if (step == 0)
-        return; 
+    long_step = step == 0 ? -1.0 : (double)step* std::pow(10, pow);
+}
 
-    auto draw_ticks = [this, mid](wxDC& dc, wxCoord pos, int tick_len)
-    {
-        int mid_space = 9;
-        is_horizontal() ?   dc.DrawLine(pos, mid - (mid_space + tick_len), pos, mid - mid_space) :
-                            dc.DrawLine(mid - (mid_space + tick_len), pos, mid - mid_space, pos);
-        is_horizontal() ?   dc.DrawLine(pos, mid + (mid_space + tick_len), pos, mid + mid_space) :
-                            dc.DrawLine(mid + (mid_space + tick_len), pos, mid + mid_space, pos);
-    };
+void Control::draw_ruler(wxDC& dc)
+{
+    m_ruler.update(this->GetParent(), m_values, get_scroll_step());
+    if (!m_ruler.is_ok())
+        return;
 
-    auto draw_short_ticks = [this, draw_ticks, ruler_short_step](wxDC& dc, double& current_tick, int max_tick)
-    {
+    int height, width;
+    get_size(&width, &height);
+    const wxCoord mid = is_horizontal() ? 0.5 * height : 0.5 * width;    
+
+    auto draw_short_ticks = [this, mid](wxDC& dc, double& current_tick, int max_tick) {
         while (current_tick < max_tick) {
             wxCoord pos = get_position_from_value(lround(current_tick));
-            draw_ticks(dc, pos, 2);
-            current_tick += ruler_short_step;
+            draw_ticks_pair(dc, pos, mid, 2);
+            current_tick += m_ruler.short_step;
+            if (current_tick > m_max_value)
+                break;
         }
     };   
 
@@ -951,23 +961,44 @@ void Control::draw_ruler(wxDC& dc)
     double short_tick;
     int tick = 0;
     double value = 0.0;
+    int sequence = 0;
 
-    double interval = (double)step * std::pow(10, pow);
-    while (tick <= m_max_value)
-    {
-        value += interval;
+    while (tick <= m_max_value) {
+        value += m_ruler.long_step;
+        if (value > m_values.back() && sequence < m_ruler.count) {
+            value = m_ruler.long_step;
+            for (tick; tick < m_values.size(); tick++)
+                if (m_values[tick] < value)
+                    break;
+            // short ticks from the last tick to the end of current sequence
+            draw_short_ticks(dc, short_tick, tick);
+            sequence++;
+        }
         short_tick = tick;
-        auto val_it = std::lower_bound(m_values.begin(), m_values.end(), value - epsilon());
 
-        if (val_it == m_values.end())
+        for (tick; tick < m_values.size(); tick++) {
+            if (m_values[tick] == value)
+                break;
+            if (m_values[tick] > value) {
+                if (tick > 0)
+                    tick--;
+                break;
+            }
+        }
+        if (tick > m_max_value)
             break;
-        tick = val_it - m_values.begin();
 
         wxCoord pos = get_position_from_value(tick);
-        draw_ticks(dc, pos, 5);
+        draw_ticks_pair(dc, pos, mid, 5);
+        draw_tick_text(dc, wxPoint(mid, pos), tick);
 
-        draw_tick_text(dc, wxPoint(mid/* + 2*/, pos), tick);
         draw_short_ticks(dc, short_tick, tick);
+
+        if (value == m_values.back() && sequence < m_ruler.count) {
+            value = 0.0;
+            sequence++;
+            tick++;
+        }
     }
     // short ticks from the last tick to the end 
     draw_short_ticks(dc, short_tick, m_max_value);
diff --git a/src/slic3r/GUI/DoubleSlider.hpp b/src/slic3r/GUI/DoubleSlider.hpp
index f909f105a..f6e555934 100644
--- a/src/slic3r/GUI/DoubleSlider.hpp
+++ b/src/slic3r/GUI/DoubleSlider.hpp
@@ -219,7 +219,7 @@ public:
 
     void    SetMaxValue(const int max_value);
     void    SetKoefForLabels(const double koef)                { m_label_koef = koef; }
-    void    SetSliderValues(const std::vector<double>& values) { m_values = values; }
+    void    SetSliderValues(const std::vector<double>& values);
     void    ChangeOneLayerLock();
 
     Info   GetTicksValues() const;
@@ -288,6 +288,7 @@ protected:
     void    draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_pos);
     void    draw_thumb(wxDC& dc, const wxCoord& pos_coord, const SelectedSlider& selection);
     void    draw_thumbs(wxDC& dc, const wxCoord& lower_pos, const wxCoord& higher_pos);
+    void    draw_ticks_pair(wxDC& dc, wxCoord pos, wxCoord mid, int tick_len);
     void    draw_ticks(wxDC& dc);
     void    draw_colored_band(wxDC& dc);
     void    draw_ruler(wxDC& dc);
@@ -416,6 +417,15 @@ private:
 
     std::vector<wxPen*> m_line_pens;
     std::vector<wxPen*> m_segm_pens;
+
+    struct Ruler {
+        double long_step;
+        double short_step;
+        int count { 1 }; // > 1 for sequential print
+
+        void update(wxWindow* win, const std::vector<double>& values, double scroll_step);
+        bool is_ok() { return long_step > 0 && short_step > 0; }
+    } m_ruler;
 };
 
 } // DoubleSlider;

From feffb66085e509db244b09ec196d19b5bfe0bba2 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Mon, 16 Nov 2020 22:48:13 +0100
Subject: [PATCH 044/138] Ruler for DoubleSlider: Added estimated print time

---
 src/libslic3r/GCode.cpp                |  2 +-
 src/libslic3r/GCode/GCodeProcessor.cpp |  2 +-
 src/slic3r/GUI/DoubleSlider.cpp        | 15 ++++++++++++---
 src/slic3r/GUI/DoubleSlider.hpp        |  6 ++++--
 src/slic3r/GUI/GUI_Preview.cpp         |  1 +
 5 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 61ef9a1bd..e592466c7 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -1858,7 +1858,7 @@ void GCode::process_layer(
     std::string gcode;
 
     // add tag for processor
-    gcode += "; " + GCodeProcessor::Layer_Change_Tag + "\n";
+    gcode += ";" + GCodeProcessor::Layer_Change_Tag + "\n";
     // export layer z
     char buf[64];
     sprintf(buf, ";Z:%g\n", print_z);
diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index 14bd38a33..4d3e16b47 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -393,7 +393,7 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename)
     auto is_temporary_decoration = [](const std::string& gcode_line) {
         // remove trailing '\n'
         std::string line = gcode_line.substr(0, gcode_line.length() - 1);
-        if (line == "; " + Layer_Change_Tag)
+        if (line == ";" + Layer_Change_Tag)
             return true;
         else
             return false;
diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 40463288e..3f988acf1 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -380,6 +380,13 @@ void Control::SetTicksValues(const Info& custom_gcode_per_print_z)
     Update();
 }
 
+void Control::SetLayersTimes(const std::vector<float>& layers_times)
+{ 
+    m_layers_times = layers_times;
+    for (int i = 1; i < m_layers_times.size(); i++)
+        m_layers_times[i] += m_layers_times[i - 1];
+}
+
 void Control::SetDrawMode(bool is_sla_print, bool is_sequential_print)
 { 
     m_draw_mode = is_sla_print          ? dmSlaPrint            : 
@@ -603,9 +610,11 @@ wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer
     if (m_draw_mode == dmSequentialGCodeView)
         return wxString::Format("%d", static_cast<unsigned int>(m_values[value]));
     else {
-        if (label_type == ltEstimatedTime)
-            // ysFIXME get estimated time for the current tick
-            return "time";
+        if (label_type == ltEstimatedTime) {
+            if (m_values.size() != m_layers_times.size())
+                return "time";
+            return Slic3r::short_time(get_time_dhms(m_layers_times[value]));
+        }
         wxString str = m_values.empty() ?
             wxString::Format("%.*f", 2, m_label_koef * value) :
             wxString::Format("%.*f", 2, m_values[value]);
diff --git a/src/slic3r/GUI/DoubleSlider.hpp b/src/slic3r/GUI/DoubleSlider.hpp
index f6e555934..509f6ce1e 100644
--- a/src/slic3r/GUI/DoubleSlider.hpp
+++ b/src/slic3r/GUI/DoubleSlider.hpp
@@ -222,8 +222,9 @@ public:
     void    SetSliderValues(const std::vector<double>& values);
     void    ChangeOneLayerLock();
 
-    Info   GetTicksValues() const;
-    void   SetTicksValues(const Info &custom_gcode_per_print_z);
+    Info    GetTicksValues() const;
+    void    SetTicksValues(const Info &custom_gcode_per_print_z);
+    void    SetLayersTimes(const std::vector<float>& layers_times);
 
     void    SetDrawMode(bool is_sla_print, bool is_sequential_print);
 #if ENABLE_GCODE_VIEWER
@@ -401,6 +402,7 @@ private:
 
     std::vector<double> m_values;
     TickCodeInfo        m_ticks;
+    std::vector<float>  m_layers_times;
 
     std::vector<std::string>    m_extruder_colors;
 
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index c108f6946..637231aae 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -999,6 +999,7 @@ void Preview::update_layers_slider(const std::vector<double>& layers_z, bool kee
     }
     m_layers_slider->SetSelectionSpan(idx_low, idx_high);
     m_layers_slider->SetTicksValues(ticks_info_from_model);
+    m_layers_slider->SetLayersTimes(m_gcode_result->time_statistics.modes[0].layers_times);
 
     bool sla_print_technology = wxGetApp().plater()->printer_technology() == ptSLA;
     bool sequential_print = wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_bool("complete_objects");

From d0c87eb7ca3b7cc5087ebc3498eaf44f2144491c Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Wed, 18 Nov 2020 14:10:02 +0100
Subject: [PATCH 045/138] Added missing include

---
 src/slic3r/GUI/MainFrame.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index fc0b6c46d..67f7db55f 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -31,6 +31,7 @@
 #include "GLCanvas3D.hpp"
 #include "Plater.hpp"
 #include "../Utils/Process.hpp"
+#include "format.hpp"
 
 #include <fstream>
 #include "GUI_App.hpp"

From c3c2ed3a09a1fdb5feda96869cbc325935bd0c7c Mon Sep 17 00:00:00 2001
From: Guilherme Patriota <guilherme@bi3d.com.br>
Date: Wed, 18 Nov 2020 10:20:41 -0300
Subject: [PATCH 046/138] Atualized pt-br translation for 2.3

---
 resources/localization/pt_br/PrusaSlicer.mo   |  Bin 249894 -> 281511 bytes
 .../localization/pt_br/PrusaSlicer_pt_br.po   | 9127 ++++++++++-------
 2 files changed, 5307 insertions(+), 3820 deletions(-)

diff --git a/resources/localization/pt_br/PrusaSlicer.mo b/resources/localization/pt_br/PrusaSlicer.mo
index 152f1e2a1661d6f93113b41598e7c440037a544a..751860d55b05583bfd9cb52dadd203d70e582bd6 100644
GIT binary patch
delta 77678
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

delta 50055
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
Wh?qn!=x*+-E_62w;%hIP5C0c<At9Im

diff --git a/resources/localization/pt_br/PrusaSlicer_pt_br.po b/resources/localization/pt_br/PrusaSlicer_pt_br.po
index 30b3eb569..f82421a4b 100644
--- a/resources/localization/pt_br/PrusaSlicer_pt_br.po
+++ b/resources/localization/pt_br/PrusaSlicer_pt_br.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-03-05 13:51+0100\n"
-"PO-Revision-Date: 2020-03-11 09:32-0300\n"
+"POT-Creation-Date: 2020-10-19 13:45+0200\n"
+"PO-Revision-Date: 2020-11-18 10:05-0300\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language: pt_BR\n"
@@ -18,16 +18,17 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Generator: Poedit 2.2.4\n"
 
-#: src/slic3r/GUI/AboutDialog.cpp:41 src/slic3r/GUI/AboutDialog.cpp:294
+#: src/slic3r/GUI/AboutDialog.cpp:43 src/slic3r/GUI/AboutDialog.cpp:48
+#: src/slic3r/GUI/AboutDialog.cpp:317
 msgid "Portions copyright"
 msgstr "Direitos autorais das partes"
 
-#: src/slic3r/GUI/AboutDialog.cpp:129 src/slic3r/GUI/AboutDialog.cpp:258
+#: src/slic3r/GUI/AboutDialog.cpp:139 src/slic3r/GUI/AboutDialog.cpp:281
 msgid "Copyright"
 msgstr "Direitos autorais"
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:131
+#: src/slic3r/GUI/AboutDialog.cpp:141
 msgid ""
 "License agreements of all following programs (libraries) are part of "
 "application license agreement"
@@ -35,25 +36,26 @@ msgstr ""
 "Os contratos de licença de todos os seguintes programas (bibliotecas) são "
 "parte do contrato de licença de aplicativo"
 
-#: src/slic3r/GUI/AboutDialog.cpp:201
+#: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215
 #, c-format
 msgid "About %s"
 msgstr "Sobre %s"
 
-#: src/slic3r/GUI/AboutDialog.cpp:233 src/slic3r/GUI/MainFrame.cpp:64
+#: src/slic3r/GUI/AboutDialog.cpp:256 src/slic3r/GUI/GUI_App.cpp:239
+#: src/slic3r/GUI/MainFrame.cpp:164
 msgid "Version"
-msgstr "Versão"
+msgstr "Version"
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:260
+#: src/slic3r/GUI/AboutDialog.cpp:283 src/slic3r/GUI/GUI_App.cpp:244
 msgid "is licensed under the"
 msgstr "está licenciado sobre o(a)"
 
-#: src/slic3r/GUI/AboutDialog.cpp:261
+#: src/slic3r/GUI/AboutDialog.cpp:284 src/slic3r/GUI/GUI_App.cpp:244
 msgid "GNU Affero General Public License, version 3"
 msgstr "Licensa GNU Affero General Public, versão 3"
 
-#: src/slic3r/GUI/AboutDialog.cpp:262
+#: src/slic3r/GUI/AboutDialog.cpp:285
 msgid ""
 "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap "
 "community."
@@ -61,258 +63,253 @@ msgstr ""
 "PrusaSlicer é baseado no Slic3r criado por Alessandro Ranellucci e a "
 "comunidade RepRap."
 
-#: src/slic3r/GUI/AboutDialog.cpp:263
+#: src/slic3r/GUI/AboutDialog.cpp:286
 msgid ""
-"Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, "
-"Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and "
-"numerous others."
+"Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr "
+"Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and numerous "
+"others."
 msgstr ""
-"Contribuições por Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, "
-"Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik e "
-"outros."
+"Contribuições por Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr "
+"Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik e outros."
 
-#: src/slic3r/GUI/AppConfig.cpp:114
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:62
+#, c-format
 msgid ""
-"Error parsing PrusaSlicer config file, it is probably corrupted. Try to "
-"manually delete the file to recover from the error. Your user profiles will "
-"not be affected."
+"%s has encountered an error. It was likely caused by running out of memory. If "
+"you are sure you have enough RAM on your system, this may also be a bug and we "
+"would be glad if you reported it."
 msgstr ""
-"Erro de análise da config do arquivo, ele provavelmente está corrompido. "
-"Tente excluir manualmente o arquivo para recuperar do erro. Seus perfis de "
-"usuário não serão afetados."
+"%s encontrou um erro. Provavelmente foi causado por ficar sem memória. Se você "
+"tem certeza que você tem RAM suficiente em seu sistema, isso também pode ser "
+"um bug e nós estaríamos contentes se você relatou."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:110
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:144
 msgid ""
-"Copying of the temporary G-code to the output G-code failed. Maybe the SD "
-"card is write locked?"
+"Copying of the temporary G-code to the output G-code failed. Maybe the SD card "
+"is write locked?"
 msgstr ""
 "A cópia do G-código provisório G-código falhou na saída. Talvez o cartão SD "
 "está bloqueado para escrita?"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:113
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:147
 msgid ""
 "Copying of the temporary G-code to the output G-code failed. There might be "
 "problem with target device, please try exporting again or using different "
 "device. The corrupted output G-code is at %1%.tmp."
 msgstr ""
 "A cópia do G-code temporário para o G-code de saída falhou. Pode haver "
-"problemas com o dispositivo de destino, por favor tente exportar novamente "
-"ou usar dispositivo diferente. O G-code de saída corrompido está em %1%.tmp."
+"problemas com o dispositivo de destino, por favor tente exportar novamente ou "
+"usar dispositivo diferente. O G-code de saída corrompido está em %1%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:116
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:150
 msgid ""
 "Renaming of the G-code after copying to the selected destination folder has "
 "failed. Current path is %1%.tmp. Please try exporting again."
 msgstr ""
-"A renomeação do G-code após a cópia na pasta de destino selecionada falhou. "
-"O caminho atual é %1%.tmp. Por favor, tente exportar de novo."
+"A renomeação do G-code após a cópia na pasta de destino selecionada falhou. O "
+"caminho atual é %1%.tmp. Por favor, tente exportar de novo."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:119
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:153
 msgid ""
 "Copying of the temporary G-code has finished but the original code at %1% "
 "couldn't be opened during copy check. The output G-code is at %2%.tmp."
 msgstr ""
-"A cópia do código G temporário foi concluída, mas o código original em %1% "
-"não pôde ser aberto durante a verificação de cópia. O código G de saída está "
-"em %2%.tmp."
-
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:122
-msgid ""
-"Copying of the temporary G-code has finished but the exported code couldn't "
-"be opened during copy check. The output G-code is at %1%.tmp."
-msgstr ""
-"A cópia do código G temporário foi concluída, mas o código exportado não "
+"A cópia do código G temporário foi concluída, mas o código original em %1% não "
 "pôde ser aberto durante a verificação de cópia. O código G de saída está em "
-"%1%.tmp."
+"%2%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:129
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:479
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
+msgid ""
+"Copying of the temporary G-code has finished but the exported code couldn't be "
+"opened during copy check. The output G-code is at %1%.tmp."
+msgstr ""
+"A cópia do código G temporário foi concluída, mas o código exportado não pôde "
+"ser aberto durante a verificação de cópia. O código G de saída está em %1%.tmp."
+
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:520
 msgid "Running post-processing scripts"
 msgstr "Aplicando scripts de pós-processamento"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:131
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:165
 msgid "G-code file exported to %1%"
 msgstr "Arquivo G-code exportado para %1%"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:135
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:185
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:170
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:219
 msgid "Slicing complete"
 msgstr "Fatiamento completo"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:181
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:214
 msgid "Masked SLA file exported to %1%"
 msgstr "Arquivo SLA mascarado exportado para %1%"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:223
-#, c-format
-msgid ""
-"%s has encountered an error. It was likely caused by running out of memory. "
-"If you are sure you have enough RAM on your system, this may also be a bug "
-"and we would be glad if you reported it."
-msgstr ""
-"%s encontrou um erro. Provavelmente foi causado por ficar sem memória. Se "
-"você tem certeza que você tem RAM suficiente em seu sistema, isso também "
-"pode ser um bug e nós estaríamos contentes se você relatou."
-
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:481
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:522
 msgid "Copying of the temporary G-code to the output G-code failed"
 msgstr "A cópia do G-código provisório G-código falhou na saída"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:506
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:545
 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
 msgstr "Agendando upload para ` %1%` . Veja a aba -> Print Host Upload Queue"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2060
-msgid "Shape"
-msgstr "Forma"
-
-#: src/slic3r/GUI/BedShapeDialog.cpp:73
-msgid "Rectangular"
-msgstr "Retangular"
-
-#: src/slic3r/GUI/BedShapeDialog.cpp:77
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:160
-#: src/slic3r/GUI/Tab.cpp:2326
+#: src/slic3r/GUI/BedShapeDialog.cpp:93
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:240 src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:2493
 msgid "Size"
 msgstr "Tamanho"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:78
-msgid "Size in X and Y of the rectangular plate."
-msgstr "Tamanho no X e Y na mesa retangular."
-
-#: src/slic3r/GUI/BedShapeDialog.cpp:84
+#: src/slic3r/GUI/BedShapeDialog.cpp:94
 msgid "Origin"
 msgstr "Origem"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:85
+#: src/slic3r/GUI/BedShapeDialog.cpp:95 src/libslic3r/PrintConfig.cpp:745
+msgid "Diameter"
+msgstr "Diâmetro"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:110
+msgid "Size in X and Y of the rectangular plate."
+msgstr "Tamanho no X e Y na mesa retangular."
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:121
 msgid ""
 "Distance of the 0,0 G-code coordinate from the front left corner of the "
 "rectangle."
 msgstr ""
-"Distância do ponto 0,0 da coordenada do G-code do canto esquerdo do "
-"retângulo."
+"Distância do ponto 0,0 da coordenada do G-code do canto esquerdo do retângulo."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:89
-msgid "Circular"
-msgstr "Circular"
-
-#: src/slic3r/GUI/BedShapeDialog.cpp:92 src/slic3r/GUI/ConfigWizard.cpp:218
-#: src/slic3r/GUI/ConfigWizard.cpp:970 src/slic3r/GUI/ConfigWizard.cpp:984
+#: src/slic3r/GUI/BedShapeDialog.cpp:129 src/slic3r/GUI/ConfigWizard.cpp:236
+#: src/slic3r/GUI/ConfigWizard.cpp:1336 src/slic3r/GUI/ConfigWizard.cpp:1350
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:135
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:333
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/GCodeViewer.cpp:2183 src/slic3r/GUI/GCodeViewer.cpp:2189
+#: src/slic3r/GUI/GCodeViewer.cpp:2197 src/slic3r/GUI/GUI_ObjectLayers.cpp:145
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 #: src/slic3r/GUI/WipeTowerDialog.cpp:85 src/libslic3r/PrintConfig.cpp:75
-#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:91
-#: src/libslic3r/PrintConfig.cpp:122 src/libslic3r/PrintConfig.cpp:188
-#: src/libslic3r/PrintConfig.cpp:246 src/libslic3r/PrintConfig.cpp:321
-#: src/libslic3r/PrintConfig.cpp:329 src/libslic3r/PrintConfig.cpp:379
-#: src/libslic3r/PrintConfig.cpp:505 src/libslic3r/PrintConfig.cpp:516
-#: src/libslic3r/PrintConfig.cpp:534 src/libslic3r/PrintConfig.cpp:712
-#: src/libslic3r/PrintConfig.cpp:1231 src/libslic3r/PrintConfig.cpp:1292
-#: src/libslic3r/PrintConfig.cpp:1310 src/libslic3r/PrintConfig.cpp:1328
-#: src/libslic3r/PrintConfig.cpp:1384 src/libslic3r/PrintConfig.cpp:1394
-#: src/libslic3r/PrintConfig.cpp:1516 src/libslic3r/PrintConfig.cpp:1524
-#: src/libslic3r/PrintConfig.cpp:1565 src/libslic3r/PrintConfig.cpp:1573
-#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1591
-#: src/libslic3r/PrintConfig.cpp:1599 src/libslic3r/PrintConfig.cpp:1682
-#: src/libslic3r/PrintConfig.cpp:1914 src/libslic3r/PrintConfig.cpp:1985
-#: src/libslic3r/PrintConfig.cpp:2019 src/libslic3r/PrintConfig.cpp:2147
-#: src/libslic3r/PrintConfig.cpp:2226 src/libslic3r/PrintConfig.cpp:2233
-#: src/libslic3r/PrintConfig.cpp:2240 src/libslic3r/PrintConfig.cpp:2270
-#: src/libslic3r/PrintConfig.cpp:2280 src/libslic3r/PrintConfig.cpp:2290
-#: src/libslic3r/PrintConfig.cpp:2450 src/libslic3r/PrintConfig.cpp:2484
-#: src/libslic3r/PrintConfig.cpp:2623 src/libslic3r/PrintConfig.cpp:2632
-#: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2651
-#: src/libslic3r/PrintConfig.cpp:2705 src/libslic3r/PrintConfig.cpp:2715
-#: src/libslic3r/PrintConfig.cpp:2727 src/libslic3r/PrintConfig.cpp:2747
-#: src/libslic3r/PrintConfig.cpp:2757 src/libslic3r/PrintConfig.cpp:2767
-#: src/libslic3r/PrintConfig.cpp:2785 src/libslic3r/PrintConfig.cpp:2800
-#: src/libslic3r/PrintConfig.cpp:2814 src/libslic3r/PrintConfig.cpp:2825
-#: src/libslic3r/PrintConfig.cpp:2838 src/libslic3r/PrintConfig.cpp:2883
-#: src/libslic3r/PrintConfig.cpp:2893 src/libslic3r/PrintConfig.cpp:2902
-#: src/libslic3r/PrintConfig.cpp:2912 src/libslic3r/PrintConfig.cpp:2928
-#: src/libslic3r/PrintConfig.cpp:2952
+#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:93
+#: src/libslic3r/PrintConfig.cpp:124 src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:280 src/libslic3r/PrintConfig.cpp:355
+#: src/libslic3r/PrintConfig.cpp:363 src/libslic3r/PrintConfig.cpp:413
+#: src/libslic3r/PrintConfig.cpp:541 src/libslic3r/PrintConfig.cpp:552
+#: src/libslic3r/PrintConfig.cpp:570 src/libslic3r/PrintConfig.cpp:748
+#: src/libslic3r/PrintConfig.cpp:1158 src/libslic3r/PrintConfig.cpp:1339
+#: src/libslic3r/PrintConfig.cpp:1400 src/libslic3r/PrintConfig.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:1436 src/libslic3r/PrintConfig.cpp:1492
+#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1624
+#: src/libslic3r/PrintConfig.cpp:1632 src/libslic3r/PrintConfig.cpp:1673
+#: src/libslic3r/PrintConfig.cpp:1681 src/libslic3r/PrintConfig.cpp:1691
+#: src/libslic3r/PrintConfig.cpp:1699 src/libslic3r/PrintConfig.cpp:1707
+#: src/libslic3r/PrintConfig.cpp:1790 src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2127 src/libslic3r/PrintConfig.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:2290 src/libslic3r/PrintConfig.cpp:2369
+#: src/libslic3r/PrintConfig.cpp:2376 src/libslic3r/PrintConfig.cpp:2383
+#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2433 src/libslic3r/PrintConfig.cpp:2593
+#: src/libslic3r/PrintConfig.cpp:2627 src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2784
+#: src/libslic3r/PrintConfig.cpp:2794 src/libslic3r/PrintConfig.cpp:2859
+#: src/libslic3r/PrintConfig.cpp:2869 src/libslic3r/PrintConfig.cpp:2881
+#: src/libslic3r/PrintConfig.cpp:2901 src/libslic3r/PrintConfig.cpp:2911
+#: src/libslic3r/PrintConfig.cpp:2921 src/libslic3r/PrintConfig.cpp:2939
+#: src/libslic3r/PrintConfig.cpp:2954 src/libslic3r/PrintConfig.cpp:2968
+#: src/libslic3r/PrintConfig.cpp:2979 src/libslic3r/PrintConfig.cpp:2992
+#: src/libslic3r/PrintConfig.cpp:3037 src/libslic3r/PrintConfig.cpp:3047
+#: src/libslic3r/PrintConfig.cpp:3056 src/libslic3r/PrintConfig.cpp:3066
+#: src/libslic3r/PrintConfig.cpp:3082 src/libslic3r/PrintConfig.cpp:3106
 msgid "mm"
 msgstr "mm"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:93 src/libslic3r/PrintConfig.cpp:709
-msgid "Diameter"
-msgstr "Diâmetro"
-
-#: src/slic3r/GUI/BedShapeDialog.cpp:94
+#: src/slic3r/GUI/BedShapeDialog.cpp:131
 msgid ""
 "Diameter of the print bed. It is assumed that origin (0,0) is located in the "
 "center."
 msgstr ""
-"Diâmetro da mesa de impressão. Se assume que a origem (0,0) seja localizado "
-"no centro."
+"Diâmetro da mesa de impressão. Se assume que a origem (0,0) seja localizado no "
+"centro."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:98 src/slic3r/GUI/GUI_Preview.cpp:249
-#: src/libslic3r/ExtrusionEntity.cpp:322
+#: src/slic3r/GUI/BedShapeDialog.cpp:141
+msgid "Rectangular"
+msgstr "Retangular"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:142
+msgid "Circular"
+msgstr "Circular"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:143 src/slic3r/GUI/GUI_Preview.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:327 src/libslic3r/ExtrusionEntity.cpp:362
 msgid "Custom"
 msgstr "Customizado"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:102
+#: src/slic3r/GUI/BedShapeDialog.cpp:145
+msgid "Invalid"
+msgstr "Inválido"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:156 src/slic3r/GUI/BedShapeDialog.cpp:222
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2215
+msgid "Shape"
+msgstr "Forma"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:243
 msgid "Load shape from STL..."
 msgstr "Carregar forma do STL..."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:155
+#: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/MainFrame.cpp:1969
 msgid "Settings"
-msgstr "Config."
+msgstr "Config"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:172
+#: src/slic3r/GUI/BedShapeDialog.cpp:315
 msgid "Texture"
 msgstr "Textura"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:182 src/slic3r/GUI/BedShapeDialog.cpp:261
+#: src/slic3r/GUI/BedShapeDialog.cpp:325 src/slic3r/GUI/BedShapeDialog.cpp:405
 msgid "Load..."
 msgstr "Carregar..."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:190 src/slic3r/GUI/BedShapeDialog.cpp:269
-#: src/slic3r/GUI/Tab.cpp:3126
+#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/BedShapeDialog.cpp:413
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Remove"
 msgstr "Remover"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:223 src/slic3r/GUI/BedShapeDialog.cpp:302
+#: src/slic3r/GUI/BedShapeDialog.cpp:366 src/slic3r/GUI/BedShapeDialog.cpp:446
 msgid "Not found:"
 msgstr "Não encontrado:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:251
+#: src/slic3r/GUI/BedShapeDialog.cpp:395
 msgid "Model"
 msgstr "Modelo"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:487
+#: src/slic3r/GUI/BedShapeDialog.cpp:563
 msgid "Choose an STL file to import bed shape from:"
 msgstr "Escolha um arquivo STL para importar o formato da mesa:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:494 src/slic3r/GUI/BedShapeDialog.cpp:543
-#: src/slic3r/GUI/BedShapeDialog.cpp:566
+#: src/slic3r/GUI/BedShapeDialog.cpp:570 src/slic3r/GUI/BedShapeDialog.cpp:619
+#: src/slic3r/GUI/BedShapeDialog.cpp:642
 msgid "Invalid file format."
 msgstr "Formato de arquivo inválido."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:505
+#: src/slic3r/GUI/BedShapeDialog.cpp:581
 msgid "Error! Invalid model"
 msgstr "Erro! Modelo inválido"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:513
+#: src/slic3r/GUI/BedShapeDialog.cpp:589
 msgid "The selected file contains no geometry."
 msgstr "O arquivo selecionado não contém geometria."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:517
-msgid ""
-"The selected file contains several disjoint areas. This is not supported."
+#: src/slic3r/GUI/BedShapeDialog.cpp:593
+msgid "The selected file contains several disjoint areas. This is not supported."
 msgstr "O arquivo selecionado contém áreas não juntas. Isso não é suportado."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:532
+#: src/slic3r/GUI/BedShapeDialog.cpp:608
 msgid "Choose a file to import bed texture from (PNG/SVG):"
 msgstr "Escolher um arquivo para importar a textura da mesa (PNG/SVG):"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:555
+#: src/slic3r/GUI/BedShapeDialog.cpp:631
 msgid "Choose an STL file to import bed model from:"
 msgstr "Escolha um arquivo STL para importar o modelo da mesa:"
 
-#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/BedShapeDialog.hpp:98 src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape"
 msgstr "Formato da mesa"
 
@@ -354,13 +351,11 @@ msgstr "O valor é o mesmo que o valor do sistema"
 
 #: src/slic3r/GUI/ButtonsDescription.cpp:53
 msgid ""
-"Value was changed and is not equal to the system value or the last saved "
-"preset"
+"Value was changed and is not equal to the system value or the last saved preset"
 msgstr ""
-"O valor foi mudado e não é igual ao valor do sistema ou da última config. "
-"salva"
+"O valor foi mudado e não é igual ao valor do sistema ou da última config. salva"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/ConfigManipulation.cpp:47
 msgid ""
 "Zero layer height is not valid.\n"
 "\n"
@@ -370,13 +365,13 @@ msgstr ""
 "\n"
 "A altura da camada será redefinida para 0.01."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:49
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1048
+#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 src/slic3r/GUI/Tab.cpp:1371
 #: src/libslic3r/PrintConfig.cpp:71
 msgid "Layer height"
 msgstr "Altura da camada"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:60
+#: src/slic3r/GUI/ConfigManipulation.cpp:59
 msgid ""
 "Zero first layer height is not valid.\n"
 "\n"
@@ -386,12 +381,12 @@ msgstr ""
 "\n"
 "A altura da primeira camada será redefinida para 0.01."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:61 src/libslic3r/PrintConfig.cpp:889
+#: src/slic3r/GUI/ConfigManipulation.cpp:60 src/libslic3r/PrintConfig.cpp:931
 msgid "First layer height"
 msgstr "Altura da primeira camada"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:81
-#, no-c-format
+#: src/slic3r/GUI/ConfigManipulation.cpp:80
+#, c-format
 msgid ""
 "The Spiral Vase mode requires:\n"
 "- one perimeter\n"
@@ -404,20 +399,20 @@ msgstr ""
 "O modo Vaso Espiral requer:\n"
 "- um perímetro\n"
 "- sem camadas sólidas superiores\n"
-"- 0% de densidade de enchimento\n"
+"- 0% fdensidade de enchimento 0\n"
 "- nenhum material de suporte\n"
 "- habilitar opção Garantir a espessura da casca vertical\n"
 "- desativar opção Detectar paredes finas"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:89
+#: src/slic3r/GUI/ConfigManipulation.cpp:88
 msgid "Shall I adjust those settings in order to enable Spiral Vase?"
 msgstr "Devo ajustar essas configurações para habilitar o Vaso Espiral?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:90
+#: src/slic3r/GUI/ConfigManipulation.cpp:89
 msgid "Spiral Vase"
 msgstr "Vaso espiral"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:115
+#: src/slic3r/GUI/ConfigManipulation.cpp:114
 msgid ""
 "The Wipe Tower currently supports the non-soluble supports only\n"
 "if they are printed with the current extruder without triggering a tool "
@@ -431,16 +426,16 @@ msgstr ""
 "(ambos support_material_extruder e support_material_interface_extruder "
 "precisam ser definidos como 0)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:118
 msgid "Shall I adjust those settings in order to enable the Wipe Tower?"
 msgstr "Devo ajustar essas configurações para ativar a Torre limpa?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:120
-#: src/slic3r/GUI/ConfigManipulation.cpp:140
+#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:139
 msgid "Wipe Tower"
 msgstr "Torre de limpeza"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:136
+#: src/slic3r/GUI/ConfigManipulation.cpp:135
 msgid ""
 "For the Wipe Tower to work with the soluble supports, the support layers\n"
 "need to be synchronized with the object layers."
@@ -448,11 +443,11 @@ msgstr ""
 "Para que a torre de limpeza funcione com os suportes solúveis, as camadas de "
 "suporte precisam ser sincronizadas com as camadas de objeto."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:139
+#: src/slic3r/GUI/ConfigManipulation.cpp:138
 msgid "Shall I synchronize support layers in order to enable the Wipe Tower?"
 msgstr "Devo sincronizar camadas de suporte para habilitar a Torre Limpa?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:159
+#: src/slic3r/GUI/ConfigManipulation.cpp:158
 msgid ""
 "Supports work better, if the following feature is enabled:\n"
 "- Detect bridging perimeters"
@@ -460,51 +455,48 @@ msgstr ""
 "Os suportes funcionam melhor, se o seguinte recurso estiver ativado:\n"
 "- Detectar perímetros de ponte"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:162
+#: src/slic3r/GUI/ConfigManipulation.cpp:161
 msgid "Shall I adjust those settings for supports?"
 msgstr "Devo ajustar essas configurações para suportes?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:163
+#: src/slic3r/GUI/ConfigManipulation.cpp:162
 msgid "Support Generator"
 msgstr "Gerador de suporte"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:208
+#: src/slic3r/GUI/ConfigManipulation.cpp:207
 msgid "The %1% infill pattern is not supposed to work at 100%% density."
-msgstr ""
-"O padrão de preenchimento %1% não deve funcionar com 100%% de densidade."
+msgstr "O padrão de preenchimento %1% não deve funcionar com 100%% de densidade."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/ConfigManipulation.cpp:209
 msgid "Shall I switch to rectilinear fill pattern?"
 msgstr "Devo mudar para padrão de preenchimento retilíneo?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:211
-#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96
-#: src/slic3r/GUI/GUI_ObjectList.cpp:615 src/slic3r/GUI/Plater.cpp:527
-#: src/slic3r/GUI/Tab.cpp:1090 src/slic3r/GUI/Tab.cpp:1091
-#: src/libslic3r/PrintConfig.cpp:203 src/libslic3r/PrintConfig.cpp:416
-#: src/libslic3r/PrintConfig.cpp:436 src/libslic3r/PrintConfig.cpp:776
-#: src/libslic3r/PrintConfig.cpp:790 src/libslic3r/PrintConfig.cpp:827
-#: src/libslic3r/PrintConfig.cpp:981 src/libslic3r/PrintConfig.cpp:991
-#: src/libslic3r/PrintConfig.cpp:1009 src/libslic3r/PrintConfig.cpp:1028
-#: src/libslic3r/PrintConfig.cpp:1047 src/libslic3r/PrintConfig.cpp:1728
-#: src/libslic3r/PrintConfig.cpp:1745
+#: src/slic3r/GUI/ConfigManipulation.cpp:210 src/slic3r/GUI/GUI_ObjectList.cpp:35
+#: src/slic3r/GUI/GUI_ObjectList.cpp:93 src/slic3r/GUI/GUI_ObjectList.cpp:652
+#: src/slic3r/GUI/Plater.cpp:393 src/slic3r/GUI/Tab.cpp:1413
+#: src/slic3r/GUI/Tab.cpp:1414 src/libslic3r/PrintConfig.cpp:237
+#: src/libslic3r/PrintConfig.cpp:450 src/libslic3r/PrintConfig.cpp:472
+#: src/libslic3r/PrintConfig.cpp:812 src/libslic3r/PrintConfig.cpp:826
+#: src/libslic3r/PrintConfig.cpp:863 src/libslic3r/PrintConfig.cpp:1025
+#: src/libslic3r/PrintConfig.cpp:1035 src/libslic3r/PrintConfig.cpp:1053
+#: src/libslic3r/PrintConfig.cpp:1072 src/libslic3r/PrintConfig.cpp:1091
+#: src/libslic3r/PrintConfig.cpp:1843 src/libslic3r/PrintConfig.cpp:1860
 msgid "Infill"
 msgstr "Preenchimento"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:317
+#: src/slic3r/GUI/ConfigManipulation.cpp:322
 msgid "Head penetration should not be greater than the head width."
 msgstr "A penetração da cabeça não deve ser maior do que a largura da cabeça."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:319
+#: src/slic3r/GUI/ConfigManipulation.cpp:324
 msgid "Invalid Head penetration"
 msgstr "Penetração inválida da cabeça"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:330
+#: src/slic3r/GUI/ConfigManipulation.cpp:335
 msgid "Pinhead diameter should be smaller than the pillar diameter."
-msgstr ""
-"O diâmetro da cabeça de pino deve ser menor do que o diâmetro do pilar."
+msgstr "O diâmetro da cabeça de pino deve ser menor do que o diâmetro do pilar."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:332
+#: src/slic3r/GUI/ConfigManipulation.cpp:337
 msgid "Invalid pinhead diameter"
 msgstr "Diâmetro inválido da cabeça de pino"
 
@@ -520,11 +512,12 @@ msgstr "Desatualização"
 msgid "Before roll back"
 msgstr "Antes de reverter"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 src/libslic3r/PrintConfig.cpp:132
 msgid "User"
 msgstr "Usuário"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27 src/slic3r/GUI/GUI_Preview.cpp:299
+#: src/libslic3r/ExtrusionEntity.cpp:310
 msgid "Unknown"
 msgstr "Desconhecido"
 
@@ -536,7 +529,7 @@ msgstr "Ativar"
 msgid "PrusaSlicer version"
 msgstr "Versão do PrusaSlicer"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1533
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/libslic3r/Preset.cpp:1300
 msgid "print"
 msgstr "impressão"
 
@@ -544,11 +537,11 @@ msgstr "impressão"
 msgid "filaments"
 msgstr "filamentos"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1537
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/libslic3r/Preset.cpp:1304
 msgid "printer"
 msgstr "impressora"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:970
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1289
 msgid "vendor"
 msgstr "fornecedor"
 
@@ -585,139 +578,162 @@ msgstr "Ativar"
 msgid "Configuration Snapshots"
 msgstr "Config. das versões"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:218
+#: src/slic3r/GUI/ConfigWizard.cpp:236
 msgid "nozzle"
 msgstr "bico de impressão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:222
+#: src/slic3r/GUI/ConfigWizard.cpp:240
 msgid "Alternate nozzles:"
 msgstr "Alternar bicos:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "All standard"
 msgstr "Todos padrão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "Standard"
 msgstr "Todos padrão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:290 src/slic3r/GUI/ConfigWizard.cpp:573
-#: src/slic3r/GUI/Tab.cpp:3176
+#: src/slic3r/GUI/ConfigWizard.cpp:308 src/slic3r/GUI/ConfigWizard.cpp:598
+#: src/slic3r/GUI/Tab.cpp:3507 src/slic3r/GUI/UnsavedChangesDialog.cpp:921
 msgid "All"
 msgstr "Todos"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:291 src/slic3r/GUI/ConfigWizard.cpp:574
-#: src/slic3r/GUI/Plater.cpp:499 src/slic3r/GUI/Plater.cpp:639
-#: src/libslic3r/ExtrusionEntity.cpp:309
+#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/ConfigWizard.cpp:599
+#: src/slic3r/GUI/Plater.cpp:365 src/slic3r/GUI/Plater.cpp:505
+#: src/libslic3r/ExtrusionEntity.cpp:312
 msgid "None"
 msgstr "Nenhum"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:427
+#: src/slic3r/GUI/ConfigWizard.cpp:445
 #, c-format
 msgid "Welcome to the %s Configuration Assistant"
-msgstr "Bem-vindo ao  %s Assistente de config."
+msgstr "Bem-vindo ao  %s Assistente de config"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:429
+#: src/slic3r/GUI/ConfigWizard.cpp:447
 #, c-format
 msgid "Welcome to the %s Configuration Wizard"
-msgstr "Bem-vindo ao  %s Assistente de config."
+msgstr "Bem-vindo ao  %s Assistente de config"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:431
+#: src/slic3r/GUI/ConfigWizard.cpp:449
 msgid "Welcome"
 msgstr "Bem-vindo(a)"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:433
+#: src/slic3r/GUI/ConfigWizard.cpp:451
 #, c-format
 msgid ""
-"Hello, welcome to %s! This %s helps you with the initial configuration; just "
-"a few settings and you will be ready to print."
+"Hello, welcome to %s! This %s helps you with the initial configuration; just a "
+"few settings and you will be ready to print."
 msgstr ""
 "Olá, bem-vindo  ao %s! Isso %s te ajuda com a config. inicial; com apenas "
 "algumas config. e você estará pronto para imprimir."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:438
-msgid ""
-"Remove user profiles - install from scratch (a snapshot will be taken "
-"beforehand)"
+#: src/slic3r/GUI/ConfigWizard.cpp:456
+msgid "Remove user profiles (a snapshot will be taken beforehand)"
 msgstr ""
 "Remover perfis de usuário - instalar do zero (uma snapshot será salva antes)"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:481
+#: src/slic3r/GUI/ConfigWizard.cpp:499
 #, c-format
 msgid "%s Family"
 msgstr "%s Família"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:565
+#: src/slic3r/GUI/ConfigWizard.cpp:587
+msgid "Printer:"
+msgstr "Impressora:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:589
 msgid "Vendor:"
 msgstr "Fornecedor:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:566
+#: src/slic3r/GUI/ConfigWizard.cpp:590
 msgid "Profile:"
 msgstr "Perfil:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:603 src/slic3r/GUI/ConfigWizard.cpp:631
+#: src/slic3r/GUI/ConfigWizard.cpp:662 src/slic3r/GUI/ConfigWizard.cpp:812
+#: src/slic3r/GUI/ConfigWizard.cpp:873 src/slic3r/GUI/ConfigWizard.cpp:1007
 msgid "(All)"
 msgstr "(Todos)"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/ConfigWizard.cpp:691
+msgid ""
+"Filaments marked with <b>*</b> are <b>not</b> compatible with some installed "
+"printers."
+msgstr ""
+"Filamentos marcados com <b>*</b> são <b>incompatíveis</b> com algumas "
+"impressoras instaladas."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:694
+msgid "All installed printers are compatible with the selected filament."
+msgstr ""
+"Todas as impressoras instaladas são compatíveis com o filamento selecionado."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:714
+msgid ""
+"Only the following installed printers are compatible with the selected "
+"filament:"
+msgstr ""
+"Somente as seguintes impressoras instaladas são compatíveis com o filamento "
+"selecionado:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer Setup"
 msgstr "Config. da impressora customizada"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer"
 msgstr "Impressora customizada"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:734
+#: src/slic3r/GUI/ConfigWizard.cpp:1093
 msgid "Define a custom printer profile"
 msgstr "Definir uma config. para a impressora customizada"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:736
+#: src/slic3r/GUI/ConfigWizard.cpp:1095
 msgid "Custom profile name:"
 msgstr "Nome customizado da config.:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Automatic updates"
 msgstr "Atualizações automáticas"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Updates"
 msgstr "Atualizações"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:769 src/slic3r/GUI/Preferences.cpp:64
+#: src/slic3r/GUI/ConfigWizard.cpp:1128 src/slic3r/GUI/Preferences.cpp:81
 msgid "Check for application updates"
 msgstr "Verificar atualizações nas aplicações"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:773
+#: src/slic3r/GUI/ConfigWizard.cpp:1132
 #, c-format
 msgid ""
-"If enabled, %s checks for new application versions online. When a new "
-"version becomes available, a notification is displayed at the next "
-"application startup (never during program usage). This is only a "
-"notification mechanisms, no automatic installation is done."
+"If enabled, %s checks for new application versions online. When a new version "
+"becomes available, a notification is displayed at the next application startup "
+"(never during program usage). This is only a notification mechanisms, no "
+"automatic installation is done."
 msgstr ""
 "Se ativada, %s verifica se há novas versões do aplicativo online. Quando uma "
 "nova versão se torna disponível, uma notificação é exibida na próxima "
 "inicialização do aplicativo (nunca durante o uso do programa). Este é apenas "
 "um mecanismos de notificação, nenhuma instalação automática é feita."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:779 src/slic3r/GUI/Preferences.cpp:80
+#: src/slic3r/GUI/ConfigWizard.cpp:1138 src/slic3r/GUI/Preferences.cpp:97
 msgid "Update built-in Presets automatically"
 msgstr "Atualizar predefinições incorporadas automaticamente"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:783
+#: src/slic3r/GUI/ConfigWizard.cpp:1142
 #, c-format
 msgid ""
-"If enabled, %s downloads updates of built-in system presets in the "
-"background.These updates are downloaded into a separate temporary location."
-"When a new preset version becomes available it is offered at application "
-"startup."
+"If enabled, %s downloads updates of built-in system presets in the background."
+"These updates are downloaded into a separate temporary location.When a new "
+"preset version becomes available it is offered at application startup."
 msgstr ""
-"Se ativada, %s baixa atualizações de predefinições de sistema incorporadas "
-"em segundo plano. Essas atualizações são baixadas em um local temporário "
+"Se ativada, %s baixa atualizações de predefinições de sistema incorporadas em "
+"segundo plano. Essas atualizações são baixadas em um local temporário "
 "separado. Quando uma nova versão predefinida se torna disponível, ela é "
 "oferecida na inicialização do aplicativo."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:786
+#: src/slic3r/GUI/ConfigWizard.cpp:1145
 msgid ""
 "Updates are never applied without user's consent and never overwrite user's "
 "customized settings."
@@ -725,49 +741,48 @@ msgstr ""
 "Atualizações nunca são aplicadas sem a permissão do usuário e nunca sobre "
 "escrevem as config. do usuário."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:791
+#: src/slic3r/GUI/ConfigWizard.cpp:1150
 msgid ""
-"Additionally a backup snapshot of the whole configuration is created before "
-"an update is applied."
+"Additionally a backup snapshot of the whole configuration is created before an "
+"update is applied."
 msgstr ""
 "Além disso, uma captura de backup de toda a config. é criado antes que uma "
 "atualização seja aplicada."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:798 src/slic3r/GUI/GUI_ObjectList.cpp:1665
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3957 src/slic3r/GUI/Plater.cpp:3227
-#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3965
+#: src/slic3r/GUI/ConfigWizard.cpp:1157 src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3028
+#: src/slic3r/GUI/Plater.cpp:3852 src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload from disk"
 msgstr "Recarregar a partir do disco"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:801
-msgid ""
-"Export full pathnames of models and parts sources into 3mf and amf files"
+#: src/slic3r/GUI/ConfigWizard.cpp:1160
+msgid "Export full pathnames of models and parts sources into 3mf and amf files"
 msgstr ""
 "Exportar nomes completos de modelos e fontes de peças para arquivos 3mf e amf"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:805
+#: src/slic3r/GUI/ConfigWizard.cpp:1164
 msgid ""
-"If enabled, allows the Reload from disk command to automatically find and "
-"load the files when invoked.\n"
+"If enabled, allows the Reload from disk command to automatically find and load "
+"the files when invoked.\n"
 "If not enabled, the Reload from disk command will ask to select each file "
 "using an open file dialog."
 msgstr ""
 "Se ativado, permite que o comando Recarregar a partir do disco encontre e "
 "carregue automaticamente os arquivos quando invocado.\n"
-"Se não estiver habilitado, o comando Recarregar a partir do disco pedirá "
-"para selecionar cada arquivo usando uma caixa de diálogo de arquivo aberto."
+"Se não estiver habilitado, o comando Recarregar a partir do disco pedirá para "
+"selecionar cada arquivo usando uma caixa de diálogo de arquivo aberto."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:813
+#: src/slic3r/GUI/ConfigWizard.cpp:1172
 msgid "View mode"
 msgstr "Modo de visualização"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:815
+#: src/slic3r/GUI/ConfigWizard.cpp:1174
 msgid ""
 "PrusaSlicer's user interfaces comes in three variants:\n"
 "Simple, Advanced, and Expert.\n"
 "The Simple mode shows only the most frequently used settings relevant for "
-"regular 3D printing. The other two offer progressively more sophisticated "
-"fine-tuning, they are suitable for advanced and expert users, respectively."
+"regular 3D printing. The other two offer progressively more sophisticated fine-"
+"tuning, they are suitable for advanced and expert users, respectively."
 msgstr ""
 "As interfaces de usuário do PrusaSlicer vêm em três variantes:\n"
 "Simples, Avançado e Especialista.\n"
@@ -776,104 +791,114 @@ msgstr ""
 "sofisticados, são adequados para usuários avançados e experientes, "
 "respectivamente."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:820
+#: src/slic3r/GUI/ConfigWizard.cpp:1179
 msgid "Simple mode"
 msgstr "Modo simples"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:821
+#: src/slic3r/GUI/ConfigWizard.cpp:1180
 msgid "Advanced mode"
 msgstr "Modo avançado"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:822
+#: src/slic3r/GUI/ConfigWizard.cpp:1181
 msgid "Expert mode"
 msgstr "Modo especialista"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:856
+#: src/slic3r/GUI/ConfigWizard.cpp:1187
+msgid "The size of the object can be specified in inches"
+msgstr "O tamanho do objeto pode ser especificado em polegadas"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1188
+msgid "Use inches"
+msgstr "Usar polegadas"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1222
 msgid "Other Vendors"
 msgstr "Outros fornecedores"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:860
+#: src/slic3r/GUI/ConfigWizard.cpp:1226
 #, c-format
 msgid "Pick another vendor supported by %s"
 msgstr "Escolha outro fornecedor suportado por %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891
+#: src/slic3r/GUI/ConfigWizard.cpp:1257
 msgid "Firmware Type"
 msgstr "Tipo de Firmware"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891 src/slic3r/GUI/Tab.cpp:1949
+#: src/slic3r/GUI/ConfigWizard.cpp:1257 src/slic3r/GUI/Tab.cpp:2132
 msgid "Firmware"
 msgstr "Firmware"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:895
+#: src/slic3r/GUI/ConfigWizard.cpp:1261
 msgid "Choose the type of firmware used by your printer."
 msgstr "Escolha o tipo de firmware utilizado na sua impressora."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape and Size"
 msgstr "Forma e tamanho da mesa"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:932
+#: src/slic3r/GUI/ConfigWizard.cpp:1298
 msgid "Set the shape of your printer's bed."
 msgstr "Insira o formato da mesa de impressão."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Filament and Nozzle Diameters"
 msgstr "Diâmetro do bico e do filamento"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Print Diameters"
 msgstr "Diâmetros de impressão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:966
+#: src/slic3r/GUI/ConfigWizard.cpp:1332
 msgid "Enter the diameter of your printer's hot end nozzle."
 msgstr "Insira o diâmetro do bico de impressão."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:969
+#: src/slic3r/GUI/ConfigWizard.cpp:1335
 msgid "Nozzle Diameter:"
 msgstr "Diâmetro do bico:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:979
+#: src/slic3r/GUI/ConfigWizard.cpp:1345
 msgid "Enter the diameter of your filament."
 msgstr "Coloque o diâmetro do seu filamento."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:980
+#: src/slic3r/GUI/ConfigWizard.cpp:1346
 msgid ""
 "Good precision is required, so use a caliper and do multiple measurements "
 "along the filament, then compute the average."
 msgstr ""
-"É necessário uma boa precisão, utilize um paquímetro e realize várias "
-"medições ao longo do filamento, faça uma média."
+"É necessário uma boa precisão, utilize um paquímetro e realize várias medições "
+"ao longo do filamento, faça uma média."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:983
+#: src/slic3r/GUI/ConfigWizard.cpp:1349
 msgid "Filament Diameter:"
 msgstr "Diâmetro do filamento:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
+#: src/slic3r/GUI/ConfigWizard.cpp:1383
 msgid "Extruder and Bed Temperatures"
 msgstr "Temperaturas da mesa e da extrusora"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
+#: src/slic3r/GUI/ConfigWizard.cpp:1383
 msgid "Temperatures"
 msgstr "Temperaturas"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1033
+#: src/slic3r/GUI/ConfigWizard.cpp:1399
 msgid "Enter the temperature needed for extruding your filament."
 msgstr "Coloque a temperatura necessária para extrusar seu filamento."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1034
+#: src/slic3r/GUI/ConfigWizard.cpp:1400
 msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
 msgstr "A regra de ouro é 160 à 230°C para PLA, e 215 à 250°C para ABS."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1037
+#: src/slic3r/GUI/ConfigWizard.cpp:1403
 msgid "Extrusion Temperature:"
 msgstr "Temperatura de extrusão:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1038 src/slic3r/GUI/ConfigWizard.cpp:1052
+#: src/slic3r/GUI/ConfigWizard.cpp:1404 src/slic3r/GUI/ConfigWizard.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:180 src/libslic3r/PrintConfig.cpp:912
+#: src/libslic3r/PrintConfig.cpp:956 src/libslic3r/PrintConfig.cpp:2209
 msgid "°C"
 msgstr "°C"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1047
+#: src/slic3r/GUI/ConfigWizard.cpp:1413
 msgid ""
 "Enter the bed temperature needed for getting your filament to stick to your "
 "heated bed."
@@ -881,156 +906,157 @@ msgstr ""
 "Coloque a temperatura da mesa necessária para fazer com que seu filamento "
 "grude na mesa."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1048
+#: src/slic3r/GUI/ConfigWizard.cpp:1414
 msgid ""
-"A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have "
-"no heated bed."
+"A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have no "
+"heated bed."
 msgstr ""
 "A regra de ouro é 60°C para PLA, e 110°C para ABS. Deixe em zero se não há "
 "mesa aquecida."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1051
+#: src/slic3r/GUI/ConfigWizard.cpp:1417
 msgid "Bed Temperature:"
 msgstr "Temperatura da mesa:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filaments"
 msgstr "Filamentos"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Materials"
 msgstr "Materiais"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1525
+#: src/slic3r/GUI/ConfigWizard.cpp:1926
 msgid "FFF Technology Printers"
 msgstr "Impressoras de tecnologia Prusa FFF"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1530
+#: src/slic3r/GUI/ConfigWizard.cpp:1931
 msgid "SLA Technology Printers"
 msgstr "Impressoras de tecnologia SLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1751 src/slic3r/GUI/DoubleSlider.cpp:1905
-#: src/slic3r/GUI/DoubleSlider.cpp:1926 src/slic3r/GUI/GUI.cpp:246
+#: src/slic3r/GUI/ConfigWizard.cpp:2237 src/slic3r/GUI/DoubleSlider.cpp:2124
+#: src/slic3r/GUI/DoubleSlider.cpp:2144 src/slic3r/GUI/GUI.cpp:244
 msgid "Notice"
 msgstr "Aviso"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1760
-msgid "You have to select at least one filament for selected printers"
-msgstr ""
-"Você tem que selecionar pelo menos um filamento para impressoras selecionadas"
+#: src/slic3r/GUI/ConfigWizard.cpp:2257
+msgid "The following FFF printer models have no filament selected:"
+msgstr "Os seguintes caracteres não são permitidos:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1761
-msgid "Do you want to automatic select default filaments?"
+#: src/slic3r/GUI/ConfigWizard.cpp:2261
+msgid "Do you want to select default filaments for these FFF printer models?"
 msgstr "Deseja selecionar filamentos padrão automáticos?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1771
-msgid "You have to select at least one material for selected printers"
-msgstr ""
-"Você tem que selecionar pelo menos um material para impressoras selecionadas"
+#: src/slic3r/GUI/ConfigWizard.cpp:2275
+msgid "The following SLA printer models have no materials selected:"
+msgstr "Os seguintes caracteres não são permitidos:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1772
-msgid "Do you want to automatic select default materials?"
+#: src/slic3r/GUI/ConfigWizard.cpp:2279
+msgid "Do you want to select default SLA materials for these printer models?"
 msgstr "Deseja selecionar automaticamente materiais padrão?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1976
+#: src/slic3r/GUI/ConfigWizard.cpp:2487
 msgid "Select all standard printers"
 msgstr "Selecione todas as impressoras padrão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1979
+#: src/slic3r/GUI/ConfigWizard.cpp:2490
 msgid "< &Back"
 msgstr "< &Voltar"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1980
+#: src/slic3r/GUI/ConfigWizard.cpp:2491
 msgid "&Next >"
 msgstr "&Próximo >"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1981
+#: src/slic3r/GUI/ConfigWizard.cpp:2492
 msgid "&Finish"
 msgstr "&Final"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1982 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/ConfigWizard.cpp:2493 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:245
 #: src/slic3r/GUI/ProgressStatusBar.cpp:26
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:644
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1995
+#: src/slic3r/GUI/ConfigWizard.cpp:2506
 msgid "Prusa FFF Technology Printers"
 msgstr "Impressoras de tecnologia Prusa FFF"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1998
+#: src/slic3r/GUI/ConfigWizard.cpp:2509
 msgid "Prusa MSLA Technology Printers"
 msgstr "Impressoras de tecnologia Prusa MSLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filament Profiles Selection"
 msgstr "Seleção de Perfis de Filamento"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013 src/slic3r/GUI/GUI_ObjectList.cpp:3554
+#: src/slic3r/GUI/ConfigWizard.cpp:2524 src/slic3r/GUI/ConfigWizard.cpp:2526
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Type:"
 msgstr "Tipo:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Material Profiles Selection"
 msgstr "Perfil de material SLA padrão"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
-msgid "Layer height:"
-msgstr "Altura da camada:"
-
-#: src/slic3r/GUI/ConfigWizard.cpp:2109
+#: src/slic3r/GUI/ConfigWizard.cpp:2624
 msgid "Configuration Assistant"
-msgstr "Assistente de config."
+msgstr "Assistente de config"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2110
+#: src/slic3r/GUI/ConfigWizard.cpp:2625
 msgid "Configuration &Assistant"
-msgstr "Assistente &de config."
+msgstr "Assistente &de config"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2112
+#: src/slic3r/GUI/ConfigWizard.cpp:2627
 msgid "Configuration Wizard"
-msgstr "Assistente de config."
+msgstr "Assistente de config"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2113
+#: src/slic3r/GUI/ConfigWizard.cpp:2628
 msgid "Configuration &Wizard"
-msgstr "Assistente &de config."
+msgstr "Assistente &de config"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:79
+#: src/slic3r/GUI/DoubleSlider.cpp:110
 msgid "Place bearings in slots and resume printing"
 msgstr "Coloque rolamentos em ranhuras e retome a impressão"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:950
+#: src/slic3r/GUI/DoubleSlider.cpp:1064
 msgid "One layer mode"
 msgstr "Modo de uma camada"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:952
+#: src/slic3r/GUI/DoubleSlider.cpp:1066
 msgid "Discard all custom changes"
 msgstr "Descarte todas as alterações personalizadas"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:955
+#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
+msgid "Jump to move"
+msgstr "Pule para movimento"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1075
 #, c-format
 msgid "Jump to height %s or Set extruder sequence for the entire print"
 msgstr ""
 "Pule para altura %s ou Definir seqüência de extrusora para toda a impressão"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:957 src/slic3r/GUI/DoubleSlider.cpp:1529
-#: src/slic3r/GUI/DoubleSlider.cpp:1651
+#: src/slic3r/GUI/DoubleSlider.cpp:1077 src/slic3r/GUI/DoubleSlider.cpp:1721
+#: src/slic3r/GUI/DoubleSlider.cpp:1852 src/slic3r/GUI/DoubleSlider.cpp:1856
 msgid "Jump to height"
 msgstr "Pule para altura"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:960
+#: src/slic3r/GUI/DoubleSlider.cpp:1083
 msgid "Edit current color - Right click the colored slider segment"
 msgstr ""
-"Editar cor atual - Clique com o botão direito do mouse no segmento de "
-"controle deslizante colorido"
+"Editar cor atual - Clique com o botão direito do mouse no segmento de controle "
+"deslizante colorido"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:970
+#: src/slic3r/GUI/DoubleSlider.cpp:1093
 msgid "Print mode"
 msgstr "Modo da impressora"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:984
+#: src/slic3r/GUI/DoubleSlider.cpp:1107
 msgid "Add extruder change - Left click"
 msgstr "Adicionar alteração extrusora - Clique à esquerda"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:986
+#: src/slic3r/GUI/DoubleSlider.cpp:1109
 msgid ""
 "Add color change - Left click for predefined color or Shift + Left click for "
 "custom color selection"
@@ -1038,27 +1064,26 @@ msgstr ""
 "Adicionar mudança de cor - Clique à esquerda para cor predefinida ou Shift + "
 "Clique à esquerda para seleção personalizada de cores"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:988
+#: src/slic3r/GUI/DoubleSlider.cpp:1111
 msgid "Add color change - Left click"
 msgstr "Adicionar mudança de cor - Clique à esquerda"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:989
+#: src/slic3r/GUI/DoubleSlider.cpp:1112
 msgid "or press \"+\" key"
 msgstr "ou pressione a tecla \"+\""
 
-#: src/slic3r/GUI/DoubleSlider.cpp:991
+#: src/slic3r/GUI/DoubleSlider.cpp:1114
 msgid "Add another code - Ctrl + Left click"
 msgstr "Adicionar outro código - Ctrl + Clique à esquerda"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:992
+#: src/slic3r/GUI/DoubleSlider.cpp:1115
 msgid "Add another code - Right click"
 msgstr "Adicionar outro código - Clique com o botão direito"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:998
+#: src/slic3r/GUI/DoubleSlider.cpp:1121
 msgid ""
 "The sequential print is on.\n"
-"It's impossible to apply any custom G-code for objects printing "
-"sequentually.\n"
+"It's impossible to apply any custom G-code for objects printing sequentually.\n"
 "This code won't be processed during G-code generation."
 msgstr ""
 "A impressão sequencial está.\n"
@@ -1066,27 +1091,31 @@ msgstr ""
 "de objetos.\n"
 "Este código não será processado durante a geração de G-code."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1005
+#: src/slic3r/GUI/DoubleSlider.cpp:1130
 msgid "Color change (\"%1%\")"
 msgstr "Mudança de cor (\"%1%\")"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1006
+#: src/slic3r/GUI/DoubleSlider.cpp:1131
 msgid "Color change (\"%1%\") for Extruder %2%"
 msgstr "Mudança de cor (\"%1%\") para Extrusor %2%"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1009
+#: src/slic3r/GUI/DoubleSlider.cpp:1133
 msgid "Pause print (\"%1%\")"
 msgstr "Pausar impressão (\"%1%\")"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1011
+#: src/slic3r/GUI/DoubleSlider.cpp:1135
+msgid "Custom template (\"%1%\")"
+msgstr "Modelo customizado (\"%1%\")"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1137
 msgid "Extruder (tool) is changed to Extruder \"%1%\""
 msgstr "Extrusora (ferramenta) é alterada para Extrusora \"%1%\""
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1019
+#: src/slic3r/GUI/DoubleSlider.cpp:1144
 msgid "Note"
 msgstr "Nota"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1021
+#: src/slic3r/GUI/DoubleSlider.cpp:1146
 msgid ""
 "G-code associated to this tick mark is in a conflict with print mode.\n"
 "Editing it will cause changes of Slider data."
@@ -1095,17 +1124,17 @@ msgstr ""
 "de impressão.\n"
 "Editá-lo causará alterações nos dados do Slider."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1024
+#: src/slic3r/GUI/DoubleSlider.cpp:1149
 msgid ""
-"There is a color change for extruder that won't be used till the end of "
-"print job.\n"
+"There is a color change for extruder that won't be used till the end of print "
+"job.\n"
 "This code won't be processed during G-code generation."
 msgstr ""
-"Há uma mudança de cor para extrusor que não será usada até o final do "
-"trabalho de impressão.\n"
+"Há uma mudança de cor para extrusor que não será usada até o final do trabalho "
+"de impressão.\n"
 "Este código não será processado durante a geração de código G."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1027
+#: src/slic3r/GUI/DoubleSlider.cpp:1152
 msgid ""
 "There is an extruder change set to the same extruder.\n"
 "This code won't be processed during G-code generation."
@@ -1113,7 +1142,7 @@ msgstr ""
 "Há uma mudança extrusora definida para o mesmo extrusor.\n"
 "Este código não será processado durante a geração de código G."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1030
+#: src/slic3r/GUI/DoubleSlider.cpp:1155
 msgid ""
 "There is a color change for extruder that has not been used before.\n"
 "Check your settings to avoid redundant color changes."
@@ -1121,161 +1150,168 @@ msgstr ""
 "Há uma mudança de cor para extrusor que não foi usada antes.\n"
 "Verifique suas configurações para evitar alterações de cor redundantes."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1035
+#: src/slic3r/GUI/DoubleSlider.cpp:1160
 msgid "Delete tick mark - Left click or press \"-\" key"
 msgstr ""
-"Excluir marca de marca de marca - Clique à esquerda ou pressione a tecla \"-"
-"\""
+"Excluir marca de marca de marca - Clique à esquerda ou pressione a tecla \"-\""
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1037
+#: src/slic3r/GUI/DoubleSlider.cpp:1162
 msgid "Edit tick mark - Ctrl + Left click"
 msgstr "Editar marca de tique - Ctrl + Clique à esquerda"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1038
+#: src/slic3r/GUI/DoubleSlider.cpp:1163
 msgid "Edit tick mark - Right click"
 msgstr "Editar marca de tique - Clique com o botão direito do mouse"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1134 src/slic3r/GUI/DoubleSlider.cpp:1170
-#: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1705
-#: src/slic3r/GUI/Tab.cpp:2322 src/libslic3r/GCode/PreviewData.cpp:445
+#: src/slic3r/GUI/DoubleSlider.cpp:1263 src/slic3r/GUI/DoubleSlider.cpp:1297
+#: src/slic3r/GUI/GLCanvas3D.cpp:983 src/slic3r/GUI/GUI_ObjectList.cpp:1832
+#: src/slic3r/GUI/Tab.cpp:2489 src/libslic3r/GCode/PreviewData.cpp:450
 #, c-format
 msgid "Extruder %d"
 msgstr "Extrusora %d"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1135 src/slic3r/GUI/GUI_ObjectList.cpp:1706
+#: src/slic3r/GUI/DoubleSlider.cpp:1264 src/slic3r/GUI/GUI_ObjectList.cpp:1833
 msgid "active"
 msgstr "ativar"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144
+#: src/slic3r/GUI/DoubleSlider.cpp:1273
 msgid "Switch code to Change extruder"
 msgstr "Mudar código para extrusor de alterar"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144 src/slic3r/GUI/GUI_ObjectList.cpp:1672
+#: src/slic3r/GUI/DoubleSlider.cpp:1273 src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Change extruder"
 msgstr "Mudar extrusora"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1145
+#: src/slic3r/GUI/DoubleSlider.cpp:1274
 msgid "Change extruder (N/A)"
 msgstr "Extrusora de alterações (N/A)"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1147
+#: src/slic3r/GUI/DoubleSlider.cpp:1276
 msgid "Use another extruder"
 msgstr "Use outra extrusora"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1171
+#: src/slic3r/GUI/DoubleSlider.cpp:1298
 msgid "used"
 msgstr "usado"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1179
+#: src/slic3r/GUI/DoubleSlider.cpp:1306
 msgid "Switch code to Color change (%1%) for:"
 msgstr "Mudar o código para mudança de cor (%1%) Para:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1180
+#: src/slic3r/GUI/DoubleSlider.cpp:1307
 msgid "Add color change (%1%) for:"
 msgstr "Add/Excluir mudança de cor (%1%) para:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1477
+#: src/slic3r/GUI/DoubleSlider.cpp:1665
 msgid "Add color change"
 msgstr "Adicionar mudança de cor"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1487
+#: src/slic3r/GUI/DoubleSlider.cpp:1675
 msgid "Add pause print"
 msgstr "Adicionar impressão de pausa"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1490
+#: src/slic3r/GUI/DoubleSlider.cpp:1679
+msgid "Add custom template"
+msgstr "Adicionar modelo customizado"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1682
 msgid "Add custom G-code"
 msgstr "Adicionar código G personalizado"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1508
+#: src/slic3r/GUI/DoubleSlider.cpp:1700
 msgid "Edit color"
 msgstr "Editar cor"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1509
+#: src/slic3r/GUI/DoubleSlider.cpp:1701
 msgid "Edit pause print message"
 msgstr "Editar mensagem de impressão de pausa"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1510
+#: src/slic3r/GUI/DoubleSlider.cpp:1702
 msgid "Edit custom G-code"
 msgstr "Editar código G personalizado"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1516
+#: src/slic3r/GUI/DoubleSlider.cpp:1708
 msgid "Delete color change"
 msgstr "Excluir alteração de cor"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1517
+#: src/slic3r/GUI/DoubleSlider.cpp:1709
 msgid "Delete tool change"
 msgstr "Excluir alteração de ferramenta"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1518
+#: src/slic3r/GUI/DoubleSlider.cpp:1710
 msgid "Delete pause print"
 msgstr "Excluir impressão de pausa"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1519
+#: src/slic3r/GUI/DoubleSlider.cpp:1711
 msgid "Delete custom G-code"
 msgstr "Excluir código G personalizado"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1532
+#: src/slic3r/GUI/DoubleSlider.cpp:1728
 msgid "Set extruder sequence for the entire print"
 msgstr "Definir sequência de extrusora para toda a impressão"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1618
+#: src/slic3r/GUI/DoubleSlider.cpp:1814
 msgid "Enter custom G-code used on current layer"
 msgstr "Digite o código G personalizado usado na camada atual"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1619
+#: src/slic3r/GUI/DoubleSlider.cpp:1815
 msgid "Custom G-code on current layer (%1% mm)."
 msgstr "Código G personalizado na camada atual (%1% mm)."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1634
+#: src/slic3r/GUI/DoubleSlider.cpp:1830
 msgid "Enter short message shown on Printer display when a print is paused"
 msgstr ""
 "Digite mensagem curta mostrada no visor da impressora quando uma impressão é "
 "pausada"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1635
+#: src/slic3r/GUI/DoubleSlider.cpp:1831
 msgid "Message for pause print on current layer (%1% mm)."
 msgstr "Mensagem para impressão de pausa na camada atual (%1% mm)."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1650
+#: src/slic3r/GUI/DoubleSlider.cpp:1851
+msgid "Enter the move you want to jump to"
+msgstr "Digite o movimento que você deseja saltar para"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1851 src/slic3r/GUI/DoubleSlider.cpp:1855
 msgid "Enter the height you want to jump to"
 msgstr "Digite a altura que você deseja saltar para"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1899
+#: src/slic3r/GUI/DoubleSlider.cpp:2118
 msgid "The last color change data was saved for a single extruder printing."
 msgstr ""
 "Parâmetros de mudança de ferramenta com impressoras de multi material com "
 "apenas uma extrusora."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1900 src/slic3r/GUI/DoubleSlider.cpp:1916
+#: src/slic3r/GUI/DoubleSlider.cpp:2119 src/slic3r/GUI/DoubleSlider.cpp:2134
 msgid "The last color change data was saved for a multi extruder printing."
 msgstr ""
 "Os últimos dados de mudança de cor foram salvos para uma impressão de vários "
 "extrusores."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1902
+#: src/slic3r/GUI/DoubleSlider.cpp:2121
 msgid "Your current changes will delete all saved color changes."
 msgstr "Suas alterações atuais excluirão todas as alterações de cor salvas."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1903 src/slic3r/GUI/DoubleSlider.cpp:1924
+#: src/slic3r/GUI/DoubleSlider.cpp:2122 src/slic3r/GUI/DoubleSlider.cpp:2142
 msgid "Are you sure you want to continue?"
 msgstr "Você tem certeza que deseja continuar?"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1917
+#: src/slic3r/GUI/DoubleSlider.cpp:2135
 msgid ""
 "Select YES if you want to delete all saved tool changes, \n"
 "NO if you want all tool changes switch to color changes, \n"
 "or CANCEL to leave it unchanged."
 msgstr ""
 "Selecione SIM se quiser excluir todas as alterações de ferramenta salvas, \n"
-"NÃO, se você quiser que todas as alterações de ferramenta mudem para "
-"mudanças de cor, \n"
+"NÃO, se você quiser que todas as alterações de ferramenta mudem para mudanças "
+"de cor, \n"
 "ou CANCELAR para deixá-lo inalterado."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1920
+#: src/slic3r/GUI/DoubleSlider.cpp:2138
 msgid "Do you want to delete all saved tool changes?"
 msgstr "Deseja excluir todas as alterações de ferramenta salvas?"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1922
+#: src/slic3r/GUI/DoubleSlider.cpp:2140
 msgid ""
 "The last color change data was saved for a multi extruder printing with tool "
 "changes for whole print."
@@ -1283,11 +1319,22 @@ msgstr ""
 "Os últimos dados de mudança de cor foram salvos para uma impressão multi-"
 "extrusora com alterações de ferramenta para impressão inteira."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1923
+#: src/slic3r/GUI/DoubleSlider.cpp:2141
 msgid "Your current changes will delete all saved extruder (tool) changes."
 msgstr ""
-"Suas alterações atuais excluirão todas as alterações do extrusor "
-"(ferramenta) salvos."
+"Suas alterações atuais excluirão todas as alterações do extrusor (ferramenta) "
+"salvos."
+
+#: src/slic3r/GUI/ExtraRenderers.cpp:297 src/slic3r/GUI/GUI_ObjectList.cpp:496
+#: src/slic3r/GUI/GUI_ObjectList.cpp:508 src/slic3r/GUI/GUI_ObjectList.cpp:1015
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4454 src/slic3r/GUI/GUI_ObjectList.cpp:4464
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4499
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:202
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:259
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:284
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:492
+msgid "default"
+msgstr "padrão"
 
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:23
 msgid "Set extruder sequence"
@@ -1297,11 +1344,10 @@ msgstr "Definir seqüência de extrusor"
 msgid "Set extruder change for every"
 msgstr "Definir a mudança de extrusor para cada"
 
-#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52
-#: src/libslic3r/PrintConfig.cpp:362 src/libslic3r/PrintConfig.cpp:994
-#: src/libslic3r/PrintConfig.cpp:1505 src/libslic3r/PrintConfig.cpp:1690
-#: src/libslic3r/PrintConfig.cpp:1750 src/libslic3r/PrintConfig.cpp:1930
-#: src/libslic3r/PrintConfig.cpp:1976
+#: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52 src/libslic3r/PrintConfig.cpp:396
+#: src/libslic3r/PrintConfig.cpp:1038 src/libslic3r/PrintConfig.cpp:1613
+#: src/libslic3r/PrintConfig.cpp:1798 src/libslic3r/PrintConfig.cpp:1865
+#: src/libslic3r/PrintConfig.cpp:2072 src/libslic3r/PrintConfig.cpp:2118
 msgid "layers"
 msgstr "camadas"
 
@@ -1317,33 +1363,34 @@ msgstr "Remover extrusor da seqüência"
 msgid "Add extruder to sequence"
 msgstr "Adicionar extrusor à seqüência"
 
-#: src/slic3r/GUI/Field.cpp:136
+#: src/slic3r/GUI/Field.cpp:184
 msgid "default value"
 msgstr "valor padrão"
 
-#: src/slic3r/GUI/Field.cpp:139
+#: src/slic3r/GUI/Field.cpp:187
 msgid "parameter name"
 msgstr "nome do parâmetro"
 
-#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:581
+#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:715
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:874
 msgid "N/A"
 msgstr "N/D"
 
-#: src/slic3r/GUI/Field.cpp:175
+#: src/slic3r/GUI/Field.cpp:223
 #, c-format
 msgid "%s doesn't support percentage"
 msgstr "%s não suporta porcentagem"
 
-#: src/slic3r/GUI/Field.cpp:195 src/slic3r/GUI/Field.cpp:226
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:376
+#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
+#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
 msgid "Invalid numeric input."
 msgstr "Entrada numérica não válida."
 
-#: src/slic3r/GUI/Field.cpp:204
+#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
 msgid "Input value is out of range"
 msgstr "Valor de entrada está fora do limite"
 
-#: src/slic3r/GUI/Field.cpp:240
+#: src/slic3r/GUI/Field.cpp:288
 #, c-format
 msgid ""
 "Do you mean %s%% instead of %s %s?\n"
@@ -1354,7 +1401,7 @@ msgstr ""
 "Selecione SIM se quiser trocar esse valor para %s%%, \n"
 "ou NÃO se você tem certeza que %s %s é o valor correto."
 
-#: src/slic3r/GUI/Field.cpp:243
+#: src/slic3r/GUI/Field.cpp:291
 msgid "Parameter validation"
 msgstr "Validação do parâmetro"
 
@@ -1441,8 +1488,9 @@ msgstr "Atualizador de Firmware"
 msgid "Firmware image:"
 msgstr "Imagem do Firmware:"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1657
-#: src/slic3r/GUI/Tab.cpp:1719
+#: src/slic3r/GUI/FirmwareDialog.cpp:805
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:271
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
 msgid "Browse"
 msgstr "Procurar"
 
@@ -1474,9 +1522,8 @@ msgstr "Pronto"
 msgid "Advanced: Output log"
 msgstr "Avançado: log de Saída"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:852
-#: src/slic3r/GUI/Mouse3DController.cpp:336
-#: src/slic3r/GUI/PrintHostDialogs.cpp:161
+#: src/slic3r/GUI/FirmwareDialog.cpp:852 src/slic3r/GUI/Mouse3DController.cpp:353
+#: src/slic3r/GUI/PrintHostDialogs.cpp:159
 msgid "Close"
 msgstr "Fechar"
 
@@ -1496,318 +1543,652 @@ msgstr "Confirmação"
 msgid "Cancelling..."
 msgstr "Cancelando..."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:234 src/slic3r/GUI/GLCanvas3D.cpp:4573
+#: src/slic3r/GUI/GCodeViewer.cpp:223
+msgid "Tool position"
+msgstr "Posição da ferramenta"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:933
+msgid "Generating toolpaths"
+msgstr "Gerando caminhos"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:1318
+msgid "Generating vertex buffer"
+msgstr "Gerando buffer do vértice"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:1392
+msgid "Generating index buffers"
+msgstr "Gerando buffer do índice"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to hide"
+msgstr "Clique para esconder"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to show"
+msgstr "Clique para mostrar"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2183
+msgid "up to"
+msgstr "até"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2189
+msgid "above"
+msgstr "acima de Z"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "from"
+msgstr "de"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "to"
+msgstr "para"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
+#: src/slic3r/GUI/GUI_Preview.cpp:275 src/slic3r/GUI/GUI_Preview.cpp:787
+#: src/libslic3r/GCode/PreviewData.cpp:350
+msgid "Feature type"
+msgstr "Tipo de recurso"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
+#: src/slic3r/GUI/RammingChart.cpp:76
+msgid "Time"
+msgstr "Tempo"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2233
+msgid "Percentage"
+msgstr "Porcentagem"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2236 src/libslic3r/GCode/PreviewData.cpp:352
+msgid "Height (mm)"
+msgstr "Altura (mm)"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2237 src/libslic3r/GCode/PreviewData.cpp:354
+msgid "Width (mm)"
+msgstr "Espessura (mm)"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2238 src/libslic3r/GCode/PreviewData.cpp:356
+msgid "Speed (mm/s)"
+msgstr "Velocidade (mm/s)"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2239 src/libslic3r/GCode/PreviewData.cpp:358
+msgid "Fan Speed (%)"
+msgstr "Velocidade da ventoinha (%)"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2240 src/libslic3r/GCode/PreviewData.cpp:360
+msgid "Volumetric flow rate (mm³/s)"
+msgstr "Vazão volumétrica (mm³/s)"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2241 src/slic3r/GUI/GUI_Preview.cpp:281
+#: src/slic3r/GUI/GUI_Preview.cpp:453 src/slic3r/GUI/GUI_Preview.cpp:693
+#: src/slic3r/GUI/GUI_Preview.cpp:786 src/slic3r/GUI/GUI_Preview.cpp:1270
+#: src/libslic3r/GCode/PreviewData.cpp:362
+msgid "Tool"
+msgstr "Ferramenta"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2242 src/slic3r/GUI/GUI_Preview.cpp:282
+#: src/slic3r/GUI/GUI_Preview.cpp:784 src/libslic3r/GCode/PreviewData.cpp:364
+msgid "Color Print"
+msgstr "Impressão colorida"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2277 src/slic3r/GUI/GCodeViewer.cpp:2313
+#: src/slic3r/GUI/GCodeViewer.cpp:2318 src/slic3r/GUI/GUI_ObjectList.cpp:296
+#: src/slic3r/GUI/Tab.cpp:1780 src/slic3r/GUI/wxExtensions.cpp:515
+#: src/libslic3r/PrintConfig.cpp:523
+msgid "Extruder"
+msgstr "Extrusora"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2289
+msgid "Default color"
+msgstr "Cor de impressão padrão"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2313
+msgid "default color"
+msgstr "cor de impressão padrão"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2410 src/slic3r/GUI/GCodeViewer.cpp:2438
+msgid "Color change"
+msgstr "Adicionar mudança de cor"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2436 src/slic3r/GUI/GCodeViewer.cpp:2451
+msgid "Print"
+msgstr "Imprrimir"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2437 src/slic3r/GUI/GCodeViewer.cpp:2460
+#: src/slic3r/GUI/Plater.cpp:1199
+msgid "Pause"
+msgstr "Pausar"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Event"
+msgstr "Evento"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Remaining time"
+msgstr "Tempo de impressão restante"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Duration"
+msgstr "Duração"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2489 src/slic3r/GUI/GUI_Preview.cpp:335
+#: src/slic3r/GUI/GUI_Preview.cpp:1471 src/libslic3r/PrintConfig.cpp:2295
+msgid "Travel"
+msgstr "Viagem"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2492
+msgid "Movement"
+msgstr "Movimento"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2493
+msgid "Extrusion"
+msgstr "Extrusão"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/Tab.cpp:1670
+#: src/slic3r/GUI/Tab.cpp:2539
+msgid "Retraction"
+msgstr "Retração"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2525 src/slic3r/GUI/GUI_Preview.cpp:320
+#: src/slic3r/GUI/GUI_Preview.cpp:333
+msgid "Options"
+msgstr "Opções de saída"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2528 src/slic3r/GUI/GUI_Preview.cpp:336
+#: src/slic3r/GUI/GUI_Preview.cpp:1472
+msgid "Retractions"
+msgstr "Retrações"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2529 src/slic3r/GUI/GUI_Preview.cpp:337
+#: src/slic3r/GUI/GUI_Preview.cpp:1473
+msgid "Deretractions"
+msgstr "Retorno da retração"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2530 src/slic3r/GUI/GUI_Preview.cpp:1474
+msgid "Tool changes"
+msgstr "G-code de troca de ferramenta"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2531 src/slic3r/GUI/GUI_Preview.cpp:1475
+msgid "Color changes"
+msgstr "Adicionar mudança de cor"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2532 src/slic3r/GUI/GUI_Preview.cpp:1476
+msgid "Pause prints"
+msgstr "Adicionar impressão de pausa"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2533 src/slic3r/GUI/GUI_Preview.cpp:1477
+msgid "Custom GCodes"
+msgstr "G-code customizado"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
+#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
+#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
+msgid "Estimated printing time"
+msgstr "Tempo estimado de impressão"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2552
+msgid "Normal mode"
+msgstr "Modo normal"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2557
+msgid "Stealth mode"
+msgstr "Modo silencioso"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2586
+msgid "Show stealth mode"
+msgstr "Mostrar modo silencioso"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2591
+msgid "Show normal mode"
+msgstr "Mostrar modo normal"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:231 src/slic3r/GUI/GLCanvas3D.cpp:4978
 msgid "Variable layer height"
 msgstr "Altura da camada variável"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:237
+#: src/slic3r/GUI/GLCanvas3D.cpp:233
 msgid "Left mouse button:"
 msgstr "Botão esquerdo do mouse:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:240
+#: src/slic3r/GUI/GLCanvas3D.cpp:235
 msgid "Add detail"
-msgstr "Adicionar config."
+msgstr "Adicionar config"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:243
+#: src/slic3r/GUI/GLCanvas3D.cpp:237
 msgid "Right mouse button:"
 msgstr "Botão direito do mouse:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:246
+#: src/slic3r/GUI/GLCanvas3D.cpp:239
 msgid "Remove detail"
 msgstr "Remover detalhes"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:249
+#: src/slic3r/GUI/GLCanvas3D.cpp:241
 msgid "Shift + Left mouse button:"
 msgstr "Shift + Botão do mouse esquerdo:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:252
+#: src/slic3r/GUI/GLCanvas3D.cpp:243
 msgid "Reset to base"
 msgstr "Reset para base"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:255
+#: src/slic3r/GUI/GLCanvas3D.cpp:245
 msgid "Shift + Right mouse button:"
 msgstr "Shift + Botão do mouse direito:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:258
+#: src/slic3r/GUI/GLCanvas3D.cpp:247
 msgid "Smoothing"
 msgstr "Suavizando"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:261
+#: src/slic3r/GUI/GLCanvas3D.cpp:249
 msgid "Mouse wheel:"
 msgstr "Scroll do mouse:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:264
+#: src/slic3r/GUI/GLCanvas3D.cpp:251
 msgid "Increase/decrease edit area"
 msgstr "Aumentar/diminuir a área de edição"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:267
+#: src/slic3r/GUI/GLCanvas3D.cpp:254
 msgid "Adaptive"
 msgstr "Adaptativo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:273
+#: src/slic3r/GUI/GLCanvas3D.cpp:260
 msgid "Quality / Speed"
 msgstr "Qualidade / Velocidade"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:277
+#: src/slic3r/GUI/GLCanvas3D.cpp:263
 msgid "Higher print quality versus higher print speed."
 msgstr "Maior qualidade de impressão versus maior velocidade de impressão."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:288
+#: src/slic3r/GUI/GLCanvas3D.cpp:274
 msgid "Smooth"
 msgstr "Suave"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:294 src/libslic3r/PrintConfig.cpp:511
+#: src/slic3r/GUI/GLCanvas3D.cpp:280 src/libslic3r/PrintConfig.cpp:547
 msgid "Radius"
 msgstr "Raio"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:304
+#: src/slic3r/GUI/GLCanvas3D.cpp:290
 msgid "Keep min"
-msgstr "Mantenha min."
+msgstr "Mantenha min"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:313
+#: src/slic3r/GUI/GLCanvas3D.cpp:299
 msgid "Reset"
 msgstr "Redefinir"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:599
+#: src/slic3r/GUI/GLCanvas3D.cpp:565
 msgid "Variable layer height - Manual edit"
 msgstr "Habilitar altura de camada variável"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:685
-msgid "An object outside the print area was detected"
-msgstr "Um objeto foi detectado fora da área de impressão"
+#: src/slic3r/GUI/GLCanvas3D.cpp:633
+msgid "An object outside the print area was detected."
+msgstr "Um objeto foi detectado fora da área de impressão."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:686
-msgid "A toolpath outside the print area was detected"
-msgstr "Há movimentos fora da área de impressão"
+#: src/slic3r/GUI/GLCanvas3D.cpp:634
+msgid "A toolpath outside the print area was detected."
+msgstr "Há movimentos fora da área de impressão."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:687
-msgid "SLA supports outside the print area were detected"
-msgstr "Suportes de SLA foram detectados fora da área de impressão"
+#: src/slic3r/GUI/GLCanvas3D.cpp:635
+msgid "SLA supports outside the print area were detected."
+msgstr "Suportes de SLA foram detectados fora da área de impressão."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:688
-msgid "Some objects are not visible"
-msgstr "Alguns objetos não são visíveis"
+#: src/slic3r/GUI/GLCanvas3D.cpp:636
+msgid "Some objects are not visible."
+msgstr "Alguns objetos não são visíveis."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:690
+#: src/slic3r/GUI/GLCanvas3D.cpp:638
 msgid ""
-"An object outside the print area was detected\n"
-"Resolve the current problem to continue slicing"
+"An object outside the print area was detected.\n"
+"Resolve the current problem to continue slicing."
 msgstr ""
-"Um objeto foi encontrado fora da área de impressão\n"
-"Resolva o problema atual para continuar o fatiamento"
+"Um objeto foi encontrado fora da área de impressão.\n"
+"Resolva o problema atual para continuar o fatiamento."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:904 src/slic3r/GUI/GLCanvas3D.cpp:933
+#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
 msgid "Default print color"
 msgstr "Cor de impressão padrão"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:934 src/slic3r/GUI/GLCanvas3D.cpp:943
-#: src/slic3r/GUI/GLCanvas3D.cpp:982
+#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
+#: src/slic3r/GUI/GLCanvas3D.cpp:988
 msgid "Pause print or custom G-code"
 msgstr "Pausa impressão ou código G personalizado"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:955
+#: src/slic3r/GUI/GLCanvas3D.cpp:961
 #, c-format
 msgid "up to %.2f mm"
 msgstr "até %.2f mm"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:959
+#: src/slic3r/GUI/GLCanvas3D.cpp:965
 #, c-format
 msgid "above %.2f mm"
 msgstr "acima de %.2f mm"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:963
+#: src/slic3r/GUI/GLCanvas3D.cpp:969
 #, c-format
 msgid "%.2f - %.2f mm"
 msgstr "%.2f - %.2f mm"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:995
+#: src/slic3r/GUI/GLCanvas3D.cpp:1001
 #, c-format
 msgid "Color change for Extruder %d at %.2f mm"
 msgstr "Mudança de cor para Extrusor %d em %.2f mm"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1305
+#: src/slic3r/GUI/GLCanvas3D.cpp:1312
 msgid "Seq."
 msgstr "Seq."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1701
+#: src/slic3r/GUI/GLCanvas3D.cpp:1418
+msgid "canvas_tooltip"
+msgstr "canvas_tooltip"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:1778
 msgid "Variable layer height - Reset"
 msgstr "Habilitar altura de camada variável - Resetar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1709
+#: src/slic3r/GUI/GLCanvas3D.cpp:1786
 msgid "Variable layer height - Adaptive"
 msgstr "Habilitar altura de camada variável - Adaptativo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1717
+#: src/slic3r/GUI/GLCanvas3D.cpp:1794
 msgid "Variable layer height - Smooth all"
 msgstr "Habilitar altura de camada variável - Deixar tudo suave"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2053
+#: src/slic3r/GUI/GLCanvas3D.cpp:2226
 msgid "Mirror Object"
 msgstr "Espelhar objeto"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2921
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:570
+#: src/slic3r/GUI/GLCanvas3D.cpp:3165
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520
 msgid "Gizmo-Move"
 msgstr "Gizmo-Mover"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3001
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:572
+#: src/slic3r/GUI/GLCanvas3D.cpp:3249
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:522
 msgid "Gizmo-Rotate"
 msgstr "Gizmo-Rotacionar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3505
+#: src/slic3r/GUI/GLCanvas3D.cpp:3810
 msgid "Move Object"
 msgstr "Mover objeto"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4302 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Switch to Settings"
+msgstr "Alterar para modo de edição"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4303 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Print Settings Tab"
+msgstr "C&onfig. de impressão"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Filament Settings Tab"
+msgstr "&config. de filamentos"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Material Settings Tab"
+msgstr "A&ba de config. de material"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4305 src/slic3r/GUI/GLCanvas3D.cpp:4941
+msgid "Printer Settings Tab"
+msgstr "A&ba de config. da impressora"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Undo History"
 msgstr "Desfazer histórico"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Redo History"
 msgstr "Refazer histórico"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Undo %1$d Action"
 msgid_plural "Undo %1$d Actions"
 msgstr[0] "Desfazer ação de %1$d"
 msgstr[1] "Desfazer ações de %1$d"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Redo %1$d Action"
 msgid_plural "Redo %1$d Actions"
 msgstr[0] "Refazer ação de %1$d"
 msgstr[1] "Refazer ações de %1$d"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4467
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4957
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 src/slic3r/GUI/Search.cpp:426
+msgid "Search"
+msgstr "Pesquisar"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4416 src/slic3r/GUI/GLCanvas3D.cpp:4424
+#: src/slic3r/GUI/Search.cpp:433
+msgid "Type here to search"
+msgstr "Digite aqui para pesquisar"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4833
 msgid "Add..."
 msgstr "Adicionar..."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4475 src/slic3r/GUI/GUI_ObjectList.cpp:1719
-#: src/slic3r/GUI/Plater.cpp:3933 src/slic3r/GUI/Plater.cpp:3955
-#: src/slic3r/GUI/Tab.cpp:3126
+#: src/slic3r/GUI/GLCanvas3D.cpp:4841 src/slic3r/GUI/GUI_ObjectList.cpp:1846
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Delete"
 msgstr "Deletar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4484 src/slic3r/GUI/KBShortcutsDialog.cpp:129
-#: src/slic3r/GUI/Plater.cpp:4671
+#: src/slic3r/GUI/GLCanvas3D.cpp:4850 src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "Delete all"
 msgstr "Deletar todos"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:157
-#: src/slic3r/GUI/Plater.cpp:2756
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/Plater.cpp:1549
 msgid "Arrange"
 msgstr "Arranjar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:152
 msgid "Arrange selection"
 msgstr "Arranjar seleção"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4505
+#: src/slic3r/GUI/GLCanvas3D.cpp:4871
 msgid "Copy"
 msgstr "Copiar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4514
+#: src/slic3r/GUI/GLCanvas3D.cpp:4880
 msgid "Paste"
 msgstr "Colar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4526 src/slic3r/GUI/Plater.cpp:3790
-#: src/slic3r/GUI/Plater.cpp:3802 src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/GLCanvas3D.cpp:4892 src/slic3r/GUI/Plater.cpp:3708
+#: src/slic3r/GUI/Plater.cpp:3720 src/slic3r/GUI/Plater.cpp:3858
 msgid "Add instance"
 msgstr "Adicionar instância"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4537 src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/GLCanvas3D.cpp:4903 src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove instance"
 msgstr "Remover instância"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4550
+#: src/slic3r/GUI/GLCanvas3D.cpp:4916
 msgid "Split to objects"
 msgstr "Dividir em objetos"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4560 src/slic3r/GUI/GUI_ObjectList.cpp:1488
+#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/GUI_ObjectList.cpp:1618
 msgid "Split to parts"
 msgstr "Dividir em partes"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/KBShortcutsDialog.cpp:130
-#: src/slic3r/GUI/MainFrame.cpp:592
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/KBShortcutsDialog.cpp:125
+#: src/slic3r/GUI/MainFrame.cpp:1187
 msgid "Undo"
 msgstr "Desfazer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/GLCanvas3D.cpp:4657
-msgid "Click right mouse button to open History"
-msgstr "Clique no botão direito para abrir o Histórico"
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
+msgid "Click right mouse button to open/close History"
+msgstr "Clique no botão direito para abrir/fechar o Histórico"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4641
+#: src/slic3r/GUI/GLCanvas3D.cpp:5051
 msgid "Next Undo action: %1%"
 msgstr "Próxima ação de desfazer: %1%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4657 src/slic3r/GUI/KBShortcutsDialog.cpp:131
-#: src/slic3r/GUI/MainFrame.cpp:595
+#: src/slic3r/GUI/GLCanvas3D.cpp:5067 src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/MainFrame.cpp:1190
 msgid "Redo"
 msgstr "Refazer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4673
+#: src/slic3r/GUI/GLCanvas3D.cpp:5089
 msgid "Next Redo action: %1%"
 msgstr "Próxima ação de refazer: %1%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6598
+#: src/slic3r/GUI/GLCanvas3D.cpp:7193
 msgid "Selection-Add from rectangle"
 msgstr "Seleção-Adicionar do retângulo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6617
+#: src/slic3r/GUI/GLCanvas3D.cpp:7212
 msgid "Selection-Remove from rectangle"
 msgstr "Seleção-remover do retângulo"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:306
-#, c-format
-msgid ""
-"PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n"
-"while OpenGL version %s, render %s, vendor %s was detected."
-msgstr ""
-"PrusaSlicer requer drivers capazes de executar OpenGL 2.0, \n"
-"enquanto a versão do OpenGL %s, renderização %s, fornecedor %s foi detectada."
-
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:309
-msgid "You may need to update your graphics card driver."
-msgstr "Você pode ter que atualizar os drivers da sua placa de vídeo."
-
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:312
-msgid ""
-"As a workaround, you may run PrusaSlicer with a software rendered 3D "
-"graphics by running prusa-slicer.exe with the --sw_renderer parameter."
-msgstr ""
-"Como solução alternativa, você pode executar o PrusaSlicer com um software "
-"renderizando gráficos 3D por executar Prusa-slicer.exe com o parâmetro--"
-"sw_renderer."
-
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:314
-msgid "Unsupported OpenGL version"
-msgstr "Versão do OpenGL não suportada"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:42
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:144 src/libslic3r/PrintConfig.cpp:3412
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:146 src/libslic3r/PrintConfig.cpp:3601
 msgid "Cut"
 msgstr "Cortar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:168
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
 msgid "Keep upper part"
 msgstr "Manter parte superior"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:169
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171
 msgid "Keep lower part"
 msgstr "Manter parte inferior"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:172
 msgid "Rotate lower part upwards"
 msgstr "Rotacione as partes inferiores para cima"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:175
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:177
 msgid "Perform cut"
 msgstr "Aplicar o corte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33
+msgid "FDM Support Editing"
+msgstr "Editor de Suporte FDM"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:25
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
+msgid "Clipping of view"
+msgstr "Recorte de vista"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:26
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
+msgid "Reset direction"
+msgstr "Restabelecer direção"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:44
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:27
+msgid "Cursor size"
+msgstr "Tamanho do cursor"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:28
+msgid "Cursor type"
+msgstr "Tipo do Cursor"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:29
+msgid "Left mouse button"
+msgstr "Botão esquerdo do mouse"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:47
+msgid "Enforce supports"
+msgstr "Reforçar suportes"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:31
+msgid "Right mouse button"
+msgstr "Botão direito do mouse"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:373
+msgid "Block supports"
+msgstr "Bloquear suportes"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:33
+msgid "Shift + Left mouse button"
+msgstr "Shift + Botão do mouse esquerdo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:34
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:368
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:378
+msgid "Remove selection"
+msgstr "Remover seleção"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:35
+msgid "Remove all selection"
+msgstr "Remover toda seleção"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:53
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:36
+msgid "Circle"
+msgstr "Circular"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:37
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
+msgid "Sphere"
+msgstr "Esfera"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:136
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:118
+msgid "Reset selection"
+msgstr "Restabelecer seleção"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:160
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:141
+msgid "Alt + Mouse wheel"
+msgstr "Alt + Scroll do mouse"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:178
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:159
+msgid "Paints all facets inside, regardless of their orientation."
+msgstr "Pinte todas as facetas internas, independente de suas orientações."
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:192
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:173
+msgid "Ignores facets facing away from the camera."
+msgstr "Ignore facetas de costas para a câmera."
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:225
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:203
+msgid "Ctrl + Mouse wheel"
+msgstr "Ctrl + Scroll do mouse"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:233
+msgid "Autoset custom supports"
+msgstr "Definir automaticamente suportes customizados"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235
+msgid "Threshold:"
+msgstr "Limite:"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235
+msgid "deg"
+msgstr "deg"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:239
+msgid "Enforce"
+msgstr "Reforçar"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:242
+msgid "Block"
+msgstr "Bloquear"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:292
+msgid "Block supports by angle"
+msgstr "Bloquear suporte por ângulo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:293
+msgid "Add supports by angle"
+msgstr "Adicionar suportes por ângulo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41
 msgid "Place on face"
 msgstr "Colocar em uma face"
 
@@ -1827,8 +2208,7 @@ msgstr "Compensamento do Z"
 msgid "Quality"
 msgstr "Qualidade"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
-#: src/libslic3r/PrintConfig.cpp:2944
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44 src/libslic3r/PrintConfig.cpp:3098
 msgid "Closing distance"
 msgstr "Distância de fechamento"
 
@@ -1848,64 +2228,92 @@ msgstr "Remover os buracos selecionados"
 msgid "Remove all holes"
 msgstr "Remova todos os buracos"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
-msgid "Clipping of view"
-msgstr "Recorte de vista"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
-msgid "Reset direction"
-msgstr "Restabelecer direção"
-
 #: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
 msgid "Show supports"
 msgstr "Mostrar suportes"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:423
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:308
 msgid "Add drainage hole"
 msgstr "Adicionar orifício de drenagem"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:541
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:424
 msgid "Delete drainage hole"
 msgstr "Excluir orifício de drenagem"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:815
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:624
 msgid "Hollowing parameter change"
 msgstr "Mudança de parâmetro de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:887
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:693
 msgid "Change drainage hole diameter"
 msgstr "Mudar o diâmetro do orifício de drenagem"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:979
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:785
 msgid "Hollow and drill"
 msgstr "Oco e broca"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:1061
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:835
 msgid "Move drainage hole"
 msgstr "Mover o orifício de drenagem"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:64
 msgid "Move"
 msgstr "Mover"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:480
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:499
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:517
-#: src/libslic3r/PrintConfig.cpp:3461
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:210
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:224
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:506
+#: src/slic3r/GUI/Mouse3DController.cpp:288
+#: src/slic3r/GUI/Mouse3DController.cpp:309
+msgid "Rotation"
+msgstr "Rotação"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:220 src/slic3r/GUI/Plater.cpp:3961
+msgid "Optimize orientation"
+msgstr "Otimize a orientação"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:221 src/libslic3r/PrintConfig.cpp:3089
+msgid "Accuracy"
+msgstr "Precisão"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:233
+msgid "Least supports"
+msgstr "Menos suportes"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:234
+msgid "Suface quality"
+msgstr "Qualidade da superfície"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:513
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:527
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:546
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562
+#: src/libslic3r/PrintConfig.cpp:3650
 msgid "Rotate"
 msgstr "Rotacionar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:47
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:230
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:500
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:518
-#: src/libslic3r/PrintConfig.cpp:3476
+#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:78
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:238
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:547
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:563
+#: src/libslic3r/PrintConfig.cpp:3665
 msgid "Scale"
 msgstr "Escala"
 
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:30
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:381
+msgid "Enforce seam"
+msgstr "Reforçar costura"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:32
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:383
+msgid "Block seam"
+msgstr "Bloquear costura"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:46
+msgid "Seam Editing"
+msgstr "Editar costura"
+
 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47
 msgid "Head diameter"
 msgstr "Diâmetro da cabeça"
@@ -1915,7 +2323,7 @@ msgid "Lock supports under new islands"
 msgstr "Travar suportes debaixo de novas ilhas"
 
 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1361
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218
 msgid "Remove selected points"
 msgstr "Remover pontos selecionados"
 
@@ -1924,12 +2332,12 @@ msgid "Remove all points"
 msgstr "Remover todos os pontos"
 
 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221
 msgid "Apply changes"
 msgstr "Aplicar mudanças"
 
 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222
 msgid "Discard changes"
 msgstr "Descartar mudanças"
 
@@ -1938,12 +2346,12 @@ msgid "Minimal points distance"
 msgstr "Distância mínima entre pontos"
 
 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
-#: src/libslic3r/PrintConfig.cpp:2774
+#: src/libslic3r/PrintConfig.cpp:2928
 msgid "Support points density"
 msgstr "Densidade dos pontos de suporte"
 
 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1224
 msgid "Auto-generate points"
 msgstr "Pontos gerados automaticamente"
 
@@ -1951,298 +2359,412 @@ msgstr "Pontos gerados automaticamente"
 msgid "Manual editing"
 msgstr "Edição manual"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:484
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:374
 msgid "Add support point"
 msgstr "Adicionar ponto de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:621
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:514
 msgid "Delete support point"
 msgstr "Deletar ponto de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:810
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:694
 msgid "Change point head diameter"
 msgstr "Mudar o diâmetro do ponto da cabeça"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:878
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:762
 msgid "Support parameter change"
 msgstr "Mudança de parâmetro de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:986
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:869
 msgid "SLA Support Points"
 msgstr "Pontos de suporte SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1007
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:897
 msgid "SLA gizmo turned on"
 msgstr "Gizmo de SLA ligado"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1035
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:911
 msgid "Do you want to save your manually edited support points?"
 msgstr "Você deseja salvar os pontos manualmente editados?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1036
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:912
 msgid "Save changes?"
 msgstr "Salvar mudanças?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:924
 msgid "SLA gizmo turned off"
 msgstr "Gizmo de SLA desligado"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1087
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:955
 msgid "Move support point"
 msgstr "Mover pontos de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1186
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048
 msgid "Support points edit"
 msgstr "Edição de pontos de suporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1258
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127
 msgid "Autogeneration will erase all manually edited points."
 msgstr "Gerar automaticamente irá apagar todos os pontos manualmente editados."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1259
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1128
 msgid "Are you sure you want to do it?"
 msgstr "Tem certeza que quer fazer isso?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1260 src/slic3r/GUI/GUI.cpp:258
-#: src/slic3r/GUI/Tab.cpp:3086 src/slic3r/GUI/WipeTowerDialog.cpp:45
-#: src/slic3r/GUI/WipeTowerDialog.cpp:366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1129 src/slic3r/GUI/GUI.cpp:256
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:478
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:502
+#: src/slic3r/GUI/WipeTowerDialog.cpp:45 src/slic3r/GUI/WipeTowerDialog.cpp:366
 msgid "Warning"
 msgstr "Aviso"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1263
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1134
 msgid "Autogenerate support points"
 msgstr "Pontos de suporte gerados automaticamente"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1324
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1181
 msgid "SLA gizmo keyboard shortcuts"
 msgstr "Atalhos no teclado para gizmo SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1335
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1192
 msgid "Note: some shortcuts work in (non)editing mode only."
 msgstr "Nota: alguns atalhos funcionam somente em modos que não editam."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1353
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1356
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1357
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Left click"
 msgstr "Clique esquerdo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1353
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
 msgid "Add point"
 msgstr "Adicionar ponto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1354
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Right click"
 msgstr "Clique direito"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1354
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Remove point"
 msgstr "Remover ponto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1355
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1358
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1359
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Drag"
 msgstr "Arrastar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1355
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
 msgid "Move point"
 msgstr "Mover ponto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1356
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
 msgid "Add point to selection"
 msgstr "Adicionar ponto à seleção"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1357
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Remove point from selection"
 msgstr "Remover ponto da seleção"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1358
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
 msgid "Select by rectangle"
 msgstr "Selecionar por retângulo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1359
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Deselect by rectangle"
 msgstr "Desselecionar por retângulo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1360
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217
 msgid "Select all points"
 msgstr "Selecionar todos os pontos"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1362
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Mouse wheel"
 msgstr "Scroll do mouse"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1362
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Move clipping plane"
 msgstr "Mover plano de recorte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220
 msgid "Reset clipping plane"
 msgstr "Restabelecer plano de recorte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1223
 msgid "Switch to editing mode"
 msgstr "Alterar para modo de edição"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:497
-msgid "Gizmo-Place on Face"
-msgstr "Gizmo-Colocar em uma face"
-
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:571
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521
 msgid "Gizmo-Scale"
 msgstr "Gizmo-Escala"
 
-#: src/slic3r/GUI/GUI_App.cpp:138
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:639
+msgid "Gizmo-Place on Face"
+msgstr "Gizmo-Colocar em uma face"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:39
+msgid "Supports gizmo turned on"
+msgstr "Gizmo de suportes ligado"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:40
+msgid "Seam gizmo turned on"
+msgstr "Gizmo de costura ligado"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:47
+msgid "Seam gizmo turned off"
+msgstr "Gizmo de costura desligado"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:48
+msgid "Supports gizmo turned off"
+msgstr "Gizmo de suporte desligado"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:371
+msgid "Add supports"
+msgstr "Adicionar ponto de suporte"
+
+#: src/slic3r/GUI/GUI_App.cpp:243
+msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community."
+msgstr ""
+"PrusaSlicer é baseado no Slic3r criado por Alessandro Ranellucci e a "
+"comunidade RepRap"
+
+#: src/slic3r/GUI/GUI_App.cpp:245
+msgid ""
+"Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas "
+"Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others."
+msgstr ""
+"Contribuições por Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas "
+"Meszaros, Lukas Matena, Vojtech Kral, David Kocik e outros."
+
+#: src/slic3r/GUI/GUI_App.cpp:246
+msgid "Artwork model by Nora Al-Badri and Jan Nikolai Nelles"
+msgstr "Modelo de arte de Nora Al-Badri e Jan Nikolai Nelles"
+
+#: src/slic3r/GUI/GUI_App.cpp:528
 #, c-format
 msgid ""
-"%s has encountered an error. It was likely caused by running out of memory. "
-"If you are sure you have enough RAM on your system, this may also be a bug "
-"and we would be glad if you reported it.\n"
+"%s has encountered an error. It was likely caused by running out of memory. If "
+"you are sure you have enough RAM on your system, this may also be a bug and we "
+"would be glad if you reported it.\n"
 "\n"
 "The application will now terminate."
 msgstr ""
-"%s encontrou um erro. Provavelmente foi causado por ficar sem memória. Se "
-"você tem certeza que você tem RAM suficiente em seu sistema, isso também "
-"pode ser um bug e nós estaríamos contentes se você relatou.\n"
+"%s encontrou um erro. Provavelmente foi causado por ficar sem memória. Se você "
+"tem certeza que você tem RAM suficiente em seu sistema, isso também pode ser "
+"um bug e nós estaríamos contentes se você relatou.\n"
 "\n"
 "O aplicativo será encerrado agora."
 
-#: src/slic3r/GUI/GUI_App.cpp:141
+#: src/slic3r/GUI/GUI_App.cpp:531
 msgid "Fatal error"
 msgstr "Erro fatal"
 
-#: src/slic3r/GUI/GUI_App.cpp:446
-msgid "Changing of an application language"
-msgstr "Alteração de um idioma do aplicativo"
+#: src/slic3r/GUI/GUI_App.cpp:655 src/slic3r/GUI/GUI_App.cpp:670
+msgid ""
+"Error parsing PrusaSlicer config file, it is probably corrupted. Try to "
+"manually delete the file to recover from the error. Your user profiles will "
+"not be affected."
+msgstr ""
+"Erro de análise da config do arquivo, ele provavelmente está corrompido. Tente "
+"excluir manualmente o arquivo para recuperar do erro. Seus perfis de usuário "
+"não serão afetados."
 
-#: src/slic3r/GUI/GUI_App.cpp:454 src/slic3r/GUI/GUI_App.cpp:463
+#: src/slic3r/GUI/GUI_App.cpp:661
+msgid ""
+"Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to "
+"manually delete the file to recover from the error."
+msgstr ""
+"Erro de análise PrusaGCodeViewer, ele provavelmente está corrompido. Tente "
+"excluir manualmente o arquivo para recuperar do erro. "
+
+#: src/slic3r/GUI/GUI_App.cpp:718
+#, c-format
+msgid ""
+"%s\n"
+"Do you want to continue?"
+msgstr ""
+"%s\n"
+"\vVocê tem certeza que deseja continuar?"
+
+#: src/slic3r/GUI/GUI_App.cpp:720 src/slic3r/GUI/UnsavedChangesDialog.cpp:653
+msgid "Remember my choice"
+msgstr "Lembrar minha escolha"
+
+#: src/slic3r/GUI/GUI_App.cpp:759
+msgid "Loading configuration..."
+msgstr "Carregando a config..."
+
+#: src/slic3r/GUI/GUI_App.cpp:825
+msgid "Creating settings tabs..."
+msgstr "C&onfig. de impressão."
+
+#: src/slic3r/GUI/GUI_App.cpp:1078
+msgid ""
+"You have the following presets with saved options for \"Print Host upload\""
+msgstr ""
+"Você tem a seguinte predefinição com opções salvas para o \"Print Host upload\""
+
+#: src/slic3r/GUI/GUI_App.cpp:1082
+msgid ""
+"But from this version of PrusaSlicer we don't show/use this information in "
+"Printer Settings.\n"
+"Now, this information will be exposed in physical printers settings."
+msgstr ""
+"Mas a partir dessa versão do PrusaSlicer, não mostramos/usamos esta informação "
+"nas Configurações de Impressora.\n"
+"Agora essa informação vai ser exposta em configurações das impressoras físicas"
+
+#: src/slic3r/GUI/GUI_App.cpp:1084
+msgid ""
+"By default new Printer devices will be named as \"Printer N\" during its "
+"creation.\n"
+"Note: This name can be changed later from the physical printers settings"
+msgstr ""
+"Por padrão, novas impressoras vão ser nomeadas como \"Printer N\" durante a "
+"sua criação.\n"
+"Nota: Esse nome pode ser alterado depois a partir das configurações de "
+"impressoras físicas "
+
+#: src/slic3r/GUI/GUI_App.cpp:1087 src/slic3r/GUI/Tab.cpp:3435
+msgid "Information"
+msgstr "Informação"
+
+#: src/slic3r/GUI/GUI_App.cpp:1102 src/slic3r/GUI/GUI_App.cpp:1115
 msgid "Recreating"
 msgstr "Recriando"
 
-#: src/slic3r/GUI/GUI_App.cpp:470
+#: src/slic3r/GUI/GUI_App.cpp:1120
 msgid "Loading of current presets"
 msgstr "Carregando presets"
 
-#: src/slic3r/GUI/GUI_App.cpp:478
+#: src/slic3r/GUI/GUI_App.cpp:1125
 msgid "Loading of a mode view"
 msgstr "Carregamento de um modelo de vista"
 
-#: src/slic3r/GUI/GUI_App.cpp:559
+#: src/slic3r/GUI/GUI_App.cpp:1208
 msgid "Choose one file (3MF/AMF):"
 msgstr "Escolha um arquivo (3MF/AMF):"
 
-#: src/slic3r/GUI/GUI_App.cpp:571
+#: src/slic3r/GUI/GUI_App.cpp:1220
 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Escolha um ou mais arquivos (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/GUI_App.cpp:633
+#: src/slic3r/GUI/GUI_App.cpp:1233
+msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):"
+msgstr "Escolha um arquivo (GCODE/.GCO/.G/.ngc/NGC):"
+
+#: src/slic3r/GUI/GUI_App.cpp:1245
+msgid "Changing of an application language"
+msgstr "Alteração de um idioma do aplicativo"
+
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Select the language"
-msgstr "Selecione a linguagem"
+msgstr "Selecione o idioma"
 
-#: src/slic3r/GUI/GUI_App.cpp:633
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Language"
-msgstr "Linguagem"
+msgstr "Idioma"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1425
+msgid "modified"
+msgstr "modificado"
+
+#: src/slic3r/GUI/GUI_App.cpp:1474
 #, c-format
 msgid "Run %s"
 msgstr "Executar %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:804
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "&Configuration Snapshots"
-msgstr "&Captura das config."
+msgstr "&Captura das config"
 
-#: src/slic3r/GUI/GUI_App.cpp:804
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "Inspect / activate configuration snapshots"
-msgstr "Inspecionar / ativar capturas de config."
+msgstr "Inspecionar / ativar capturas de config"
 
-#: src/slic3r/GUI/GUI_App.cpp:805
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Take Configuration &Snapshot"
-msgstr "Capturar &config."
+msgstr "Capturar &config"
 
-#: src/slic3r/GUI/GUI_App.cpp:805
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Capture a configuration snapshot"
-msgstr "Capturar uma config."
+msgstr "Capturar uma config"
 
-#: src/slic3r/GUI/GUI_App.cpp:806
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for updates"
 msgstr "Verificar Atualizações"
 
-#: src/slic3r/GUI/GUI_App.cpp:806
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for configuration updates"
 msgstr "Verificar atualizações nas aplicações"
 
-#: src/slic3r/GUI/GUI_App.cpp:808
+#: src/slic3r/GUI/GUI_App.cpp:1487
 msgid "&Preferences"
 msgstr "&Preferências"
 
-#: src/slic3r/GUI/GUI_App.cpp:814
+#: src/slic3r/GUI/GUI_App.cpp:1493
 msgid "Application preferences"
 msgstr "Preferências de aplicação"
 
-#: src/slic3r/GUI/GUI_App.cpp:817 src/slic3r/GUI/wxExtensions.cpp:756
+#: src/slic3r/GUI/GUI_App.cpp:1504 src/slic3r/GUI/wxExtensions.cpp:673
 msgid "Simple"
 msgstr "Simples"
 
-#: src/slic3r/GUI/GUI_App.cpp:817
+#: src/slic3r/GUI/GUI_App.cpp:1504
 msgid "Simple View Mode"
 msgstr "Modo simples de visualização"
 
-#: src/slic3r/GUI/GUI_App.cpp:818 src/slic3r/GUI/GUI_ObjectList.cpp:104
-#: src/slic3r/GUI/GUI_ObjectList.cpp:623 src/slic3r/GUI/Tab.cpp:1086
-#: src/slic3r/GUI/Tab.cpp:1101 src/slic3r/GUI/Tab.cpp:1200
-#: src/slic3r/GUI/Tab.cpp:1203 src/slic3r/GUI/Tab.cpp:1469
-#: src/slic3r/GUI/Tab.cpp:1969 src/slic3r/GUI/Tab.cpp:3665
-#: src/slic3r/GUI/wxExtensions.cpp:757 src/libslic3r/PrintConfig.cpp:88
-#: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223
-#: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2276
-#: src/libslic3r/PrintConfig.cpp:2448
+#: src/slic3r/GUI/GUI_App.cpp:1506 src/slic3r/GUI/wxExtensions.cpp:675
+msgctxt "Mode"
 msgid "Advanced"
 msgstr "Avançado"
 
-#: src/slic3r/GUI/GUI_App.cpp:818
+#: src/slic3r/GUI/GUI_App.cpp:1506
 msgid "Advanced View Mode"
 msgstr "Modo avançado de visualização"
 
-#: src/slic3r/GUI/GUI_App.cpp:819 src/slic3r/GUI/wxExtensions.cpp:758
+#: src/slic3r/GUI/GUI_App.cpp:1507 src/slic3r/GUI/wxExtensions.cpp:676
 msgid "Expert"
 msgstr "Especialista"
 
-#: src/slic3r/GUI/GUI_App.cpp:819
+#: src/slic3r/GUI/GUI_App.cpp:1507
 msgid "Expert View Mode"
 msgstr "Modo especialista de visualização"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1512
 msgid "Mode"
 msgstr "Modo"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1512
 #, c-format
 msgid "%s View Mode"
 msgstr "%s Modo de visualização"
 
-#: src/slic3r/GUI/GUI_App.cpp:826
+#: src/slic3r/GUI/GUI_App.cpp:1517
 msgid "&Language"
 msgstr "&Linguagem"
 
-#: src/slic3r/GUI/GUI_App.cpp:828
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Flash printer &firmware"
 msgstr "Atualizar firmware &da impressora"
 
-#: src/slic3r/GUI/GUI_App.cpp:828
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Upload a firmware image into an Arduino based printer"
 msgstr "Atualizar o firmware para uma impressora baseada em Arduino"
 
-#: src/slic3r/GUI/GUI_App.cpp:843
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Taking configuration snapshot"
-msgstr "Capturando a config."
+msgstr "Capturando a config"
 
-#: src/slic3r/GUI/GUI_App.cpp:843
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Snapshot name"
 msgstr "Nome da captura"
 
-#: src/slic3r/GUI/GUI_App.cpp:886
+#: src/slic3r/GUI/GUI_App.cpp:1605 src/slic3r/GUI/GUI_App.cpp:1614
+msgid "Language selection"
+msgstr "Seleção de linguagem"
+
+#: src/slic3r/GUI/GUI_App.cpp:1608
 msgid ""
 "Switching the language will trigger application restart.\n"
 "You will lose content of the plater."
@@ -2250,96 +2772,84 @@ msgstr ""
 "Alterar a linguagem fará com que o aplicativo reinicie.\n"
 "Você irá perder conteúdo na bandeja."
 
-#: src/slic3r/GUI/GUI_App.cpp:888
+#: src/slic3r/GUI/GUI_App.cpp:1610
 msgid "Do you want to proceed?"
 msgstr "Você quer prosseguir?"
 
-#: src/slic3r/GUI/GUI_App.cpp:889
-msgid "Language selection"
-msgstr "Seleção de linguagem"
-
-#: src/slic3r/GUI/GUI_App.cpp:912
+#: src/slic3r/GUI/GUI_App.cpp:1645
 msgid "&Configuration"
 msgstr "&Configuração"
 
-#: src/slic3r/GUI/GUI_App.cpp:936
-msgid "The presets on the following tabs were modified"
-msgstr "Os presets seguintes foram modificados"
+#: src/slic3r/GUI/GUI_App.cpp:1676
+msgid "The preset(s) modifications are successfully saved"
+msgstr "As modificações da(s) predefinição(ões) foram salvas com sucesso"
 
-#: src/slic3r/GUI/GUI_App.cpp:936 src/slic3r/GUI/Tab.cpp:2948
-msgid "Discard changes and continue anyway?"
-msgstr "Descartar mudanças e continuar assim mesmo?"
-
-#: src/slic3r/GUI/GUI_App.cpp:939
-msgid "Unsaved Presets"
-msgstr "config. não salvas"
-
-#: src/slic3r/GUI/GUI_App.cpp:1088 src/slic3r/GUI/Tab.cpp:2960
+#: src/slic3r/GUI/GUI_App.cpp:1876 src/slic3r/GUI/Tab.cpp:3187
 msgid "It's impossible to print multi-part object(s) with SLA technology."
-msgstr ""
-"É impossível imprimir objetos com múltiplas partes com a tecnologia SLA."
+msgstr "É impossível imprimir objetos com múltiplas partes com a tecnologia SLA."
 
-#: src/slic3r/GUI/GUI_App.cpp:1089
+#: src/slic3r/GUI/GUI_App.cpp:1877
 msgid "Please check and fix your object list."
 msgstr "Favor verificar e concertar sua lista de objetos."
 
-#: src/slic3r/GUI/GUI_App.cpp:1090 src/slic3r/GUI/Plater.cpp:2315
-#: src/slic3r/GUI/Tab.cpp:2962
+#: src/slic3r/GUI/GUI_App.cpp:1878 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210
+#: src/slic3r/GUI/Plater.cpp:2256 src/slic3r/GUI/Tab.cpp:3189
 msgid "Attention!"
 msgstr "Atenção!"
 
-#: src/slic3r/GUI/GUI_App.cpp:1107
+#: src/slic3r/GUI/GUI_App.cpp:1895
 msgid "Select a gcode file:"
 msgstr "Selecione um arquivo gcode:"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Start at height"
 msgstr "Começar na altura"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Stop at height"
 msgstr "Parar na altura"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:153
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:161
 msgid "Remove layer range"
 msgstr "Remover limite da camada"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:162
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:165
 msgid "Add layer range"
 msgstr "Adicionar limite da camada"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:95
-#: src/slic3r/GUI/GUI_ObjectList.cpp:614 src/libslic3r/PrintConfig.cpp:72
-#: src/libslic3r/PrintConfig.cpp:175 src/libslic3r/PrintConfig.cpp:184
-#: src/libslic3r/PrintConfig.cpp:408 src/libslic3r/PrintConfig.cpp:470
-#: src/libslic3r/PrintConfig.cpp:478 src/libslic3r/PrintConfig.cpp:890
-#: src/libslic3r/PrintConfig.cpp:1075 src/libslic3r/PrintConfig.cpp:1374
-#: src/libslic3r/PrintConfig.cpp:1441 src/libslic3r/PrintConfig.cpp:1622
-#: src/libslic3r/PrintConfig.cpp:2074 src/libslic3r/PrintConfig.cpp:2133
-#: src/libslic3r/PrintConfig.cpp:2142
+#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:92
+#: src/slic3r/GUI/GUI_ObjectList.cpp:651 src/libslic3r/PrintConfig.cpp:72
+#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:218
+#: src/libslic3r/PrintConfig.cpp:442 src/libslic3r/PrintConfig.cpp:506
+#: src/libslic3r/PrintConfig.cpp:514 src/libslic3r/PrintConfig.cpp:932
+#: src/libslic3r/PrintConfig.cpp:1119 src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1549 src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:2217 src/libslic3r/PrintConfig.cpp:2276
+#: src/libslic3r/PrintConfig.cpp:2285
 msgid "Layers and Perimeters"
 msgstr "Camadas e perímetros"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:97
-#: src/slic3r/GUI/GUI_ObjectList.cpp:616 src/slic3r/GUI/GUI_Preview.cpp:246
-#: src/slic3r/GUI/Tab.cpp:1119 src/slic3r/GUI/Tab.cpp:1120
-#: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370
-#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1866
-#: src/libslic3r/PrintConfig.cpp:1872 src/libslic3r/PrintConfig.cpp:1880
-#: src/libslic3r/PrintConfig.cpp:1892 src/libslic3r/PrintConfig.cpp:1902
-#: src/libslic3r/PrintConfig.cpp:1910 src/libslic3r/PrintConfig.cpp:1925
-#: src/libslic3r/PrintConfig.cpp:1946 src/libslic3r/PrintConfig.cpp:1958
-#: src/libslic3r/PrintConfig.cpp:1974 src/libslic3r/PrintConfig.cpp:1983
-#: src/libslic3r/PrintConfig.cpp:1992 src/libslic3r/PrintConfig.cpp:2003
-#: src/libslic3r/PrintConfig.cpp:2017 src/libslic3r/PrintConfig.cpp:2025
-#: src/libslic3r/PrintConfig.cpp:2026 src/libslic3r/PrintConfig.cpp:2035
-#: src/libslic3r/PrintConfig.cpp:2043 src/libslic3r/PrintConfig.cpp:2057
+#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:95
+#: src/slic3r/GUI/GUI_ObjectList.cpp:654 src/slic3r/GUI/GUI_Preview.cpp:311
+#: src/slic3r/GUI/Tab.cpp:1449 src/slic3r/GUI/Tab.cpp:1450
+#: src/libslic3r/ExtrusionEntity.cpp:324 src/libslic3r/ExtrusionEntity.cpp:356
+#: src/libslic3r/PrintConfig.cpp:404 src/libslic3r/PrintConfig.cpp:1610
+#: src/libslic3r/PrintConfig.cpp:2008 src/libslic3r/PrintConfig.cpp:2014
+#: src/libslic3r/PrintConfig.cpp:2022 src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2044 src/libslic3r/PrintConfig.cpp:2052
+#: src/libslic3r/PrintConfig.cpp:2067 src/libslic3r/PrintConfig.cpp:2088
+#: src/libslic3r/PrintConfig.cpp:2100 src/libslic3r/PrintConfig.cpp:2116
+#: src/libslic3r/PrintConfig.cpp:2125 src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2145 src/libslic3r/PrintConfig.cpp:2159
+#: src/libslic3r/PrintConfig.cpp:2167 src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2177 src/libslic3r/PrintConfig.cpp:2185
+#: src/libslic3r/PrintConfig.cpp:2199
 msgid "Support material"
 msgstr "Material de suporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101
-#: src/slic3r/GUI/GUI_ObjectList.cpp:620 src/libslic3r/PrintConfig.cpp:2252
-#: src/libslic3r/PrintConfig.cpp:2260
+#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:99
+#: src/slic3r/GUI/GUI_ObjectList.cpp:658 src/libslic3r/PrintConfig.cpp:2395
+#: src/libslic3r/PrintConfig.cpp:2403
 msgid "Wipe options"
 msgstr "Opções de limpeza"
 
@@ -2363,611 +2873,658 @@ msgstr "Adicionar reforço de suporte"
 msgid "Add support blocker"
 msgstr "Adicionar bloqueador de suporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:617
-#: src/slic3r/GUI/GUI_Preview.cpp:224 src/slic3r/GUI/Tab.cpp:1144
-#: src/libslic3r/PrintConfig.cpp:235 src/libslic3r/PrintConfig.cpp:458
-#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1048
-#: src/libslic3r/PrintConfig.cpp:1431 src/libslic3r/PrintConfig.cpp:1668
-#: src/libslic3r/PrintConfig.cpp:1716 src/libslic3r/PrintConfig.cpp:1768
-#: src/libslic3r/PrintConfig.cpp:2118
+#: src/slic3r/GUI/GUI_ObjectList.cpp:94 src/slic3r/GUI/GUI_ObjectList.cpp:653
+#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1420
+#: src/libslic3r/ExtrusionEntity.cpp:320 src/libslic3r/ExtrusionEntity.cpp:348
+#: src/libslic3r/PrintConfig.cpp:1126 src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1146 src/libslic3r/PrintConfig.cpp:1156
+msgid "Ironing"
+msgstr "Passar ferro"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:96 src/slic3r/GUI/GUI_ObjectList.cpp:655
+#: src/slic3r/GUI/GUI_Preview.cpp:278 src/slic3r/GUI/Tab.cpp:1474
+#: src/libslic3r/PrintConfig.cpp:269 src/libslic3r/PrintConfig.cpp:494
+#: src/libslic3r/PrintConfig.cpp:963 src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1165 src/libslic3r/PrintConfig.cpp:1539
+#: src/libslic3r/PrintConfig.cpp:1776 src/libslic3r/PrintConfig.cpp:1831
+#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:2261
 msgid "Speed"
 msgstr "Velocidade"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:618
-#: src/slic3r/GUI/Tab.cpp:1179 src/slic3r/GUI/Tab.cpp:1840
-#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002
-#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1737
-#: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1965
+#: src/slic3r/GUI/GUI_ObjectList.cpp:97 src/slic3r/GUI/GUI_ObjectList.cpp:656
+#: src/slic3r/GUI/Tab.cpp:1510 src/slic3r/GUI/Tab.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:524 src/libslic3r/PrintConfig.cpp:1046
+#: src/libslic3r/PrintConfig.cpp:1517 src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:2080 src/libslic3r/PrintConfig.cpp:2107
 msgid "Extruders"
 msgstr "Exrtrusoras"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:619
-#: src/libslic3r/PrintConfig.cpp:447 src/libslic3r/PrintConfig.cpp:555
-#: src/libslic3r/PrintConfig.cpp:877 src/libslic3r/PrintConfig.cpp:1010
-#: src/libslic3r/PrintConfig.cpp:1418 src/libslic3r/PrintConfig.cpp:1757
-#: src/libslic3r/PrintConfig.cpp:1947 src/libslic3r/PrintConfig.cpp:2106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:657
+#: src/libslic3r/PrintConfig.cpp:483 src/libslic3r/PrintConfig.cpp:591
+#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1054
+#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1872
+#: src/libslic3r/PrintConfig.cpp:2089 src/libslic3r/PrintConfig.cpp:2249
 msgid "Extrusion Width"
 msgstr "Espessura da extrusão"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:625
-#: src/slic3r/GUI/Plater.cpp:495 src/slic3r/GUI/Tab.cpp:3606
-#: src/slic3r/GUI/Tab.cpp:3607 src/libslic3r/PrintConfig.cpp:2614
-#: src/libslic3r/PrintConfig.cpp:2621 src/libslic3r/PrintConfig.cpp:2630
-#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2649
-#: src/libslic3r/PrintConfig.cpp:2685 src/libslic3r/PrintConfig.cpp:2692
-#: src/libslic3r/PrintConfig.cpp:2703 src/libslic3r/PrintConfig.cpp:2713
-#: src/libslic3r/PrintConfig.cpp:2722 src/libslic3r/PrintConfig.cpp:2735
-#: src/libslic3r/PrintConfig.cpp:2745 src/libslic3r/PrintConfig.cpp:2754
-#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2775
-#: src/libslic3r/PrintConfig.cpp:2783
+#: src/slic3r/GUI/GUI_ObjectList.cpp:102 src/slic3r/GUI/GUI_ObjectList.cpp:661
+#: src/slic3r/GUI/Tab.cpp:1409 src/slic3r/GUI/Tab.cpp:1430
+#: src/slic3r/GUI/Tab.cpp:1531 src/slic3r/GUI/Tab.cpp:1534
+#: src/slic3r/GUI/Tab.cpp:1816 src/slic3r/GUI/Tab.cpp:2152
+#: src/slic3r/GUI/Tab.cpp:4080 src/libslic3r/PrintConfig.cpp:90
+#: src/libslic3r/PrintConfig.cpp:121 src/libslic3r/PrintConfig.cpp:257
+#: src/libslic3r/PrintConfig.cpp:1081 src/libslic3r/PrintConfig.cpp:2419
+#: src/libslic3r/PrintConfig.cpp:2591
+msgid "Advanced"
+msgstr "Avançado"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:663
+#: src/slic3r/GUI/Plater.cpp:361 src/slic3r/GUI/Tab.cpp:4014
+#: src/slic3r/GUI/Tab.cpp:4015 src/libslic3r/PrintConfig.cpp:2757
+#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2773
+#: src/libslic3r/PrintConfig.cpp:2782 src/libslic3r/PrintConfig.cpp:2792
+#: src/libslic3r/PrintConfig.cpp:2802 src/libslic3r/PrintConfig.cpp:2839
+#: src/libslic3r/PrintConfig.cpp:2846 src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:2867 src/libslic3r/PrintConfig.cpp:2876
+#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899
+#: src/libslic3r/PrintConfig.cpp:2908 src/libslic3r/PrintConfig.cpp:2918
+#: src/libslic3r/PrintConfig.cpp:2929 src/libslic3r/PrintConfig.cpp:2937
 msgid "Supports"
 msgstr "Suportes"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:626
-#: src/slic3r/GUI/Plater.cpp:635 src/slic3r/GUI/Tab.cpp:3640
-#: src/slic3r/GUI/Tab.cpp:3641 src/libslic3r/PrintConfig.cpp:2791
-#: src/libslic3r/PrintConfig.cpp:2798 src/libslic3r/PrintConfig.cpp:2812
-#: src/libslic3r/PrintConfig.cpp:2823 src/libslic3r/PrintConfig.cpp:2833
-#: src/libslic3r/PrintConfig.cpp:2855 src/libslic3r/PrintConfig.cpp:2866
-#: src/libslic3r/PrintConfig.cpp:2873 src/libslic3r/PrintConfig.cpp:2880
-#: src/libslic3r/PrintConfig.cpp:2891 src/libslic3r/PrintConfig.cpp:2900
-#: src/libslic3r/PrintConfig.cpp:2909
+#: src/slic3r/GUI/GUI_ObjectList.cpp:105 src/slic3r/GUI/GUI_ObjectList.cpp:664
+#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Tab.cpp:4055
+#: src/slic3r/GUI/Tab.cpp:4056 src/slic3r/GUI/Tab.cpp:4127
+#: src/libslic3r/PrintConfig.cpp:2945 src/libslic3r/PrintConfig.cpp:2952
+#: src/libslic3r/PrintConfig.cpp:2966 src/libslic3r/PrintConfig.cpp:2977
+#: src/libslic3r/PrintConfig.cpp:2987 src/libslic3r/PrintConfig.cpp:3009
+#: src/libslic3r/PrintConfig.cpp:3020 src/libslic3r/PrintConfig.cpp:3027
+#: src/libslic3r/PrintConfig.cpp:3034 src/libslic3r/PrintConfig.cpp:3045
+#: src/libslic3r/PrintConfig.cpp:3054 src/libslic3r/PrintConfig.cpp:3063
 msgid "Pad"
 msgstr "Bloco"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3658
-#: src/slic3r/GUI/Tab.cpp:3659 src/libslic3r/SLA/Hollowing.cpp:46
-#: src/libslic3r/SLA/Hollowing.cpp:58 src/libslic3r/SLA/Hollowing.cpp:67
-#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2919
-#: src/libslic3r/PrintConfig.cpp:2926 src/libslic3r/PrintConfig.cpp:2936
-#: src/libslic3r/PrintConfig.cpp:2945
+#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4073
+#: src/slic3r/GUI/Tab.cpp:4074 src/libslic3r/SLA/Hollowing.cpp:45
+#: src/libslic3r/SLA/Hollowing.cpp:57 src/libslic3r/SLA/Hollowing.cpp:66
+#: src/libslic3r/SLA/Hollowing.cpp:75 src/libslic3r/PrintConfig.cpp:3073
+#: src/libslic3r/PrintConfig.cpp:3080 src/libslic3r/PrintConfig.cpp:3090
+#: src/libslic3r/PrintConfig.cpp:3099
 msgid "Hollowing"
 msgstr "Deixar oco"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:270
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:153
+#: src/slic3r/GUI/GUI_ObjectList.cpp:284
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:161
 msgid "Name"
 msgstr "Nome"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:278 src/slic3r/GUI/Tab.cpp:1433
-#: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487
-msgid "Extruder"
-msgstr "Extrusora"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:282 src/slic3r/GUI/GUI_ObjectList.cpp:395
+#: src/slic3r/GUI/GUI_ObjectList.cpp:300 src/slic3r/GUI/GUI_ObjectList.cpp:441
 msgid "Editing"
 msgstr "Edição"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:340
+#: src/slic3r/GUI/GUI_ObjectList.cpp:386
 #, c-format
 msgid "Auto-repaired (%d errors):"
 msgstr "Auto reparando (%d erros):"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:347
+#: src/slic3r/GUI/GUI_ObjectList.cpp:393
 msgid "degenerate facets"
 msgstr "facetas degeneradas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:348
+#: src/slic3r/GUI/GUI_ObjectList.cpp:394
 msgid "edges fixed"
 msgstr "arestas fixadas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:349
+#: src/slic3r/GUI/GUI_ObjectList.cpp:395
 msgid "facets removed"
 msgstr "facetas removidas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:350
+#: src/slic3r/GUI/GUI_ObjectList.cpp:396
 msgid "facets added"
 msgstr "facetas adicionadas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:351
+#: src/slic3r/GUI/GUI_ObjectList.cpp:397
 msgid "facets reversed"
 msgstr "facetas reversidas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:352
+#: src/slic3r/GUI/GUI_ObjectList.cpp:398
 msgid "backwards edges"
 msgstr "arestas viradas para trás"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:360
+#: src/slic3r/GUI/GUI_ObjectList.cpp:406
 msgid "Right button click the icon to fix STL through Netfabb"
-msgstr ""
-"Clique com o botão direito no ícone para arrumar STL através do Netfabb"
+msgstr "Clique com o botão direito no ícone para arrumar STL através do Netfabb"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:397
+#: src/slic3r/GUI/GUI_ObjectList.cpp:443
 msgid "Right button click the icon to change the object settings"
 msgstr "Clique com o botão direito no ícone para mudar as config. do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:399
+#: src/slic3r/GUI/GUI_ObjectList.cpp:445
 msgid "Click the icon to change the object settings"
 msgstr "Clique no ícone para mudar as config. do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:403
+#: src/slic3r/GUI/GUI_ObjectList.cpp:449
 msgid "Right button click the icon to change the object printable property"
 msgstr ""
 "Clique com o botão direito no ícone para mudar a propriedade de impressão do "
 "objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:405
+#: src/slic3r/GUI/GUI_ObjectList.cpp:451
 msgid "Click the icon to change the object printable property"
 msgstr "Clique no ícone para mudar a propriedade de impressão do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:458 src/slic3r/GUI/GUI_ObjectList.cpp:470
-#: src/slic3r/GUI/GUI_ObjectList.cpp:918 src/slic3r/GUI/GUI_ObjectList.cpp:3968
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3978
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4013
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:200
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:257
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:282
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:490
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:1753
-msgid "default"
-msgstr "padrão"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:537
+#: src/slic3r/GUI/GUI_ObjectList.cpp:574
 msgid "Change Extruder"
 msgstr "Mudar extrusora"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:552
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Object"
 msgstr "Renomear objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:552
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Sub-object"
 msgstr "Renomear sub-objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1092
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3782
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1215 src/slic3r/GUI/GUI_ObjectList.cpp:4244
 msgid "Instances to Separated Objects"
 msgstr "Instâncias para separar objetos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1107
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Volumes in Object reordered"
 msgstr "Volume reorganizados no objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1107
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Object reordered"
 msgstr "Objeto reorganizado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1183
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1531
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1537
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1850
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1306 src/slic3r/GUI/GUI_ObjectList.cpp:1661
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1667 src/slic3r/GUI/GUI_ObjectList.cpp:2008
 #, c-format
 msgid "Quick Add Settings (%s)"
 msgstr "Adicionar config. rapidamente (%s)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1266
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1396
 msgid "Select showing settings"
 msgstr "Selecionar config. mostradas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1315
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1445
 msgid "Add Settings for Layers"
 msgstr "Adicionar config. para camadas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1316
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1446
 msgid "Add Settings for Sub-object"
 msgstr "Adicionar config. para sub-objetos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1317
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1447
 msgid "Add Settings for Object"
 msgstr "Adicionar config. para objetos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1387
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1517
 msgid "Add Settings Bundle for Height range"
 msgstr "Adicionar pacote de config. para intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1388
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1518
 msgid "Add Settings Bundle for Sub-object"
 msgstr "Adicionar pacote de config. para subobjeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1389
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1519
 msgid "Add Settings Bundle for Object"
 msgstr "Adicionar pacote de config. para objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1428
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1558
 msgid "Load"
 msgstr "Carregar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1433
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1465
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1469
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563 src/slic3r/GUI/GUI_ObjectList.cpp:1595
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
 msgid "Box"
 msgstr "Caixa"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1433
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Cylinder"
 msgstr "Cilindro"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1433
-msgid "Sphere"
-msgstr "Esfera"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1433
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Slab"
 msgstr "Placa"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1501
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1631
 msgid "Height range Modifier"
 msgstr "Modificador de intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1510
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1640
 msgid "Add settings"
-msgstr "Adicionar config."
+msgstr "Adicionar config"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1590
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1718
 msgid "Change type"
 msgstr "Mudar o tipo"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1600
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1612
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1728 src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Object"
 msgstr "Configurar como objeto separado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1612
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Objects"
 msgstr "Definir como objetos separados"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1622
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1750
 msgid "Printable"
 msgstr "Imprimível"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1637
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1765
 msgid "Rename"
 msgstr "Renomear"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1648
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
 msgid "Fix through the Netfabb"
 msgstr "Arrumar através do Netfabb"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1658 src/slic3r/GUI/Plater.cpp:3968
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3884
 msgid "Export as STL"
 msgstr "Exportar como STL"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1665
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3957 src/slic3r/GUI/Plater.cpp:3936
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1793 src/slic3r/GUI/GUI_ObjectList.cpp:4439
+#: src/slic3r/GUI/Plater.cpp:3852
 msgid "Reload the selected volumes from disk"
 msgstr "Recarregue os volumes selecionados do disco"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1672
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Set extruder for selected items"
 msgstr "Definir extrusora para itens selecionados"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1705 src/libslic3r/PrintConfig.cpp:335
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1832 src/libslic3r/PrintConfig.cpp:369
 msgid "Default"
 msgstr "Padrão"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1725
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale to print volume"
 msgstr "Escalar para volume de impressão"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1725
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale the selected object to fit the print volume"
 msgstr "Escale o objeto selecionado para se adequar ao volume de impressão"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1794
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2052
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4886
+msgid "Convert from imperial units"
+msgstr "Converter de unidades imperiais"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4886
+msgid "Revert conversion from imperial units"
+msgstr "Reverter conversão de unidades imperiais"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868 src/slic3r/GUI/GUI_ObjectList.cpp:1876
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2569 src/libslic3r/PrintConfig.cpp:3641
+msgid "Merge"
+msgstr "Mesclar"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+msgid "Merge objects to the one multipart object"
+msgstr "Mesclar objetos para um objeto multiparte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+msgid "Merge objects to the one single object"
+msgstr "Mesclar objetos para um único objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1953 src/slic3r/GUI/GUI_ObjectList.cpp:2210
 msgid "Add Shape"
 msgstr "Adicionar forma"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1880
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2038
 msgid "Load Part"
 msgstr "Carregar parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1919
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2077
 msgid "Error!"
 msgstr "Erro!"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1994
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
 msgid "Add Generic Subobject"
 msgstr "Adicionar sub-objeto genérico"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2023
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2181
 msgid "Generic"
 msgstr "Genérico"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2141
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2243
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2307 src/slic3r/GUI/GUI_ObjectList.cpp:2408
 msgid "Last instance of an object cannot be deleted."
 msgstr "A última instância de um objeto não pode ser excluída."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2153
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2319
 msgid "Delete Settings"
-msgstr "Deletar config."
+msgstr "Deletar config"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2177
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2341
 msgid "Delete All Instances from Object"
 msgstr "Excluir todas as instâncias do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2193
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2357
 msgid "Delete Height Range"
 msgstr "Excluir limite de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2224
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2389
 msgid "From Object List You can't delete the last solid part from object."
 msgstr ""
 "Na lista de objetos não é possível excluir a última parte sólida do objeto."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2228
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2393
 msgid "Delete Subobject"
 msgstr "Deletar sub-objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2247
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
 msgid "Delete Instance"
 msgstr "Deletar instância"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2271 src/slic3r/GUI/Plater.cpp:2980
-msgid ""
-"The selected object couldn't be split because it contains only one part."
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2771
+msgid "The selected object couldn't be split because it contains only one part."
 msgstr "O seguinte objeto não pode ser dividido pois contém uma parte."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2275
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2440
 msgid "Split to Parts"
 msgstr "Dividir em partes"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2329
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2576
+msgid "Merged"
+msgstr "Mesclado"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2660
+msgid "Merge all parts to the one single object"
+msgstr "Mesclar todas partes para um único objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2692
 msgid "Add Layers"
 msgstr "Adicionar camadas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2455
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2846
 msgid "Group manipulation"
 msgstr "Manipulação de grupos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2467
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2858
 msgid "Object manipulation"
 msgstr "Manipulação de objetos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2480
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2871
 msgid "Object Settings to modify"
-msgstr "config. do objeto para modificar"
+msgstr "Config. do objeto para modificar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2484
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2875
 msgid "Part Settings to modify"
-msgstr "config. da parte para modificar"
+msgstr "Config. da parte para modificar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2489
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2880
 msgid "Layer range Settings to modify"
-msgstr "config. de intervalo de camada para modificar"
+msgstr "Config. de intervalo de camada para modificar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2495
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2886
 msgid "Part manipulation"
 msgstr "Manipulação da parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2501
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2892
 msgid "Instance manipulation"
 msgstr "Manipulação da instância"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2508
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Height ranges"
 msgstr "Limites de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2508
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Settings for height range"
-msgstr "config. para intervalo de altura"
+msgstr "Config. para intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2694
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3083
 msgid "Delete Selected Item"
 msgstr "Excluir item selecionado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2831
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3221
 msgid "Delete Selected"
 msgstr "Excluir seleção"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2897
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2926
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2944
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3297 src/slic3r/GUI/GUI_ObjectList.cpp:3325
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3345
 msgid "Add Height Range"
 msgstr "Adicionar intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3004
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3391
+msgid ""
+"Cannot insert a new layer range after the current layer range.\n"
+"The next layer range is too thin to be split to two\n"
+"without violating the minimum layer height."
+msgstr ""
+"Não é possível inserir um novo intervalo de camada após o atual intervalo de "
+"camada\n"
+"O próximo intervalo de camada é muito fino para ser separado em dois\n"
+"sem violar a altura mínima de camada."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3395
+msgid ""
+"Cannot insert a new layer range between the current and the next layer range.\n"
+"The gap between the current layer range and the next layer range\n"
+"is thinner than the minimum layer height allowed."
+msgstr ""
+"Não é possível inserir um novo intervalo de camada entre o atual e o próximo "
+"intervalo de camada.\n"
+"O vão entre o atual intervalo de camada e o próximo intervalo de camada\n"
+"é mais fino que a altura de camada mínima permitida."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3400
+msgid ""
+"Cannot insert a new layer range after the current layer range.\n"
+"Current layer range overlaps with the next layer range."
+msgstr ""
+"Não é possível inserir um novo intervalo de camada após o atual intervalo de "
+"camada\n"
+"Intervalo de altura atual se sobrepões com o próximo intervalo."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3459
 msgid "Edit Height Range"
 msgstr "Editar intervalo de altura"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3292
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3754
 msgid "Selection-Remove from list"
 msgstr "Seleção-Remover da lista"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3300
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3762
 msgid "Selection-Add from list"
 msgstr "Seleção-Adicionar da lista"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3880
 msgid "Object or Instance"
 msgstr "Objeto ou instância"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3419
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3552
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881 src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Part"
 msgstr "Parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3419
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
 msgid "Layer"
 msgstr "Camada"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3421
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3883
 msgid "Unsupported selection"
 msgstr "Seleção não suportada"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3422
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
 #, c-format
 msgid "You started your selection with %s Item."
 msgstr "Você iniciou sua seleção com o item de %s."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3423
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3885
 #, c-format
 msgid "In this mode you can select only other %s Items%s"
 msgstr "Neste modo, você pode selecionar apenas outros %s itens%s"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3426
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3888
 msgid "of a current Object"
 msgstr "de um objeto atual"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3431
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3506 src/slic3r/GUI/Plater.cpp:141
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3893 src/slic3r/GUI/GUI_ObjectList.cpp:3968
+#: src/slic3r/GUI/Plater.cpp:147
 msgid "Info"
 msgstr "Informação"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3547
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4009
 msgid "You can't change a type of the last solid part of the object."
 msgstr "Não é possível alterar um tipo da última parte sólida do objeto."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3552
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Modifier"
 msgstr "Modificador"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3552
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Enforcer"
 msgstr "Reforçador de suporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3552
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Blocker"
 msgstr "Bloqueador de suporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3554
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Select type of part"
 msgstr "Selecione o tipo de parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3559
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4021
 msgid "Change Part Type"
 msgstr "Mudar o tipo da parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3804
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Enter new name"
 msgstr "Insira o novo nome"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3804
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Renaming"
 msgstr "Renomeando"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3820
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3927 src/slic3r/GUI/Tab.cpp:3458
-#: src/slic3r/GUI/Tab.cpp:3462
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4282 src/slic3r/GUI/GUI_ObjectList.cpp:4409
+#: src/slic3r/GUI/SavePresetDialog.cpp:116
+#: src/slic3r/GUI/SavePresetDialog.cpp:124
 msgid "The supplied name is not valid;"
 msgstr "O nome inserido não é valido;"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3821
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3928 src/slic3r/GUI/Tab.cpp:3459
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4283 src/slic3r/GUI/GUI_ObjectList.cpp:4410
+#: src/slic3r/GUI/SavePresetDialog.cpp:117
 msgid "the following characters are not allowed:"
 msgstr "os seguintes caracteres não são permitidos:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3972
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4458
 msgid "Select extruder number:"
 msgstr "Selecione o número da extrusora:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3973
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4459
 msgid "This extruder will be set for selected items"
 msgstr "Esta extrusora será ajustada para artigos selecionados"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3998
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4484
 msgid "Change Extruders"
 msgstr "Mudar extrusoras"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4095 src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Printable"
 msgstr "Definir como imprimível"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4095 src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Unprintable"
 msgstr "Definir não imprimível"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:62
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:105
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:68
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:111
 msgid "World coordinates"
 msgstr "Coordenadas mundiais"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:63
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:106
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:69
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:112
 msgid "Local coordinates"
 msgstr "Coordenadas locais"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:82
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:88
 msgid "Select coordinate space, in which the transformation will be performed."
 msgstr ""
 "Selecione o espaço de coordenadas, no qual a transformação será executada."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:155 src/libslic3r/GCode.cpp:638
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:163 src/libslic3r/GCode.cpp:623
 msgid "Object name"
 msgstr "Nome do objeto"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:215
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:457
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:223
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:505
 msgid "Position"
 msgstr "Posição"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458
-#: src/slic3r/GUI/Mouse3DController.cpp:271
-#: src/slic3r/GUI/Mouse3DController.cpp:294
-msgid "Rotation"
-msgstr "Rotação"
-
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:271
 #, c-format
 msgid "Toggle %c axis mirroring"
 msgstr "Ativar espelhamento do eixo %c"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:297
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305
 msgid "Set Mirror"
 msgstr "Definir espelhamento"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:337
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:349
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+msgid "in"
+msgstr "pol"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:345
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357
 msgid "Drop to bed"
 msgstr "Soltar na mesa"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:372
 msgid "Reset rotation"
 msgstr "Restabelecer rotação"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:394
 msgid "Reset Rotation"
 msgstr "Restabelecer Rotação"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:397
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:399
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:407
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409
 msgid "Reset scale"
 msgstr "Restabelecer escala"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:459
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:507
 msgid "Scale factors"
 msgstr "Fatores de escala"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:516
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:561
 msgid "Translate"
 msgstr "Tradução"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:578
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:625
 msgid ""
 "You cannot use non-uniform scaling mode for multiple objects/parts selection"
 msgstr ""
-"Não é possível usar o modo de dimensionamento não uniforme para vários "
-"objetos/seleção de peças"
+"Não é possível usar o modo de dimensionamento não uniforme para vários objetos/"
+"seleção de peças"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:750
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:797
 msgid "Set Position"
 msgstr "Definir posição"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:781
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:828
 msgid "Set Orientation"
 msgstr "Definir orientação"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:846
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:893
 msgid "Set Scale"
 msgstr "Definir escala"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:925
 msgid ""
-"The currently manipulated object is tilted (rotation angles are not "
-"multiples of 90°).\n"
-"Non-uniform scaling of tilted objects is only possible in the World "
-"coordinate system,\n"
+"The currently manipulated object is tilted (rotation angles are not multiples "
+"of 90°).\n"
+"Non-uniform scaling of tilted objects is only possible in the World coordinate "
+"system,\n"
 "once the rotation is embedded into the object coordinates."
 msgstr ""
 "O objeto atualmente manipulado é inclinado (os ângulos de rotação não são "
 "múltiplos de 90 °).\n"
-"O dimensionamento não uniforme de objetos inclinados só é possível no "
-"sistema de coordenadas do mundo,\n"
+"O dimensionamento não uniforme de objetos inclinados só é possível no sistema "
+"de coordenadas do mundo,\n"
 "uma vez que a rotação é incorporada nas coordenadas do objeto."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:928
 msgid ""
 "This operation is irreversible.\n"
 "Do you want to proceed?"
@@ -2975,396 +3532,495 @@ msgstr ""
 "Esta operação é irreversível.\n"
 "Você quer prosseguir?"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:59
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:62
 msgid "Additional Settings"
-msgstr "config. Adicionais"
+msgstr "Config. Adicionais"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:95
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:98
 msgid "Remove parameter"
 msgstr "Remover parâmetro"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:101
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:104
 #, c-format
 msgid "Delete Option %s"
 msgstr "Excluir opção %s"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:157
 #, c-format
 msgid "Change Option %s"
 msgstr "Alterar opção %s"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:218
+#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
 msgid "View"
 msgstr "Vista"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:221 src/slic3r/GUI/GUI_Preview.cpp:575
-#: src/libslic3r/GCode/PreviewData.cpp:345
-msgid "Feature type"
-msgstr "Tipo de recurso"
-
-#: src/slic3r/GUI/GUI_Preview.cpp:222 src/libslic3r/PrintConfig.cpp:500
+#: src/slic3r/GUI/GUI_Preview.cpp:276 src/libslic3r/PrintConfig.cpp:536
 msgid "Height"
 msgstr "Altura"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:223 src/libslic3r/PrintConfig.cpp:2238
+#: src/slic3r/GUI/GUI_Preview.cpp:277 src/libslic3r/PrintConfig.cpp:2381
 msgid "Width"
 msgstr "Espessura"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/Tab.cpp:1456
+#: src/slic3r/GUI/GUI_Preview.cpp:279 src/slic3r/GUI/Tab.cpp:1803
 msgid "Fan speed"
 msgstr "Velocidade do ventoinha"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:226
+#: src/slic3r/GUI/GUI_Preview.cpp:280
 msgid "Volumetric flow rate"
 msgstr "Taxa de fluxo volumétrico"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:227 src/slic3r/GUI/GUI_Preview.cpp:335
-#: src/slic3r/GUI/GUI_Preview.cpp:519 src/slic3r/GUI/GUI_Preview.cpp:574
-#: src/slic3r/GUI/GUI_Preview.cpp:835 src/libslic3r/GCode/PreviewData.cpp:357
-msgid "Tool"
-msgstr "Ferramenta"
-
-#: src/slic3r/GUI/GUI_Preview.cpp:228 src/slic3r/GUI/GUI_Preview.cpp:572
-#: src/libslic3r/GCode/PreviewData.cpp:359
-msgid "Color Print"
-msgstr "Impressão colorida"
-
-#: src/slic3r/GUI/GUI_Preview.cpp:231
+#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:288
 msgid "Show"
 msgstr "Mostrar"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:234 src/slic3r/GUI/GUI_Preview.cpp:235
+#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:295
+#: src/slic3r/GUI/GUI_Preview.cpp:316
 msgid "Feature types"
 msgstr "Tipos de características"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:237 src/libslic3r/ExtrusionEntity.cpp:310
+#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:336
 msgid "Perimeter"
 msgstr "Perímetro"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:311
+#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:315
+#: src/libslic3r/ExtrusionEntity.cpp:338
 msgid "External perimeter"
 msgstr "Perímetro externo"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/ExtrusionEntity.cpp:312
+#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/libslic3r/ExtrusionEntity.cpp:340
 msgid "Overhang perimeter"
 msgstr "Perímetro de angulação"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:240 src/libslic3r/ExtrusionEntity.cpp:313
+#: src/slic3r/GUI/GUI_Preview.cpp:304 src/libslic3r/ExtrusionEntity.cpp:317
+#: src/libslic3r/ExtrusionEntity.cpp:342
 msgid "Internal infill"
 msgstr "Preenchimento interno"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/ExtrusionEntity.cpp:314
-#: src/libslic3r/PrintConfig.cpp:1756 src/libslic3r/PrintConfig.cpp:1767
+#: src/slic3r/GUI/GUI_Preview.cpp:305 src/libslic3r/ExtrusionEntity.cpp:318
+#: src/libslic3r/ExtrusionEntity.cpp:344 src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:1882
 msgid "Solid infill"
 msgstr "Preenchimento sólido"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:242 src/libslic3r/ExtrusionEntity.cpp:315
-#: src/libslic3r/PrintConfig.cpp:2105 src/libslic3r/PrintConfig.cpp:2117
+#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:319
+#: src/libslic3r/ExtrusionEntity.cpp:346 src/libslic3r/PrintConfig.cpp:2248
+#: src/libslic3r/PrintConfig.cpp:2260
 msgid "Top solid infill"
 msgstr "Preenchimento do sólido do topo"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/slic3r/GUI/GUI_Preview.cpp:308 src/libslic3r/ExtrusionEntity.cpp:321
+#: src/libslic3r/ExtrusionEntity.cpp:350
 msgid "Bridge infill"
 msgstr "Preenchimento de pontes"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:317
-#: src/libslic3r/PrintConfig.cpp:918
+#: src/slic3r/GUI/GUI_Preview.cpp:309 src/libslic3r/ExtrusionEntity.cpp:322
+#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:962
 msgid "Gap fill"
 msgstr "Preenchimento de vão"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:245 src/slic3r/GUI/Tab.cpp:1110
-#: src/libslic3r/ExtrusionEntity.cpp:318
+#: src/slic3r/GUI/GUI_Preview.cpp:310 src/slic3r/GUI/Tab.cpp:1439
+#: src/libslic3r/ExtrusionEntity.cpp:323 src/libslic3r/ExtrusionEntity.cpp:354
 msgid "Skirt"
 msgstr "Saia"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:247 src/libslic3r/ExtrusionEntity.cpp:320
-#: src/libslic3r/PrintConfig.cpp:1991
+#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/ExtrusionEntity.cpp:325
+#: src/libslic3r/ExtrusionEntity.cpp:358 src/libslic3r/PrintConfig.cpp:2133
 msgid "Support material interface"
 msgstr "Interface do material de suporte"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:248 src/slic3r/GUI/Tab.cpp:1190
-#: src/libslic3r/ExtrusionEntity.cpp:321
+#: src/slic3r/GUI/GUI_Preview.cpp:313 src/slic3r/GUI/Tab.cpp:1521
+#: src/libslic3r/ExtrusionEntity.cpp:326 src/libslic3r/ExtrusionEntity.cpp:360
 msgid "Wipe tower"
 msgstr "Torre de limpeza"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:253 src/libslic3r/PrintConfig.cpp:2152
-msgid "Travel"
-msgstr "Viagem"
-
-#: src/slic3r/GUI/GUI_Preview.cpp:254
-msgid "Retractions"
-msgstr "Retrações"
-
-#: src/slic3r/GUI/GUI_Preview.cpp:255
-msgid "Unretractions"
-msgstr "Retorno da retração"
-
-#: src/slic3r/GUI/GUI_Preview.cpp:256
+#: src/slic3r/GUI/GUI_Preview.cpp:338 src/slic3r/GUI/GUI_Preview.cpp:1478
 msgid "Shells"
 msgstr "Paredes"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:257
+#: src/slic3r/GUI/GUI_Preview.cpp:339
 msgid "Legend"
 msgstr "Legenda"
 
-#: src/slic3r/GUI/Job.hpp:123
+#: src/slic3r/GUI/GUI_Preview.cpp:1479
+msgid "Tool marker"
+msgstr "Ferramenta de marcação"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:1480
+msgid "Legend/Estimated printing time"
+msgstr "Legenda/Tempo estimado de impressão"
+
+#: src/slic3r/GUI/ImGuiWrapper.cpp:800 src/slic3r/GUI/Search.cpp:464
+msgid "Use for search"
+msgstr "Use para pesquisar"
+
+#: src/slic3r/GUI/ImGuiWrapper.cpp:801 src/slic3r/GUI/Search.cpp:458
+msgid "Category"
+msgstr "Categoria"
+
+#: src/slic3r/GUI/ImGuiWrapper.cpp:803 src/slic3r/GUI/Search.cpp:460
+msgid "Search in English"
+msgstr "Procurar em inglês"
+
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:149
+msgid "Arranging"
+msgstr "Organizar"
+
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:176
+msgid "Could not arrange model objects! Some geometries may be invalid."
+msgstr ""
+"Não foi possível organizar objetos de modelo! Algumas geometrias podem ser "
+"inválidas."
+
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:182
+msgid "Arranging canceled."
+msgstr "Arranjo cancelado."
+
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:183
+msgid "Arranging done."
+msgstr "Arranjo feito."
+
+#: src/slic3r/GUI/Jobs/Job.cpp:74
 msgid "ERROR: not enough resources to execute a new job."
 msgstr "ERRO: não há recursos suficientes para executar um novo trabalho."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:719
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:41
+msgid "Searching for optimal orientation"
+msgstr "Procurando orientação ideal"
+
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:73
+msgid "Orientation search canceled."
+msgstr "Pesquisa de orientação cancelada."
+
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:74
+msgid "Orientation found."
+msgstr "Orientação encontrada."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:35
+msgid "Choose SLA archive:"
+msgstr "Selecione arquivo SLA:"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39
+msgid "Import file: "
+msgstr "Falha na exportação: "
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46
+msgid "Import model and profile"
+msgstr "Importar modelo e perfil"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47
+msgid "Import profile only"
+msgstr "Importar coleção &de config"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48
+msgid "Import model only"
+msgstr "Modelo de impressora"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:56
+msgid "Quality: "
+msgstr "Qualidade: "
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:59
+msgid "Accurate"
+msgstr "Preciso"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:60
+msgid "Balanced"
+msgstr "Balanceado"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:61
+msgid "Quick"
+msgstr "Ágil"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:135
+msgid "Importing SLA archive"
+msgstr "Importando arquivos SLA"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:159
+msgid "Importing canceled."
+msgstr "Importação cancelada."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:160
+msgid "Importing done."
+msgstr "Importação feita."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2254
+msgid "You cannot load SLA project with a multi-part object on the bed"
+msgstr ""
+"Você não pode carregar o projeto SLA com um objeto de várias partes na cama"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2255
+#: src/slic3r/GUI/Tab.cpp:3188
+msgid "Please check your object list before preset changing."
+msgstr "Verifique a lista de objetos antes de alterar a predefinição."
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:37
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:39 src/slic3r/GUI/MainFrame.cpp:941
+#: src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Keyboard Shortcuts"
 msgstr "Atalhos do teclado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:105
 msgid "New project, clear plater"
 msgstr "Novo projeto, limpar a bandeja"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:106
 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater"
 msgstr "Abra o projeto STL/OBJ/AMF/3MF com config, clear plater"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:114
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:107
 msgid "Save project (3mf)"
 msgstr "Salvar projeto (3MF)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:115
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:108
 msgid "Save project as (3mf)"
 msgstr "Salvar projeto como (3mf)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:116
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:109
 msgid "(Re)slice"
 msgstr "(Re)fatiar"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:118
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:111
 msgid "Import STL/OBJ/AMF/3MF without config, keep plater"
 msgstr "Importar STL/OBJ/AMF/3MF sem config, manter bandeja"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
 msgid "Import Config from ini/amf/3mf/gcode"
 msgstr "Config importação de ini/amf/3mf/gcode"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:120
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
 msgid "Load Config from ini/amf/3mf/gcode and merge"
 msgstr "Carregar config. de um. ini/AMF/3mf/Gcode e mesclar"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:891
-#: src/slic3r/GUI/Plater.cpp:5522 src/libslic3r/PrintConfig.cpp:3363
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 src/slic3r/GUI/Plater.cpp:766
+#: src/slic3r/GUI/Plater.cpp:5706 src/libslic3r/PrintConfig.cpp:3546
 msgid "Export G-code"
 msgstr "Exportar G-code"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5523
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send G-code"
 msgstr "Enviar G-code"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:117
 msgid "Export config"
-msgstr "Exportar config."
+msgstr "Exportar config"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 src/slic3r/GUI/Plater.cpp:755
+msgid "Export to SD card / Flash drive"
+msgstr "Exportar para cartão SD / unidade Flash"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+msgid "Eject SD card / Flash drive"
+msgstr "Ejetar cartão SD / unidade Flash"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:121
 msgid "Select all objects"
 msgstr "Selecionar todos os objetos"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:122
 msgid "Deselect all"
 msgstr "Desmarcar todos"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:123
 msgid "Delete selected"
 msgstr "Deletar seleção"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
 msgid "Copy to clipboard"
 msgstr "Copiar para a área de transferência"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
 msgid "Paste from clipboard"
 msgstr "Colar da área de transferência"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:129
 msgid "Reload plater from disk"
 msgstr "Recarregar bandeja do disco"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
 msgid "Select Plater Tab"
 msgstr "Selecione a guia de bandeja"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
 msgid "Select Print Settings Tab"
 msgstr "Selecione a guia config. de impressão"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
 msgid "Select Filament Settings Tab"
 msgstr "Selecione a guia config. de filamento"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:139
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:135
 msgid "Select Printer Settings Tab"
 msgstr "Selecione a guia config. da impressora"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
 msgid "Switch to 3D"
 msgstr "Mude para 3D"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
 msgid "Switch to Preview"
 msgstr "Mudar para pré-visualização"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:142
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
 #: src/slic3r/GUI/PrintHostDialogs.cpp:136
 msgid "Print host upload queue"
 msgstr "Fila de carregamento do host de impressão"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:144
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
 msgid "Camera view"
 msgstr "Vista da câmera"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:146
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
 msgid "Show/Hide object/instance labels"
 msgstr "Mostrar/Ocultar rótulos de objeto/instância"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:149 src/slic3r/GUI/Preferences.cpp:10
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 src/slic3r/GUI/Preferences.cpp:12
 msgid "Preferences"
 msgstr "Preferências"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:145
 msgid "Show keyboard shortcuts list"
 msgstr "Mostrar lista dos atalhos no teclado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:148
 msgid "Commands"
 msgstr "Comandos"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:153
 msgid "Add Instance of the selected object"
 msgstr "Adicionar instância do objeto selecionado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
 msgid "Remove Instance of the selected object"
 msgstr "Remover instância do objeto selecionado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:155
 msgid ""
 "Press to select multiple objects\n"
 "or move multiple objects with mouse"
 msgstr ""
-"Aperte para selecionar múltiplos objetos ou mover múltiplos objetos com o "
-"mouse"
+"Aperte para selecionar múltiplos objetos ou mover múltiplos objetos com o mouse"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:156
 msgid "Press to activate selection rectangle"
 msgstr "Pressione para ativar o retângulo de seleção"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
 msgid "Press to activate deselection rectangle"
 msgstr "Pressione para ativar o retângulo de desseleção"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Arrow Up"
 msgstr "Seta para cima"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
 msgid "Move selection 10 mm in positive Y direction"
 msgstr "Mover seleção 10 mm na direção Y positiva"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Arrow Down"
 msgstr "Seta para baixo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
 msgid "Move selection 10 mm in negative Y direction"
 msgstr "Mover seleção 10 mm na direção Y negativa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
 msgid "Arrow Left"
 msgstr "Seta esquerda"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
 msgid "Move selection 10 mm in negative X direction"
 msgstr "Mover seleção 10 mm na direção X negativa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
 msgid "Arrow Right"
 msgstr "Seta direita"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
 msgid "Move selection 10 mm in positive X direction"
 msgstr "Mover seleção 10 mm na direção X positiva"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Any arrow"
 msgstr "Qualquer flecha"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
 msgid "Movement step set to 1 mm"
 msgstr "Passo de movimento definido para 1 mm"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Movement in camera space"
 msgstr "Movimento no espaço da câmera"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Page Up"
 msgstr "Page Up"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Rotate selection 45 degrees CCW"
 msgstr "Seleção rotatura 45 graus CCW"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Page Down"
 msgstr "Page Down"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Rotate selection 45 degrees CW"
 msgstr "Seleção de rotação 45 graus CW"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
 msgid "Gizmo move"
 msgstr "Gizmo-Mover"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
 msgid "Gizmo scale"
 msgstr "Gizmo-Escala"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
 msgid "Gizmo rotate"
 msgstr "Gizmo-Rotacionar"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
 msgid "Gizmo cut"
 msgstr "Gizmo-Cortar"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
 msgid "Gizmo Place face on bed"
 msgstr "Colocar face do Gizmo na mesa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
 msgid "Gizmo SLA hollow"
 msgstr "Gizmo de SLA ligado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
 msgid "Gizmo SLA support points"
 msgstr "Pontos de suporte do Gizmo SLA"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
 msgid "Unselect gizmo or clear selection"
 msgstr "Desmarcar Gizmo/limpar seleção"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
 msgid "Change camera type (perspective, orthographic)"
 msgstr "Alterar tipo de câmera (perspectiva, ortográfica)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
 msgid "Zoom to Bed"
 msgstr "Ampliar para a mesa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
 msgid ""
 "Zoom to selected object\n"
 "or all objects in scene, if none selected"
@@ -3372,32 +4028,41 @@ msgstr ""
 "Zoom para objeto selecionado\n"
 "ou todos os objetos em cena, se nenhum selecionado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:183
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
 msgid "Zoom in"
 msgstr "Ampliar"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:184
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
 msgid "Zoom out"
 msgstr "Dimiuir"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:185
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+msgid "Switch between Editor/Preview"
+msgstr "Mudar entre Editor/Pré-visualização "
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+msgid "Collapse/Expand the sidebar"
+msgstr "Recolher/Expandir a barra lateral"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
 msgid "Show/Hide 3Dconnexion devices settings dialog"
 msgstr "Mostrar/Ocultar a caixa de configurações de dispositivos 3Dconnexion"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:192 src/slic3r/GUI/MainFrame.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:190 src/slic3r/GUI/MainFrame.cpp:340
+#: src/slic3r/GUI/MainFrame.cpp:352
 msgid "Plater"
 msgstr "Bandeja"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
-#, no-c-format
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:193
+#, c-format
 msgid ""
 "Press to snap by 5% in Gizmo scale\n"
 "or to snap by 1mm in Gizmo move"
 msgstr ""
-"Pressione para estalar 5% na escala Gizmo\n"
-"ou para estalar por 1mm no movimento Gizmo"
+"Pressione para tirar 5% ina escala Gizmo\n"
+"ou para tirar 1mm no movimento Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:194
 msgid ""
 "Scale selection to fit print volume\n"
 "in Gizmo scale"
@@ -3405,11 +4070,11 @@ msgstr ""
 "Seleção de escala para caber volume de impressão\n"
 "na escala Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
 msgid "Press to activate one direction scaling in Gizmo scale"
 msgstr "Pressione para ativar um dimensionamento de direção na escala Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
 msgid ""
 "Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\n"
 "selected objects around their own center"
@@ -3417,679 +4082,814 @@ msgstr ""
 "Pressione para escalar (na escala de Gizmo) ou girar (em Gizmo girar)\n"
 "objetos selecionados em torno de seu próprio centro"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
 msgid "Gizmos"
 msgstr "Aparelhos"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
 msgid "Upper Layer"
 msgstr "Camada superior"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
 msgid "Lower Layer"
 msgstr "Camada inferior"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
-msgid "Show/Hide Legend"
-msgstr "Ligar/Desligar Legenda"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:209
+msgid "Show/Hide Legend/Estimated printing time"
+msgstr "Mostrar/Esconder Legenda/Tempo estimado de impressão"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4107
-#: src/slic3r/GUI/Tab.cpp:2392
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 src/slic3r/GUI/Plater.cpp:4052
+#: src/slic3r/GUI/Tab.cpp:2559
 msgid "Preview"
 msgstr "Visualização"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Move current slider thumb Up"
 msgstr "Mover a barra de rolagem para cima"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Move current slider thumb Down"
 msgstr "Mover a barra de rolagem para baixo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
-msgid "Set upper thumb to current slider thumb"
-msgstr "Definir o polegar superior para o polegar deslizante atual"
-
 #: src/slic3r/GUI/KBShortcutsDialog.cpp:217
-msgid "Set lower thumb to current slider thumb"
-msgstr "Definir o polegar inferior para o polegar deslizante atual"
+msgid "Set upper thumb to current slider thumb"
+msgstr "Definir a barra superior para barra de rolagem atual"
 
 #: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+msgid "Set lower thumb to current slider thumb"
+msgstr "Definir a barra inferior  para barra de rolagem atual"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
 msgid "Add color change marker for current layer"
 msgstr "Adicionar mudança de cor para a camada atual"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
 msgid "Delete color change marker for current layer"
 msgstr "Excluir mudança de cor para a camada atual"
 
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
 #: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
+msgid ""
+"Press to speed up 5 times while moving thumb\n"
+"with arrow keys or mouse wheel"
+msgstr ""
+"Pressione para acelerar em 5 vezes enquanto move miniatura\n"
+"com as setas do teclado ou scroll do mouse"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
 msgid "Layers Slider"
 msgstr "Controle deslizante de camadas"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:245
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
+msgid "Move current slider thumb Left"
+msgstr "Mover a barra de rolagem para Esquerda"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
+msgid "Move current slider thumb Right"
+msgstr "Mover a barra de rolagem para Direita"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
+msgid "Sequential Slider"
+msgstr "Rolagem sequencial"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:259
 msgid "Keyboard shortcuts"
 msgstr "Atalhos do teclado"
 
-#: src/slic3r/GUI/MainFrame.cpp:66
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open new instance"
+msgstr "Abrir nova instância"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:77
+#: src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open a new PrusaSlicer instance"
+msgstr "Abrir uma nova instância do PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:79
+msgid "G-code preview"
+msgstr "Previsualização do G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:1141
+msgid "Open G-code viewer"
+msgstr "Abrir visualizador G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:77 src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open PrusaSlicer"
+msgstr "Versão mínima do PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:79
+msgid "Open new G-code viewer"
+msgstr "Abrir novo visualizador G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:166
 msgid ""
-" - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/"
+" - Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/"
 "releases"
 msgstr ""
 " - Lembre-se de verificar por atualizações em http://github.com/prusa3d/"
 "PrusaSlicer/releases"
 
-#: src/slic3r/GUI/MainFrame.cpp:184
+#: src/slic3r/GUI/MainFrame.cpp:535 src/slic3r/GUI/MainFrame.cpp:537
 msgid "based on Slic3r"
 msgstr "baseado no Slic3r"
 
-#: src/slic3r/GUI/MainFrame.cpp:415
-msgid "&New Project"
-msgstr "&Novo projeto"
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
+msgid "Prusa 3D &Drivers"
+msgstr "Drivers 3D &Prusa"
 
-#: src/slic3r/GUI/MainFrame.cpp:415
-msgid "Start a new project"
-msgstr "Começar um novo projeto"
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
+msgid "Open the Prusa3D drivers download page in your browser"
+msgstr "Abrir a página para baixar os drivers da Prusa3D no seu navegador"
 
-#: src/slic3r/GUI/MainFrame.cpp:418
-msgid "&Open Project"
-msgstr "&Abrir projeto"
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
+msgid "Software &Releases"
+msgstr "Lançamentos de &software"
 
-#: src/slic3r/GUI/MainFrame.cpp:418
-msgid "Open a project file"
-msgstr "Abrir novo projeto"
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
+msgid "Open the software releases page in your browser"
+msgstr "Abrir a página de lançamentos de software no seu navegador"
 
-#: src/slic3r/GUI/MainFrame.cpp:423
-msgid "Recent projects"
-msgstr "Projetos recentes"
-
-#: src/slic3r/GUI/MainFrame.cpp:432
-msgid ""
-"The selected project is no longer available.\n"
-"Do you want to remove it from the recent projects list ?"
-msgstr ""
-"O projeto selecionado não está mais disponível.\n"
-"Você quer removê-lo da lista de projetos recentes?"
-
-#: src/slic3r/GUI/MainFrame.cpp:432 src/slic3r/GUI/MainFrame.cpp:796
-#: src/slic3r/GUI/PrintHostDialogs.cpp:231
-msgid "Error"
-msgstr "Erro"
-
-#: src/slic3r/GUI/MainFrame.cpp:457
-msgid "&Save Project"
-msgstr "&Salvar projeto"
-
-#: src/slic3r/GUI/MainFrame.cpp:457
-msgid "Save current project file"
-msgstr "Salvar arquivo"
-
-#: src/slic3r/GUI/MainFrame.cpp:461 src/slic3r/GUI/MainFrame.cpp:463
-msgid "Save Project &as"
-msgstr "Salvar projeto &como"
-
-#: src/slic3r/GUI/MainFrame.cpp:461 src/slic3r/GUI/MainFrame.cpp:463
-msgid "Save current project file as"
-msgstr "Salvar arquivo atual como"
-
-#: src/slic3r/GUI/MainFrame.cpp:471
-msgid "Import STL/OBJ/AM&F/3MF"
-msgstr "Import STL/OBJ/AM&F/3MF"
-
-#: src/slic3r/GUI/MainFrame.cpp:471
-msgid "Load a model"
-msgstr "Carregar um modelo"
-
-#: src/slic3r/GUI/MainFrame.cpp:475
-msgid "Import &Config"
-msgstr "Importar &config."
-
-#: src/slic3r/GUI/MainFrame.cpp:475
-msgid "Load exported configuration file"
-msgstr "Carregar config. de arquivo exportado"
-
-#: src/slic3r/GUI/MainFrame.cpp:478
-msgid "Import Config from &project"
-msgstr "Importar Config do &projeto"
-
-#: src/slic3r/GUI/MainFrame.cpp:478
-msgid "Load configuration from project file"
-msgstr "Carregar config. de arquivo de projeto"
-
-#: src/slic3r/GUI/MainFrame.cpp:482
-msgid "Import Config &Bundle"
-msgstr "Importar coleção &de config."
-
-#: src/slic3r/GUI/MainFrame.cpp:482
-msgid "Load presets from a bundle"
-msgstr "Carregar predefinições de um pacote"
-
-#: src/slic3r/GUI/MainFrame.cpp:485
-msgid "&Import"
-msgstr "&Importar"
-
-#: src/slic3r/GUI/MainFrame.cpp:488 src/slic3r/GUI/MainFrame.cpp:760
-msgid "Export &G-code"
-msgstr "Exportar &G-code"
-
-#: src/slic3r/GUI/MainFrame.cpp:488
-msgid "Export current plate as G-code"
-msgstr "Exporte a bandeja atual como o G-code"
-
-#: src/slic3r/GUI/MainFrame.cpp:492 src/slic3r/GUI/MainFrame.cpp:761
-msgid "S&end G-code"
-msgstr "E&nviar G-code"
-
-#: src/slic3r/GUI/MainFrame.cpp:492
-msgid "Send to print current plate as G-code"
-msgstr "Enviar para imprimir a bandeja atual como G-code"
-
-#: src/slic3r/GUI/MainFrame.cpp:497
-msgid "Export plate as &STL"
-msgstr "Exportar bandeja como &STL"
-
-#: src/slic3r/GUI/MainFrame.cpp:497
-msgid "Export current plate as STL"
-msgstr "Exporte a bandeja atual como STL"
-
-#: src/slic3r/GUI/MainFrame.cpp:500
-msgid "Export plate as STL &including supports"
-msgstr "Exportar bandeja como STL &incluindo suportes"
-
-#: src/slic3r/GUI/MainFrame.cpp:500
-msgid "Export current plate as STL including supports"
-msgstr "Exporte a bandeja atual como o STL que inclui suportes"
-
-#: src/slic3r/GUI/MainFrame.cpp:503
-msgid "Export plate as &AMF"
-msgstr "Exportar bandeja como &AMF"
-
-#: src/slic3r/GUI/MainFrame.cpp:503
-msgid "Export current plate as AMF"
-msgstr "Exporte a bandeja atual como o AMF"
-
-#: src/slic3r/GUI/MainFrame.cpp:507
-msgid "Export &toolpaths as OBJ"
-msgstr "Exportar &percurso da ferramenta como OBJ"
-
-#: src/slic3r/GUI/MainFrame.cpp:507
-msgid "Export toolpaths as OBJ"
-msgstr "Exportar percursos como OBJ"
-
-#: src/slic3r/GUI/MainFrame.cpp:511
-msgid "Export &Config"
-msgstr "Exportar &config."
-
-#: src/slic3r/GUI/MainFrame.cpp:511
-msgid "Export current configuration to file"
-msgstr "Exporte a config. atual para o arquivo"
-
-#: src/slic3r/GUI/MainFrame.cpp:514
-msgid "Export Config &Bundle"
-msgstr "Exportar coleção &de config."
-
-#: src/slic3r/GUI/MainFrame.cpp:514
-msgid "Export all presets to file"
-msgstr "Exporte todas as predefinições para o arquivo"
-
-#: src/slic3r/GUI/MainFrame.cpp:517
-msgid "&Export"
-msgstr "&Exportar"
-
-#: src/slic3r/GUI/MainFrame.cpp:523
-msgid "Quick Slice"
-msgstr "Fatiamento rápido"
-
-#: src/slic3r/GUI/MainFrame.cpp:523
-msgid "Slice a file into a G-code"
-msgstr "Fatiar um arquivo em um G-code"
-
-#: src/slic3r/GUI/MainFrame.cpp:529
-msgid "Quick Slice and Save As"
-msgstr "Salvamento rápido e salvar como"
-
-#: src/slic3r/GUI/MainFrame.cpp:529
-msgid "Slice a file into a G-code, save as"
-msgstr "Fatiar um arquivo em um G-code, salvar como"
-
-#: src/slic3r/GUI/MainFrame.cpp:535
-msgid "Repeat Last Quick Slice"
-msgstr "Repetir Último Fatiamento Rápido"
-
-#: src/slic3r/GUI/MainFrame.cpp:535
-msgid "Repeat last quick slice"
-msgstr "Repetir último fatiamento rápido"
-
-#: src/slic3r/GUI/MainFrame.cpp:543
-msgid "(Re)Slice No&w"
-msgstr "(Re)Fatiar ago&ra"
-
-#: src/slic3r/GUI/MainFrame.cpp:543
-msgid "Start new slicing process"
-msgstr "Começar novo processo de fatiamento"
-
-#: src/slic3r/GUI/MainFrame.cpp:547
-msgid "&Repair STL file"
-msgstr "&Reparar arquivo STL"
-
-#: src/slic3r/GUI/MainFrame.cpp:547
-msgid "Automatically repair an STL file"
-msgstr "Reparar automaticamente um arquivo STL"
-
-#: src/slic3r/GUI/MainFrame.cpp:551
-msgid "&Quit"
-msgstr "&Sair"
-
-#: src/slic3r/GUI/MainFrame.cpp:551
+#: src/slic3r/GUI/MainFrame.cpp:917 src/slic3r/GUI/MainFrame.cpp:1316
 #, c-format
-msgid "Quit %s"
-msgstr "Sair %s"
+msgid "%s &Website"
+msgstr "%s &Site"
 
-#: src/slic3r/GUI/MainFrame.cpp:576
-msgid "&Select all"
-msgstr "&Selecionar todos"
+#: src/slic3r/GUI/MainFrame.cpp:918 src/slic3r/GUI/MainFrame.cpp:1317
+#, c-format
+msgid "Open the %s website in your browser"
+msgstr "Abra o site do %s no seu navegador"
 
-#: src/slic3r/GUI/MainFrame.cpp:577
-msgid "Selects all objects"
-msgstr "Selecionar todos os objetos"
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
+msgid "System &Info"
+msgstr "Informação &do sistema"
 
-#: src/slic3r/GUI/MainFrame.cpp:579
-msgid "D&eselect all"
-msgstr "D&eselecionar todos"
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
+msgid "Show system information"
+msgstr "Mostrar a informação do sistema"
 
-#: src/slic3r/GUI/MainFrame.cpp:580
-msgid "Deselects all objects"
-msgstr "Deselecionar todos os objetos"
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
+msgid "Show &Configuration Folder"
+msgstr "Mostrar &pasta de config"
 
-#: src/slic3r/GUI/MainFrame.cpp:583
-msgid "&Delete selected"
-msgstr "&Excluir seleção"
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
+msgid "Show user configuration folder (datadir)"
+msgstr "Mostrar pasta de config. do usuário (datadir)"
 
-#: src/slic3r/GUI/MainFrame.cpp:584
-msgid "Deletes the current selection"
-msgstr "Excluir a seleção atual"
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
+msgid "Report an I&ssue"
+msgstr "Reportar um p&roblema"
 
-#: src/slic3r/GUI/MainFrame.cpp:586
-msgid "Delete &all"
-msgstr "Excluir &todos"
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
+#, c-format
+msgid "Report an issue on %s"
+msgstr "Relatar um problema em %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:587
-msgid "Deletes all objects"
-msgstr "Excluir todos os objetos"
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
+#, c-format
+msgid "&About %s"
+msgstr "&Sobre %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:591
-msgid "&Undo"
-msgstr "&Desfazer"
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
+msgid "Show about dialog"
+msgstr "Mostrar diálogo sobre"
 
-#: src/slic3r/GUI/MainFrame.cpp:594
-msgid "&Redo"
-msgstr "&Refazer"
+#: src/slic3r/GUI/MainFrame.cpp:941 src/slic3r/GUI/MainFrame.cpp:1332
+msgid "Show the list of the keyboard shortcuts"
+msgstr "Mostrar lista dos atalhos no teclado"
 
-#: src/slic3r/GUI/MainFrame.cpp:599
-msgid "&Copy"
-msgstr "&Copiar"
-
-#: src/slic3r/GUI/MainFrame.cpp:600
-msgid "Copy selection to clipboard"
-msgstr "Copiar seleção para a área de transferência"
-
-#: src/slic3r/GUI/MainFrame.cpp:602
-msgid "&Paste"
-msgstr "&Colar"
-
-#: src/slic3r/GUI/MainFrame.cpp:603
-msgid "Paste clipboard"
-msgstr "Colar área de transferência"
-
-#: src/slic3r/GUI/MainFrame.cpp:607
-msgid "Re&load from disk"
-msgstr "Re&load do disco"
-
-#: src/slic3r/GUI/MainFrame.cpp:608
-msgid "Reload the plater from disk"
-msgstr "Recarregar a bendeja do disco"
-
-#: src/slic3r/GUI/MainFrame.cpp:617
-msgid "&Plater Tab"
-msgstr "&Bandeja"
-
-#: src/slic3r/GUI/MainFrame.cpp:617
-msgid "Show the plater"
-msgstr "Mostrar a bandeja"
-
-#: src/slic3r/GUI/MainFrame.cpp:625
-msgid "P&rint Settings Tab"
-msgstr "C&onfig. de impressão"
-
-#: src/slic3r/GUI/MainFrame.cpp:625
-msgid "Show the print settings"
-msgstr "Mostrar as config. de impressão"
-
-#: src/slic3r/GUI/MainFrame.cpp:628 src/slic3r/GUI/MainFrame.cpp:763
-msgid "&Filament Settings Tab"
-msgstr "&config. de filamentos"
-
-#: src/slic3r/GUI/MainFrame.cpp:628
-msgid "Show the filament settings"
-msgstr "Mostrar as config. de filamento"
-
-#: src/slic3r/GUI/MainFrame.cpp:632
-msgid "Print&er Settings Tab"
-msgstr "A&ba de config. da impressora"
-
-#: src/slic3r/GUI/MainFrame.cpp:632
-msgid "Show the printer settings"
-msgstr "Mostrar as config. da impressora"
-
-#: src/slic3r/GUI/MainFrame.cpp:637
-msgid "3&D"
-msgstr "3&D"
-
-#: src/slic3r/GUI/MainFrame.cpp:637
-msgid "Show the 3D editing view"
-msgstr "Mostrar a vista de edição 3D"
-
-#: src/slic3r/GUI/MainFrame.cpp:640
-msgid "Pre&view"
-msgstr "Pre&visualização"
-
-#: src/slic3r/GUI/MainFrame.cpp:640
-msgid "Show the 3D slices preview"
-msgstr "Mostrar a pré-visualização do fatiamento 3D"
-
-#: src/slic3r/GUI/MainFrame.cpp:659
-msgid "Print &Host Upload Queue"
-msgstr "Imprimir &Fila de upload do Host"
-
-#: src/slic3r/GUI/MainFrame.cpp:659
-msgid "Display the Print Host Upload Queue window"
-msgstr "Exibir a janela fila de upload do host de impressão"
-
-#: src/slic3r/GUI/MainFrame.cpp:669
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso"
 msgstr "Isométrico"
 
-#: src/slic3r/GUI/MainFrame.cpp:669
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso View"
 msgstr "Vista isométrica"
 
 #. TRN To be shown in the main menu View->Top
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:673 src/libslic3r/PrintConfig.cpp:2132
-#: src/libslic3r/PrintConfig.cpp:2141
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
+#: src/libslic3r/PrintConfig.cpp:2275 src/libslic3r/PrintConfig.cpp:2284
 msgid "Top"
 msgstr "Topo"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
 msgid "Top View"
 msgstr "Vista do topo"
 
 #. TRN To be shown in the main menu View->Bottom
 #. TRN To be shown in Print Settings "Bottom solid layers"
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:676 src/libslic3r/PrintConfig.cpp:174
-#: src/libslic3r/PrintConfig.cpp:183
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
+#: src/libslic3r/PrintConfig.cpp:208 src/libslic3r/PrintConfig.cpp:217
 msgid "Bottom"
 msgstr "Base"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
 msgid "Bottom View"
 msgstr "Vista da base"
 
-#: src/slic3r/GUI/MainFrame.cpp:678
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front"
 msgstr "Frente"
 
-#: src/slic3r/GUI/MainFrame.cpp:678
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front View"
 msgstr "Vista da frente"
 
-#: src/slic3r/GUI/MainFrame.cpp:680 src/libslic3r/PrintConfig.cpp:1632
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
+#: src/libslic3r/PrintConfig.cpp:1740
 msgid "Rear"
 msgstr "Traseira"
 
-#: src/slic3r/GUI/MainFrame.cpp:680
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
 msgid "Rear View"
 msgstr "Vista traseira"
 
-#: src/slic3r/GUI/MainFrame.cpp:682
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left"
 msgstr "Esquerda"
 
-#: src/slic3r/GUI/MainFrame.cpp:682
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left View"
 msgstr "Vista esquerda"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right"
 msgstr "Direita"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right View"
 msgstr "Vista direita"
 
-#: src/slic3r/GUI/MainFrame.cpp:687
+#: src/slic3r/GUI/MainFrame.cpp:986
+msgid "&New Project"
+msgstr "&Novo projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:986
+msgid "Start a new project"
+msgstr "Começar um novo projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
+msgid "&Open Project"
+msgstr "&Abrir projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
+msgid "Open a project file"
+msgstr "Abrir novo projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:994
+msgid "Recent projects"
+msgstr "Projetos recentes"
+
+#: src/slic3r/GUI/MainFrame.cpp:1003
+msgid ""
+"The selected project is no longer available.\n"
+"Do you want to remove it from the recent projects list?"
+msgstr ""
+"O projeto selecionado não está mais disponível.\n"
+"Você quer removê-lo da lista de projetos recentes?"
+
+#: src/slic3r/GUI/MainFrame.cpp:1003 src/slic3r/GUI/MainFrame.cpp:1486
+#: src/slic3r/GUI/PrintHostDialogs.cpp:231
+msgid "Error"
+msgstr "Erro"
+
+#: src/slic3r/GUI/MainFrame.cpp:1028
+msgid "&Save Project"
+msgstr "&Salvar projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:1028
+msgid "Save current project file"
+msgstr "Salvar arquivo"
+
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
+msgid "Save Project &as"
+msgstr "Salvar projeto &como"
+
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
+msgid "Save current project file as"
+msgstr "Salvar arquivo atual como"
+
+#: src/slic3r/GUI/MainFrame.cpp:1042
+msgid "Import STL/OBJ/AM&F/3MF"
+msgstr "Import STL/OBJ/AM&F/3MF"
+
+#: src/slic3r/GUI/MainFrame.cpp:1042
+msgid "Load a model"
+msgstr "Carregar um modelo"
+
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Import STL (imperial units)"
+msgstr "Importar STL (unidades imperiais)"
+
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Load an model saved with imperial units"
+msgstr "Carregar um modelo salvo com unidades imperiais"
+
+#: src/slic3r/GUI/MainFrame.cpp:1050
+msgid "Import SL1 archive"
+msgstr "Não um arquivo ZIP"
+
+#: src/slic3r/GUI/MainFrame.cpp:1050
+msgid "Load an SL1 output archive"
+msgstr "Carregar um arquivo de saída SL1"
+
+#: src/slic3r/GUI/MainFrame.cpp:1055
+msgid "Import &Config"
+msgstr "Importar &config"
+
+#: src/slic3r/GUI/MainFrame.cpp:1055
+msgid "Load exported configuration file"
+msgstr "Carregar config. de arquivo exportado"
+
+#: src/slic3r/GUI/MainFrame.cpp:1058
+msgid "Import Config from &project"
+msgstr "Importar Config do &projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:1058
+msgid "Load configuration from project file"
+msgstr "Carregar config. de arquivo de projeto"
+
+#: src/slic3r/GUI/MainFrame.cpp:1062
+msgid "Import Config &Bundle"
+msgstr "Importar coleção &de config"
+
+#: src/slic3r/GUI/MainFrame.cpp:1062
+msgid "Load presets from a bundle"
+msgstr "Carregar predefinições de um pacote"
+
+#: src/slic3r/GUI/MainFrame.cpp:1065
+msgid "&Import"
+msgstr "&Importar"
+
+#: src/slic3r/GUI/MainFrame.cpp:1068 src/slic3r/GUI/MainFrame.cpp:1448
+msgid "Export &G-code"
+msgstr "Exportar &G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1068
+msgid "Export current plate as G-code"
+msgstr "Exporte a bandeja atual como o G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1072 src/slic3r/GUI/MainFrame.cpp:1449
+msgid "S&end G-code"
+msgstr "E&nviar G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1072
+msgid "Send to print current plate as G-code"
+msgstr "Enviar para imprimir a bandeja atual como G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1076
+msgid "Export G-code to SD card / Flash drive"
+msgstr "Exportar para cartão SD / unidade Flash"
+
+#: src/slic3r/GUI/MainFrame.cpp:1076
+msgid "Export current plate as G-code to SD card / Flash drive"
+msgstr "Exportar bandeja atual para cartão SD / unidade Flash"
+
+#: src/slic3r/GUI/MainFrame.cpp:1080
+msgid "Export plate as &STL"
+msgstr "Exportar bandeja como &STL"
+
+#: src/slic3r/GUI/MainFrame.cpp:1080
+msgid "Export current plate as STL"
+msgstr "Exporte a bandeja atual como STL"
+
+#: src/slic3r/GUI/MainFrame.cpp:1083
+msgid "Export plate as STL &including supports"
+msgstr "Exportar bandeja como STL &incluindo suportes"
+
+#: src/slic3r/GUI/MainFrame.cpp:1083
+msgid "Export current plate as STL including supports"
+msgstr "Exporte a bandeja atual como o STL que inclui suportes"
+
+#: src/slic3r/GUI/MainFrame.cpp:1086
+msgid "Export plate as &AMF"
+msgstr "Exportar bandeja como &AMF"
+
+#: src/slic3r/GUI/MainFrame.cpp:1086
+msgid "Export current plate as AMF"
+msgstr "Exporte a bandeja atual como o AMF"
+
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
+msgid "Export &toolpaths as OBJ"
+msgstr "Exportar &percurso da ferramenta como OBJ"
+
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
+msgid "Export toolpaths as OBJ"
+msgstr "Exportar percursos como OBJ"
+
+#: src/slic3r/GUI/MainFrame.cpp:1094
+msgid "Export &Config"
+msgstr "Exportar &config"
+
+#: src/slic3r/GUI/MainFrame.cpp:1094
+msgid "Export current configuration to file"
+msgstr "Exporte a config. atual para o arquivo"
+
+#: src/slic3r/GUI/MainFrame.cpp:1097
+msgid "Export Config &Bundle"
+msgstr "Exportar coleção &de config"
+
+#: src/slic3r/GUI/MainFrame.cpp:1097
+msgid "Export all presets to file"
+msgstr "Exporte todas as predefinições para o arquivo"
+
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export Config Bundle With Physical Printers"
+msgstr "Exportar coleção &de config"
+
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export all presets including physical printers to file"
+msgstr ""
+"Exporte todas as predefinições, incluindo impressoras físicas, para o arquivo"
+
+#: src/slic3r/GUI/MainFrame.cpp:1103
+msgid "&Export"
+msgstr "&Exportar"
+
+#: src/slic3r/GUI/MainFrame.cpp:1105
+msgid "Ejec&t SD card / Flash drive"
+msgstr "Ejetar para cartão SD / unidade Flash"
+
+#: src/slic3r/GUI/MainFrame.cpp:1105
+msgid "Eject SD card / Flash drive after the G-code was exported to it."
+msgstr ""
+"Ejetar para cartão SD / unidade Flash após G-code for exportado para ele."
+
+#: src/slic3r/GUI/MainFrame.cpp:1113
+msgid "Quick Slice"
+msgstr "Fatiamento rápido"
+
+#: src/slic3r/GUI/MainFrame.cpp:1113
+msgid "Slice a file into a G-code"
+msgstr "Fatiar um arquivo em um G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1119
+msgid "Quick Slice and Save As"
+msgstr "Salvamento rápido e salvar como"
+
+#: src/slic3r/GUI/MainFrame.cpp:1119
+msgid "Slice a file into a G-code, save as"
+msgstr "Fatiar um arquivo em um G-code, salvar como"
+
+#: src/slic3r/GUI/MainFrame.cpp:1125
+msgid "Repeat Last Quick Slice"
+msgstr "Repetir Último Fatiamento Rápido"
+
+#: src/slic3r/GUI/MainFrame.cpp:1125
+msgid "Repeat last quick slice"
+msgstr "Repetir último fatiamento rápido"
+
+#: src/slic3r/GUI/MainFrame.cpp:1133
+msgid "(Re)Slice No&w"
+msgstr "(Re)Fatiar ago&ra"
+
+#: src/slic3r/GUI/MainFrame.cpp:1133
+msgid "Start new slicing process"
+msgstr "Começar novo processo de fatiamento"
+
+#: src/slic3r/GUI/MainFrame.cpp:1137
+msgid "&Repair STL file"
+msgstr "&Reparar arquivo STL"
+
+#: src/slic3r/GUI/MainFrame.cpp:1137
+msgid "Automatically repair an STL file"
+msgstr "Reparar automaticamente um arquivo STL"
+
+#: src/slic3r/GUI/MainFrame.cpp:1141
+msgid "&G-code preview"
+msgstr "&Pré-visualizar G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
+msgid "&Quit"
+msgstr "&Sair"
+
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
+#, c-format
+msgid "Quit %s"
+msgstr "Sair %s"
+
+#: src/slic3r/GUI/MainFrame.cpp:1171
+msgid "&Select all"
+msgstr "&Selecionar todos"
+
+#: src/slic3r/GUI/MainFrame.cpp:1172
+msgid "Selects all objects"
+msgstr "Selecionar todos os objetos"
+
+#: src/slic3r/GUI/MainFrame.cpp:1174
+msgid "D&eselect all"
+msgstr "D&eselecionar todos"
+
+#: src/slic3r/GUI/MainFrame.cpp:1175
+msgid "Deselects all objects"
+msgstr "Deselecionar todos os objetos"
+
+#: src/slic3r/GUI/MainFrame.cpp:1178
+msgid "&Delete selected"
+msgstr "&Excluir seleção"
+
+#: src/slic3r/GUI/MainFrame.cpp:1179
+msgid "Deletes the current selection"
+msgstr "Excluir a seleção atual"
+
+#: src/slic3r/GUI/MainFrame.cpp:1181
+msgid "Delete &all"
+msgstr "Excluir &todos"
+
+#: src/slic3r/GUI/MainFrame.cpp:1182
+msgid "Deletes all objects"
+msgstr "Excluir todos os objetos"
+
+#: src/slic3r/GUI/MainFrame.cpp:1186
+msgid "&Undo"
+msgstr "&Desfazer"
+
+#: src/slic3r/GUI/MainFrame.cpp:1189
+msgid "&Redo"
+msgstr "&Refazer"
+
+#: src/slic3r/GUI/MainFrame.cpp:1194
+msgid "&Copy"
+msgstr "&Copiar"
+
+#: src/slic3r/GUI/MainFrame.cpp:1195
+msgid "Copy selection to clipboard"
+msgstr "Copiar seleção para a área de transferência"
+
+#: src/slic3r/GUI/MainFrame.cpp:1197
+msgid "&Paste"
+msgstr "&Colar"
+
+#: src/slic3r/GUI/MainFrame.cpp:1198
+msgid "Paste clipboard"
+msgstr "Colar área de transferência"
+
+#: src/slic3r/GUI/MainFrame.cpp:1202
+msgid "Re&load from disk"
+msgstr "Re&load do disco"
+
+#: src/slic3r/GUI/MainFrame.cpp:1203
+msgid "Reload the plater from disk"
+msgstr "Recarregar a bendeja do disco"
+
+#: src/slic3r/GUI/MainFrame.cpp:1207
+msgid "Searc&h"
+msgstr "Pesquisa&r"
+
+#: src/slic3r/GUI/MainFrame.cpp:1208
+msgid "Find option"
+msgstr "Procurar opções"
+
+#: src/slic3r/GUI/MainFrame.cpp:1216
+msgid "&Plater Tab"
+msgstr "&Bandeja"
+
+#: src/slic3r/GUI/MainFrame.cpp:1216
+msgid "Show the plater"
+msgstr "Mostrar a bandeja"
+
+#: src/slic3r/GUI/MainFrame.cpp:1221
+msgid "P&rint Settings Tab"
+msgstr "C&onfig. de impressão"
+
+#: src/slic3r/GUI/MainFrame.cpp:1221
+msgid "Show the print settings"
+msgstr "Mostrar as config. de impressão"
+
+#: src/slic3r/GUI/MainFrame.cpp:1224 src/slic3r/GUI/MainFrame.cpp:1451
+msgid "&Filament Settings Tab"
+msgstr "&config. de filamentos"
+
+#: src/slic3r/GUI/MainFrame.cpp:1224
+msgid "Show the filament settings"
+msgstr "Mostrar as config. de filamento"
+
+#: src/slic3r/GUI/MainFrame.cpp:1228
+msgid "Print&er Settings Tab"
+msgstr "A&ba de config. da impressora"
+
+#: src/slic3r/GUI/MainFrame.cpp:1228
+msgid "Show the printer settings"
+msgstr "Mostrar as config. da impressora"
+
+#: src/slic3r/GUI/MainFrame.cpp:1234
+msgid "3&D"
+msgstr "3&D"
+
+#: src/slic3r/GUI/MainFrame.cpp:1234
+msgid "Show the 3D editing view"
+msgstr "Mostrar a vista de edição 3D"
+
+#: src/slic3r/GUI/MainFrame.cpp:1237
+msgid "Pre&view"
+msgstr "Pre&visualização"
+
+#: src/slic3r/GUI/MainFrame.cpp:1237
+msgid "Show the 3D slices preview"
+msgstr "Mostrar a pré-visualização do fatiamento 3D"
+
+#: src/slic3r/GUI/MainFrame.cpp:1258
+msgid "Print &Host Upload Queue"
+msgstr "Imprimir &Fila de upload do Host"
+
+#: src/slic3r/GUI/MainFrame.cpp:1258
+msgid "Display the Print Host Upload Queue window"
+msgstr "Exibir a janela fila de upload do host de impressão"
+
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show &labels"
 msgstr "Mostrar &rótulos"
 
-#: src/slic3r/GUI/MainFrame.cpp:687
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show object/instance labels in 3D scene"
 msgstr "Mostrar rótulos de objeto/instância em cena 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:695
-msgid "Prusa 3D &Drivers"
-msgstr "Drivers 3D &Prusa"
+#: src/slic3r/GUI/MainFrame.cpp:1297
+msgid "&Collapse sidebar"
+msgstr "&Recolher barra lateral"
 
-#: src/slic3r/GUI/MainFrame.cpp:695
-msgid "Open the Prusa3D drivers download page in your browser"
-msgstr "Abrir a página para baixar os drivers da Prusa3D no seu navegador"
+#: src/slic3r/GUI/MainFrame.cpp:1297 src/slic3r/GUI/Plater.cpp:2144
+msgid "Collapse sidebar"
+msgstr "Recolher barra lateral"
 
-#: src/slic3r/GUI/MainFrame.cpp:697
-msgid "Software &Releases"
-msgstr "Lançamentos de &software"
-
-#: src/slic3r/GUI/MainFrame.cpp:697
-msgid "Open the software releases page in your browser"
-msgstr "Abrir a página de lançamentos de software no seu navegador"
-
-#: src/slic3r/GUI/MainFrame.cpp:703
-#, c-format
-msgid "%s &Website"
-msgstr "%s &Site"
-
-#: src/slic3r/GUI/MainFrame.cpp:704
-#, c-format
-msgid "Open the %s website in your browser"
-msgstr "Abra o site do %s no seu navegador"
-
-#: src/slic3r/GUI/MainFrame.cpp:710
-msgid "System &Info"
-msgstr "Informação &do sistema"
-
-#: src/slic3r/GUI/MainFrame.cpp:710
-msgid "Show system information"
-msgstr "Mostrar a informação do sistema"
-
-#: src/slic3r/GUI/MainFrame.cpp:712
-msgid "Show &Configuration Folder"
-msgstr "Mostrar &pasta de config."
-
-#: src/slic3r/GUI/MainFrame.cpp:712
-msgid "Show user configuration folder (datadir)"
-msgstr "Mostrar pasta de config. do usuário (datadir)"
-
-#: src/slic3r/GUI/MainFrame.cpp:714
-msgid "Report an I&ssue"
-msgstr "Reportar um p&roblema"
-
-#: src/slic3r/GUI/MainFrame.cpp:714
-#, c-format
-msgid "Report an issue on %s"
-msgstr "Relatar um problema em %s"
-
-#: src/slic3r/GUI/MainFrame.cpp:716
-#, c-format
-msgid "&About %s"
-msgstr "&Sobre %s"
-
-#: src/slic3r/GUI/MainFrame.cpp:716
-msgid "Show about dialog"
-msgstr "Mostrar diálogo sobre"
-
-#: src/slic3r/GUI/MainFrame.cpp:719
-msgid "Show the list of the keyboard shortcuts"
-msgstr "Mostrar lista dos atalhos no teclado"
-
-#: src/slic3r/GUI/MainFrame.cpp:732
+#: src/slic3r/GUI/MainFrame.cpp:1347 src/slic3r/GUI/MainFrame.cpp:1357
+#: src/slic3r/GUI/MainFrame.cpp:1417
 msgid "&File"
 msgstr "&Arquivo"
 
-#: src/slic3r/GUI/MainFrame.cpp:733
+#: src/slic3r/GUI/MainFrame.cpp:1348 src/slic3r/GUI/MainFrame.cpp:1358
 msgid "&Edit"
 msgstr "&Editar"
 
-#: src/slic3r/GUI/MainFrame.cpp:734
+#: src/slic3r/GUI/MainFrame.cpp:1349 src/slic3r/GUI/MainFrame.cpp:1359
 msgid "&Window"
 msgstr "&Janela"
 
-#: src/slic3r/GUI/MainFrame.cpp:735
+#: src/slic3r/GUI/MainFrame.cpp:1350 src/slic3r/GUI/MainFrame.cpp:1360
+#: src/slic3r/GUI/MainFrame.cpp:1418
 msgid "&View"
 msgstr "&Vista"
 
-#: src/slic3r/GUI/MainFrame.cpp:738
+#: src/slic3r/GUI/MainFrame.cpp:1353 src/slic3r/GUI/MainFrame.cpp:1363
+#: src/slic3r/GUI/MainFrame.cpp:1423
 msgid "&Help"
 msgstr "&Ajuda"
 
-#: src/slic3r/GUI/MainFrame.cpp:760
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "&Open G-code"
+msgstr "&Abrir G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "Open a G-code file"
+msgstr "Abrir arquivo G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open &PrusaSlicer"
+msgstr "Versão mínima do PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:1448
 msgid "E&xport"
 msgstr "E&xportar"
 
-#: src/slic3r/GUI/MainFrame.cpp:761
+#: src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end to print"
 msgstr "E&nviar para impressora"
 
-#: src/slic3r/GUI/MainFrame.cpp:763
+#: src/slic3r/GUI/MainFrame.cpp:1451
 msgid "Mate&rial Settings Tab"
 msgstr "A&ba de config. de material"
 
-#: src/slic3r/GUI/MainFrame.cpp:784
+#: src/slic3r/GUI/MainFrame.cpp:1474
 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Escolha um arquivo para fatiar (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/MainFrame.cpp:795
+#: src/slic3r/GUI/MainFrame.cpp:1485
 msgid "No previously sliced file."
 msgstr "Sem arquivo fatiado anteriormente."
 
-#: src/slic3r/GUI/MainFrame.cpp:801
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid "Previously sliced file ("
 msgstr "Arquivo fatiado anteriormente ("
 
-#: src/slic3r/GUI/MainFrame.cpp:801
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid ") not found."
 msgstr ") não encontrado."
 
-#: src/slic3r/GUI/MainFrame.cpp:802
+#: src/slic3r/GUI/MainFrame.cpp:1492
 msgid "File Not Found"
 msgstr "Arquivo não encontrado"
 
-#: src/slic3r/GUI/MainFrame.cpp:837
+#: src/slic3r/GUI/MainFrame.cpp:1527
 #, c-format
 msgid "Save %s file as:"
 msgstr "Salve o arquivo %s como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:837
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "SVG"
 msgstr "SVG"
 
-#: src/slic3r/GUI/MainFrame.cpp:837
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "G-code"
 msgstr "G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:849
+#: src/slic3r/GUI/MainFrame.cpp:1539
 msgid "Save zip file as:"
 msgstr "Salvar arquivo compactado(zip) como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:858 src/slic3r/GUI/Plater.cpp:3123
-#: src/slic3r/GUI/Plater.cpp:5109 src/slic3r/GUI/Tab.cpp:1220
-#: src/slic3r/GUI/Tab.cpp:3666
+#: src/slic3r/GUI/MainFrame.cpp:1548 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5234 src/slic3r/GUI/Tab.cpp:1551
+#: src/slic3r/GUI/Tab.cpp:4081
 msgid "Slicing"
 msgstr "Fatiamento"
 
 #. TRN "Processing input_file_basename"
-#: src/slic3r/GUI/MainFrame.cpp:860
+#: src/slic3r/GUI/MainFrame.cpp:1550
 #, c-format
 msgid "Processing %s"
 msgstr "Processando %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:883
+#: src/slic3r/GUI/MainFrame.cpp:1573
 msgid " was successfully sliced."
 msgstr " foi fatiado com sucesso."
 
-#: src/slic3r/GUI/MainFrame.cpp:885
+#: src/slic3r/GUI/MainFrame.cpp:1575
 msgid "Slicing Done!"
 msgstr "Fatiamento completo!"
 
-#: src/slic3r/GUI/MainFrame.cpp:900
+#: src/slic3r/GUI/MainFrame.cpp:1590
 msgid "Select the STL file to repair:"
 msgstr "Selecione o arquivo STL para corrigir:"
 
-#: src/slic3r/GUI/MainFrame.cpp:910
+#: src/slic3r/GUI/MainFrame.cpp:1600
 msgid "Save OBJ file (less prone to coordinate errors than STL) as:"
-msgstr ""
-"Salvar arquivo OBJ (menos propenso a erros de coordenada que STL) como:"
+msgstr "Salvar arquivo OBJ (menos propenso a erros de coordenada que STL) como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:922
+#: src/slic3r/GUI/MainFrame.cpp:1612
 msgid "Your file was repaired."
 msgstr "Seu arquivo foi corrigido."
 
-#: src/slic3r/GUI/MainFrame.cpp:922 src/libslic3r/PrintConfig.cpp:3457
+#: src/slic3r/GUI/MainFrame.cpp:1612 src/libslic3r/PrintConfig.cpp:3646
 msgid "Repair"
 msgstr "Corrigir"
 
-#: src/slic3r/GUI/MainFrame.cpp:936
+#: src/slic3r/GUI/MainFrame.cpp:1626
 msgid "Save configuration as:"
 msgstr "Salvar config. como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1017
+#: src/slic3r/GUI/MainFrame.cpp:1645 src/slic3r/GUI/MainFrame.cpp:1707
 msgid "Select configuration to load:"
 msgstr "Selecionar config. para carregar:"
 
-#: src/slic3r/GUI/MainFrame.cpp:991
+#: src/slic3r/GUI/MainFrame.cpp:1681
 msgid "Save presets bundle as:"
 msgstr "Salvar pacote de predefinições como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:1038
+#: src/slic3r/GUI/MainFrame.cpp:1728
 #, c-format
 msgid "%d presets successfully imported."
 msgstr "%d predefinições importadas com êxito."
 
-#: src/slic3r/GUI/Mouse3DController.cpp:239
+#: src/slic3r/GUI/Mouse3DController.cpp:263
 msgid "3Dconnexion settings"
 msgstr "Configurações de 3Dconnexion"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:254
+#: src/slic3r/GUI/Mouse3DController.cpp:274
 msgid "Device:"
 msgstr "Dispositivo:"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:261
+#: src/slic3r/GUI/Mouse3DController.cpp:279
 msgid "Speed:"
 msgstr "Velocidade:"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:265
-#: src/slic3r/GUI/Mouse3DController.cpp:288
+#: src/slic3r/GUI/Mouse3DController.cpp:282
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Translation"
 msgstr "Tradução"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:277
-#: src/slic3r/GUI/Mouse3DController.cpp:288
+#: src/slic3r/GUI/Mouse3DController.cpp:294
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Zoom"
 msgstr "Zoom"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:284
+#: src/slic3r/GUI/Mouse3DController.cpp:300
 msgid "Deadzone:"
 msgstr "Zona morta:"
 
+#: src/slic3r/GUI/Mouse3DController.cpp:315
+msgid "Options:"
+msgstr "Opções de saída:"
+
+#: src/slic3r/GUI/Mouse3DController.cpp:318
+msgid "Swap Y/Z axes"
+msgstr "Trocar eixos Y/Z"
+
 #: src/slic3r/GUI/MsgDialog.cpp:73
 #, c-format
 msgid "%s error"
@@ -4100,110 +4900,306 @@ msgstr "%s erro"
 msgid "%s has encountered an error"
 msgstr "%s encontrou um erro"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:56
+#: src/slic3r/GUI/NotificationManager.hpp:317
+msgid "Exporting finished."
+msgstr "Falha na exportação."
+
+#: src/slic3r/GUI/NotificationManager.hpp:317
+msgid "Eject drive."
+msgstr "Ejetar unidade."
+
+#: src/slic3r/GUI/NotificationManager.hpp:318
+msgid "3D Mouse disconnected."
+msgstr "Mouse 3D desconectado."
+
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "Configuration update is available."
+msgstr "A atualização de config. está disponível."
+
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "See more."
+msgstr "Modo simples."
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "New version is available."
+msgstr "Nova versão do %s está disponível."
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "See Releases page."
+msgstr "Lançamentos de &software."
+
+#: src/slic3r/GUI/NotificationManager.cpp:305
+#: src/slic3r/GUI/NotificationManager.cpp:315
+msgid "More"
+msgstr "Mais"
+
+#: src/slic3r/GUI/NotificationManager.cpp:631
+#: src/slic3r/GUI/NotificationManager.cpp:748
+msgid "Export G-Code."
+msgstr "Exportar G-code."
+
+#: src/slic3r/GUI/NotificationManager.cpp:667
+#: src/slic3r/GUI/NotificationManager.cpp:683
+#: src/slic3r/GUI/NotificationManager.cpp:694
+msgid "ERROR:"
+msgstr "ERRO:"
+
+#: src/slic3r/GUI/NotificationManager.cpp:672
+#: src/slic3r/GUI/NotificationManager.cpp:687
+#: src/slic3r/GUI/NotificationManager.cpp:702
+msgid "WARNING:"
+msgstr "AVISO:"
+
+#: src/slic3r/GUI/NotificationManager.cpp:751
+msgid "Slicing finished."
+msgstr "Fatiamento pronto."
+
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:58
 msgid "Instances"
 msgstr "Instâncias"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:60
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:216
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
 #, c-format
 msgid "Instance %d"
 msgstr "Instância %d"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:67 src/slic3r/GUI/Tab.cpp:3514
-#: src/slic3r/GUI/Tab.cpp:3602
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3928
+#: src/slic3r/GUI/Tab.cpp:4010
 msgid "Layers"
 msgstr "Camadas"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 msgid "Range"
 msgstr "Intervalo"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:259
+#: src/slic3r/GUI/OpenGLManager.cpp:259
+#, c-format
+msgid ""
+"PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n"
+"while OpenGL version %s, render %s, vendor %s was detected."
+msgstr ""
+"PrusaSlicer requer drivers capazes de executar OpenGL 2.0, \n"
+"enquanto a versão do OpenGL %s, renderização %s, fornecedor %s foi detectada."
+
+#: src/slic3r/GUI/OpenGLManager.cpp:262
+msgid "You may need to update your graphics card driver."
+msgstr "Você pode ter que atualizar os drivers da sua placa de vídeo."
+
+#: src/slic3r/GUI/OpenGLManager.cpp:265
+msgid ""
+"As a workaround, you may run PrusaSlicer with a software rendered 3D graphics "
+"by running prusa-slicer.exe with the --sw_renderer parameter."
+msgstr ""
+"Como solução alternativa, você pode executar o PrusaSlicer com um software "
+"renderizando gráficos 3D por executar Prusa-slicer.exe com o parâmetro--"
+"sw_renderer."
+
+#: src/slic3r/GUI/OpenGLManager.cpp:267
+msgid "Unsupported OpenGL version"
+msgstr "Versão do OpenGL não suportada"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:275
+#, c-format
+msgid ""
+"Unable to load the following shaders:\n"
+"%s"
+msgstr ""
+"E tem as seguintes alterações não salvas:\n"
+"%s"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:276
+msgid "Error loading shaders"
+msgstr "Erro carregando shaders"
+
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Top"
 msgstr "Topo"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:259
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Bottom"
 msgstr "Base"
 
-#: src/slic3r/GUI/Plater.cpp:161
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:55
+msgid "Delete this preset from this printer device"
+msgstr "Deletar predefinição desta impressora"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:85
+msgid "This printer will be shown in the presets list as"
+msgstr "Esta impressora será na lista de predefinição como"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:159
+msgid "Physical Printer"
+msgstr "Impressora Física"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:165
+msgid "Type here the name of your printer device"
+msgstr "Insira o formato da mesa de impressão"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:176
+msgid "Descriptive name for the printer device"
+msgstr "Nome do fornecedor da impressora"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:180
+msgid "Add preset for this printer device"
+msgstr "Adicionar predefinição para esta impressora"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:209 src/slic3r/GUI/Tab.cpp:2024
+msgid "Print Host upload"
+msgstr "Upload do host de impressão"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:284
+msgid "Test"
+msgstr "Teste"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:289
+msgid "Could not get a valid Printer Host reference"
+msgstr "Não foi possível obter uma referência de host de impressora válida"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
+msgid "Success!"
+msgstr "Sucesso!"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:319
+msgid ""
+"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-"
+"signed certificate."
+msgstr ""
+"O arquivo HTTPS CA é opcional. Só é necessário se você usar HTTPS com um "
+"certificado auto-assinado."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:329
+msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
+msgstr ""
+"Arquivos de certificado (*. CRT, *. pem) | *. CRT; *. pem | Todos os arquivos "
+"| *. *"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:330
+msgid "Open CA certificate file"
+msgstr "Abra o arquivo de certificado da CA"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:358 src/libslic3r/PrintConfig.cpp:113
+msgid "HTTPS CA File"
+msgstr "Arquivo de CA HTTPS"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:359
+#, c-format
+msgid ""
+"On this system, %s uses HTTPS certificates from the system Certificate Store "
+"or Keychain."
+msgstr ""
+"Neste sistema, %s usa certificados HTTPS do sistema Certificate Store ou "
+"keychain."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:360
+msgid ""
+"To use a custom CA file, please import your CA file into Certificate Store / "
+"Keychain."
+msgstr ""
+"Para usar um arquivo de CA personalizado, importe seu arquivo de CA para o "
+"repositório de certificados/chaveiro."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:464
+msgid "The supplied name is empty. It can't be saved."
+msgstr "O nome fornecido está vazio. Não pode ser salvo."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
+msgid "You should to change a name of your printer device. It can't be saved."
+msgstr "Você deve mudar o nome da sua impressora. Não pode ser salvo."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:476
+msgid "Printer with name \"%1%\" already exists."
+msgstr "Impressora com nome \"%1%\" já existe."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:477
+msgid "Replace?"
+msgstr "Substituir?"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:500
+msgid ""
+"Next printer preset(s) is(are) duplicated:%1%Should I add it(they) just once "
+"for the printer \"%2%\" and close the Editing Dialog?"
+msgstr ""
+"Seguintes predefinições da impressoras estão duplicados:%1%Devo adiciona-los "
+"uma única vez na impressora \"%2%\" e fechar Diálogo de Edição?"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:546
+msgid "It's not possible to delete last related preset for the printer."
+msgstr ""
+"Não é possível excluir a última predefinição relacionada para a impressora."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
+msgid "Infornation"
+msgstr "Informação"
+
+#: src/slic3r/GUI/Plater.cpp:167
 msgid "Volume"
 msgstr "Volume"
 
-#: src/slic3r/GUI/Plater.cpp:162
+#: src/slic3r/GUI/Plater.cpp:168
 msgid "Facets"
 msgstr "Facetas"
 
-#: src/slic3r/GUI/Plater.cpp:163
+#: src/slic3r/GUI/Plater.cpp:169
 msgid "Materials"
 msgstr "Materiais"
 
-#: src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Plater.cpp:172
 msgid "Manifold"
 msgstr "Múltiplo"
 
-#: src/slic3r/GUI/Plater.cpp:216
+#: src/slic3r/GUI/Plater.cpp:222
 msgid "Sliced Info"
 msgstr "Informações fatiadas"
 
-#: src/slic3r/GUI/Plater.cpp:235 src/slic3r/GUI/Plater.cpp:1229
+#: src/slic3r/GUI/Plater.cpp:241 src/slic3r/GUI/Plater.cpp:1141
 msgid "Used Filament (m)"
 msgstr "Filamento utilizado (m)"
 
-#: src/slic3r/GUI/Plater.cpp:236
+#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1153
 msgid "Used Filament (mm³)"
 msgstr "Filamento utilizado (mm³)"
 
-#: src/slic3r/GUI/Plater.cpp:237
+#: src/slic3r/GUI/Plater.cpp:243
 msgid "Used Filament (g)"
 msgstr "Filamento utilizado (g)"
 
-#: src/slic3r/GUI/Plater.cpp:238
+#: src/slic3r/GUI/Plater.cpp:244
 msgid "Used Material (unit)"
 msgstr "Material utilizado (unidade)"
 
-#: src/slic3r/GUI/Plater.cpp:239
+#: src/slic3r/GUI/Plater.cpp:245
 msgid "Cost (money)"
 msgstr "Custo (dinheiro)"
 
-#: src/slic3r/GUI/Plater.cpp:240 src/slic3r/GUI/Plater.cpp:1216
-#: src/slic3r/GUI/Plater.cpp:1258
-msgid "Estimated printing time"
-msgstr "Tempo estimado de impressão"
-
-#: src/slic3r/GUI/Plater.cpp:241
+#: src/slic3r/GUI/Plater.cpp:247
 msgid "Number of tool changes"
 msgstr "Número de mudanças de ferramenta"
 
-#: src/slic3r/GUI/Plater.cpp:343
-msgid "Click to edit preset"
-msgstr "Clique para editar a predefinição"
-
-#: src/slic3r/GUI/Plater.cpp:498
+#: src/slic3r/GUI/Plater.cpp:364
 msgid "Select what kind of support do you need"
 msgstr "Selecione o tipo de suporte que você precisa"
 
-#: src/slic3r/GUI/Plater.cpp:500 src/libslic3r/PrintConfig.cpp:1901
-#: src/libslic3r/PrintConfig.cpp:2684
+#: src/slic3r/GUI/Plater.cpp:366 src/libslic3r/PrintConfig.cpp:2043
+#: src/libslic3r/PrintConfig.cpp:2838
 msgid "Support on build plate only"
 msgstr "Suportes somente na mesa de impressão"
 
-#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Plater.cpp:624
+#: src/slic3r/GUI/Plater.cpp:367 src/slic3r/GUI/Plater.cpp:490
 msgid "For support enforcers only"
 msgstr "Para apenas reforçadores de suporte"
 
-#: src/slic3r/GUI/Plater.cpp:502
+#: src/slic3r/GUI/Plater.cpp:368
 msgid "Everywhere"
 msgstr "Em toda parte"
 
-#: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1116
+#: src/slic3r/GUI/Plater.cpp:400 src/slic3r/GUI/Tab.cpp:1446
 msgid "Brim"
 msgstr "Aba"
 
-#: src/slic3r/GUI/Plater.cpp:536
+#: src/slic3r/GUI/Plater.cpp:402
 msgid ""
 "This flag enables the brim that will be printed around each object on the "
 "first layer."
@@ -4211,75 +5207,71 @@ msgstr ""
 "Este sinalizador permite que a aba que será impressa em torno de cada objeto "
 "na primeira camada."
 
-#: src/slic3r/GUI/Plater.cpp:544
+#: src/slic3r/GUI/Plater.cpp:410
 msgid "Purging volumes"
 msgstr "Volumes de purga"
 
-#: src/slic3r/GUI/Plater.cpp:638
+#: src/slic3r/GUI/Plater.cpp:504
 msgid "Select what kind of pad do you need"
 msgstr "Selecione o tipo de bloco que você precisa"
 
-#: src/slic3r/GUI/Plater.cpp:640
+#: src/slic3r/GUI/Plater.cpp:506
 msgid "Below object"
 msgstr "Abaixo do objeto"
 
-#: src/slic3r/GUI/Plater.cpp:641
+#: src/slic3r/GUI/Plater.cpp:507
 msgid "Around object"
 msgstr "Em torno do objeto"
 
-#: src/slic3r/GUI/Plater.cpp:815
+#: src/slic3r/GUI/Plater.cpp:690
 msgid "Print settings"
 msgstr "Config. de impressão"
 
-#: src/slic3r/GUI/Plater.cpp:816 src/slic3r/GUI/Tab.cpp:1424
-#: src/slic3r/GUI/Tab.cpp:1425
+#: src/slic3r/GUI/Plater.cpp:691 src/slic3r/GUI/Tab.cpp:1770
+#: src/slic3r/GUI/Tab.cpp:1771
 msgid "Filament"
 msgstr "Filamento"
 
-#: src/slic3r/GUI/Plater.cpp:817
+#: src/slic3r/GUI/Plater.cpp:692
 msgid "SLA print settings"
 msgstr "Config. de impressão de SLA"
 
-#: src/slic3r/GUI/Plater.cpp:818 src/slic3r/GUI/Preset.cpp:1536
+#: src/slic3r/GUI/Plater.cpp:693 src/libslic3r/Preset.cpp:1303
 msgid "SLA material"
 msgstr "Material de SLA"
 
-#: src/slic3r/GUI/Plater.cpp:819
+#: src/slic3r/GUI/Plater.cpp:694
 msgid "Printer"
 msgstr "Impressora"
 
-#: src/slic3r/GUI/Plater.cpp:878 src/slic3r/GUI/Plater.cpp:5523
+#: src/slic3r/GUI/Plater.cpp:753 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send to printer"
 msgstr "Enviar para a impressora"
 
-#: src/slic3r/GUI/Plater.cpp:879
+#: src/slic3r/GUI/Plater.cpp:754
 msgid "Remove device"
 msgstr "Remover dispositivo"
 
-#: src/slic3r/GUI/Plater.cpp:880
-msgid "Export to SD card / Flash drive"
-msgstr "Exportar para cartão SD / unidade Flash"
-
-#: src/slic3r/GUI/Plater.cpp:892 src/slic3r/GUI/Plater.cpp:3123
-#: src/slic3r/GUI/Plater.cpp:5112
+#: src/slic3r/GUI/Plater.cpp:767 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5237
 msgid "Slice now"
 msgstr "Fatiar agora"
 
-#: src/slic3r/GUI/Plater.cpp:1042
+#: src/slic3r/GUI/Plater.cpp:916
 msgid "Hold Shift to Slice & Export G-code"
 msgstr "Hold Shift to Slice & Export G-code"
 
-#: src/slic3r/GUI/Plater.cpp:1152
+#: src/slic3r/GUI/Plater.cpp:1061
 #, c-format
 msgid "%d (%d shells)"
 msgstr "%d (%d paredes)"
 
-#: src/slic3r/GUI/Plater.cpp:1157
+#: src/slic3r/GUI/Plater.cpp:1066
 #, c-format
 msgid "Auto-repaired (%d errors)"
 msgstr "Auto reparando (%d erros):"
 
-#: src/slic3r/GUI/Plater.cpp:1160
+#: src/slic3r/GUI/Plater.cpp:1069
 #, c-format
 msgid ""
 "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d "
@@ -4288,82 +5280,123 @@ msgstr ""
 "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d "
 "facets reversed, %d backwards edges"
 
-#: src/slic3r/GUI/Plater.cpp:1170
+#: src/slic3r/GUI/Plater.cpp:1079
 msgid "Yes"
 msgstr "Sim"
 
-#: src/slic3r/GUI/Plater.cpp:1191
+#: src/slic3r/GUI/Plater.cpp:1100
 msgid "Used Material (ml)"
 msgstr "Material usado (ml)"
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "object(s)"
 msgstr "objeto(s)"
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "supports and pad"
 msgstr "suportes e bloco"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1141
+msgid "Used Filament (in)"
+msgstr "Filamento utilizado (pol)"
+
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "objects"
 msgstr "objetos"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "wipe tower"
 msgstr "torre de limpeza"
 
-#: src/slic3r/GUI/Plater.cpp:1243 src/libslic3r/PrintConfig.cpp:760
-#: src/libslic3r/PrintConfig.cpp:2510 src/libslic3r/PrintConfig.cpp:2511
+#: src/slic3r/GUI/Plater.cpp:1153
+msgid "Used Filament (in³)"
+msgstr "Filamento utilizado (pol³)"
+
+#: src/slic3r/GUI/Plater.cpp:1158 src/libslic3r/PrintConfig.cpp:796
+#: src/libslic3r/PrintConfig.cpp:2653 src/libslic3r/PrintConfig.cpp:2654
 msgid "Cost"
 msgstr "Custo"
 
-#: src/slic3r/GUI/Plater.cpp:1260 src/libslic3r/PrintConfig.cpp:582
-msgid "Color"
-msgstr "Cor"
-
-#: src/slic3r/GUI/Plater.cpp:1261
-msgid "Pause"
-msgstr "Pausar"
-
-#: src/slic3r/GUI/Plater.cpp:1286
+#: src/slic3r/GUI/Plater.cpp:1177 src/slic3r/GUI/Plater.cpp:1224
 msgid "normal mode"
 msgstr "modo normal"
 
-#: src/slic3r/GUI/Plater.cpp:1291
+#: src/slic3r/GUI/Plater.cpp:1187 src/slic3r/GUI/Plater.cpp:1235
 msgid "stealth mode"
 msgstr "modo silencioso"
 
-#: src/slic3r/GUI/Plater.cpp:1395
+#: src/slic3r/GUI/Plater.cpp:1198 src/libslic3r/PrintConfig.cpp:618
+msgid "Color"
+msgstr "Cor"
+
+#: src/slic3r/GUI/Plater.cpp:1405
+msgid "You can open only one .gcode file at a time."
+msgstr "Você pode abrir apenas um arquivo .gcode por vez."
+
+#: src/slic3r/GUI/Plater.cpp:1406
+msgid "Drag and drop G-code file"
+msgstr "Arraste e solte o arquivo G-code"
+
+#: src/slic3r/GUI/Plater.cpp:1436
 msgid "Load File"
 msgstr "Carregar arquivo"
 
-#: src/slic3r/GUI/Plater.cpp:1399
+#: src/slic3r/GUI/Plater.cpp:1440
 msgid "Load Files"
 msgstr "Carregar arquivos"
 
-#: src/slic3r/GUI/Plater.cpp:2155
+#: src/slic3r/GUI/Plater.cpp:1555
+msgid "Optimize Rotation"
+msgstr "Otimize a rotação"
+
+#: src/slic3r/GUI/Plater.cpp:1561
+msgid "Import SLA archive"
+msgstr "Não um arquivo ZIP"
+
+#: src/slic3r/GUI/Plater.cpp:2031
+#, c-format
+msgid ""
+"Unmounting successful. The device %s(%s) can now be safely removed from the "
+"computer."
+msgstr ""
+"Não montando bem sucedido. O dispositivo %s(%s) agora pode ser removido com "
+"segurança do computador."
+
+#: src/slic3r/GUI/Plater.cpp:2034
+#, c-format
+msgid "Ejecting of device %s(%s) has failed."
+msgstr "Ejetar o dispositivo %s(%s)  falhou."
+
+#: src/slic3r/GUI/Plater.cpp:2056
 msgid "New Project"
 msgstr "Novo projeto"
 
-#: src/slic3r/GUI/Plater.cpp:2275
+#: src/slic3r/GUI/Plater.cpp:2143
+msgid "Expand sidebar"
+msgstr "Expandir barra lateral"
+
+#: src/slic3r/GUI/Plater.cpp:2216
 msgid "Loading"
 msgstr "Carregando"
 
-#: src/slic3r/GUI/Plater.cpp:2285
+#: src/slic3r/GUI/Plater.cpp:2226
+msgid "Loading file"
+msgstr "Carregar arquivo de config"
+
+#: src/slic3r/GUI/Plater.cpp:2309
 #, c-format
-msgid "Processing input file %s"
-msgstr "Processando o arquivo de entrada %s"
-
-#: src/slic3r/GUI/Plater.cpp:2313
-msgid "You cannot load SLA project with a multi-part object on the bed"
+msgid ""
+"Some object(s) in file %s looks like saved in inches.\n"
+"Should I consider them as a saved in inches and convert them?"
 msgstr ""
-"Você não pode carregar o projeto SLA com um objeto de várias partes na cama"
+"Alguns objetos no arquivo %s parecem ser salvos em polegadas.\n"
+"Devo considerá-los como salvos em polegadas e convertê-los?"
 
-#: src/slic3r/GUI/Plater.cpp:2314 src/slic3r/GUI/Tab.cpp:2961
-msgid "Please check your object list before preset changing."
-msgstr "Verifique a lista de objetos antes de alterar a predefinição."
+#: src/slic3r/GUI/Plater.cpp:2311
+msgid "Saved in inches object detected"
+msgstr "Detectado objeto salvo em polegadas"
 
-#: src/slic3r/GUI/Plater.cpp:2359
+#: src/slic3r/GUI/Plater.cpp:2319
 msgid ""
 "This file contains several objects positioned at multiple heights.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -4373,11 +5406,11 @@ msgstr ""
 "Em vez de considerá-los como múltiplos objetos, devo considerar\n"
 "Este arquivo como um único objeto com várias partes?"
 
-#: src/slic3r/GUI/Plater.cpp:2362 src/slic3r/GUI/Plater.cpp:2415
+#: src/slic3r/GUI/Plater.cpp:2322 src/slic3r/GUI/Plater.cpp:2375
 msgid "Multi-part object detected"
 msgstr "Objeto de várias partes detectado"
 
-#: src/slic3r/GUI/Plater.cpp:2369
+#: src/slic3r/GUI/Plater.cpp:2329
 msgid ""
 "This file cannot be loaded in a simple mode. Do you want to switch to an "
 "advanced mode?"
@@ -4385,20 +5418,20 @@ msgstr ""
 "Este arquivo não pode ser carregado em um modo simples. Deseja mudar para um "
 "modo avançado?"
 
-#: src/slic3r/GUI/Plater.cpp:2370
+#: src/slic3r/GUI/Plater.cpp:2330
 msgid "Detected advanced data"
 msgstr "Dados avançados detectados"
 
-#: src/slic3r/GUI/Plater.cpp:2392
+#: src/slic3r/GUI/Plater.cpp:2352
 #, c-format
 msgid ""
-"You can't to add the object(s) from %s because of one or some of them "
-"is(are) multi-part"
+"You can't to add the object(s) from %s because of one or some of them is(are) "
+"multi-part"
 msgstr ""
 "Você não pode adicionar o objeto (s) %s por causa de um ou alguns deles é "
 "(são) de várias partes"
 
-#: src/slic3r/GUI/Plater.cpp:2412
+#: src/slic3r/GUI/Plater.cpp:2372
 msgid ""
 "Multiple objects were loaded for a multi-material printer.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -4408,101 +5441,47 @@ msgstr ""
 "Em vez de considerá-los como múltiplos objetos, devo considerar\n"
 "esses arquivos para representar um único objeto com várias partes?"
 
-#: src/slic3r/GUI/Plater.cpp:2428
+#: src/slic3r/GUI/Plater.cpp:2388
 msgid "Loaded"
 msgstr "Carregado"
 
-#: src/slic3r/GUI/Plater.cpp:2530
+#: src/slic3r/GUI/Plater.cpp:2490
 msgid ""
 "Your object appears to be too large, so it was automatically scaled down to "
 "fit your print bed."
 msgstr ""
-"Seu objeto parece ser muito grande, por isso foi automaticamente "
-"dimensionado para baixo para caber sua mesa de impressão."
+"Seu objeto parece ser muito grande, por isso foi automaticamente dimensionado "
+"para baixo para caber sua mesa de impressão."
 
-#: src/slic3r/GUI/Plater.cpp:2531
+#: src/slic3r/GUI/Plater.cpp:2491
 msgid "Object too large?"
 msgstr "Objeto muito grande?"
 
-#: src/slic3r/GUI/Plater.cpp:2593
+#: src/slic3r/GUI/Plater.cpp:2553
 msgid "Export STL file:"
 msgstr "Exportar arquivo STL:"
 
-#: src/slic3r/GUI/Plater.cpp:2600
+#: src/slic3r/GUI/Plater.cpp:2560
 msgid "Export AMF file:"
 msgstr "Exportar arquivo AMF:"
 
-#: src/slic3r/GUI/Plater.cpp:2606
+#: src/slic3r/GUI/Plater.cpp:2566
 msgid "Save file as:"
 msgstr "Salvar arquivo como:"
 
-#: src/slic3r/GUI/Plater.cpp:2612
+#: src/slic3r/GUI/Plater.cpp:2572
 msgid "Export OBJ file:"
 msgstr "Exportar arquivo OBJ:"
 
-#: src/slic3r/GUI/Plater.cpp:2714
+#: src/slic3r/GUI/Plater.cpp:2673
 msgid "Delete Object"
 msgstr "Excluir objeto"
 
-#: src/slic3r/GUI/Plater.cpp:2725
+#: src/slic3r/GUI/Plater.cpp:2684
 msgid "Reset Project"
 msgstr "Redefinir projeto"
 
-#: src/slic3r/GUI/Plater.cpp:2762
-msgid "Hollow"
-msgstr "Vazado"
-
-#: src/slic3r/GUI/Plater.cpp:2769
-msgid "Optimize Rotation"
-msgstr "Otimize a rotação"
-
-#: src/slic3r/GUI/Plater.cpp:2815
-msgid "Arranging"
-msgstr "Organizar"
-
-#: src/slic3r/GUI/Plater.cpp:2837
-msgid "Could not arrange model objects! Some geometries may be invalid."
-msgstr ""
-"Não foi possível organizar objetos de modelo! Algumas geometrias podem ser "
-"inválidas."
-
-#: src/slic3r/GUI/Plater.cpp:2843
-msgid "Arranging canceled."
-msgstr "Arranjo cancelado."
-
-#: src/slic3r/GUI/Plater.cpp:2844
-msgid "Arranging done."
-msgstr "Arranjo feito."
-
-#: src/slic3r/GUI/Plater.cpp:2860
-msgid "Searching for optimal orientation"
-msgstr "Procurando orientação ideal"
-
-#: src/slic3r/GUI/Plater.cpp:2893
-msgid "Orientation search canceled."
-msgstr "Pesquisa de orientação cancelada."
-
-#: src/slic3r/GUI/Plater.cpp:2894
-msgid "Orientation found."
-msgstr "Orientação encontrada."
-
-#: src/slic3r/GUI/Plater.cpp:2924
-msgid "Indexing hollowed object"
-msgstr "Indexando objeto oco"
-
-#: src/slic3r/GUI/Plater.cpp:2928
-msgid "Hollowing cancelled."
-msgstr "Cancelado"
-
-#: src/slic3r/GUI/Plater.cpp:2929
-msgid "Hollowing done."
-msgstr "Deixado oco pronto."
-
-#: src/slic3r/GUI/Plater.cpp:2931
-msgid "Hollowing failed."
-msgstr "Deixar oco falhou."
-
-#: src/slic3r/GUI/Plater.cpp:2972
+#: src/slic3r/GUI/Plater.cpp:2763
 msgid ""
 "The selected object can't be split because it contains more than one volume/"
 "material."
@@ -4510,278 +5489,269 @@ msgstr ""
 "O objeto selecionado não pode ser dividido porque contém mais de um volume/"
 "material."
 
-#: src/slic3r/GUI/Plater.cpp:2983
+#: src/slic3r/GUI/Plater.cpp:2774
 msgid "Split to Objects"
 msgstr "Dividir em objetos"
 
-#: src/slic3r/GUI/Plater.cpp:3108
+#: src/slic3r/GUI/Plater.cpp:2906 src/slic3r/GUI/Plater.cpp:3583
 msgid "Invalid data"
 msgstr "Dados inválidos"
 
-#: src/slic3r/GUI/Plater.cpp:3117
+#: src/slic3r/GUI/Plater.cpp:2915
 msgid "Ready to slice"
 msgstr "Pronto para fatiar"
 
-#: src/slic3r/GUI/Plater.cpp:3155 src/slic3r/GUI/PrintHostDialogs.cpp:232
+#: src/slic3r/GUI/Plater.cpp:2953 src/slic3r/GUI/PrintHostDialogs.cpp:232
 msgid "Cancelling"
 msgstr "Cancelar"
 
-#: src/slic3r/GUI/Plater.cpp:3172
+#: src/slic3r/GUI/Plater.cpp:2972
 msgid "Another export job is currently running."
 msgstr "Outro trabalho de exportação está em execução no momento."
 
-#: src/slic3r/GUI/Plater.cpp:3288
+#: src/slic3r/GUI/Plater.cpp:3089
 msgid "Please select the file to reload"
 msgstr "Selecione o arquivo STL para recarregar"
 
-#: src/slic3r/GUI/Plater.cpp:3323
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "It is not allowed to change the file to reload"
 msgstr "Não é permitido alterar o arquivo para recarregar"
 
-#: src/slic3r/GUI/Plater.cpp:3323
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "Do you want to retry"
 msgstr "Você quer prosseguir"
 
-#: src/slic3r/GUI/Plater.cpp:3341
+#: src/slic3r/GUI/Plater.cpp:3142
 msgid "Reload from:"
 msgstr "Recarregar a partir do disco:"
 
-#: src/slic3r/GUI/Plater.cpp:3430
+#: src/slic3r/GUI/Plater.cpp:3233
 msgid "Unable to reload:"
 msgstr "Não é possível recarregar:"
 
-#: src/slic3r/GUI/Plater.cpp:3435
+#: src/slic3r/GUI/Plater.cpp:3238
 msgid "Error during reload"
 msgstr "Erro durante a recarga"
 
-#: src/slic3r/GUI/Plater.cpp:3454
+#: src/slic3r/GUI/Plater.cpp:3257
 msgid "Reload all from disk"
 msgstr "Recarregar tudo do disco"
 
-#: src/slic3r/GUI/Plater.cpp:3475
+#: src/slic3r/GUI/Plater.cpp:3278
 msgid "Fix Throught NetFabb"
 msgstr "Arrumar através do  NetFabb"
 
-#: src/slic3r/GUI/Plater.cpp:3666
-msgid "Export failed"
-msgstr "Falha na exportação"
+#: src/slic3r/GUI/Plater.cpp:3543
+msgid "There are active warnings concerning sliced models:\n"
+msgstr "Existem avisos ativos sobre modelos fatiados:\n"
 
-#: src/slic3r/GUI/Plater.cpp:3671 src/slic3r/GUI/PrintHostDialogs.cpp:233
+#: src/slic3r/GUI/Plater.cpp:3554
+msgid "generated warnings"
+msgstr "pontos gerados automaticamente"
+
+#: src/slic3r/GUI/Plater.cpp:3589 src/slic3r/GUI/PrintHostDialogs.cpp:233
 msgid "Cancelled"
 msgstr "Cancelado"
 
-#: src/slic3r/GUI/Plater.cpp:3933 src/slic3r/GUI/Plater.cpp:3955
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
 msgid "Remove the selected object"
 msgstr "Remover o objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/Plater.cpp:3858
 msgid "Add one more instance of the selected object"
 msgstr "Adicionar mais uma instância do objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove one instance of the selected object"
 msgstr "Remover uma instância do objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3946
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Set number of instances"
 msgstr "Definir o número de instâncias"
 
-#: src/slic3r/GUI/Plater.cpp:3946
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Change the number of instances of the selected object"
 msgstr "Alterar o número de instâncias do objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:3965
+#: src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload the selected object from disk"
 msgstr "Recarregue o objeto selecionado do disco"
 
-#: src/slic3r/GUI/Plater.cpp:3968
+#: src/slic3r/GUI/Plater.cpp:3884
 msgid "Export the selected object as STL file"
 msgstr "Exportar o objeto selecionado como arquivo STL"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Along X axis"
 msgstr "Ao longo do eixo X"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Mirror the selected object along the X axis"
 msgstr "Espelhar o objeto selecionado ao longo do eixo X"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Along Y axis"
 msgstr "Ao longo do eixo Y"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Mirror the selected object along the Y axis"
 msgstr "Espelhar o objeto selecionado ao longo do eixo Y"
 
-#: src/slic3r/GUI/Plater.cpp:4001
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Along Z axis"
 msgstr "Ao longo do eixo Z"
 
-#: src/slic3r/GUI/Plater.cpp:4001
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Mirror the selected object along the Z axis"
 msgstr "Espelhar o objeto selecionado ao longo do eixo Z"
 
-#: src/slic3r/GUI/Plater.cpp:4004
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror"
 msgstr "Espelhar"
 
-#: src/slic3r/GUI/Plater.cpp:4004
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror the selected object"
 msgstr "Espelhar o objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:4016
+#: src/slic3r/GUI/Plater.cpp:3934
 msgid "To objects"
 msgstr "Para objetos"
 
-#: src/slic3r/GUI/Plater.cpp:4016 src/slic3r/GUI/Plater.cpp:4036
+#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3954
 msgid "Split the selected object into individual objects"
 msgstr "Dividir o objeto selecionado em objetos individuais"
 
-#: src/slic3r/GUI/Plater.cpp:4018
+#: src/slic3r/GUI/Plater.cpp:3936
 msgid "To parts"
 msgstr "Para peças"
 
-#: src/slic3r/GUI/Plater.cpp:4018 src/slic3r/GUI/Plater.cpp:4050
+#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3972
 msgid "Split the selected object into individual sub-parts"
 msgstr "Dividir o objeto selecionado em subpartes individuais"
 
-#: src/slic3r/GUI/Plater.cpp:4021 src/slic3r/GUI/Plater.cpp:4036
-#: src/slic3r/GUI/Plater.cpp:4050 src/libslic3r/PrintConfig.cpp:3481
+#: src/slic3r/GUI/Plater.cpp:3939 src/slic3r/GUI/Plater.cpp:3954
+#: src/slic3r/GUI/Plater.cpp:3972 src/libslic3r/PrintConfig.cpp:3670
 msgid "Split"
 msgstr "Dividir"
 
-#: src/slic3r/GUI/Plater.cpp:4021
+#: src/slic3r/GUI/Plater.cpp:3939
 msgid "Split the selected object"
 msgstr "Dividir o objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:4042
-msgid "Optimize orientation"
-msgstr "Otimize a orientação"
-
-#: src/slic3r/GUI/Plater.cpp:4042
+#: src/slic3r/GUI/Plater.cpp:3962
 msgid "Optimize the rotation of the object for better print results."
-msgstr ""
-"Otimize a rotação do objeto para obter melhores resultados de impressão."
+msgstr "Otimize a rotação do objeto para obter melhores resultados de impressão."
 
-#: src/slic3r/GUI/Plater.cpp:4099
+#: src/slic3r/GUI/Plater.cpp:4044
 msgid "3D editor view"
 msgstr "vista do editor 3D"
 
-#: src/slic3r/GUI/Plater.cpp:4402
+#: src/slic3r/GUI/Plater.cpp:4423
 msgid ""
-"%1% printer was active at the time the target Undo / Redo snapshot was "
-"taken. Switching to %1% printer requires reloading of %1% presets."
+"%1% printer was active at the time the target Undo / Redo snapshot was taken. "
+"Switching to %1% printer requires reloading of %1% presets."
 msgstr ""
-"a impressora %1% estava ativa no momento em que a captura de desfazer/"
-"refazer de destino foi tirado. Mudar para %1% impressora requer recarga de "
-"%1% predefinições."
+"a impressora %1% estava ativa no momento em que a captura de desfazer/refazer "
+"de destino foi tirado. Mudar para %1% impressora requer recarga de %1% "
+"predefinições."
 
-#: src/slic3r/GUI/Plater.cpp:4577
+#: src/slic3r/GUI/Plater.cpp:4627
 msgid "Load Project"
 msgstr "Carregar projeto"
 
-#: src/slic3r/GUI/Plater.cpp:4605
+#: src/slic3r/GUI/Plater.cpp:4655
 msgid "Import Object"
 msgstr "Importar objeto"
 
-#: src/slic3r/GUI/Plater.cpp:4609
+#: src/slic3r/GUI/Plater.cpp:4659
 msgid "Import Objects"
 msgstr "Importar objetos"
 
-#: src/slic3r/GUI/Plater.cpp:4671
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "All objects will be removed, continue?"
 msgstr "Todos os objetos serão removidos, continuar?"
 
-#: src/slic3r/GUI/Plater.cpp:4679
+#: src/slic3r/GUI/Plater.cpp:4782
 msgid "Delete Selected Objects"
 msgstr "Excluir objetos selecionados"
 
-#: src/slic3r/GUI/Plater.cpp:4687
+#: src/slic3r/GUI/Plater.cpp:4790
 msgid "Increase Instances"
 msgstr "Aumentar instâncias"
 
-#: src/slic3r/GUI/Plater.cpp:4722
+#: src/slic3r/GUI/Plater.cpp:4824
 msgid "Decrease Instances"
 msgstr "Diminuir instâncias"
 
-#: src/slic3r/GUI/Plater.cpp:4753
+#: src/slic3r/GUI/Plater.cpp:4855
 msgid "Enter the number of copies:"
 msgstr "Definir números de cópias:"
 
-#: src/slic3r/GUI/Plater.cpp:4754
+#: src/slic3r/GUI/Plater.cpp:4856
 msgid "Copies of the selected object"
 msgstr "Cópias do objeto selecionado"
 
-#: src/slic3r/GUI/Plater.cpp:4758
+#: src/slic3r/GUI/Plater.cpp:4860
 #, c-format
 msgid "Set numbers of copies to %d"
 msgstr "Definir números de cópias para %d"
 
-#: src/slic3r/GUI/Plater.cpp:4788
+#: src/slic3r/GUI/Plater.cpp:4921
 msgid "Cut by Plane"
 msgstr "Cortado por plano"
 
-#: src/slic3r/GUI/Plater.cpp:4841
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save G-code file as:"
 msgstr "Salve o arquivo G-code como:"
 
-#: src/slic3r/GUI/Plater.cpp:4841
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save SL1 file as:"
 msgstr "Salvar SL1 arquivo como:"
 
-#: src/slic3r/GUI/Plater.cpp:4987
+#: src/slic3r/GUI/Plater.cpp:5118
 #, c-format
 msgid "STL file exported to %s"
 msgstr "Arquivo STL exportado para %s"
 
-#: src/slic3r/GUI/Plater.cpp:5004
+#: src/slic3r/GUI/Plater.cpp:5135
 #, c-format
 msgid "AMF file exported to %s"
 msgstr "Arquivo AMF exportado para %s"
 
-#: src/slic3r/GUI/Plater.cpp:5007
+#: src/slic3r/GUI/Plater.cpp:5138
 #, c-format
 msgid "Error exporting AMF file %s"
 msgstr "Erro ao exportar arquivo AMF %s"
 
-#: src/slic3r/GUI/Plater.cpp:5040
+#: src/slic3r/GUI/Plater.cpp:5167
 #, c-format
 msgid "3MF file exported to %s"
 msgstr "Arquivo 3MF exportado para %s"
 
-#: src/slic3r/GUI/Plater.cpp:5045
+#: src/slic3r/GUI/Plater.cpp:5172
 #, c-format
 msgid "Error exporting 3MF file %s"
 msgstr "Erro ao exportar arquivo 3MF %s"
 
-#: src/slic3r/GUI/Plater.cpp:5205
-#, c-format
-msgid ""
-"Unmounting successful. The device %s(%s) can now be safely removed from the "
-"computer."
-msgstr ""
-"Não montando bem sucedido. O dispositivo %s(%s) agora pode ser removido com "
-"segurança do computador."
-
-#: src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/Plater.cpp:5706
 msgid "Export"
 msgstr "Exportar"
 
-#: src/slic3r/GUI/Plater.cpp:5608
+#: src/slic3r/GUI/Plater.cpp:5803
 msgid "Paste From Clipboard"
 msgstr "Colar da área de transferência"
 
-#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1798
-#: src/slic3r/GUI/Tab.cpp:2042
+#: src/slic3r/GUI/Preferences.cpp:24 src/slic3r/GUI/Tab.cpp:2058
+#: src/slic3r/GUI/Tab.cpp:2240 src/slic3r/GUI/Tab.cpp:2348
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "General"
 msgstr "Geral"
 
-#: src/slic3r/GUI/Preferences.cpp:39
+#: src/slic3r/GUI/Preferences.cpp:52
 msgid "Remember output directory"
 msgstr "Lembrar diretório de saída"
 
-#: src/slic3r/GUI/Preferences.cpp:41
+#: src/slic3r/GUI/Preferences.cpp:54
 msgid ""
 "If this is enabled, Slic3r will prompt the last output directory instead of "
 "the one containing the input files."
@@ -4789,11 +5759,11 @@ msgstr ""
 "Se isso estiver habilitado, Slic3r solicitará o último diretório de saída em "
 "vez de um contendo os arquivos de entrada."
 
-#: src/slic3r/GUI/Preferences.cpp:47
+#: src/slic3r/GUI/Preferences.cpp:64
 msgid "Auto-center parts"
 msgstr "Centrar automaticamente as partes"
 
-#: src/slic3r/GUI/Preferences.cpp:49
+#: src/slic3r/GUI/Preferences.cpp:66
 msgid ""
 "If this is enabled, Slic3r will auto-center objects around the print bed "
 "center."
@@ -4801,44 +5771,43 @@ msgstr ""
 "Se isso estiver habilitado, o Slic3r irá centralizar objetos automaticamente "
 "ao redor do centro de mesa de impressão."
 
-#: src/slic3r/GUI/Preferences.cpp:55
+#: src/slic3r/GUI/Preferences.cpp:72
 msgid "Background processing"
 msgstr "Processamento em segundo plano"
 
-#: src/slic3r/GUI/Preferences.cpp:57
+#: src/slic3r/GUI/Preferences.cpp:74
 msgid ""
-"If this is enabled, Slic3r will pre-process objects as soon as they're "
-"loaded in order to save time when exporting G-code."
+"If this is enabled, Slic3r will pre-process objects as soon as they're loaded "
+"in order to save time when exporting G-code."
 msgstr ""
 "Se isso estiver ativado, o Slic3r irá pré-processar objetos assim que eles "
 "forem carregados para economizar tempo ao exportar o G-code."
 
-#: src/slic3r/GUI/Preferences.cpp:66
+#: src/slic3r/GUI/Preferences.cpp:83
 msgid ""
-"If enabled, PrusaSlicer will check for the new versions of itself online. "
-"When a new version becomes available a notification is displayed at the next "
-"application startup (never during program usage). This is only a "
-"notification mechanisms, no automatic installation is done."
+"If enabled, PrusaSlicer will check for the new versions of itself online. When "
+"a new version becomes available a notification is displayed at the next "
+"application startup (never during program usage). This is only a notification "
+"mechanisms, no automatic installation is done."
 msgstr ""
-"Se habilitado, PrusaSlicer irá verificar as novas versões de si mesmo on-"
-"line. Quando uma nova versão se torna disponível, uma notificação é exibida "
-"na próxima inicialização do aplicativo (nunca durante o uso do programa). "
-"Este é apenas um mecanismos de notificação, nenhuma instalação automática é "
-"feita."
+"Se habilitado, PrusaSlicer irá verificar as novas versões de si mesmo on-line. "
+"Quando uma nova versão se torna disponível, uma notificação é exibida na "
+"próxima inicialização do aplicativo (nunca durante o uso do programa). Este é "
+"apenas um mecanismos de notificação, nenhuma instalação automática é feita."
 
-#: src/slic3r/GUI/Preferences.cpp:72
+#: src/slic3r/GUI/Preferences.cpp:89
 msgid "Export sources full pathnames to 3mf and amf"
 msgstr "Fontes de exportação completas para 3mf e amf"
 
-#: src/slic3r/GUI/Preferences.cpp:74
+#: src/slic3r/GUI/Preferences.cpp:91
 msgid ""
-"If enabled, allows the Reload from disk command to automatically find and "
-"load the files when invoked."
+"If enabled, allows the Reload from disk command to automatically find and load "
+"the files when invoked."
 msgstr ""
 "Se ativado, permite que o comando Reload from disk encontre e carregue "
 "automaticamente os arquivos quando invocado."
 
-#: src/slic3r/GUI/Preferences.cpp:82
+#: src/slic3r/GUI/Preferences.cpp:99
 msgid ""
 "If enabled, Slic3r downloads updates of built-in system presets in the "
 "background. These updates are downloaded into a separate temporary location. "
@@ -4850,23 +5819,23 @@ msgstr ""
 "temporário separado. Quando uma nova versão predefinida se torna disponível, "
 "ela é oferecida na inicialização do aplicativo."
 
-#: src/slic3r/GUI/Preferences.cpp:87
+#: src/slic3r/GUI/Preferences.cpp:104
 msgid "Suppress \" - default - \" presets"
 msgstr "Suprimir predefinições \"-padrão-\""
 
-#: src/slic3r/GUI/Preferences.cpp:89
+#: src/slic3r/GUI/Preferences.cpp:106
 msgid ""
 "Suppress \" - default - \" presets in the Print / Filament / Printer "
 "selections once there are any other valid presets available."
 msgstr ""
-"Suprimir predefinições \"-padrão-\" em impressão/filamento/impressora, uma "
-"vez que existam outras predefinições válidas disponíveis."
+"Suprimir predefinições \"-padrão-\" em impressão/filamento/impressora, uma vez "
+"que existam outras predefinições válidas disponíveis."
 
-#: src/slic3r/GUI/Preferences.cpp:95
+#: src/slic3r/GUI/Preferences.cpp:112
 msgid "Show incompatible print and filament presets"
 msgstr "Mostrar predefinições de impressão e filamento incompatíveis"
 
-#: src/slic3r/GUI/Preferences.cpp:97
+#: src/slic3r/GUI/Preferences.cpp:114
 msgid ""
 "When checked, the print and filament presets are shown in the preset editor "
 "even if they are marked as incompatible with the active printer"
@@ -4875,11 +5844,34 @@ msgstr ""
 "editor de predefinições, mesmo que estejam marcadas como incompatíveis com a "
 "impressora ativa"
 
-#: src/slic3r/GUI/Preferences.cpp:104
+#: src/slic3r/GUI/Preferences.cpp:120 src/libslic3r/PrintConfig.cpp:3697
+msgid "Single Instance"
+msgstr "Instancia única"
+
+#: src/slic3r/GUI/Preferences.cpp:123
+msgid ""
+"On OSX there is always only one instance of app running by default. However it "
+"is allowed to run multiple instances of same app from the command line. In "
+"such case this settings will allow only one instance."
+msgstr ""
+"No OSX, sempre há apenas uma instância do aplicativo em execução por padrão. "
+"No entanto, é permitido executar várias instâncias do mesmo aplicativo a "
+"partir da linha de comando. Nesse caso, essas configurações permitirão apenas "
+"uma instância."
+
+#: src/slic3r/GUI/Preferences.cpp:125
+msgid ""
+"If this is enabled, when staring PrusaSlicer and another instance of same "
+"PrusaSlicer is running, that instance will be reactivated instead."
+msgstr ""
+"Se estiver habilitado, ao iniciar o PrusaSlicer e outra instância do mesmo "
+"PrusaSlicer estiver em execução, essa instância será reativada."
+
+#: src/slic3r/GUI/Preferences.cpp:135
 msgid "Use Retina resolution for the 3D scene"
 msgstr "Usar a resolução retina para a cena 3D"
 
-#: src/slic3r/GUI/Preferences.cpp:106
+#: src/slic3r/GUI/Preferences.cpp:137
 msgid ""
 "If enabled, the 3D scene will be rendered in Retina resolution. If you are "
 "experiencing 3D performance problems, disabling this option may help."
@@ -4887,256 +5879,362 @@ msgstr ""
 "Se ativada, a cena 3D será renderizada na resolução retina. Se você estiver "
 "enfrentando problemas de desempenho 3D, desabilitar essa opção pode ajudar."
 
-#: src/slic3r/GUI/Preferences.cpp:113
+#: src/slic3r/GUI/Preferences.cpp:154 src/slic3r/GUI/UnsavedChangesDialog.cpp:659
+msgid "Ask for unsaved changes when closing application"
+msgstr "Pergunte sobre mudanças não salvas quando fechar aplicação"
+
+#: src/slic3r/GUI/Preferences.cpp:156
+msgid "Always ask for unsaved changes when closing application"
+msgstr "Sempre pergunte sobre mudanças não salvas quando fechar aplicação"
+
+#: src/slic3r/GUI/Preferences.cpp:161 src/slic3r/GUI/UnsavedChangesDialog.cpp:660
+msgid "Ask for unsaved changes when selecting new preset"
+msgstr "Pergunte sobre mudanças não salvas quando selecionar nova predefinição"
+
+#: src/slic3r/GUI/Preferences.cpp:163
+msgid "Always ask for unsaved changes when selecting new preset"
+msgstr ""
+"Sempre pergunte sobre mudanças não salvas quando selecionar nova predefinição"
+
+#: src/slic3r/GUI/Preferences.cpp:169 src/slic3r/GUI/Preferences.cpp:171
+msgid "Show splash screen"
+msgstr "Mostrar tela inicial"
+
+#: src/slic3r/GUI/Preferences.cpp:178
 msgid "Camera"
 msgstr "Câmera"
 
-#: src/slic3r/GUI/Preferences.cpp:119
+#: src/slic3r/GUI/Preferences.cpp:184
 msgid "Use perspective camera"
 msgstr "Usar a câmera em perspectiva"
 
-#: src/slic3r/GUI/Preferences.cpp:121
+#: src/slic3r/GUI/Preferences.cpp:186
 msgid ""
 "If enabled, use perspective camera. If not enabled, use orthographic camera."
 msgstr ""
-"Se ativada, use a câmera em perspectiva. Se não estiver ativada, use a "
-"câmera ortográfica."
+"Se ativada, use a câmera em perspectiva. Se não estiver ativada, use a câmera "
+"ortográfica."
 
-#: src/slic3r/GUI/Preferences.cpp:126
+#: src/slic3r/GUI/Preferences.cpp:191
 msgid "Use free camera"
 msgstr "Use câmera livre"
 
-#: src/slic3r/GUI/Preferences.cpp:128
+#: src/slic3r/GUI/Preferences.cpp:193
 msgid "If enabled, use free camera. If not enabled, use constrained camera."
 msgstr ""
-"Se ativado, use câmera livre. Se não estiver habilitado, use a câmera "
-"restrita."
+"Se ativado, use câmera livre. Se não estiver habilitado, use a câmera restrita."
 
-#: src/slic3r/GUI/Preferences.cpp:133
+#: src/slic3r/GUI/Preferences.cpp:200
 msgid "GUI"
 msgstr "GUI"
 
-#: src/slic3r/GUI/Preferences.cpp:143
+#: src/slic3r/GUI/Preferences.cpp:213
+msgid "Show sidebar collapse/expand button"
+msgstr "Mostrar botão de recolher/expandir barra lateral"
+
+#: src/slic3r/GUI/Preferences.cpp:215
+msgid ""
+"If enabled, the button for the collapse sidebar will be appeared in top right "
+"corner of the 3D Scene"
+msgstr ""
+"Se ativado, o botão para recolher a barra lateral aparecerá no canto superior "
+"direito da cena 3D"
+
+#: src/slic3r/GUI/Preferences.cpp:220
 msgid "Use custom size for toolbar icons"
 msgstr "Usar tamanho personalizado para ícones da barra de ferramentas"
 
-#: src/slic3r/GUI/Preferences.cpp:145
+#: src/slic3r/GUI/Preferences.cpp:222
 msgid "If enabled, you can change size of toolbar icons manually."
 msgstr ""
 "Se ativado, você pode alterar o tamanho dos ícones da barra de ferramentas "
 "manualmente."
 
-#: src/slic3r/GUI/Preferences.cpp:172
+#: src/slic3r/GUI/Preferences.cpp:230
+msgid "Sequential slider applied only to top layer"
+msgstr "Rolagem sequencial aplicado apenas na camada de topo"
+
+#: src/slic3r/GUI/Preferences.cpp:232
+msgid ""
+"If enabled, changes made using the sequential slider, in preview, apply only "
+"to gcode top layer, if disabled, changes made using the sequential slider, in "
+"preview, apply to the whole gcode."
+msgstr ""
+"Se ativo, mudanças feitas usando a rolagem sequencial, na pré-visualização, "
+"aplica somente para o topo do G-code, se desativado, mudanças feitas usando a "
+"rolagem sequencial, na pré-visualização, aplica para todo G-code."
+
+#: src/slic3r/GUI/Preferences.cpp:255
+msgid "Render"
+msgstr "Reenderizar"
+
+#: src/slic3r/GUI/Preferences.cpp:261
+msgid "Use environment map"
+msgstr "Usar mapa do ambiente"
+
+#: src/slic3r/GUI/Preferences.cpp:263
+msgid "If enabled, renders object using the environment map."
+msgstr "Se ativo, reenderiza objetos usando o mapa de ambiente. "
+
+#: src/slic3r/GUI/Preferences.cpp:299
 #, c-format
 msgid "You need to restart %s to make the changes effective."
 msgstr "Você precisa reiniciar %s para tornar as alterações efetivas."
 
-#: src/slic3r/GUI/Preferences.cpp:222
+#: src/slic3r/GUI/Preferences.cpp:376
 msgid "Icon size in a respect to the default size"
 msgstr "Tamanho do ícone em relação ao tamanho padrão"
 
-#: src/slic3r/GUI/Preferences.cpp:237
+#: src/slic3r/GUI/Preferences.cpp:391
 msgid "Select toolbar icon size in respect to the default one."
 msgstr ""
 "Selecione o tamanho do ícone da barra de ferramentas em relação ao padrão."
 
-#: src/slic3r/GUI/Preset.cpp:247
-msgid "modified"
-msgstr "modificado"
+#: src/slic3r/GUI/Preferences.cpp:422
+msgid "Old regular layout with the tab bar"
+msgstr "Layout padrão antigo com a barra de abas"
 
-#: src/slic3r/GUI/Preset.cpp:1121 src/slic3r/GUI/Preset.cpp:1176
-#: src/slic3r/GUI/Preset.cpp:1254 src/slic3r/GUI/Preset.cpp:1296
-#: src/slic3r/GUI/PresetBundle.cpp:1583 src/slic3r/GUI/PresetBundle.cpp:1679
+#: src/slic3r/GUI/Preferences.cpp:423
+msgid "New layout without the tab bar on the plater"
+msgstr "Novo layout sem a barra de abas na bandeja"
+
+#: src/slic3r/GUI/Preferences.cpp:424
+msgid "Settings will be shown in the non-modal dialog"
+msgstr "Configurações serão mostradas na caixa de diálogo não modal"
+
+#: src/slic3r/GUI/Preferences.cpp:433
+msgid "Settings layout mode"
+msgstr "Config. da parte para modificar"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:188
+#: src/slic3r/GUI/PresetComboBoxes.cpp:226
+#: src/slic3r/GUI/PresetComboBoxes.cpp:724
+#: src/slic3r/GUI/PresetComboBoxes.cpp:774
+#: src/slic3r/GUI/PresetComboBoxes.cpp:886
+#: src/slic3r/GUI/PresetComboBoxes.cpp:930
 msgid "System presets"
 msgstr "Predefinições do sistema"
 
-#: src/slic3r/GUI/Preset.cpp:1180 src/slic3r/GUI/Preset.cpp:1300
-#: src/slic3r/GUI/PresetBundle.cpp:1684
+#: src/slic3r/GUI/PresetComboBoxes.cpp:230
+#: src/slic3r/GUI/PresetComboBoxes.cpp:778
+#: src/slic3r/GUI/PresetComboBoxes.cpp:934
 msgid "User presets"
 msgstr "Predefinições do usuário"
 
-#: src/slic3r/GUI/Preset.cpp:1213
+#: src/slic3r/GUI/PresetComboBoxes.cpp:241
+msgid "Incompatible presets"
+msgstr "Pacotes incompatíveis"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:566
+msgid "Click to edit preset"
+msgstr "Clique para editar a predefinição"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:622
+#: src/slic3r/GUI/PresetComboBoxes.cpp:669
+msgid "Add/Remove presets"
+msgstr "Adicionar/Remover predefinições "
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:627
+#: src/slic3r/GUI/PresetComboBoxes.cpp:674
+msgid "Add physical printer"
+msgstr "Adicionar impressora física"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:641
+msgid "Edit preset"
+msgstr "Editar a predefinição"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:645
+msgid "Edit physical printer"
+msgstr "Editar impressora física"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:652
+msgid "Delete physical printer"
+msgstr "Excluir impressora física"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:658
+msgid "Are you sure you want to delete \"%1%\" printer?"
+msgstr "Tem certeza que quer deletar a impressora \"%1%\"?"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:659
+msgid "Delete Physical Printer"
+msgstr "Excluir Impressora Física"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:789
+#: src/slic3r/GUI/PresetComboBoxes.cpp:948
+msgid "Physical printers"
+msgstr "Impressoras físicas"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:813
 msgid "Add/Remove materials"
 msgstr "Adicionar/Remover materiais"
 
-#: src/slic3r/GUI/Preset.cpp:1215
+#: src/slic3r/GUI/PresetComboBoxes.cpp:815
+#: src/slic3r/GUI/PresetComboBoxes.cpp:972
 msgid "Add/Remove printers"
 msgstr "Adicionar/Remover impressoras"
 
-#: src/slic3r/GUI/Preset.cpp:1534
-msgid "filament"
-msgstr "filamento"
-
-#: src/slic3r/GUI/Preset.cpp:1535
-msgid "SLA print"
-msgstr "Impressão de SLA"
-
-#: src/slic3r/GUI/PresetBundle.cpp:1711
-msgid "Add/Remove filaments"
-msgstr "Adicionar/Remover filamentos"
-
-#: src/slic3r/GUI/PresetHints.cpp:29
+#: src/slic3r/GUI/PresetHints.cpp:28
 msgid ""
-"If estimated layer time is below ~%1%s, fan will run at %2%%% and print "
-"speed will be reduced so that no less than %3%s are spent on that layer "
-"(however, speed will never be reduced below %4%mm/s)."
+"If estimated layer time is below ~%1%s, fan will run at %2%%% and print speed "
+"will be reduced so that no less than %3%s are spent on that layer (however, "
+"speed will never be reduced below %4%mm/s)."
 msgstr ""
 "Se o tempo estimado da camada estiver abaixo de ~%1%s, o ventoinha será "
 "executado em %2%%% e a velocidade de impressão será reduzida para que não "
 "menos de %3%s sejam gastos nessa camada (no entanto, a velocidade nunca será "
 "reduzida abaixo de %4% mm/s)."
 
-#: src/slic3r/GUI/PresetHints.cpp:36
+#: src/slic3r/GUI/PresetHints.cpp:35
 msgid ""
 "If estimated layer time is greater, but still below ~%1%s, fan will run at a "
 "proportionally decreasing speed between %2%%% and %3%%%."
 msgstr ""
 "Se o tempo estimado da camada for maior, mas ainda abaixo de ~%1%s, o "
-"ventoinha será executado em uma velocidade proporcionalmente decrescente "
-"entre %2%%% e %3%%%."
+"ventoinha será executado em uma velocidade proporcionalmente decrescente entre "
+"%2%%% e %3%%%."
 
-#: src/slic3r/GUI/PresetHints.cpp:40
+#: src/slic3r/GUI/PresetHints.cpp:39
 msgid "During the other layers, fan"
 msgstr "Durante as outras camadas, a ventoinha"
 
-#: src/slic3r/GUI/PresetHints.cpp:42
+#: src/slic3r/GUI/PresetHints.cpp:41
 msgid "Fan"
 msgstr "Ventoinha"
 
-#: src/slic3r/GUI/PresetHints.cpp:48
+#: src/slic3r/GUI/PresetHints.cpp:47
 msgid "will always run at %1%%%"
 msgstr "será sempre executado em %1%%%"
 
-#: src/slic3r/GUI/PresetHints.cpp:51
+#: src/slic3r/GUI/PresetHints.cpp:50
 msgid "except for the first %1% layers."
 msgstr "exceto para as primeiras camadas %1%."
 
-#: src/slic3r/GUI/PresetHints.cpp:53
+#: src/slic3r/GUI/PresetHints.cpp:52
 msgid "except for the first layer."
 msgstr "exceto para a primeira camada."
 
-#: src/slic3r/GUI/PresetHints.cpp:55
+#: src/slic3r/GUI/PresetHints.cpp:54
 msgid "will be turned off."
 msgstr "será desligado."
 
-#: src/slic3r/GUI/PresetHints.cpp:156
+#: src/slic3r/GUI/PresetHints.cpp:155
 msgid "external perimeters"
 msgstr "perímetros externos"
 
-#: src/slic3r/GUI/PresetHints.cpp:165
+#: src/slic3r/GUI/PresetHints.cpp:164
 msgid "perimeters"
 msgstr "perímetros"
 
-#: src/slic3r/GUI/PresetHints.cpp:174
+#: src/slic3r/GUI/PresetHints.cpp:173
 msgid "infill"
 msgstr "preenchimento"
 
-#: src/slic3r/GUI/PresetHints.cpp:184
+#: src/slic3r/GUI/PresetHints.cpp:183
 msgid "solid infill"
 msgstr "preenchimento sólido"
 
-#: src/slic3r/GUI/PresetHints.cpp:192
+#: src/slic3r/GUI/PresetHints.cpp:191
 msgid "top solid infill"
 msgstr "preenchimento sólido do topo"
 
-#: src/slic3r/GUI/PresetHints.cpp:203
+#: src/slic3r/GUI/PresetHints.cpp:202
 msgid "support"
 msgstr "suporte"
 
-#: src/slic3r/GUI/PresetHints.cpp:213
+#: src/slic3r/GUI/PresetHints.cpp:212
 msgid "support interface"
 msgstr "interface de suporte"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "First layer volumetric"
 msgstr "Primeira camada volumétrica"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Bridging volumetric"
 msgstr "Ponteamento volumétrico"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Volumetric"
 msgstr "Volumétrica"
 
-#: src/slic3r/GUI/PresetHints.cpp:220
+#: src/slic3r/GUI/PresetHints.cpp:219
 msgid "flow rate is maximized"
 msgstr "a taxa de fluxo é maximizada"
 
-#: src/slic3r/GUI/PresetHints.cpp:223
+#: src/slic3r/GUI/PresetHints.cpp:222
 msgid "by the print profile maximum"
 msgstr "pelo perfil de impressão máximo"
 
-#: src/slic3r/GUI/PresetHints.cpp:224
+#: src/slic3r/GUI/PresetHints.cpp:223
 msgid "when printing"
 msgstr "ao imprimir"
 
-#: src/slic3r/GUI/PresetHints.cpp:225
+#: src/slic3r/GUI/PresetHints.cpp:224
 msgid "with a volumetric rate"
 msgstr "com uma taxa volumétrica"
 
-#: src/slic3r/GUI/PresetHints.cpp:229
+#: src/slic3r/GUI/PresetHints.cpp:228
 #, c-format
 msgid "%3.2f mm³/s at filament speed %3.2f mm/s."
 msgstr "%3.2f mm ³/s na velocidade do filamento %3.2f mm/s."
 
-#: src/slic3r/GUI/PresetHints.cpp:247
+#: src/slic3r/GUI/PresetHints.cpp:246
 msgid ""
 "Recommended object thin wall thickness: Not available due to invalid layer "
 "height."
 msgstr ""
-"Espessura de parede fina do objeto recomendado: não disponível devido à "
-"altura da camada inválida."
+"Espessura de parede fina do objeto recomendado: não disponível devido à altura "
+"da camada inválida."
 
-#: src/slic3r/GUI/PresetHints.cpp:263
+#: src/slic3r/GUI/PresetHints.cpp:262
 #, c-format
 msgid "Recommended object thin wall thickness for layer height %.2f and"
 msgstr ""
 "Espessura de parede fina do objeto recomendado para a altura da camada %.2f e"
 
-#: src/slic3r/GUI/PresetHints.cpp:270
+#: src/slic3r/GUI/PresetHints.cpp:269
 #, c-format
 msgid "%d lines: %.2f mm"
 msgstr "%d linhas: %.2f mm"
 
-#: src/slic3r/GUI/PresetHints.cpp:274
+#: src/slic3r/GUI/PresetHints.cpp:273
 msgid ""
-"Recommended object thin wall thickness: Not available due to excessively "
-"small extrusion width."
+"Recommended object thin wall thickness: Not available due to excessively small "
+"extrusion width."
 msgstr ""
 "Espessura fina da parede do objeto recomendada: Não disponível devido à "
 "largura de extrusão excessivamente pequena."
 
-#: src/slic3r/GUI/PresetHints.cpp:304
+#: src/slic3r/GUI/PresetHints.cpp:302
 msgid ""
 "Top / bottom shell thickness hint: Not available due to invalid layer height."
 msgstr ""
-"Espessura superior/inferior da concha. Dica: Não disponível devido à altura "
-"da camada inválida."
+"Espessura superior/inferior da concha. Dica: Não disponível devido à altura da "
+"camada inválida."
 
-#: src/slic3r/GUI/PresetHints.cpp:317
+#: src/slic3r/GUI/PresetHints.cpp:315
 msgid "Top shell is %1% mm thick for layer height %2% mm."
 msgstr "A camada superior tem %1% de espessura para altura da camada %2% mm."
 
-#: src/slic3r/GUI/PresetHints.cpp:320
+#: src/slic3r/GUI/PresetHints.cpp:318
 msgid "Minimum top shell thickness is %1% mm."
 msgstr "A espessura mínima da camada superior é de %1% mm."
 
-#: src/slic3r/GUI/PresetHints.cpp:323
+#: src/slic3r/GUI/PresetHints.cpp:321
 msgid "Top is open."
-msgstr "Topo está aberto"
+msgstr "Topo está aberto."
 
-#: src/slic3r/GUI/PresetHints.cpp:336
+#: src/slic3r/GUI/PresetHints.cpp:334
 msgid "Bottom shell is %1% mm thick for layer height %2% mm."
 msgstr "A camada inferior tem %1% de espessura para a altura da camada %2% mm."
 
-#: src/slic3r/GUI/PresetHints.cpp:339
+#: src/slic3r/GUI/PresetHints.cpp:337
 msgid "Minimum bottom shell thickness is %1% mm."
 msgstr "A espessura mínima da camada inferior é de %1% mm."
 
-#: src/slic3r/GUI/PresetHints.cpp:342
+#: src/slic3r/GUI/PresetHints.cpp:340
 msgid "Bottom is open."
-msgstr "Base está aberta"
+msgstr "Base está aberta."
 
 #: src/slic3r/GUI/PrintHostDialogs.cpp:33
 msgid "Send G-Code to printer host"
@@ -5154,35 +6252,35 @@ msgstr "Iniciar a impressão após o envio"
 msgid "Use forward slashes ( / ) as a directory separator if needed."
 msgstr "Use barras (/) como um separador de diretório, se necessário."
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:149
+#: src/slic3r/GUI/PrintHostDialogs.cpp:147
 msgid "ID"
 msgstr "ID"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:150
+#: src/slic3r/GUI/PrintHostDialogs.cpp:148
 msgid "Progress"
 msgstr "Progresso"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:151
+#: src/slic3r/GUI/PrintHostDialogs.cpp:149
 msgid "Status"
 msgstr "Status"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:152
+#: src/slic3r/GUI/PrintHostDialogs.cpp:150
 msgid "Host"
 msgstr "Servidor"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:153
+#: src/slic3r/GUI/PrintHostDialogs.cpp:151
 msgid "Filename"
 msgstr "Nome do arquivo"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:154
+#: src/slic3r/GUI/PrintHostDialogs.cpp:152
 msgid "Error Message"
 msgstr "Mensagem de Erro"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:157
+#: src/slic3r/GUI/PrintHostDialogs.cpp:155
 msgid "Cancel selected"
 msgstr "Cancelar selecionado"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:159
+#: src/slic3r/GUI/PrintHostDialogs.cpp:157
 msgid "Show error message"
 msgstr "Exibir mensagem de erro"
 
@@ -5207,17 +6305,13 @@ msgstr "Erro ao carregar para o host de impressão:"
 msgid "NO RAMMING AT ALL"
 msgstr "Não usar Ramming"
 
-#: src/slic3r/GUI/RammingChart.cpp:76
-msgid "Time"
-msgstr "Tempo"
-
 #: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:83
-#: src/libslic3r/PrintConfig.cpp:644 src/libslic3r/PrintConfig.cpp:688
-#: src/libslic3r/PrintConfig.cpp:703 src/libslic3r/PrintConfig.cpp:2408
-#: src/libslic3r/PrintConfig.cpp:2417 src/libslic3r/PrintConfig.cpp:2527
-#: src/libslic3r/PrintConfig.cpp:2535 src/libslic3r/PrintConfig.cpp:2543
-#: src/libslic3r/PrintConfig.cpp:2550 src/libslic3r/PrintConfig.cpp:2558
-#: src/libslic3r/PrintConfig.cpp:2566
+#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:724
+#: src/libslic3r/PrintConfig.cpp:739 src/libslic3r/PrintConfig.cpp:2551
+#: src/libslic3r/PrintConfig.cpp:2560 src/libslic3r/PrintConfig.cpp:2670
+#: src/libslic3r/PrintConfig.cpp:2678 src/libslic3r/PrintConfig.cpp:2686
+#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2701
+#: src/libslic3r/PrintConfig.cpp:2709
 msgid "s"
 msgstr "s"
 
@@ -5225,91 +6319,171 @@ msgstr "s"
 msgid "Volumetric speed"
 msgstr "Velocidade volumétrica"
 
-#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:601
-#: src/libslic3r/PrintConfig.cpp:1250
+#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1358
 msgid "mm³/s"
 msgstr "mm ³/s"
 
-#: src/slic3r/GUI/Selection.cpp:147
+#: src/slic3r/GUI/SavePresetDialog.cpp:72
+#, c-format
+msgid "Save %s as:"
+msgstr "Salvar %s como:"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:125
+msgid "the following suffix is not allowed:"
+msgstr "o sufixo seguinte não é permitido:"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:131
+msgid "The supplied name is not available."
+msgstr "O nome fornecido não está disponível."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:137
+msgid "Cannot overwrite a system profile."
+msgstr "Não é possível substituir um perfil de sistema."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
+msgid "Cannot overwrite an external profile."
+msgstr "Não é possível substituir um perfil externo."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:148
+msgid "Preset with name \"%1%\" already exists."
+msgstr "Predefinido com nome \"%1%\" já existe."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:150
+msgid "And selected preset is imcopatible with selected printer."
+msgstr ""
+"Você tem que selecionar pelo menos um material para impressoras selecionadas."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:151
+msgid "Note: This preset will be replaced after saving"
+msgstr "Nota: Essa predefinição será substituída após salvar."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:156
+msgid "The empty name is not available."
+msgstr "O nome fornecido não está disponível."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:190
+#: src/slic3r/GUI/SavePresetDialog.cpp:196
+msgid "Save preset"
+msgstr "Salvar predefinição"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:219
+msgctxt "PresetName"
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:277
+msgid ""
+"You have selected physical printer \"%1%\" \n"
+"with related printer preset \"%2%\""
+msgstr ""
+"Você selecionou a impressora física \"% 1%\"\n"
+"com a predefinição de impressora relacionada \"% 2%\""
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:310
+msgid "What would you like to do with \"%1%\" preset after saving?"
+msgstr "O que você gostaria de fazer com a predefinição \"%1%\" após salvar?"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:313
+msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\""
+msgstr "Altere \"%1%\" para \"%2%\" para esta impressora física \"%3%\""
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:314
+msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\""
+msgstr ""
+"Adicione \"%1%\" como uma próxima predefinição para a impressora física \"%2%\""
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:315
+msgid "Just switch to \"%1%\" preset"
+msgstr "Basta mudar para a predefinição \"%1%\""
+
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2378
+msgid "Stealth"
+msgstr "Furtivo"
+
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2372
+msgid "Normal"
+msgstr "Normal"
+
+#: src/slic3r/GUI/Selection.cpp:191
 msgid "Selection-Add"
 msgstr "Seleção-Adicionar"
 
-#: src/slic3r/GUI/Selection.cpp:188
+#: src/slic3r/GUI/Selection.cpp:232
 msgid "Selection-Remove"
 msgstr "Seleção-remover"
 
-#: src/slic3r/GUI/Selection.cpp:220
+#: src/slic3r/GUI/Selection.cpp:264
 msgid "Selection-Add Object"
 msgstr "Seleção-Adicionar objeto"
 
-#: src/slic3r/GUI/Selection.cpp:239
+#: src/slic3r/GUI/Selection.cpp:283
 msgid "Selection-Remove Object"
 msgstr "Seleção-remover objeto"
 
-#: src/slic3r/GUI/Selection.cpp:257
+#: src/slic3r/GUI/Selection.cpp:301
 msgid "Selection-Add Instance"
 msgstr "Instância de seleção-Adicionar"
 
-#: src/slic3r/GUI/Selection.cpp:276
+#: src/slic3r/GUI/Selection.cpp:320
 msgid "Selection-Remove Instance"
 msgstr "Seleção-remover instância"
 
-#: src/slic3r/GUI/Selection.cpp:377
+#: src/slic3r/GUI/Selection.cpp:421
 msgid "Selection-Add All"
 msgstr "Seleção-adicionar todos"
 
-#: src/slic3r/GUI/Selection.cpp:403
+#: src/slic3r/GUI/Selection.cpp:447
 msgid "Selection-Remove All"
 msgstr "Seleção-remover todos"
 
-#: src/slic3r/GUI/Selection.cpp:940
+#: src/slic3r/GUI/Selection.cpp:988
 msgid "Scale To Fit"
 msgstr "Dimensionar para caber"
 
-#: src/slic3r/GUI/Selection.cpp:1477
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Printable Instance"
 msgstr "Definir instância imprimível"
 
-#: src/slic3r/GUI/Selection.cpp:1477
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Unprintable Instance"
 msgstr "Definir instância não imprimível"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:78
+#: src/slic3r/GUI/SysInfoDialog.cpp:90 src/slic3r/GUI/SysInfoDialog.cpp:92
 msgid "System Information"
 msgstr "Informações do sistema"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:154
+#: src/slic3r/GUI/SysInfoDialog.cpp:177
 msgid "Copy to Clipboard"
 msgstr "Copiar para a Área de Transferência"
 
-#: src/slic3r/GUI/Tab.cpp:50 src/libslic3r/PrintConfig.cpp:265
+#: src/slic3r/GUI/Tab.cpp:101 src/libslic3r/PrintConfig.cpp:299
 msgid "Compatible printers"
 msgstr "Impressoras compatíveis"
 
-#: src/slic3r/GUI/Tab.cpp:51
+#: src/slic3r/GUI/Tab.cpp:102
 msgid "Select the printers this profile is compatible with."
 msgstr "Selecione as impressoras com as quais este perfil é compatível."
 
-#: src/slic3r/GUI/Tab.cpp:56 src/libslic3r/PrintConfig.cpp:280
+#: src/slic3r/GUI/Tab.cpp:107 src/libslic3r/PrintConfig.cpp:314
 msgid "Compatible print profiles"
 msgstr "Perfis de impressão compatíveis"
 
-#: src/slic3r/GUI/Tab.cpp:57
+#: src/slic3r/GUI/Tab.cpp:108
 msgid "Select the print profiles this profile is compatible with."
-msgstr ""
-"Selecione os perfis de impressão com os quais este perfil é compatível."
+msgstr "Selecione os perfis de impressão com os quais este perfil é compatível."
 
 #. TRN "Save current Settings"
-#: src/slic3r/GUI/Tab.cpp:133
+#: src/slic3r/GUI/Tab.cpp:203
 #, c-format
 msgid "Save current %s"
 msgstr "Salvar %s atual"
 
-#: src/slic3r/GUI/Tab.cpp:134
+#: src/slic3r/GUI/Tab.cpp:204
 msgid "Delete this preset"
 msgstr "Exclua esta predefinição"
 
-#: src/slic3r/GUI/Tab.cpp:139
+#: src/slic3r/GUI/Tab.cpp:210
 msgid ""
 "Hover the cursor over buttons to find more information \n"
 "or click this button."
@@ -5317,465 +6491,441 @@ msgstr ""
 "Passe o cursor sobre os botões para encontrar mais informações \n"
 "ou clique neste botão."
 
-#: src/slic3r/GUI/Tab.cpp:241
-msgid "Add a new printer"
-msgstr "Adicionar uma nova impressora"
+#: src/slic3r/GUI/Tab.cpp:214
+msgid "Click to start a search or use %1% shortcut"
+msgstr "Clique para iniciar uma pesquisa ou use o atalho%1%"
 
-#: src/slic3r/GUI/Tab.cpp:953
+#: src/slic3r/GUI/Tab.cpp:1224
+msgid "Detach from system preset"
+msgstr "Esta é uma predefinição do sistema"
+
+#: src/slic3r/GUI/Tab.cpp:1237
+msgid ""
+"A copy of the current system preset will be created, which will be detached "
+"from the system preset."
+msgstr ""
+"Uma cópia da predefinição do sistema atual será criada, que será desanexada da "
+"predefinição do sistema."
+
+#: src/slic3r/GUI/Tab.cpp:1238
+msgid "The current custom preset will be detached from the parent system preset."
+msgstr ""
+"A predefinição personalizada atual será separada da predefinição do sistema "
+"padrão."
+
+#: src/slic3r/GUI/Tab.cpp:1241
+msgid "Modifications to the current profile will be saved."
+msgstr "Modificações no perfil atual serão salvas."
+
+#: src/slic3r/GUI/Tab.cpp:1244
+msgid ""
+"This action is not revertable.\n"
+"Do you want to proceed?"
+msgstr ""
+"Esta operação é irreversível.\n"
+"Você quer prosseguir?"
+
+#: src/slic3r/GUI/Tab.cpp:1246
+msgid "Detach preset"
+msgstr "Separar predefinição"
+
+#: src/slic3r/GUI/Tab.cpp:1272
 msgid "This is a default preset."
 msgstr "Esta é uma predefinição padrão."
 
-#: src/slic3r/GUI/Tab.cpp:955
+#: src/slic3r/GUI/Tab.cpp:1274
 msgid "This is a system preset."
 msgstr "Esta é uma predefinição do sistema."
 
-#: src/slic3r/GUI/Tab.cpp:957
+#: src/slic3r/GUI/Tab.cpp:1276
 msgid "Current preset is inherited from the default preset."
 msgstr "Predefinição atual é herdada da predefinição padrão."
 
-#: src/slic3r/GUI/Tab.cpp:959
+#: src/slic3r/GUI/Tab.cpp:1278
 msgid "Current preset is inherited from"
 msgstr "Predefinição atual é herdada de"
 
-#: src/slic3r/GUI/Tab.cpp:963
+#: src/slic3r/GUI/Tab.cpp:1282
 msgid "It can't be deleted or modified."
 msgstr "Ele não pode ser excluído ou modificado."
 
-#: src/slic3r/GUI/Tab.cpp:964
+#: src/slic3r/GUI/Tab.cpp:1283
 msgid ""
 "Any modifications should be saved as a new preset inherited from this one."
 msgstr ""
 "Todas as modificações devem ser salvas como uma nova predefinição herdada de "
 "uma presente."
 
-#: src/slic3r/GUI/Tab.cpp:965
+#: src/slic3r/GUI/Tab.cpp:1284
 msgid "To do that please specify a new name for the preset."
 msgstr "Para fazer isso, especifique um novo nome para a predefinição."
 
-#: src/slic3r/GUI/Tab.cpp:969
+#: src/slic3r/GUI/Tab.cpp:1288
 msgid "Additional information:"
 msgstr "Informações adicionais:"
 
-#: src/slic3r/GUI/Tab.cpp:975
+#: src/slic3r/GUI/Tab.cpp:1294
 msgid "printer model"
 msgstr "modelo de impressora"
 
-#: src/slic3r/GUI/Tab.cpp:983
+#: src/slic3r/GUI/Tab.cpp:1302
 msgid "default print profile"
 msgstr "perfil de impressão padrão"
 
-#: src/slic3r/GUI/Tab.cpp:986
+#: src/slic3r/GUI/Tab.cpp:1305
 msgid "default filament profile"
 msgstr "perfil de filamento padrão"
 
-#: src/slic3r/GUI/Tab.cpp:1000
+#: src/slic3r/GUI/Tab.cpp:1319
 msgid "default SLA material profile"
 msgstr "perfil de material SLA padrão"
 
-#: src/slic3r/GUI/Tab.cpp:1004
+#: src/slic3r/GUI/Tab.cpp:1323
 msgid "default SLA print profile"
 msgstr "perfil de impressão padrão do SLA"
 
-#: src/slic3r/GUI/Tab.cpp:1012
+#: src/slic3r/GUI/Tab.cpp:1331
 msgid "full profile name"
-msgstr "Nome customizado da config."
+msgstr "nome customizado da config"
 
-#: src/slic3r/GUI/Tab.cpp:1013
+#: src/slic3r/GUI/Tab.cpp:1332
 msgid "symbolic profile name"
-msgstr "nome customizado da config.:"
+msgstr "nome customizado da config"
 
-#: src/slic3r/GUI/Tab.cpp:1047 src/slic3r/GUI/Tab.cpp:3600
+#: src/slic3r/GUI/Tab.cpp:1370 src/slic3r/GUI/Tab.cpp:4008
 msgid "Layers and perimeters"
 msgstr "Camadas e perímetros"
 
-#: src/slic3r/GUI/Tab.cpp:1052
+#: src/slic3r/GUI/Tab.cpp:1375
 msgid "Vertical shells"
 msgstr "Paredes verticais"
 
-#: src/slic3r/GUI/Tab.cpp:1063
+#: src/slic3r/GUI/Tab.cpp:1386
 msgid "Horizontal shells"
 msgstr "Paredes horizontais"
 
-#: src/slic3r/GUI/Tab.cpp:1064 src/libslic3r/PrintConfig.cpp:1780
+#: src/slic3r/GUI/Tab.cpp:1387 src/libslic3r/PrintConfig.cpp:1895
 msgid "Solid layers"
 msgstr "Camadas sólidas"
 
-#: src/slic3r/GUI/Tab.cpp:1068
+#: src/slic3r/GUI/Tab.cpp:1391
 msgid "Minimum shell thickness"
 msgstr "Espessura mínima da concha"
 
-#: src/slic3r/GUI/Tab.cpp:1079
+#: src/slic3r/GUI/Tab.cpp:1402
 msgid "Quality (slower slicing)"
 msgstr "Qualidade (fatiamento mais lento)"
 
-#: src/slic3r/GUI/Tab.cpp:1097
+#: src/slic3r/GUI/Tab.cpp:1426
 msgid "Reducing printing time"
 msgstr "Reduzindo o tempo de impressão"
 
-#: src/slic3r/GUI/Tab.cpp:1109
+#: src/slic3r/GUI/Tab.cpp:1438
 msgid "Skirt and brim"
 msgstr "Saia e aba"
 
-#: src/slic3r/GUI/Tab.cpp:1126
+#: src/slic3r/GUI/Tab.cpp:1456
 msgid "Raft"
 msgstr "Estrado"
 
-#: src/slic3r/GUI/Tab.cpp:1130
+#: src/slic3r/GUI/Tab.cpp:1460
 msgid "Options for support material and raft"
 msgstr "Opções para material de suporte e estrado"
 
-#: src/slic3r/GUI/Tab.cpp:1145
+#: src/slic3r/GUI/Tab.cpp:1475
 msgid "Speed for print moves"
 msgstr "Velocidade para movimentos de impressão"
 
-#: src/slic3r/GUI/Tab.cpp:1157
+#: src/slic3r/GUI/Tab.cpp:1488
 msgid "Speed for non-print moves"
 msgstr "Velocidade para movimentos não impressos"
 
-#: src/slic3r/GUI/Tab.cpp:1160
+#: src/slic3r/GUI/Tab.cpp:1491
 msgid "Modifiers"
 msgstr "Modificadores"
 
-#: src/slic3r/GUI/Tab.cpp:1163
+#: src/slic3r/GUI/Tab.cpp:1494
 msgid "Acceleration control (advanced)"
 msgstr "Controle de aceleração (avançado)"
 
-#: src/slic3r/GUI/Tab.cpp:1170
+#: src/slic3r/GUI/Tab.cpp:1501
 msgid "Autospeed (advanced)"
 msgstr "Velocidade automática (avançado)"
 
-#: src/slic3r/GUI/Tab.cpp:1178
+#: src/slic3r/GUI/Tab.cpp:1509
 msgid "Multiple Extruders"
 msgstr "Extrusoras múltiplas"
 
-#: src/slic3r/GUI/Tab.cpp:1186
+#: src/slic3r/GUI/Tab.cpp:1517
 msgid "Ooze prevention"
 msgstr "Prevenção de vazão"
 
-#: src/slic3r/GUI/Tab.cpp:1204
+#: src/slic3r/GUI/Tab.cpp:1535
 msgid "Extrusion width"
 msgstr "Espessura da extrusão"
 
-#: src/slic3r/GUI/Tab.cpp:1214
+#: src/slic3r/GUI/Tab.cpp:1545
 msgid "Overlap"
 msgstr "Cobrir"
 
-#: src/slic3r/GUI/Tab.cpp:1217
+#: src/slic3r/GUI/Tab.cpp:1548
 msgid "Flow"
 msgstr "Fluxo"
 
-#: src/slic3r/GUI/Tab.cpp:1226
+#: src/slic3r/GUI/Tab.cpp:1557
 msgid "Other"
 msgstr "Outro"
 
-#: src/slic3r/GUI/Tab.cpp:1229 src/slic3r/GUI/Tab.cpp:3669
+#: src/slic3r/GUI/Tab.cpp:1560 src/slic3r/GUI/Tab.cpp:4084
 msgid "Output options"
 msgstr "Opções de saída"
 
-#: src/slic3r/GUI/Tab.cpp:1230
+#: src/slic3r/GUI/Tab.cpp:1561
 msgid "Sequential printing"
 msgstr "Impressão sequencial"
 
-#: src/slic3r/GUI/Tab.cpp:1232
+#: src/slic3r/GUI/Tab.cpp:1563
 msgid "Extruder clearance (mm)"
 msgstr "Folga da extrusora (milímetro)"
 
-#: src/slic3r/GUI/Tab.cpp:1237 src/slic3r/GUI/Tab.cpp:3670
+#: src/slic3r/GUI/Tab.cpp:1568 src/slic3r/GUI/Tab.cpp:4085
 msgid "Output file"
 msgstr "Arquivo de saída"
 
-#: src/slic3r/GUI/Tab.cpp:1244 src/libslic3r/PrintConfig.cpp:1453
+#: src/slic3r/GUI/Tab.cpp:1575 src/libslic3r/PrintConfig.cpp:1561
 msgid "Post-processing scripts"
 msgstr "Scripts de pós-processamento"
 
-#: src/slic3r/GUI/Tab.cpp:1250 src/slic3r/GUI/Tab.cpp:1251
-#: src/slic3r/GUI/Tab.cpp:1539 src/slic3r/GUI/Tab.cpp:1540
-#: src/slic3r/GUI/Tab.cpp:2014 src/slic3r/GUI/Tab.cpp:2015
-#: src/slic3r/GUI/Tab.cpp:2130 src/slic3r/GUI/Tab.cpp:2131
-#: src/slic3r/GUI/Tab.cpp:3537 src/slic3r/GUI/Tab.cpp:3538
+#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582
+#: src/slic3r/GUI/Tab.cpp:1887 src/slic3r/GUI/Tab.cpp:1888
+#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2297 src/slic3r/GUI/Tab.cpp:2298
+#: src/slic3r/GUI/Tab.cpp:3951 src/slic3r/GUI/Tab.cpp:3952
 msgid "Notes"
 msgstr "Notas"
 
-#: src/slic3r/GUI/Tab.cpp:1257 src/slic3r/GUI/Tab.cpp:1547
-#: src/slic3r/GUI/Tab.cpp:2021 src/slic3r/GUI/Tab.cpp:2137
-#: src/slic3r/GUI/Tab.cpp:3545 src/slic3r/GUI/Tab.cpp:3675
+#: src/slic3r/GUI/Tab.cpp:1588 src/slic3r/GUI/Tab.cpp:1895
+#: src/slic3r/GUI/Tab.cpp:2228 src/slic3r/GUI/Tab.cpp:2304
+#: src/slic3r/GUI/Tab.cpp:3959 src/slic3r/GUI/Tab.cpp:4090
 msgid "Dependencies"
 msgstr "Dependências"
 
-#: src/slic3r/GUI/Tab.cpp:1258 src/slic3r/GUI/Tab.cpp:1548
-#: src/slic3r/GUI/Tab.cpp:2022 src/slic3r/GUI/Tab.cpp:2138
-#: src/slic3r/GUI/Tab.cpp:3546 src/slic3r/GUI/Tab.cpp:3676
+#: src/slic3r/GUI/Tab.cpp:1589 src/slic3r/GUI/Tab.cpp:1896
+#: src/slic3r/GUI/Tab.cpp:2229 src/slic3r/GUI/Tab.cpp:2305
+#: src/slic3r/GUI/Tab.cpp:3960 src/slic3r/GUI/Tab.cpp:4091
 msgid "Profile dependencies"
 msgstr "Dependências de perfil"
 
-#: src/slic3r/GUI/Tab.cpp:1322 src/slic3r/GUI/Tab.cpp:1377
+#: src/slic3r/GUI/Tab.cpp:1669
 msgid "Filament Overrides"
 msgstr "Sobrescrever config. de filamento"
 
-#: src/slic3r/GUI/Tab.cpp:1323 src/slic3r/GUI/Tab.cpp:1382
-#: src/slic3r/GUI/Tab.cpp:2372
-msgid "Retraction"
-msgstr "Retração"
-
-#: src/slic3r/GUI/Tab.cpp:1432 src/libslic3r/PrintConfig.cpp:2067
+#: src/slic3r/GUI/Tab.cpp:1779
 msgid "Temperature"
 msgstr "Temperatura"
 
-#: src/slic3r/GUI/Tab.cpp:1438
+#: src/slic3r/GUI/Tab.cpp:1785
 msgid "Bed"
 msgstr "Mesa"
 
-#: src/slic3r/GUI/Tab.cpp:1443
+#: src/slic3r/GUI/Tab.cpp:1790
 msgid "Cooling"
 msgstr "Resfriamento"
 
-#: src/slic3r/GUI/Tab.cpp:1444 src/libslic3r/PrintConfig.cpp:1355
-#: src/libslic3r/PrintConfig.cpp:2200
+#: src/slic3r/GUI/Tab.cpp:1791 src/libslic3r/PrintConfig.cpp:1463
+#: src/libslic3r/PrintConfig.cpp:2343
 msgid "Enable"
 msgstr "Habilitar"
 
-#: src/slic3r/GUI/Tab.cpp:1455
+#: src/slic3r/GUI/Tab.cpp:1802
 msgid "Fan settings"
 msgstr "Config. da ventoinha"
 
-#: src/slic3r/GUI/Tab.cpp:1464
+#: src/slic3r/GUI/Tab.cpp:1811
 msgid "Cooling thresholds"
 msgstr "Limiares de resfriamento"
 
-#: src/slic3r/GUI/Tab.cpp:1470
+#: src/slic3r/GUI/Tab.cpp:1817
 msgid "Filament properties"
 msgstr "Propriedades de filamento"
 
-#: src/slic3r/GUI/Tab.cpp:1477
+#: src/slic3r/GUI/Tab.cpp:1824
 msgid "Print speed override"
 msgstr "Substituição da velocidade de impressão"
 
-#: src/slic3r/GUI/Tab.cpp:1487
+#: src/slic3r/GUI/Tab.cpp:1834
 msgid "Wipe tower parameters"
 msgstr "Parâmetros da torre de limpeza"
 
-#: src/slic3r/GUI/Tab.cpp:1490
+#: src/slic3r/GUI/Tab.cpp:1837
 msgid "Toolchange parameters with single extruder MM printers"
 msgstr ""
 "Parâmetros de mudança de ferramenta com impressoras de multi material com "
 "apenas uma extrusora"
 
-#: src/slic3r/GUI/Tab.cpp:1504
+#: src/slic3r/GUI/Tab.cpp:1850
 msgid "Ramming settings"
 msgstr "Config. de Ramming"
 
-#: src/slic3r/GUI/Tab.cpp:1526 src/slic3r/GUI/Tab.cpp:1977
+#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2160
+#: src/libslic3r/PrintConfig.cpp:1978
 msgid "Custom G-code"
 msgstr "G-code customizado"
 
-#: src/slic3r/GUI/Tab.cpp:1527 src/slic3r/GUI/Tab.cpp:1978
-#: src/libslic3r/PrintConfig.cpp:1813 src/libslic3r/PrintConfig.cpp:1828
+#: src/slic3r/GUI/Tab.cpp:1873 src/slic3r/GUI/Tab.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:1928 src/libslic3r/PrintConfig.cpp:1943
 msgid "Start G-code"
 msgstr "G-code de início"
 
-#: src/slic3r/GUI/Tab.cpp:1533 src/slic3r/GUI/Tab.cpp:1984
-#: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395
+#: src/slic3r/GUI/Tab.cpp:1880 src/slic3r/GUI/Tab.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:419 src/libslic3r/PrintConfig.cpp:429
 msgid "End G-code"
 msgstr "G-code de finalização"
 
-#: src/slic3r/GUI/Tab.cpp:1590
+#: src/slic3r/GUI/Tab.cpp:1930
 msgid "Volumetric flow hints not available"
 msgstr "Dicas de fluxo volumétrico não disponíveis"
 
-#: src/slic3r/GUI/Tab.cpp:1676 src/slic3r/GUI/Tab.cpp:1917
-msgid "Test"
-msgstr "Teste"
-
-#: src/slic3r/GUI/Tab.cpp:1685
-msgid "Could not get a valid Printer Host reference"
-msgstr "Não foi possível obter uma referência de host de impressora válida"
-
-#: src/slic3r/GUI/Tab.cpp:1691 src/slic3r/GUI/Tab.cpp:1930
-msgid "Success!"
-msgstr "Sucesso!"
-
-#: src/slic3r/GUI/Tab.cpp:1711
+#: src/slic3r/GUI/Tab.cpp:2026
 msgid ""
-"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-"
-"signed certificate."
+"Note: All parameters from this group are moved to the Physical Printer "
+"settings (see changelog).\n"
+"\n"
+"A new Physical Printer profile is created by clicking on the \"cog\" icon "
+"right of the Printer profiles combo box, by selecting the \"add or remove "
+"printers\" item in the Printer combo box. The Physical Printer profile editor "
+"opens also when clicking on the \"cog\" icon in the Printer settings tab. The "
+"Physical Printer profiles are being stored into PrusaSlicer/physical_printer "
+"directory."
 msgstr ""
-"O arquivo HTTPS CA é opcional. Só é necessário se você usar HTTPS com um "
-"certificado auto-assinado."
+"Nota: Todos os parâmetros deste grupo são movidos para as configurações da "
+"Impressora Física (consulte o changelog).\n"
+"\n"
+"Um novo perfil de impressora física é criado clicando no ícone \"engrenagem\" "
+"à direita da caixa de combinação Perfis de impressora, selecionando o item "
+"\"adicionar ou remover impressoras\" na caixa de combinação Impressora. O "
+"editor de perfis físicos da impressora também é aberto ao clicar no ícone "
+"\"engrenagem\" na guia Configurações da impressora. Os perfis de impressora "
+"física estão sendo armazenados no diretório PrusaSlicer / physical_printer."
 
-#: src/slic3r/GUI/Tab.cpp:1726
-msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
-msgstr ""
-"Arquivos de certificado (*. CRT, *. pem) | *. CRT; *. pem | Todos os "
-"arquivos | *. *"
-
-#: src/slic3r/GUI/Tab.cpp:1727
-msgid "Open CA certificate file"
-msgstr "Abra o arquivo de certificado da CA"
-
-#: src/slic3r/GUI/Tab.cpp:1754 src/libslic3r/PrintConfig.cpp:111
-msgid "HTTPS CA File"
-msgstr "Arquivo de CA HTTPS"
-
-#: src/slic3r/GUI/Tab.cpp:1755
-#, c-format
-msgid ""
-"On this system, %s uses HTTPS certificates from the system Certificate Store "
-"or Keychain."
-msgstr ""
-"Neste sistema, %s usa certificados HTTPS do sistema Certificate Store ou "
-"keychain."
-
-#: src/slic3r/GUI/Tab.cpp:1756
-msgid ""
-"To use a custom CA file, please import your CA file into Certificate Store / "
-"Keychain."
-msgstr ""
-"Para usar um arquivo de CA personalizado, importe seu arquivo de CA para o "
-"repositório de certificados/chaveiro."
-
-#: src/slic3r/GUI/Tab.cpp:1799 src/slic3r/GUI/Tab.cpp:2043
+#: src/slic3r/GUI/Tab.cpp:2059 src/slic3r/GUI/Tab.cpp:2241
 msgid "Size and coordinates"
 msgstr "Tamanho e coordenadas"
 
-#: src/slic3r/GUI/Tab.cpp:1804 src/slic3r/GUI/Tab.cpp:2048
-#: src/slic3r/GUI/Tab.cpp:3178
-msgid "Set"
-msgstr "Definir"
-
-#: src/slic3r/GUI/Tab.cpp:1836
+#: src/slic3r/GUI/Tab.cpp:2068 src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "Capabilities"
 msgstr "Capacidades"
 
-#: src/slic3r/GUI/Tab.cpp:1841
+#: src/slic3r/GUI/Tab.cpp:2073
 msgid "Number of extruders of the printer."
 msgstr "Número de extrusoras da impressora."
 
-#: src/slic3r/GUI/Tab.cpp:1869
+#: src/slic3r/GUI/Tab.cpp:2101
 msgid ""
 "Single Extruder Multi Material is selected, \n"
 "and all extruders must have the same diameter.\n"
-"Do you want to change the diameter for all extruders to first extruder "
-"nozzle diameter value?"
+"Do you want to change the diameter for all extruders to first extruder nozzle "
+"diameter value?"
 msgstr ""
 "A extrusora multi material é selecionada, \n"
 "e todas as extrusoras devem ter o mesmo diâmetro.\n"
 "Você quer mudar o diâmetro para todas as extrusoras ao primeiro valor do "
 "diâmetro da ponteira da extrusora?"
 
-#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2342
-#: src/libslic3r/PrintConfig.cpp:1326
+#: src/slic3r/GUI/Tab.cpp:2104 src/slic3r/GUI/Tab.cpp:2509
+#: src/libslic3r/PrintConfig.cpp:1434
 msgid "Nozzle diameter"
 msgstr "Diâmetro do bico"
 
-#: src/slic3r/GUI/Tab.cpp:1902
-msgid "USB/Serial connection"
-msgstr "Conexão USB/serial"
-
-#: src/slic3r/GUI/Tab.cpp:1903 src/libslic3r/PrintConfig.cpp:1661
-msgid "Serial port"
-msgstr "Porte Serial"
-
-#: src/slic3r/GUI/Tab.cpp:1908
-msgid "Rescan serial ports"
-msgstr "Portas seriais de Rescan"
-
-#: src/slic3r/GUI/Tab.cpp:1930
-msgid "Connection to printer works correctly."
-msgstr "A ligação à impressora funciona corretamente."
-
-#: src/slic3r/GUI/Tab.cpp:1933
-msgid "Connection failed."
-msgstr "A conexão falhou."
-
-#: src/slic3r/GUI/Tab.cpp:1946 src/slic3r/GUI/Tab.cpp:2125
-msgid "Print Host upload"
-msgstr "Upload do host de impressão"
-
-#: src/slic3r/GUI/Tab.cpp:1990 src/libslic3r/PrintConfig.cpp:153
+#: src/slic3r/GUI/Tab.cpp:2175 src/libslic3r/PrintConfig.cpp:187
 msgid "Before layer change G-code"
 msgstr "Antes da mudança de camada G-code"
 
-#: src/slic3r/GUI/Tab.cpp:1996 src/libslic3r/PrintConfig.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:2182 src/libslic3r/PrintConfig.cpp:1173
 msgid "After layer change G-code"
 msgstr "Após a mudança da camada do G-code"
 
-#: src/slic3r/GUI/Tab.cpp:2002 src/libslic3r/PrintConfig.cpp:2093
+#: src/slic3r/GUI/Tab.cpp:2189 src/libslic3r/PrintConfig.cpp:2236
 msgid "Tool change G-code"
 msgstr "G-code de troca de ferramenta"
 
-#: src/slic3r/GUI/Tab.cpp:2008
+#: src/slic3r/GUI/Tab.cpp:2196
 msgid "Between objects G-code (for sequential printing)"
 msgstr "G-code entre objetos (para impressão sequencial)"
 
-#: src/slic3r/GUI/Tab.cpp:2080
+#: src/slic3r/GUI/Tab.cpp:2203
+msgid "Color Change G-code"
+msgstr "G-code de troca de cor"
+
+#: src/slic3r/GUI/Tab.cpp:2209 src/libslic3r/PrintConfig.cpp:1969
+msgid "Pause Print G-code"
+msgstr "Pausa impressão ou código G personalizado"
+
+#: src/slic3r/GUI/Tab.cpp:2215
+msgid "Template Custom G-code"
+msgstr "Modelo de G-code customizado"
+
+#: src/slic3r/GUI/Tab.cpp:2248
 msgid "Display"
 msgstr "Exibição"
 
-#: src/slic3r/GUI/Tab.cpp:2095
+#: src/slic3r/GUI/Tab.cpp:2263
 msgid "Tilt"
 msgstr "Inclinar"
 
-#: src/slic3r/GUI/Tab.cpp:2096
+#: src/slic3r/GUI/Tab.cpp:2264
 msgid "Tilt time"
 msgstr "Tempo de inclinação"
 
-#: src/slic3r/GUI/Tab.cpp:2102 src/slic3r/GUI/Tab.cpp:3521
+#: src/slic3r/GUI/Tab.cpp:2270 src/slic3r/GUI/Tab.cpp:3935
 msgid "Corrections"
 msgstr "Correções"
 
-#: src/slic3r/GUI/Tab.cpp:2119 src/slic3r/GUI/Tab.cpp:3517
+#: src/slic3r/GUI/Tab.cpp:2287 src/slic3r/GUI/Tab.cpp:3931
 msgid "Exposure"
 msgstr "Exposição"
 
-#: src/slic3r/GUI/Tab.cpp:2190 src/slic3r/GUI/Tab.cpp:2275
-#: src/libslic3r/PrintConfig.cpp:1129 src/libslic3r/PrintConfig.cpp:1146
-#: src/libslic3r/PrintConfig.cpp:1163 src/libslic3r/PrintConfig.cpp:1179
-#: src/libslic3r/PrintConfig.cpp:1189 src/libslic3r/PrintConfig.cpp:1199
-#: src/libslic3r/PrintConfig.cpp:1209
+#: src/slic3r/GUI/Tab.cpp:2346 src/slic3r/GUI/Tab.cpp:2442
+#: src/libslic3r/PrintConfig.cpp:1202 src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1254 src/libslic3r/PrintConfig.cpp:1271
+#: src/libslic3r/PrintConfig.cpp:1287 src/libslic3r/PrintConfig.cpp:1297
+#: src/libslic3r/PrintConfig.cpp:1307 src/libslic3r/PrintConfig.cpp:1317
 msgid "Machine limits"
 msgstr "Limites da máquina"
 
-#: src/slic3r/GUI/Tab.cpp:2204
+#: src/slic3r/GUI/Tab.cpp:2371
 msgid "Values in this column are for Normal mode"
 msgstr "Valores nesta coluna são para o modo normal"
 
-#: src/slic3r/GUI/Tab.cpp:2205
-msgid "Normal"
-msgstr "Normal"
-
-#: src/slic3r/GUI/Tab.cpp:2210
+#: src/slic3r/GUI/Tab.cpp:2377
 msgid "Values in this column are for Stealth mode"
 msgstr "Valores nesta coluna são para o modo furtivo"
 
-#: src/slic3r/GUI/Tab.cpp:2211
-msgid "Stealth"
-msgstr "Furtivo"
-
-#: src/slic3r/GUI/Tab.cpp:2219
+#: src/slic3r/GUI/Tab.cpp:2386
 msgid "Maximum feedrates"
 msgstr "Velocidade máxima de alimentação"
 
-#: src/slic3r/GUI/Tab.cpp:2224
+#: src/slic3r/GUI/Tab.cpp:2391
 msgid "Maximum accelerations"
 msgstr "Acelerações máximas"
 
-#: src/slic3r/GUI/Tab.cpp:2231
+#: src/slic3r/GUI/Tab.cpp:2398
 msgid "Jerk limits"
 msgstr "Limites de empurrão"
 
-#: src/slic3r/GUI/Tab.cpp:2236
+#: src/slic3r/GUI/Tab.cpp:2403
 msgid "Minimum feedrates"
 msgstr "Velocidades alimentação mínimos"
 
-#: src/slic3r/GUI/Tab.cpp:2300 src/slic3r/GUI/Tab.cpp:2308
+#: src/slic3r/GUI/Tab.cpp:2467 src/slic3r/GUI/Tab.cpp:2475
 msgid "Single extruder MM setup"
 msgstr "Config. de extrusora multi material"
 
-#: src/slic3r/GUI/Tab.cpp:2309
+#: src/slic3r/GUI/Tab.cpp:2476
 msgid "Single extruder multimaterial parameters"
 msgstr "Parâmetros para extrusora única multimaterial"
 
-#: src/slic3r/GUI/Tab.cpp:2340
+#: src/slic3r/GUI/Tab.cpp:2507
 msgid ""
 "This is a single extruder multimaterial printer, diameters of all extruders "
 "will be set to the new value. Do you want to proceed?"
@@ -5783,31 +6933,30 @@ msgstr ""
 "Esta é uma única impressora multimaterial extrusora, diâmetros de todas as "
 "extrusoras será definido para o novo valor. Você quer prosseguir?"
 
-#: src/slic3r/GUI/Tab.cpp:2364
+#: src/slic3r/GUI/Tab.cpp:2531
 msgid "Layer height limits"
 msgstr "Limites de altura da camada"
 
-#: src/slic3r/GUI/Tab.cpp:2369
+#: src/slic3r/GUI/Tab.cpp:2536
 msgid "Position (for multi-extruder printers)"
 msgstr "Posição (para impressoras multiextrusoras)"
 
-#: src/slic3r/GUI/Tab.cpp:2375
+#: src/slic3r/GUI/Tab.cpp:2542
 msgid "Only lift Z"
 msgstr "Apenas elevar Z"
 
-#: src/slic3r/GUI/Tab.cpp:2388
+#: src/slic3r/GUI/Tab.cpp:2555
 msgid ""
-"Retraction when tool is disabled (advanced settings for multi-extruder "
-"setups)"
+"Retraction when tool is disabled (advanced settings for multi-extruder setups)"
 msgstr ""
 "Retração quando a ferramenta está desativada (config. avançadas para "
 "instalações multiextrusoras)"
 
-#: src/slic3r/GUI/Tab.cpp:2396
+#: src/slic3r/GUI/Tab.cpp:2564
 msgid "Reset to Filament Color"
 msgstr "Restabelecer cor do filamento"
 
-#: src/slic3r/GUI/Tab.cpp:2577
+#: src/slic3r/GUI/Tab.cpp:2731
 msgid ""
 "The Wipe option is not available when using the Firmware Retraction mode.\n"
 "\n"
@@ -5817,119 +6966,130 @@ msgstr ""
 "\n"
 "Devo desativá-lo, a fim de permitir a retração de firmware?"
 
-#: src/slic3r/GUI/Tab.cpp:2579
+#: src/slic3r/GUI/Tab.cpp:2733
 msgid "Firmware Retraction"
 msgstr "Retração do firmware"
 
-#: src/slic3r/GUI/Tab.cpp:2921
-#, c-format
-msgid "Default preset (%s)"
-msgstr "Predefinição padrão ( %s)"
+#: src/slic3r/GUI/Tab.cpp:3323
+msgid "Detached"
+msgstr "Separado"
 
-#: src/slic3r/GUI/Tab.cpp:2922
-#, c-format
-msgid "Preset (%s)"
-msgstr "Predefinição ( %s)"
-
-#: src/slic3r/GUI/Tab.cpp:2939
-msgid "has the following unsaved changes:"
-msgstr "tem as seguintes alterações não salvas:"
-
-#: src/slic3r/GUI/Tab.cpp:2942
-msgid "is not compatible with printer"
-msgstr "não é compatível com a impressora"
-
-#: src/slic3r/GUI/Tab.cpp:2943
-msgid "is not compatible with print profile"
-msgstr "não é compatível com o perfil de impressão"
-
-#: src/slic3r/GUI/Tab.cpp:2945
-msgid "and it has the following unsaved changes:"
-msgstr "e tem as seguintes alterações não salvas:"
-
-#: src/slic3r/GUI/Tab.cpp:2949
-msgid "Unsaved Changes"
-msgstr "Alterações não salvas"
-
-#: src/slic3r/GUI/Tab.cpp:3047
-msgctxt "PresetName"
-msgid "%1% - Copy"
-msgstr "%1% - cópia"
-
-#: src/slic3r/GUI/Tab.cpp:3070
-msgid "The supplied name is empty. It can't be saved."
-msgstr "O nome fornecido está vazio. Não pode ser salvo."
-
-#: src/slic3r/GUI/Tab.cpp:3075
-msgid "Cannot overwrite a system profile."
-msgstr "Não é possível substituir um perfil de sistema."
-
-#: src/slic3r/GUI/Tab.cpp:3079
-msgid "Cannot overwrite an external profile."
-msgstr "Não é possível substituir um perfil externo."
-
-#: src/slic3r/GUI/Tab.cpp:3084
-msgid "Preset with name \"%1%\" already exists."
-msgstr "Predefinido com nome \"%1%\" já existe."
-
-#: src/slic3r/GUI/Tab.cpp:3085
-msgid "Replace?"
-msgstr "Substituir?"
-
-#: src/slic3r/GUI/Tab.cpp:3123
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "remove"
 msgstr "remover"
 
-#: src/slic3r/GUI/Tab.cpp:3123
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "delete"
 msgstr "excluir"
 
-#. TRN  remove/delete
-#: src/slic3r/GUI/Tab.cpp:3125
+#: src/slic3r/GUI/Tab.cpp:3392
+msgid ""
+"Are you sure you want to delete \"%1%\" preset from the physical printer \"%2%"
+"\"?"
+msgstr ""
+"Tem certeza de que deseja excluir predefinição \"%1%\" da impressora física "
+"\"%2%\"?"
+
+#: src/slic3r/GUI/Tab.cpp:3404
+msgid "Next physical printer(s) has/have selected preset"
+msgstr "Impressora física seguinte tem predefinição selecionada"
+
+#: src/slic3r/GUI/Tab.cpp:3408
+msgid ""
+"Note, that selected preset will be deleted from this/those printer(s) too."
+msgstr ""
+"Note que a predefinição selecionada será deletada desta(s) impressora(s) também"
+
+#: src/slic3r/GUI/Tab.cpp:3412
+msgid "Next physical printer(s) has/have one and only selected preset"
+msgstr "Impressora física seguinte tem uma única predefinição selecionada"
+
+#: src/slic3r/GUI/Tab.cpp:3416
+msgid ""
+"Note, that this/those printer(s) will be deleted after deleting of the "
+"selected preset."
+msgstr ""
+"Note que esta(s) impressora(s) serão excluídas após a exclusão da predefinição "
+"selecionada."
+
+#: src/slic3r/GUI/Tab.cpp:3420
 msgid "Are you sure you want to %1% the selected preset?"
 msgstr "Tem certeza de que deseja %1% da predefinição selecionada?"
 
 #. TRN  Remove/Delete
-#: src/slic3r/GUI/Tab.cpp:3128
+#: src/slic3r/GUI/Tab.cpp:3425
 msgid "%1% Preset"
 msgstr "%1% Predefinição"
 
-#: src/slic3r/GUI/Tab.cpp:3254
+#: src/slic3r/GUI/Tab.cpp:3435
+msgid "It's a last for this physical printer. We can't delete it"
+msgstr "É o último para esta impressora física. Não podemos deletar"
+
+#: src/slic3r/GUI/Tab.cpp:3509 src/slic3r/GUI/Tab.cpp:3588
+msgid "Set"
+msgstr "Definir"
+
+#: src/slic3r/GUI/Tab.cpp:3660
+msgid "Machine limits will be emitted to G-code and used to estimate print time."
+msgstr ""
+"Os limites da máquina serão emitidos para o G-code e usados ​​o para estimar o "
+"tempo de impressão."
+
+#: src/slic3r/GUI/Tab.cpp:3663
+msgid ""
+"Machine limits will NOT be emitted to G-code, however they will be used to "
+"estimate print time, which may therefore not be accurate as the printer may "
+"apply a different set of machine limits."
+msgstr ""
+"Os limites da máquina NÃO serão emitidos para o código G, no entanto, eles "
+"serão usados ​​para estimar o tempo de impressão, que pode, portanto, não ser "
+"preciso, pois a impressora pode aplicar um conjunto diferente de limites da "
+"máquina."
+
+#: src/slic3r/GUI/Tab.cpp:3667
+msgid ""
+"Machine limits are not set, therefore the print time estimate may not be "
+"accurate."
+msgstr ""
+"Os limites da máquina não são definidos, portanto, a estimativa do tempo de "
+"impressão pode não ser precisa."
+
+#: src/slic3r/GUI/Tab.cpp:3689
 msgid "LOCKED LOCK"
 msgstr "CADEADO FECHADO"
 
 #. TRN Description for "LOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3256
+#: src/slic3r/GUI/Tab.cpp:3691
 msgid ""
-"indicates that the settings are the same as the system (or default) values "
-"for the current option group"
+"indicates that the settings are the same as the system (or default) values for "
+"the current option group"
 msgstr ""
-"indica que as config. são as mesmas que os valores do sistema (ou padrão) "
-"para o grupo de opções atual"
+"indica que as config. são as mesmas que os valores do sistema (ou padrão) para "
+"o grupo de opções atual"
 
-#: src/slic3r/GUI/Tab.cpp:3258
+#: src/slic3r/GUI/Tab.cpp:3693
 msgid "UNLOCKED LOCK"
 msgstr "CADEADO ABERTO"
 
 #. TRN Description for "UNLOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3260
+#: src/slic3r/GUI/Tab.cpp:3695
 msgid ""
-"indicates that some settings were changed and are not equal to the system "
-"(or default) values for the current option group.\n"
-"Click the UNLOCKED LOCK icon to reset all settings for current option group "
-"to the system (or default) values."
+"indicates that some settings were changed and are not equal to the system (or "
+"default) values for the current option group.\n"
+"Click the UNLOCKED LOCK icon to reset all settings for current option group to "
+"the system (or default) values."
 msgstr ""
 "indica que algumas config. foram alteradas e não são iguais aos valores do "
 "sistema (ou padrão) para o grupo de opções atual.\n"
-"Clique no ícone DESBLOQUEAR para redefinir todas as config. do grupo de "
-"opções atual para os valores do sistema (ou padrão)."
+"Clique no ícone DESBLOQUEAR para redefinir todas as config. do grupo de opções "
+"atual para os valores do sistema (ou padrão)."
 
-#: src/slic3r/GUI/Tab.cpp:3265
+#: src/slic3r/GUI/Tab.cpp:3700
 msgid "WHITE BULLET"
 msgstr "PONTO BRANCO"
 
 #. TRN Description for "WHITE BULLET"
-#: src/slic3r/GUI/Tab.cpp:3267
+#: src/slic3r/GUI/Tab.cpp:3702
 msgid ""
 "for the left button: indicates a non-system (or non-default) preset,\n"
 "for the right button: indicates that the settings hasn't been modified."
@@ -5938,12 +7098,12 @@ msgstr ""
 "padrão),\n"
 "para o botão direito: indica que as config. não foram modificadas."
 
-#: src/slic3r/GUI/Tab.cpp:3270
+#: src/slic3r/GUI/Tab.cpp:3705
 msgid "BACK ARROW"
 msgstr "REDEFINIR"
 
 #. TRN Description for "BACK ARROW"
-#: src/slic3r/GUI/Tab.cpp:3272
+#: src/slic3r/GUI/Tab.cpp:3707
 msgid ""
 "indicates that the settings were changed and are not equal to the last saved "
 "preset for the current option group.\n"
@@ -5955,33 +7115,33 @@ msgstr ""
 "Clique no ícone REDEFINIR para redefinir todas as config. do grupo de opções "
 "atual para a última predefinição salva."
 
-#: src/slic3r/GUI/Tab.cpp:3282
+#: src/slic3r/GUI/Tab.cpp:3717
 msgid ""
 "LOCKED LOCK icon indicates that the settings are the same as the system (or "
 "default) values for the current option group"
 msgstr ""
-"O ícone CADEADO FECHADO indica que as config. são as mesmas que os valores "
-"do sistema (ou padrão) para o grupo de opções atual"
+"O ícone CADEADO FECHADO indica que as config. são as mesmas que os valores do "
+"sistema (ou padrão) para o grupo de opções atual"
 
-#: src/slic3r/GUI/Tab.cpp:3284
+#: src/slic3r/GUI/Tab.cpp:3719
 msgid ""
-"UNLOCKED LOCK icon indicates that some settings were changed and are not "
-"equal to the system (or default) values for the current option group.\n"
+"UNLOCKED LOCK icon indicates that some settings were changed and are not equal "
+"to the system (or default) values for the current option group.\n"
 "Click to reset all settings for current option group to the system (or "
 "default) values."
 msgstr ""
-"O ícone de CADEADO ABERTO indica que algumas config. foram alteradas e não "
-"são iguais aos valores do sistema (ou padrão) para o grupo de opções atual.\n"
+"O ícone de CADEADO ABERTO indica que algumas config. foram alteradas e não são "
+"iguais aos valores do sistema (ou padrão) para o grupo de opções atual.\n"
 "Clique para redefinir todas as config. para o grupo de opções atual para os "
 "valores do sistema (ou padrão)."
 
-#: src/slic3r/GUI/Tab.cpp:3287
+#: src/slic3r/GUI/Tab.cpp:3722
 msgid "WHITE BULLET icon indicates a non system (or non default) preset."
 msgstr ""
 "O ícone PONTO BRANCO indica uma predefinição que não é do sistema (ou não "
 "predefinida)."
 
-#: src/slic3r/GUI/Tab.cpp:3290
+#: src/slic3r/GUI/Tab.cpp:3725
 msgid ""
 "WHITE BULLET icon indicates that the settings are the same as in the last "
 "saved preset for the current option group."
@@ -5989,19 +7149,19 @@ msgstr ""
 "O ícone PONTO BRANCO indica que as config. são as mesmas da última "
 "predefinição salva para o grupo de opções atual."
 
-#: src/slic3r/GUI/Tab.cpp:3292
+#: src/slic3r/GUI/Tab.cpp:3727
 msgid ""
-"BACK ARROW icon indicates that the settings were changed and are not equal "
-"to the last saved preset for the current option group.\n"
+"BACK ARROW icon indicates that the settings were changed and are not equal to "
+"the last saved preset for the current option group.\n"
 "Click to reset all settings for the current option group to the last saved "
 "preset."
 msgstr ""
-"O ícone de REDEFINIR indica que as config. foram alteradas e não são iguais "
-"à última predefinição salva para o grupo de opções atual.\n"
-"Clique para redefinir todas as config. do grupo de opções atual para a "
-"última predefinição salva."
+"O ícone de REDEFINIR indica que as config. foram alteradas e não são iguais à "
+"última predefinição salva para o grupo de opções atual.\n"
+"Clique para redefinir todas as config. do grupo de opções atual para a última "
+"predefinição salva."
 
-#: src/slic3r/GUI/Tab.cpp:3298
+#: src/slic3r/GUI/Tab.cpp:3733
 msgid ""
 "LOCKED LOCK icon indicates that the value is the same as the system (or "
 "default) value."
@@ -6009,7 +7169,7 @@ msgstr ""
 "O ícone CADEADO FECHADO indica que o valor é o mesmo que o valor do sistema "
 "(ou padrão)."
 
-#: src/slic3r/GUI/Tab.cpp:3299
+#: src/slic3r/GUI/Tab.cpp:3734
 msgid ""
 "UNLOCKED LOCK icon indicates that the value was changed and is not equal to "
 "the system (or default) value.\n"
@@ -6019,7 +7179,7 @@ msgstr ""
 "valor do sistema (ou padrão).\n"
 "Clique para redefinir o valor atual para o valor do sistema (ou padrão)."
 
-#: src/slic3r/GUI/Tab.cpp:3305
+#: src/slic3r/GUI/Tab.cpp:3740
 msgid ""
 "WHITE BULLET icon indicates that the value is the same as in the last saved "
 "preset."
@@ -6027,7 +7187,7 @@ msgstr ""
 "O ícone PONTO BRANCO indica que o valor é o mesmo da última predefinição "
 "guardada."
 
-#: src/slic3r/GUI/Tab.cpp:3306
+#: src/slic3r/GUI/Tab.cpp:3741
 msgid ""
 "BACK ARROW icon indicates that the value was changed and is not equal to the "
 "last saved preset.\n"
@@ -6037,59 +7197,188 @@ msgstr ""
 "predefinição salva.\n"
 "Clique para redefinir o valor atual para a última predefinição salva."
 
-#. TRN Preset
-#: src/slic3r/GUI/Tab.cpp:3419
-#, c-format
-msgid "Save %s as:"
-msgstr "Salvar %s como:"
-
-#: src/slic3r/GUI/Tab.cpp:3463
-msgid "the following suffix is not allowed:"
-msgstr "o sufixo seguinte não é permitido:"
-
-#: src/slic3r/GUI/Tab.cpp:3467
-msgid "The supplied name is not available."
-msgstr "O nome fornecido não está disponível."
-
-#: src/slic3r/GUI/Tab.cpp:3480 src/slic3r/GUI/Tab.cpp:3482
+#: src/slic3r/GUI/Tab.cpp:3894 src/slic3r/GUI/Tab.cpp:3896
 msgid "Material"
 msgstr "Material"
 
-#: src/slic3r/GUI/Tab.cpp:3610
+#: src/slic3r/GUI/Tab.cpp:4018
 msgid "Support head"
 msgstr "Cabeça de suporte"
 
-#: src/slic3r/GUI/Tab.cpp:3615
+#: src/slic3r/GUI/Tab.cpp:4023
 msgid "Support pillar"
 msgstr "Pilar de suporte"
 
-#: src/slic3r/GUI/Tab.cpp:3631
+#: src/slic3r/GUI/Tab.cpp:4046
 msgid "Connection of the support sticks and junctions"
 msgstr "Conexão das varas de suporte e junções"
 
-#: src/slic3r/GUI/Tab.cpp:3636
+#: src/slic3r/GUI/Tab.cpp:4051
 msgid "Automatic generation"
 msgstr "Geração Automática"
 
-#: src/slic3r/GUI/Tab.hpp:328 src/slic3r/GUI/Tab.hpp:431
+#: src/slic3r/GUI/Tab.cpp:4125
+msgid ""
+"\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n"
+"To enable \"%1%\", please switch off \"%2%\""
+msgstr ""
+"\"% 1%\" está desabilitado porque \"% 2%\" está ativado na categoria \"% 3%"
+"\".\n"
+"Para habilitar \"% 1%\", desligue \"% 2%\""
+
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:2917
+msgid "Object elevation"
+msgstr "Elevação do objeto"
+
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:3019
+msgid "Pad around object"
+msgstr "Pad em torno do objeto"
+
+#: src/slic3r/GUI/Tab.hpp:378 src/slic3r/GUI/Tab.hpp:502
 msgid "Print Settings"
 msgstr "Config. de impressão"
 
-#: src/slic3r/GUI/Tab.hpp:355
+#: src/slic3r/GUI/Tab.hpp:409
 msgid "Filament Settings"
 msgstr "Config. de filamento"
 
-#: src/slic3r/GUI/Tab.hpp:391
+#: src/slic3r/GUI/Tab.hpp:453
 msgid "Printer Settings"
 msgstr "Config. da impressora"
 
-#: src/slic3r/GUI/Tab.hpp:416
+#: src/slic3r/GUI/Tab.hpp:486
 msgid "Material Settings"
 msgstr "Config. de material"
 
-#: src/slic3r/GUI/Tab.hpp:443
-msgid "Save preset"
-msgstr "Salvar predefinição"
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:137
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:146
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:845
+msgid "Undef"
+msgstr "Indef"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:525
+msgid "Closing PrusaSlicer: Unsaved Changes"
+msgstr "Versão mínima do PrusaSlicer"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:542
+msgid "Switching Presets: Unsaved Changes"
+msgstr "Alterando Predefinições: Alterações não salvas"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:608
+msgid "Old Value"
+msgstr "Valor Antigo"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:609
+msgid "New Value"
+msgstr "Valor Novo"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:640
+msgid "Transfer"
+msgstr "Transferir"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:641
+msgid "Discard"
+msgstr "Descartar"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:642
+msgid "Save"
+msgstr "Salvar"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:662
+msgid "PrusaSlicer will remember your action."
+msgstr "PrusaSlicer se lembrará de sua ação."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:664
+msgid ""
+"You will not be asked about the unsaved changes the next time you close "
+"PrusaSlicer."
+msgstr ""
+"Você não será questionado sobre as alterações não salvas na próxima vez que "
+"fechar o PrusaSlicer."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:665
+msgid ""
+"You will not be asked about the unsaved changes the next time you switch a "
+"preset."
+msgstr ""
+"Você não será questionado sobre as alterações não salvas na próxima vez que "
+"alternar uma predefinição."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:666
+msgid ""
+"Visit \"Preferences\" and check \"%1%\"\n"
+"to be asked about unsaved changes again."
+msgstr ""
+"Visite \"Preferências\" e marque \"%1%\"\n"
+"para ser questionado sobre alterações não salvas novamente."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:668
+msgid "PrusaSlicer: Don't ask me again"
+msgstr "PrusaSlicer: Não me pergunte de novo"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:735
+msgid "Some fields are too long to fit. Right mouse click reveals the full text."
+msgstr ""
+"Alguns campos são muito longos para caber. Clique com o botão direito do mouse "
+"para revelar o texto completo."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737
+msgid "All modified options will be reverted."
+msgstr "Todos os objetos serão removidos, continuar?"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Save the selected options."
+msgstr "Remover o objeto selecionado."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Transfer the selected options to the newly selected presets."
+msgstr ""
+"Transfira as opções selecionadas para as predefinições recém-selecionados."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:744
+msgid "Save the selected options to preset \"%1%\"."
+msgstr "Salve as opções selecionadas para predefinir \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:745
+msgid "Transfer the selected options to the newly selected preset \"%1%\"."
+msgstr ""
+"Transfira as opções selecionadas para a predefinição recém-selecionada \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1004
+msgid "The following presets were modified:"
+msgstr "Os presets seguintes foram modificados:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1009
+msgid "Preset \"%1%\" has the following unsaved changes:"
+msgstr "\"%1%\"Tem as seguintes alterações não salvas:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1013
+msgid ""
+"Preset \"%1%\" is not compatible with the new printer profile and it has the "
+"following unsaved changes:"
+msgstr ""
+"A predefinição \"%1%\" não é compatível com o novo perfil de impressora e "
+"possui as seguintes alterações não salvas:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1014
+msgid ""
+"Preset \"%1%\" is not compatible with the new print profile and it has the "
+"following unsaved changes:"
+msgstr ""
+"A predefinição \"%1%\" não é compatível com o novo perfil de impressão e "
+"possui as seguintes alterações não salvas:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1061
+msgid "Extruders count"
+msgstr "Contagem de extrusoras"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1177
+msgid "Old value"
+msgstr "Valor padrão"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1178
+msgid "New value"
+msgstr "Novo Valor"
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:38
 msgid "Update available"
@@ -6127,7 +7416,7 @@ msgstr "Não notifique mais sobre novas versões"
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:89 src/slic3r/GUI/UpdateDialogs.cpp:266
 msgid "Configuration update"
-msgstr "Atualização de config."
+msgstr "Atualização de config"
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:89
 msgid "Configuration update is available"
@@ -6137,8 +7426,8 @@ msgstr "A atualização de config. está disponível"
 msgid ""
 "Would you like to install it?\n"
 "\n"
-"Note that a full configuration snapshot will be created first. It can then "
-"be restored at any time should there be a problem with the new version.\n"
+"Note that a full configuration snapshot will be created first. It can then be "
+"restored at any time should there be a problem with the new version.\n"
 "\n"
 "Updated configuration bundles:"
 msgstr ""
@@ -6168,16 +7457,16 @@ msgstr "Você deve instalar uma atualização de configuração."
 msgid ""
 "%s will now start updates. Otherwise it won't be able to start.\n"
 "\n"
-"Note that a full configuration snapshot will be created first. It can then "
-"be restored at any time should there be a problem with the new version.\n"
+"Note that a full configuration snapshot will be created first. It can then be "
+"restored at any time should there be a problem with the new version.\n"
 "\n"
 "Updated configuration bundles:"
 msgstr ""
 "%s agora iniciará atualizações. Caso contrário, não será capaz de começar.\n"
 "\n"
-"Observe que um instantâneo de configuração completo será criado primeiro. "
-"Ele pode então ser restaurado a qualquer momento caso haja um problema com a "
-"nova versão.\n"
+"Observe que um instantâneo de configuração completo será criado primeiro. Ele "
+"pode então ser restaurado a qualquer momento caso haja um problema com a nova "
+"versão.\n"
 "\n"
 "Pacotes de configuração atualizados:"
 
@@ -6196,8 +7485,8 @@ msgstr "%s config. é incompatível"
 msgid ""
 "This version of %s is not compatible with currently installed configuration "
 "bundles.\n"
-"This probably happened as a result of running an older %s after using a "
-"newer one.\n"
+"This probably happened as a result of running an older %s after using a newer "
+"one.\n"
 "\n"
 "You may either exit %s and try again with a newer version, or you may re-run "
 "the initial configuration. Doing so will create a backup snapshot of the "
@@ -6208,10 +7497,9 @@ msgstr ""
 "Isso provavelmente aconteceu como resultado da execução de um %s mais antigo "
 "depois de usar um mais recente.\n"
 "\n"
-"Você pode sair %s e tente novamente com uma versão mais recente, ou você "
-"pode executar novamente a config. inicial. Isso criará um instantâneo de "
-"backup da config. existente antes de instalar os arquivos compatíveis com "
-"este %s."
+"Você pode sair %s e tente novamente com uma versão mais recente, ou você pode "
+"executar novamente a config. inicial. Isso criará um instantâneo de backup da "
+"config. existente antes de instalar os arquivos compatíveis com este %s."
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:225
 #, c-format
@@ -6233,10 +7521,10 @@ msgid ""
 "\n"
 "So called 'System presets' have been introduced, which hold the built-in "
 "default settings for various printers. These System presets cannot be "
-"modified, instead, users now may create their own presets inheriting "
-"settings from one of the System presets.\n"
-"An inheriting preset may either inherit a particular value from its parent "
-"or override it with a customized value.\n"
+"modified, instead, users now may create their own presets inheriting settings "
+"from one of the System presets.\n"
+"An inheriting preset may either inherit a particular value from its parent or "
+"override it with a customized value.\n"
 "\n"
 "Please proceed with the %s that follows to set up the new presets and to "
 "choose whether to enable automatic preset updates."
@@ -6245,9 +7533,9 @@ msgstr ""
 "\n"
 "Assim chamado ' Predefinições do sistema ' foram introduzidas, que mantêm as "
 "config. padrão internas para várias impressoras. Essas predefinições do "
-"sistema não podem ser modificadas, em vez disso, os usuários agora podem "
-"criar suas próprias predefinições herdando as config. de uma das "
-"predefinições do sistema.\n"
+"sistema não podem ser modificadas, em vez disso, os usuários agora podem criar "
+"suas próprias predefinições herdando as config. de uma das predefinições do "
+"sistema.\n"
 "Uma predefinição herdada pode herdar um valor específico de seu pai ou "
 "substituí-lo por um valor personalizado.\n"
 "\n"
@@ -6279,22 +7567,22 @@ msgstr "Personalização de Ramming"
 #: src/slic3r/GUI/WipeTowerDialog.cpp:41
 msgid ""
 "Ramming denotes the rapid extrusion just before a tool change in a single-"
-"extruder MM printer. Its purpose is to properly shape the end of the "
-"unloaded filament so it does not prevent insertion of the new filament and "
-"can itself be reinserted later. This phase is important and different "
-"materials can require different extrusion speeds to get the good shape. For "
-"this reason, the extrusion rates during ramming are adjustable.\n"
+"extruder MM printer. Its purpose is to properly shape the end of the unloaded "
+"filament so it does not prevent insertion of the new filament and can itself "
+"be reinserted later. This phase is important and different materials can "
+"require different extrusion speeds to get the good shape. For this reason, the "
+"extrusion rates during ramming are adjustable.\n"
 "\n"
 "This is an expert-level setting, incorrect adjustment will likely lead to "
 "jams, extruder wheel grinding into filament etc."
 msgstr ""
-"O Ramming denota a extrusão rápida apenas antes que uma mudança da "
-"ferramenta em uma única-extrusora a impressora de multifilamentos Sua "
-"finalidade é moldar corretamente a extremidade do filamento descarregado "
-"assim que não impede a inserção do filamento novo e pode próprio ser "
-"reintroduzido mais tarde. Esta fase é importante e os materiais diferentes "
-"podem exigir velocidades diferentes da extrusão para começ a boa forma. Por "
-"esta razão, as taxas de extrusão durante a batendo são ajustáveis.\n"
+"O Ramming denota a extrusão rápida apenas antes que uma mudança da ferramenta "
+"em uma única-extrusora a impressora de multifilamentos Sua finalidade é moldar "
+"corretamente a extremidade do filamento descarregado assim que não impede a "
+"inserção do filamento novo e pode próprio ser reintroduzido mais tarde. Esta "
+"fase é importante e os materiais diferentes podem exigir velocidades "
+"diferentes da extrusão para começ a boa forma. Por esta razão, as taxas de "
+"extrusão durante a batendo são ajustáveis.\n"
 "\n"
 "Esta é uma config. de nível especialista, ajuste incorreto provavelmente "
 "levará a compotas, roda extrusora moagem em filamento etc."
@@ -6321,8 +7609,7 @@ msgstr "Torre de limpeza - Ajuste de volume de purga"
 
 #: src/slic3r/GUI/WipeTowerDialog.cpp:254
 msgid ""
-"Here you can adjust required purging volume (mm³) for any given pair of "
-"tools."
+"Here you can adjust required purging volume (mm³) for any given pair of tools."
 msgstr ""
 "Aqui você pode ajustar o volume de purga necessário (mm ³) para qualquer par "
 "dado de ferramentas."
@@ -6348,8 +7635,8 @@ msgid ""
 "Total purging volume is calculated by summing two values below, depending on "
 "which tools are loaded/unloaded."
 msgstr ""
-"O volume de purga total é calculado somando-se dois valores abaixo, "
-"dependendo de quais ferramentas são carregadas/descarregadas."
+"O volume de purga total é calculado somando-se dois valores abaixo, dependendo "
+"de quais ferramentas são carregadas/descarregadas."
 
 #: src/slic3r/GUI/WipeTowerDialog.cpp:286
 msgid "Volume to purge (mm³) when the filament is being"
@@ -6361,8 +7648,7 @@ msgstr "De"
 
 #: src/slic3r/GUI/WipeTowerDialog.cpp:365
 msgid ""
-"Switching to simple settings will discard changes done in the advanced "
-"mode!\n"
+"Switching to simple settings will discard changes done in the advanced mode!\n"
 "\n"
 "Do you want to proceed?"
 msgstr ""
@@ -6379,17 +7665,17 @@ msgstr "Mostrar config. simplificadas"
 msgid "Show advanced settings"
 msgstr "Mostrar opções avançadas"
 
-#: src/slic3r/GUI/wxExtensions.cpp:706
+#: src/slic3r/GUI/wxExtensions.cpp:623
 #, c-format
 msgid "Switch to the %s mode"
 msgstr "Mude para o modo %s"
 
-#: src/slic3r/GUI/wxExtensions.cpp:707
+#: src/slic3r/GUI/wxExtensions.cpp:624
 #, c-format
 msgid "Current mode is %s"
 msgstr "O modo atual é %s"
 
-#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:69
+#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:68
 #, c-format
 msgid "Mismatched type of print host: %s"
 msgstr "Tipo incompatível de host de impressão: %s"
@@ -6461,7 +7747,7 @@ msgid "Model fixing"
 msgstr "Fixação do modelo"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:341
-msgid "Exporting model..."
+msgid "Exporting model"
 msgstr "Exportando o modelo..."
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:368
@@ -6515,8 +7801,7 @@ msgstr "Upload não ativado no cartão FlashAir."
 
 #: src/slic3r/Utils/FlashAir.cpp:68
 msgid "Connection to FlashAir works correctly and upload is enabled."
-msgstr ""
-"A conexão com o FlashAir funciona corretamente e o upload está ativado."
+msgstr "A conexão com o FlashAir funciona corretamente e o upload está ativado."
 
 #: src/slic3r/Utils/FlashAir.cpp:74
 msgid "Could not connect to FlashAir"
@@ -6524,188 +7809,92 @@ msgstr "Não foi possível conectar-se ao FlashAir"
 
 #: src/slic3r/Utils/FlashAir.cpp:76
 msgid ""
-"Note: FlashAir with firmware 2.00.02 or newer and activated upload function "
-"is required."
+"Note: FlashAir with firmware 2.00.02 or newer and activated upload function is "
+"required."
 msgstr ""
-"Nota: O FlashAir com firmware 2.00.02 ou função de upload mais nova e "
-"ativada é necessário."
+"Nota: O FlashAir com firmware 2.00.02 ou função de upload mais nova e ativada "
+"é necessário."
 
-#: src/slic3r/Utils/OctoPrint.cpp:84
+#: src/slic3r/Utils/OctoPrint.cpp:83
 msgid "Connection to OctoPrint works correctly."
 msgstr "A ligação ao OctoPrint funciona correctamente."
 
-#: src/slic3r/Utils/OctoPrint.cpp:90
+#: src/slic3r/Utils/OctoPrint.cpp:89
 msgid "Could not connect to OctoPrint"
 msgstr "Não foi possível conectar-se ao OctoPrint"
 
-#: src/slic3r/Utils/OctoPrint.cpp:92
+#: src/slic3r/Utils/OctoPrint.cpp:91
 msgid "Note: OctoPrint version at least 1.1.0 is required."
 msgstr "Nota: OctoPrint versão pelo menos 1.1.0 é necessária."
 
-#: src/slic3r/Utils/OctoPrint.cpp:179
+#: src/slic3r/Utils/OctoPrint.cpp:185
 msgid "Connection to Prusa SL1 works correctly."
 msgstr "A conexão com o Prusa SL1 funciona corretamente."
 
-#: src/slic3r/Utils/OctoPrint.cpp:185
+#: src/slic3r/Utils/OctoPrint.cpp:191
 msgid "Could not connect to Prusa SLA"
 msgstr "Não foi possível conectar-se a Prusa SLA"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:705
+#: src/slic3r/Utils/PresetUpdater.cpp:726
 #, c-format
 msgid "requires min. %s and max. %s"
 msgstr "requer min . %s e máx.  %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:710
+#: src/slic3r/Utils/PresetUpdater.cpp:730
 #, c-format
 msgid "requires min. %s"
 msgstr "requer min . %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:713
+#: src/slic3r/Utils/PresetUpdater.cpp:733
 #, c-format
 msgid "requires max. %s"
 msgstr "requer Max.  %s"
 
-#: src/libslic3r/SLA/Pad.cpp:691
-msgid "Pad brim size is too small for the current configuration."
-msgstr "O tamanho da borda do bloco é muito pequeno para a configuração atual."
+#: src/slic3r/Utils/Http.cpp:73
+msgid ""
+"Could not detect system SSL certificate store. PrusaSlicer will be unable to "
+"establish secure network connections."
+msgstr ""
+"Não foi possível detectar o armazenamento de certificados SSL do sistema. O "
+"PrusaSlicer não conseguirá estabelecer conexões de rede seguras."
 
-#: src/libslic3r/Zipper.cpp:32
-msgid "undefined error"
-msgstr "erro indefinido"
+#: src/slic3r/Utils/Http.cpp:78
+msgid "PrusaSlicer detected system SSL certificate store in: %1%"
+msgstr "PrusaSlicer detectou armazenamento de certificados SSL do sistema em:%1%"
 
-#: src/libslic3r/Zipper.cpp:34
-msgid "too many files"
-msgstr "muitos arquivos"
+#: src/slic3r/Utils/Http.cpp:82
+msgid ""
+"To specify the system certificate store manually, please set the %1% "
+"environment variable to the correct CA bundle and restart the application."
+msgstr ""
+"Para especificar o armazenamento de certificado do sistema manualmente, defina "
+"a variável de ambiente %1% para o pacote CA correto e reinicie o aplicativo."
 
-#: src/libslic3r/Zipper.cpp:36
-msgid "file too large"
-msgstr "arquivo muito grande"
+#: src/slic3r/Utils/Http.cpp:91
+msgid ""
+"CURL init has failed. PrusaSlicer will be unable to establish network "
+"connections. See logs for additional details."
+msgstr ""
+"A iniciação do CURL falhou. PrusaSlicer não conseguirá estabelecer conexões de "
+"rede. Consulte os logs para obter detalhes adicionais."
 
-#: src/libslic3r/Zipper.cpp:38
-msgid "unsupported method"
-msgstr "método não suportado"
+#: src/slic3r/Utils/Process.cpp:151
+msgid "Open G-code file:"
+msgstr "Abrir arquivo G-code:"
 
-#: src/libslic3r/Zipper.cpp:40
-msgid "unsupported encryption"
-msgstr "criptografia sem suporte"
+#: src/libslic3r/GCode.cpp:604
+msgid "There is an object with no extrusions on the first layer."
+msgstr "Há um objeto sem extrusões na primeira camada."
 
-#: src/libslic3r/Zipper.cpp:42
-msgid "unsupported feature"
-msgstr "recurso não suportado"
-
-#: src/libslic3r/Zipper.cpp:44
-msgid "failed finding central directory"
-msgstr "falha ao encontrar o diretório central"
-
-#: src/libslic3r/Zipper.cpp:46
-msgid "not a ZIP archive"
-msgstr "não um arquivo ZIP"
-
-#: src/libslic3r/Zipper.cpp:48
-msgid "invalid header or archive is corrupted"
-msgstr "cabeçalho ou arquivo inválido está corrompido"
-
-#: src/libslic3r/Zipper.cpp:50
-msgid "unsupported multidisk archive"
-msgstr "arquivo Multidisk sem suporte"
-
-#: src/libslic3r/Zipper.cpp:52
-msgid "decompression failed or archive is corrupted"
-msgstr "descompressão falhou ou arquivo está corrompido"
-
-#: src/libslic3r/Zipper.cpp:54
-msgid "compression failed"
-msgstr "falha na compactação"
-
-#: src/libslic3r/Zipper.cpp:56
-msgid "unexpected decompressed size"
-msgstr "tamanho descomprimido inesperado"
-
-#: src/libslic3r/Zipper.cpp:58
-msgid "CRC-32 check failed"
-msgstr "Verificação CRC-32 falhou"
-
-#: src/libslic3r/Zipper.cpp:60
-msgid "unsupported central directory size"
-msgstr "tamanho do diretório central não suportado"
-
-#: src/libslic3r/Zipper.cpp:62
-msgid "allocation failed"
-msgstr "alocação falhou"
-
-#: src/libslic3r/Zipper.cpp:64
-msgid "file open failed"
-msgstr "falha na abertura do arquivo"
-
-#: src/libslic3r/Zipper.cpp:66
-msgid "file create failed"
-msgstr "falha na criação do arquivo"
-
-#: src/libslic3r/Zipper.cpp:68
-msgid "file write failed"
-msgstr "falha na gravação do arquivo"
-
-#: src/libslic3r/Zipper.cpp:70
-msgid "file read failed"
-msgstr "falha na leitura do arquivo"
-
-#: src/libslic3r/Zipper.cpp:72
-msgid "file close failed"
-msgstr "falha ao fechar o arquivo"
-
-#: src/libslic3r/Zipper.cpp:74
-msgid "file seek failed"
-msgstr "falha na busca de arquivo"
-
-#: src/libslic3r/Zipper.cpp:76
-msgid "file stat failed"
-msgstr "falha no status do arquivo"
-
-#: src/libslic3r/Zipper.cpp:78
-msgid "invalid parameter"
-msgstr "parâmetro inválido"
-
-#: src/libslic3r/Zipper.cpp:80
-msgid "invalid filename"
-msgstr "nome de arquivo inválido"
-
-#: src/libslic3r/Zipper.cpp:82
-msgid "buffer too small"
-msgstr "buffer muito pequeno"
-
-#: src/libslic3r/Zipper.cpp:84
-msgid "internal error"
-msgstr "erro interno"
-
-#: src/libslic3r/Zipper.cpp:86
-msgid "file not found"
-msgstr "arquivo não encontrado"
-
-#: src/libslic3r/Zipper.cpp:88
-msgid "archive is too large"
-msgstr "arquivo é muito grande"
-
-#: src/libslic3r/Zipper.cpp:90
-msgid "validation failed"
-msgstr "falha na validação"
-
-#: src/libslic3r/Zipper.cpp:92
-msgid "write calledback failed"
-msgstr "write calledback falhou"
-
-#: src/libslic3r/Zipper.cpp:102
-msgid "Error with zip archive"
-msgstr "Erro com arquivo zip"
-
-#: src/libslic3r/GCode.cpp:637
+#: src/libslic3r/GCode.cpp:622
 msgid "Empty layers detected, the output would not be printable."
 msgstr "Camadas vazias detectadas, a saída não seria imprimível."
 
-#: src/libslic3r/GCode.cpp:638
+#: src/libslic3r/GCode.cpp:623
 msgid "Print z"
 msgstr "Imprimir Z"
 
-#: src/libslic3r/GCode.cpp:639
+#: src/libslic3r/GCode.cpp:624
 msgid ""
 "This is usually caused by negligibly small extrusions or by a faulty model. "
 "Try to repair the model or change its orientation on the bed."
@@ -6713,7 +7902,7 @@ msgstr ""
 "Isso geralmente é causado por extrusões insignificantes ou por um modelo "
 "defeituoso. Tente reparar o modelo ou mudar sua orientação na cama."
 
-#: src/libslic3r/ExtrusionEntity.cpp:323
+#: src/libslic3r/ExtrusionEntity.cpp:328 src/libslic3r/ExtrusionEntity.cpp:364
 msgid "Mixed"
 msgstr "Misto"
 
@@ -6724,53 +7913,184 @@ msgstr ""
 "Não é possível calcular a largura de extrusão para %1%: Variável \"%2%\" não "
 "acessível."
 
-#: src/libslic3r/Format/3mf.cpp:1630
+#: src/libslic3r/Format/3mf.cpp:1667
 msgid ""
 "The selected 3mf file has been saved with a newer version of %1% and is not "
 "compatible."
 msgstr ""
-"O arquivo 3mf selecionado foi salvo com uma versão mais recente de %1% e não "
-"é compatível."
+"O arquivo 3mf selecionado foi salvo com uma versão mais recente de %1% e não é "
+"compatível."
 
-#: src/libslic3r/Format/AMF.cpp:934
+#: src/libslic3r/Format/AMF.cpp:955
 msgid ""
 "The selected amf file has been saved with a newer version of %1% and is not "
 "compatible."
 msgstr ""
-"O arquivo amf selecionado foi salvo com uma versão mais recente de %1% e não "
-"é compatível."
+"O arquivo amf selecionado foi salvo com uma versão mais recente de %1% e não é "
+"compatível."
 
-#: src/libslic3r/Print.cpp:1219
+#: src/libslic3r/miniz_extension.cpp:91
+msgid "undefined error"
+msgstr "erro indefinido"
+
+#: src/libslic3r/miniz_extension.cpp:93
+msgid "too many files"
+msgstr "muitos arquivos"
+
+#: src/libslic3r/miniz_extension.cpp:95
+msgid "file too large"
+msgstr "arquivo muito grande"
+
+#: src/libslic3r/miniz_extension.cpp:97
+msgid "unsupported method"
+msgstr "método não suportado"
+
+#: src/libslic3r/miniz_extension.cpp:99
+msgid "unsupported encryption"
+msgstr "criptografia sem suporte"
+
+#: src/libslic3r/miniz_extension.cpp:101
+msgid "unsupported feature"
+msgstr "recurso não suportado"
+
+#: src/libslic3r/miniz_extension.cpp:103
+msgid "failed finding central directory"
+msgstr "falha ao encontrar o diretório central"
+
+#: src/libslic3r/miniz_extension.cpp:105
+msgid "not a ZIP archive"
+msgstr "não um arquivo ZIP"
+
+#: src/libslic3r/miniz_extension.cpp:107
+msgid "invalid header or archive is corrupted"
+msgstr "cabeçalho ou arquivo inválido está corrompido"
+
+#: src/libslic3r/miniz_extension.cpp:109
+msgid "unsupported multidisk archive"
+msgstr "arquivo Multidisk sem suporte"
+
+#: src/libslic3r/miniz_extension.cpp:111
+msgid "decompression failed or archive is corrupted"
+msgstr "descompressão falhou ou arquivo está corrompido"
+
+#: src/libslic3r/miniz_extension.cpp:113
+msgid "compression failed"
+msgstr "falha na compactação"
+
+#: src/libslic3r/miniz_extension.cpp:115
+msgid "unexpected decompressed size"
+msgstr "tamanho descomprimido inesperado"
+
+#: src/libslic3r/miniz_extension.cpp:117
+msgid "CRC-32 check failed"
+msgstr "Verificação CRC-32 falhou"
+
+#: src/libslic3r/miniz_extension.cpp:119
+msgid "unsupported central directory size"
+msgstr "tamanho do diretório central não suportado"
+
+#: src/libslic3r/miniz_extension.cpp:121
+msgid "allocation failed"
+msgstr "alocação falhou"
+
+#: src/libslic3r/miniz_extension.cpp:123
+msgid "file open failed"
+msgstr "falha na abertura do arquivo"
+
+#: src/libslic3r/miniz_extension.cpp:125
+msgid "file create failed"
+msgstr "falha na criação do arquivo"
+
+#: src/libslic3r/miniz_extension.cpp:127
+msgid "file write failed"
+msgstr "falha na gravação do arquivo"
+
+#: src/libslic3r/miniz_extension.cpp:129
+msgid "file read failed"
+msgstr "falha na leitura do arquivo"
+
+#: src/libslic3r/miniz_extension.cpp:131
+msgid "file close failed"
+msgstr "falha ao fechar o arquivo"
+
+#: src/libslic3r/miniz_extension.cpp:133
+msgid "file seek failed"
+msgstr "falha na busca de arquivo"
+
+#: src/libslic3r/miniz_extension.cpp:135
+msgid "file stat failed"
+msgstr "falha no status do arquivo"
+
+#: src/libslic3r/miniz_extension.cpp:137
+msgid "invalid parameter"
+msgstr "parâmetro inválido"
+
+#: src/libslic3r/miniz_extension.cpp:139
+msgid "invalid filename"
+msgstr "nome de arquivo inválido"
+
+#: src/libslic3r/miniz_extension.cpp:141
+msgid "buffer too small"
+msgstr "buffer muito pequeno"
+
+#: src/libslic3r/miniz_extension.cpp:143
+msgid "internal error"
+msgstr "erro interno"
+
+#: src/libslic3r/miniz_extension.cpp:145
+msgid "file not found"
+msgstr "arquivo não encontrado"
+
+#: src/libslic3r/miniz_extension.cpp:147
+msgid "archive is too large"
+msgstr "arquivo é muito grande"
+
+#: src/libslic3r/miniz_extension.cpp:149
+msgid "validation failed"
+msgstr "falha na validação"
+
+#: src/libslic3r/miniz_extension.cpp:151
+msgid "write calledback failed"
+msgstr "write calledback falhou"
+
+#: src/libslic3r/Preset.cpp:1301
+msgid "filament"
+msgstr "filamento"
+
+#: src/libslic3r/Preset.cpp:1302
+msgid "SLA print"
+msgstr "Impressão de SLA"
+
+#: src/libslic3r/Print.cpp:1245
 msgid "All objects are outside of the print volume."
 msgstr "Todos os objetos estão fora do volume de impressão."
 
-#: src/libslic3r/Print.cpp:1222
+#: src/libslic3r/Print.cpp:1248
 msgid "The supplied settings will cause an empty print."
 msgstr "As config. fornecidas causarão uma impressão vazia."
 
-#: src/libslic3r/Print.cpp:1226
+#: src/libslic3r/Print.cpp:1252
 msgid "Some objects are too close; your extruder will collide with them."
 msgstr "Alguns objetos são muito próximos; sua extrusora irá colidir com eles."
 
-#: src/libslic3r/Print.cpp:1228
+#: src/libslic3r/Print.cpp:1254
 msgid ""
 "Some objects are too tall and cannot be printed without extruder collisions."
 msgstr ""
 "Alguns objetos são muito altos e não podem ser impressos sem colisões de "
 "extrusoras."
 
-#: src/libslic3r/Print.cpp:1237
+#: src/libslic3r/Print.cpp:1263
 msgid "The Spiral Vase option can only be used when printing a single object."
 msgstr "A opção vaso espiral só pode ser usada ao imprimir um único objeto."
 
-#: src/libslic3r/Print.cpp:1244
+#: src/libslic3r/Print.cpp:1270
 msgid ""
-"The Spiral Vase option can only be used when printing single material "
-"objects."
+"The Spiral Vase option can only be used when printing single material objects."
 msgstr ""
 "A opção vaso espiral só pode ser usada ao imprimir objetos de material único."
 
-#: src/libslic3r/Print.cpp:1257
+#: src/libslic3r/Print.cpp:1283
 msgid ""
 "The wipe tower is only supported if all extruders have the same nozzle "
 "diameter and use filaments of the same diameter."
@@ -6778,67 +8098,66 @@ msgstr ""
 "A torre de limpeza só é suportada se todas as extrusoras tiverem o mesmo "
 "diâmetro da ponteira e usarem filamentos do mesmo diâmetro."
 
-#: src/libslic3r/Print.cpp:1262
+#: src/libslic3r/Print.cpp:1288
 msgid ""
-"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter "
-"and Repetier G-code flavors."
+"The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and "
+"Repetier G-code flavors."
 msgstr ""
 "A Wipe Tower é atualmente suportada apenas para os firmwares Marlin, RepRap/"
 "Sprinter e Repetier G-code."
 
-#: src/libslic3r/Print.cpp:1264
+#: src/libslic3r/Print.cpp:1290
 msgid ""
 "The Wipe Tower is currently only supported with the relative extruder "
 "addressing (use_relative_e_distances=1)."
 msgstr ""
-"A torre da limpeza é suportada atualmente somente com o endereçamento "
-"relativo da extrusora (use_relative_e_distances = 1)."
+"A torre da limpeza é suportada atualmente somente com o endereçamento relativo "
+"da extrusora (use_relative_e_distances = 1)."
 
-#: src/libslic3r/Print.cpp:1266
+#: src/libslic3r/Print.cpp:1292
 msgid "Ooze prevention is currently not supported with the wipe tower enabled."
 msgstr ""
-"A prevenção de escorrimento não é suportada atualmente com a torre da "
-"limpeza permitida."
+"A prevenção de escorrimento não é suportada atualmente com a torre da limpeza "
+"permitida."
 
-#: src/libslic3r/Print.cpp:1268
+#: src/libslic3r/Print.cpp:1294
 msgid ""
 "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)."
 msgstr ""
 "Atualmente, a Torre limpa não suporta E volumétrica (use_volumetric_e=0)."
 
-#: src/libslic3r/Print.cpp:1270
+#: src/libslic3r/Print.cpp:1296
 msgid ""
-"The Wipe Tower is currently not supported for multimaterial sequential "
-"prints."
+"The Wipe Tower is currently not supported for multimaterial sequential prints."
 msgstr ""
-"A torre de limpeza só é suportada para vários objetos se eles tiverem "
-"alturas de camada iguais."
+"A torre de limpeza só é suportada para vários objetos se eles tiverem alturas "
+"de camada iguais."
 
-#: src/libslic3r/Print.cpp:1291
+#: src/libslic3r/Print.cpp:1317
 msgid ""
-"The Wipe Tower is only supported for multiple objects if they have equal "
-"layer heights"
+"The Wipe Tower is only supported for multiple objects if they have equal layer "
+"heights"
 msgstr ""
-"A torre de limpeza só é suportada para vários objetos se eles tiverem "
-"alturas de camada iguais"
+"A torre de limpeza só é suportada para vários objetos se eles tiverem alturas "
+"de camada iguais"
 
-#: src/libslic3r/Print.cpp:1293
+#: src/libslic3r/Print.cpp:1319
 msgid ""
-"The Wipe Tower is only supported for multiple objects if they are printed "
-"over an equal number of raft layers"
+"The Wipe Tower is only supported for multiple objects if they are printed over "
+"an equal number of raft layers"
 msgstr ""
-"A torre de limpeza só é suportada para vários objetos se elas forem "
-"impressas em um número igual de camadas de estrado"
+"A torre de limpeza só é suportada para vários objetos se elas forem impressas "
+"em um número igual de camadas de estrado"
 
-#: src/libslic3r/Print.cpp:1295
+#: src/libslic3r/Print.cpp:1321
 msgid ""
-"The Wipe Tower is only supported for multiple objects if they are printed "
-"with the same support_material_contact_distance"
+"The Wipe Tower is only supported for multiple objects if they are printed with "
+"the same support_material_contact_distance"
 msgstr ""
 "A torre de limpeza só é suportado para vários objetos se eles são impressos "
 "com a mesma distância de contato do suporte"
 
-#: src/libslic3r/Print.cpp:1297
+#: src/libslic3r/Print.cpp:1323
 msgid ""
 "The Wipe Tower is only supported for multiple objects if they are sliced "
 "equally."
@@ -6846,7 +8165,7 @@ msgstr ""
 "A torre de limpeza só é suportada para vários objetos se eles são fatiados "
 "igualmente."
 
-#: src/libslic3r/Print.cpp:1339
+#: src/libslic3r/Print.cpp:1365
 msgid ""
 "The Wipe tower is only supported if all objects have the same variable layer "
 "height"
@@ -6854,85 +8173,89 @@ msgstr ""
 "A torre de limpeza só é suportada se todos os objetos tiverem a mesma altura "
 "de camada variável"
 
-#: src/libslic3r/Print.cpp:1365
+#: src/libslic3r/Print.cpp:1391
 msgid ""
 "One or more object were assigned an extruder that the printer does not have."
 msgstr ""
 "Um ou mais objetos foram atribuídos a uma extrusora que a impressora não tem."
 
-#: src/libslic3r/Print.cpp:1374
+#: src/libslic3r/Print.cpp:1400
 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm"
 msgstr ""
 "%1% = %2% mm é muito baixo para ser impresso a uma altura de camada %3% mm"
 
-#: src/libslic3r/Print.cpp:1377
+#: src/libslic3r/Print.cpp:1403
 msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm"
 msgstr ""
 "Excesso %1%=%2% milímetro a ser imprimível com um diâmetro da ponteira %3% "
 "milímetro"
 
-#: src/libslic3r/Print.cpp:1388
+#: src/libslic3r/Print.cpp:1414
 msgid ""
-"Printing with multiple extruders of differing nozzle diameters. If support "
-"is to be printed with the current extruder (support_material_extruder == 0 "
-"or support_material_interface_extruder == 0), all nozzles have to be of the "
-"same diameter."
+"Printing with multiple extruders of differing nozzle diameters. If support is "
+"to be printed with the current extruder (support_material_extruder == 0 or "
+"support_material_interface_extruder == 0), all nozzles have to be of the same "
+"diameter."
 msgstr ""
 "Impressão com múltiplas extrusoras de diferentes diâmetros de bicos. Se a "
 "sustentação deve ser imprimida com a extrusora atual "
 "(support_material_extruder = = 0 ou support_material_interface_extruder = = "
 "0), todos as ponteiras têm que ser do mesmo diâmetro."
 
-#: src/libslic3r/Print.cpp:1396
+#: src/libslic3r/Print.cpp:1422
 msgid ""
-"For the Wipe Tower to work with the soluble supports, the support layers "
-"need to be synchronized with the object layers."
+"For the Wipe Tower to work with the soluble supports, the support layers need "
+"to be synchronized with the object layers."
 msgstr ""
 "Para que a torre de limpeza funcione com os suportes solúveis, as camadas de "
 "suporte precisam ser sincronizadas com as camadas de objeto."
 
-#: src/libslic3r/Print.cpp:1400
+#: src/libslic3r/Print.cpp:1426
 msgid ""
 "The Wipe Tower currently supports the non-soluble supports only if they are "
 "printed with the current extruder without triggering a tool change. (both "
 "support_material_extruder and support_material_interface_extruder need to be "
 "set to 0)."
 msgstr ""
-"A torre de limpeza suporta atualmente os suportes não-solúveis somente se "
-"são imprimidos com o extrusor atual sem provocar uma mudança da ferramenta. "
-"(ambos support_material_extruder e support_material_interface_extruder "
-"precisam ser definidos como 0)."
+"A torre de limpeza suporta atualmente os suportes não-solúveis somente se são "
+"imprimidos com o extrusor atual sem provocar uma mudança da ferramenta. (ambos "
+"support_material_extruder e support_material_interface_extruder precisam ser "
+"definidos como 0)."
 
-#: src/libslic3r/Print.cpp:1422
+#: src/libslic3r/Print.cpp:1448
 msgid "First layer height can't be greater than nozzle diameter"
 msgstr ""
 "A primeira altura da camada não pode ser maior do que o diâmetro da ponteira"
 
-#: src/libslic3r/Print.cpp:1427
+#: src/libslic3r/Print.cpp:1453
 msgid "Layer height can't be greater than nozzle diameter"
 msgstr "A altura da camada não pode ser maior do que o diâmetro da ponteira"
 
-#: src/libslic3r/Print.cpp:1584
+#: src/libslic3r/Print.cpp:1610
 msgid "Infilling layers"
 msgstr "Camadas de preenchimento"
 
-#: src/libslic3r/Print.cpp:1606
+#: src/libslic3r/Print.cpp:1636
 msgid "Generating skirt"
 msgstr "Gerando saia"
 
-#: src/libslic3r/Print.cpp:1614
+#: src/libslic3r/Print.cpp:1645
 msgid "Generating brim"
 msgstr "Gerando a aba"
 
-#: src/libslic3r/Print.cpp:1638
+#: src/libslic3r/Print.cpp:1676
 msgid "Exporting G-code"
 msgstr "Exportando o G-code"
 
-#: src/libslic3r/Print.cpp:1642
+#: src/libslic3r/Print.cpp:1680
 msgid "Generating G-code"
 msgstr "Gerando G-code"
 
-#: src/libslic3r/SLAPrint.cpp:615
+#: src/libslic3r/SLA/Pad.cpp:532
+msgid "Pad brim size is too small for the current configuration."
+msgstr "O tamanho da borda do bloco é muito pequeno para a configuração atual."
+
+#: src/libslic3r/SLAPrint.cpp:627
 msgid ""
 "Cannot proceed without support points! Add support points or disable support "
 "generation."
@@ -6940,110 +8263,110 @@ msgstr ""
 "Não pode prosseguir sem pontos de suporte! Adicione pontos de suporte ou "
 "desative a geração de suporte."
 
-#: src/libslic3r/SLAPrint.cpp:627
+#: src/libslic3r/SLAPrint.cpp:639
 msgid ""
 "Elevation is too low for object. Use the \"Pad around object\" feature to "
 "print the object without elevation."
 msgstr ""
-"A elevação é muito baixa para o objeto. Use o recurso \"pad ao redor do "
-"objeto\" para imprimir o objeto sem elevação."
+"A elevação é muito baixa para o objeto. Use o recurso \"pad ao redor do objeto"
+"\" para imprimir o objeto sem elevação."
 
-#: src/libslic3r/SLAPrint.cpp:633
+#: src/libslic3r/SLAPrint.cpp:645
 msgid ""
 "The endings of the support pillars will be deployed on the gap between the "
-"object and the pad. 'Support base safety distance' has to be greater than "
-"the 'Pad object gap' parameter to avoid this."
+"object and the pad. 'Support base safety distance' has to be greater than the "
+"'Pad object gap' parameter to avoid this."
 msgstr ""
 "As terminações dos pilares de suporte serão implantadas na lacuna entre o "
-"objeto e o pad. ' Distância de segurança de base de suporte ' tem de ser "
-"maior do que o parâmetro ' pad objecto Gap ' para evitar este."
+"objeto e o pad. ' Distância de segurança de base de suporte ' tem de ser maior "
+"do que o parâmetro ' pad objecto Gap ' para evitar este."
 
-#: src/libslic3r/SLAPrint.cpp:648
+#: src/libslic3r/SLAPrint.cpp:660
 msgid "Exposition time is out of printer profile bounds."
 msgstr "O tempo de exposição está fora dos limites do perfil da impressora."
 
-#: src/libslic3r/SLAPrint.cpp:655
+#: src/libslic3r/SLAPrint.cpp:667
 msgid "Initial exposition time is out of printer profile bounds."
 msgstr ""
 "O tempo de exposição inicial está fora dos limites do perfil da impressora."
 
-#: src/libslic3r/SLAPrint.cpp:762
+#: src/libslic3r/SLAPrint.cpp:780
 msgid "Slicing done"
 msgstr "Fatiamento pronto"
 
-#: src/libslic3r/SLAPrintSteps.cpp:43
+#: src/libslic3r/SLAPrintSteps.cpp:44
 msgid "Hollowing model"
 msgstr "Deixar oco o modelo"
 
-#: src/libslic3r/SLAPrintSteps.cpp:44
-msgid "Drilling holes into model."
-msgstr "Furando o modelo"
-
 #: src/libslic3r/SLAPrintSteps.cpp:45
+msgid "Drilling holes into model."
+msgstr "Furando o modelo."
+
+#: src/libslic3r/SLAPrintSteps.cpp:46
 msgid "Slicing model"
 msgstr "Modelo de fatiamento"
 
-#: src/libslic3r/SLAPrintSteps.cpp:46 src/libslic3r/SLAPrintSteps.cpp:356
+#: src/libslic3r/SLAPrintSteps.cpp:47 src/libslic3r/SLAPrintSteps.cpp:359
 msgid "Generating support points"
 msgstr "Gerando pontos de suporte"
 
-#: src/libslic3r/SLAPrintSteps.cpp:47
+#: src/libslic3r/SLAPrintSteps.cpp:48
 msgid "Generating support tree"
 msgstr "Gerando suporte em árvore"
 
-#: src/libslic3r/SLAPrintSteps.cpp:48
+#: src/libslic3r/SLAPrintSteps.cpp:49
 msgid "Generating pad"
 msgstr "Gerando pad"
 
-#: src/libslic3r/SLAPrintSteps.cpp:49
+#: src/libslic3r/SLAPrintSteps.cpp:50
 msgid "Slicing supports"
 msgstr "Fatiando suportes"
 
-#: src/libslic3r/SLAPrintSteps.cpp:64
+#: src/libslic3r/SLAPrintSteps.cpp:65
 msgid "Merging slices and calculating statistics"
 msgstr "Mesclando camadas e calculando estatísticas"
 
-#: src/libslic3r/SLAPrintSteps.cpp:65
+#: src/libslic3r/SLAPrintSteps.cpp:66
 msgid "Rasterizing layers"
 msgstr "Rasterizando camadas"
 
-#: src/libslic3r/SLAPrintSteps.cpp:190
-msgid "Too much overlapping holes."
+#: src/libslic3r/SLAPrintSteps.cpp:192
+msgid "Too many overlapping holes."
 msgstr "Muitos buracos sobrepostos."
 
-#: src/libslic3r/SLAPrintSteps.cpp:199
+#: src/libslic3r/SLAPrintSteps.cpp:201
 msgid ""
 "Drilling holes into the mesh failed. This is usually caused by broken model. "
 "Try to fix it first."
 msgstr ""
-"Os furos de perfuração na malha falharam. Isso geralmente é causado por "
-"modelo quebrado. Tente consertá-lo primeiro."
+"Os furos de perfuração na malha falharam. Isso geralmente é causado por modelo "
+"quebrado. Tente consertá-lo primeiro."
 
-#: src/libslic3r/SLAPrintSteps.cpp:245
+#: src/libslic3r/SLAPrintSteps.cpp:247
 msgid ""
 "Slicing had to be stopped due to an internal error: Inconsistent slice index."
 msgstr ""
 "O fatiamento teve que ser parado devido a um erro interno: índice de "
 "fatiamento inconsistente."
 
-#: src/libslic3r/SLAPrintSteps.cpp:413 src/libslic3r/SLAPrintSteps.cpp:422
-#: src/libslic3r/SLAPrintSteps.cpp:461
+#: src/libslic3r/SLAPrintSteps.cpp:411 src/libslic3r/SLAPrintSteps.cpp:420
+#: src/libslic3r/SLAPrintSteps.cpp:459
 msgid "Visualizing supports"
 msgstr "Visualizando suportes"
 
-#: src/libslic3r/SLAPrintSteps.cpp:453
+#: src/libslic3r/SLAPrintSteps.cpp:451
 msgid "No pad can be generated for this model with the current configuration"
 msgstr "Nenhum pad pode ser gerado para este modelo com a configuração atual"
 
-#: src/libslic3r/SLAPrintSteps.cpp:621
+#: src/libslic3r/SLAPrintSteps.cpp:619
 msgid ""
 "There are unprintable objects. Try to adjust support settings to make the "
 "objects printable."
 msgstr ""
-"Há objetos imprimíveis. Tente ajustar as configurações de suporte para "
-"tornar os objetos imprimíveis."
+"Há objetos imprimíveis. Tente ajustar as configurações de suporte para tornar "
+"os objetos imprimíveis."
 
-#: src/libslic3r/PrintBase.cpp:71
+#: src/libslic3r/PrintBase.cpp:72
 msgid "Failed processing of the output_filename_format template."
 msgstr "Falha no processamento do modelo output_filename_format."
 
@@ -7088,61 +8411,61 @@ msgstr ""
 "Defina isto para a altura máxima que pode ser alcançada pela sua extrusora "
 "durante a impressão."
 
-#: src/libslic3r/PrintConfig.cpp:87
+#: src/libslic3r/PrintConfig.cpp:89
 msgid "Slice gap closing radius"
 msgstr "Raio de fechamento da abertura da fatia"
 
-#: src/libslic3r/PrintConfig.cpp:89
+#: src/libslic3r/PrintConfig.cpp:91
 msgid ""
-"Cracks smaller than 2x gap closing radius are being filled during the "
-"triangle mesh slicing. The gap closing operation may reduce the final print "
-"resolution, therefore it is advisable to keep the value reasonably low."
+"Cracks smaller than 2x gap closing radius are being filled during the triangle "
+"mesh slicing. The gap closing operation may reduce the final print resolution, "
+"therefore it is advisable to keep the value reasonably low."
 msgstr ""
 "As rachaduras menores do que duas vezes o  raio de fechamento estão sendo "
-"preenchidas durante o fatiamento da malha triangular. A operação de "
-"fechamento de vão pode reduzir a resolução final de impressão, portanto, é "
-"aconselhável manter o valor razoavelmente baixo."
+"preenchidas durante o fatiamento da malha triangular. A operação de fechamento "
+"de vão pode reduzir a resolução final de impressão, portanto, é aconselhável "
+"manter o valor razoavelmente baixo."
 
-#: src/libslic3r/PrintConfig.cpp:97
+#: src/libslic3r/PrintConfig.cpp:99
 msgid "Hostname, IP or URL"
 msgstr "Hostname, IP ou URL"
 
-#: src/libslic3r/PrintConfig.cpp:98
+#: src/libslic3r/PrintConfig.cpp:100
 msgid ""
 "Slic3r can upload G-code files to a printer host. This field should contain "
 "the hostname, IP address or URL of the printer host instance."
 msgstr ""
-"Slic3r pode carregar arquivos de G-code para um host de impressora. Este "
-"campo deve conter o nome de host, o endereço IP ou a URL da instância de "
-"host da impressora."
+"Slic3r pode carregar arquivos de G-code para um host de impressora. Este campo "
+"deve conter o nome de host, o endereço IP ou a URL da instância de host da "
+"impressora."
 
-#: src/libslic3r/PrintConfig.cpp:104
+#: src/libslic3r/PrintConfig.cpp:106
 msgid "API Key / Password"
 msgstr "Chave de API/senha"
 
-#: src/libslic3r/PrintConfig.cpp:105
+#: src/libslic3r/PrintConfig.cpp:107
 msgid ""
 "Slic3r can upload G-code files to a printer host. This field should contain "
 "the API Key or the password required for authentication."
 msgstr ""
-"Slic3r pode carregar arquivos de G-code para um host de impressora. Este "
-"campo deve conter a chave de API ou a senha exigida para a autenticação."
+"Slic3r pode carregar arquivos de G-code para um host de impressora. Este campo "
+"deve conter a chave de API ou a senha exigida para a autenticação."
 
-#: src/libslic3r/PrintConfig.cpp:112
+#: src/libslic3r/PrintConfig.cpp:114
 msgid ""
 "Custom CA certificate file can be specified for HTTPS OctoPrint connections, "
-"in crt/pem format. If left blank, the default OS CA certificate repository "
-"is used."
+"in crt/pem format. If left blank, the default OS CA certificate repository is "
+"used."
 msgstr ""
 "O arquivo de certificado de CA personalizado pode ser especificado para "
 "conexões HTTPS OctoPrint, no formato CRT/PEM. Se deixado em branco, o "
 "repositório de certificados do OS CA padrão é usado."
 
-#: src/libslic3r/PrintConfig.cpp:118
+#: src/libslic3r/PrintConfig.cpp:120
 msgid "Elephant foot compensation"
 msgstr "Compensação do pé do elefante"
 
-#: src/libslic3r/PrintConfig.cpp:120
+#: src/libslic3r/PrintConfig.cpp:122
 msgid ""
 "The first layer will be shrunk in the XY plane by the configured value to "
 "compensate for the 1st layer squish aka an Elephant Foot effect."
@@ -7150,25 +8473,41 @@ msgstr ""
 "A primeira camada será encolhido no plano XY pelo valor config.urado para "
 "compensar a 1ª camada esmagada, também conhecida como pé de elefante."
 
-#: src/libslic3r/PrintConfig.cpp:136
+#: src/libslic3r/PrintConfig.cpp:138
+msgid "Password"
+msgstr "Senha"
+
+#: src/libslic3r/PrintConfig.cpp:144
+msgid "Printer preset name"
+msgstr "Nome da predefinição da impressora"
+
+#: src/libslic3r/PrintConfig.cpp:145
+msgid "Related printer preset name"
+msgstr "Nome da predefinição da impressora relacionada"
+
+#: src/libslic3r/PrintConfig.cpp:150
+msgid "Authorization Type"
+msgstr "Tipo de Autorização"
+
+#: src/libslic3r/PrintConfig.cpp:169
 msgid "Avoid crossing perimeters"
 msgstr "Evitar cruzamento de perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:137
+#: src/libslic3r/PrintConfig.cpp:170
 msgid ""
-"Optimize travel moves in order to minimize the crossing of perimeters. This "
-"is mostly useful with Bowden extruders which suffer from oozing. This "
-"feature slows down both the print and the G-code generation."
+"Optimize travel moves in order to minimize the crossing of perimeters. This is "
+"mostly useful with Bowden extruders which suffer from oozing. This feature "
+"slows down both the print and the G-code generation."
 msgstr ""
 "Otimize os movimentos de viagem para minimizar o cruzamento de perímetros. "
 "Isto é principalmente útil com extrusoras Bowden que sofrem de escorrimento. "
 "Este recurso retarda a impressão e a geração de G-code."
 
-#: src/libslic3r/PrintConfig.cpp:144 src/libslic3r/PrintConfig.cpp:2064
+#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:2206
 msgid "Other layers"
 msgstr "Outras camadas"
 
-#: src/libslic3r/PrintConfig.cpp:145
+#: src/libslic3r/PrintConfig.cpp:178
 msgid ""
 "Bed temperature for layers after the first one. Set this to zero to disable "
 "bed temperature control commands in the output."
@@ -7176,32 +8515,32 @@ msgstr ""
 "Temperatura da mesa para camadas após o primeiro. Defina isso como zero para "
 "desabilitar os comandos de controle de temperatura da mesa na saída."
 
-#: src/libslic3r/PrintConfig.cpp:147
+#: src/libslic3r/PrintConfig.cpp:181
 msgid "Bed temperature"
 msgstr "Temperatura da mesa"
 
-#: src/libslic3r/PrintConfig.cpp:154
+#: src/libslic3r/PrintConfig.cpp:188
 msgid ""
 "This custom code is inserted at every layer change, right before the Z move. "
-"Note that you can use placeholder variables for all Slic3r settings as well "
-"as [layer_num] and [layer_z]."
+"Note that you can use placeholder variables for all Slic3r settings as well as "
+"[layer_num] and [layer_z]."
 msgstr ""
 "Esse código personalizado é inserido em cada alteração de camada, logo antes "
 "da movimentação Z. Observe que você pode usar variáveis de espaço reservado "
 "para todas as config. Slic3r, bem como [layer_num] e [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:164
+#: src/libslic3r/PrintConfig.cpp:198
 msgid "Between objects G-code"
 msgstr "G-code entre objetos"
 
-#: src/libslic3r/PrintConfig.cpp:165
+#: src/libslic3r/PrintConfig.cpp:199
 msgid ""
 "This code is inserted between objects when using sequential printing. By "
-"default extruder and bed temperature are reset using non-wait command; "
-"however if M104, M109, M140 or M190 are detected in this custom code, Slic3r "
-"will not add temperature commands. Note that you can use placeholder "
-"variables for all Slic3r settings, so you can put a \"M109 "
-"S[first_layer_temperature]\" command wherever you want."
+"default extruder and bed temperature are reset using non-wait command; however "
+"if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not "
+"add temperature commands. Note that you can use placeholder variables for all "
+"Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command "
+"wherever you want."
 msgstr ""
 "Esse código é inserido entre objetos ao usar a impressão sequencial. Por "
 "padrão, a extrusora e a temperatura da mesa são redefinidas usando o comando "
@@ -7211,32 +8550,32 @@ msgstr ""
 "Slic3r, para que você possa colocar um comando \"M109 S "
 "[temperatura_primeira_camada]\" onde quiser."
 
-#: src/libslic3r/PrintConfig.cpp:176
+#: src/libslic3r/PrintConfig.cpp:210
 msgid "Number of solid layers to generate on bottom surfaces."
 msgstr "Número de camadas sólidas para gerar em superfícies inferiores."
 
-#: src/libslic3r/PrintConfig.cpp:177
+#: src/libslic3r/PrintConfig.cpp:211
 msgid "Bottom solid layers"
 msgstr "Camadas sólidas inferiores"
 
-#: src/libslic3r/PrintConfig.cpp:185
+#: src/libslic3r/PrintConfig.cpp:219
 msgid ""
 "The number of bottom solid layers is increased above bottom_solid_layers if "
 "necessary to satisfy minimum thickness of bottom shell."
 msgstr ""
 "O número de camadas sólidas inferiores é aumentado acima de "
-"bottom_solid_layers se necessário para satisfazer a espessura mínima da "
-"camada inferior."
+"bottom_solid_layers se necessário para satisfazer a espessura mínima da camada "
+"inferior."
 
-#: src/libslic3r/PrintConfig.cpp:187
+#: src/libslic3r/PrintConfig.cpp:221
 msgid "Minimum bottom shell thickness"
 msgstr "Espessura mínima da casca inferior"
 
-#: src/libslic3r/PrintConfig.cpp:193
+#: src/libslic3r/PrintConfig.cpp:227
 msgid "Bridge"
 msgstr "Ponte"
 
-#: src/libslic3r/PrintConfig.cpp:194
+#: src/libslic3r/PrintConfig.cpp:228
 msgid ""
 "This is the acceleration your printer will use for bridges. Set zero to "
 "disable acceleration control for bridges."
@@ -7244,93 +8583,95 @@ msgstr ""
 "Esta é a aceleração que sua impressora usará para pontes. Defina zero para "
 "desabilitar o controle de aceleração para pontes."
 
-#: src/libslic3r/PrintConfig.cpp:196 src/libslic3r/PrintConfig.cpp:339
-#: src/libslic3r/PrintConfig.cpp:862 src/libslic3r/PrintConfig.cpp:984
-#: src/libslic3r/PrintConfig.cpp:1152 src/libslic3r/PrintConfig.cpp:1201
-#: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1403
+#: src/libslic3r/PrintConfig.cpp:230 src/libslic3r/PrintConfig.cpp:373
+#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:1028
+#: src/libslic3r/PrintConfig.cpp:1260 src/libslic3r/PrintConfig.cpp:1309
+#: src/libslic3r/PrintConfig.cpp:1319 src/libslic3r/PrintConfig.cpp:1511
 msgid "mm/s²"
 msgstr "mm/s²"
 
-#: src/libslic3r/PrintConfig.cpp:202
+#: src/libslic3r/PrintConfig.cpp:236
 msgid "Bridging angle"
 msgstr "Ângulo de ponte"
 
-#: src/libslic3r/PrintConfig.cpp:204
+#: src/libslic3r/PrintConfig.cpp:238
 msgid ""
 "Bridging angle override. If left to zero, the bridging angle will be "
 "calculated automatically. Otherwise the provided angle will be used for all "
 "bridges. Use 180° for zero angle."
 msgstr ""
 "Sobreposição de ângulo de ponte. Se deixado em zero, o ângulo de ponte será "
-"calculado automaticamente. Caso contrário, o ângulo fornecido será usado "
-"para todas as pontes. Use 180 ° para o ângulo zero."
+"calculado automaticamente. Caso contrário, o ângulo fornecido será usado para "
+"todas as pontes. Use 180 ° para o ângulo zero."
 
-#: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780
-#: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650
-#: src/libslic3r/PrintConfig.cpp:1894 src/libslic3r/PrintConfig.cpp:2049
-#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2737
-#: src/libslic3r/PrintConfig.cpp:2858
+#: src/libslic3r/PrintConfig.cpp:241 src/libslic3r/PrintConfig.cpp:816
+#: src/libslic3r/PrintConfig.cpp:1748 src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:2036 src/libslic3r/PrintConfig.cpp:2191
+#: src/libslic3r/PrintConfig.cpp:2390 src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3012
 msgid "°"
 msgstr "°"
 
-#: src/libslic3r/PrintConfig.cpp:213
+#: src/libslic3r/PrintConfig.cpp:247
 msgid "Bridges fan speed"
 msgstr "Velocidade da ventoinha nas pontes"
 
-#: src/libslic3r/PrintConfig.cpp:214
+#: src/libslic3r/PrintConfig.cpp:248
 msgid "This fan speed is enforced during all bridges and overhangs."
 msgstr ""
 "Esta velocidade da ventoinha é imposta durante todas as pontes e angulações."
 
-#: src/libslic3r/PrintConfig.cpp:215 src/libslic3r/PrintConfig.cpp:792
-#: src/libslic3r/PrintConfig.cpp:1219 src/libslic3r/PrintConfig.cpp:1282
-#: src/libslic3r/PrintConfig.cpp:1532 src/libslic3r/PrintConfig.cpp:2425
-#: src/libslic3r/PrintConfig.cpp:2777
+#: src/libslic3r/PrintConfig.cpp:249 src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1390 src/libslic3r/PrintConfig.cpp:1640
+#: src/libslic3r/PrintConfig.cpp:2568 src/libslic3r/PrintConfig.cpp:2805
+#: src/libslic3r/PrintConfig.cpp:2931
 msgid "%"
 msgstr "%"
 
-#: src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:256
 msgid "Bridge flow ratio"
 msgstr "Relação de fluxo da ponte"
 
-#: src/libslic3r/PrintConfig.cpp:224
+#: src/libslic3r/PrintConfig.cpp:258
 msgid ""
 "This factor affects the amount of plastic for bridging. You can decrease it "
-"slightly to pull the extrudates and prevent sagging, although default "
-"settings are usually good and you should experiment with cooling (use a fan) "
-"before tweaking this."
+"slightly to pull the extrudates and prevent sagging, although default settings "
+"are usually good and you should experiment with cooling (use a fan) before "
+"tweaking this."
 msgstr ""
 "Esse fator afeta a quantidade de plástico para a ponte. Você pode diminuí-lo "
-"um pouco para puxar as extrusões e evitar a flacidez, embora as config. "
-"padrão são geralmente boas e você deve experimentar com refrigeração (use "
-"uma ventoinha) antes de ajustes isso."
+"um pouco para puxar as extrusões e evitar a flacidez, embora as config. padrão "
+"são geralmente boas e você deve experimentar com refrigeração (use uma "
+"ventoinha) antes de ajustes isso."
 
-#: src/libslic3r/PrintConfig.cpp:234
+#: src/libslic3r/PrintConfig.cpp:268
 msgid "Bridges"
 msgstr "Pontes"
 
-#: src/libslic3r/PrintConfig.cpp:236
+#: src/libslic3r/PrintConfig.cpp:270
 msgid "Speed for printing bridges."
 msgstr "Velocidade para a impressão de pontes."
 
-#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:609
-#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:626
-#: src/libslic3r/PrintConfig.cpp:634 src/libslic3r/PrintConfig.cpp:661
-#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:922
-#: src/libslic3r/PrintConfig.cpp:1050 src/libslic3r/PrintConfig.cpp:1135
-#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1181
-#: src/libslic3r/PrintConfig.cpp:1191 src/libslic3r/PrintConfig.cpp:1241
-#: src/libslic3r/PrintConfig.cpp:1300 src/libslic3r/PrintConfig.cpp:1433
-#: src/libslic3r/PrintConfig.cpp:1607 src/libslic3r/PrintConfig.cpp:1616
-#: src/libslic3r/PrintConfig.cpp:2028 src/libslic3r/PrintConfig.cpp:2154
+#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
+#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
+#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
+#: src/libslic3r/PrintConfig.cpp:716 src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1094 src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1243 src/libslic3r/PrintConfig.cpp:1277
+#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1349 src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1541 src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1724 src/libslic3r/PrintConfig.cpp:2170
+#: src/libslic3r/PrintConfig.cpp:2297
 msgid "mm/s"
 msgstr "mm/s"
 
-#: src/libslic3r/PrintConfig.cpp:244
+#: src/libslic3r/PrintConfig.cpp:278
 msgid "Brim width"
 msgstr "Largura da aba"
 
-#: src/libslic3r/PrintConfig.cpp:245
+#: src/libslic3r/PrintConfig.cpp:279
 msgid ""
 "Horizontal width of the brim that will be printed around each object on the "
 "first layer."
@@ -7338,146 +8679,145 @@ msgstr ""
 "Largura horizontal da aba que será impressa em torno de cada objeto na "
 "primeira camada."
 
-#: src/libslic3r/PrintConfig.cpp:252
+#: src/libslic3r/PrintConfig.cpp:286
 msgid "Clip multi-part objects"
 msgstr "Clip objetos de várias partes"
 
-#: src/libslic3r/PrintConfig.cpp:253
+#: src/libslic3r/PrintConfig.cpp:287
 msgid ""
 "When printing multi-material objects, this settings will make Slic3r to clip "
-"the overlapping object parts one by the other (2nd part will be clipped by "
-"the 1st, 3rd part will be clipped by the 1st and 2nd etc)."
+"the overlapping object parts one by the other (2nd part will be clipped by the "
+"1st, 3rd part will be clipped by the 1st and 2nd etc)."
 msgstr ""
-"Ao imprimir objetos de vários materiais, essas config. farão com que o "
-"Slic3r recorte as partes do objeto sobrepostas uma pela outra (2ª parte será "
-"cortada pela 1ª, 3ª parte será cortada pela 1ª e 2ª, etc.)."
+"Ao imprimir objetos de vários materiais, essas config. farão com que o Slic3r "
+"recorte as partes do objeto sobrepostas uma pela outra (2ª parte será cortada "
+"pela 1ª, 3ª parte será cortada pela 1ª e 2ª, etc.)."
 
-#: src/libslic3r/PrintConfig.cpp:260
+#: src/libslic3r/PrintConfig.cpp:294
 msgid "Colorprint height"
 msgstr "Altura da impressão colorida"
 
-#: src/libslic3r/PrintConfig.cpp:261
+#: src/libslic3r/PrintConfig.cpp:295
 msgid "Heights at which a filament change is to occur."
 msgstr "Alturas em que uma mudança do filamento ocorre."
 
-#: src/libslic3r/PrintConfig.cpp:271
+#: src/libslic3r/PrintConfig.cpp:305
 msgid "Compatible printers condition"
 msgstr "Condição de impressoras compatíveis"
 
-#: src/libslic3r/PrintConfig.cpp:272
+#: src/libslic3r/PrintConfig.cpp:306
 msgid ""
 "A boolean expression using the configuration values of an active printer "
 "profile. If this expression evaluates to true, this profile is considered "
 "compatible with the active printer profile."
 msgstr ""
-"Uma expressão booleana usando os valores de config. de um perfil de "
-"impressora ativo. Se essa expressão for avaliada como verdadeira, esse "
-"perfil será considerado compatível com o perfil de impressora ativo."
+"Uma expressão booleana usando os valores de config. de um perfil de impressora "
+"ativo. Se essa expressão for avaliada como verdadeira, esse perfil será "
+"considerado compatível com o perfil de impressora ativo."
 
-#: src/libslic3r/PrintConfig.cpp:286
+#: src/libslic3r/PrintConfig.cpp:320
 msgid "Compatible print profiles condition"
 msgstr "Condição de perfis de impressão compatíveis"
 
-#: src/libslic3r/PrintConfig.cpp:287
+#: src/libslic3r/PrintConfig.cpp:321
 msgid ""
 "A boolean expression using the configuration values of an active print "
 "profile. If this expression evaluates to true, this profile is considered "
 "compatible with the active print profile."
 msgstr ""
-"Uma expressão booleana usando os valores de config. de um perfil de "
-"impressão ativo. Se essa expressão for avaliada como verdadeira, esse perfil "
-"será considerado compatível com o perfil de impressão ativo."
+"Uma expressão booleana usando os valores de config. de um perfil de impressão "
+"ativo. Se essa expressão for avaliada como verdadeira, esse perfil será "
+"considerado compatível com o perfil de impressão ativo."
 
-#: src/libslic3r/PrintConfig.cpp:304
+#: src/libslic3r/PrintConfig.cpp:338
 msgid "Complete individual objects"
 msgstr "Complete objetos individuais"
 
-#: src/libslic3r/PrintConfig.cpp:305
+#: src/libslic3r/PrintConfig.cpp:339
 msgid ""
 "When printing multiple objects or copies, this feature will complete each "
 "object before moving onto next one (and starting it from its bottom layer). "
-"This feature is useful to avoid the risk of ruined prints. Slic3r should "
-"warn and prevent you from extruder collisions, but beware."
+"This feature is useful to avoid the risk of ruined prints. Slic3r should warn "
+"and prevent you from extruder collisions, but beware."
 msgstr ""
-"Ao imprimir vários objetos ou cópias, esse recurso concluirá cada objeto "
-"antes de passar para o próximo (e iniciando-o de sua camada inferior). Este "
-"recurso é útil para evitar o risco de impressões arruinadas. Slic3r deve "
-"avisar e impedi-lo de colisões de extrusoras, mas cuidado."
+"Ao imprimir vários objetos ou cópias, esse recurso concluirá cada objeto antes "
+"de passar para o próximo (e iniciando-o de sua camada inferior). Este recurso "
+"é útil para evitar o risco de impressões arruinadas. Slic3r deve avisar e "
+"impedi-lo de colisões de extrusoras, mas cuidado."
 
-#: src/libslic3r/PrintConfig.cpp:313
+#: src/libslic3r/PrintConfig.cpp:347
 msgid "Enable auto cooling"
 msgstr "Ativar o resfriamento automático"
 
-#: src/libslic3r/PrintConfig.cpp:314
+#: src/libslic3r/PrintConfig.cpp:348
 msgid ""
-"This flag enables the automatic cooling logic that adjusts print speed and "
-"fan speed according to layer printing time."
+"This flag enables the automatic cooling logic that adjusts print speed and fan "
+"speed according to layer printing time."
 msgstr ""
 "Esse sinalizador permite a lógica de resfriamento automática que ajusta a "
 "velocidade de impressão e a velocidade do ventoinha de acordo com o tempo de "
 "impressão da camada."
 
-#: src/libslic3r/PrintConfig.cpp:319
+#: src/libslic3r/PrintConfig.cpp:353
 msgid "Cooling tube position"
 msgstr "Posição do tubo de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:320
+#: src/libslic3r/PrintConfig.cpp:354
 msgid "Distance of the center-point of the cooling tube from the extruder tip."
 msgstr ""
 "Distância do ponto central do tubo de resfriamento da ponta da extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:327
+#: src/libslic3r/PrintConfig.cpp:361
 msgid "Cooling tube length"
 msgstr "Comprimento do tubo de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:328
+#: src/libslic3r/PrintConfig.cpp:362
 msgid "Length of the cooling tube to limit space for cooling moves inside it."
 msgstr ""
 "Comprimento do tubo de resfriamento para limitar o espaço para movimentos de "
 "resfriamento dentro dele."
 
-#: src/libslic3r/PrintConfig.cpp:336
+#: src/libslic3r/PrintConfig.cpp:370
 msgid ""
-"This is the acceleration your printer will be reset to after the role-"
-"specific acceleration values are used (perimeter/infill). Set zero to "
-"prevent resetting acceleration at all."
+"This is the acceleration your printer will be reset to after the role-specific "
+"acceleration values are used (perimeter/infill). Set zero to prevent resetting "
+"acceleration at all."
 msgstr ""
 "Esta é a aceleração que sua impressora será redefinida para depois que os "
 "valores de aceleração específicos da função forem usados (perímetro/"
 "preenchimento). Defina zero para evitar redefinir a aceleração em tudo."
 
-#: src/libslic3r/PrintConfig.cpp:345
+#: src/libslic3r/PrintConfig.cpp:379
 msgid "Default filament profile"
 msgstr "Perfil de filamento padrão"
 
-#: src/libslic3r/PrintConfig.cpp:346
+#: src/libslic3r/PrintConfig.cpp:380
 msgid ""
 "Default filament profile associated with the current printer profile. On "
 "selection of the current printer profile, this filament profile will be "
 "activated."
 msgstr ""
-"Perfil de filamento padrão associado ao perfil de impressora atual. Na "
-"seleção do perfil da impressora atual, este perfil de filamento será ativado."
+"Perfil de filamento padrão associado ao perfil de impressora atual. Na seleção "
+"do perfil da impressora atual, este perfil de filamento será ativado."
 
-#: src/libslic3r/PrintConfig.cpp:352
+#: src/libslic3r/PrintConfig.cpp:386
 msgid "Default print profile"
 msgstr "Perfil de impressão padrão"
 
-#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:2592
-#: src/libslic3r/PrintConfig.cpp:2603
+#: src/libslic3r/PrintConfig.cpp:387 src/libslic3r/PrintConfig.cpp:2735
+#: src/libslic3r/PrintConfig.cpp:2746
 msgid ""
 "Default print profile associated with the current printer profile. On "
-"selection of the current printer profile, this print profile will be "
-"activated."
+"selection of the current printer profile, this print profile will be activated."
 msgstr ""
-"Perfil de impressão padrão associado ao perfil de impressora atual. Na "
-"seleção do perfil de impressora atual, este perfil de impressão será ativado."
+"Perfil de impressão padrão associado ao perfil de impressora atual. Na seleção "
+"do perfil de impressora atual, este perfil de impressão será ativado."
 
-#: src/libslic3r/PrintConfig.cpp:359
+#: src/libslic3r/PrintConfig.cpp:393
 msgid "Disable fan for the first"
 msgstr "Desabilite o ventoinha para a(s) primeira(s)"
 
-#: src/libslic3r/PrintConfig.cpp:360
+#: src/libslic3r/PrintConfig.cpp:394
 msgid ""
 "You can set this to a positive value to disable fan at all during the first "
 "layers, so that it does not make adhesion worse."
@@ -7485,27 +8825,27 @@ msgstr ""
 "Você pode ajustar isto a um valor positivo para desabilitar a ventoinha "
 "durante as primeiras camadas, de modo que melhore a adesão."
 
-#: src/libslic3r/PrintConfig.cpp:369
+#: src/libslic3r/PrintConfig.cpp:403
 msgid "Don't support bridges"
 msgstr "Não suporte pontes"
 
-#: src/libslic3r/PrintConfig.cpp:371
+#: src/libslic3r/PrintConfig.cpp:405
 msgid ""
-"Experimental option for preventing support material from being generated "
-"under bridged areas."
+"Experimental option for preventing support material from being generated under "
+"bridged areas."
 msgstr ""
-"Opção experimental para impedir que o material de suporte seja gerado em "
-"áreas com ponte."
+"Opção experimental para impedir que o material de suporte seja gerado em áreas "
+"com ponte."
 
-#: src/libslic3r/PrintConfig.cpp:377
+#: src/libslic3r/PrintConfig.cpp:411
 msgid "Distance between copies"
 msgstr "Distância entre cópias"
 
-#: src/libslic3r/PrintConfig.cpp:378
+#: src/libslic3r/PrintConfig.cpp:412
 msgid "Distance used for the auto-arrange feature of the plater."
 msgstr "Distância usada para o recurso de organizar automaticamente a bandeja."
 
-#: src/libslic3r/PrintConfig.cpp:386
+#: src/libslic3r/PrintConfig.cpp:420
 msgid ""
 "This end procedure is inserted at the end of the output file. Note that you "
 "can use placeholder variables for all PrusaSlicer settings."
@@ -7514,7 +8854,7 @@ msgstr ""
 "você pode usar variáveis de espaço reservado para todas as config. de "
 "PrusaSlicer."
 
-#: src/libslic3r/PrintConfig.cpp:396
+#: src/libslic3r/PrintConfig.cpp:430
 msgid ""
 "This end procedure is inserted at the end of the output file, before the "
 "printer end gcode (and before any toolchange from this filament in case of "
@@ -7523,73 +8863,77 @@ msgid ""
 "in extruder order."
 msgstr ""
 "Este procedimento final é inserido no final do arquivo de saída, antes da "
-"extremidade da impressora Gcode (e antes de qualquer troca de ferramenta "
-"deste filamento em caso de impressoras multimaterial). Observe que você pode "
-"usar variáveis de espaço reservado para todas as config. de PrusaSlicer. Se "
-"você tiver várias extrusoras, o Gcode é processado em ordem de extrusora."
+"extremidade da impressora Gcode (e antes de qualquer troca de ferramenta deste "
+"filamento em caso de impressoras multimaterial). Observe que você pode usar "
+"variáveis de espaço reservado para todas as config. de PrusaSlicer. Se você "
+"tiver várias extrusoras, o Gcode é processado em ordem de extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:407
+#: src/libslic3r/PrintConfig.cpp:441
 msgid "Ensure vertical shell thickness"
 msgstr "Assegure a espessura vertical da parede"
 
-#: src/libslic3r/PrintConfig.cpp:409
+#: src/libslic3r/PrintConfig.cpp:443
 msgid ""
 "Add solid infill near sloping surfaces to guarantee the vertical shell "
 "thickness (top+bottom solid layers)."
 msgstr ""
-"Adicionar preenchimento sólido perto de superfícies inclinadas para garantir "
-"a espessura do escudo vertical (camadas sólidas no topo + base )."
+"Adicionar preenchimento sólido perto de superfícies inclinadas para garantir a "
+"espessura do escudo vertical (camadas sólidas no topo + base )."
 
-#: src/libslic3r/PrintConfig.cpp:415
+#: src/libslic3r/PrintConfig.cpp:449
 msgid "Top fill pattern"
 msgstr "Padrão de preenchimento do topo"
 
-#: src/libslic3r/PrintConfig.cpp:417
+#: src/libslic3r/PrintConfig.cpp:451
 msgid ""
-"Fill pattern for top infill. This only affects the top visible layer, and "
-"not its adjacent solid shells."
+"Fill pattern for top infill. This only affects the top visible layer, and not "
+"its adjacent solid shells."
 msgstr ""
 "Padrão de preenchimento para preenchimento do topo. Isto afeta somente a "
 "camada visível superior, e não suas paredes adjacentes."
 
-#: src/libslic3r/PrintConfig.cpp:425 src/libslic3r/PrintConfig.cpp:843
-#: src/libslic3r/PrintConfig.cpp:2009
+#: src/libslic3r/PrintConfig.cpp:460 src/libslic3r/PrintConfig.cpp:881
+#: src/libslic3r/PrintConfig.cpp:2151
 msgid "Rectilinear"
 msgstr "Rectilíneo"
 
-#: src/libslic3r/PrintConfig.cpp:426 src/libslic3r/PrintConfig.cpp:849
+#: src/libslic3r/PrintConfig.cpp:461
+msgid "Monotonic"
+msgstr "Monotônico"
+
+#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:887
 msgid "Concentric"
 msgstr "Concêntrico"
 
-#: src/libslic3r/PrintConfig.cpp:427 src/libslic3r/PrintConfig.cpp:853
+#: src/libslic3r/PrintConfig.cpp:463 src/libslic3r/PrintConfig.cpp:891
 msgid "Hilbert Curve"
 msgstr "Curva de Hilbert"
 
-#: src/libslic3r/PrintConfig.cpp:428 src/libslic3r/PrintConfig.cpp:854
+#: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:892
 msgid "Archimedean Chords"
 msgstr "Cordas Archimedean"
 
-#: src/libslic3r/PrintConfig.cpp:429 src/libslic3r/PrintConfig.cpp:855
+#: src/libslic3r/PrintConfig.cpp:465 src/libslic3r/PrintConfig.cpp:893
 msgid "Octagram Spiral"
 msgstr "Espiral estrelado"
 
-#: src/libslic3r/PrintConfig.cpp:435
+#: src/libslic3r/PrintConfig.cpp:471
 msgid "Bottom fill pattern"
 msgstr "Padrão de preenchimento da base"
 
-#: src/libslic3r/PrintConfig.cpp:437
+#: src/libslic3r/PrintConfig.cpp:473
 msgid ""
-"Fill pattern for bottom infill. This only affects the bottom external "
-"visible layer, and not its adjacent solid shells."
+"Fill pattern for bottom infill. This only affects the bottom external visible "
+"layer, and not its adjacent solid shells."
 msgstr ""
 "Padrão de preenchimento para preenchimento da base. Isto afeta somente a "
 "camada visível externa inferior, e não suas paredes adjacentes."
 
-#: src/libslic3r/PrintConfig.cpp:446 src/libslic3r/PrintConfig.cpp:457
+#: src/libslic3r/PrintConfig.cpp:482 src/libslic3r/PrintConfig.cpp:493
 msgid "External perimeters"
 msgstr "Perímetros externos"
 
-#: src/libslic3r/PrintConfig.cpp:448
+#: src/libslic3r/PrintConfig.cpp:484
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for external "
 "perimeters. If left zero, default extrusion width will be used if set, "
@@ -7602,16 +8946,16 @@ msgstr ""
 "ponteira será usado. Se expresso em porcentagem(por exemplo 200%), será "
 "calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:451 src/libslic3r/PrintConfig.cpp:560
-#: src/libslic3r/PrintConfig.cpp:882 src/libslic3r/PrintConfig.cpp:895
-#: src/libslic3r/PrintConfig.cpp:1015 src/libslic3r/PrintConfig.cpp:1041
-#: src/libslic3r/PrintConfig.cpp:1423 src/libslic3r/PrintConfig.cpp:1761
-#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:1951
-#: src/libslic3r/PrintConfig.cpp:2111
+#: src/libslic3r/PrintConfig.cpp:487 src/libslic3r/PrintConfig.cpp:596
+#: src/libslic3r/PrintConfig.cpp:924 src/libslic3r/PrintConfig.cpp:937
+#: src/libslic3r/PrintConfig.cpp:1059 src/libslic3r/PrintConfig.cpp:1085
+#: src/libslic3r/PrintConfig.cpp:1531 src/libslic3r/PrintConfig.cpp:1876
+#: src/libslic3r/PrintConfig.cpp:2025 src/libslic3r/PrintConfig.cpp:2093
+#: src/libslic3r/PrintConfig.cpp:2254
 msgid "mm or %"
 msgstr "mm ou %"
 
-#: src/libslic3r/PrintConfig.cpp:459
+#: src/libslic3r/PrintConfig.cpp:495
 msgid ""
 "This separate setting will affect the speed of external perimeters (the "
 "visible ones). If expressed as percentage (for example: 80%) it will be "
@@ -7621,17 +8965,17 @@ msgstr ""
 "visíveis). Se expresso em porcentagem(por exemplo: 80%) Ele será calculado "
 "sobre a velocidade de perímetros config. acima. Defina como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:904
-#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1772
-#: src/libslic3r/PrintConfig.cpp:1995 src/libslic3r/PrintConfig.cpp:2124
+#: src/libslic3r/PrintConfig.cpp:498 src/libslic3r/PrintConfig.cpp:946
+#: src/libslic3r/PrintConfig.cpp:1835 src/libslic3r/PrintConfig.cpp:1887
+#: src/libslic3r/PrintConfig.cpp:2137 src/libslic3r/PrintConfig.cpp:2267
 msgid "mm/s or %"
 msgstr "mm/s ou %"
 
-#: src/libslic3r/PrintConfig.cpp:469
+#: src/libslic3r/PrintConfig.cpp:505
 msgid "External perimeters first"
 msgstr "Perímetros externos primeiro"
 
-#: src/libslic3r/PrintConfig.cpp:471
+#: src/libslic3r/PrintConfig.cpp:507
 msgid ""
 "Print contour perimeters from the outermost one to the innermost one instead "
 "of the default inverse order."
@@ -7639,22 +8983,22 @@ msgstr ""
 "Imprima perímetros de contorno do mais externo para o mais interno em vez da "
 "ordem inversa padrão."
 
-#: src/libslic3r/PrintConfig.cpp:477
+#: src/libslic3r/PrintConfig.cpp:513
 msgid "Extra perimeters if needed"
 msgstr "Perímetros extras se necessário"
 
-#: src/libslic3r/PrintConfig.cpp:479
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:515
+#, c-format
 msgid ""
 "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r "
-"keeps adding perimeters, until more than 70% of the loop immediately above "
-"is supported."
+"keeps adding perimeters, until more than 70% of the loop immediately above is "
+"supported."
 msgstr ""
 "Adicione mais perímetros quando necessário para evitar lacunas em paredes "
 "inclinados. Slic3r continua adicionando perímetros, até que mais de 70% o do "
 "loop imediatamente acima é suportado."
 
-#: src/libslic3r/PrintConfig.cpp:489
+#: src/libslic3r/PrintConfig.cpp:525
 msgid ""
 "The extruder to use (unless more specific extruder settings are specified). "
 "This value overrides perimeter and infill extruders, but not the support "
@@ -7664,58 +9008,57 @@ msgstr ""
 "sejam especificadas). Esse valor substitui as extrusoras de perímetro e "
 "preenchimento, mas não as extrusoras de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:501
+#: src/libslic3r/PrintConfig.cpp:537
 msgid ""
-"Set this to the vertical distance between your nozzle tip and (usually) the "
-"X carriage rods. In other words, this is the height of the clearance "
-"cylinder around your extruder, and it represents the maximum depth the "
-"extruder can peek before colliding with other printed objects."
+"Set this to the vertical distance between your nozzle tip and (usually) the X "
+"carriage rods. In other words, this is the height of the clearance cylinder "
+"around your extruder, and it represents the maximum depth the extruder can "
+"peek before colliding with other printed objects."
 msgstr ""
-"Defina isto para a distância vertical entre a ponta do bico e (normalmente) "
-"as hastes do X. Em outras palavras, esta é a altura do cilindro de folga em "
-"torno de sua extrusora, e representa a profundidade máxima que a extrusora "
-"pode espreitar antes de colidir com outros objetos impressos."
+"Defina isto para a distância vertical entre a ponta do bico e (normalmente) as "
+"hastes do X. Em outras palavras, esta é a altura do cilindro de folga em torno "
+"de sua extrusora, e representa a profundidade máxima que a extrusora pode "
+"espreitar antes de colidir com outros objetos impressos."
 
-#: src/libslic3r/PrintConfig.cpp:512
+#: src/libslic3r/PrintConfig.cpp:548
 msgid ""
-"Set this to the clearance radius around your extruder. If the extruder is "
-"not centered, choose the largest value for safety. This setting is used to "
-"check for collisions and to display the graphical preview in the plater."
+"Set this to the clearance radius around your extruder. If the extruder is not "
+"centered, choose the largest value for safety. This setting is used to check "
+"for collisions and to display the graphical preview in the plater."
 msgstr ""
-"Defina isso para o raio de folga em torno de sua extrusora. Se a extrusora "
-"não estiver centralizada, escolha o maior valor para a segurança. Essa "
-"config. é usada para verificar colisões e exibir a visualização gráfica na "
-"bandeja."
+"Defina isso para o raio de folga em torno de sua extrusora. Se a extrusora não "
+"estiver centralizada, escolha o maior valor para a segurança. Essa config. é "
+"usada para verificar colisões e exibir a visualização gráfica na bandeja."
 
-#: src/libslic3r/PrintConfig.cpp:522
+#: src/libslic3r/PrintConfig.cpp:558
 msgid "Extruder Color"
 msgstr "Cor da extrusora"
 
-#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:583
+#: src/libslic3r/PrintConfig.cpp:559 src/libslic3r/PrintConfig.cpp:619
 msgid "This is only used in the Slic3r interface as a visual help."
 msgstr "Isso é usado apenas na interface Slic3r como uma ajuda visual."
 
-#: src/libslic3r/PrintConfig.cpp:529
+#: src/libslic3r/PrintConfig.cpp:565
 msgid "Extruder offset"
 msgstr "Compensamento da extrusora"
 
-#: src/libslic3r/PrintConfig.cpp:530
+#: src/libslic3r/PrintConfig.cpp:566
 msgid ""
-"If your firmware doesn't handle the extruder displacement you need the G-"
-"code to take it into account. This option lets you specify the displacement "
-"of each extruder with respect to the first one. It expects positive "
-"coordinates (they will be subtracted from the XY coordinate)."
+"If your firmware doesn't handle the extruder displacement you need the G-code "
+"to take it into account. This option lets you specify the displacement of each "
+"extruder with respect to the first one. It expects positive coordinates (they "
+"will be subtracted from the XY coordinate)."
 msgstr ""
-"Se o seu firmware não manipula o deslocamento da extrusora, você precisa do "
-"G-code para levá-lo em conta. Esta opção permite especificar o deslocamento "
-"de cada extrusora em relação à primeira. Ele espera coordenadas positivas "
-"(eles serão subtraída da coordenada XY)."
+"Se o seu firmware não manipula o deslocamento da extrusora, você precisa do G-"
+"code para levá-lo em conta. Esta opção permite especificar o deslocamento de "
+"cada extrusora em relação à primeira. Ele espera coordenadas positivas (eles "
+"serão subtraída da coordenada XY)."
 
-#: src/libslic3r/PrintConfig.cpp:539
+#: src/libslic3r/PrintConfig.cpp:575
 msgid "Extrusion axis"
 msgstr "Eixo de extrusão"
 
-#: src/libslic3r/PrintConfig.cpp:540
+#: src/libslic3r/PrintConfig.cpp:576
 msgid ""
 "Use this option to set the axis letter associated to your printer's extruder "
 "(usually E but some printers use A)."
@@ -7723,28 +9066,28 @@ msgstr ""
 "Use esta opção para definir a letra do eixo associada à extrusora da sua "
 "impressora (geralmente E, mas algumas impressoras usam A)."
 
-#: src/libslic3r/PrintConfig.cpp:545
+#: src/libslic3r/PrintConfig.cpp:581
 msgid "Extrusion multiplier"
 msgstr "Multiplicador de extrusão"
 
-#: src/libslic3r/PrintConfig.cpp:546
+#: src/libslic3r/PrintConfig.cpp:582
 msgid ""
 "This factor changes the amount of flow proportionally. You may need to tweak "
-"this setting to get nice surface finish and correct single wall widths. "
-"Usual values are between 0.9 and 1.1. If you think you need to change this "
-"more, check filament diameter and your firmware E steps."
+"this setting to get nice surface finish and correct single wall widths. Usual "
+"values are between 0.9 and 1.1. If you think you need to change this more, "
+"check filament diameter and your firmware E steps."
 msgstr ""
-"Esse fator altera a quantidade de fluxo proporcionalmente. Você pode "
-"precisar de ajustar esta config. para obter acabamento de superfície "
-"agradável e corrigir larguras de parede única. Os valores usuais são entre "
-"0,9 e 1,1. Se você acha que precisa mudar isso mais, verifique o diâmetro do "
-"filamento e os passos configurados no firmware da extrusora."
+"Esse fator altera a quantidade de fluxo proporcionalmente. Você pode precisar "
+"de ajustar esta config. para obter acabamento de superfície agradável e "
+"corrigir larguras de parede única. Os valores usuais são entre 0,9 e 1,1. Se "
+"você acha que precisa mudar isso mais, verifique o diâmetro do filamento e os "
+"passos configurados no firmware da extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:554
+#: src/libslic3r/PrintConfig.cpp:590
 msgid "Default extrusion width"
 msgstr "Largura de extrusão padrão"
 
-#: src/libslic3r/PrintConfig.cpp:556
+#: src/libslic3r/PrintConfig.cpp:592
 msgid ""
 "Set this to a non-zero value to allow a manual extrusion width. If left to "
 "zero, Slic3r derives extrusion widths from the nozzle diameter (see the "
@@ -7754,28 +9097,28 @@ msgid ""
 msgstr ""
 "Defina isso como um valor diferente de zero para permitir uma largura de "
 "extrusão manual. Se deixado a zero, Slic3r deriva larguras da extrusão do "
-"diâmetro da ponteira (veja as dicas ferramentas para a largura da extrusão "
-"do perímetro, a largura de extrusão do preenchimento etc.). Se expresso como "
+"diâmetro da ponteira (veja as dicas ferramentas para a largura da extrusão do "
+"perímetro, a largura de extrusão do preenchimento etc.). Se expresso como "
 "porcentagem (por exemplo: 230%), ele será calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:566
+#: src/libslic3r/PrintConfig.cpp:602
 msgid "Keep fan always on"
 msgstr "Mantenha a ventoinha sempre ligada"
 
-#: src/libslic3r/PrintConfig.cpp:567
+#: src/libslic3r/PrintConfig.cpp:603
 msgid ""
 "If this is enabled, fan will never be disabled and will be kept running at "
 "least at its minimum speed. Useful for PLA, harmful for ABS."
 msgstr ""
 "Se isso estiver ativado, a ventoinha nunca será desativada e será mantida "
-"funcionando pelo menos em sua velocidade mínima. Útil para o PLA, "
-"prejudicial para o ABS."
+"funcionando pelo menos em sua velocidade mínima. Útil para o PLA, prejudicial "
+"para o ABS."
 
-#: src/libslic3r/PrintConfig.cpp:572
+#: src/libslic3r/PrintConfig.cpp:608
 msgid "Enable fan if layer print time is below"
 msgstr "Ative o ventoinha se o tempo de impressão da camada estiver abaixo"
 
-#: src/libslic3r/PrintConfig.cpp:573
+#: src/libslic3r/PrintConfig.cpp:609
 msgid ""
 "If layer print time is estimated below this number of seconds, fan will be "
 "enabled and its speed will be calculated by interpolating the minimum and "
@@ -7785,23 +9128,23 @@ msgstr ""
 "segundos, a ventoinha será ativada e sua velocidade será calculada "
 "interpolando as velocidades mínima e máxima."
 
-#: src/libslic3r/PrintConfig.cpp:575 src/libslic3r/PrintConfig.cpp:1708
+#: src/libslic3r/PrintConfig.cpp:611 src/libslic3r/PrintConfig.cpp:1823
 msgid "approximate seconds"
 msgstr "segundos aproximados"
 
-#: src/libslic3r/PrintConfig.cpp:588
+#: src/libslic3r/PrintConfig.cpp:624
 msgid "Filament notes"
 msgstr "Notas de filamento"
 
-#: src/libslic3r/PrintConfig.cpp:589
+#: src/libslic3r/PrintConfig.cpp:625
 msgid "You can put your notes regarding the filament here."
 msgstr "Você pode colocar suas anotações sobre o filamento aqui."
 
-#: src/libslic3r/PrintConfig.cpp:597 src/libslic3r/PrintConfig.cpp:1247
+#: src/libslic3r/PrintConfig.cpp:633 src/libslic3r/PrintConfig.cpp:1355
 msgid "Max volumetric speed"
 msgstr "Máxima velocidade volumétrica"
 
-#: src/libslic3r/PrintConfig.cpp:598
+#: src/libslic3r/PrintConfig.cpp:634
 msgid ""
 "Maximum volumetric speed allowed for this filament. Limits the maximum "
 "volumetric speed of a print to the minimum of print and filament volumetric "
@@ -7811,27 +9154,27 @@ msgstr ""
 "velocidade volumétrica máxima de uma impressão ao mínimo de velocidade "
 "volumétrica de impressão e de filamento. Defina como zero para nenhum limite."
 
-#: src/libslic3r/PrintConfig.cpp:607
+#: src/libslic3r/PrintConfig.cpp:643
 msgid "Loading speed"
 msgstr "Velocidade de carregamento"
 
-#: src/libslic3r/PrintConfig.cpp:608
+#: src/libslic3r/PrintConfig.cpp:644
 msgid "Speed used for loading the filament on the wipe tower."
 msgstr "Velocidade utilizada para carregar o filamento na torre de limpeza."
 
-#: src/libslic3r/PrintConfig.cpp:615
+#: src/libslic3r/PrintConfig.cpp:651
 msgid "Loading speed at the start"
 msgstr "Velocidade de carregamento no início"
 
-#: src/libslic3r/PrintConfig.cpp:616
+#: src/libslic3r/PrintConfig.cpp:652
 msgid "Speed used at the very beginning of loading phase."
 msgstr "Velocidade utilizada no início da fase de carregamento."
 
-#: src/libslic3r/PrintConfig.cpp:623
+#: src/libslic3r/PrintConfig.cpp:659
 msgid "Unloading speed"
 msgstr "Velocidade de descarregamento"
 
-#: src/libslic3r/PrintConfig.cpp:624
+#: src/libslic3r/PrintConfig.cpp:660
 msgid ""
 "Speed used for unloading the filament on the wipe tower (does not affect  "
 "initial part of unloading just after ramming)."
@@ -7839,106 +9182,105 @@ msgstr ""
 "Velocidade utilizada para descarregar o filamento na torre de limpeza (não "
 "afeta a parte inicial do descarregamento logo após o Ramming)."
 
-#: src/libslic3r/PrintConfig.cpp:632
+#: src/libslic3r/PrintConfig.cpp:668
 msgid "Unloading speed at the start"
 msgstr "Velocidade de descarregamento no início"
 
-#: src/libslic3r/PrintConfig.cpp:633
+#: src/libslic3r/PrintConfig.cpp:669
 msgid ""
 "Speed used for unloading the tip of the filament immediately after ramming."
 msgstr ""
 "Velocidade usada para descarregar a ponta do filamento imediatamente após o "
 "Ramming."
 
-#: src/libslic3r/PrintConfig.cpp:640
+#: src/libslic3r/PrintConfig.cpp:676
 msgid "Delay after unloading"
 msgstr "Atraso após o descarregamento"
 
-#: src/libslic3r/PrintConfig.cpp:641
+#: src/libslic3r/PrintConfig.cpp:677
 msgid ""
 "Time to wait after the filament is unloaded. May help to get reliable "
 "toolchanges with flexible materials that may need more time to shrink to "
 "original dimensions."
 msgstr ""
-"Tempo de espera após o filamento ser descarregado. Pode ajudar a obter "
-"trocas de ferramenta confiáveis com materiais flexíveis que podem precisar "
-"de mais tempo para reduzir as dimensões originais."
+"Tempo de espera após o filamento ser descarregado. Pode ajudar a obter trocas "
+"de ferramenta confiáveis com materiais flexíveis que podem precisar de mais "
+"tempo para reduzir as dimensões originais."
 
-#: src/libslic3r/PrintConfig.cpp:650
+#: src/libslic3r/PrintConfig.cpp:686
 msgid "Number of cooling moves"
 msgstr "Número de movimentos de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:651
+#: src/libslic3r/PrintConfig.cpp:687
 msgid ""
-"Filament is cooled by being moved back and forth in the cooling tubes. "
-"Specify desired number of these moves."
+"Filament is cooled by being moved back and forth in the cooling tubes. Specify "
+"desired number of these moves."
 msgstr ""
 "O filamento é resfriado por ser movido para frente e para trás nos tubos de "
 "resfriamento. Especifique o número desejado desses movimentos."
 
-#: src/libslic3r/PrintConfig.cpp:659
+#: src/libslic3r/PrintConfig.cpp:695
 msgid "Speed of the first cooling move"
 msgstr "Velocidade do primeiro movimento de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:660
+#: src/libslic3r/PrintConfig.cpp:696
 msgid "Cooling moves are gradually accelerating beginning at this speed."
 msgstr ""
 "Movimentos de resfriamento estão gradualmente acelerando a partir desta "
 "velocidade."
 
-#: src/libslic3r/PrintConfig.cpp:667
+#: src/libslic3r/PrintConfig.cpp:703
 msgid "Minimal purge on wipe tower"
 msgstr "Remoção mínima na torre da limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:668
+#: src/libslic3r/PrintConfig.cpp:704
 msgid ""
 "After a tool change, the exact position of the newly loaded filament inside "
 "the nozzle may not be known, and the filament pressure is likely not yet "
-"stable. Before purging the print head into an infill or a sacrificial "
-"object, Slic3r will always prime this amount of material into the wipe tower "
-"to produce successive infill or sacrificial object extrusions reliably."
+"stable. Before purging the print head into an infill or a sacrificial object, "
+"Slic3r will always prime this amount of material into the wipe tower to "
+"produce successive infill or sacrificial object extrusions reliably."
 msgstr ""
 "Após uma mudança da ferramenta, a posição exata do filamento recentemente "
-"carregado dentro da ponteira pode não ser conhecida, e a pressão do "
-"filamento provavelmente ainda não esteja estável. Antes de purgar a cabeça "
-"de impressão em um preenchimento ou um objeto sacrificial, Slic3r sempre "
-"Prime esta quantidade de material para a torre de limpeza para produzir "
-"sucessivas preenchimento ou sacrificial objeto extrusões de forma confiável."
+"carregado dentro da ponteira pode não ser conhecida, e a pressão do filamento "
+"provavelmente ainda não esteja estável. Antes de purgar a cabeça de impressão "
+"em um preenchimento ou um objeto sacrificial, Slic3r sempre Prime esta "
+"quantidade de material para a torre de limpeza para produzir sucessivas "
+"preenchimento ou sacrificial objeto extrusões de forma confiável."
 
-#: src/libslic3r/PrintConfig.cpp:672
+#: src/libslic3r/PrintConfig.cpp:708
 msgid "mm³"
 msgstr "mm³"
 
-#: src/libslic3r/PrintConfig.cpp:678
+#: src/libslic3r/PrintConfig.cpp:714
 msgid "Speed of the last cooling move"
 msgstr "Velocidade do último movimento de resfriamento"
 
-#: src/libslic3r/PrintConfig.cpp:679
+#: src/libslic3r/PrintConfig.cpp:715
 msgid "Cooling moves are gradually accelerating towards this speed."
 msgstr ""
-"Movimentos de resfriamento estão gradualmente acelerando para esta "
-"velocidade."
+"Movimentos de resfriamento estão gradualmente acelerando para esta velocidade."
 
-#: src/libslic3r/PrintConfig.cpp:686
+#: src/libslic3r/PrintConfig.cpp:722
 msgid "Filament load time"
 msgstr "Tempo de carga do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:687
+#: src/libslic3r/PrintConfig.cpp:723
 msgid ""
 "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new "
-"filament during a tool change (when executing the T code). This time is "
-"added to the total print time by the G-code time estimator."
+"filament during a tool change (when executing the T code). This time is added "
+"to the total print time by the G-code time estimator."
 msgstr ""
 "Tempo para o firmware da impressora (ou a Multi Material Unit 2.0 para "
 "carregar um novo filamento durante uma mudança de ferramenta (ao executar o "
-"código T). Esse tempo é adicionado ao tempo total de impressão pelo "
-"estimador de tempo do G-code."
+"código T). Esse tempo é adicionado ao tempo total de impressão pelo estimador "
+"de tempo do G-code."
 
-#: src/libslic3r/PrintConfig.cpp:694
+#: src/libslic3r/PrintConfig.cpp:730
 msgid "Ramming parameters"
 msgstr "Parâmetros de Ramming"
 
-#: src/libslic3r/PrintConfig.cpp:695
+#: src/libslic3r/PrintConfig.cpp:731
 msgid ""
 "This string is edited by RammingDialog and contains ramming specific "
 "parameters."
@@ -7946,152 +9288,159 @@ msgstr ""
 "Essa cadeia de caracteres é editada por rammingdialog e contém parâmetros "
 "específicos de Ramming."
 
-#: src/libslic3r/PrintConfig.cpp:701
+#: src/libslic3r/PrintConfig.cpp:737
 msgid "Filament unload time"
 msgstr "Tempo de descarregamento do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:702
+#: src/libslic3r/PrintConfig.cpp:738
 msgid ""
 "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a "
-"filament during a tool change (when executing the T code). This time is "
-"added to the total print time by the G-code time estimator."
+"filament during a tool change (when executing the T code). This time is added "
+"to the total print time by the G-code time estimator."
 msgstr ""
-"Tempo para o firmware da impressora (ou a unidade de material multi 2,0) "
-"para descarregar um filamento durante uma mudança de ferramenta (ao executar "
-"o código T). Esse tempo é adicionado ao tempo total de impressão pelo "
-"estimador de tempo do G-code."
+"Tempo para o firmware da impressora (ou a unidade de material multi 2,0) para "
+"descarregar um filamento durante uma mudança de ferramenta (ao executar o "
+"código T). Esse tempo é adicionado ao tempo total de impressão pelo estimador "
+"de tempo do G-code."
 
-#: src/libslic3r/PrintConfig.cpp:710
+#: src/libslic3r/PrintConfig.cpp:746
 msgid ""
 "Enter your filament diameter here. Good precision is required, so use a "
 "caliper and do multiple measurements along the filament, then compute the "
 "average."
 msgstr ""
 "Insira o diâmetro do filamento aqui. Boa precisão é necessária, então use um "
-"paquímetro e fazer várias medições ao longo do filamento, em seguida, "
-"calcular a média."
+"paquímetro e fazer várias medições ao longo do filamento, em seguida, calcular "
+"a média."
 
-#: src/libslic3r/PrintConfig.cpp:717 src/libslic3r/PrintConfig.cpp:2503
-#: src/libslic3r/PrintConfig.cpp:2504
+#: src/libslic3r/PrintConfig.cpp:753 src/libslic3r/PrintConfig.cpp:2646
+#: src/libslic3r/PrintConfig.cpp:2647
 msgid "Density"
 msgstr "Densidade"
 
-#: src/libslic3r/PrintConfig.cpp:718
+#: src/libslic3r/PrintConfig.cpp:754
 msgid ""
-"Enter your filament density here. This is only for statistical information. "
-"A decent way is to weigh a known length of filament and compute the ratio of "
-"the length to volume. Better is to calculate the volume directly through "
+"Enter your filament density here. This is only for statistical information. A "
+"decent way is to weigh a known length of filament and compute the ratio of the "
+"length to volume. Better is to calculate the volume directly through "
 "displacement."
 msgstr ""
 "Insira sua densidade de filamento aqui. Isto é apenas para informação "
-"estatística. Uma maneira decente é pesar um comprimento conhecido do "
-"filamento e computar a relação do comprimento ao volume. Melhor é calcular o "
-"volume diretamente através do deslocamento."
+"estatística. Uma maneira decente é pesar um comprimento conhecido do filamento "
+"e computar a relação do comprimento ao volume. Melhor é calcular o volume "
+"diretamente através do deslocamento."
 
-#: src/libslic3r/PrintConfig.cpp:721
+#: src/libslic3r/PrintConfig.cpp:757
 msgid "g/cm³"
 msgstr "g/cm³"
 
-#: src/libslic3r/PrintConfig.cpp:726
+#: src/libslic3r/PrintConfig.cpp:762
 msgid "Filament type"
 msgstr "Tipo de filamento"
 
-#: src/libslic3r/PrintConfig.cpp:727
+#: src/libslic3r/PrintConfig.cpp:763
 msgid "The filament material type for use in custom G-codes."
 msgstr "O tipo de material de filamento para uso em G-code customizados."
 
-#: src/libslic3r/PrintConfig.cpp:754
+#: src/libslic3r/PrintConfig.cpp:790
 msgid "Soluble material"
 msgstr "Material solúvel"
 
-#: src/libslic3r/PrintConfig.cpp:755
+#: src/libslic3r/PrintConfig.cpp:791
 msgid "Soluble material is most likely used for a soluble support."
 msgstr "O material solúvel é mais provável usado para um suporte solúvel."
 
-#: src/libslic3r/PrintConfig.cpp:761
+#: src/libslic3r/PrintConfig.cpp:797
 msgid ""
-"Enter your filament cost per kg here. This is only for statistical "
-"information."
+"Enter your filament cost per kg here. This is only for statistical information."
 msgstr ""
 "Insira o seu custo de filamento por kg aqui. Isto é apenas para informação "
 "estatística."
 
-#: src/libslic3r/PrintConfig.cpp:762
+#: src/libslic3r/PrintConfig.cpp:798
 msgid "money/kg"
 msgstr "dinheiro/kg"
 
-#: src/libslic3r/PrintConfig.cpp:771 src/libslic3r/PrintConfig.cpp:2587
+#: src/libslic3r/PrintConfig.cpp:807 src/libslic3r/PrintConfig.cpp:2730
 msgid "(Unknown)"
 msgstr "(Desconhecido)"
 
-#: src/libslic3r/PrintConfig.cpp:775
+#: src/libslic3r/PrintConfig.cpp:811
 msgid "Fill angle"
 msgstr "Ângulo de preenchimento"
 
-#: src/libslic3r/PrintConfig.cpp:777
+#: src/libslic3r/PrintConfig.cpp:813
 msgid ""
 "Default base angle for infill orientation. Cross-hatching will be applied to "
-"this. Bridges will be infilled using the best direction Slic3r can detect, "
-"so this setting does not affect them."
+"this. Bridges will be infilled using the best direction Slic3r can detect, so "
+"this setting does not affect them."
 msgstr ""
 "Ângulo padrão para a orientação de preenchimento. A hachura cruzada será "
-"aplicada a isso. Pontes serão preenchidas usando a melhor direção Slic3r "
-"pode detectar, portanto, essa config. não vai afeta-los."
+"aplicada a isso. Pontes serão preenchidas usando a melhor direção Slic3r pode "
+"detectar, portanto, essa config. não vai afeta-los."
 
-#: src/libslic3r/PrintConfig.cpp:789
+#: src/libslic3r/PrintConfig.cpp:825
 msgid "Fill density"
 msgstr "Densidade de preenchimento"
 
-#: src/libslic3r/PrintConfig.cpp:791
+#: src/libslic3r/PrintConfig.cpp:827
 msgid "Density of internal infill, expressed in the range 0% - 100%."
 msgstr "Densidade de preenchimento interno, expresso na faixa de 0%-100%."
 
-#: src/libslic3r/PrintConfig.cpp:826
+#: src/libslic3r/PrintConfig.cpp:862
 msgid "Fill pattern"
 msgstr "Padrão de preenchimento"
 
-#: src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:864
 msgid "Fill pattern for general low-density infill."
 msgstr "Padrão de preenchimento para preenchimento de baixa densidade."
 
-#: src/libslic3r/PrintConfig.cpp:844
+#: src/libslic3r/PrintConfig.cpp:882
 msgid "Grid"
 msgstr "Grade"
 
-#: src/libslic3r/PrintConfig.cpp:845
+#: src/libslic3r/PrintConfig.cpp:883
 msgid "Triangles"
 msgstr "Triângulos"
 
-#: src/libslic3r/PrintConfig.cpp:846
+#: src/libslic3r/PrintConfig.cpp:884
 msgid "Stars"
 msgstr "Estrelas"
 
-#: src/libslic3r/PrintConfig.cpp:847
+#: src/libslic3r/PrintConfig.cpp:885
 msgid "Cubic"
 msgstr "Cúbico"
 
-#: src/libslic3r/PrintConfig.cpp:848
+#: src/libslic3r/PrintConfig.cpp:886
 msgid "Line"
 msgstr "Linha"
 
-#: src/libslic3r/PrintConfig.cpp:850 src/libslic3r/PrintConfig.cpp:2011
+#: src/libslic3r/PrintConfig.cpp:888 src/libslic3r/PrintConfig.cpp:2153
 msgid "Honeycomb"
 msgstr "Hexágono"
 
-#: src/libslic3r/PrintConfig.cpp:851
+#: src/libslic3r/PrintConfig.cpp:889
 msgid "3D Honeycomb"
 msgstr "Hexágono 3D"
 
-#: src/libslic3r/PrintConfig.cpp:852
+#: src/libslic3r/PrintConfig.cpp:890
 msgid "Gyroid"
 msgstr "Giróide"
 
-#: src/libslic3r/PrintConfig.cpp:859 src/libslic3r/PrintConfig.cpp:868
-#: src/libslic3r/PrintConfig.cpp:876 src/libslic3r/PrintConfig.cpp:910
+#: src/libslic3r/PrintConfig.cpp:894
+msgid "Adaptive Cubic"
+msgstr "Adaptativo"
+
+#: src/libslic3r/PrintConfig.cpp:895
+msgid "Support Cubic"
+msgstr "Pilar de suporte"
+
+#: src/libslic3r/PrintConfig.cpp:899 src/libslic3r/PrintConfig.cpp:908
+#: src/libslic3r/PrintConfig.cpp:918 src/libslic3r/PrintConfig.cpp:952
 msgid "First layer"
 msgstr "Primeira camada"
 
-#: src/libslic3r/PrintConfig.cpp:860
+#: src/libslic3r/PrintConfig.cpp:900
 msgid ""
 "This is the acceleration your printer will use for first layer. Set zero to "
 "disable acceleration control for first layer."
@@ -8099,7 +9448,11 @@ msgstr ""
 "Esta é a aceleração que sua impressora usará para a primeira camada. Defina "
 "zero para desabilitar o controle de aceleração para a primeira camada."
 
-#: src/libslic3r/PrintConfig.cpp:869
+#: src/libslic3r/PrintConfig.cpp:909
+msgid "First layer bed temperature"
+msgstr "Velocidade da primeira camada"
+
+#: src/libslic3r/PrintConfig.cpp:910
 msgid ""
 "Heated build plate temperature for the first layer. Set this to zero to "
 "disable bed temperature control commands in the output."
@@ -8107,12 +9460,12 @@ msgstr ""
 "Temperatura da mesa aquecida para a primeira camada. Defina isso como zero "
 "para desabilitar os comandos de controle de temperatura da mesa na saída."
 
-#: src/libslic3r/PrintConfig.cpp:878
+#: src/libslic3r/PrintConfig.cpp:920
 msgid ""
-"Set this to a non-zero value to set a manual extrusion width for first "
-"layer. You can use this to force fatter extrudates for better adhesion. If "
-"expressed as percentage (for example 120%) it will be computed over first "
-"layer height. If set to zero, it will use the default extrusion width."
+"Set this to a non-zero value to set a manual extrusion width for first layer. "
+"You can use this to force fatter extrudates for better adhesion. If expressed "
+"as percentage (for example 120%) it will be computed over first layer height. "
+"If set to zero, it will use the default extrusion width."
 msgstr ""
 "Defina isso como um valor diferente de zero para definir uma largura de "
 "extrusão manual para a primeira camada. Você pode usar este para forçar "
@@ -8120,7 +9473,7 @@ msgstr ""
 "exemplo, 120%) será computado sobre a primeira altura da camada. Se definido "
 "como zero, ele usará a largura de extrusão padrão."
 
-#: src/libslic3r/PrintConfig.cpp:891
+#: src/libslic3r/PrintConfig.cpp:933
 msgid ""
 "When printing with very low layer heights, you might still want to print a "
 "thicker bottom layer to improve adhesion and tolerance for non perfect build "
@@ -8128,27 +9481,30 @@ msgid ""
 "example: 150%) over the default layer height."
 msgstr ""
 "Ao imprimir com alturas muito baixas da camada, você pode ainda querer "
-"imprimir uma camada inferior mais grossa para melhorar a adesão e a "
-"tolerância para mesas não perfeitas. Isso pode ser expresso como um valor "
-"absoluto ou como uma porcentagem (por exemplo: 150%) sobre a altura da "
-"camada padrão."
+"imprimir uma camada inferior mais grossa para melhorar a adesão e a tolerância "
+"para mesas não perfeitas. Isso pode ser expresso como um valor absoluto ou "
+"como uma porcentagem (por exemplo: 150%) sobre a altura da camada padrão."
 
-#: src/libslic3r/PrintConfig.cpp:900
+#: src/libslic3r/PrintConfig.cpp:942
 msgid "First layer speed"
 msgstr "Velocidade da primeira camada"
 
-#: src/libslic3r/PrintConfig.cpp:901
+#: src/libslic3r/PrintConfig.cpp:943
 msgid ""
-"If expressed as absolute value in mm/s, this speed will be applied to all "
-"the print moves of the first layer, regardless of their type. If expressed "
-"as a percentage (for example: 40%) it will scale the default speeds."
+"If expressed as absolute value in mm/s, this speed will be applied to all the "
+"print moves of the first layer, regardless of their type. If expressed as a "
+"percentage (for example: 40%) it will scale the default speeds."
 msgstr ""
-"Se expresso como valor absoluto em mm/s, esta velocidade será aplicada a "
-"todos os movimentos de impressão da primeira camada, independentemente do "
-"seu tipo. Se expresso em porcentagem(por exemplo: 40%) Ele dimensionará as "
-"velocidades padrão."
+"Se expresso como valor absoluto em mm/s, esta velocidade será aplicada a todos "
+"os movimentos de impressão da primeira camada, independentemente do seu tipo. "
+"Se expresso em porcentagem(por exemplo: 40%) Ele dimensionará as velocidades "
+"padrão."
 
-#: src/libslic3r/PrintConfig.cpp:911
+#: src/libslic3r/PrintConfig.cpp:953
+msgid "First layer extruder temperature"
+msgstr "Temperatura do extrusor na primeira camada"
+
+#: src/libslic3r/PrintConfig.cpp:954
 msgid ""
 "Extruder temperature for first layer. If you want to control temperature "
 "manually during print, set this to zero to disable temperature control "
@@ -8158,7 +9514,7 @@ msgstr ""
 "temperatura manualmente durante a impressão, defina isso como zero para "
 "desabilitar os comandos de controle de temperatura no arquivo de saída."
 
-#: src/libslic3r/PrintConfig.cpp:920
+#: src/libslic3r/PrintConfig.cpp:964
 msgid ""
 "Speed for filling small gaps using short zigzag moves. Keep this reasonably "
 "low to avoid too much shaking and resonance issues. Set zero to disable gaps "
@@ -8169,107 +9525,106 @@ msgstr ""
 "problemas de ressonância. Defina zero para desabilitar o preenchimento de "
 "lacunas."
 
-#: src/libslic3r/PrintConfig.cpp:928
+#: src/libslic3r/PrintConfig.cpp:972
 msgid "Verbose G-code"
 msgstr "Gcode detalhado"
 
-#: src/libslic3r/PrintConfig.cpp:929
+#: src/libslic3r/PrintConfig.cpp:973
 msgid ""
 "Enable this to get a commented G-code file, with each line explained by a "
-"descriptive text. If you print from SD card, the additional weight of the "
-"file could make your firmware slow down."
+"descriptive text. If you print from SD card, the additional weight of the file "
+"could make your firmware slow down."
 msgstr ""
 "Habilite isso para obter um arquivo de G-code comentado, com cada linha "
 "explicada por um texto descritivo. Se você imprimir a partir do cartão SD, o "
 "peso adicional do arquivo pode fazer o seu firmware ficar mais lento."
 
-#: src/libslic3r/PrintConfig.cpp:936
+#: src/libslic3r/PrintConfig.cpp:980
 msgid "G-code flavor"
 msgstr "Tipo de G-code"
 
-#: src/libslic3r/PrintConfig.cpp:937
+#: src/libslic3r/PrintConfig.cpp:981
 msgid ""
 "Some G/M-code commands, including temperature control and others, are not "
 "universal. Set this option to your printer's firmware to get a compatible "
 "output. The \"No extrusion\" flavor prevents PrusaSlicer from exporting any "
 "extrusion value at all."
 msgstr ""
-"Alguns comandos G/M-code, incluindo controle de temperatura e outros, não "
-"são universais. Defina esta opção para o firmware da impressora para obter "
-"uma saída compatível. O \"sem extrusão\" tipo impede PrusaSlicer de exportar "
+"Alguns comandos G/M-code, incluindo controle de temperatura e outros, não são "
+"universais. Defina esta opção para o firmware da impressora para obter uma "
+"saída compatível. O \"sem extrusão\" tipo impede PrusaSlicer de exportar "
 "qualquer valor de extrusão em tudo."
 
-#: src/libslic3r/PrintConfig.cpp:960
+#: src/libslic3r/PrintConfig.cpp:1004
 msgid "No extrusion"
 msgstr "Sem extrusão"
 
-#: src/libslic3r/PrintConfig.cpp:965
+#: src/libslic3r/PrintConfig.cpp:1009
 msgid "Label objects"
 msgstr "Rotular objetos"
 
-#: src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1010
 msgid ""
 "Enable this to add comments into the G-Code labeling print moves with what "
-"object they belong to, which is useful for the Octoprint CancelObject "
-"plugin. This settings is NOT compatible with Single Extruder Multi Material "
-"setup and Wipe into Object / Wipe into Infill."
+"object they belong to, which is useful for the Octoprint CancelObject plugin. "
+"This settings is NOT compatible with Single Extruder Multi Material setup and "
+"Wipe into Object / Wipe into Infill."
 msgstr ""
 "Habilite isso para adicionar comentários aos movimentos de impressão de "
 "rotulagem do G-code com o objeto ao qual eles pertencem, o que é útil para o "
-"plugin Octoprint CancelObject. Essas config. não são compatíveis com a "
-"config. de multi material de extrusora única e limpe em objeto/limpar em "
-"preenchimento."
+"plugin Octoprint CancelObject. Essas config. não são compatíveis com a config. "
+"de multi material de extrusora única e limpe em objeto/limpar em preenchimento."
 
-#: src/libslic3r/PrintConfig.cpp:973
+#: src/libslic3r/PrintConfig.cpp:1017
 msgid "High extruder current on filament swap"
 msgstr "Corrente elevada da extrusora na troca do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:974
+#: src/libslic3r/PrintConfig.cpp:1018
 msgid ""
 "It may be beneficial to increase the extruder motor current during the "
 "filament exchange sequence to allow for rapid ramming feed rates and to "
 "overcome resistance when loading a filament with an ugly shaped tip."
 msgstr ""
 "Pode ser benéfico aumentar a corrente do motor da extrusora durante a "
-"seqüência da troca do filamento para permitir taxas de alimentação de "
-"Ramming rápidas e para superar a resistência ao carregar um filamento com "
-"uma ponta feia."
+"seqüência da troca do filamento para permitir taxas de alimentação de Ramming "
+"rápidas e para superar a resistência ao carregar um filamento com uma ponta "
+"feia."
 
-#: src/libslic3r/PrintConfig.cpp:982
+#: src/libslic3r/PrintConfig.cpp:1026
 msgid ""
-"This is the acceleration your printer will use for infill. Set zero to "
-"disable acceleration control for infill."
+"This is the acceleration your printer will use for infill. Set zero to disable "
+"acceleration control for infill."
 msgstr ""
 "Esta é a aceleração que sua impressora usará para preenchimento. Defina zero "
 "para desabilitar o controle de aceleração para preenchimento."
 
-#: src/libslic3r/PrintConfig.cpp:990
+#: src/libslic3r/PrintConfig.cpp:1034
 msgid "Combine infill every"
 msgstr "Combine preenchimento a cada"
 
-#: src/libslic3r/PrintConfig.cpp:992
+#: src/libslic3r/PrintConfig.cpp:1036
 msgid ""
 "This feature allows to combine infill and speed up your print by extruding "
 "thicker infill layers while preserving thin perimeters, thus accuracy."
 msgstr ""
 "Este recurso permite combinar preenchimento e acelerar a sua impressão por "
-"extrusão camadas de preenchimento mais espessa, preservando perímetros "
-"finos, assim, a precisão."
+"extrusão camadas de preenchimento mais espessa, preservando perímetros finos, "
+"assim, a precisão."
 
-#: src/libslic3r/PrintConfig.cpp:995
+#: src/libslic3r/PrintConfig.cpp:1039
 msgid "Combine infill every n layers"
 msgstr "Combine preenchimento cada n camadas"
 
-#: src/libslic3r/PrintConfig.cpp:1001
+#: src/libslic3r/PrintConfig.cpp:1045
 msgid "Infill extruder"
 msgstr "Extrusora de preenchimento"
 
-#: src/libslic3r/PrintConfig.cpp:1003
+#: src/libslic3r/PrintConfig.cpp:1047
 msgid "The extruder to use when printing infill."
 msgstr ""
 "A extrusora a ser utilizada quando estiver imprimindo preenchimento sólido."
 
-#: src/libslic3r/PrintConfig.cpp:1011
+#: src/libslic3r/PrintConfig.cpp:1055
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for infill. If "
 "left zero, default extrusion width will be used if set, otherwise 1.125 x "
@@ -8278,17 +9633,17 @@ msgid ""
 "example 90%) it will be computed over layer height."
 msgstr ""
 "Defina isso como um valor diferente de zero para definir uma largura de "
-"extrusão manual para preenchimento. Se for deixado zero, a largura de "
-"extrusão padrão será usada se definido, caso contrário, 1,125 x diâmetro da "
-"ponteira será usado. Você pode querer usar extrusora mais larga para "
-"acelerar o preenchimento e tornar suas peças mais fortes. Se expresso em "
-"porcentagem(por exemplo, 90%) Ele será calculado sobre a altura da camada."
+"extrusão manual para preenchimento. Se for deixado zero, a largura de extrusão "
+"padrão será usada se definido, caso contrário, 1,125 x diâmetro da ponteira "
+"será usado. Você pode querer usar extrusora mais larga para acelerar o "
+"preenchimento e tornar suas peças mais fortes. Se expresso em porcentagem(por "
+"exemplo, 90%) Ele será calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:1021
+#: src/libslic3r/PrintConfig.cpp:1065
 msgid "Infill before perimeters"
 msgstr "Preenchimento antes dos perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:1022
+#: src/libslic3r/PrintConfig.cpp:1066
 msgid ""
 "This option will switch the print order of perimeters and infill, making the "
 "latter first."
@@ -8296,26 +9651,25 @@ msgstr ""
 "Esta opção irá mudar a ordem de impressão de perímetros e preenchimento, "
 "tornando o último primeiro."
 
-#: src/libslic3r/PrintConfig.cpp:1027
+#: src/libslic3r/PrintConfig.cpp:1071
 msgid "Only infill where needed"
 msgstr "Somente preenchimento onde necessário"
 
-#: src/libslic3r/PrintConfig.cpp:1029
+#: src/libslic3r/PrintConfig.cpp:1073
 msgid ""
 "This option will limit infill to the areas actually needed for supporting "
 "ceilings (it will act as internal support material). If enabled, slows down "
 "the G-code generation due to the multiple checks involved."
 msgstr ""
 "Esta opção limitará a preenchimento às áreas realmente necessárias para "
-"suportar tetos (atuará como o material de sustentação interno). Se "
-"habilitada, retarda a geração de G-code devido às várias verificações "
-"envolvidas."
+"suportar tetos (atuará como o material de sustentação interno). Se habilitada, "
+"retarda a geração de G-code devido às várias verificações envolvidas."
 
-#: src/libslic3r/PrintConfig.cpp:1036
+#: src/libslic3r/PrintConfig.cpp:1080
 msgid "Infill/perimeters overlap"
 msgstr "Sobreposição de preenchimento/perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1082
 msgid ""
 "This setting applies an additional overlap between infill and perimeters for "
 "better bonding. Theoretically this shouldn't be needed, but backlash might "
@@ -8323,230 +9677,277 @@ msgid ""
 "perimeter extrusion width."
 msgstr ""
 "Esta config. aplica uma sobreposição adicional entre preenchimento e "
-"perímetros para melhor colagem. Teoricamente isso não deveria ser "
-"necessário, mas a folga pode causar lacunas. Se expresso em "
-"porcentagem(exemplo: 15%) é calculado sobre a largura da extrusão do "
-"perímetro."
+"perímetros para melhor colagem. Teoricamente isso não deveria ser necessário, "
+"mas a folga pode causar lacunas. Se expresso em porcentagem(exemplo: 15%) é "
+"calculado sobre a largura da extrusão do perímetro."
 
-#: src/libslic3r/PrintConfig.cpp:1049
+#: src/libslic3r/PrintConfig.cpp:1093
 msgid "Speed for printing the internal fill. Set to zero for auto."
 msgstr ""
 "Velocidade para imprimir o preenchimento interno. Defina como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1057
+#: src/libslic3r/PrintConfig.cpp:1101
 msgid "Inherits profile"
 msgstr "Herda o perfil"
 
-#: src/libslic3r/PrintConfig.cpp:1058
+#: src/libslic3r/PrintConfig.cpp:1102
 msgid "Name of the profile, from which this profile inherits."
 msgstr "Nome do perfil, a partir do qual este perfil herda."
 
-#: src/libslic3r/PrintConfig.cpp:1071
+#: src/libslic3r/PrintConfig.cpp:1115
 msgid "Interface shells"
-msgstr "Interface dos perímetros externos."
+msgstr "Interface dos perímetros externos"
 
-#: src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1116
 msgid ""
 "Force the generation of solid shells between adjacent materials/volumes. "
-"Useful for multi-extruder prints with translucent materials or manual "
-"soluble support material."
+"Useful for multi-extruder prints with translucent materials or manual soluble "
+"support material."
 msgstr ""
 "Force a geração de perímetros externos sólidas entre materiais/volumes "
-"adjacentes. Útil para cópias da multi-extrusora com materiais translúcidos "
-"ou material de sustentação solúvel manual."
+"adjacentes. Útil para cópias da multi-extrusora com materiais translúcidos ou "
+"material de sustentação solúvel manual."
 
-#: src/libslic3r/PrintConfig.cpp:1081
+#: src/libslic3r/PrintConfig.cpp:1124
+msgid "Enable ironing"
+msgstr "Ativar o modo oco"
+
+#: src/libslic3r/PrintConfig.cpp:1125
 msgid ""
-"This custom code is inserted at every layer change, right after the Z move "
-"and before the extruder moves to the first layer point. Note that you can "
-"use placeholder variables for all Slic3r settings as well as [layer_num] and "
+"Enable ironing of the top layers with the hot print head for smooth surface"
+msgstr ""
+"Ative Passar Ferro nas camadas de topo com a cabeça de impressão a quente para "
+"uma superfície lisa"
+
+#: src/libslic3r/PrintConfig.cpp:1131 src/libslic3r/PrintConfig.cpp:1133
+msgid "Ironing Type"
+msgstr "Tipo de Passar Ferro"
+
+#: src/libslic3r/PrintConfig.cpp:1145
+msgid "Flow rate"
+msgstr "Fluxo"
+
+#: src/libslic3r/PrintConfig.cpp:1147
+msgid "Percent of a flow rate relative to object's normal layer height."
+msgstr ""
+"Porcentagem de uma taxa de fluxo em relação à altura normal da camada do "
+"objeto."
+
+#: src/libslic3r/PrintConfig.cpp:1155
+msgid "Spacing between ironing passes"
+msgstr "Espaçamento entre passagem de ferro"
+
+#: src/libslic3r/PrintConfig.cpp:1157
+msgid "Distance between ironing lines"
+msgstr "Distância entre cópias"
+
+#: src/libslic3r/PrintConfig.cpp:1164 src/libslic3r/PrintConfig.cpp:1166
+msgid "Ironing speed"
+msgstr "Velocidade de carregamento"
+
+#: src/libslic3r/PrintConfig.cpp:1174
+msgid ""
+"This custom code is inserted at every layer change, right after the Z move and "
+"before the extruder moves to the first layer point. Note that you can use "
+"placeholder variables for all Slic3r settings as well as [layer_num] and "
 "[layer_z]."
 msgstr ""
 "Este código personalizado é inserido em cada mudança de camada, logo após o "
 "movimento Z e antes que a extrusora se mova para o primeiro ponto de camada. "
-"Observe que você pode usar variáveis de espaço reservado para todas as "
-"config. Slic3r, bem como [layer_num] e [layer_z]."
+"Observe que você pode usar variáveis de espaço reservado para todas as config. "
+"Slic3r, bem como [layer_num] e [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1185
 msgid "Supports remaining times"
 msgstr "Tempo de impressão restante"
 
-#: src/libslic3r/PrintConfig.cpp:1093
+#: src/libslic3r/PrintConfig.cpp:1186
 msgid ""
-"Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute "
-"intervals into the G-code to let the firmware show accurate remaining time. "
-"As of now only the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 "
-"firmware supports M73 Qxx Sxx for the silent mode."
+"Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute intervals "
+"into the G-code to let the firmware show accurate remaining time. As of now "
+"only the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 firmware "
+"supports M73 Qxx Sxx for the silent mode."
 msgstr ""
-"Emita M73 P [porcentagem impressa] R [tempo restante em minutos] em "
-"intervalos de 1 minuto no G-code para permitir que o firmware mostre o tempo "
-"restante exato. A partir de agora apenas o firmware Prusa i3 MK3 reconhece "
-"M73. Além disso, o firmware i3 MK3 suporta M73 QXX Sxx para o modo "
-"silencioso."
+"Emita M73 P [porcentagem impressa] R [tempo restante em minutos] em intervalos "
+"de 1 minuto no G-code para permitir que o firmware mostre o tempo restante "
+"exato. A partir de agora apenas o firmware Prusa i3 MK3 reconhece M73. Além "
+"disso, o firmware i3 MK3 suporta M73 QXX Sxx para o modo silencioso."
 
-#: src/libslic3r/PrintConfig.cpp:1101
+#: src/libslic3r/PrintConfig.cpp:1194
 msgid "Supports stealth mode"
 msgstr "Suporta o modo silencioso"
 
-#: src/libslic3r/PrintConfig.cpp:1102
+#: src/libslic3r/PrintConfig.cpp:1195
 msgid "The firmware supports stealth mode"
 msgstr "O firmware suporta o modo silencioso"
 
-#: src/libslic3r/PrintConfig.cpp:1125
+#: src/libslic3r/PrintConfig.cpp:1200
+msgid "How to apply"
+msgstr "Como aplicar"
+
+#: src/libslic3r/PrintConfig.cpp:1201
+msgid "Purpose of Machine Limits"
+msgstr "Limites da máquina"
+
+#: src/libslic3r/PrintConfig.cpp:1203
+msgid "How to apply the Machine Limits"
+msgstr "Como aplicar os Limites da Máquina"
+
+#: src/libslic3r/PrintConfig.cpp:1233
 msgid "Maximum feedrate X"
 msgstr "Máxima taxa de alimentação do X"
 
-#: src/libslic3r/PrintConfig.cpp:1126
+#: src/libslic3r/PrintConfig.cpp:1234
 msgid "Maximum feedrate Y"
 msgstr "Máxima taxa de alimentação do Y"
 
-#: src/libslic3r/PrintConfig.cpp:1127
+#: src/libslic3r/PrintConfig.cpp:1235
 msgid "Maximum feedrate Z"
 msgstr "Máxima taxa de alimentação do Z"
 
-#: src/libslic3r/PrintConfig.cpp:1128
+#: src/libslic3r/PrintConfig.cpp:1236
 msgid "Maximum feedrate E"
 msgstr "Máxima taxa de alimentação do E"
 
-#: src/libslic3r/PrintConfig.cpp:1131
+#: src/libslic3r/PrintConfig.cpp:1239
 msgid "Maximum feedrate of the X axis"
 msgstr "Máxima taxa de alimentação do eixo X"
 
-#: src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1240
 msgid "Maximum feedrate of the Y axis"
 msgstr "Máxima taxa de alimentação do eixo Y"
 
-#: src/libslic3r/PrintConfig.cpp:1133
+#: src/libslic3r/PrintConfig.cpp:1241
 msgid "Maximum feedrate of the Z axis"
 msgstr "Máxima taxa de alimentação do eixo Z"
 
-#: src/libslic3r/PrintConfig.cpp:1134
+#: src/libslic3r/PrintConfig.cpp:1242
 msgid "Maximum feedrate of the E axis"
 msgstr "Máxima taxa de alimentação do eixo E"
 
-#: src/libslic3r/PrintConfig.cpp:1142
+#: src/libslic3r/PrintConfig.cpp:1250
 msgid "Maximum acceleration X"
 msgstr "Aceleração máxima do X"
 
-#: src/libslic3r/PrintConfig.cpp:1143
+#: src/libslic3r/PrintConfig.cpp:1251
 msgid "Maximum acceleration Y"
 msgstr "Aceleração máxima do Y"
 
-#: src/libslic3r/PrintConfig.cpp:1144
+#: src/libslic3r/PrintConfig.cpp:1252
 msgid "Maximum acceleration Z"
 msgstr "Aceleração máxima do Z"
 
-#: src/libslic3r/PrintConfig.cpp:1145
+#: src/libslic3r/PrintConfig.cpp:1253
 msgid "Maximum acceleration E"
 msgstr "Aceleração máxima do E"
 
-#: src/libslic3r/PrintConfig.cpp:1148
+#: src/libslic3r/PrintConfig.cpp:1256
 msgid "Maximum acceleration of the X axis"
 msgstr "Aceleração máxima do eixo X"
 
-#: src/libslic3r/PrintConfig.cpp:1149
+#: src/libslic3r/PrintConfig.cpp:1257
 msgid "Maximum acceleration of the Y axis"
 msgstr "Aceleração máxima do eixo Y"
 
-#: src/libslic3r/PrintConfig.cpp:1150
+#: src/libslic3r/PrintConfig.cpp:1258
 msgid "Maximum acceleration of the Z axis"
 msgstr "Aceleração máxima do eixo Z"
 
-#: src/libslic3r/PrintConfig.cpp:1151
+#: src/libslic3r/PrintConfig.cpp:1259
 msgid "Maximum acceleration of the E axis"
 msgstr "Aceleração máxima do eixo E"
 
-#: src/libslic3r/PrintConfig.cpp:1159
+#: src/libslic3r/PrintConfig.cpp:1267
 msgid "Maximum jerk X"
 msgstr "Máximo empurrão X"
 
-#: src/libslic3r/PrintConfig.cpp:1160
+#: src/libslic3r/PrintConfig.cpp:1268
 msgid "Maximum jerk Y"
 msgstr "Máximo empurrão Y"
 
-#: src/libslic3r/PrintConfig.cpp:1161
+#: src/libslic3r/PrintConfig.cpp:1269
 msgid "Maximum jerk Z"
 msgstr "Máximo empurrão Z"
 
-#: src/libslic3r/PrintConfig.cpp:1162
+#: src/libslic3r/PrintConfig.cpp:1270
 msgid "Maximum jerk E"
 msgstr "Máximo empurrão E"
 
-#: src/libslic3r/PrintConfig.cpp:1165
+#: src/libslic3r/PrintConfig.cpp:1273
 msgid "Maximum jerk of the X axis"
 msgstr "Máximo empurrão do eixo X"
 
-#: src/libslic3r/PrintConfig.cpp:1166
+#: src/libslic3r/PrintConfig.cpp:1274
 msgid "Maximum jerk of the Y axis"
 msgstr "Máximo empurrão do eixo Y"
 
-#: src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1275
 msgid "Maximum jerk of the Z axis"
 msgstr "Máximo empurrão do eixo Z"
 
-#: src/libslic3r/PrintConfig.cpp:1168
+#: src/libslic3r/PrintConfig.cpp:1276
 msgid "Maximum jerk of the E axis"
 msgstr "Máximo empurrão do eixo E"
 
-#: src/libslic3r/PrintConfig.cpp:1178
+#: src/libslic3r/PrintConfig.cpp:1286
 msgid "Minimum feedrate when extruding"
 msgstr "Taxa de alimentação mínima ao extrudar"
 
-#: src/libslic3r/PrintConfig.cpp:1180
+#: src/libslic3r/PrintConfig.cpp:1288
 msgid "Minimum feedrate when extruding (M205 S)"
 msgstr "Taxa de alimentação mínima ao extrudar (M205 S)"
 
-#: src/libslic3r/PrintConfig.cpp:1188
+#: src/libslic3r/PrintConfig.cpp:1296
 msgid "Minimum travel feedrate"
 msgstr "Taxa de alimentação mínima ao viajar"
 
-#: src/libslic3r/PrintConfig.cpp:1190
+#: src/libslic3r/PrintConfig.cpp:1298
 msgid "Minimum travel feedrate (M205 T)"
 msgstr "Taxa de alimentação mínima ao viajar (M205 T)"
 
-#: src/libslic3r/PrintConfig.cpp:1198
+#: src/libslic3r/PrintConfig.cpp:1306
 msgid "Maximum acceleration when extruding"
 msgstr "Aceleração máxima quando expurgando"
 
-#: src/libslic3r/PrintConfig.cpp:1200
+#: src/libslic3r/PrintConfig.cpp:1308
 msgid "Maximum acceleration when extruding (M204 S)"
 msgstr "Aceleração máxima quando extrudando (M204 S)"
 
-#: src/libslic3r/PrintConfig.cpp:1208
+#: src/libslic3r/PrintConfig.cpp:1316
 msgid "Maximum acceleration when retracting"
 msgstr "Aceleração máxima durante a retração"
 
-#: src/libslic3r/PrintConfig.cpp:1210
+#: src/libslic3r/PrintConfig.cpp:1318
 msgid "Maximum acceleration when retracting (M204 T)"
 msgstr "Aceleração máxima quando retração (M204 T)"
 
-#: src/libslic3r/PrintConfig.cpp:1217 src/libslic3r/PrintConfig.cpp:1226
+#: src/libslic3r/PrintConfig.cpp:1325 src/libslic3r/PrintConfig.cpp:1334
 msgid "Max"
 msgstr "Máx"
 
-#: src/libslic3r/PrintConfig.cpp:1218
+#: src/libslic3r/PrintConfig.cpp:1326
 msgid "This setting represents the maximum speed of your fan."
 msgstr "Esta config. representa a velocidade máxima da sua ventoinha."
 
-#: src/libslic3r/PrintConfig.cpp:1227
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:1335
+#, c-format
 msgid ""
-"This is the highest printable layer height for this extruder, used to cap "
-"the variable layer height and support layer height. Maximum recommended "
-"layer height is 75% of the extrusion width to achieve reasonable inter-layer "
+"This is the highest printable layer height for this extruder, used to cap the "
+"variable layer height and support layer height. Maximum recommended layer "
+"height is 75% of the extrusion width to achieve reasonable inter-layer "
 "adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter."
 msgstr ""
-"Esta é a altura mais alta imprimível para esta extrusora, usada para tampar "
-"a altura variável da camada e suportar a altura da camada. A altura "
-"recomendada máxima da camada é 75% o da largura da extrusão para conseguir a "
-"adesão razoável entre camadas. Se definido como 0, a altura da camada é "
-"limitada a 75% o do diâmetro da ponteira."
+"Esta é a altura mais alta imprimível para esta extrusora, usada para tampar a "
+"altura variável da camada e suportar a altura da camada. A altura recomendada "
+"máxima da camada é 75% o da largura da extrusão para conseguir a adesão "
+"razoável entre camadas. Se definido como 0, a altura da camada é limitada a "
+"75% o do diâmetro da ponteira."
 
-#: src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1345
 msgid "Max print speed"
 msgstr "Velocidade máxima de impressão"
 
-#: src/libslic3r/PrintConfig.cpp:1238
+#: src/libslic3r/PrintConfig.cpp:1346
 msgid ""
 "When setting other speed settings to 0 Slic3r will autocalculate the optimal "
 "speed in order to keep constant extruder pressure. This experimental setting "
@@ -8557,116 +9958,114 @@ msgstr ""
 "extrusora. Esta config. experimental é usada para definir a velocidade de "
 "impressão mais alta que você deseja permitir."
 
-#: src/libslic3r/PrintConfig.cpp:1248
+#: src/libslic3r/PrintConfig.cpp:1356
 msgid ""
 "This experimental setting is used to set the maximum volumetric speed your "
 "extruder supports."
 msgstr ""
-"Esta config. experimental é usada para definir a velocidade máxima "
-"volumétrica que sua extrusora suporta."
+"Esta config. experimental é usada para definir a velocidade máxima volumétrica "
+"que sua extrusora suporta."
 
-#: src/libslic3r/PrintConfig.cpp:1257
+#: src/libslic3r/PrintConfig.cpp:1365
 msgid "Max volumetric slope positive"
 msgstr "Inclinação volumétrica máx positiva"
 
-#: src/libslic3r/PrintConfig.cpp:1258 src/libslic3r/PrintConfig.cpp:1269
+#: src/libslic3r/PrintConfig.cpp:1366 src/libslic3r/PrintConfig.cpp:1377
 msgid ""
 "This experimental setting is used to limit the speed of change in extrusion "
-"rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
-"of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/"
-"s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."
+"rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate of "
+"1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
+"to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."
 msgstr ""
-"Esta config. experimental é usada para limitar a velocidade de mudança na "
-"taxa de extrusão. Um valor de 1,8 mm ³/s ² assegura que uma alteração da "
-"taxa de extrusão de 1,8 mm ³/s (largura de extrusão de 0,45 mm, altura de "
-"extrusão de 0,2 mm, avanço de 20 mm/s) para 5,4 mm ³/s (avanço 60 mm/s) "
-"levará pelo menos 2 segundos."
+"Esta config. experimental é usada para limitar a velocidade de mudança na taxa "
+"de extrusão. Um valor de 1,8 mm ³/s ² assegura que uma alteração da taxa de "
+"extrusão de 1,8 mm ³/s (largura de extrusão de 0,45 mm, altura de extrusão de "
+"0,2 mm, avanço de 20 mm/s) para 5,4 mm ³/s (avanço 60 mm/s) levará pelo menos "
+"2 segundos."
 
-#: src/libslic3r/PrintConfig.cpp:1262 src/libslic3r/PrintConfig.cpp:1273
+#: src/libslic3r/PrintConfig.cpp:1370 src/libslic3r/PrintConfig.cpp:1381
 msgid "mm³/s²"
 msgstr "mm ³/s ²"
 
-#: src/libslic3r/PrintConfig.cpp:1268
+#: src/libslic3r/PrintConfig.cpp:1376
 msgid "Max volumetric slope negative"
 msgstr "Inclinação volumétrica máx negativa"
 
-#: src/libslic3r/PrintConfig.cpp:1280 src/libslic3r/PrintConfig.cpp:1289
+#: src/libslic3r/PrintConfig.cpp:1388 src/libslic3r/PrintConfig.cpp:1397
 msgid "Min"
 msgstr "Min"
 
-#: src/libslic3r/PrintConfig.cpp:1281
+#: src/libslic3r/PrintConfig.cpp:1389
 msgid "This setting represents the minimum PWM your fan needs to work."
 msgstr ""
-"Esta config. representa o PWM mínimo que seu ventoinha precisa para "
-"trabalhar."
+"Esta config. representa o PWM mínimo que seu ventoinha precisa para trabalhar."
 
-#: src/libslic3r/PrintConfig.cpp:1290
+#: src/libslic3r/PrintConfig.cpp:1398
 msgid ""
 "This is the lowest printable layer height for this extruder and limits the "
 "resolution for variable layer height. Typical values are between 0.05 mm and "
 "0.1 mm."
 msgstr ""
-"Esta é a altura mais baixa imprimível para esta extrusora e limita a "
-"definição para a altura variável da camada. Os valores típicos são entre 0, "
-"5 mm e 0,1 mm."
+"Esta é a altura mais baixa imprimível para esta extrusora e limita a definição "
+"para a altura variável da camada. Os valores típicos são entre 0, 5 mm e 0,1 "
+"mm."
 
-#: src/libslic3r/PrintConfig.cpp:1298
+#: src/libslic3r/PrintConfig.cpp:1406
 msgid "Min print speed"
 msgstr "Velocidade mínima de impressão"
 
-#: src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1407
 msgid "Slic3r will not scale speed down below this speed."
 msgstr "Slic3r não vai escalar a velocidade abaixo desta velocidade."
 
-#: src/libslic3r/PrintConfig.cpp:1306
+#: src/libslic3r/PrintConfig.cpp:1414
 msgid "Minimal filament extrusion length"
 msgstr "Comprimento mínimo da extrusão do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:1307
+#: src/libslic3r/PrintConfig.cpp:1415
 msgid ""
 "Generate no less than the number of skirt loops required to consume the "
-"specified amount of filament on the bottom layer. For multi-extruder "
-"machines, this minimum applies to each extruder."
+"specified amount of filament on the bottom layer. For multi-extruder machines, "
+"this minimum applies to each extruder."
 msgstr ""
-"Gerar não menos do que o número de voltas de saia necessários para consumir "
-"a quantidade especificada de filamento na camada inferior. Para máquinas "
+"Gerar não menos do que o número de voltas de saia necessários para consumir a "
+"quantidade especificada de filamento na camada inferior. Para máquinas "
 "multiextrusoras, este mínimo aplica-se a cada extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:1316
+#: src/libslic3r/PrintConfig.cpp:1424
 msgid "Configuration notes"
-msgstr "Notas de config."
+msgstr "Notas de config"
 
-#: src/libslic3r/PrintConfig.cpp:1317
+#: src/libslic3r/PrintConfig.cpp:1425
 msgid ""
 "You can put here your personal notes. This text will be added to the G-code "
 "header comments."
 msgstr ""
-"Você pode colocar aqui suas anotações pessoais. Este texto será adicionado "
-"aos comentários do cabeçalho do G-code."
+"Você pode colocar aqui suas anotações pessoais. Este texto será adicionado aos "
+"comentários do cabeçalho do G-code."
 
-#: src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1435
 msgid ""
 "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"
-msgstr ""
-"Este é o diâmetro da ponteira da extrusora (por exemplo: 0.5, 0.35 etc.)"
+msgstr "Este é o diâmetro da ponteira da extrusora (por exemplo: 0.5, 0.35 etc.)"
 
-#: src/libslic3r/PrintConfig.cpp:1332
+#: src/libslic3r/PrintConfig.cpp:1440
 msgid "Host Type"
 msgstr "Tipo de host"
 
-#: src/libslic3r/PrintConfig.cpp:1333
+#: src/libslic3r/PrintConfig.cpp:1441
 msgid ""
-"Slic3r can upload G-code files to a printer host. This field must contain "
-"the kind of the host."
+"Slic3r can upload G-code files to a printer host. This field must contain the "
+"kind of the host."
 msgstr ""
-"Slic3r pode carregar arquivos de G-code para um host de impressora. Este "
-"campo deve conter o tipo do host."
+"Slic3r pode carregar arquivos de G-code para um host de impressora. Este campo "
+"deve conter o tipo do host."
 
-#: src/libslic3r/PrintConfig.cpp:1348
+#: src/libslic3r/PrintConfig.cpp:1456
 msgid "Only retract when crossing perimeters"
 msgstr "Apenas retrair quando cruzar perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:1349
+#: src/libslic3r/PrintConfig.cpp:1457
 msgid ""
 "Disables retraction when the travel path does not exceed the upper layer's "
 "perimeters (and thus any ooze will be probably invisible)."
@@ -8675,7 +10074,7 @@ msgstr ""
 "camada superior (e, portanto, qualquer escorrimento será provavelmente "
 "invisível)."
 
-#: src/libslic3r/PrintConfig.cpp:1356
+#: src/libslic3r/PrintConfig.cpp:1464
 msgid ""
 "This option will drop the temperature of the inactive extruders to prevent "
 "oozing. It will enable a tall skirt automatically and move extruders outside "
@@ -8685,96 +10084,94 @@ msgstr ""
 "escorrimento. Ele vai permitir uma saia alta automaticamente e mover "
 "extrusoras fora de tal saia quando a mudança de temperatura."
 
-#: src/libslic3r/PrintConfig.cpp:1363
+#: src/libslic3r/PrintConfig.cpp:1471
 msgid "Output filename format"
 msgstr "Formato de nome de arquivo de saída"
 
-#: src/libslic3r/PrintConfig.cpp:1364
+#: src/libslic3r/PrintConfig.cpp:1472
 msgid ""
 "You can use all configuration options as variables inside this template. For "
 "example: [layer_height], [fill_density] etc. You can also use [timestamp], "
 "[year], [month], [day], [hour], [minute], [second], [version], "
 "[input_filename], [input_filename_base]."
 msgstr ""
-"Você pode usar todas as opções de config. como variáveis dentro deste "
-"modelo. Por exemplo: [camada_altura], [densidade_preenchimento] etc. Você "
-"também pode usar [tempo], [ano], [mês], [dia], [hora], [minuto], [segundo], "
-"[versão], [nome_entrada], [nome_entrada_base]."
+"Você pode usar todas as opções de config. como variáveis dentro deste modelo. "
+"Por exemplo: [camada_altura], [densidade_preenchimento] etc. Você também pode "
+"usar [tempo], [ano], [mês], [dia], [hora], [minuto], [segundo], [versão], "
+"[nome_entrada], [nome_entrada_base]."
 
-#: src/libslic3r/PrintConfig.cpp:1373
+#: src/libslic3r/PrintConfig.cpp:1481
 msgid "Detect bridging perimeters"
 msgstr "Detectar perímetros de ponte"
 
-#: src/libslic3r/PrintConfig.cpp:1375
+#: src/libslic3r/PrintConfig.cpp:1483
 msgid ""
 "Experimental option to adjust flow for overhangs (bridge flow will be used), "
 "to apply bridge speed to them and enable fan."
 msgstr ""
-"Opção experimental para ajustar o fluxo para angulações (o fluxo da ponte "
-"será usado), para aplicar a velocidade da ponte a eles e para habilitar a "
-"ventoinha."
+"Opção experimental para ajustar o fluxo para angulações (o fluxo da ponte será "
+"usado), para aplicar a velocidade da ponte a eles e para habilitar a ventoinha."
 
-#: src/libslic3r/PrintConfig.cpp:1381
+#: src/libslic3r/PrintConfig.cpp:1489
 msgid "Filament parking position"
 msgstr "Posição de estacionamento do filamento"
 
-#: src/libslic3r/PrintConfig.cpp:1382
+#: src/libslic3r/PrintConfig.cpp:1490
 msgid ""
 "Distance of the extruder tip from the position where the filament is parked "
 "when unloaded. This should match the value in printer firmware."
 msgstr ""
 "Distância da ponta da extrusora da posição onde o filamento está estacionado "
-"quando descarregado. Isso deve corresponder ao valor no firmware da "
-"impressora."
+"quando descarregado. Isso deve corresponder ao valor no firmware da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1390
+#: src/libslic3r/PrintConfig.cpp:1498
 msgid "Extra loading distance"
 msgstr "Distância de carregamento extra"
 
-#: src/libslic3r/PrintConfig.cpp:1391
+#: src/libslic3r/PrintConfig.cpp:1499
 msgid ""
 "When set to zero, the distance the filament is moved from parking position "
 "during load is exactly the same as it was moved back during unload. When "
-"positive, it is loaded further,  if negative, the loading move is shorter "
-"than unloading."
+"positive, it is loaded further,  if negative, the loading move is shorter than "
+"unloading."
 msgstr ""
 "Quando ajustado a zero, a distância que o filamento é movida da posição do "
 "estacionamento durante a carga é exatamente a mesma que foi movida para trás "
 "durante o descarregamento. Quando positivo, ele é carregado ainda mais, se "
 "negativo, o movimento de carga é menor do que o descarregamento."
 
-#: src/libslic3r/PrintConfig.cpp:1399 src/libslic3r/PrintConfig.cpp:1417
-#: src/libslic3r/PrintConfig.cpp:1430 src/libslic3r/PrintConfig.cpp:1440
+#: src/libslic3r/PrintConfig.cpp:1507 src/libslic3r/PrintConfig.cpp:1525
+#: src/libslic3r/PrintConfig.cpp:1538 src/libslic3r/PrintConfig.cpp:1548
 msgid "Perimeters"
 msgstr "Perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:1400
+#: src/libslic3r/PrintConfig.cpp:1508
 msgid ""
 "This is the acceleration your printer will use for perimeters. A high value "
 "like 9000 usually gives good results if your hardware is up to the job. Set "
 "zero to disable acceleration control for perimeters."
 msgstr ""
 "Esta é a aceleração que sua impressora usará para perímetros. Um alto valor "
-"como 9000 geralmente dá bons resultados se o seu hardware suporta. Defina "
-"zero para desabilitar o controle de aceleração para perímetros."
+"como 9000 geralmente dá bons resultados se o seu hardware suporta. Defina zero "
+"para desabilitar o controle de aceleração para perímetros."
 
-#: src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1516
 msgid "Perimeter extruder"
 msgstr "Extrusora de perímetro"
 
-#: src/libslic3r/PrintConfig.cpp:1410
+#: src/libslic3r/PrintConfig.cpp:1518
 msgid ""
 "The extruder to use when printing perimeters and brim. First extruder is 1."
 msgstr ""
 "A extrusora para usar ao imprimir perímetros e aba. A primeira extrusora é 1."
 
-#: src/libslic3r/PrintConfig.cpp:1419
+#: src/libslic3r/PrintConfig.cpp:1527
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for perimeters. "
-"You may want to use thinner extrudates to get more accurate surfaces. If "
-"left zero, default extrusion width will be used if set, otherwise 1.125 x "
-"nozzle diameter will be used. If expressed as percentage (for example 200%) "
-"it will be computed over layer height."
+"You may want to use thinner extrudates to get more accurate surfaces. If left "
+"zero, default extrusion width will be used if set, otherwise 1.125 x nozzle "
+"diameter will be used. If expressed as percentage (for example 200%) it will "
+"be computed over layer height."
 msgstr ""
 "Defina isso como um valor diferente de zero para definir uma largura de "
 "extrusão manual para perímetros. Você pode querer usar extrusões mais finos "
@@ -8783,124 +10180,123 @@ msgstr ""
 "ponteira será usado. Se expresso em porcentagem(por exemplo, 200%) Ele será "
 "calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:1432
+#: src/libslic3r/PrintConfig.cpp:1540
 msgid ""
 "Speed for perimeters (contours, aka vertical shells). Set to zero for auto."
 msgstr ""
-"Velocidade para perímetros (contornos, também chamadas de perímetros "
-"externos verticais). Defina como zero para auto."
+"Velocidade para perímetros (contornos, também chamadas de perímetros externos "
+"verticais). Defina como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1442
+#: src/libslic3r/PrintConfig.cpp:1550
 msgid ""
 "This option sets the number of perimeters to generate for each layer. Note "
 "that Slic3r may increase this number automatically when it detects sloping "
 "surfaces which benefit from a higher number of perimeters if the Extra "
 "Perimeters option is enabled."
 msgstr ""
-"Esta opção define o número de perímetros a gerar para cada camada. Observe "
-"que o Slic3r pode aumentar esse número automaticamente quando detecta "
-"superfícies inclinadas que se beneficiam de um número maior de perímetros se "
-"a opção extra perímetros estiver habilitada."
+"Esta opção define o número de perímetros a gerar para cada camada. Observe que "
+"o Slic3r pode aumentar esse número automaticamente quando detecta superfícies "
+"inclinadas que se beneficiam de um número maior de perímetros se a opção extra "
+"perímetros estiver habilitada."
 
-#: src/libslic3r/PrintConfig.cpp:1446
+#: src/libslic3r/PrintConfig.cpp:1554
 msgid "(minimum)"
 msgstr "(mínimo)"
 
-#: src/libslic3r/PrintConfig.cpp:1454
+#: src/libslic3r/PrintConfig.cpp:1562
 msgid ""
 "If you want to process the output G-code through custom scripts, just list "
-"their absolute paths here. Separate multiple scripts with a semicolon. "
-"Scripts will be passed the absolute path to the G-code file as the first "
-"argument, and they can access the Slic3r config settings by reading "
-"environment variables."
+"their absolute paths here. Separate multiple scripts with a semicolon. Scripts "
+"will be passed the absolute path to the G-code file as the first argument, and "
+"they can access the Slic3r config settings by reading environment variables."
 msgstr ""
-"Se você quiser processar o G-code de saída por meio de scripts "
-"personalizados, basta listar seus caminhos absolutos aqui. Separe vários "
-"scripts com um ponto-e-vírgula. Os scripts serão passados o caminho absoluto "
-"para o arquivo de G-code como o primeiro argumento, e eles poderão acessar "
-"as config. de config. do Slic3r lendo variáveis de ambiente."
+"Se você quiser processar o G-code de saída por meio de scripts personalizados, "
+"basta listar seus caminhos absolutos aqui. Separe vários scripts com um ponto-"
+"e-vírgula. Os scripts serão passados o caminho absoluto para o arquivo de G-"
+"code como o primeiro argumento, e eles poderão acessar as config. de config. "
+"do Slic3r lendo variáveis de ambiente."
 
-#: src/libslic3r/PrintConfig.cpp:1466
+#: src/libslic3r/PrintConfig.cpp:1574
 msgid "Printer type"
 msgstr "Tipo de impressora"
 
-#: src/libslic3r/PrintConfig.cpp:1467
+#: src/libslic3r/PrintConfig.cpp:1575
 msgid "Type of the printer."
 msgstr "Tipo da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1472
+#: src/libslic3r/PrintConfig.cpp:1580
 msgid "Printer notes"
 msgstr "Notas da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:1473
+#: src/libslic3r/PrintConfig.cpp:1581
 msgid "You can put your notes regarding the printer here."
 msgstr "Você pode colocar suas anotações sobre a impressora aqui."
 
-#: src/libslic3r/PrintConfig.cpp:1481
+#: src/libslic3r/PrintConfig.cpp:1589
 msgid "Printer vendor"
 msgstr "Fornecedor da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1590
 msgid "Name of the printer vendor."
 msgstr "Nome do fornecedor da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1487
+#: src/libslic3r/PrintConfig.cpp:1595
 msgid "Printer variant"
 msgstr "Variante da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:1488
+#: src/libslic3r/PrintConfig.cpp:1596
 msgid ""
 "Name of the printer variant. For example, the printer variants may be "
 "differentiated by a nozzle diameter."
 msgstr ""
-"Nome da variante da impressora. Por exemplo, as variantes da impressora "
-"podem ser diferenciadas por um diâmetro da ponteira."
+"Nome da variante da impressora. Por exemplo, as variantes da impressora podem "
+"ser diferenciadas por um diâmetro da ponteira."
 
-#: src/libslic3r/PrintConfig.cpp:1501
+#: src/libslic3r/PrintConfig.cpp:1609
 msgid "Raft layers"
 msgstr "Camadas da estrado"
 
-#: src/libslic3r/PrintConfig.cpp:1503
+#: src/libslic3r/PrintConfig.cpp:1611
 msgid ""
-"The object will be raised by this number of layers, and support material "
-"will be generated under it."
+"The object will be raised by this number of layers, and support material will "
+"be generated under it."
 msgstr ""
-"O objeto será elevado por este número de camadas, e o material de suporte "
-"será gerado em baixo dele."
+"O objeto será elevado por este número de camadas, e o material de suporte será "
+"gerado em baixo dele."
 
-#: src/libslic3r/PrintConfig.cpp:1511
+#: src/libslic3r/PrintConfig.cpp:1619
 msgid "Resolution"
 msgstr "Resolução"
 
-#: src/libslic3r/PrintConfig.cpp:1512
+#: src/libslic3r/PrintConfig.cpp:1620
 msgid ""
-"Minimum detail resolution, used to simplify the input file for speeding up "
-"the slicing job and reducing memory usage. High-resolution models often "
-"carry more detail than printers can render. Set to zero to disable any "
-"simplification and use full resolution from input."
+"Minimum detail resolution, used to simplify the input file for speeding up the "
+"slicing job and reducing memory usage. High-resolution models often carry more "
+"detail than printers can render. Set to zero to disable any simplification and "
+"use full resolution from input."
 msgstr ""
 "Resolução de detalhes mínimos, usada para simplificar o arquivo de entrada "
-"para acelerar o trabalho de fatiamento e reduzir o uso de memória. Modelos "
-"de alta resolução geralmente carregam mais detalhes do que as impressoras "
-"podem renderizar. Defina como zero para desabilitar qualquer simplificação e "
-"usar a resolução completa da entrada."
+"para acelerar o trabalho de fatiamento e reduzir o uso de memória. Modelos de "
+"alta resolução geralmente carregam mais detalhes do que as impressoras podem "
+"renderizar. Defina como zero para desabilitar qualquer simplificação e usar a "
+"resolução completa da entrada."
 
-#: src/libslic3r/PrintConfig.cpp:1522
+#: src/libslic3r/PrintConfig.cpp:1630
 msgid "Minimum travel after retraction"
 msgstr "Retração em viagens acima de"
 
-#: src/libslic3r/PrintConfig.cpp:1523
+#: src/libslic3r/PrintConfig.cpp:1631
 msgid ""
 "Retraction is not triggered when travel moves are shorter than this length."
 msgstr ""
 "A retração não é acionada quando os movimentos de viagem são mais curtos que "
 "esse comprimento."
 
-#: src/libslic3r/PrintConfig.cpp:1529
+#: src/libslic3r/PrintConfig.cpp:1637
 msgid "Retract amount before wipe"
 msgstr "Quantidade de retração antes da limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:1530
+#: src/libslic3r/PrintConfig.cpp:1638
 msgid ""
 "With bowden extruders, it may be wise to do some amount of quick retract "
 "before doing the wipe movement."
@@ -8908,105 +10304,104 @@ msgstr ""
 "Com extrusoras Bowden, pode ser sábio fazer alguma quantidade de retração "
 "rápida antes de fazer o movimento da limpeza."
 
-#: src/libslic3r/PrintConfig.cpp:1537
+#: src/libslic3r/PrintConfig.cpp:1645
 msgid "Retract on layer change"
 msgstr "Retrair na mudança de camada"
 
-#: src/libslic3r/PrintConfig.cpp:1538
+#: src/libslic3r/PrintConfig.cpp:1646
 msgid "This flag enforces a retraction whenever a Z move is done."
 msgstr "Este sinalizador impõe uma retração sempre que um movimento Z é feito."
 
-#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1551
+#: src/libslic3r/PrintConfig.cpp:1651 src/libslic3r/PrintConfig.cpp:1659
 msgid "Length"
 msgstr "Comprimento"
 
-#: src/libslic3r/PrintConfig.cpp:1544
+#: src/libslic3r/PrintConfig.cpp:1652
 msgid "Retraction Length"
 msgstr "Comprimento de retração"
 
-#: src/libslic3r/PrintConfig.cpp:1545
+#: src/libslic3r/PrintConfig.cpp:1653
 msgid ""
-"When retraction is triggered, filament is pulled back by the specified "
-"amount (the length is measured on raw filament, before it enters the "
-"extruder)."
+"When retraction is triggered, filament is pulled back by the specified amount "
+"(the length is measured on raw filament, before it enters the extruder)."
 msgstr ""
 "Quando a retração é acionada, o filamento é puxado para trás pela quantidade "
 "especificada (o comprimento é medido em filamento cru, antes de entrar na "
 "extrusora)."
 
-#: src/libslic3r/PrintConfig.cpp:1547 src/libslic3r/PrintConfig.cpp:1556
+#: src/libslic3r/PrintConfig.cpp:1655 src/libslic3r/PrintConfig.cpp:1664
 msgid "mm (zero to disable)"
 msgstr "mm (zero para desativar)"
 
-#: src/libslic3r/PrintConfig.cpp:1552
+#: src/libslic3r/PrintConfig.cpp:1660
 msgid "Retraction Length (Toolchange)"
 msgstr "Comprimento de retração (mudança de ferramenta)"
 
-#: src/libslic3r/PrintConfig.cpp:1553
+#: src/libslic3r/PrintConfig.cpp:1661
 msgid ""
-"When retraction is triggered before changing tool, filament is pulled back "
-"by the specified amount (the length is measured on raw filament, before it "
-"enters the extruder)."
+"When retraction is triggered before changing tool, filament is pulled back by "
+"the specified amount (the length is measured on raw filament, before it enters "
+"the extruder)."
 msgstr ""
 "Quando a retração é acionada antes de mudar de ferramenta, o filamento é "
 "puxado para trás pela quantidade especificada (o comprimento é medido em "
 "filamento cru, antes de entrar na extrusora)."
 
-#: src/libslic3r/PrintConfig.cpp:1561
+#: src/libslic3r/PrintConfig.cpp:1669
 msgid "Lift Z"
 msgstr "Elevar Z"
 
-#: src/libslic3r/PrintConfig.cpp:1562
+#: src/libslic3r/PrintConfig.cpp:1670
 msgid ""
 "If you set this to a positive value, Z is quickly raised every time a "
 "retraction is triggered. When using multiple extruders, only the setting for "
 "the first extruder will be considered."
 msgstr ""
 "Se você definir isso como um valor positivo, Z é rapidamente elevado sempre "
-"que uma retração é acionada. Ao usar várias extrusoras, somente a config. "
-"para a primeira extrusora será considerada."
+"que uma retração é acionada. Ao usar várias extrusoras, somente a config. para "
+"a primeira extrusora será considerada."
 
-#: src/libslic3r/PrintConfig.cpp:1569
+#: src/libslic3r/PrintConfig.cpp:1677
 msgid "Above Z"
 msgstr "Acima de Z"
 
-#: src/libslic3r/PrintConfig.cpp:1570
+#: src/libslic3r/PrintConfig.cpp:1678
 msgid "Only lift Z above"
 msgstr "Apenas elevar Z acima"
 
-#: src/libslic3r/PrintConfig.cpp:1571
+#: src/libslic3r/PrintConfig.cpp:1679
 msgid ""
 "If you set this to a positive value, Z lift will only take place above the "
-"specified absolute Z. You can tune this setting for skipping lift on the "
-"first layers."
+"specified absolute Z. You can tune this setting for skipping lift on the first "
+"layers."
 msgstr ""
-"Se você definir isso como um valor positivo, o levante do Z só ocorrerá "
-"acima do Z absoluto especificado. Você pode ajustar essa config. para pular "
-"o elevador nas primeiras camadas."
+"Se você definir isso como um valor positivo, o levante do Z só ocorrerá acima "
+"do Z absoluto especificado. Você pode ajustar essa config. para pular o "
+"elevador nas primeiras camadas."
 
-#: src/libslic3r/PrintConfig.cpp:1578
+#: src/libslic3r/PrintConfig.cpp:1686
 msgid "Below Z"
 msgstr "Abaixo de Z"
 
-#: src/libslic3r/PrintConfig.cpp:1579
+#: src/libslic3r/PrintConfig.cpp:1687
 msgid "Only lift Z below"
 msgstr "Apenas elevar Z abaixo"
 
-#: src/libslic3r/PrintConfig.cpp:1580
+#: src/libslic3r/PrintConfig.cpp:1688
 msgid ""
 "If you set this to a positive value, Z lift will only take place below the "
-"specified absolute Z. You can tune this setting for limiting lift to the "
-"first layers."
+"specified absolute Z. You can tune this setting for limiting lift to the first "
+"layers."
 msgstr ""
-"Se você definir isso como um valor positivo, o levante do Z só ocorrerá "
-"abaixo do Z absoluto especificado. Você pode ajustar essa config. para "
-"limitar a elevação às primeiras camadas."
+"Se você definir isso como um valor positivo, o levante do Z só ocorrerá abaixo "
+"do Z absoluto especificado. Você pode ajustar essa config. para limitar a "
+"elevação às primeiras camadas."
 
-#: src/libslic3r/PrintConfig.cpp:1588 src/libslic3r/PrintConfig.cpp:1596
+#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1704
 msgid "Extra length on restart"
 msgstr "Comprimento extra no reinício"
 
-#: src/libslic3r/PrintConfig.cpp:1589
+#: src/libslic3r/PrintConfig.cpp:1697
 msgid ""
 "When the retraction is compensated after the travel move, the extruder will "
 "push this additional amount of filament. This setting is rarely needed."
@@ -9015,140 +10410,156 @@ msgstr ""
 "empurrar esta quantidade adicional de filamento. Essa config. raramente é "
 "necessária."
 
-#: src/libslic3r/PrintConfig.cpp:1597
+#: src/libslic3r/PrintConfig.cpp:1705
 msgid ""
-"When the retraction is compensated after changing tool, the extruder will "
-"push this additional amount of filament."
+"When the retraction is compensated after changing tool, the extruder will push "
+"this additional amount of filament."
 msgstr ""
 "Quando a retração é compensada após a ferramenta de mudança, a extrusora "
 "empurrará esta quantidade adicional de filamento."
 
-#: src/libslic3r/PrintConfig.cpp:1604 src/libslic3r/PrintConfig.cpp:1605
+#: src/libslic3r/PrintConfig.cpp:1712 src/libslic3r/PrintConfig.cpp:1713
 msgid "Retraction Speed"
 msgstr "Velocidade da retração"
 
-#: src/libslic3r/PrintConfig.cpp:1606
+#: src/libslic3r/PrintConfig.cpp:1714
 msgid "The speed for retractions (it only applies to the extruder motor)."
 msgstr "A velocidade para retrações (aplica-se somente ao motor da extrusora)."
 
-#: src/libslic3r/PrintConfig.cpp:1612 src/libslic3r/PrintConfig.cpp:1613
+#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1721
 msgid "Deretraction Speed"
 msgstr "Velocidade de retorno de retração"
 
-#: src/libslic3r/PrintConfig.cpp:1614
+#: src/libslic3r/PrintConfig.cpp:1722
 msgid ""
 "The speed for loading of a filament into extruder after retraction (it only "
-"applies to the extruder motor). If left to zero, the retraction speed is "
-"used."
+"applies to the extruder motor). If left to zero, the retraction speed is used."
 msgstr ""
-"A velocidade para o carregamento de um filamento na extrusora após a "
-"retração (aplica-se somente ao motor da extrusora). Se deixada como zero, a "
-"velocidade de retração é usada."
+"A velocidade para o carregamento de um filamento na extrusora após a retração "
+"(aplica-se somente ao motor da extrusora). Se deixada como zero, a velocidade "
+"de retração é usada."
 
-#: src/libslic3r/PrintConfig.cpp:1621
+#: src/libslic3r/PrintConfig.cpp:1729
 msgid "Seam position"
 msgstr "Posição da costura"
 
-#: src/libslic3r/PrintConfig.cpp:1623
+#: src/libslic3r/PrintConfig.cpp:1731
 msgid "Position of perimeters starting points."
 msgstr "Posição inicial dos pontos do perímetro."
 
-#: src/libslic3r/PrintConfig.cpp:1629
+#: src/libslic3r/PrintConfig.cpp:1737
 msgid "Random"
 msgstr "Aleatório"
 
-#: src/libslic3r/PrintConfig.cpp:1630
+#: src/libslic3r/PrintConfig.cpp:1738
 msgid "Nearest"
 msgstr "Próximo"
 
-#: src/libslic3r/PrintConfig.cpp:1631
+#: src/libslic3r/PrintConfig.cpp:1739
 msgid "Aligned"
 msgstr "Alinhado(a)"
 
-#: src/libslic3r/PrintConfig.cpp:1639
+#: src/libslic3r/PrintConfig.cpp:1747
 msgid "Direction"
 msgstr "Direção"
 
-#: src/libslic3r/PrintConfig.cpp:1641
+#: src/libslic3r/PrintConfig.cpp:1749
 msgid "Preferred direction of the seam"
 msgstr "Direção preferida da costura"
 
-#: src/libslic3r/PrintConfig.cpp:1642
+#: src/libslic3r/PrintConfig.cpp:1750
 msgid "Seam preferred direction"
 msgstr "Direção de preferência da costura"
 
-#: src/libslic3r/PrintConfig.cpp:1649
+#: src/libslic3r/PrintConfig.cpp:1757
 msgid "Jitter"
 msgstr "Jitter"
 
-#: src/libslic3r/PrintConfig.cpp:1651
+#: src/libslic3r/PrintConfig.cpp:1759
 msgid "Seam preferred direction jitter"
 msgstr "Direção da costura preferencial para Jitter"
 
-#: src/libslic3r/PrintConfig.cpp:1652
+#: src/libslic3r/PrintConfig.cpp:1760
 msgid "Preferred direction of the seam - jitter"
 msgstr "Direção preferida da costura-jitter"
 
-#: src/libslic3r/PrintConfig.cpp:1662
+#: src/libslic3r/PrintConfig.cpp:1769
+msgid "Serial port"
+msgstr "Porte Serial"
+
+#: src/libslic3r/PrintConfig.cpp:1770
 msgid "USB/serial port for printer connection."
 msgstr "USB/porta serial para conexão da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1669
+#: src/libslic3r/PrintConfig.cpp:1777
 msgid "Serial port speed"
 msgstr "Velocidade da porta serial"
 
-#: src/libslic3r/PrintConfig.cpp:1670
+#: src/libslic3r/PrintConfig.cpp:1778
 msgid "Speed (baud) of USB/serial port for printer connection."
 msgstr "Velocidade (baud) do USB/porta serial para conexão da impressora."
 
-#: src/libslic3r/PrintConfig.cpp:1679
+#: src/libslic3r/PrintConfig.cpp:1787
 msgid "Distance from object"
 msgstr "Distância do objeto"
 
-#: src/libslic3r/PrintConfig.cpp:1680
+#: src/libslic3r/PrintConfig.cpp:1788
 msgid ""
-"Distance between skirt and object(s). Set this to zero to attach the skirt "
-"to the object(s) and get a brim for better adhesion."
+"Distance between skirt and object(s). Set this to zero to attach the skirt to "
+"the object(s) and get a brim for better adhesion."
 msgstr ""
 "Distância entre a saia e o objeto (s). Defina isso como zero para anexar a "
 "saia para o objeto (s) e obter uma aba para uma melhor aderência."
 
-#: src/libslic3r/PrintConfig.cpp:1687
+#: src/libslic3r/PrintConfig.cpp:1795
 msgid "Skirt height"
 msgstr "Altura da saia"
 
-#: src/libslic3r/PrintConfig.cpp:1688
+#: src/libslic3r/PrintConfig.cpp:1796
 msgid ""
-"Height of skirt expressed in layers. Set this to a tall value to use skirt "
-"as a shield against drafts."
+"Height of skirt expressed in layers. Set this to a tall value to use skirt as "
+"a shield against drafts."
 msgstr ""
-"Altura da saia expressa em camadas. Defina isso como um valor alto para usar "
-"a saia como um escudo contra rascunhos."
+"Altura da saia expressa em camadas. Defina isso como um valor alto para usar a "
+"saia como um escudo contra rascunhos."
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1803
+msgid "Draft shield"
+msgstr "Escudo de proteção"
+
+#: src/libslic3r/PrintConfig.cpp:1804
+msgid ""
+"If enabled, the skirt will be as tall as a highest printed object. This is "
+"useful to protect an ABS or ASA print from warping and detaching from print "
+"bed due to wind draft."
+msgstr ""
+"Se habilitado, a saia será tão alta quanto um objeto impresso mais alto. Isso "
+"é útil para proteger uma impressão ABS ou ASA de empenamento e destacamento da "
+"base de impressão devido à corrente de vento."
+
+#: src/libslic3r/PrintConfig.cpp:1810
 msgid "Loops (minimum)"
 msgstr "Voltas (mínimo)"
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/libslic3r/PrintConfig.cpp:1811
 msgid "Skirt Loops"
 msgstr "Voltas de saia"
 
-#: src/libslic3r/PrintConfig.cpp:1697
+#: src/libslic3r/PrintConfig.cpp:1812
 msgid ""
-"Number of loops for the skirt. If the Minimum Extrusion Length option is "
-"set, the number of loops might be greater than the one configured here. Set "
-"this to zero to disable skirt completely."
+"Number of loops for the skirt. If the Minimum Extrusion Length option is set, "
+"the number of loops might be greater than the one configured here. Set this to "
+"zero to disable skirt completely."
 msgstr ""
 "Número de voltas para a saia. Se a opção comprimento mínimo de extrusão "
-"estiver definida, o número de voltas pode ser maior do que aquele "
-"configurado aqui. Defina isso como zero para desabilitar a saia "
-"completamente."
+"estiver definida, o número de voltas pode ser maior do que aquele configurado "
+"aqui. Defina isso como zero para desabilitar a saia completamente."
 
-#: src/libslic3r/PrintConfig.cpp:1705
+#: src/libslic3r/PrintConfig.cpp:1820
 msgid "Slow down if layer print time is below"
 msgstr "Diminuir a velocidade quando o tempo de impressão for menor que"
 
-#: src/libslic3r/PrintConfig.cpp:1706
+#: src/libslic3r/PrintConfig.cpp:1821
 msgid ""
 "If layer print time is estimated below this number of seconds, print moves "
 "speed will be scaled down to extend duration to this value."
@@ -9157,11 +10568,11 @@ msgstr ""
 "segundos, a velocidade de impressão será reduzida para estender a duração a "
 "esse valor."
 
-#: src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1830
 msgid "Small perimeters"
 msgstr "Perímetro pequeno"
 
-#: src/libslic3r/PrintConfig.cpp:1717
+#: src/libslic3r/PrintConfig.cpp:1832
 msgid ""
 "This separate setting will affect the speed of perimeters having radius <= "
 "6.5mm (usually holes). If expressed as percentage (for example: 80%) it will "
@@ -9172,11 +10583,11 @@ msgstr ""
 "será calculado sobre a velocidade de perímetros configurados acima. Defina "
 "como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1727
+#: src/libslic3r/PrintConfig.cpp:1842
 msgid "Solid infill threshold area"
 msgstr "Área de limiar de preenchimento sólido"
 
-#: src/libslic3r/PrintConfig.cpp:1729
+#: src/libslic3r/PrintConfig.cpp:1844
 msgid ""
 "Force solid infill for regions having a smaller area than the specified "
 "threshold."
@@ -9184,37 +10595,37 @@ msgstr ""
 "Forçar preenchimento sólido para regiões com uma área menor do que o limite "
 "especificado."
 
-#: src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:1845
 msgid "mm²"
 msgstr "mm²"
 
-#: src/libslic3r/PrintConfig.cpp:1736
+#: src/libslic3r/PrintConfig.cpp:1851
 msgid "Solid infill extruder"
 msgstr "Extrusora de preenchimento sólido"
 
-#: src/libslic3r/PrintConfig.cpp:1738
+#: src/libslic3r/PrintConfig.cpp:1853
 msgid "The extruder to use when printing solid infill."
 msgstr ""
 "A extrusora a ser utilizada quando estiver imprimindo preenchimento sólido."
 
-#: src/libslic3r/PrintConfig.cpp:1744
+#: src/libslic3r/PrintConfig.cpp:1859
 msgid "Solid infill every"
 msgstr "Preenchimento sólido a cada"
 
-#: src/libslic3r/PrintConfig.cpp:1746
+#: src/libslic3r/PrintConfig.cpp:1861
 msgid ""
-"This feature allows to force a solid layer every given number of layers. "
-"Zero to disable. You can set this to any value (for example 9999); Slic3r "
-"will automatically choose the maximum possible number of layers to combine "
+"This feature allows to force a solid layer every given number of layers. Zero "
+"to disable. You can set this to any value (for example 9999); Slic3r will "
+"automatically choose the maximum possible number of layers to combine "
 "according to nozzle diameter and layer height."
 msgstr ""
 "Este recurso permite forçar uma camada sólida a cada número determinado de "
 "camadas. Zero para desabilitar. Você pode definir isso para qualquer valor "
-"(por exemplo 9999); Slic3r escolherá automaticamente o número máximo "
-"possível de camadas para combinar de acordo com o diâmetro da ponteira e a "
-"altura da camada."
+"(por exemplo 9999); Slic3r escolherá automaticamente o número máximo possível "
+"de camadas para combinar de acordo com o diâmetro da ponteira e a altura da "
+"camada."
 
-#: src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:1873
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for infill for "
 "solid surfaces. If left zero, default extrusion width will be used if set, "
@@ -9227,80 +10638,77 @@ msgstr ""
 "1,125 x diâmetro da ponteira será usado. Se expresso em porcentagem(por "
 "exemplo, 90%) Ele será calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:1769
+#: src/libslic3r/PrintConfig.cpp:1884
 msgid ""
-"Speed for printing solid regions (top/bottom/internal horizontal shells). "
-"This can be expressed as a percentage (for example: 80%) over the default "
-"infill speed above. Set to zero for auto."
+"Speed for printing solid regions (top/bottom/internal horizontal shells). This "
+"can be expressed as a percentage (for example: 80%) over the default infill "
+"speed above. Set to zero for auto."
 msgstr ""
 "Velocidade para imprimir regiões sólidas (topo/fundo/perímetros externos "
-"horizontais internas). Isto pode ser expresso em porcentagem(por exemplo: "
-"80%) sobre a velocidade de preenchimento padrão acima. Defina como zero para "
-"auto."
+"horizontais internas). Isto pode ser expresso em porcentagem(por exemplo: 80%) "
+"sobre a velocidade de preenchimento padrão acima. Defina como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1781
+#: src/libslic3r/PrintConfig.cpp:1896
 msgid "Number of solid layers to generate on top and bottom surfaces."
-msgstr ""
-"Número de camadas sólidas a serem geradas nas interfaces do topo e base."
+msgstr "Número de camadas sólidas a serem geradas nas interfaces do topo e base."
 
-#: src/libslic3r/PrintConfig.cpp:1787 src/libslic3r/PrintConfig.cpp:1788
+#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1903
 msgid "Minimum thickness of a top / bottom shell"
 msgstr "Espessura mínima de uma parede superior/inferior"
 
-#: src/libslic3r/PrintConfig.cpp:1794
+#: src/libslic3r/PrintConfig.cpp:1909
 msgid "Spiral vase"
 msgstr "Vaso espiral"
 
-#: src/libslic3r/PrintConfig.cpp:1795
+#: src/libslic3r/PrintConfig.cpp:1910
 msgid ""
 "This feature will raise Z gradually while printing a single-walled object in "
-"order to remove any visible seam. This option requires a single perimeter, "
-"no infill, no top solid layers and no support material. You can still set "
-"any number of bottom solid layers as well as skirt/brim loops. It won't work "
-"when printing more than an object."
+"order to remove any visible seam. This option requires a single perimeter, no "
+"infill, no top solid layers and no support material. You can still set any "
+"number of bottom solid layers as well as skirt/brim loops. It won't work when "
+"printing more than an object."
 msgstr ""
 "Este recurso irá elevar Z gradualmente durante a impressão de um objeto de "
 "parede única, a fim de remover qualquer costura visível. Esta opção exige um "
-"único perímetro, nenhum preenchimento, nenhumas camadas contínuas superiores "
-"e nenhum material de sustentação. Você ainda pode definir qualquer número de "
+"único perímetro, nenhum preenchimento, nenhumas camadas contínuas superiores e "
+"nenhum material de sustentação. Você ainda pode definir qualquer número de "
 "camadas sólidas de fundo, bem como saia/aba voltas. Ele não funcionará ao "
 "imprimir mais de um objeto."
 
-#: src/libslic3r/PrintConfig.cpp:1803
+#: src/libslic3r/PrintConfig.cpp:1918
 msgid "Temperature variation"
 msgstr "Variação de temperatura"
 
-#: src/libslic3r/PrintConfig.cpp:1804
+#: src/libslic3r/PrintConfig.cpp:1919
 msgid ""
-"Temperature difference to be applied when an extruder is not active. Enables "
-"a full-height \"sacrificial\" skirt on which the nozzles are periodically "
-"wiped."
+"Temperature difference to be applied when an extruder is not active. Enables a "
+"full-height \"sacrificial\" skirt on which the nozzles are periodically wiped."
 msgstr ""
 "Diferença de temperatura a ser aplicada quando uma extrusora não está ativa. "
 "Permite uma saia \"sacrificial\" em que as ponteiras são limpadas "
 "periodicamente."
 
-#: src/libslic3r/PrintConfig.cpp:1814
+#: src/libslic3r/PrintConfig.cpp:1929
 msgid ""
 "This start procedure is inserted at the beginning, after bed has reached the "
-"target temperature and extruder just started heating, and before extruder "
-"has finished heating. If PrusaSlicer detects M104 or M190 in your custom "
-"codes, such commands will not be prepended automatically so you're free to "
-"customize the order of heating commands and other custom actions. Note that "
-"you can use placeholder variables for all PrusaSlicer settings, so you can "
-"put a \"M109 S[first_layer_temperature]\" command wherever you want."
+"target temperature and extruder just started heating, and before extruder has "
+"finished heating. If PrusaSlicer detects M104 or M190 in your custom codes, "
+"such commands will not be prepended automatically so you're free to customize "
+"the order of heating commands and other custom actions. Note that you can use "
+"placeholder variables for all PrusaSlicer settings, so you can put a \"M109 "
+"S[first_layer_temperature]\" command wherever you want."
 msgstr ""
 "Este procedimento do começo é introduzido no início, depois que a mesa "
 "alcançou a temperatura alvo e a extrusora apenas começou o aquecimento, e "
-"antes que a extrusora terminasse o aquecimento. Se PrusaSlicer detecta M104 "
-"ou M190 em seus códigos personalizados, esses comandos não serão precedidos "
+"antes que a extrusora terminasse o aquecimento. Se PrusaSlicer detecta M104 ou "
+"M190 em seus códigos personalizados, esses comandos não serão precedidos "
 "automaticamente para que você esteja livre para personalizar a ordem dos "
 "comandos de aquecimento e outras ações personalizadas. Observe que você pode "
-"usar variáveis de espaço reservado para todas as config. de PrusaSlicer, "
-"para que você possa colocar um comando \"M109 S "
-"[temperatura_primeira_camada]\" onde quiser."
+"usar variáveis de espaço reservado para todas as config. de PrusaSlicer, para "
+"que você possa colocar um comando \"M109 S [temperatura_primeira_camada]\" "
+"onde quiser."
 
-#: src/libslic3r/PrintConfig.cpp:1829
+#: src/libslic3r/PrintConfig.cpp:1944
 msgid ""
 "This start procedure is inserted at the beginning, after any printer start "
 "gcode (and after any toolchange to this filament in case of multi-material "
@@ -9315,28 +10723,44 @@ msgstr ""
 "Este procedimento de início é inserido no começo, depois de qualquer "
 "impressora iniciar Gcode (e depois de qualquer troca de ferramenta para este "
 "filamento em caso de impressoras de vários materiais). Isso é usado para "
-"substituir as config. de um filamento específico. Se PrusaSlicer detecta "
-"M104, M109, M140 ou M190 em seus códigos personalizados, esses comandos não "
-"serão precedidos automaticamente para que você esteja livre para "
-"personalizar a ordem dos comandos de aquecimento e outras ações "
-"personalizadas. Observe que você pode usar variáveis de espaço reservado "
-"para todas as config. de PrusaSlicer, para que você possa colocar um comando "
-"\"M109 S [temperatura_primeira_camada]\" onde quiser. Se você tiver várias "
-"extrusoras, o Gcode é processado em ordem de extrusora."
+"substituir as config. de um filamento específico. Se PrusaSlicer detecta M104, "
+"M109, M140 ou M190 em seus códigos personalizados, esses comandos não serão "
+"precedidos automaticamente para que você esteja livre para personalizar a "
+"ordem dos comandos de aquecimento e outras ações personalizadas. Observe que "
+"você pode usar variáveis de espaço reservado para todas as config. de "
+"PrusaSlicer, para que você possa colocar um comando \"M109 S "
+"[temperatura_primeira_camada]\" onde quiser. Se você tiver várias extrusoras, "
+"o Gcode é processado em ordem de extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:1845
+#: src/libslic3r/PrintConfig.cpp:1960
+msgid "Color change G-code"
+msgstr "G-code de troca de ferramenta"
+
+#: src/libslic3r/PrintConfig.cpp:1961
+msgid "This G-code will be used as a code for the color change"
+msgstr "Este G-code será usado como um código para a mudança de cor"
+
+#: src/libslic3r/PrintConfig.cpp:1970
+msgid "This G-code will be used as a code for the pause print"
+msgstr "Este G-code será usado como um código para pausar a impressora"
+
+#: src/libslic3r/PrintConfig.cpp:1979
+msgid "This G-code will be used as a custom code"
+msgstr "Este G-code será usado como um código customizado"
+
+#: src/libslic3r/PrintConfig.cpp:1987
 msgid "Single Extruder Multi Material"
 msgstr "Única extrusora multi material"
 
-#: src/libslic3r/PrintConfig.cpp:1846
+#: src/libslic3r/PrintConfig.cpp:1988
 msgid "The printer multiplexes filaments into a single hot end."
 msgstr "A impressora multiplexes filamentos em uma única extremidade quente."
 
-#: src/libslic3r/PrintConfig.cpp:1851
+#: src/libslic3r/PrintConfig.cpp:1993
 msgid "Prime all printing extruders"
 msgstr "Extrusar todas as extrusoras de impressão"
 
-#: src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:1994
 msgid ""
 "If enabled, all printing extruders will be primed at the front edge of the "
 "print bed at the start of the print."
@@ -9344,62 +10768,60 @@ msgstr ""
 "Se ativada, todas as extrusoras de impressão extrusarão na aba dianteira da "
 "mesa de impressão no início da impressão."
 
-#: src/libslic3r/PrintConfig.cpp:1857
+#: src/libslic3r/PrintConfig.cpp:1999
 msgid "No sparse layers (EXPERIMENTAL)"
 msgstr "Sem camadas esparsas (EXPERIMENTAL)"
 
-#: src/libslic3r/PrintConfig.cpp:1858
+#: src/libslic3r/PrintConfig.cpp:2000
 msgid ""
-"If enabled, the wipe tower will not be printed on layers with no "
-"toolchanges. On layers with a toolchange, extruder will travel downward to "
-"print the wipe tower. User is responsible for ensuring there is no collision "
-"with the print."
+"If enabled, the wipe tower will not be printed on layers with no toolchanges. "
+"On layers with a toolchange, extruder will travel downward to print the wipe "
+"tower. User is responsible for ensuring there is no collision with the print."
 msgstr ""
-"Se ativada, a torre de limpeza não será impressa em camadas sem alterações "
-"de ferramentas. Em camadas com uma troca de ferramentas, o extrusor viajará "
-"para baixo para imprimir a torre de limpeza. O usuário é responsável por "
-"garantir que não haja colisão com a impressão."
+"Se ativada, a torre de limpeza não será impressa em camadas sem alterações de "
+"ferramentas. Em camadas com uma troca de ferramentas, o extrusor viajará para "
+"baixo para imprimir a torre de limpeza. O usuário é responsável por garantir "
+"que não haja colisão com a impressão."
 
-#: src/libslic3r/PrintConfig.cpp:1865
+#: src/libslic3r/PrintConfig.cpp:2007
 msgid "Generate support material"
 msgstr "Gerar material de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:1867
+#: src/libslic3r/PrintConfig.cpp:2009
 msgid "Enable support material generation."
 msgstr "Habilitar geração de material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:2013
 msgid "Auto generated supports"
 msgstr "Gerar suportes automaticamente"
 
-#: src/libslic3r/PrintConfig.cpp:1873
+#: src/libslic3r/PrintConfig.cpp:2015
 msgid ""
 "If checked, supports will be generated automatically based on the overhang "
-"threshold value. If unchecked, supports will be generated inside the "
-"\"Support Enforcer\" volumes only."
+"threshold value. If unchecked, supports will be generated inside the \"Support "
+"Enforcer\" volumes only."
 msgstr ""
 "Se marcada, os suportes serão gerados automaticamente com base no valor do "
 "limite de angulação. Se desmarcada, as sustentações serão geradas dentro dos "
 "volumes do \"reforçador de suporte\" somente."
 
-#: src/libslic3r/PrintConfig.cpp:1879
+#: src/libslic3r/PrintConfig.cpp:2021
 msgid "XY separation between an object and its support"
 msgstr "Separação entre o objeto e seu suporte em XY"
 
-#: src/libslic3r/PrintConfig.cpp:1881
+#: src/libslic3r/PrintConfig.cpp:2023
 msgid ""
 "XY separation between an object and its support. If expressed as percentage "
 "(for example 50%), it will be calculated over external perimeter width."
 msgstr ""
 "Separação entre o objeto e seu suporte em XY. Se expresso como porcentagem "
-"(por exemplo, 50%), será calculado com base na espessura do perímetro "
-"externo."
+"(por exemplo, 50%), será calculado com base na espessura do perímetro externo."
 
-#: src/libslic3r/PrintConfig.cpp:1891
+#: src/libslic3r/PrintConfig.cpp:2033
 msgid "Pattern angle"
 msgstr "Ângulo do padrão"
 
-#: src/libslic3r/PrintConfig.cpp:1893
+#: src/libslic3r/PrintConfig.cpp:2035
 msgid ""
 "Use this setting to rotate the support material pattern on the horizontal "
 "plane."
@@ -9407,7 +10829,7 @@ msgstr ""
 "Use essa config. para girar o padrão de material de suporte no plano "
 "horizontal."
 
-#: src/libslic3r/PrintConfig.cpp:1903 src/libslic3r/PrintConfig.cpp:2686
+#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
 msgid ""
 "Only create support if it lies on a build plate. Don't create support on a "
 "print."
@@ -9415,11 +10837,11 @@ msgstr ""
 "Apenas criar suporte se ele está em uma mesa. Não crie suporte em uma "
 "impressão."
 
-#: src/libslic3r/PrintConfig.cpp:1909
+#: src/libslic3r/PrintConfig.cpp:2051
 msgid "Contact Z distance"
 msgstr "Distância de contato Z"
 
-#: src/libslic3r/PrintConfig.cpp:1911
+#: src/libslic3r/PrintConfig.cpp:2053
 msgid ""
 "The vertical distance between object and support material interface. Setting "
 "this to 0 will also prevent Slic3r from using bridge flow and speed for the "
@@ -9429,24 +10851,24 @@ msgstr ""
 "Definir isso como 0 também impedirá Slic3r de usar o fluxo de ponte e a "
 "velocidade para a primeira camada de objeto."
 
-#: src/libslic3r/PrintConfig.cpp:1918
+#: src/libslic3r/PrintConfig.cpp:2060
 msgid "0 (soluble)"
 msgstr "0 (solúvel)"
 
-#: src/libslic3r/PrintConfig.cpp:1919
+#: src/libslic3r/PrintConfig.cpp:2061
 msgid "0.2 (detachable)"
 msgstr "0.2 (destacável)"
 
-#: src/libslic3r/PrintConfig.cpp:1924
+#: src/libslic3r/PrintConfig.cpp:2066
 msgid "Enforce support for the first"
 msgstr "Reforçar suportes para a(s) primeira(s)"
 
-#: src/libslic3r/PrintConfig.cpp:1926
+#: src/libslic3r/PrintConfig.cpp:2068
 msgid ""
 "Generate support material for the specified number of layers counting from "
 "bottom, regardless of whether normal support material is enabled or not and "
-"regardless of any angle threshold. This is useful for getting more adhesion "
-"of objects having a very thin or poor footprint on the build plate."
+"regardless of any angle threshold. This is useful for getting more adhesion of "
+"objects having a very thin or poor footprint on the build plate."
 msgstr ""
 "Gere material de suporte para o número especificado de camadas que contam da "
 "parte inferior, independentemente de o material de suporte normal estar "
@@ -9454,64 +10876,63 @@ msgstr ""
 "para obter mais aderência de objetos com uma pegada muito fina ou fraca na "
 "placa de construção."
 
-#: src/libslic3r/PrintConfig.cpp:1931
+#: src/libslic3r/PrintConfig.cpp:2073
 msgid "Enforce support for the first n layers"
 msgstr "Reforçar suportes na(s) primera(s) n camada(s)"
 
-#: src/libslic3r/PrintConfig.cpp:1937
+#: src/libslic3r/PrintConfig.cpp:2079
 msgid "Support material/raft/skirt extruder"
 msgstr "Extrusora de material de suporte/estrado/saia"
 
-#: src/libslic3r/PrintConfig.cpp:1939
+#: src/libslic3r/PrintConfig.cpp:2081
 msgid ""
 "The extruder to use when printing support material, raft and skirt (1+, 0 to "
 "use the current extruder to minimize tool changes)."
 msgstr ""
-"A extrusora a ser usada ao imprimir material de suporte, estrado e saia (1 "
-"+, 0 para usar a extrusora atual para minimizar as mudanças na ferramenta)."
+"A extrusora a ser usada ao imprimir material de suporte, estrado e saia (1 +, "
+"0 para usar a extrusora atual para minimizar as mudanças na ferramenta)."
 
-#: src/libslic3r/PrintConfig.cpp:1948
+#: src/libslic3r/PrintConfig.cpp:2090
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for support "
-"material. If left zero, default extrusion width will be used if set, "
-"otherwise nozzle diameter will be used. If expressed as percentage (for "
-"example 90%) it will be computed over layer height."
+"material. If left zero, default extrusion width will be used if set, otherwise "
+"nozzle diameter will be used. If expressed as percentage (for example 90%) it "
+"will be computed over layer height."
 msgstr ""
 "Defina isso como um valor diferente de zero para definir uma largura de "
-"extrusão manual para material de suporte. Se deixada em zero, a largura "
-"padrão da extrusão será usada, se não o diâmetro da ponteira será usado. Se "
-"expresso em porcentagem(por exemplo, 90%) Ele será calculado sobre a altura "
-"da camada."
+"extrusão manual para material de suporte. Se deixada em zero, a largura padrão "
+"da extrusão será usada, se não o diâmetro da ponteira será usado. Se expresso "
+"em porcentagem(por exemplo, 90%) Ele será calculado sobre a altura da camada."
 
-#: src/libslic3r/PrintConfig.cpp:1957
+#: src/libslic3r/PrintConfig.cpp:2099
 msgid "Interface loops"
 msgstr "Voltas da interface"
 
-#: src/libslic3r/PrintConfig.cpp:1959
+#: src/libslic3r/PrintConfig.cpp:2101
 msgid ""
 "Cover the top contact layer of the supports with loops. Disabled by default."
 msgstr ""
 "Cubra a camada de contato superior dos suportes com laços. Desativado por "
 "padrão."
 
-#: src/libslic3r/PrintConfig.cpp:1964
+#: src/libslic3r/PrintConfig.cpp:2106
 msgid "Support material/raft interface extruder"
 msgstr "Extrusora de material de suporte/estrado"
 
-#: src/libslic3r/PrintConfig.cpp:1966
+#: src/libslic3r/PrintConfig.cpp:2108
 msgid ""
-"The extruder to use when printing support material interface (1+, 0 to use "
-"the current extruder to minimize tool changes). This affects raft too."
+"The extruder to use when printing support material interface (1+, 0 to use the "
+"current extruder to minimize tool changes). This affects raft too."
 msgstr ""
 "A extrusora para usar ao imprimir a relação material do apoio (1 +, 0 para "
 "usar o extrusor atual para minimizar mudanças da ferramenta). Isso afeta o "
 "estrado também."
 
-#: src/libslic3r/PrintConfig.cpp:1973
+#: src/libslic3r/PrintConfig.cpp:2115
 msgid "Interface layers"
 msgstr "Camadas de interface"
 
-#: src/libslic3r/PrintConfig.cpp:1975
+#: src/libslic3r/PrintConfig.cpp:2117
 msgid ""
 "Number of interface layers to insert between the object(s) and support "
 "material."
@@ -9519,55 +10940,54 @@ msgstr ""
 "Número de camadas de interface para inserir entre o objeto(s) e material de "
 "suporte."
 
-#: src/libslic3r/PrintConfig.cpp:1982
+#: src/libslic3r/PrintConfig.cpp:2124
 msgid "Interface pattern spacing"
 msgstr "Espaçamento do padrão da interface"
 
-#: src/libslic3r/PrintConfig.cpp:1984
+#: src/libslic3r/PrintConfig.cpp:2126
 msgid "Spacing between interface lines. Set zero to get a solid interface."
 msgstr ""
-"Espaçamento entre as linhas de interface. Defina zero para obter uma "
-"interface sólida."
+"Espaçamento entre as linhas de interface. Defina zero para obter uma interface "
+"sólida."
 
-#: src/libslic3r/PrintConfig.cpp:1993
+#: src/libslic3r/PrintConfig.cpp:2135
 msgid ""
 "Speed for printing support material interface layers. If expressed as "
-"percentage (for example 50%) it will be calculated over support material "
-"speed."
+"percentage (for example 50%) it will be calculated over support material speed."
 msgstr ""
 "Velocidade para camadas de interface de material de suporte de impressão. Se "
 "expresso em porcentagem(por exemplo, 50%) Ele será calculado sobre a "
 "velocidade do material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:2002
+#: src/libslic3r/PrintConfig.cpp:2144
 msgid "Pattern"
 msgstr "Padrão"
 
-#: src/libslic3r/PrintConfig.cpp:2004
+#: src/libslic3r/PrintConfig.cpp:2146
 msgid "Pattern used to generate support material."
 msgstr "Padrão usado para gerar material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:2010
+#: src/libslic3r/PrintConfig.cpp:2152
 msgid "Rectilinear grid"
 msgstr "Grade rectilínea"
 
-#: src/libslic3r/PrintConfig.cpp:2016
+#: src/libslic3r/PrintConfig.cpp:2158
 msgid "Pattern spacing"
 msgstr "Padrão de espaçamento"
 
-#: src/libslic3r/PrintConfig.cpp:2018
+#: src/libslic3r/PrintConfig.cpp:2160
 msgid "Spacing between support material lines."
 msgstr "Espaçamento entre linhas de material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:2027
+#: src/libslic3r/PrintConfig.cpp:2169
 msgid "Speed for printing support material."
 msgstr "Velocidade para imprimir material de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2176
 msgid "Synchronize with object layers"
 msgstr "Sincronizar com camadas de objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2036
+#: src/libslic3r/PrintConfig.cpp:2178
 msgid ""
 "Synchronize support layers with the object print layers. This is useful with "
 "multi-material printers, where the extruder switch is expensive."
@@ -9576,37 +10996,37 @@ msgstr ""
 "útil com as impressoras do multi-material, onde o interruptor da extrusora é "
 "caro."
 
-#: src/libslic3r/PrintConfig.cpp:2042
+#: src/libslic3r/PrintConfig.cpp:2184
 msgid "Overhang threshold"
 msgstr "Limite de angulação"
 
-#: src/libslic3r/PrintConfig.cpp:2044
+#: src/libslic3r/PrintConfig.cpp:2186
 msgid ""
-"Support material will not be generated for overhangs whose slope angle (90° "
-"= vertical) is above the given threshold. In other words, this value "
-"represent the most horizontal slope (measured from the horizontal plane) "
-"that you can print without support material. Set to zero for automatic "
-"detection (recommended)."
+"Support material will not be generated for overhangs whose slope angle (90° = "
+"vertical) is above the given threshold. In other words, this value represent "
+"the most horizontal slope (measured from the horizontal plane) that you can "
+"print without support material. Set to zero for automatic detection "
+"(recommended)."
 msgstr ""
 "O material de suporte não será gerado para angulações cujo ângulo de "
 "inclinação (90 ° = vertical) esteja acima do limite determinado. Em outras "
-"palavras, esse valor representa a inclinação mais horizontal (medida a "
-"partir do plano horizontal) que você pode imprimir sem material de suporte. "
-"Defina como zero para detecção automática (recomendado)."
+"palavras, esse valor representa a inclinação mais horizontal (medida a partir "
+"do plano horizontal) que você pode imprimir sem material de suporte. Defina "
+"como zero para detecção automática (recomendado)."
 
-#: src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2198
 msgid "With sheath around the support"
 msgstr "Com bainha em torno do apoio"
 
-#: src/libslic3r/PrintConfig.cpp:2058
+#: src/libslic3r/PrintConfig.cpp:2200
 msgid ""
-"Add a sheath (a single perimeter line) around the base support. This makes "
-"the support more reliable, but also more difficult to remove."
+"Add a sheath (a single perimeter line) around the base support. This makes the "
+"support more reliable, but also more difficult to remove."
 msgstr ""
 "Adicione uma bainha (uma única linha de perímetro) em torno do suporte base. "
 "Isso torna o suporte mais confiável, mas também mais difícil de remover."
 
-#: src/libslic3r/PrintConfig.cpp:2065
+#: src/libslic3r/PrintConfig.cpp:2207
 msgid ""
 "Extruder temperature for layers after the first one. Set this to zero to "
 "disable temperature control commands in the output."
@@ -9614,124 +11034,127 @@ msgstr ""
 "Temperatura da extrusora para camadas após a primeira. Defina como zero para "
 "desabilitar os comandos de controle de temperatura na saída."
 
-#: src/libslic3r/PrintConfig.cpp:2073
+#: src/libslic3r/PrintConfig.cpp:2210
+msgid "Extruder temperature"
+msgstr "Temperaturas da mesa e da extrusora"
+
+#: src/libslic3r/PrintConfig.cpp:2216
 msgid "Detect thin walls"
 msgstr "Detectar paredes finas"
 
-#: src/libslic3r/PrintConfig.cpp:2075
+#: src/libslic3r/PrintConfig.cpp:2218
 msgid ""
-"Detect single-width walls (parts where two extrusions don't fit and we need "
-"to collapse them into a single trace)."
+"Detect single-width walls (parts where two extrusions don't fit and we need to "
+"collapse them into a single trace)."
 msgstr ""
 "Detecte paredes de largura única (partes onde duas extrusões não cabem e "
 "precisamos recolhê-las em um único traço)."
 
-#: src/libslic3r/PrintConfig.cpp:2081
+#: src/libslic3r/PrintConfig.cpp:2224
 msgid "Threads"
 msgstr "Roscas"
 
-#: src/libslic3r/PrintConfig.cpp:2082
+#: src/libslic3r/PrintConfig.cpp:2225
 msgid ""
-"Threads are used to parallelize long-running tasks. Optimal threads number "
-"is slightly above the number of available cores/processors."
+"Threads are used to parallelize long-running tasks. Optimal threads number is "
+"slightly above the number of available cores/processors."
 msgstr ""
-"Tópicos são usados para paralelizar tarefas de execução demorada. O número "
-"de tópicos ideais está ligeiramente acima do número de núcleos/processadores "
+"Tópicos são usados para paralelizar tarefas de execução demorada. O número de "
+"tópicos ideais está ligeiramente acima do número de núcleos/processadores "
 "disponíveis."
 
-#: src/libslic3r/PrintConfig.cpp:2094
+#: src/libslic3r/PrintConfig.cpp:2237
 msgid ""
 "This custom code is inserted before every toolchange. Placeholder variables "
 "for all PrusaSlicer settings as well as {previous_extruder} and "
-"{next_extruder} can be used. When a tool-changing command which changes to "
-"the correct extruder is included (such as T{next_extruder}), PrusaSlicer "
-"will emit no other such command. It is therefore possible to script custom "
-"behaviour both before and after the toolchange."
+"{next_extruder} can be used. When a tool-changing command which changes to the "
+"correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit "
+"no other such command. It is therefore possible to script custom behaviour "
+"both before and after the toolchange."
 msgstr ""
 "Este código personalizado é inserido antes de cada troca de ferramenta. "
 "Variáveis de espaço reservado para todas as config. de PrusaSlicer, bem como "
 "{previous_extruder} e {next_extruder} podem ser usadas. Quando um comando de "
-"mudança de ferramenta que muda para a extrusora correta está incluído (como "
-"T {next_extruder}), PrusaSlicer emitirá nenhum outro comando tal. Portanto, "
-"é possível script comportamento personalizado antes e depois da mudança de "
+"mudança de ferramenta que muda para a extrusora correta está incluído (como T "
+"{next_extruder}), PrusaSlicer emitirá nenhum outro comando tal. Portanto, é "
+"possível script comportamento personalizado antes e depois da mudança de "
 "ferramenta."
 
-#: src/libslic3r/PrintConfig.cpp:2107
+#: src/libslic3r/PrintConfig.cpp:2250
 msgid ""
 "Set this to a non-zero value to set a manual extrusion width for infill for "
 "top surfaces. You may want to use thinner extrudates to fill all narrow "
-"regions and get a smoother finish. If left zero, default extrusion width "
-"will be used if set, otherwise nozzle diameter will be used. If expressed as "
+"regions and get a smoother finish. If left zero, default extrusion width will "
+"be used if set, otherwise nozzle diameter will be used. If expressed as "
 "percentage (for example 90%) it will be computed over layer height."
 msgstr ""
 "Defina isso como um valor diferente de zero para definir uma largura de "
 "extrusão manual para preenchimento para superfícies superiores. Você pode "
 "querer usar extrusões mais finos para preencher todas as regiões estreitas e "
 "obter um acabamento mais suave. Se a esquerda zero, a largura padrão da "
-"extrusão será usada se ajustado, se não o diâmetro da ponteira será usado. "
-"Se expresso em porcentagem(por exemplo, 90%) Ele será calculado sobre a "
-"altura da camada."
+"extrusão será usada se ajustado, se não o diâmetro da ponteira será usado. Se "
+"expresso em porcentagem(por exemplo, 90%) Ele será calculado sobre a altura da "
+"camada."
 
-#: src/libslic3r/PrintConfig.cpp:2119
+#: src/libslic3r/PrintConfig.cpp:2262
 msgid ""
-"Speed for printing top solid layers (it only applies to the uppermost "
-"external layers and not to their internal solid layers). You may want to "
-"slow down this to get a nicer surface finish. This can be expressed as a "
-"percentage (for example: 80%) over the solid infill speed above. Set to zero "
-"for auto."
+"Speed for printing top solid layers (it only applies to the uppermost external "
+"layers and not to their internal solid layers). You may want to slow down this "
+"to get a nicer surface finish. This can be expressed as a percentage (for "
+"example: 80%) over the solid infill speed above. Set to zero for auto."
 msgstr ""
 "Velocidade para imprimir camadas sólidas superiores (só se aplica às camadas "
-"externas superiores e não às suas camadas sólidas internas). Você pode "
-"querer diminuir este para ter um revestimento de superfície mais agradável. "
-"Isto pode ser expresso em porcentagem(por exemplo: 80%) sobre a velocidade "
-"de preenchimento sólido acima. Defina como zero para auto."
+"externas superiores e não às suas camadas sólidas internas). Você pode querer "
+"diminuir este para ter um revestimento de superfície mais agradável. Isto pode "
+"ser expresso em porcentagem(por exemplo: 80%) sobre a velocidade de "
+"preenchimento sólido acima. Defina como zero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2277
 msgid "Number of solid layers to generate on top surfaces."
 msgstr "Número de camadas sólidas para gerar em superfícies superiores."
 
-#: src/libslic3r/PrintConfig.cpp:2135
+#: src/libslic3r/PrintConfig.cpp:2278
 msgid "Top solid layers"
 msgstr "Camadas sólidas de topo"
 
-#: src/libslic3r/PrintConfig.cpp:2143
+#: src/libslic3r/PrintConfig.cpp:2286
 msgid ""
 "The number of top solid layers is increased above top_solid_layers if "
-"necessary to satisfy minimum thickness of top shell. This is useful to "
-"prevent pillowing effect when printing with variable layer height."
+"necessary to satisfy minimum thickness of top shell. This is useful to prevent "
+"pillowing effect when printing with variable layer height."
 msgstr ""
 "O número de camadas sólidas superiores é aumentado acima de top_solid_layers "
 "se necessário para satisfazer a espessura mínima da camada superior. Isso é "
 "útil para evitar o efeito de travesseiro ao imprimir com altura de camada "
 "variável."
 
-#: src/libslic3r/PrintConfig.cpp:2146
+#: src/libslic3r/PrintConfig.cpp:2289
 msgid "Minimum top shell thickness"
 msgstr "Espessura mínima vertical da parede"
 
-#: src/libslic3r/PrintConfig.cpp:2153
+#: src/libslic3r/PrintConfig.cpp:2296
 msgid "Speed for travel moves (jumps between distant extrusion points)."
 msgstr ""
 "Velocidade para movimentos de viagem (saltos entre pontos de extrusão "
 "distantes)."
 
-#: src/libslic3r/PrintConfig.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:2304
 msgid "Use firmware retraction"
 msgstr "Usar retração do firmware"
 
-#: src/libslic3r/PrintConfig.cpp:2162
+#: src/libslic3r/PrintConfig.cpp:2305
 msgid ""
 "This experimental setting uses G10 and G11 commands to have the firmware "
 "handle the retraction. This is only supported in recent Marlin."
 msgstr ""
-"Esta config. experimental usa comandos G10 e G11 para que o firmware "
-"manipule a retração. Isso só é suportado no recente Marlin."
+"Esta config. experimental usa comandos G10 e G11 para que o firmware manipule "
+"a retração. Isso só é suportado no recente Marlin."
 
-#: src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2311
 msgid "Use relative E distances"
 msgstr "Utilizar distâncias relativas do E"
 
-#: src/libslic3r/PrintConfig.cpp:2169
+#: src/libslic3r/PrintConfig.cpp:2312
 msgid ""
 "If your firmware requires relative E values, check this, otherwise leave it "
 "unchecked. Most firmwares use absolute values."
@@ -9739,118 +11162,118 @@ msgstr ""
 "Se o firmware necessitar de valores relativos E, verifique isto, caso "
 "contrário, deixe-o desmarcado. A maioria dos firmwares usa valores absolutos."
 
-#: src/libslic3r/PrintConfig.cpp:2175
+#: src/libslic3r/PrintConfig.cpp:2318
 msgid "Use volumetric E"
 msgstr "Usar E volumétrico"
 
-#: src/libslic3r/PrintConfig.cpp:2176
+#: src/libslic3r/PrintConfig.cpp:2319
 msgid ""
 "This experimental setting uses outputs the E values in cubic millimeters "
-"instead of linear millimeters. If your firmware doesn't already know "
-"filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] "
-"T0' in your start G-code in order to turn volumetric mode on and use the "
-"filament diameter associated to the filament selected in Slic3r. This is "
-"only supported in recent Marlin."
+"instead of linear millimeters. If your firmware doesn't already know filament "
+"diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' in "
+"your start G-code in order to turn volumetric mode on and use the filament "
+"diameter associated to the filament selected in Slic3r. This is only supported "
+"in recent Marlin."
 msgstr ""
-"Essa config. experimental usa saídas os valores E em milímetros cúbicos em "
-"vez de milímetros lineares. Se o firmware já não souber o diâmetro (s) do "
-"filamento, você pode colocar comandos como ' m 200 D [filament_diameter_0] "
-"T0 ' no seu G-code inicial para ativar o modo volumétrico e usar o diâmetro "
-"do filamento associado ao filamento selecionado em Slic3r. Isso só é "
-"suportado no recente Marlin."
+"Essa config. experimental usa saídas os valores E em milímetros cúbicos em vez "
+"de milímetros lineares. Se o firmware já não souber o diâmetro (s) do "
+"filamento, você pode colocar comandos como ' m 200 D [filament_diameter_0] T0 "
+"' no seu G-code inicial para ativar o modo volumétrico e usar o diâmetro do "
+"filamento associado ao filamento selecionado em Slic3r. Isso só é suportado no "
+"recente Marlin."
 
-#: src/libslic3r/PrintConfig.cpp:2186
+#: src/libslic3r/PrintConfig.cpp:2329
 msgid "Enable variable layer height feature"
 msgstr "Habilitar altura de camada variável"
 
-#: src/libslic3r/PrintConfig.cpp:2187
+#: src/libslic3r/PrintConfig.cpp:2330
 msgid ""
-"Some printers or printer setups may have difficulties printing with a "
-"variable layer height. Enabled by default."
+"Some printers or printer setups may have difficulties printing with a variable "
+"layer height. Enabled by default."
 msgstr ""
 "Algumas impressoras ou config. de impressora podem ter dificuldades para "
 "imprimir com uma altura de camada variável. Ativado por padrão."
 
-#: src/libslic3r/PrintConfig.cpp:2193
+#: src/libslic3r/PrintConfig.cpp:2336
 msgid "Wipe while retracting"
 msgstr "Limpe durante a retração"
 
-#: src/libslic3r/PrintConfig.cpp:2194
+#: src/libslic3r/PrintConfig.cpp:2337
 msgid ""
-"This flag will move the nozzle while retracting to minimize the possible "
-"blob on leaky extruders."
+"This flag will move the nozzle while retracting to minimize the possible blob "
+"on leaky extruders."
 msgstr ""
-"Esta bandeira moverá a ponteira ao retrair para minimizar a bolha possível "
-"em extrusoras vazando."
+"Esta bandeira moverá a ponteira ao retrair para minimizar a bolha possível em "
+"extrusoras vazando."
 
-#: src/libslic3r/PrintConfig.cpp:2201
+#: src/libslic3r/PrintConfig.cpp:2344
 msgid ""
-"Multi material printers may need to prime or purge extruders on tool "
-"changes. Extrude the excess material into the wipe tower."
+"Multi material printers may need to prime or purge extruders on tool changes. "
+"Extrude the excess material into the wipe tower."
 msgstr ""
 "Várias impressoras de multi-material podem precisar purgar extrusoras em "
 "alterações de ferramenta. EXTRUDE o excesso de material para a torre de "
 "limpeza."
 
-#: src/libslic3r/PrintConfig.cpp:2207
+#: src/libslic3r/PrintConfig.cpp:2350
 msgid "Purging volumes - load/unload volumes"
 msgstr "Volumes de purga-volumes de carga/descarregamento"
 
-#: src/libslic3r/PrintConfig.cpp:2208
+#: src/libslic3r/PrintConfig.cpp:2351
 msgid ""
 "This vector saves required volumes to change from/to each tool used on the "
 "wipe tower. These values are used to simplify creation of the full purging "
 "volumes below."
 msgstr ""
 "Este vetor salva os volumes necessários para mudar de/para cada ferramenta "
-"usada na torre de limpeza. Esses valores são usados para simplificar a "
-"criação dos volumes de purga completos abaixo."
+"usada na torre de limpeza. Esses valores são usados para simplificar a criação "
+"dos volumes de purga completos abaixo."
 
-#: src/libslic3r/PrintConfig.cpp:2214
+#: src/libslic3r/PrintConfig.cpp:2357
 msgid "Purging volumes - matrix"
 msgstr "Volumes de purga-matriz"
 
-#: src/libslic3r/PrintConfig.cpp:2215
+#: src/libslic3r/PrintConfig.cpp:2358
 msgid ""
-"This matrix describes volumes (in cubic milimetres) required to purge the "
-"new filament on the wipe tower for any given pair of tools."
+"This matrix describes volumes (in cubic milimetres) required to purge the new "
+"filament on the wipe tower for any given pair of tools."
 msgstr ""
-"Esta matriz descreve volumes (em milimetros cúbicos) necessários para limpar "
-"o novo filamento na torre de limpeza para qualquer dado par de ferramentas."
+"Esta matriz descreve volumes (em milimetros cúbicos) necessários para limpar o "
+"novo filamento na torre de limpeza para qualquer dado par de ferramentas."
 
-#: src/libslic3r/PrintConfig.cpp:2224
+#: src/libslic3r/PrintConfig.cpp:2367
 msgid "Position X"
 msgstr "Posição X"
 
-#: src/libslic3r/PrintConfig.cpp:2225
+#: src/libslic3r/PrintConfig.cpp:2368
 msgid "X coordinate of the left front corner of a wipe tower"
 msgstr "Coordenada X do canto frontal esquerdo de uma torre de limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:2231
+#: src/libslic3r/PrintConfig.cpp:2374
 msgid "Position Y"
 msgstr "Posição Y"
 
-#: src/libslic3r/PrintConfig.cpp:2232
+#: src/libslic3r/PrintConfig.cpp:2375
 msgid "Y coordinate of the left front corner of a wipe tower"
 msgstr "Coordenada Y do canto dianteiro esquerdo de uma torre de limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:2239
+#: src/libslic3r/PrintConfig.cpp:2382
 msgid "Width of a wipe tower"
 msgstr "Largura de uma torre da limpeza"
 
-#: src/libslic3r/PrintConfig.cpp:2245
+#: src/libslic3r/PrintConfig.cpp:2388
 msgid "Wipe tower rotation angle"
 msgstr "Ângulo de rotação da torre"
 
-#: src/libslic3r/PrintConfig.cpp:2246
+#: src/libslic3r/PrintConfig.cpp:2389
 msgid "Wipe tower rotation angle with respect to x-axis."
 msgstr "Ângulo de rotação da torre de limpeza em relação ao eixo X."
 
-#: src/libslic3r/PrintConfig.cpp:2253
+#: src/libslic3r/PrintConfig.cpp:2396
 msgid "Wipe into this object's infill"
 msgstr "Limpe no preenchimento deste objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2254
+#: src/libslic3r/PrintConfig.cpp:2397
 msgid ""
 "Purging after toolchange will done inside this object's infills. This lowers "
 "the amount of waste but may result in longer print time  due to additional "
@@ -9860,163 +11283,161 @@ msgstr ""
 "objeto. Isso diminui a quantidade de resíduos, mas pode resultar em tempo de "
 "impressão mais longo devido a movimentos de viagem adicionais."
 
-#: src/libslic3r/PrintConfig.cpp:2261
+#: src/libslic3r/PrintConfig.cpp:2404
 msgid "Wipe into this object"
 msgstr "Limpar neste objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2262
+#: src/libslic3r/PrintConfig.cpp:2405
 msgid ""
 "Object will be used to purge the nozzle after a toolchange to save material "
-"that would otherwise end up in the wipe tower and decrease print time. "
-"Colours of the objects will be mixed as a result."
+"that would otherwise end up in the wipe tower and decrease print time. Colours "
+"of the objects will be mixed as a result."
 msgstr ""
-"Objeto será usado para limpar o bico após uma troca de ferramenta para "
-"salvar o material que de outra forma acabaria na torre de limpeza e diminuir "
-"o tempo de impressão. As cores dos objetos serão misturadas como resultado."
+"Objeto será usado para limpar o bico após uma troca de ferramenta para salvar "
+"o material que de outra forma acabaria na torre de limpeza e diminuir o tempo "
+"de impressão. As cores dos objetos serão misturadas como resultado."
 
-#: src/libslic3r/PrintConfig.cpp:2268
+#: src/libslic3r/PrintConfig.cpp:2411
 msgid "Maximal bridging distance"
 msgstr "Distância de ponte máxima"
 
-#: src/libslic3r/PrintConfig.cpp:2269
+#: src/libslic3r/PrintConfig.cpp:2412
 msgid "Maximal distance between supports on sparse infill sections."
-msgstr ""
-"Distância máxima entre as sustentações em seções preenchimento esparsas."
+msgstr "Distância máxima entre as sustentações em seções preenchimento esparsas."
 
-#: src/libslic3r/PrintConfig.cpp:2275
+#: src/libslic3r/PrintConfig.cpp:2418
 msgid "XY Size Compensation"
 msgstr "Compensação de tamanho em XY"
 
-#: src/libslic3r/PrintConfig.cpp:2277
+#: src/libslic3r/PrintConfig.cpp:2420
 msgid ""
 "The object will be grown/shrunk in the XY plane by the configured value "
 "(negative = inwards, positive = outwards). This might be useful for fine-"
 "tuning hole sizes."
 msgstr ""
-"O objeto será aumentado/encolhido no plano XY pelo valor configurado "
-"(negativo = para dentro, positivo = para fora). Isso pode ser útil para "
-"ajustar os tamanhos dos furos."
+"O objeto será aumentado/encolhido no plano XY pelo valor configurado (negativo "
+"= para dentro, positivo = para fora). Isso pode ser útil para ajustar os "
+"tamanhos dos furos."
 
-#: src/libslic3r/PrintConfig.cpp:2285
+#: src/libslic3r/PrintConfig.cpp:2428
 msgid "Z offset"
 msgstr "Compensamento do Z"
 
-#: src/libslic3r/PrintConfig.cpp:2286
+#: src/libslic3r/PrintConfig.cpp:2429
 msgid ""
 "This value will be added (or subtracted) from all the Z coordinates in the "
 "output G-code. It is used to compensate for bad Z endstop position: for "
 "example, if your endstop zero actually leaves the nozzle 0.3mm far from the "
 "print bed, set this to -0.3 (or fix your endstop)."
 msgstr ""
-"Esse valor será adicionado (ou subtraído) de todas as coordenadas Z no G-"
-"code de saída. Ele é usado para compensar a posição de final de curso Z "
-"ruim: por exemplo, se o seu final de curso zero realmente deixa o bico 0.3 "
-"mm longe da mesa de impressão, defina este para-0,3 (ou corrigir o seu final "
-"de curso)."
+"Esse valor será adicionado (ou subtraído) de todas as coordenadas Z no G-code "
+"de saída. Ele é usado para compensar a posição de final de curso Z ruim: por "
+"exemplo, se o seu final de curso zero realmente deixa o bico 0.3 mm longe da "
+"mesa de impressão, defina este para-0,3 (ou corrigir o seu final de curso)."
 
-#: src/libslic3r/PrintConfig.cpp:2353
+#: src/libslic3r/PrintConfig.cpp:2496
 msgid "Display width"
 msgstr "Largura do display"
 
-#: src/libslic3r/PrintConfig.cpp:2354
+#: src/libslic3r/PrintConfig.cpp:2497
 msgid "Width of the display"
 msgstr "Largura do display"
 
-#: src/libslic3r/PrintConfig.cpp:2359
+#: src/libslic3r/PrintConfig.cpp:2502
 msgid "Display height"
 msgstr "Altura do display"
 
-#: src/libslic3r/PrintConfig.cpp:2360
+#: src/libslic3r/PrintConfig.cpp:2503
 msgid "Height of the display"
 msgstr "Altura do display"
 
-#: src/libslic3r/PrintConfig.cpp:2365
+#: src/libslic3r/PrintConfig.cpp:2508
 msgid "Number of pixels in"
 msgstr "Número de pixels em"
 
-#: src/libslic3r/PrintConfig.cpp:2367
+#: src/libslic3r/PrintConfig.cpp:2510
 msgid "Number of pixels in X"
 msgstr "Número de pixels em X"
 
-#: src/libslic3r/PrintConfig.cpp:2373
+#: src/libslic3r/PrintConfig.cpp:2516
 msgid "Number of pixels in Y"
 msgstr "Número de pixels em Y"
 
-#: src/libslic3r/PrintConfig.cpp:2378
+#: src/libslic3r/PrintConfig.cpp:2521
 msgid "Display horizontal mirroring"
 msgstr "Exibir espelhamento horizontal"
 
-#: src/libslic3r/PrintConfig.cpp:2379
+#: src/libslic3r/PrintConfig.cpp:2522
 msgid "Mirror horizontally"
 msgstr "Espelhar horizontalmente"
 
-#: src/libslic3r/PrintConfig.cpp:2380
+#: src/libslic3r/PrintConfig.cpp:2523
 msgid "Enable horizontal mirroring of output images"
 msgstr "Habilitar espelhamento horizontal de imagens de saída"
 
-#: src/libslic3r/PrintConfig.cpp:2385
+#: src/libslic3r/PrintConfig.cpp:2528
 msgid "Display vertical mirroring"
 msgstr "Exibir espelhamento vertical"
 
-#: src/libslic3r/PrintConfig.cpp:2386
+#: src/libslic3r/PrintConfig.cpp:2529
 msgid "Mirror vertically"
 msgstr "Espelharvertical"
 
-#: src/libslic3r/PrintConfig.cpp:2387
+#: src/libslic3r/PrintConfig.cpp:2530
 msgid "Enable vertical mirroring of output images"
 msgstr "Habilitar espelhamento vertical de imagens de saída"
 
-#: src/libslic3r/PrintConfig.cpp:2392
+#: src/libslic3r/PrintConfig.cpp:2535
 msgid "Display orientation"
 msgstr "Orientação do display"
 
-#: src/libslic3r/PrintConfig.cpp:2393
+#: src/libslic3r/PrintConfig.cpp:2536
 msgid ""
 "Set the actual LCD display orientation inside the SLA printer. Portrait mode "
 "will flip the meaning of display width and height parameters and the output "
 "images will be rotated by 90 degrees."
 msgstr ""
-"Defina a orientação real do visor LCD dentro da impressora SLA. O modo "
-"retrato inverterá o significado dos parâmetros de largura e altura da tela e "
-"as imagens de saída serão giradas por 90 graus."
+"Defina a orientação real do visor LCD dentro da impressora SLA. O modo retrato "
+"inverterá o significado dos parâmetros de largura e altura da tela e as "
+"imagens de saída serão giradas por 90 graus."
 
-#: src/libslic3r/PrintConfig.cpp:2399
+#: src/libslic3r/PrintConfig.cpp:2542
 msgid "Landscape"
 msgstr "Paisagem"
 
-#: src/libslic3r/PrintConfig.cpp:2400
+#: src/libslic3r/PrintConfig.cpp:2543
 msgid "Portrait"
 msgstr "Retrato"
 
-#: src/libslic3r/PrintConfig.cpp:2405
+#: src/libslic3r/PrintConfig.cpp:2548
 msgid "Fast"
 msgstr "Rápido"
 
-#: src/libslic3r/PrintConfig.cpp:2406
+#: src/libslic3r/PrintConfig.cpp:2549
 msgid "Fast tilt"
 msgstr "Inclinação rápida"
 
-#: src/libslic3r/PrintConfig.cpp:2407
+#: src/libslic3r/PrintConfig.cpp:2550
 msgid "Time of the fast tilt"
 msgstr "Tempo da inclinação rápida"
 
-#: src/libslic3r/PrintConfig.cpp:2414
+#: src/libslic3r/PrintConfig.cpp:2557
 msgid "Slow"
 msgstr "Lento"
 
-#: src/libslic3r/PrintConfig.cpp:2415
+#: src/libslic3r/PrintConfig.cpp:2558
 msgid "Slow tilt"
 msgstr "Inclinação lenta"
 
-#: src/libslic3r/PrintConfig.cpp:2416
+#: src/libslic3r/PrintConfig.cpp:2559
 msgid "Time of the slow tilt"
 msgstr "Tempo da inclinação lenta"
 
-#: src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2566
 msgid "Area fill"
 msgstr "Preenchimento de área"
 
-#: src/libslic3r/PrintConfig.cpp:2424
+#: src/libslic3r/PrintConfig.cpp:2567
 msgid ""
 "The percentage of the bed area. \n"
 "If the print area exceeds the specified value, \n"
@@ -10027,16 +11448,16 @@ msgstr ""
 "em seguida, uma inclinação lenta será usada, caso contrário-uma inclinação "
 "rápida"
 
-#: src/libslic3r/PrintConfig.cpp:2431 src/libslic3r/PrintConfig.cpp:2432
-#: src/libslic3r/PrintConfig.cpp:2433
+#: src/libslic3r/PrintConfig.cpp:2574 src/libslic3r/PrintConfig.cpp:2575
+#: src/libslic3r/PrintConfig.cpp:2576
 msgid "Printer scaling correction"
 msgstr "Correção de dimensionamento da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:2439 src/libslic3r/PrintConfig.cpp:2440
+#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2583
 msgid "Printer absolute correction"
 msgstr "Correção absoluta da impressora"
 
-#: src/libslic3r/PrintConfig.cpp:2441
+#: src/libslic3r/PrintConfig.cpp:2584
 msgid ""
 "Will inflate or deflate the sliced 2D polygons according to the sign of the "
 "correction."
@@ -10044,257 +11465,269 @@ msgstr ""
 "Irá inflar ou esvaziar os polígonos 2D cortados de acordo com o sinal da "
 "correção."
 
-#: src/libslic3r/PrintConfig.cpp:2447
+#: src/libslic3r/PrintConfig.cpp:2590
 msgid "Elephant foot minimum width"
 msgstr "Largura mínima do pé de elefante"
 
-#: src/libslic3r/PrintConfig.cpp:2449
+#: src/libslic3r/PrintConfig.cpp:2592
 msgid ""
 "Minimum width of features to maintain when doing elephant foot compensation."
 msgstr ""
 "Largura mínima de características para manter ao fazer compensação do pé de "
 "elefante."
 
-#: src/libslic3r/PrintConfig.cpp:2456 src/libslic3r/PrintConfig.cpp:2457
+#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2600
 msgid "Printer gamma correction"
 msgstr "Correção de gama de impressora"
 
-#: src/libslic3r/PrintConfig.cpp:2458
+#: src/libslic3r/PrintConfig.cpp:2601
 msgid ""
 "This will apply a gamma correction to the rasterized 2D polygons. A gamma "
 "value of zero means thresholding with the threshold in the middle. This "
 "behaviour eliminates antialiasing without losing holes in polygons."
 msgstr ""
-"Isso aplicará uma correção de gama para os polígonos 2D rasterizados. Um "
-"valor gama de zero significa limiarização com o limiar no meio. Este "
-"comportamento elimina suavização sem perder buracos em polígonos."
+"Isso aplicará uma correção de gama para os polígonos 2D rasterizados. Um valor "
+"gama de zero significa limiarização com o limiar no meio. Este comportamento "
+"elimina suavização sem perder buracos em polígonos."
 
-#: src/libslic3r/PrintConfig.cpp:2470 src/libslic3r/PrintConfig.cpp:2471
+#: src/libslic3r/PrintConfig.cpp:2613 src/libslic3r/PrintConfig.cpp:2614
 msgid "SLA material type"
 msgstr "Tipo de Material de SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2482 src/libslic3r/PrintConfig.cpp:2483
+#: src/libslic3r/PrintConfig.cpp:2625 src/libslic3r/PrintConfig.cpp:2626
 msgid "Initial layer height"
 msgstr "Altura da camada inicial"
 
-#: src/libslic3r/PrintConfig.cpp:2489 src/libslic3r/PrintConfig.cpp:2490
+#: src/libslic3r/PrintConfig.cpp:2632 src/libslic3r/PrintConfig.cpp:2633
 msgid "Bottle volume"
 msgstr "Volume do pote"
 
-#: src/libslic3r/PrintConfig.cpp:2491
+#: src/libslic3r/PrintConfig.cpp:2634
 msgid "ml"
 msgstr "ml"
 
-#: src/libslic3r/PrintConfig.cpp:2496 src/libslic3r/PrintConfig.cpp:2497
+#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2640
 msgid "Bottle weight"
 msgstr "Peso do pote"
 
-#: src/libslic3r/PrintConfig.cpp:2498
+#: src/libslic3r/PrintConfig.cpp:2641
 msgid "kg"
 msgstr "kg"
 
-#: src/libslic3r/PrintConfig.cpp:2505
+#: src/libslic3r/PrintConfig.cpp:2648
 msgid "g/ml"
 msgstr "g/ml"
 
-#: src/libslic3r/PrintConfig.cpp:2512
+#: src/libslic3r/PrintConfig.cpp:2655
 msgid "money/bottle"
 msgstr "dinheiro/pote"
 
-#: src/libslic3r/PrintConfig.cpp:2517
+#: src/libslic3r/PrintConfig.cpp:2660
 msgid "Faded layers"
 msgstr "Camadas desbotadas"
 
-#: src/libslic3r/PrintConfig.cpp:2518
+#: src/libslic3r/PrintConfig.cpp:2661
 msgid ""
 "Number of the layers needed for the exposure time fade from initial exposure "
 "time to the exposure time"
 msgstr ""
-"Número de camadas necessárias para o tempo de exposição desvanecer-se do "
-"tempo de exposição inicial ao tempo de exposição"
+"Número de camadas necessárias para o tempo de exposição desvanecer-se do tempo "
+"de exposição inicial ao tempo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2525 src/libslic3r/PrintConfig.cpp:2526
+#: src/libslic3r/PrintConfig.cpp:2668 src/libslic3r/PrintConfig.cpp:2669
 msgid "Minimum exposure time"
 msgstr "Tempo mínimo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2534
+#: src/libslic3r/PrintConfig.cpp:2676 src/libslic3r/PrintConfig.cpp:2677
 msgid "Maximum exposure time"
 msgstr "Tempo máximo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2541 src/libslic3r/PrintConfig.cpp:2542
+#: src/libslic3r/PrintConfig.cpp:2684 src/libslic3r/PrintConfig.cpp:2685
 msgid "Exposure time"
 msgstr "Tempo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2548 src/libslic3r/PrintConfig.cpp:2549
+#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2692
 msgid "Minimum initial exposure time"
 msgstr "Tempo inicial mínimo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2556 src/libslic3r/PrintConfig.cpp:2557
+#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2700
 msgid "Maximum initial exposure time"
 msgstr "Tempo inicial máximo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2564 src/libslic3r/PrintConfig.cpp:2565
+#: src/libslic3r/PrintConfig.cpp:2707 src/libslic3r/PrintConfig.cpp:2708
 msgid "Initial exposure time"
 msgstr "Tempo inicial mínimo de exposição"
 
-#: src/libslic3r/PrintConfig.cpp:2571 src/libslic3r/PrintConfig.cpp:2572
+#: src/libslic3r/PrintConfig.cpp:2714 src/libslic3r/PrintConfig.cpp:2715
 msgid "Correction for expansion"
 msgstr "Correção para expansão"
 
-#: src/libslic3r/PrintConfig.cpp:2578
+#: src/libslic3r/PrintConfig.cpp:2721
 msgid "SLA print material notes"
 msgstr "Notas de material de impressão de SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2579
+#: src/libslic3r/PrintConfig.cpp:2722
 msgid "You can put your notes regarding the SLA print material here."
 msgstr ""
 "Você pode colocar suas anotações sobre o material de impressão de SLA aqui."
 
-#: src/libslic3r/PrintConfig.cpp:2591 src/libslic3r/PrintConfig.cpp:2602
+#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2745
 msgid "Default SLA material profile"
 msgstr "Perfil de material de SLA padrão"
 
-#: src/libslic3r/PrintConfig.cpp:2613
+#: src/libslic3r/PrintConfig.cpp:2756
 msgid "Generate supports"
 msgstr "Gerar suportes"
 
-#: src/libslic3r/PrintConfig.cpp:2615
+#: src/libslic3r/PrintConfig.cpp:2758
 msgid "Generate supports for the models"
 msgstr "Gere suportes para os modelos"
 
-#: src/libslic3r/PrintConfig.cpp:2620
-msgid "Support head front diameter"
+#: src/libslic3r/PrintConfig.cpp:2763
+msgid "Pinhead front diameter"
 msgstr "Diâmetro dianteiro principal da sustentação"
 
-#: src/libslic3r/PrintConfig.cpp:2622
+#: src/libslic3r/PrintConfig.cpp:2765
 msgid "Diameter of the pointing side of the head"
 msgstr "Diâmetro do lado apontando da cabeça"
 
-#: src/libslic3r/PrintConfig.cpp:2629
-msgid "Support head penetration"
-msgstr "Suporte de penetração da cabeça"
+#: src/libslic3r/PrintConfig.cpp:2772
+msgid "Head penetration"
+msgstr "Penetração inválida da cabeça"
 
-#: src/libslic3r/PrintConfig.cpp:2631
+#: src/libslic3r/PrintConfig.cpp:2774
 msgid "How much the pinhead has to penetrate the model surface"
 msgstr "Quanto a cabeça de alfinete tem de penetrar na superfície do modelo"
 
-#: src/libslic3r/PrintConfig.cpp:2638
-msgid "Support head width"
+#: src/libslic3r/PrintConfig.cpp:2781
+msgid "Pinhead width"
 msgstr "Largura da cabeça de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2640
+#: src/libslic3r/PrintConfig.cpp:2783
 msgid "Width from the back sphere center to the front sphere center"
 msgstr "Largura do centro da esfera traseira ao centro da esfera dianteira"
 
-#: src/libslic3r/PrintConfig.cpp:2648
-msgid "Support pillar diameter"
+#: src/libslic3r/PrintConfig.cpp:2791
+msgid "Pillar diameter"
 msgstr "Diâmetro do pilar do suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2650
+#: src/libslic3r/PrintConfig.cpp:2793
 msgid "Diameter in mm of the support pillars"
 msgstr "Diâmetro em mm dos pilares de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2658
+#: src/libslic3r/PrintConfig.cpp:2801
+msgid "Small pillar diameter percent"
+msgstr "Diâmetro do pilar do suporte"
+
+#: src/libslic3r/PrintConfig.cpp:2803
+msgid ""
+"The percentage of smaller pillars compared to the normal pillar diameter which "
+"are used in problematic areas where a normal pilla cannot fit."
+msgstr ""
+"A porcentagem de pilares menores em comparação com o diâmetro de pilar normal "
+"que são usados ​​em áreas problemáticas onde um pilar normal não pode caber."
+
+#: src/libslic3r/PrintConfig.cpp:2812
 msgid "Max bridges on a pillar"
 msgstr "Distância máxima de conexão entre pilares"
 
-#: src/libslic3r/PrintConfig.cpp:2660
+#: src/libslic3r/PrintConfig.cpp:2814
 msgid ""
-"Maximum number of bridges that can be placed on a pillar. Bridges hold "
-"support point pinheads and connect to pillars as small branches."
+"Maximum number of bridges that can be placed on a pillar. Bridges hold support "
+"point pinheads and connect to pillars as small branches."
 msgstr ""
-"Número máximo de pontes que podem ser colocadas em um pilar. As pontes "
-"seguram pinças de ponto de apoio e se conectam a pilares como pequenos ramos."
+"Número máximo de pontes que podem ser colocadas em um pilar. As pontes seguram "
+"pinças de ponto de apoio e se conectam a pilares como pequenos ramos."
 
-#: src/libslic3r/PrintConfig.cpp:2668
-msgid "Support pillar connection mode"
+#: src/libslic3r/PrintConfig.cpp:2822
+msgid "Pillar connection mode"
 msgstr "Modalidade da conexão da coluna da sustentação"
 
-#: src/libslic3r/PrintConfig.cpp:2669
+#: src/libslic3r/PrintConfig.cpp:2823
 msgid ""
 "Controls the bridge type between two neighboring pillars. Can be zig-zag, "
-"cross (double zig-zag) or dynamic which will automatically switch between "
-"the first two depending on the distance of the two pillars."
+"cross (double zig-zag) or dynamic which will automatically switch between the "
+"first two depending on the distance of the two pillars."
 msgstr ""
 "Controla o tipo de ponte entre dois pilares vizinhos. Pode ser zig-zag, Cruz "
 "(zig-zag dobro) ou dinâmico que comutará automaticamente entre os primeiros "
 "dois dependendo da distância dos dois pilares."
 
-#: src/libslic3r/PrintConfig.cpp:2677
+#: src/libslic3r/PrintConfig.cpp:2831
 msgid "Zig-Zag"
 msgstr "Zig-Zag"
 
-#: src/libslic3r/PrintConfig.cpp:2678
+#: src/libslic3r/PrintConfig.cpp:2832
 msgid "Cross"
 msgstr "Cruz"
 
-#: src/libslic3r/PrintConfig.cpp:2679
+#: src/libslic3r/PrintConfig.cpp:2833
 msgid "Dynamic"
 msgstr "Dinâmico"
 
-#: src/libslic3r/PrintConfig.cpp:2691
+#: src/libslic3r/PrintConfig.cpp:2845
 msgid "Pillar widening factor"
 msgstr "Fator de alargamento da coluna"
 
-#: src/libslic3r/PrintConfig.cpp:2693
+#: src/libslic3r/PrintConfig.cpp:2847
 msgid ""
-"Merging bridges or pillars into another pillars can increase the radius. "
-"Zero means no increase, one means full increase."
+"Merging bridges or pillars into another pillars can increase the radius. Zero "
+"means no increase, one means full increase."
 msgstr ""
 "Mesclar pontes ou pilares em outros pilares pode aumentar o raio. Zero "
 "significa que não há aumento, um significa aumento total."
 
-#: src/libslic3r/PrintConfig.cpp:2702
+#: src/libslic3r/PrintConfig.cpp:2856
 msgid "Support base diameter"
 msgstr "Diâmetro base do suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2704
+#: src/libslic3r/PrintConfig.cpp:2858
 msgid "Diameter in mm of the pillar base"
 msgstr "Diâmetro em mm da base do pilar"
 
-#: src/libslic3r/PrintConfig.cpp:2712
+#: src/libslic3r/PrintConfig.cpp:2866
 msgid "Support base height"
 msgstr "Altura base do suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2714
+#: src/libslic3r/PrintConfig.cpp:2868
 msgid "The height of the pillar base cone"
 msgstr "A altura do cone da base da coluna"
 
-#: src/libslic3r/PrintConfig.cpp:2721
+#: src/libslic3r/PrintConfig.cpp:2875
 msgid "Support base safety distance"
 msgstr "Distância da segurança da base da sustentação"
 
-#: src/libslic3r/PrintConfig.cpp:2724
+#: src/libslic3r/PrintConfig.cpp:2878
 msgid ""
 "The minimum distance of the pillar base from the model in mm. Makes sense in "
 "zero elevation mode where a gap according to this parameter is inserted "
 "between the model and the pad."
 msgstr ""
 "A distância mínima da base do pilar do modelo em mm. faz sentido no modo de "
-"elevação zero, onde uma lacuna de acordo com este parâmetro é inserida entre "
-"o modelo e o pad."
+"elevação zero, onde uma lacuna de acordo com este parâmetro é inserida entre o "
+"modelo e o pad."
 
-#: src/libslic3r/PrintConfig.cpp:2734
+#: src/libslic3r/PrintConfig.cpp:2888
 msgid "Critical angle"
 msgstr "Ângulo crítico"
 
-#: src/libslic3r/PrintConfig.cpp:2736
+#: src/libslic3r/PrintConfig.cpp:2890
 msgid "The default angle for connecting support sticks and junctions."
 msgstr "O ângulo padrão para conectar suportes e junções."
 
-#: src/libslic3r/PrintConfig.cpp:2744
+#: src/libslic3r/PrintConfig.cpp:2898
 msgid "Max bridge length"
 msgstr "Comprimento máximo da ponte"
 
-#: src/libslic3r/PrintConfig.cpp:2746
+#: src/libslic3r/PrintConfig.cpp:2900
 msgid "The max length of a bridge"
 msgstr "O comprimento máximo de uma ponte"
 
-#: src/libslic3r/PrintConfig.cpp:2753
+#: src/libslic3r/PrintConfig.cpp:2907
 msgid "Max pillar linking distance"
 msgstr "Distância máxima de conexão entre pilares"
 
-#: src/libslic3r/PrintConfig.cpp:2755
+#: src/libslic3r/PrintConfig.cpp:2909
 msgid ""
 "The max distance of two pillars to get linked with each other. A zero value "
 "will prohibit pillar cascading."
@@ -10302,11 +11735,7 @@ msgstr ""
 "A distância máxima de dois pilares para ficar ligado uns com os outros. Um "
 "valor zero irá proibir o pilar em cascata."
 
-#: src/libslic3r/PrintConfig.cpp:2763
-msgid "Object elevation"
-msgstr "Elevação do objeto"
-
-#: src/libslic3r/PrintConfig.cpp:2765
+#: src/libslic3r/PrintConfig.cpp:2919
 msgid ""
 "How much the supports should lift up the supported object. If \"Pad around "
 "object\" is enabled, this value is ignored."
@@ -10314,161 +11743,152 @@ msgstr ""
 "Quanto os suportes devem levantar o objecto suportado. Se \"pad em torno do "
 "objeto\" estiver habilitado, esse valor será ignorado."
 
-#: src/libslic3r/PrintConfig.cpp:2776
+#: src/libslic3r/PrintConfig.cpp:2930
 msgid "This is a relative measure of support points density."
 msgstr "Esta é uma medida relativa de densidade de pontos de suporte."
 
-#: src/libslic3r/PrintConfig.cpp:2782
+#: src/libslic3r/PrintConfig.cpp:2936
 msgid "Minimal distance of the support points"
 msgstr "Distância mínima dos pontos de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2784
+#: src/libslic3r/PrintConfig.cpp:2938
 msgid "No support points will be placed closer than this threshold."
 msgstr "Nenhum ponto de apoio será colocado mais perto do que este limiar."
 
-#: src/libslic3r/PrintConfig.cpp:2790
+#: src/libslic3r/PrintConfig.cpp:2944
 msgid "Use pad"
 msgstr "Use pad"
 
-#: src/libslic3r/PrintConfig.cpp:2792
+#: src/libslic3r/PrintConfig.cpp:2946
 msgid "Add a pad underneath the supported model"
 msgstr "Adicionar um pad por baixo do modelo suportado"
 
-#: src/libslic3r/PrintConfig.cpp:2797
+#: src/libslic3r/PrintConfig.cpp:2951
 msgid "Pad wall thickness"
 msgstr "Espessura da parede do pad"
 
-#: src/libslic3r/PrintConfig.cpp:2799
+#: src/libslic3r/PrintConfig.cpp:2953
 msgid "The thickness of the pad and its optional cavity walls."
 msgstr "A espessura da pad e suas paredes de cavidade opcionais."
 
-#: src/libslic3r/PrintConfig.cpp:2807
+#: src/libslic3r/PrintConfig.cpp:2961
 msgid "Pad wall height"
 msgstr "Altura da parede do pad"
 
-#: src/libslic3r/PrintConfig.cpp:2808
+#: src/libslic3r/PrintConfig.cpp:2962
 msgid ""
 "Defines the pad cavity depth. Set to zero to disable the cavity. Be careful "
 "when enabling this feature, as some resins may produce an extreme suction "
 "effect inside the cavity, which makes peeling the print off the vat foil "
 "difficult."
 msgstr ""
-"Define a profundidade da cavidade da pad. Defina como zero para desabilitar "
-"a cavidade. Tenha cuidado ao ativar este recurso, como algumas resinas podem "
+"Define a profundidade da cavidade da pad. Defina como zero para desabilitar a "
+"cavidade. Tenha cuidado ao ativar este recurso, como algumas resinas podem "
 "produzir um efeito de sucção extrema dentro da cavidade, o que torna a "
 "descascar a impressão fora da folha de IVA difícil."
 
-#: src/libslic3r/PrintConfig.cpp:2821
+#: src/libslic3r/PrintConfig.cpp:2975
 msgid "Pad brim size"
 msgstr "Tamanho da borda do bloco"
 
-#: src/libslic3r/PrintConfig.cpp:2822
+#: src/libslic3r/PrintConfig.cpp:2976
 msgid "How far should the pad extend around the contained geometry"
 msgstr "Até onde o bloco deve se estender em torno da geometria contida"
 
-#: src/libslic3r/PrintConfig.cpp:2832
+#: src/libslic3r/PrintConfig.cpp:2986
 msgid "Max merge distance"
 msgstr "Distância máxima da fusão"
 
-#: src/libslic3r/PrintConfig.cpp:2834
+#: src/libslic3r/PrintConfig.cpp:2988
 msgid ""
 "Some objects can get along with a few smaller pads instead of a single big "
-"one. This parameter defines how far the center of two smaller pads should "
-"be. If theyare closer, they will get merged into one pad."
+"one. This parameter defines how far the center of two smaller pads should be. "
+"If theyare closer, they will get merged into one pad."
 msgstr ""
 "Alguns objetos podem se dar bem com algumas pads menores em vez de um único "
-"grande. Este parâmetro define até que ponto o centro de duas pads menores "
-"deve ser. Se eles estão mais perto, eles vão se fundir em uma pad."
+"grande. Este parâmetro define até que ponto o centro de duas pads menores deve "
+"ser. Se eles estão mais perto, eles vão se fundir em uma pad."
 
-#: src/libslic3r/PrintConfig.cpp:2854
+#: src/libslic3r/PrintConfig.cpp:3008
 msgid "Pad wall slope"
 msgstr "Inclinação da parede da pad"
 
-#: src/libslic3r/PrintConfig.cpp:2856
+#: src/libslic3r/PrintConfig.cpp:3010
 msgid ""
-"The slope of the pad wall relative to the bed plane. 90 degrees means "
-"straight walls."
+"The slope of the pad wall relative to the bed plane. 90 degrees means straight "
+"walls."
 msgstr ""
-"A inclinação da parede da pad em relação ao plano da mesa. 90 graus "
-"significa paredes retas."
+"A inclinação da parede da pad em relação ao plano da mesa. 90 graus significa "
+"paredes retas."
 
-#: src/libslic3r/PrintConfig.cpp:2865
-msgid "Pad around object"
-msgstr "Pad em torno do objeto"
-
-#: src/libslic3r/PrintConfig.cpp:2867
+#: src/libslic3r/PrintConfig.cpp:3021
 msgid "Create pad around object and ignore the support elevation"
 msgstr "Criar pad ao redor do objeto e ignorar a elevação de suporte"
 
-#: src/libslic3r/PrintConfig.cpp:2872
+#: src/libslic3r/PrintConfig.cpp:3026
 msgid "Pad around object everywhere"
 msgstr "Pad em torno do objeto em todo lugar"
 
-#: src/libslic3r/PrintConfig.cpp:2874
+#: src/libslic3r/PrintConfig.cpp:3028
 msgid "Force pad around object everywhere"
 msgstr "Forçar Pad em torno do objeto em todo lugar"
 
-#: src/libslic3r/PrintConfig.cpp:2879
+#: src/libslic3r/PrintConfig.cpp:3033
 msgid "Pad object gap"
 msgstr "Vão entre o pad e o objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2881
+#: src/libslic3r/PrintConfig.cpp:3035
 msgid ""
-"The gap between the object bottom and the generated pad in zero elevation "
-"mode."
+"The gap between the object bottom and the generated pad in zero elevation mode."
 msgstr ""
 "A lacuna entre a parte inferior do objeto e o pad gerado no modo de elevação "
 "zero."
 
-#: src/libslic3r/PrintConfig.cpp:2890
+#: src/libslic3r/PrintConfig.cpp:3044
 msgid "Pad object connector stride"
 msgstr "Inserir pad entre o objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2892
+#: src/libslic3r/PrintConfig.cpp:3046
 msgid ""
 "Distance between two connector sticks which connect the object and the "
 "generated pad."
 msgstr ""
 "Distância entre duas varas do conector que conectam o objeto e a pad gerada."
 
-#: src/libslic3r/PrintConfig.cpp:2899
+#: src/libslic3r/PrintConfig.cpp:3053
 msgid "Pad object connector width"
 msgstr "Largura do conector do objeto pad"
 
-#: src/libslic3r/PrintConfig.cpp:2901
+#: src/libslic3r/PrintConfig.cpp:3055
 msgid ""
 "Width of the connector sticks which connect the object and the generated pad."
 msgstr "Largura das varas do conector que conectam o objeto e a pad gerada."
 
-#: src/libslic3r/PrintConfig.cpp:2908
+#: src/libslic3r/PrintConfig.cpp:3062
 msgid "Pad object connector penetration"
 msgstr "Pad objeto conector de penetração"
 
-#: src/libslic3r/PrintConfig.cpp:2911
+#: src/libslic3r/PrintConfig.cpp:3065
 msgid "How much should the tiny connectors penetrate into the model body."
 msgstr "Quanto deve os conectores minúsculos penetrar no corpo do modelo."
 
-#: src/libslic3r/PrintConfig.cpp:2918
+#: src/libslic3r/PrintConfig.cpp:3072
 msgid "Enable hollowing"
 msgstr "Ativar o modo oco"
 
-#: src/libslic3r/PrintConfig.cpp:2920
+#: src/libslic3r/PrintConfig.cpp:3074
 msgid "Hollow out a model to have an empty interior"
 msgstr "Deixar o modelo oco para ter um interior vazio"
 
-#: src/libslic3r/PrintConfig.cpp:2925
+#: src/libslic3r/PrintConfig.cpp:3079
 msgid "Wall thickness"
 msgstr "Espessura da parede"
 
-#: src/libslic3r/PrintConfig.cpp:2927
+#: src/libslic3r/PrintConfig.cpp:3081
 msgid "Minimum wall thickness of a hollowed model."
 msgstr "Espessura mínima da parede de um modelo oco."
 
-#: src/libslic3r/PrintConfig.cpp:2935
-msgid "Accuracy"
-msgstr "Precisão"
-
-#: src/libslic3r/PrintConfig.cpp:2937
+#: src/libslic3r/PrintConfig.cpp:3091
 msgid ""
 "Performance vs accuracy of calculation. Lower values may produce unwanted "
 "artifacts."
@@ -10476,69 +11896,76 @@ msgstr ""
 "Desempenho versus precisão do cálculo. Valores mais baixos podem produzir "
 "artefatos indesejados."
 
-#: src/libslic3r/PrintConfig.cpp:2947
+#: src/libslic3r/PrintConfig.cpp:3101
 msgid ""
 "Hollowing is done in two steps: first, an imaginary interior is calculated "
-"deeper (offset plus the closing distance) in the object and then it's "
-"inflated back to the specified offset. A greater closing distance makes the "
-"interior more rounded. At zero, the interior will resemble the exterior the "
-"most."
+"deeper (offset plus the closing distance) in the object and then it's inflated "
+"back to the specified offset. A greater closing distance makes the interior "
+"more rounded. At zero, the interior will resemble the exterior the most."
 msgstr ""
 "O oco é feito em duas etapas: primeiro, um interior imaginário é calculado "
 "mais fundo (deslocamento mais a distância de fechamento) no objeto e, em "
 "seguida, é inflado de volta para o deslocamento especificado. Uma maior "
-"distância de fechamento torna o interior mais arredondado. Ao zero, o "
-"interior será o mais parecido com o exterior."
+"distância de fechamento torna o interior mais arredondado. Ao zero, o interior "
+"será o mais parecido com o exterior."
 
-#: src/libslic3r/PrintConfig.cpp:3330
+#: src/libslic3r/PrintConfig.cpp:3513
 msgid "Export OBJ"
 msgstr "Exportar OBJ"
 
-#: src/libslic3r/PrintConfig.cpp:3331
+#: src/libslic3r/PrintConfig.cpp:3514
 msgid "Export the model(s) as OBJ."
 msgstr "Exportar modelo(s) como OBJ."
 
-#: src/libslic3r/PrintConfig.cpp:3342
+#: src/libslic3r/PrintConfig.cpp:3525
 msgid "Export SLA"
 msgstr "Exportar SLA"
 
-#: src/libslic3r/PrintConfig.cpp:3343
+#: src/libslic3r/PrintConfig.cpp:3526
 msgid "Slice the model and export SLA printing layers as PNG."
 msgstr "Fatiar o modelo e exportar as camadas de impressão SLA como PNG."
 
-#: src/libslic3r/PrintConfig.cpp:3348
+#: src/libslic3r/PrintConfig.cpp:3531
 msgid "Export 3MF"
 msgstr "Exportar 3MF"
 
-#: src/libslic3r/PrintConfig.cpp:3349
+#: src/libslic3r/PrintConfig.cpp:3532
 msgid "Export the model(s) as 3MF."
 msgstr "Exportar modelo(s) como 3MF."
 
-#: src/libslic3r/PrintConfig.cpp:3353
+#: src/libslic3r/PrintConfig.cpp:3536
 msgid "Export AMF"
 msgstr "Exportar AMF"
 
-#: src/libslic3r/PrintConfig.cpp:3354
+#: src/libslic3r/PrintConfig.cpp:3537
 msgid "Export the model(s) as AMF."
 msgstr "Exportar modelo(s) como AMF."
 
-#: src/libslic3r/PrintConfig.cpp:3358
+#: src/libslic3r/PrintConfig.cpp:3541
 msgid "Export STL"
 msgstr "Exportar STL"
 
-#: src/libslic3r/PrintConfig.cpp:3359
+#: src/libslic3r/PrintConfig.cpp:3542
 msgid "Export the model(s) as STL."
 msgstr "Exportar modelo(s) como STL."
 
-#: src/libslic3r/PrintConfig.cpp:3364
+#: src/libslic3r/PrintConfig.cpp:3547
 msgid "Slice the model and export toolpaths as G-code."
 msgstr "Fatiar o modelo e exportar o percurso da ferramenta como G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3369
+#: src/libslic3r/PrintConfig.cpp:3552
+msgid "G-code viewer"
+msgstr "Tipo de G-code"
+
+#: src/libslic3r/PrintConfig.cpp:3553
+msgid "Visualize an already sliced and saved G-code"
+msgstr "Visualize um G-code já fatiado e salvo"
+
+#: src/libslic3r/PrintConfig.cpp:3558
 msgid "Slice"
 msgstr "Fatiar"
 
-#: src/libslic3r/PrintConfig.cpp:3370
+#: src/libslic3r/PrintConfig.cpp:3559
 msgid ""
 "Slice the model as FFF or SLA based on the printer_technology configuration "
 "value."
@@ -10546,71 +11973,71 @@ msgstr ""
 "Divida o modelo como FFF ou SLA com base no valor de config. "
 "printer_technology."
 
-#: src/libslic3r/PrintConfig.cpp:3375
+#: src/libslic3r/PrintConfig.cpp:3564
 msgid "Help"
 msgstr "Ajuda"
 
-#: src/libslic3r/PrintConfig.cpp:3376
+#: src/libslic3r/PrintConfig.cpp:3565
 msgid "Show this help."
 msgstr "Mostrar esta ajuda."
 
-#: src/libslic3r/PrintConfig.cpp:3381
+#: src/libslic3r/PrintConfig.cpp:3570
 msgid "Help (FFF options)"
 msgstr "Ajuda (opções FDM)"
 
-#: src/libslic3r/PrintConfig.cpp:3382
+#: src/libslic3r/PrintConfig.cpp:3571
 msgid "Show the full list of print/G-code configuration options."
 msgstr "Mostre a lista completa de opções de config. do Print/G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3386
+#: src/libslic3r/PrintConfig.cpp:3575
 msgid "Help (SLA options)"
 msgstr "Ajuda (opções SLA)"
 
-#: src/libslic3r/PrintConfig.cpp:3387
+#: src/libslic3r/PrintConfig.cpp:3576
 msgid "Show the full list of SLA print configuration options."
 msgstr "Mostrar a lista completa de opções de config. de impressão de SLA."
 
-#: src/libslic3r/PrintConfig.cpp:3391
+#: src/libslic3r/PrintConfig.cpp:3580
 msgid "Output Model Info"
 msgstr "Informações do modelo de saída"
 
-#: src/libslic3r/PrintConfig.cpp:3392
+#: src/libslic3r/PrintConfig.cpp:3581
 msgid "Write information about the model to the console."
 msgstr "Escreva informações sobre o modelo para o console."
 
-#: src/libslic3r/PrintConfig.cpp:3396
+#: src/libslic3r/PrintConfig.cpp:3585
 msgid "Save config file"
-msgstr "Salvar arquivo de config."
+msgstr "Salvar arquivo de config"
 
-#: src/libslic3r/PrintConfig.cpp:3397
+#: src/libslic3r/PrintConfig.cpp:3586
 msgid "Save configuration to the specified file."
 msgstr "Salvar config. para o arquivo específico."
 
-#: src/libslic3r/PrintConfig.cpp:3407
+#: src/libslic3r/PrintConfig.cpp:3596
 msgid "Align XY"
 msgstr "Alinhar XY"
 
-#: src/libslic3r/PrintConfig.cpp:3408
+#: src/libslic3r/PrintConfig.cpp:3597
 msgid "Align the model to the given point."
 msgstr "Alinhar modelo de acordo com o ponto inserido."
 
-#: src/libslic3r/PrintConfig.cpp:3413
+#: src/libslic3r/PrintConfig.cpp:3602
 msgid "Cut model at the given Z."
 msgstr "Cortar modelo ao Z fornecido."
 
-#: src/libslic3r/PrintConfig.cpp:3434
+#: src/libslic3r/PrintConfig.cpp:3623
 msgid "Center"
 msgstr "Centralizar"
 
-#: src/libslic3r/PrintConfig.cpp:3435
+#: src/libslic3r/PrintConfig.cpp:3624
 msgid "Center the print around the given center."
 msgstr "Centralizar a impressão de acordo com o centro informado."
 
-#: src/libslic3r/PrintConfig.cpp:3439
+#: src/libslic3r/PrintConfig.cpp:3628
 msgid "Don't arrange"
 msgstr "Não organizar"
 
-#: src/libslic3r/PrintConfig.cpp:3440
+#: src/libslic3r/PrintConfig.cpp:3629
 msgid ""
 "Do not rearrange the given models before merging and keep their original XY "
 "coordinates."
@@ -10618,27 +12045,23 @@ msgstr ""
 "Não reorganize os modelos fornecidos antes de Mesclar e manter suas "
 "coordenadas XY originais."
 
-#: src/libslic3r/PrintConfig.cpp:3443
+#: src/libslic3r/PrintConfig.cpp:3632
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: src/libslic3r/PrintConfig.cpp:3444
+#: src/libslic3r/PrintConfig.cpp:3633
 msgid "Multiply copies by this factor."
 msgstr "Multiplicar cópias por esse fator."
 
-#: src/libslic3r/PrintConfig.cpp:3448
+#: src/libslic3r/PrintConfig.cpp:3637
 msgid "Duplicate by grid"
 msgstr "Duplicar por grade"
 
-#: src/libslic3r/PrintConfig.cpp:3449
+#: src/libslic3r/PrintConfig.cpp:3638
 msgid "Multiply copies by creating a grid."
 msgstr "Multiplique cópias criando uma grade."
 
-#: src/libslic3r/PrintConfig.cpp:3452
-msgid "Merge"
-msgstr "Mesclar"
-
-#: src/libslic3r/PrintConfig.cpp:3453
+#: src/libslic3r/PrintConfig.cpp:3642
 msgid ""
 "Arrange the supplied models in a plate and merge them in a single model in "
 "order to perform actions once."
@@ -10646,7 +12069,7 @@ msgstr ""
 "Organize os modelos fornecidos em uma placa e junte-os em um único modelo, a "
 "fim de executar ações uma só vez."
 
-#: src/libslic3r/PrintConfig.cpp:3458
+#: src/libslic3r/PrintConfig.cpp:3647
 msgid ""
 "Try to repair any non-manifold meshes (this option is implicitly added "
 "whenever we need to slice the model to perform the requested action)."
@@ -10655,31 +12078,31 @@ msgstr ""
 "adicionada sempre que precisamos cortar o modelo para executar a ação "
 "solicitada)."
 
-#: src/libslic3r/PrintConfig.cpp:3462
+#: src/libslic3r/PrintConfig.cpp:3651
 msgid "Rotation angle around the Z axis in degrees."
 msgstr "Ângulo de rotação ao redor do eixo Zem graus."
 
-#: src/libslic3r/PrintConfig.cpp:3466
+#: src/libslic3r/PrintConfig.cpp:3655
 msgid "Rotate around X"
 msgstr "Rotacionar no X"
 
-#: src/libslic3r/PrintConfig.cpp:3467
+#: src/libslic3r/PrintConfig.cpp:3656
 msgid "Rotation angle around the X axis in degrees."
 msgstr "Ângulo de rotação ao redor do eixo X em graus."
 
-#: src/libslic3r/PrintConfig.cpp:3471
+#: src/libslic3r/PrintConfig.cpp:3660
 msgid "Rotate around Y"
 msgstr "Rotacionar no Y"
 
-#: src/libslic3r/PrintConfig.cpp:3472
+#: src/libslic3r/PrintConfig.cpp:3661
 msgid "Rotation angle around the Y axis in degrees."
 msgstr "Ângulo de rotação ao redor do eixo Y em graus."
 
-#: src/libslic3r/PrintConfig.cpp:3477
+#: src/libslic3r/PrintConfig.cpp:3666
 msgid "Scaling factor or percentage."
 msgstr "Escalando fator ou porcentagem."
 
-#: src/libslic3r/PrintConfig.cpp:3482
+#: src/libslic3r/PrintConfig.cpp:3671
 msgid ""
 "Detect unconnected parts in the given model(s) and split them into separate "
 "objects."
@@ -10687,64 +12110,74 @@ msgstr ""
 "Detecte peças não conectadas em um determinado modelo (s) e divida-as em "
 "objetos separados."
 
-#: src/libslic3r/PrintConfig.cpp:3485
+#: src/libslic3r/PrintConfig.cpp:3674
 msgid "Scale to Fit"
 msgstr "Dimensionar para caber"
 
-#: src/libslic3r/PrintConfig.cpp:3486
+#: src/libslic3r/PrintConfig.cpp:3675
 msgid "Scale to fit the given volume."
 msgstr "Escalar para se adequar ao volume informado."
 
-#: src/libslic3r/PrintConfig.cpp:3495
+#: src/libslic3r/PrintConfig.cpp:3684
 msgid "Ignore non-existent config files"
 msgstr "Ignorar arquivos de config. não existentes"
 
-#: src/libslic3r/PrintConfig.cpp:3496
+#: src/libslic3r/PrintConfig.cpp:3685
 msgid "Do not fail if a file supplied to --load does not exist."
 msgstr "Não falhe se um arquivo fornecido para--carregamento não existe."
 
-#: src/libslic3r/PrintConfig.cpp:3499
+#: src/libslic3r/PrintConfig.cpp:3688
 msgid "Load config file"
-msgstr "Carregar arquivo de config."
+msgstr "Carregar arquivo de config"
 
-#: src/libslic3r/PrintConfig.cpp:3500
+#: src/libslic3r/PrintConfig.cpp:3689
 msgid ""
 "Load configuration from the specified file. It can be used more than once to "
 "load options from multiple files."
 msgstr ""
-"Carregar a config. do arquivo especificado. Ele pode ser usado mais de uma "
-"vez para carregar opções de vários arquivos."
+"Carregar a config. do arquivo especificado. Ele pode ser usado mais de uma vez "
+"para carregar opções de vários arquivos."
 
-#: src/libslic3r/PrintConfig.cpp:3503
+#: src/libslic3r/PrintConfig.cpp:3692
 msgid "Output File"
 msgstr "Arquivo de saída"
 
-#: src/libslic3r/PrintConfig.cpp:3504
+#: src/libslic3r/PrintConfig.cpp:3693
 msgid ""
-"The file where the output will be written (if not specified, it will be "
-"based on the input file)."
+"The file where the output will be written (if not specified, it will be based "
+"on the input file)."
 msgstr ""
-"O arquivo onde a saída será gravada (se não for especificado, ele será "
-"baseado no arquivo de entrada)."
+"O arquivo onde a saída será gravada (se não for especificado, ele será baseado "
+"no arquivo de entrada)."
 
-#: src/libslic3r/PrintConfig.cpp:3514
+#: src/libslic3r/PrintConfig.cpp:3698
+msgid ""
+"If enabled, the command line arguments are sent to an existing instance of GUI "
+"PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the "
+"\"single_instance\" configuration value from application preferences."
+msgstr ""
+"Se habilitado, os argumentos da linha de comando são enviados para uma "
+"instância existente do GUI PrusaSlicer ou uma janela do PrusaSlicer existente "
+"é ativada. Substitui o valor de configuração \"single_instance\" das "
+"preferências do aplicativo."
+
+#: src/libslic3r/PrintConfig.cpp:3709
 msgid "Data directory"
 msgstr "Diretório de dados"
 
-#: src/libslic3r/PrintConfig.cpp:3515
+#: src/libslic3r/PrintConfig.cpp:3710
 msgid ""
-"Load and store settings at the given directory. This is useful for "
-"maintaining different profiles or including configurations from a network "
-"storage."
+"Load and store settings at the given directory. This is useful for maintaining "
+"different profiles or including configurations from a network storage."
 msgstr ""
 "Carregar e armazenar as config. no diretório especificado. Isso é útil para "
 "manter perfis diferentes ou incluir config. de um armazenamento de rede."
 
-#: src/libslic3r/PrintConfig.cpp:3518
+#: src/libslic3r/PrintConfig.cpp:3713
 msgid "Logging level"
 msgstr "Nível de registro"
 
-#: src/libslic3r/PrintConfig.cpp:3519
+#: src/libslic3r/PrintConfig.cpp:3714
 msgid ""
 "Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:"
 "trace\n"
@@ -10752,56 +12185,111 @@ msgid ""
 msgstr ""
 "Define a sensibilidade de registro. 0:fatal, 1:erro, 2:warning, 3:info, 4:"
 "debug, 5:trace\n"
-"Por exemplo. loglevel=2 logs de mensagens fatais, de nível de erro e de "
-"aviso."
+"Por exemplo. loglevel=2 logs de mensagens fatais, de nível de erro e de aviso."
 
-#: src/libslic3r/PrintConfig.cpp:3525
+#: src/libslic3r/PrintConfig.cpp:3720
 msgid "Render with a software renderer"
 msgstr "Renderizar com um software renderizador"
 
-#: src/libslic3r/PrintConfig.cpp:3526
+#: src/libslic3r/PrintConfig.cpp:3721
 msgid ""
-"Render with a software renderer. The bundled MESA software renderer is "
-"loaded instead of the default OpenGL driver."
+"Render with a software renderer. The bundled MESA software renderer is loaded "
+"instead of the default OpenGL driver."
 msgstr ""
 "Renderizar com um software renderizador. O renderizador de software MESA "
 "empacotado é carregado em vez do driver OpenGL padrão."
 
-#: src/libslic3r/PrintObject.cpp:108
+#: src/libslic3r/Zipper.cpp:27
+msgid "Error with zip archive"
+msgstr "Erro com arquivo zip"
+
+#: src/libslic3r/PrintObject.cpp:114
 msgid "Processing triangulated mesh"
 msgstr "Processando malha triangulada"
 
-#: src/libslic3r/PrintObject.cpp:152
+#: src/libslic3r/PrintObject.cpp:158
 msgid "Generating perimeters"
 msgstr "Gerando perímetros"
 
-#: src/libslic3r/PrintObject.cpp:255
+#: src/libslic3r/PrintObject.cpp:261
 msgid "Preparing infill"
 msgstr "Preparando o preenchimento"
 
-#: src/libslic3r/PrintObject.cpp:395
+#: src/libslic3r/PrintObject.cpp:422
 msgid "Generating support material"
 msgstr "Gerando material de suporte"
 
-#: src/libslic3r/GCode/PreviewData.cpp:347
-msgid "Height (mm)"
-msgstr "Altura (mm)"
+#~ msgid "You have to select at least one filament for selected printers"
+#~ msgstr ""
+#~ "Você tem que selecionar pelo menos um filamento para impressoras "
+#~ "selecionadas"
 
-#: src/libslic3r/GCode/PreviewData.cpp:349
-msgid "Width (mm)"
-msgstr "Espessura (mm)"
+#~ msgid "Layer height:"
+#~ msgstr "Altura da camada:"
 
-#: src/libslic3r/GCode/PreviewData.cpp:351
-msgid "Speed (mm/s)"
-msgstr "Velocidade (mm/s)"
+#~ msgid "Discard changes and continue anyway?"
+#~ msgstr "Descartar mudanças e continuar assim mesmo?"
 
-#: src/libslic3r/GCode/PreviewData.cpp:353
-msgid "Fan Speed (%)"
-msgstr "Velocidade da ventoinha (%)"
+#~ msgid "Unsaved Presets"
+#~ msgstr "config. não salvas"
 
-#: src/libslic3r/GCode/PreviewData.cpp:355
-msgid "Volumetric flow rate (mm³/s)"
-msgstr "Vazão volumétrica (mm³/s)"
+#~ msgid "Show/Hide Legend"
+#~ msgstr "Ligar/Desligar Legenda"
+
+#, c-format
+#~ msgid "Processing input file %s"
+#~ msgstr "Processando o arquivo de entrada %s"
+
+#~ msgid "Hollow"
+#~ msgstr "Vazado"
+
+#~ msgid "Indexing hollowed object"
+#~ msgstr "Indexando objeto oco"
+
+#~ msgid "Hollowing cancelled."
+#~ msgstr "Cancelado"
+
+#~ msgid "Hollowing done."
+#~ msgstr "Deixado oco pronto."
+
+#~ msgid "Hollowing failed."
+#~ msgstr "Deixar oco falhou."
+
+#~ msgid "Add/Remove filaments"
+#~ msgstr "Adicionar/Remover filamentos"
+
+#~ msgid "USB/Serial connection"
+#~ msgstr "Conexão USB/serial"
+
+#~ msgid "Rescan serial ports"
+#~ msgstr "Portas seriais de Rescan"
+
+#~ msgid "Connection to printer works correctly."
+#~ msgstr "A ligação à impressora funciona corretamente."
+
+#~ msgid "Connection failed."
+#~ msgstr "A conexão falhou."
+
+#, c-format
+#~ msgid "Default preset (%s)"
+#~ msgstr "Predefinição padrão ( %s)"
+
+#, c-format
+#~ msgid "Preset (%s)"
+#~ msgstr "Predefinição ( %s)"
+
+#~ msgid "is not compatible with printer"
+#~ msgstr "não é compatível com a impressora"
+
+#~ msgid "is not compatible with print profile"
+#~ msgstr "não é compatível com o perfil de impressão"
+
+#~ msgctxt "PresetName"
+#~ msgid "%1% - Copy"
+#~ msgstr "%1% - cópia"
+
+#~ msgid "Support head penetration"
+#~ msgstr "Suporte de penetração da cabeça"
 
 #~ msgid "Layers heights"
 #~ msgstr "Altura de camada"
@@ -10825,8 +12313,7 @@ msgstr "Vazão volumétrica (mm³/s)"
 #~ msgstr "Selecionar nova extrusora para objeto/parte"
 
 #~ msgid "Select extruder number for selected objects and/or parts"
-#~ msgstr ""
-#~ "Selecione o número da extrusora para objetos e/ou peças selecionados"
+#~ msgstr "Selecione o número da extrusora para objetos e/ou peças selecionados"
 
 #~ msgid "Object Manipulation"
 #~ msgstr "Manipulação de objeto"
@@ -10853,8 +12340,8 @@ msgstr "Vazão volumétrica (mm³/s)"
 #~ msgstr "O projeto selecionado não está mais disponível"
 
 #~ msgid ""
-#~ "Messages with severity lower or eqal to the loglevel will be printed out. "
-#~ "0:trace, 1:debug, 2:info, 3:warning, 4:error, 5:fatal"
+#~ "Messages with severity lower or eqal to the loglevel will be printed out. 0:"
+#~ "trace, 1:debug, 2:info, 3:warning, 4:error, 5:fatal"
 #~ msgstr ""
-#~ "Mensagens com severidade menor ou igual para o LogLevel serão impressos. "
-#~ "0: Trace, 1: debug, 2: info, 3: aviso, 4: erro, 5: fatal"
+#~ "Mensagens com severidade menor ou igual para o LogLevel serão impressos. 0: "
+#~ "Trace, 1: debug, 2: info, 3: aviso, 4: erro, 5: fatal"

From df19697d8e2b78c8958fc5cabfa5b4aed9f52695 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Wed, 18 Nov 2020 15:14:49 +0100
Subject: [PATCH 047/138] Fixed Shift+A to arrange selection

---
 src/slic3r/GUI/GLCanvas3D.cpp | 34 +++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 495c165b5..f6ec0bd58 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2909,12 +2909,23 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
         return;
     }
 
-    if ((keyCode == WXK_ESCAPE) && (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item()))
+    if (keyCode == WXK_ESCAPE && (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item()))
         return;
 
     if (m_gizmos.on_char(evt))
         return;
 
+    auto action_plus = [this](wxKeyEvent& evt) {
+        if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
+            post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt));
+        else
+            post_event(Event<int>(EVT_GLCANVAS_INCREASE_INSTANCES, +1));
+    };
+
+    auto action_a = [this]() {
+        post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE));
+    };
+
 //#ifdef __APPLE__
 //    ctrlMask |= wxMOD_RAW_CONTROL;
 //#endif /* __APPLE__ */
@@ -3002,8 +3013,11 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
     }
     else  if ((evt.GetModifiers() & shiftMask) != 0) {
         switch (keyCode) {
-        case 'g':
-        case 'G': {
+        case '+': { action_plus(evt); break; }
+        case 'A':
+        case 'a': { action_a(); break; }
+        case 'G':
+        case 'g': {
             if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
                 post_event(wxKeyEvent(EVT_GLCANVAS_JUMP_TO, evt));
             break;
@@ -3029,13 +3043,8 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
         case '4': { select_view("rear"); break; }
         case '5': { select_view("left"); break; }
         case '6': { select_view("right"); break; }
-        case '+': { 
-                    if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
-                        post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt)); 
-                    else
-                        post_event(Event<int>(EVT_GLCANVAS_INCREASE_INSTANCES, +1)); 
-                    break; }
-        case '-': {  
+        case '+': { action_plus(evt); break; }
+        case '-': {
                     if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
                         post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt)); 
                     else
@@ -3043,7 +3052,7 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
                     break; }
         case '?': { post_event(SimpleEvent(EVT_GLCANVAS_QUESTION_MARK)); break; }
         case 'A':
-        case 'a': { post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE)); break; }
+        case 'a': { action_a(); break; }
         case 'B':
         case 'b': { zoom_to_bed(); break; }
         case 'E':
@@ -3079,8 +3088,7 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
         {
             if (!m_selection.is_empty())
                 zoom_to_selection();
-            else
-            {
+            else {
                 if (!m_volumes.empty())
                     zoom_to_volumes();
                 else

From 03b336145f8f1003680d24697d4c0f944c00453a Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Wed, 18 Nov 2020 17:00:08 +0100
Subject: [PATCH 048/138] Updated UI for the "infill_anchor" parameter

---
 src/libslic3r/PrintConfig.cpp | 13 +++++++
 src/slic3r/GUI/Field.cpp      | 66 ++++++++++++++---------------------
 src/slic3r/GUI/Tab.cpp        |  2 +-
 3 files changed, 40 insertions(+), 41 deletions(-)

diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 7eab5ae72..e59e67cff 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -1057,6 +1057,19 @@ void PrintConfigDef::init_fff_params()
                      "If expressed as percentage (example: 15%) it is calculated over infill extrusion width.");
     def->sidetext = L("mm or %");
     def->ratio_over = "infill_extrusion_width";
+    def->gui_type = "f_enum_open";
+    def->enum_values.push_back("0");
+    def->enum_values.push_back("1");
+    def->enum_values.push_back("2");
+    def->enum_values.push_back("5");
+    def->enum_values.push_back("10");
+    def->enum_values.push_back("1000");
+    def->enum_labels.push_back(L("0 (unprintable)"));
+    def->enum_labels.push_back("1 mm");
+    def->enum_labels.push_back("2 mm");
+    def->enum_labels.push_back("5 mm");
+    def->enum_labels.push_back("10 mm");
+    def->enum_labels.push_back(L("1000 (unlimited)"));
     def->mode = comAdvanced;
     def->set_default_value(new ConfigOptionFloatOrPercent(300, true));
 
diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index bc6124b80..a92a98844 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -867,7 +867,7 @@ void Choice::BUILD() {
     if (m_is_editable) {
         temp->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) {
             e.Skip();
-            if (m_opt.type == coStrings) {
+            if (m_opt.type == coStrings || m_opt.type == coFloatOrPercent) {
                 on_change_field();
                 return;
             }
@@ -898,59 +898,42 @@ void Choice::set_selection()
 
     choice_ctrl* field = dynamic_cast<choice_ctrl*>(window);
 	switch (m_opt.type) {
-	case coFloat:
-	case coPercent:	{
-		double val = m_opt.default_value->getFloat();
-		text_value = val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 1);
-		size_t idx = 0;
-		for (auto el : m_opt.enum_values)
-		{
-			if (el == text_value)
-				break;
-			++idx;
-		}
-//		if (m_opt.type == coPercent) text_value += "%";
-		idx == m_opt.enum_values.size() ?
-			field->SetValue(text_value) :
-			field->SetSelection(idx);
-		break;
-	}
 	case coEnum:{
 		int id_value = m_opt.get_default_value<ConfigOptionEnum<SeamPosition>>()->value; //!!
         field->SetSelection(id_value);
 		break;
 	}
+	case coFloat:
+	case coPercent:	{
+		double val = m_opt.default_value->getFloat();
+		text_value = val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 1);
+		break;
+	}
 	case coInt:{
-		int val = m_opt.default_value->getInt(); //!!
-		text_value = wxString::Format(_T("%i"), int(val));
-		size_t idx = 0;
-		for (auto el : m_opt.enum_values)
-		{
-			if (el == text_value)
-				break;
-			++idx;
-		}
-		idx == m_opt.enum_values.size() ?
-			field->SetValue(text_value) :
-			field->SetSelection(idx);
+		text_value = wxString::Format(_T("%i"), int(m_opt.default_value->getInt()));
 		break;
 	}
 	case coStrings:{
 		text_value = m_opt.get_default_value<ConfigOptionStrings>()->get_at(m_opt_idx);
+		break;
+	}
+	case coFloatOrPercent: {
+		text_value = double_to_string(m_opt.default_value->getFloat());
+		if (m_opt.get_default_value<ConfigOptionFloatOrPercent>()->percent)
+			text_value += "%";
+		break;
+	}
+    default: break;
+	}
 
-		size_t idx = 0;
-		for (auto el : m_opt.enum_values)
-		{
+	if (!text_value.IsEmpty()) {
+		int idx = 0;
+		for (auto el : m_opt.enum_values) {
 			if (el == text_value)
 				break;
 			++idx;
 		}
-		idx == m_opt.enum_values.size() ?
-			field->SetValue(text_value) :
-			field->SetSelection(idx);
-		break;
-	}
-    default: break;
+		idx == m_opt.enum_values.size() ? field->SetValue(text_value) : field->SetSelection(idx);
 	}
 }
 
@@ -984,6 +967,7 @@ void Choice::set_value(const boost::any& value, bool change_event)
 	case coInt:
 	case coFloat:
 	case coPercent:
+	case coFloatOrPercent:
 	case coString:
 	case coStrings: {
 		wxString text_value;
@@ -1137,7 +1121,9 @@ boost::any& Choice::get_value()
             (ret_str != m_opt.enum_values[ret_enum] && ret_str != _(m_opt.enum_labels[ret_enum])))
 			// modifies ret_string!
             get_value_by_opt_type(ret_str);
-        else 
+        else if (m_opt.type == coFloatOrPercent)
+            m_value = m_opt.enum_values[ret_enum];
+        else
             m_value = atof(m_opt.enum_values[ret_enum].c_str());
     }
 	else	
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index d05b5040f..7a4d9ce3d 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -1422,9 +1422,9 @@ void TabPrint::build()
         optgroup = page->new_optgroup(L("Infill"));
         optgroup->append_single_option_line("fill_density", category_path + "fill-density");
         optgroup->append_single_option_line("fill_pattern", category_path + "fill-pattern");
+        optgroup->append_single_option_line("infill_anchor", category_path + "fill-pattern");
         optgroup->append_single_option_line("top_fill_pattern", category_path + "top-fill-pattern");
         optgroup->append_single_option_line("bottom_fill_pattern", category_path + "bottom-fill-pattern");
-        optgroup->append_single_option_line("infill_anchor", category_path + "fill-pattern");
 
         optgroup = page->new_optgroup(L("Ironing"));
         optgroup->append_single_option_line("ironing");

From 4cc3e939da6511c7f4625a490bbc60c27c3ea545 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Wed, 18 Nov 2020 17:25:05 +0100
Subject: [PATCH 049/138] Localization: Update for the CZ, DE, ES, FR, IT and
 PL languages

---
 resources/localization/cs/PrusaSlicer.mo     |  Bin 279436 -> 280144 bytes
 resources/localization/cs/PrusaSlicer_cs.po  |  153 +-
 resources/localization/de/PrusaSlicer.mo     |  Bin 256755 -> 288040 bytes
 resources/localization/de/PrusaSlicer_de.po  | 6221 +++++++++-------
 resources/localization/es/PrusaSlicer.mo     |  Bin 255091 -> 287640 bytes
 resources/localization/es/PrusaSlicer_es.po  | 6254 +++++++++-------
 resources/localization/fr/PrusaSlicer.mo     |  Bin 262908 -> 295290 bytes
 resources/localization/fr/PrusaSlicer_fr.po  | 6237 +++++++++-------
 resources/localization/it/PrusaSlicer.mo     |  Bin 251443 -> 282315 bytes
 resources/localization/it/PrusaSlicer_it.po  | 6866 +++++++++++-------
 resources/localization/pl/PrusaSlicer.mo     |  Bin 249993 -> 280143 bytes
 resources/localization/pl/PrusaSlicer_pl.po  | 6451 +++++++++-------
 src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp |    2 +-
 src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp        |    2 +-
 14 files changed, 19560 insertions(+), 12626 deletions(-)

diff --git a/resources/localization/cs/PrusaSlicer.mo b/resources/localization/cs/PrusaSlicer.mo
index 27449080de0bca34594d63f585d6241e343211ac..b1a000e92e581a87d964a1f11206d2ac12edfd98 100644
GIT binary patch
delta 53156
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
DwR~w5

delta 52497
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
Q3wSKZXg^ilV^XpI1M<#%@Bjb+

diff --git a/resources/localization/cs/PrusaSlicer_cs.po b/resources/localization/cs/PrusaSlicer_cs.po
index 25222b061..e60316e61 100644
--- a/resources/localization/cs/PrusaSlicer_cs.po
+++ b/resources/localization/cs/PrusaSlicer_cs.po
@@ -5,21 +5,13 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Poedit 2.4.1\n"
+"X-Generator: Poedit 2.4.2\n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
 "PO-Revision-Date: \n"
-"Last-Translator: Oleksandra Iushchenko <yusanka@gmail.com>\n"
+"Last-Translator: \n"
 "Language-Team: \n"
 
-#: src/slic3r/GUI/MainFrame.cpp:166
-msgid " - Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases"
-msgstr "- Nezapomeňte zkontrolovat aktualizace na https://github.com/prusa3d/PrusaSlicer/releases"
-
-#: src/slic3r/GUI/MainFrame.cpp:1573
-msgid " was successfully sliced."
-msgstr " byl úspěšně slicován."
-
 #: src/slic3r/GUI/Tab.cpp:4124
 msgid ""
 "\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n"
@@ -50,6 +42,10 @@ msgstr "%1% Přednastavení"
 msgid "%1% printer was active at the time the target Undo / Redo snapshot was taken. Switching to %1% printer requires reloading of %1% presets."
 msgstr "%1% tiskárna byla aktivní v době, kdy byly pořízeny kroky Zpět / Vpřed. Přepnutí na tiskárnu %1% vyžaduje opětovné načtení předvoleb %1%."
 
+#: src/slic3r/GUI/MainFrame.cpp:1585
+msgid "%1% was successfully sliced."
+msgstr "%1% byl úspěšně naslicován."
+
 #: src/libslic3r/Print.cpp:1400
 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm"
 msgstr "%1%=%2% mm je příliš nízké na to, aby bylo možné tisknout ve výšce vrstvy %3% mm"
@@ -98,6 +94,11 @@ msgstr "%s &Webová stránka"
 msgid "%s - BREAKING CHANGE"
 msgstr "%s - ZLOMOVÁ ZMĚNA"
 
+#: src/slic3r/GUI/Plater.cpp:1410
+#, c-format
+msgid "%s - Drop project file"
+msgstr "%s - Otevírání projektu"
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:211
 #, c-format
 msgid "%s configuration is incompatible"
@@ -395,7 +396,7 @@ msgstr "Obecným pravidlem je 60 °C pro PLA a 110 °C pro ABS. Zadejte nula, po
 
 #: src/slic3r/GUI/GLCanvas3D.cpp:634
 msgid "A toolpath outside the print area was detected."
-msgstr "Byla detekována cesta mimo tiskovou oblast"
+msgstr "Byla detekována cesta mimo tiskovou oblast."
 
 #: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215
 #, c-format
@@ -428,6 +429,10 @@ msgstr "Přesnost"
 msgid "Accurate"
 msgstr "Přesné"
 
+#: src/slic3r/GUI/Plater.cpp:1423
+msgid "Action"
+msgstr "Akce"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78
 msgid "Activate"
 msgstr "Aktivovat"
@@ -728,10 +733,6 @@ msgstr "Všechna gizma: Rotace - levé talčítko myši; Posun - pravé tlačít
 msgid "All installed printers are compatible with the selected filament."
 msgstr "Všechny instalované tiskárny jsou kompatibilní s vybraným filamentem."
 
-#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737
-msgid "All modified options will be reverted."
-msgstr "Všechny upravené možnosti budou vráceny."
-
 #: src/libslic3r/Print.cpp:1245
 msgid "All objects are outside of the print volume."
 msgstr "Všechny objekty jsou mimo tiskový prostor."
@@ -740,6 +741,10 @@ msgstr "Všechny objekty jsou mimo tiskový prostor."
 msgid "All objects will be removed, continue?"
 msgstr "Všechny objekty budou odebrány, pokračovat?"
 
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737
+msgid "All settings changes will be discarded."
+msgstr "Všechny změny v nastavení budou zahozeny."
+
 #: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "All standard"
 msgstr "Všechny běžné"
@@ -987,6 +992,10 @@ msgstr "Automatické aktualizace"
 msgid "Automatically repair an STL file"
 msgstr "Automaticky opravit STL soubor"
 
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:129
+msgid "Autoset by angle"
+msgstr "Automaticky podle úhlu"
+
 #: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:233
 msgid "Autoset custom supports"
 msgstr "Automatické nastavení podpěr"
@@ -1749,7 +1758,9 @@ msgstr "Kopírování dočasného G-codu do výstupního G-codu selhalo"
 msgid ""
 "Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\n"
 "Error message: %1%"
-msgstr "Kopírování dočasného G-codu do výstupního G-codu se nezdařilo. Není SD karta chráněná proti zápisu?"
+msgstr ""
+"Kopírování dočasného G-codu do výstupního G-codu se nezdařilo. Není SD karta chráněná proti zápisu?\n"
+"Chybová hláška: %1%"
 
 #: src/slic3r/GUI/BackgroundSlicingProcess.cpp:147
 msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
@@ -2394,6 +2405,10 @@ msgstr "Neuspořádávat"
 msgid "Don't notify about new releases any more"
 msgstr "Neupozorňovat na nové verze"
 
+#: src/slic3r/GUI/Plater.cpp:1431
+msgid "Don't show again"
+msgstr "Znovu nezobrazovat"
+
 #: src/libslic3r/PrintConfig.cpp:403
 msgid "Don't support bridges"
 msgstr "Nevytvářet podpěry pod mosty"
@@ -2534,6 +2549,10 @@ msgstr "Nadzvednutí objektu je příliš malé. Pomocí funkce „Podložka oko
 msgid "Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute intervals into the G-code to let the firmware show accurate remaining time. As of now only the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 firmware supports M73 Qxx Sxx for the silent mode."
 msgstr "Vkládání M73 P[počet vytištěných procent] R[zbývající čas v minutách] v 1 minutových intervalech do G-codu, aby firmware ukázal přesný zbývající čas. M73 nyní rozpoznává pouze firmware tiskárny Prusa i3 MK3. Firmware i3 MK3 také podporuje M73 Qxx Sxx pro tichý režim."
 
+#: src/libslic3r/PrintConfig.cpp:1217
+msgid "Emit to G-code"
+msgstr "Emitivat do G-codu"
+
 #: src/libslic3r/GCode.cpp:622
 msgid "Empty layers detected, the output would not be printable."
 msgstr "Byly detekovány prázdné vrstvy, model by nebylo možné vytisknout."
@@ -2565,7 +2584,7 @@ msgstr "Zapnout ironing"
 
 #: src/libslic3r/PrintConfig.cpp:1125
 msgid "Enable ironing of the top layers with the hot print head for smooth surface"
-msgstr "Pro hladké vrchní vrstvy povolte ironing pomocí ohřáté tiskové hlavy."
+msgstr "Pro hladké vrchní vrstvy povolte ironing pomocí ohřáté tiskové hlavy"
 
 #: src/libslic3r/PrintConfig.cpp:2009
 msgid "Enable support material generation."
@@ -2975,10 +2994,6 @@ msgstr "Exportovat vybrané objekty jako STL soubor"
 msgid "Export to SD card / Flash drive"
 msgstr "Export na SD kartu / Flash disk"
 
-#: src/slic3r/GUI/Plater.cpp:755
-msgid "Export to SD card / Flash drive "
-msgstr "Export na SD kartu / Flash disk"
-
 #: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export toolpaths as OBJ"
 msgstr "Exportovat trasy extruderu jako OBJ"
@@ -3188,7 +3203,7 @@ msgstr "Typ"
 #: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:295
 #: src/slic3r/GUI/GUI_Preview.cpp:316
 msgid "Feature types"
-msgstr "Typy extruzí"
+msgstr "Typy extrudování"
 
 #: src/slic3r/GUI/ConfigWizard.cpp:1926
 msgid "FFF Technology Printers"
@@ -3983,7 +3998,7 @@ msgstr "Pokud je tato volba povolena, bude 3D scéna vykreslena v rozlišení Re
 
 #: src/slic3r/GUI/Preferences.cpp:215
 msgid "If enabled, the button for the collapse sidebar will be appeared in top right corner of the 3D Scene"
-msgstr "Pokud je povoleno, bude v pravém horním rohu 3D scény zobrazeno tlačítko pro ovládání bočního panelu."
+msgstr "Pokud je povoleno, bude v pravém horním rohu 3D scény zobrazeno tlačítko pro ovládání bočního panelu"
 
 #: src/libslic3r/PrintConfig.cpp:3698
 msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
@@ -4073,6 +4088,10 @@ msgstr "Pokud firmware nezpracovává umístění extruderu správně, potřebuj
 msgid "If your firmware requires relative E values, check this, otherwise leave it unchecked. Most firmwares use absolute values."
 msgstr "Pokud váš firmware vyžaduje relativní hodnoty E, zaškrtněte toto, jinak nechte nezaškrtnuté. Většina firmwarů používá absolutní hodnoty."
 
+#: src/libslic3r/PrintConfig.cpp:1219
+msgid "Ignore"
+msgstr "Ignorovat"
+
 #: src/libslic3r/PrintConfig.cpp:3684
 msgid "Ignore non-existent config files"
 msgstr "Ignorovat neexistující konfigurační soubory"
@@ -4098,9 +4117,17 @@ msgstr "Načíst konfiguraci z &projektu"
 msgid "Import Config from ini/amf/3mf/gcode"
 msgstr "Načíst konfiguraci ze souboru ini/amf/3mf/gcode"
 
+#: src/slic3r/GUI/Plater.cpp:1419
+msgid "Import config only"
+msgstr "Importovat pouze konfiguraci"
+
 #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39
-msgid "Import file: "
-msgstr "Importovat soubor:"
+msgid "Import file"
+msgstr "Importovat soubor"
+
+#: src/slic3r/GUI/Plater.cpp:1418
+msgid "Import geometry only"
+msgstr "Importovat pouze modely"
 
 #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46
 msgid "Import model and profile"
@@ -4566,10 +4593,6 @@ msgstr "Vrchních"
 msgid "Layout Options"
 msgstr "Možnosti rozložení"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:233
-msgid "Least supports"
-msgstr "Nejméně podpěr"
-
 #: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:48
 msgid "Leaving Paint-on supports"
 msgstr "Opuštění Malování podpěr"
@@ -4670,14 +4693,6 @@ msgstr "Načíst konfiguraci ze zadaného souboru. Může být použito vícekr
 msgid "Load exported configuration file"
 msgstr "Načíst exportovaný konfigurační soubor"
 
-#: src/slic3r/GUI/Plater.cpp:1436
-msgid "Load File"
-msgstr "Načtení souboru"
-
-#: src/slic3r/GUI/Plater.cpp:1440
-msgid "Load Files"
-msgstr "Naštení souborů"
-
 #: src/slic3r/GUI/GUI_ObjectList.cpp:2038
 msgid "Load Part"
 msgstr "Přidání části"
@@ -4710,9 +4725,9 @@ msgstr "Načteno"
 msgid "Loading"
 msgstr "Načítání"
 
-#: src/slic3r/GUI/GUI_App.cpp:759
-msgid "Loading configuration..."
-msgstr "Načítání konfigurace ..."
+#: src/slic3r/GUI/GUI_App.cpp:797
+msgid "Loading configuration"
+msgstr "Načítání konfigurace"
 
 #: src/slic3r/GUI/Plater.cpp:2226
 msgid "Loading file"
@@ -5690,7 +5705,7 @@ msgstr "Teplota trysky"
 
 #: src/libslic3r/PrintConfig.cpp:2198
 msgid "Nozzle temperature for layers after the first one. Set this to zero to disable temperature control commands in the output G-code."
-msgstr "Teplota trysky pro od druhé vrstvy dále. Nastavte tuto hodnotu na nulu, abyste zakázali příkazy pro řízení teploty ve výstupním G-codu."
+msgstr "Teplota trysky od druhé vrstvy dále. Nastavte tuto hodnotu na nulu, abyste zakázali příkazy pro řízení teploty ve výstupním G-codu."
 
 #: src/libslic3r/PrintConfig.cpp:961
 msgid "Nozzle temperature for the first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output G-code."
@@ -5882,6 +5897,10 @@ msgstr "Otevře novou instanci PrusaSliceru"
 msgid "Open a project file"
 msgstr "Otevřít soubor s projektem"
 
+#: src/slic3r/GUI/Plater.cpp:1417
+msgid "Open as project"
+msgstr "Otevřít jako projekt"
+
 #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:330
 msgid "Open CA certificate file"
 msgstr "Otevřít soubor s certifikátem CA"
@@ -6338,9 +6357,9 @@ msgstr "Preferovaný směr švu - rozkmit"
 msgid "Preparing infill"
 msgstr "Příprava výplně"
 
-#: src/slic3r/GUI/GUI_App.cpp:895
-msgid "Preparing settings tabs..."
-msgstr "Příprava karet s nastavením..."
+#: src/slic3r/GUI/GUI_App.cpp:855
+msgid "Preparing settings tabs"
+msgstr "Příprava karet s nastavením"
 
 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:1009
 msgid "Preset \"%1%\" has the following unsaved changes:"
@@ -6662,10 +6681,6 @@ msgstr "Kvalita (pomalejší slicing)"
 msgid "Quality / Speed"
 msgstr "Kvalita / Rychlost"
 
-#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:56
-msgid "Quality: "
-msgstr "Kvalita:"
-
 #: src/slic3r/GUI/Jobs/SLAImportJob.cpp:61
 msgid "Quick"
 msgstr "Rychlé"
@@ -6693,7 +6708,7 @@ msgstr "Ukončit %s"
 
 #: src/slic3r/GUI/GUI_App.cpp:396
 msgid "Quit, I will move my data now"
-msgstr "Zavřít aplikaci, přesunu si svá data."
+msgstr "Zavřít aplikaci, přesunu si svá data"
 
 #: src/slic3r/GUI/GLCanvas3D.cpp:280 src/libslic3r/PrintConfig.cpp:547
 msgid "Radius"
@@ -6880,6 +6895,10 @@ msgstr "Zapamatovat moji volbu"
 msgid "Remember output directory"
 msgstr "Pamatovat si výstupní složku"
 
+#: src/slic3r/GUI/MainFrame.cpp:166
+msgid "Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases"
+msgstr "Nezapomeňte zkontrolovat aktualizace na https://github.com/prusa3d/PrusaSlicer/releases"
+
 #: src/slic3r/GUI/Tab.cpp:3386
 msgid "remove"
 msgstr "odebrat"
@@ -7345,7 +7364,7 @@ msgstr "Uložit SL1 soubor jako:"
 
 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:744
 msgid "Save the selected options to preset \"%1%\"."
-msgstr "Uložte vybraná nastaneví do přednastavení \"%1%\"."
+msgstr "Uloží vybraná nastaneví do přednastavení \"%1%\"."
 
 #: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
 msgid "Save the selected options."
@@ -7470,6 +7489,10 @@ msgstr "Vybrat všechny body"
 msgid "Select all standard printers"
 msgstr "Vybrat všechny standardní tiskárny"
 
+#: src/slic3r/GUI/Plater.cpp:1422
+msgid "Select an action to apply to the file"
+msgstr "Vyberte jak chcete na soubor otevřít"
+
 #: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
 msgid "Select by rectangle"
 msgstr "Označit obdélníkovým výběrem myši"
@@ -7616,10 +7639,6 @@ msgstr "Odeslat k tisku stávající plochu jako G-code"
 msgid "Send to printer"
 msgstr "Odeslat do tiskárny"
 
-#: src/slic3r/GUI/Plater.cpp:753
-msgid "Send to printer "
-msgstr "Odeslat do tiskárny"
-
 #: src/slic3r/GUI/GLCanvas3D.cpp:1312
 msgid "Seq."
 msgstr "Sekv."
@@ -7861,6 +7880,10 @@ msgstr "Zobrazit okno o Slic3ru"
 msgid "Show advanced settings"
 msgstr "Zobrazit rozšířená nastavení"
 
+#: src/slic3r/GUI/Preferences.cpp:120
+msgid "Show drop project dialog"
+msgstr "Zobrazit dialogové okno při přetažení projektu"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:157
 msgid "Show error message"
 msgstr "Zobrazit chybovou hlášku"
@@ -8522,10 +8545,6 @@ msgstr "Úspěch!"
 msgid "Successfully unmounted. The device %s(%s) can now be safely removed from the computer."
 msgstr "Odpojení proběhlo úspěšné. Zařízení %s(%s) lze nyní bezpečně odebrat z počítače."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:234
-msgid "Suface quality"
-msgstr "Kvalita povrchu"
-
 #: src/slic3r/GUI/PresetHints.cpp:202
 msgid "support"
 msgstr "podpěry"
@@ -9159,9 +9178,9 @@ msgstr "Čistící věž je podporována pouze v případě, že všechny extrud
 msgid "The Wipe tower is only supported if all objects have the same variable layer height"
 msgstr "Čistící věž je podporována pouze v případě, že všechny objekty mají stejnou variabilní výšku vrstvy"
 
-#: src/slic3r/GUI/Plater.cpp:3543
-msgid "There are active warnings concerning sliced models:\n"
-msgstr "Varování týkající se slicovaných modelů:\n"
+#: src/slic3r/GUI/Plater.cpp:3563
+msgid "There are active warnings concerning sliced models:"
+msgstr "Varování týkající se slicovaných modelů:"
 
 #: src/libslic3r/SLAPrintSteps.cpp:619
 msgid "There are unprintable objects. Try to adjust support settings to make the objects printable."
@@ -9246,7 +9265,7 @@ msgstr "Toto experimentální nastavení používá příkazy G10 a G11, aby si
 
 #: src/libslic3r/PrintConfig.cpp:2319
 msgid "This experimental setting uses outputs the E values in cubic millimeters instead of linear millimeters. If your firmware doesn't already know filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' in your start G-code in order to turn volumetric mode on and use the filament diameter associated to the filament selected in Slic3r. This is only supported in recent Marlin."
-msgstr "Toto experimentální nastavení používá výstupní hodnoty E v kubických milimetrech místo lineárních milimetrů. Pokud firmware dosud nezná průměr (průměry) filamentu, můžete v počátečním G-code zadat příkazy jako “M200 D [filament_diameter_0] T0”, pro zapnutí volumetrického režimu a použití průměru filamentu přidruženého k vybranému filamentu ve Slic3ru. Toto je podporováno pouze v posledních verzích firmwaru Marlin.\n"
+msgstr "Toto experimentální nastavení používá výstupní hodnoty E v kubických milimetrech místo lineárních milimetrů. Pokud firmware dosud nezná průměr (průměry) filamentu, můžete v počátečním G-code zadat příkazy jako “M200 D [filament_diameter_0] T0”, pro zapnutí volumetrického režimu a použití průměru filamentu přidruženého k vybranému filamentu ve Slic3ru. Toto je podporováno pouze v posledních verzích firmwaru Marlin."
 
 #: src/slic3r/GUI/GUI_ObjectList.cpp:4459
 msgid "This extruder will be set for selected items"
@@ -9324,7 +9343,7 @@ msgstr "Toto nastavení přemístí trysku při retrakci, aby se minimalizovalo
 
 #: src/libslic3r/PrintConfig.cpp:1961
 msgid "This G-code will be used as a code for the color change"
-msgstr "Tento G-code bude použit jako kód pro změnu barvy."
+msgstr "Tento G-code bude použit jako kód pro změnu barvy"
 
 #: src/libslic3r/PrintConfig.cpp:1970
 msgid "This G-code will be used as a code for the pause print"
@@ -9888,6 +9907,10 @@ msgstr "Použít retrakce z firmwaru"
 msgid "Use for search"
 msgstr "Použit pro vyhledávání"
 
+#: src/libslic3r/PrintConfig.cpp:1218
+msgid "Use for time estimate"
+msgstr "Použít pro odhad času"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:42
 msgid "Use forward slashes ( / ) as a directory separator if needed."
 msgstr "Pokud je to nutné, použijte pro oddělení složek lomítko ( / )."
@@ -10133,6 +10156,10 @@ msgstr "Co chcete udělat s přednastavením „% 1%“ po uložení?"
 msgid "When checked, the print and filament presets are shown in the preset editor even if they are marked as incompatible with the active printer"
 msgstr "Pokud je zaškrtnuto, přednastavení tisku a filamentu se zobrazují v editoru přednastavení, i když jsou označeny jako nekompatibilní s aktivní tiskárnou"
 
+#: src/slic3r/GUI/Preferences.cpp:122
+msgid "When checked, whenever dragging and dropping a project file on the application, shows a dialog asking to select the action to take on the file to load."
+msgstr "Je-li zaškrtnuto, při každém přetažení souboru s projektem do aplikace se zobrazí dialogové okno s výzvou k výběru akce, kterou se má soubor načíst."
+
 #: src/slic3r/GUI/Preferences.cpp:156
 msgid "When closing the application, always ask for unsaved changes"
 msgstr "Při zavírání aplikace vždy ptát na neuložené změny"
diff --git a/resources/localization/de/PrusaSlicer.mo b/resources/localization/de/PrusaSlicer.mo
index 7a3021c3018c563d0e1fec35e6885af57a40fae8..f2692af20330ca4af8e8d9d062ed3c81de968964 100644
GIT binary patch
delta 79933
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
G^Zx+$s{+;l

delta 51532
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

diff --git a/resources/localization/de/PrusaSlicer_de.po b/resources/localization/de/PrusaSlicer_de.po
index e926a6145..97c615134 100644
--- a/resources/localization/de/PrusaSlicer_de.po
+++ b/resources/localization/de/PrusaSlicer_de.po
@@ -5,82 +5,101 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Poedit 2.4.2\n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
 "PO-Revision-Date: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
 
-#: src/slic3r/GUI/MainFrame.cpp:66
-msgid " - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/releases"
-msgstr " - Denken Sie an die Überprüfung auf Updates unter http://github.com/prusa3d/PrusaSlicer/releases"
+#: src/slic3r/GUI/Tab.cpp:4124
+msgid ""
+"\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n"
+"To enable \"%1%\", please switch off \"%2%\""
+msgstr ""
+"\"%1%\" ist deaktiviert, weil \"%2%\" in der Kategorie \"%3%\" eingeschaltet ist.\n"
+"Um \"%1%\" zu aktivieren, schalten Sie bitte \"%2%\" aus."
 
-#: src/slic3r/GUI/MainFrame.cpp:872
-msgid " was successfully sliced."
-msgstr " wurde erfolgreich gesliced."
-
-#: src/libslic3r/PrintConfig.cpp:215 src/libslic3r/PrintConfig.cpp:792
-#: src/libslic3r/PrintConfig.cpp:1219 src/libslic3r/PrintConfig.cpp:1282
-#: src/libslic3r/PrintConfig.cpp:1532 src/libslic3r/PrintConfig.cpp:2425
-#: src/libslic3r/PrintConfig.cpp:2767
+#: src/libslic3r/PrintConfig.cpp:249 src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1390 src/libslic3r/PrintConfig.cpp:1640
+#: src/libslic3r/PrintConfig.cpp:2568 src/libslic3r/PrintConfig.cpp:2805
+#: src/libslic3r/PrintConfig.cpp:2931
 msgid "%"
 msgstr "%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:963
+#: src/slic3r/GUI/GLCanvas3D.cpp:969
 #, c-format
 msgid "%.2f - %.2f mm"
 msgstr "%.2f - %.2f mm"
 
 #. TRN  Remove/Delete
-#: src/slic3r/GUI/Tab.cpp:3126
+#: src/slic3r/GUI/Tab.cpp:3425
 msgid "%1% Preset"
 msgstr "%1% Voreinstellung"
 
-#: src/slic3r/GUI/Plater.cpp:4400
+#: src/slic3r/GUI/Plater.cpp:4423
 msgid "%1% printer was active at the time the target Undo / Redo snapshot was taken. Switching to %1% printer requires reloading of %1% presets."
 msgstr "Der %1% Drucker war zum Zeitpunkt der Aufnahme des Ziel-Rückgängig-/Wiederherstellungs-Schnappschusses aktiv. Die Umstellung auf den %1%-Drucker erfordert ein Neuladen der %1%-Voreinstellungen."
 
-#: src/libslic3r/Print.cpp:1374
+#: src/slic3r/GUI/MainFrame.cpp:1585
+msgid "%1% was successfully sliced."
+msgstr "%1% wurde erfolgreich gesliced."
+
+#: src/libslic3r/Print.cpp:1400
 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm"
 msgstr "%1%=%2% mm ist zu niedrig, um auf einer Schichthöhe von %3% mm druckbar zu sein"
 
-#: src/slic3r/GUI/PresetHints.cpp:229
+#: src/slic3r/GUI/PresetHints.cpp:228
 #, c-format
 msgid "%3.2f mm³/s at filament speed %3.2f mm/s."
 msgstr "%3.2f mm³/s mit einer Filamentgeschwindigkeit von %3.2f mm/s."
 
-#: src/slic3r/GUI/Plater.cpp:1152
+#: src/slic3r/GUI/Plater.cpp:1061
 #, c-format
 msgid "%d (%d shells)"
 msgstr "%d (%d Konturhüllen)"
 
-#: src/slic3r/GUI/Plater.cpp:1160
+#: src/slic3r/GUI/Plater.cpp:1069
 #, c-format
 msgid "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d facets reversed, %d backwards edges"
 msgstr "%d degenerierte Flächen, %d Kanten korrigiert, %d Flächen entfernt, %d Flächen hinzugefügt, %d Flächen umgekehrt, %d rückwärtige Kanten"
 
-#: src/slic3r/GUI/PresetHints.cpp:270
+#: src/slic3r/GUI/PresetHints.cpp:269
 #, c-format
 msgid "%d lines: %.2f mm"
 msgstr "%d Linien: %.2f mm"
 
-#: src/slic3r/GUI/MainFrame.cpp:1027
+#: src/slic3r/GUI/MainFrame.cpp:1728
 #, c-format
 msgid "%d presets successfully imported."
 msgstr "%d Voreinstellungen erfolgreich importiert."
 
-#: src/slic3r/GUI/MainFrame.cpp:692
+#: src/slic3r/GUI/GUI_App.cpp:718
+#, c-format
+msgid ""
+"%s\n"
+"Do you want to continue?"
+msgstr ""
+"%s\n"
+"Möchten Sie fortfahren?"
+
+#: src/slic3r/GUI/MainFrame.cpp:917 src/slic3r/GUI/MainFrame.cpp:1316
 #, c-format
 msgid "%s &Website"
 msgstr "%s &Webseite"
 
+#: src/slic3r/GUI/GUI_App.cpp:394
+#, c-format
+msgid "%s - BREAKING CHANGE"
+msgstr "%s - BREAKING CHANGE"
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:211
 #, c-format
 msgid "%s configuration is incompatible"
 msgstr "%s Konfiguration ist nicht kompatibel"
 
-#: src/slic3r/GUI/Field.cpp:175
+#: src/slic3r/GUI/Field.cpp:223
 #, c-format
 msgid "%s doesn't support percentage"
 msgstr "%s akzeptiert keine Prozentangaben"
@@ -90,7 +109,7 @@ msgstr "%s akzeptiert keine Prozentangaben"
 msgid "%s error"
 msgstr "%s Fehler"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:481
+#: src/slic3r/GUI/ConfigWizard.cpp:499
 #, c-format
 msgid "%s Family"
 msgstr "%s Familie"
@@ -100,7 +119,7 @@ msgstr "%s Familie"
 msgid "%s has encountered an error"
 msgstr "%s ist auf einen Fehler gestoßen"
 
-#: src/slic3r/GUI/GUI_App.cpp:138
+#: src/slic3r/GUI/GUI_App.cpp:528
 #, c-format
 msgid ""
 "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it.\n"
@@ -111,12 +130,12 @@ msgstr ""
 "\n"
 "Die Anwendung wird nun beendet."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:222
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:62
 #, c-format
 msgid "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it."
 msgstr "%s ist auf einen Fehler gestoßen. Es wurde wahrscheinlich dadurch verursacht, dass der Speicher knapp wird. Wenn Sie sicher sind, dass Sie genügend RAM auf Ihrem System haben, kann dies auch ein Programmfehler sein, und wir würden uns freuen, wenn Sie ihn melden würden."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:308
+#: src/slic3r/GUI/UpdateDialogs.cpp:309
 #, c-format
 msgid "%s has no configuration updates available."
 msgstr "Für %s sind keine Konfigurationsaktualisierungen verfügbar."
@@ -143,7 +162,7 @@ msgstr ""
 "\n"
 "Bitte fahren Sie fort mit '%s'. Dies folgt nun, um die neuen Einstellungen einzurichten sowie auszuwählen, ob Einstellungen automatisch aktualisiert werden dürfen."
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:1512
 #, c-format
 msgid "%s View Mode"
 msgstr "%s Anzeigemodus"
@@ -163,218 +182,248 @@ msgstr ""
 "\n"
 "Aktualisierte Konfigurations-Bundles:"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
 #, c-format
 msgid "&About %s"
 msgstr "Ü&ber %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:908
+#: src/slic3r/GUI/MainFrame.cpp:1297
+msgid "&Collapse sidebar"
+msgstr "Seitenleiste zuklappen (&C)"
+
+#: src/slic3r/GUI/GUI_App.cpp:1645
 msgid "&Configuration"
 msgstr "&Konfiguration"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "&Configuration Snapshots"
 msgstr "Konfi&gurations-Momentaufnahmen"
 
-#: src/slic3r/GUI/MainFrame.cpp:588
+#: src/slic3r/GUI/MainFrame.cpp:1194
 msgid "&Copy"
 msgstr "&Kopieren"
 
-#: src/slic3r/GUI/MainFrame.cpp:572
+#: src/slic3r/GUI/MainFrame.cpp:1178
 msgid "&Delete selected"
 msgstr "Löschen aus&gewählt"
 
-#: src/slic3r/GUI/MainFrame.cpp:722
+#: src/slic3r/GUI/MainFrame.cpp:1348 src/slic3r/GUI/MainFrame.cpp:1358
 msgid "&Edit"
 msgstr "&Bearbeiten"
 
-#: src/slic3r/GUI/MainFrame.cpp:506
+#: src/slic3r/GUI/MainFrame.cpp:1103
 msgid "&Export"
 msgstr "&Export"
 
-#: src/slic3r/GUI/MainFrame.cpp:617 src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1224 src/slic3r/GUI/MainFrame.cpp:1451
 msgid "&Filament Settings Tab"
 msgstr "&Filamenteinstellungen"
 
-#: src/slic3r/GUI/MainFrame.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:1347 src/slic3r/GUI/MainFrame.cpp:1357
+#: src/slic3r/GUI/MainFrame.cpp:1417
 msgid "&File"
 msgstr "&Datei"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1981
+#: src/slic3r/GUI/ConfigWizard.cpp:2492
 msgid "&Finish"
 msgstr "&Beenden"
 
-#: src/slic3r/GUI/MainFrame.cpp:727
+#: src/slic3r/GUI/MainFrame.cpp:1141
+msgid "&G-code preview"
+msgstr "&G-Code-Vorschau"
+
+#: src/slic3r/GUI/MainFrame.cpp:1353 src/slic3r/GUI/MainFrame.cpp:1363
+#: src/slic3r/GUI/MainFrame.cpp:1423
 msgid "&Help"
 msgstr "&Hilfe"
 
-#: src/slic3r/GUI/MainFrame.cpp:474
+#: src/slic3r/GUI/MainFrame.cpp:1065
 msgid "&Import"
 msgstr "&Import"
 
-#: src/slic3r/GUI/GUI_App.cpp:822
+#: src/slic3r/GUI/GUI_App.cpp:1517
 msgid "&Language"
 msgstr "Sp&rache"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "&New Project"
 msgstr "&Neues Projekt"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1980
+#: src/slic3r/GUI/ConfigWizard.cpp:2491
 msgid "&Next >"
 msgstr "&Weiter >"
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "&Open G-code"
+msgstr "Öffne G-C&ode"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "&Open Project"
 msgstr "Pr&ojekt öffnen"
 
-#: src/slic3r/GUI/MainFrame.cpp:591
+#: src/slic3r/GUI/MainFrame.cpp:1197
 msgid "&Paste"
 msgstr "Ei&nfügen"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "&Plater Tab"
 msgstr "Druck&platte"
 
-#: src/slic3r/GUI/GUI_App.cpp:804
+#: src/slic3r/GUI/GUI_App.cpp:1487
 msgid "&Preferences"
 msgstr "&Einstellungen"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
 msgid "&Quit"
 msgstr "&Beenden"
 
-#: src/slic3r/GUI/MainFrame.cpp:583
+#: src/slic3r/GUI/MainFrame.cpp:1189
 msgid "&Redo"
 msgstr "&Redo"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "&Repair STL file"
 msgstr "STL-Datei &reparieren"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "&Save Project"
 msgstr "Projekt &sichern"
 
-#: src/slic3r/GUI/MainFrame.cpp:565
+#: src/slic3r/GUI/MainFrame.cpp:1171
 msgid "&Select all"
 msgstr "Alle&s auswählen"
 
-#: src/slic3r/GUI/MainFrame.cpp:580
+#: src/slic3r/GUI/MainFrame.cpp:1186
 msgid "&Undo"
 msgstr "&Undo"
 
-#: src/slic3r/GUI/MainFrame.cpp:724
+#: src/slic3r/GUI/MainFrame.cpp:1350 src/slic3r/GUI/MainFrame.cpp:1360
+#: src/slic3r/GUI/MainFrame.cpp:1418
 msgid "&View"
 msgstr "&Anzeige"
 
-#: src/slic3r/GUI/MainFrame.cpp:723
+#: src/slic3r/GUI/MainFrame.cpp:1349 src/slic3r/GUI/MainFrame.cpp:1359
 msgid "&Window"
 msgstr "&Fenster"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:603 src/slic3r/GUI/ConfigWizard.cpp:631
+#: src/slic3r/GUI/ConfigWizard.cpp:662 src/slic3r/GUI/ConfigWizard.cpp:812
+#: src/slic3r/GUI/ConfigWizard.cpp:873 src/slic3r/GUI/ConfigWizard.cpp:1007
 msgid "(All)"
 msgstr "(Alles)"
 
-#: src/libslic3r/PrintConfig.cpp:1446
+#: src/libslic3r/PrintConfig.cpp:1554
 msgid "(minimum)"
 msgstr "(Minimum)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:116
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:109
 msgid "(Re)slice"
 msgstr "(Re)Slice"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "(Re)Slice No&w"
 msgstr "(Re)Slice jet&zt"
 
-#: src/libslic3r/PrintConfig.cpp:771 src/libslic3r/PrintConfig.cpp:2587
+#: src/libslic3r/PrintConfig.cpp:807 src/libslic3r/PrintConfig.cpp:2730
 msgid "(Unknown)"
 msgstr "(Unbekannt)"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid ") not found."
 msgstr ") nicht gefunden."
 
-#: src/libslic3r/PrintConfig.cpp:1918
+#: src/libslic3r/PrintConfig.cpp:2060
 msgid "0 (soluble)"
 msgstr "0 (löslich)"
 
-#: src/libslic3r/PrintConfig.cpp:1919
+#: src/libslic3r/PrintConfig.cpp:2061
 msgid "0.2 (detachable)"
 msgstr "0,2 (lösbar)"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "3&D"
 msgstr "3&D"
 
-#: src/slic3r/GUI/Plater.cpp:4097
+#: src/slic3r/GUI/Plater.cpp:4044
 msgid "3D editor view"
 msgstr "3D Editiermodus"
 
-#: src/libslic3r/PrintConfig.cpp:851
+#: src/libslic3r/PrintConfig.cpp:889
 msgid "3D Honeycomb"
 msgstr "3D Bienenwabe"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:274
+#: src/slic3r/GUI/NotificationManager.hpp:318
+msgid "3D Mouse disconnected."
+msgstr "3D-Maus nicht angeschlossen."
+
+#: src/slic3r/GUI/Mouse3DController.cpp:263
 msgid "3Dconnexion settings"
 msgstr "3Dconnexion Einstellungen"
 
-#: src/slic3r/GUI/Plater.cpp:5038
+#: src/slic3r/GUI/Plater.cpp:5167
 #, c-format
 msgid "3MF file exported to %s"
 msgstr "3MF Datei exportiert nach %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1979
+#: src/slic3r/GUI/ConfigWizard.cpp:2490
 msgid "< &Back"
 msgstr "< &Zurück"
 
-#: src/libslic3r/PrintConfig.cpp:287
+#: src/libslic3r/PrintConfig.cpp:321
 msgid "A boolean expression using the configuration values of an active print profile. If this expression evaluates to true, this profile is considered compatible with the active print profile."
 msgstr "Ein boolescher Ausdruck, der die Konfigurationswerte eines aktiven Druckprofils verwendet. Wenn dieser Ausdruck als wahr bewertet wird, wird dieses Profil als kompatibel mit dem aktiven Druckprofil angesehen."
 
-#: src/libslic3r/PrintConfig.cpp:272
+#: src/libslic3r/PrintConfig.cpp:306
 msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
 msgstr "Ein boolescher Ausdruck, der die Konfigurationswerte eines aktiven Druckerprofils verwendet. Wenn dieser Ausdruck als wahr bewertet wird, wird dieses Profil als kompatibel mit dem aktiven Druckerprofil angesehen."
 
-#: src/slic3r/GUI/Tab.cpp:975
+#: src/slic3r/GUI/Tab.cpp:1237
 msgid "A copy of the current system preset will be created, which will be detached from the system preset."
 msgstr "Es wird eine Kopie der aktuellen Systemvoreinstellung erstellt, die von der Systemvoreinstellung gelöst wird."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1034
+#: src/slic3r/GUI/ConfigWizard.cpp:1400
 msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
 msgstr "Ein Daumenwert ist 160 bis 230 °C für PLA, und 215 bis 250 °C für ABS."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1048
+#: src/slic3r/GUI/ConfigWizard.cpp:1414
 msgid "A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have no heated bed."
 msgstr "Ein Daumenwert ist 60 °C für PLA und 110 °C für ABS. Auf 0 setzen, falls kein beheiztes Druckbett vorhanden ist."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:686
-msgid "A toolpath outside the print area was detected"
-msgstr "Ein Werkzeugweg außerhalb des Druckbereichs wurde erkannt"
+#: src/slic3r/GUI/GLCanvas3D.cpp:634
+msgid "A toolpath outside the print area was detected."
+msgstr "Es wurde ein Werkzeugweg außerhalb des Druckbereichs erkannt."
 
-#: src/slic3r/GUI/AboutDialog.cpp:199
+#: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215
 #, c-format
 msgid "About %s"
 msgstr "Über %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:959
+#: src/slic3r/GUI/GCodeViewer.cpp:2189
+msgid "above"
+msgstr "über"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:965
 #, c-format
 msgid "above %.2f mm"
 msgstr "oberhalb %.2f mm"
 
-#: src/libslic3r/PrintConfig.cpp:1569
+#: src/libslic3r/PrintConfig.cpp:1677
 msgid "Above Z"
 msgstr "Über Z"
 
-#: src/slic3r/GUI/Tab.cpp:1164
+#: src/slic3r/GUI/Tab.cpp:1494
 msgid "Acceleration control (advanced)"
 msgstr "Beschleunigungskontrolle (fortgeschritten)"
 
-#: src/libslic3r/PrintConfig.cpp:2925
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:221
+#: src/libslic3r/PrintConfig.cpp:3089
 msgid "Accuracy"
 msgstr "Genauigkeit"
 
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:59
+msgid "Accurate"
+msgstr "Akkurat"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78
 msgid "Activate"
 msgstr "Aktivieren"
@@ -383,67 +432,75 @@ msgstr "Aktivieren"
 msgid "Active"
 msgstr "Aktiv"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1135 src/slic3r/GUI/GUI_ObjectList.cpp:1705
+#: src/slic3r/GUI/DoubleSlider.cpp:1264 src/slic3r/GUI/GUI_ObjectList.cpp:1833
 msgid "active"
 msgstr "aktiv"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:267
+#: src/slic3r/GUI/GLCanvas3D.cpp:254
 msgid "Adaptive"
 msgstr "Adaptiv"
 
-#: src/slic3r/GUI/Tab.cpp:241
-msgid "Add a new printer"
-msgstr "Neuen Drucker hinzufügen"
+#: src/libslic3r/PrintConfig.cpp:894
+msgid "Adaptive Cubic"
+msgstr "Adaptiv kubisch"
 
-#: src/libslic3r/PrintConfig.cpp:2782
+#: src/slic3r/GUI/SavePresetDialog.cpp:314
+msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\""
+msgstr "\"%1%\" als nächste Voreinstellung für den physischen Drucker \"%2%\" hinzufügen"
+
+#: src/libslic3r/PrintConfig.cpp:2946
 msgid "Add a pad underneath the supported model"
 msgstr "Fügt eine Grundschicht unter das gestützte Modell"
 
-#: src/libslic3r/PrintConfig.cpp:2058
+#: src/libslic3r/PrintConfig.cpp:2200
 msgid "Add a sheath (a single perimeter line) around the base support. This makes the support more reliable, but also more difficult to remove."
 msgstr "Fügen Sie eine Sheath (eine einzelne Druckkontur) um die Basisschicht herum hinzu. Das macht die Stützstrukturen zuverlässiger, aber auch schwieriger zu entfernen."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:991
+#: src/slic3r/GUI/DoubleSlider.cpp:1114
 msgid "Add another code - Ctrl + Left click"
 msgstr "Weiteren Code hinzufügen - Strg + Linksklick"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:992
+#: src/slic3r/GUI/DoubleSlider.cpp:1115
 msgid "Add another code - Right click"
 msgstr "Weiteren Code hinzufügen - Rechtsklick"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1477
+#: src/slic3r/GUI/DoubleSlider.cpp:1665
 msgid "Add color change"
 msgstr "Farbwechsel hinzufügen"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1180
+#: src/slic3r/GUI/DoubleSlider.cpp:1307
 msgid "Add color change (%1%) for:"
 msgstr "Farbwechsel (%1%) hinzufügen für:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:988
+#: src/slic3r/GUI/DoubleSlider.cpp:1111
 msgid "Add color change - Left click"
 msgstr "Farbwechsel hinzufügen - Linksklick"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:986
+#: src/slic3r/GUI/DoubleSlider.cpp:1109
 msgid "Add color change - Left click for predefined color or Shift + Left click for custom color selection"
 msgstr "Farbwechsel hinzufügen - Linksklick für vordefinierte Farbe oder Shift + Linksklick für benutzerdefinierte Farbauswahl"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
 msgid "Add color change marker for current layer"
 msgstr "Fügt einen Farbwechselmarker der aktuellen Schicht hinzu"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1490
+#: src/slic3r/GUI/DoubleSlider.cpp:1682
 msgid "Add custom G-code"
 msgstr "Benutzerdefinierten G-Code hinzufügen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:240
+#: src/slic3r/GUI/DoubleSlider.cpp:1679
+msgid "Add custom template"
+msgstr "Benutzerdefinierte Vorlage hinzufügen"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:235
 msgid "Add detail"
 msgstr "Detail hinzufügen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:421
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:308
 msgid "Add drainage hole"
 msgstr "Drainageloch hinzufügen"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:984
+#: src/slic3r/GUI/DoubleSlider.cpp:1107
 msgid "Add extruder change - Left click"
 msgstr "Extruderwechsel hinzufügen - Linksklick"
 
@@ -451,30 +508,30 @@ msgstr "Extruderwechsel hinzufügen - Linksklick"
 msgid "Add extruder to sequence"
 msgstr "Extruder zur Sequenz hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1993
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
 msgid "Add Generic Subobject"
 msgstr "Generische Subobjekt hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2896
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2925
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2943
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3297
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3325
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3345
 msgid "Add Height Range"
 msgstr "Höhenbereich hinzufügen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4526 src/slic3r/GUI/Plater.cpp:3788
-#: src/slic3r/GUI/Plater.cpp:3800 src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/GLCanvas3D.cpp:4892 src/slic3r/GUI/Plater.cpp:3708
+#: src/slic3r/GUI/Plater.cpp:3720 src/slic3r/GUI/Plater.cpp:3858
 msgid "Add instance"
 msgstr "Kopie hinzufügen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:153
 msgid "Add Instance of the selected object"
 msgstr "Kopie des gewählten Objektes hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:162
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:165
 msgid "Add layer range"
 msgstr "Schichtbereich hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2328
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2692
 msgid "Add Layers"
 msgstr "Schichten hinzufügen"
 
@@ -482,12 +539,12 @@ msgstr "Schichten hinzufügen"
 msgid "Add modifier"
 msgstr "Modifizierer hinzufügen"
 
-#: src/libslic3r/PrintConfig.cpp:479
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:515
+#, c-format
 msgid "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r keeps adding perimeters, until more than 70% of the loop immediately above is supported."
 msgstr "Fügen Sie bei Bedarf weitere Perimeter hinzu, um Spalten in schrägen Wänden zu vermeiden. PrusaSlicer fügt immer wieder Perimeter hinzu, bis mehr als 70% der unmittelbar darüber liegenden Schleife unterstützt werden."
 
-#: src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/Plater.cpp:3858
 msgid "Add one more instance of the selected object"
 msgstr "Eine weitere Kopie des gewählten Objekts hinzufügen"
 
@@ -495,52 +552,61 @@ msgstr "Eine weitere Kopie des gewählten Objekts hinzufügen"
 msgid "Add part"
 msgstr "Teil hinzufügen"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1487
+#: src/slic3r/GUI/DoubleSlider.cpp:1675
 msgid "Add pause print"
 msgstr "Druckpause hinzufügen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
+#: src/slic3r/GUI/PresetComboBoxes.cpp:627
+#: src/slic3r/GUI/PresetComboBoxes.cpp:674
+msgid "Add physical printer"
+msgstr "Physischen Drucker hinzufügen"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
 msgid "Add point"
 msgstr "Punkt hinzufügen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
 msgid "Add point to selection"
 msgstr "Punkt zur Auswahl hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1509
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:180
+msgid "Add preset for this printer device"
+msgstr "Voreinstellung für diesen Drucker hinzufügen"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1640
 msgid "Add settings"
 msgstr "Einstellungen hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1386
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1517
 msgid "Add Settings Bundle for Height range"
 msgstr "Höhenbreich Einstellungsbündel hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1388
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1519
 msgid "Add Settings Bundle for Object"
 msgstr "Objekt Einstellungsbündel hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1387
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1518
 msgid "Add Settings Bundle for Sub-object"
 msgstr "Subobjekt Einstellungsbündel hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1314
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1445
 msgid "Add Settings for Layers"
 msgstr "Schichten Einstellungen hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1316
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1447
 msgid "Add Settings for Object"
 msgstr "Objekt Einstellungen hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1315
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1446
 msgid "Add Settings for Sub-object"
 msgstr "Subobjekt Einstellungen hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2051
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1953
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2210
 msgid "Add Shape"
 msgstr "Form hinzufügen"
 
-#: src/libslic3r/PrintConfig.cpp:409
+#: src/libslic3r/PrintConfig.cpp:443
 msgid "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)."
 msgstr "Fügen Sie massives Infill in der Nähe von schrägen Flächen hinzu, um die vertikale Schalenstärke zu gewährleisten (obere und untere massive Schichten)."
 
@@ -552,11 +618,19 @@ msgstr "Stützblocker hinzufügen"
 msgid "Add support enforcer"
 msgstr "Stützverstärker hinzufügen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:494
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:374
 msgid "Add support point"
 msgstr "Stützpunkt hinzufügen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4467
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:371
+msgid "Add supports"
+msgstr "Stützen hinzufügen"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:293
+msgid "Add supports by angle"
+msgstr "Stützen nach Winkel hinzufügen"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4833
 msgid "Add..."
 msgstr "Hinzufügen..."
 
@@ -564,23 +638,29 @@ msgstr "Hinzufügen..."
 msgid "Add/Remove filaments"
 msgstr "Filamente hinzufügen/entfernen"
 
-#: src/slic3r/GUI/Preset.cpp:1201
+#: src/slic3r/GUI/PresetComboBoxes.cpp:813
 msgid "Add/Remove materials"
 msgstr "Materialien hinzufügen/entfernen"
 
-#: src/slic3r/GUI/Preset.cpp:1203
+#: src/slic3r/GUI/PresetComboBoxes.cpp:622
+#: src/slic3r/GUI/PresetComboBoxes.cpp:669
+msgid "Add/Remove presets"
+msgstr "Voreinstellungen hinzufügen/entfernen"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:815
+#: src/slic3r/GUI/PresetComboBoxes.cpp:972
 msgid "Add/Remove printers"
 msgstr "Drucker hinzufügen/entfernen"
 
-#: src/slic3r/GUI/Tab.cpp:970
+#: src/slic3r/GUI/Tab.cpp:1288
 msgid "Additional information:"
 msgstr "Weitere Informationen:"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:59
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:62
 msgid "Additional Settings"
 msgstr "Zusätzliche Einstellungen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:791
+#: src/slic3r/GUI/ConfigWizard.cpp:1150
 msgid "Additionally a backup snapshot of the whole configuration is created before an update is applied."
 msgstr "Zusätzlich wird eine Momentaufnahme der gesamten Konfiguration als Sicherung erstellt, bevor ein Update durchgeführt wird."
 
@@ -588,23 +668,22 @@ msgstr "Zusätzlich wird eine Momentaufnahme der gesamten Konfiguration als Sich
 msgid "Address"
 msgstr "Adresse"
 
-#: src/slic3r/GUI/GUI_App.cpp:814 src/slic3r/GUI/GUI_ObjectList.cpp:104
-#: src/slic3r/GUI/GUI_ObjectList.cpp:622 src/slic3r/GUI/Tab.cpp:1087
-#: src/slic3r/GUI/Tab.cpp:1102 src/slic3r/GUI/Tab.cpp:1201
-#: src/slic3r/GUI/Tab.cpp:1204 src/slic3r/GUI/Tab.cpp:1470
-#: src/slic3r/GUI/Tab.cpp:1967 src/slic3r/GUI/Tab.cpp:3661
-#: src/slic3r/GUI/wxExtensions.cpp:754 src/libslic3r/PrintConfig.cpp:88
-#: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223
-#: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2276
-#: src/libslic3r/PrintConfig.cpp:2448
+#: src/slic3r/GUI/GUI_ObjectList.cpp:102 src/slic3r/GUI/GUI_ObjectList.cpp:661
+#: src/slic3r/GUI/Tab.cpp:1409 src/slic3r/GUI/Tab.cpp:1430
+#: src/slic3r/GUI/Tab.cpp:1531 src/slic3r/GUI/Tab.cpp:1534
+#: src/slic3r/GUI/Tab.cpp:1816 src/slic3r/GUI/Tab.cpp:2152
+#: src/slic3r/GUI/Tab.cpp:4080 src/libslic3r/PrintConfig.cpp:90
+#: src/libslic3r/PrintConfig.cpp:121 src/libslic3r/PrintConfig.cpp:257
+#: src/libslic3r/PrintConfig.cpp:1081 src/libslic3r/PrintConfig.cpp:2419
+#: src/libslic3r/PrintConfig.cpp:2591
 msgid "Advanced"
 msgstr "Erweiterte Einstellungen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:821
+#: src/slic3r/GUI/ConfigWizard.cpp:1180
 msgid "Advanced mode"
 msgstr "Fortgeschrittener Modus"
 
-#: src/slic3r/GUI/GUI_App.cpp:814
+#: src/slic3r/GUI/GUI_App.cpp:1506
 msgid "Advanced View Mode"
 msgstr "Erweiterter Anzeigemodus"
 
@@ -612,124 +691,140 @@ msgstr "Erweiterter Anzeigemodus"
 msgid "Advanced: Output log"
 msgstr "Fortgeschritten: Ausgabeprotokoll"
 
-#: src/libslic3r/PrintConfig.cpp:668
+#: src/libslic3r/PrintConfig.cpp:704
 msgid "After a tool change, the exact position of the newly loaded filament inside the nozzle may not be known, and the filament pressure is likely not yet stable. Before purging the print head into an infill or a sacrificial object, Slic3r will always prime this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."
 msgstr "Nach einem Werkzeugwechsel ist die genaue Position des neu geladenen Filaments innerhalb der Düse möglicherweise nicht bekannt, und der Filamentdruck ist wahrscheinlich noch nicht stabil. Bevor der Druckkopf in eine Füllung oder ein Opferobjekt wischt, wird PrusaSlicer immer diese Materialmenge in den Wischturm leiten, um aufeinanderfolgende Füll- oder Opferobjekt-Extrusionen zuverlässig herzustellen."
 
-#: src/slic3r/GUI/Tab.cpp:1994 src/libslic3r/PrintConfig.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:2182 src/libslic3r/PrintConfig.cpp:1173
 msgid "After layer change G-code"
 msgstr "G-Code am Schichtende"
 
-#: src/libslic3r/PrintConfig.cpp:3398
+#: src/libslic3r/PrintConfig.cpp:3597
 msgid "Align the model to the given point."
 msgstr "Das Modell auf den angegebenen Punkt ausrichten."
 
-#: src/libslic3r/PrintConfig.cpp:3397
+#: src/libslic3r/PrintConfig.cpp:3596
 msgid "Align XY"
 msgstr "Ausrichten von XY"
 
-#: src/libslic3r/PrintConfig.cpp:1631
+#: src/libslic3r/PrintConfig.cpp:1739
 msgid "Aligned"
 msgstr "Ausgerichtet"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:290 src/slic3r/GUI/ConfigWizard.cpp:573
-#: src/slic3r/GUI/Tab.cpp:3174
+#: src/slic3r/GUI/ConfigWizard.cpp:308 src/slic3r/GUI/ConfigWizard.cpp:598
+#: src/slic3r/GUI/Tab.cpp:3507 src/slic3r/GUI/UnsavedChangesDialog.cpp:921
 msgid "All"
 msgstr "Alle"
 
-#: src/libslic3r/Print.cpp:1219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
+msgid "All gizmos: Rotate - left mouse button; Pan - right mouse button"
+msgstr "Alles Gizmos: Drehen - linke Maustaste; Schwenken - rechte Maustaste"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:694
+msgid "All installed printers are compatible with the selected filament."
+msgstr "Alle installierten Drucker sind mit dem ausgewählten Filament kompatibel."
+
+#: src/libslic3r/Print.cpp:1245
 msgid "All objects are outside of the print volume."
 msgstr "Alle Objekte befinden sich außerhalb des Druckraums."
 
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "All objects will be removed, continue?"
 msgstr "Alle Objekte werden entfernt, fortfahren?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737
+msgid "All settings changes will be discarded."
+msgstr "Alle Einstellungsänderungen werden verworfen."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "All standard"
 msgstr "Alles standard"
 
-#: src/libslic3r/Zipper.cpp:62
+#: src/libslic3r/miniz_extension.cpp:121
 msgid "allocation failed"
 msgstr "Allokation fehlgeschlagen"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Along X axis"
 msgstr "Entlang der X Achse"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Along Y axis"
 msgstr "Entlang der Y Achse"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Along Z axis"
 msgstr "Entlang der Z Achse"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:222
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:160
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:141
+msgid "Alt + Mouse wheel"
+msgstr "Alt + Mausrad"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:240
 msgid "Alternate nozzles:"
 msgstr "Alternative Düsen:"
 
-#: src/slic3r/GUI/Plater.cpp:5002
+#: src/slic3r/GUI/Preferences.cpp:163
+msgid "Always ask for unsaved changes when selecting new preset"
+msgstr "Immer nach nicht gespeicherten Änderungen fragen, wenn eine neue Voreinstellung ausgewählt wird"
+
+#: src/slic3r/GUI/Plater.cpp:5135
 #, c-format
 msgid "AMF file exported to %s"
 msgstr "AMF Datei exportiert nach %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:690
+#: src/slic3r/GUI/GLCanvas3D.cpp:638
 msgid ""
-"An object outside the print area was detected\n"
-"Resolve the current problem to continue slicing"
+"An object outside the print area was detected.\n"
+"Resolve the current problem to continue slicing."
 msgstr ""
-"Ein Objekt außerhalb des Druckbereichs wurde erkannt.\n"
-"Beheben Sie das aktuelle Problem, um mit dem Slicen fortzufahren"
+"Es wurde ein Objekt außerhalb des Druckbereichs erkannt.\n"
+"Das Problem lösen, um mit dem Slicen fortzufahren."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:685
-msgid "An object outside the print area was detected"
-msgstr "Ein Objekt außerhalb des Druckbereichs wurde erkannt"
+#: src/slic3r/GUI/GLCanvas3D.cpp:633
+msgid "An object outside the print area was detected."
+msgstr "Es wurde ein Objekt außerhalb des Druckbereichs erkannt."
 
-#: src/slic3r/GUI/Tab.cpp:2943
-msgid "and it has the following unsaved changes:"
-msgstr "und hat die folgenden ungesicherten Änderungen:"
-
-#: src/slic3r/GUI/Plater.cpp:3170
+#: src/slic3r/GUI/Plater.cpp:2972
 msgid "Another export job is currently running."
 msgstr "Ein anderer Exportjob läuft zurzeit."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Any arrow"
 msgstr "Jeder Pfeil"
 
-#: src/slic3r/GUI/Tab.cpp:965
+#: src/slic3r/GUI/Tab.cpp:1283
 msgid "Any modifications should be saved as a new preset inherited from this one."
 msgstr "Alle Änderungen sollten als neue Voreinstellungen gespeichert werden, die von diesem vererbt wurden."
 
-#: src/libslic3r/PrintConfig.cpp:104
+#: src/libslic3r/PrintConfig.cpp:106
 msgid "API Key / Password"
 msgstr "API Key / Kennwort"
 
-#: src/slic3r/GUI/GUI_App.cpp:810
+#: src/slic3r/GUI/GUI_App.cpp:1493
 msgid "Application preferences"
 msgstr "Anwendungseinstellungen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1374
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221
 msgid "Apply changes"
 msgstr "Änderungen anwenden"
 
-#: src/libslic3r/PrintConfig.cpp:575 src/libslic3r/PrintConfig.cpp:1708
+#: src/libslic3r/PrintConfig.cpp:611 src/libslic3r/PrintConfig.cpp:1823
 msgid "approximate seconds"
 msgstr "ungefähre Sekunden"
 
-#: src/libslic3r/PrintConfig.cpp:428 src/libslic3r/PrintConfig.cpp:854
+#: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:892
 msgid "Archimedean Chords"
 msgstr "Archimedische Bögen"
 
-#: src/libslic3r/Zipper.cpp:88
+#: src/libslic3r/miniz_extension.cpp:147
 msgid "archive is too large"
 msgstr "Archiv ist zu groß"
 
-#. TRN  remove/delete
-#: src/slic3r/GUI/Tab.cpp:3123
+#: src/slic3r/GUI/Tab.cpp:3420
 msgid "Are you sure you want to %1% the selected preset?"
 msgstr "Sind Sie sicher, dass Sie die gewählte Voreinstellung %1% möchten?"
 
@@ -739,97 +834,125 @@ msgid ""
 "This could leave your printer in an unusable state!"
 msgstr "Sind Sie sicher, dass Sie das Flashen der Firmware abbrechen wollen? Dies könnte Ihren Drucker in einen unbrauchbaren Zustand versetzen!"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1903 src/slic3r/GUI/DoubleSlider.cpp:1924
+#: src/slic3r/GUI/DoubleSlider.cpp:2122 src/slic3r/GUI/DoubleSlider.cpp:2142
 msgid "Are you sure you want to continue?"
 msgstr "Sind Sie sicher, dass Sie weitermachen wollen?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1269
+#: src/slic3r/GUI/Tab.cpp:3392
+msgid "Are you sure you want to delete \"%1%\" preset from the physical printer \"%2%\"?"
+msgstr "Sind Sie sicher, dass Sie die Voreinstellung \"%1%\" des physischen Drucker \"%2%\" löschen möchten?"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:658
+msgid "Are you sure you want to delete \"%1%\" printer?"
+msgstr "Sind Sie sicher, dass Sie den Drucker \"%1%\" löschen möchten?"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1128
 msgid "Are you sure you want to do it?"
 msgstr "Sind Sie sicher, dass Sie es tun wollen?"
 
-#: src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2566
 msgid "Area fill"
 msgstr "Bereichsfüllung"
 
-#: src/slic3r/GUI/Plater.cpp:641
+#: src/slic3r/GUI/Plater.cpp:507
 msgid "Around object"
 msgstr "Um das Objekt"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:157
-#: src/slic3r/GUI/Plater.cpp:2754
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/Plater.cpp:1549
 msgid "Arrange"
 msgstr "Anordnen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:152
 msgid "Arrange selection"
 msgstr "Auswahl anordnen"
 
-#: src/libslic3r/PrintConfig.cpp:3443
+#: src/libslic3r/PrintConfig.cpp:3642
 msgid "Arrange the supplied models in a plate and merge them in a single model in order to perform actions once."
 msgstr "Die zur Verfügung stehenden Modelle in einer Platte anordnen und zu einem einzigen Modell zusammenführen, um Aktionen zusammen durchführen zu können."
 
-#: src/slic3r/GUI/Plater.cpp:2813
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:149
 msgid "Arranging"
 msgstr "Anordnen"
 
-#: src/slic3r/GUI/Plater.cpp:2841
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:182
 msgid "Arranging canceled."
 msgstr "Anordnen abgebrochen."
 
-#: src/slic3r/GUI/Plater.cpp:2842
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:183
 msgid "Arranging done."
 msgstr "Anordnung beendet."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Arrow Down"
 msgstr "Pfeil runter"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
 msgid "Arrow Left"
 msgstr "Pfeil links"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
 msgid "Arrow Right"
 msgstr "Pfeil rechts"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Arrow Up"
 msgstr "Pfeil hoch"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:290
+#: src/slic3r/GUI/GUI_App.cpp:246
+msgid "Artwork model by Nora Al-Badri and Jan Nikolai Nelles"
+msgstr "Artwork-Modell von Nora Al-Badri und Jan Nikolai Nelles"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:265
 msgid "As a workaround, you may run PrusaSlicer with a software rendered 3D graphics by running prusa-slicer.exe with the --sw_renderer parameter."
 msgstr "Als Workaround können Sie PrusaSlicer mit einer software-gerenderten 3D-Grafik ausführen, indem Sie prusa-slicer.exe mit dem Parameter --sw_renderer ausführen."
 
-#: src/slic3r/GUI/GUI_App.cpp:1086 src/slic3r/GUI/Plater.cpp:2313
-#: src/slic3r/GUI/Tab.cpp:2960
+#: src/slic3r/GUI/Preferences.cpp:154
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:659
+msgid "Ask for unsaved changes when closing application"
+msgstr "Beim Schließen der Anwendung nach ungespeicherten Änderungen fragen"
+
+#: src/slic3r/GUI/Preferences.cpp:161
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:660
+msgid "Ask for unsaved changes when selecting new preset"
+msgstr "Nach nicht gespeicherten Änderungen fragen, wenn eine neue Voreinstellung ausgewählt wird"
+
+#: src/slic3r/GUI/GUI_App.cpp:1878 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210
+#: src/slic3r/GUI/Plater.cpp:2256 src/slic3r/GUI/Tab.cpp:3189
 msgid "Attention!"
 msgstr "Achtung!"
 
-#: src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:150
+msgid "Authorization Type"
+msgstr "Autorisierungs-Typ"
+
+#: src/libslic3r/PrintConfig.cpp:2013
 msgid "Auto generated supports"
 msgstr "Stützstrukturen automatisch generieren"
 
-#: src/slic3r/GUI/Preferences.cpp:47
+#: src/slic3r/GUI/Preferences.cpp:64
 msgid "Auto-center parts"
 msgstr "Teile automatisch zentrieren"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1377
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1224
 msgid "Auto-generate points"
 msgstr "Punkte automatisch generieren"
 
-#: src/slic3r/GUI/Plater.cpp:1157
+#: src/slic3r/GUI/Plater.cpp:1066
 #, c-format
 msgid "Auto-repaired (%d errors)"
 msgstr "Auto-Reparatur (%d Fehler)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:339
+#: src/slic3r/GUI/GUI_ObjectList.cpp:386
 #, c-format
 msgid "Auto-repaired (%d errors):"
 msgstr "Auto-Reparatur (%d Fehler):"
@@ -838,45 +961,53 @@ msgstr "Auto-Reparatur (%d Fehler):"
 msgid "Autodetected"
 msgstr "Automatisch erkannt"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1273
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1134
 msgid "Autogenerate support points"
 msgstr "Stützpunkte automatisch generieren"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1268
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127
 msgid "Autogeneration will erase all manually edited points."
 msgstr "Die automatische Generierung löscht alle manuell bearbeiteten Punkte."
 
-#: src/slic3r/GUI/Tab.cpp:3632
+#: src/slic3r/GUI/Tab.cpp:4051
 msgid "Automatic generation"
 msgstr "Automatische Erzeugung"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Automatic updates"
 msgstr "Automatische Updates"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "Automatically repair an STL file"
 msgstr "Repariere automatisch die STL Datei"
 
-#: src/slic3r/GUI/Tab.cpp:1171
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:129
+msgid "Autoset by angle"
+msgstr "Automatisch setzen nach Winkel"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:233
+msgid "Autoset custom supports"
+msgstr "Automatische benutzerdefinierte Stützen"
+
+#: src/slic3r/GUI/Tab.cpp:1501
 msgid "Autospeed (advanced)"
 msgstr "Automatische Geschwindigkeit (fortgeschritten)"
 
-#: src/libslic3r/PrintConfig.cpp:136
+#: src/libslic3r/PrintConfig.cpp:169
 msgid "Avoid crossing perimeters"
 msgstr "Kreuzen der Kontur vermeiden"
 
-#: src/slic3r/GUI/Tab.cpp:3268
+#: src/slic3r/GUI/Tab.cpp:3705
 msgid "BACK ARROW"
 msgstr "PFEIL ZURÜCK"
 
-#: src/slic3r/GUI/Tab.cpp:3290
+#: src/slic3r/GUI/Tab.cpp:3727
 msgid ""
 "BACK ARROW icon indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
 "Click to reset all settings for the current option group to the last saved preset."
 msgstr "Das Symbol PFEIL ZURÜCK zeigt an, dass die Einstellungen geändert wurden und nicht mit dem zuletzt gespeicherten Preset für die aktuelle Optionsgruppe übereinstimmen. Klicken Sie hier, um alle Einstellungen für die aktuelle Optionsgruppe auf das zuletzt gespeicherte Preset zurückzusetzen."
 
-#: src/slic3r/GUI/Tab.cpp:3304
+#: src/slic3r/GUI/Tab.cpp:3741
 msgid ""
 "BACK ARROW icon indicates that the value was changed and is not equal to the last saved preset.\n"
 "Click to reset current value to the last saved preset."
@@ -884,19 +1015,23 @@ msgstr ""
 "Das Symbol PFEIL ZURÜCK zeigt an, dass der Wert geändert wurde und nicht mit dem zuletzt gespeicherten Preset übereinstimmt. \n"
 "Klicken Sie, um den aktuellen Wert auf das zuletzt gespeicherte Preset zurückzusetzen."
 
-#: src/slic3r/GUI/Preferences.cpp:55
+#: src/slic3r/GUI/Preferences.cpp:72
 msgid "Background processing"
 msgstr "Hintergrundberechnung"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:351
+#: src/slic3r/GUI/GUI_ObjectList.cpp:398
 msgid "backwards edges"
 msgstr "umgekehrte Kanten"
 
-#: src/slic3r/GUI/MainFrame.cpp:174
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:60
+msgid "Balanced"
+msgstr "Balanziert"
+
+#: src/slic3r/GUI/MainFrame.cpp:535 src/slic3r/GUI/MainFrame.cpp:537
 msgid "based on Slic3r"
 msgstr "basiert auf Slic3r"
 
-#: src/slic3r/GUI/Tab.cpp:1439
+#: src/slic3r/GUI/Tab.cpp:1785
 msgid "Bed"
 msgstr "Druckbett"
 
@@ -908,31 +1043,31 @@ msgstr "Druckbett individuelles Modell"
 msgid "Bed custom texture"
 msgstr "Druckbett individuelle Textur"
 
-#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/BedShapeDialog.hpp:98 src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape"
-msgstr "Druckbrettprofil"
+msgstr "Druckbettprofil"
 
 #: src/libslic3r/PrintConfig.cpp:51
 msgid "Bed shape"
 msgstr "Druckbettkontur"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape and Size"
 msgstr "Druckbettform und -größe"
 
-#: src/libslic3r/PrintConfig.cpp:147
+#: src/libslic3r/PrintConfig.cpp:181
 msgid "Bed temperature"
 msgstr "Druckbetttemperatur"
 
-#: src/libslic3r/PrintConfig.cpp:145
+#: src/libslic3r/PrintConfig.cpp:178
 msgid "Bed temperature for layers after the first one. Set this to zero to disable bed temperature control commands in the output."
 msgstr "Druckbetttemperatur für Schichten nach der ersten Schicht. Setzen Sie diesen Wert auf null, um die Befehle zur Steuerung der Betttemperatur im Output zu deaktivieren."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1051
+#: src/slic3r/GUI/ConfigWizard.cpp:1417
 msgid "Bed Temperature:"
 msgstr "Druckbetttemperatur:"
 
-#: src/slic3r/GUI/Tab.cpp:1988 src/libslic3r/PrintConfig.cpp:153
+#: src/slic3r/GUI/Tab.cpp:2175 src/libslic3r/PrintConfig.cpp:187
 msgid "Before layer change G-code"
 msgstr "G-Code vor dem Schichtwechsel"
 
@@ -940,143 +1075,191 @@ msgstr "G-Code vor dem Schichtwechsel"
 msgid "Before roll back"
 msgstr "Vor dem Zurückwechseln"
 
-#: src/slic3r/GUI/Plater.cpp:640
+#: src/slic3r/GUI/Plater.cpp:506
 msgid "Below object"
 msgstr "Unter dem Objekt"
 
-#: src/libslic3r/PrintConfig.cpp:1578
+#: src/libslic3r/PrintConfig.cpp:1686
 msgid "Below Z"
 msgstr "Unter Z"
 
-#: src/libslic3r/PrintConfig.cpp:164
+#: src/libslic3r/PrintConfig.cpp:198
 msgid "Between objects G-code"
 msgstr "G-Code zwischen Objekten"
 
-#: src/slic3r/GUI/Tab.cpp:2006
+#: src/slic3r/GUI/Tab.cpp:2196
 msgid "Between objects G-code (for sequential printing)"
 msgstr "G-Code zwischen Objekten (Sequentielles Drucken)"
 
-#: src/libslic3r/PrintConfig.cpp:2489 src/libslic3r/PrintConfig.cpp:2490
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:242
+msgid "Block"
+msgstr "Blockieren"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:32
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:383
+msgid "Block seam"
+msgstr "Naht blockieren"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:373
+msgid "Block supports"
+msgstr "Stützen blockieren"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:292
+msgid "Block supports by angle"
+msgstr "Stützen nach Winkel blockieren"
+
+#: src/libslic3r/PrintConfig.cpp:2632 src/libslic3r/PrintConfig.cpp:2633
 msgid "Bottle volume"
 msgstr "Flaschenvolumen"
 
-#: src/libslic3r/PrintConfig.cpp:2496 src/libslic3r/PrintConfig.cpp:2497
+#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2640
 msgid "Bottle weight"
 msgstr "Flaschengewicht"
 
 #. TRN To be shown in the main menu View->Bottom
 #. TRN To be shown in Print Settings "Bottom solid layers"
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:665 src/libslic3r/PrintConfig.cpp:174
-#: src/libslic3r/PrintConfig.cpp:183
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
+#: src/libslic3r/PrintConfig.cpp:208 src/libslic3r/PrintConfig.cpp:217
 msgid "Bottom"
 msgstr "Unten"
 
-#: src/libslic3r/PrintConfig.cpp:435
+#: src/libslic3r/PrintConfig.cpp:471
 msgid "Bottom fill pattern"
 msgstr "Bodenfüllmuster"
 
-#: src/slic3r/GUI/PresetHints.cpp:342
+#: src/slic3r/GUI/PresetHints.cpp:340
 msgid "Bottom is open."
 msgstr "Boden ist offen."
 
-#: src/slic3r/GUI/PresetHints.cpp:336
+#: src/slic3r/GUI/PresetHints.cpp:334
 msgid "Bottom shell is %1% mm thick for layer height %2% mm."
 msgstr "Die Bodenschale ist %1% mm stark für eine Schichthöhe von %2% mm."
 
-#: src/libslic3r/PrintConfig.cpp:177
+#: src/libslic3r/PrintConfig.cpp:211
 msgid "Bottom solid layers"
 msgstr "Massive Basisschichten"
 
-#: src/slic3r/GUI/MainFrame.cpp:665
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
 msgid "Bottom View"
 msgstr "Ansicht von unten"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1464
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1468
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1595
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
 msgid "Box"
 msgstr "Kubus"
 
-#: src/libslic3r/PrintConfig.cpp:193
+#: src/libslic3r/PrintConfig.cpp:227
 msgid "Bridge"
 msgstr "Überbrückung"
 
-#: src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:256
 msgid "Bridge flow ratio"
 msgstr "Brückenflussverhältnis"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/slic3r/GUI/GUI_Preview.cpp:308 src/libslic3r/ExtrusionEntity.cpp:321
+#: src/libslic3r/ExtrusionEntity.cpp:350
 msgid "Bridge infill"
 msgstr "Überbrückungs-Infill"
 
-#: src/libslic3r/PrintConfig.cpp:234
+#: src/libslic3r/PrintConfig.cpp:268
 msgid "Bridges"
 msgstr "Überbrückungen"
 
-#: src/libslic3r/PrintConfig.cpp:213
+#: src/libslic3r/PrintConfig.cpp:247
 msgid "Bridges fan speed"
 msgstr "Brückenlüftergeschwindigkeit"
 
-#: src/libslic3r/PrintConfig.cpp:202
+#: src/libslic3r/PrintConfig.cpp:236
 msgid "Bridging angle"
 msgstr "Überbrückungswinkel"
 
-#: src/libslic3r/PrintConfig.cpp:204
+#: src/libslic3r/PrintConfig.cpp:238
 msgid "Bridging angle override. If left to zero, the bridging angle will be calculated automatically. Otherwise the provided angle will be used for all bridges. Use 180° for zero angle."
 msgstr "Überbrückungswinkel Übersteuerung. Wird der Wert auf null gesetzt, wird der Überbrückungswinkel automatisch berechnet. Andernfalls wird der angegebene Winkel für alle Brücken verwendet. Verwenden Sie 180° für den Nullwinkel."
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Bridging volumetric"
 msgstr "Überbrückungvolumen"
 
-#: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1117
+#: src/slic3r/GUI/Plater.cpp:400 src/slic3r/GUI/Tab.cpp:1446
 msgid "Brim"
 msgstr "Rand"
 
-#: src/libslic3r/PrintConfig.cpp:244
+#: src/libslic3r/PrintConfig.cpp:278
 msgid "Brim width"
 msgstr "Randbreite"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1658
-#: src/slic3r/GUI/Tab.cpp:1721
+#: src/slic3r/GUI/FirmwareDialog.cpp:805
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:271
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
 msgid "Browse"
 msgstr "Suchen"
 
-#: src/libslic3r/Zipper.cpp:82
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:28
+msgid "Brush shape"
+msgstr "Pinselform"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:44
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:27
+msgid "Brush size"
+msgstr "Pinselgröße"
+
+#: src/libslic3r/miniz_extension.cpp:141
 msgid "buffer too small"
 msgstr "Puffer zu klein"
 
+#: src/slic3r/GUI/GUI_App.cpp:1152
+msgid ""
+"But since this version of PrusaSlicer we don't show this information in Printer Settings anymore.\n"
+"Settings will be available in physical printers settings."
+msgstr ""
+"Seit dieser Version von PrusaSlicer zeigen wir diese Informationen nicht mehr in den Druckereinstellungen an.\n"
+"Die Einstellungen sind in den Einstellungen für physische Drucker verfügbar."
+
 #: src/slic3r/GUI/ButtonsDescription.cpp:16
 msgid "Buttons And Text Colors Description"
 msgstr "Schaltflächen und Textfarben Beschreibung"
 
-#: src/slic3r/GUI/PresetHints.cpp:223
+#: src/slic3r/GUI/GUI_App.cpp:1084
+msgid ""
+"By default new Printer devices will be named as \"Printer N\" during its creation.\n"
+"Note: This name can be changed later from the physical printers settings"
+msgstr ""
+"Standardmäßig werden neue Drucker bei ihrer Erstellung als \"Drucker N\" bezeichnet.\n"
+"Hinweis: Dieser Name kann später über die Einstellungen für physische Drucker geändert werden."
+
+#: src/slic3r/GUI/PresetHints.cpp:222
 msgid "by the print profile maximum"
 msgstr "mit dem Maximum des Druckerprofils"
 
-#: src/slic3r/GUI/Preferences.cpp:113
+#: src/slic3r/GUI/Preferences.cpp:178
 msgid "Camera"
 msgstr "Kamera"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:144
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
 msgid "Camera view"
 msgstr "Kameraansicht"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1982 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/ConfigWizard.cpp:2493 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:245
 #: src/slic3r/GUI/ProgressStatusBar.cpp:26
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:644
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:157
+#: src/slic3r/GUI/PrintHostDialogs.cpp:155
 msgid "Cancel selected"
 msgstr "Abbruch ausgewählt"
 
-#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/PrintHostDialogs.cpp:233
+#: src/slic3r/GUI/Plater.cpp:3589 src/slic3r/GUI/PrintHostDialogs.cpp:233
 msgid "Cancelled"
 msgstr "Abgebrochen"
 
-#: src/slic3r/GUI/Plater.cpp:3153 src/slic3r/GUI/PrintHostDialogs.cpp:232
+#: src/slic3r/GUI/Plater.cpp:2953 src/slic3r/GUI/PrintHostDialogs.cpp:232
 msgid "Cancelling"
 msgstr "Abbrechen"
 
@@ -1088,7 +1271,7 @@ msgstr "Abbrechen..."
 msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
 msgstr "Kann die Extrusionsbreite für %1% nicht berechnen: Variable \"%2%\" nicht zugänglich."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3400
 msgid ""
 "Cannot insert a new layer range after the current layer range.\n"
 "Current layer range overlaps with the next layer range."
@@ -1096,7 +1279,7 @@ msgstr ""
 "Es kann kein neuer Schichtenbereich nach dem aktuellen Schichtenbereich eingefügt werden.\n"
 "Der aktuelle Schichtenbereich überschneidet sich mit dem nächsten Schichtenbereich."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3391
 msgid ""
 "Cannot insert a new layer range after the current layer range.\n"
 "The next layer range is too thin to be split to two\n"
@@ -1105,7 +1288,7 @@ msgstr ""
 "Es kann kein neuer Schichtenbereich nach dem aktuellen Schichtenbereich eingefügt werden.\n"
 "Der nächste Schichtenbereich ist zu schmal, um auf zwei Schichten aufgeteilt zu werden ohne die Mindestschichthöhe zu verletzen."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3395
 msgid ""
 "Cannot insert a new layer range between the current and the next layer range.\n"
 "The gap between the current layer range and the next layer range\n"
@@ -1114,80 +1297,88 @@ msgstr ""
 "Es kann kein neuer Schichtenbereich zwischen dem aktuellen und dem nächsten Schichtenbereich eingefügt werden.\n"
 "Die Lücke zwischen dem aktuellen und dem nächsten Schichtenbereich ist ist schmaler als die minimal zulässige Schichthöhe."
 
-#: src/slic3r/GUI/Tab.cpp:3073
+#: src/slic3r/GUI/SavePresetDialog.cpp:137
 msgid "Cannot overwrite a system profile."
 msgstr "Systemprofil kann nicht überschrieben werden."
 
-#: src/slic3r/GUI/Tab.cpp:3077
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
 msgid "Cannot overwrite an external profile."
 msgstr "Ein externes Profil kann nicht überschrieben werden."
 
-#: src/libslic3r/SLAPrint.cpp:613
+#: src/libslic3r/SLAPrint.cpp:627
 msgid "Cannot proceed without support points! Add support points or disable support generation."
 msgstr "Ohne Stützpunkte kann nicht weitergearbeitet werden! Fügen Sie Stützpunkte hinzu oder deaktivieren Sie die Stützstruktur-Generierung."
 
-#: src/slic3r/GUI/Tab.cpp:1834
+#: src/slic3r/GUI/Tab.cpp:2068 src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "Capabilities"
 msgstr "Fähigkeiten"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Capture a configuration snapshot"
 msgstr "Erfassen einer Konfigurations-Momentaufnahme"
 
-#: src/libslic3r/PrintConfig.cpp:3424
+#: src/slic3r/GUI/ImGuiWrapper.cpp:801 src/slic3r/GUI/Search.cpp:458
+msgid "Category"
+msgstr "Kategorie"
+
+#: src/libslic3r/PrintConfig.cpp:3623
 msgid "Center"
 msgstr "Mitte"
 
-#: src/libslic3r/PrintConfig.cpp:3425
+#: src/libslic3r/PrintConfig.cpp:3624
 msgid "Center the print around the given center."
 msgstr "Zentriert den Druck um den angegebenen Mittelpunkt."
 
-#: src/slic3r/GUI/Tab.cpp:1728
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:329
 msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
 msgstr "Zertifikatsdatei (*.crt, *.pem)|*.crt;*.pem|alle Dateien|*.*"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+#: src/slic3r/GUI/SavePresetDialog.cpp:313
+msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\""
+msgstr "\"%1%\" in \"%2%\" für den physischen Drucker \"%3%\" ändern."
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
 msgid "Change camera type (perspective, orthographic)"
 msgstr "Ändern des Kameratyps (perspektivisch, orthografisch)"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:885
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:693
 msgid "Change drainage hole diameter"
 msgstr "Durchmesser des Drainagelochs ändern"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144 src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/DoubleSlider.cpp:1273 src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Change extruder"
 msgstr "Wechsel Extruder"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:536
+#: src/slic3r/GUI/GUI_ObjectList.cpp:574
 msgid "Change Extruder"
 msgstr "Wechsel Extruder"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1145
+#: src/slic3r/GUI/DoubleSlider.cpp:1274
 msgid "Change extruder (N/A)"
 msgstr "Extruder wechseln (nv)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3997
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4484
 msgid "Change Extruders"
 msgstr "Wechsel Extruder"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:157
 #, c-format
 msgid "Change Option %s"
 msgstr "Ändere Option %s"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3558
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4021
 msgid "Change Part Type"
 msgstr "Teil Typ ändern"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:820
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:694
 msgid "Change point head diameter"
 msgstr "Ändern des Stützpunkt-Kopfdurchmessers"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Change the number of instances of the selected object"
 msgstr "Anzahl der Kopien des gewählten Objektes ändern"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1589
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1718
 msgid "Change type"
 msgstr "Typ ändern"
 
@@ -1195,125 +1386,172 @@ msgstr "Typ ändern"
 msgid "Changelog && Download"
 msgstr "Changelog && Download"
 
-#: src/slic3r/GUI/GUI_App.cpp:442
+#: src/slic3r/GUI/GUI_App.cpp:1245
 msgid "Changing of an application language"
 msgstr "Wechsele die Anwendungssprache"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:769 src/slic3r/GUI/Preferences.cpp:64
+#: src/slic3r/GUI/ConfigWizard.cpp:1128 src/slic3r/GUI/Preferences.cpp:81
 msgid "Check for application updates"
 msgstr "Nach Updates suchen"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for configuration updates"
 msgstr "Suche nach Konfigurationsaktualisierungen"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for updates"
 msgstr "Nach &Updates suchen"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:532
+#: src/slic3r/GUI/BedShapeDialog.cpp:608
 msgid "Choose a file to import bed texture from (PNG/SVG):"
 msgstr "Wählen Sie eine Datei aus, aus der Sie die Druckbetttextur importieren möchten (PNG/SVG):"
 
-#: src/slic3r/GUI/MainFrame.cpp:773
+#: src/slic3r/GUI/MainFrame.cpp:1474
 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Wählen Sie eine Datei zum Slicen (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:555
+#: src/slic3r/GUI/BedShapeDialog.cpp:631
 msgid "Choose an STL file to import bed model from:"
 msgstr "Wählen Sie eine STL-Datei aus, aus der Sie das Druckbettmodell importieren möchten:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:487
+#: src/slic3r/GUI/BedShapeDialog.cpp:563
 msgid "Choose an STL file to import bed shape from:"
 msgstr "Wählen Sie eine STL-Datei aus, aus der Sie die Druckbettform importieren möchten:"
 
-#: src/slic3r/GUI/GUI_App.cpp:555
+#: src/slic3r/GUI/GUI_App.cpp:1208
 msgid "Choose one file (3MF/AMF):"
 msgstr "Wählen Sie eine Datei (3MF/AMF):"
 
-#: src/slic3r/GUI/GUI_App.cpp:567
+#: src/slic3r/GUI/GUI_App.cpp:1233
+msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):"
+msgstr "Datei auswählen (GCODE/.GCO/.G/.ngc/NGC):"
+
+#: src/slic3r/GUI/GUI_App.cpp:1220
 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Wählen Sie eine oder mehrere Dateien (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:895
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:35
+msgid "Choose SLA archive:"
+msgstr "SLA Archiv wählen:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1261
 msgid "Choose the type of firmware used by your printer."
 msgstr "Wählen Sie den Typ der von Ihrem Drucker verwendeten Firmware."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:89
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:53
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:36
+msgid "Circle"
+msgstr "Kreis"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:142
 msgid "Circular"
 msgstr "Kreisförmig"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/GLCanvas3D.cpp:4657
-msgid "Click right mouse button to open History"
-msgstr "Klicken Sie mit der rechten Maustaste, um den Verlauf zu öffnen"
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
+msgid "Click right mouse button to open/close History"
+msgstr "Klicken Sie mit der rechten Maustaste, um die Historie zu öffnen/schließen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:404
+#: src/slic3r/GUI/GUI_ObjectList.cpp:451
 msgid "Click the icon to change the object printable property"
 msgstr "Klicken Sie auf das Symbol, um die Druckbar-Eigenschaft des Objekts zu ändern"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:398
+#: src/slic3r/GUI/GUI_ObjectList.cpp:445
 msgid "Click the icon to change the object settings"
 msgstr "Klicken Sie auf das Symbol, um die Objekteinstellungen zu ändern"
 
-#: src/slic3r/GUI/Plater.cpp:343
+#: src/slic3r/GUI/PresetComboBoxes.cpp:566
 msgid "Click to edit preset"
 msgstr "Klicken zum Bearbeiten der Voreinstellung"
 
-#: src/libslic3r/PrintConfig.cpp:252
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to hide"
+msgstr "Klicken zum Ausblenden"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to show"
+msgstr "Klicken zum Anzeigen"
+
+#: src/libslic3r/PrintConfig.cpp:286
 msgid "Clip multi-part objects"
 msgstr "Beschneiden von Objekten aus mehreren Teilen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:25
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
 msgid "Clipping of view"
 msgstr "Ausschnitt der Ansicht"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:852
-#: src/slic3r/GUI/Mouse3DController.cpp:364
-#: src/slic3r/GUI/PrintHostDialogs.cpp:161
+#: src/slic3r/GUI/Mouse3DController.cpp:353
+#: src/slic3r/GUI/PrintHostDialogs.cpp:159
 msgid "Close"
 msgstr "Schließen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
-#: src/libslic3r/PrintConfig.cpp:2934
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:3098
 msgid "Closing distance"
 msgstr "Schliessabstand"
 
-#: src/slic3r/GUI/Plater.cpp:1260 src/libslic3r/PrintConfig.cpp:582
+#: src/slic3r/GUI/MainFrame.cpp:1297 src/slic3r/GUI/Plater.cpp:2144
+msgid "Collapse sidebar"
+msgstr "Seitenleiste zuklappen"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+msgid "Collapse/Expand the sidebar"
+msgstr "Seitenleiste zu-/ausklappen"
+
+#: src/slic3r/GUI/Plater.cpp:1198 src/libslic3r/PrintConfig.cpp:618
 msgid "Color"
 msgstr "Farbe"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1005
+#: src/slic3r/GUI/GCodeViewer.cpp:2410 src/slic3r/GUI/GCodeViewer.cpp:2438
+msgid "Color change"
+msgstr "Farbwechsel"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1130
 msgid "Color change (\"%1%\")"
 msgstr "Farbwechsel (\"%1%\")"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1006
+#: src/slic3r/GUI/DoubleSlider.cpp:1131
 msgid "Color change (\"%1%\") for Extruder %2%"
 msgstr "Farbwechsel (\"%1%\") für Extruder %2%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:995
+#: src/slic3r/GUI/GLCanvas3D.cpp:1001
 #, c-format
 msgid "Color change for Extruder %d at %.2f mm"
 msgstr "Farbwechsel für Extruder %d bei %.2f mm"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:228 src/slic3r/GUI/GUI_Preview.cpp:572
-#: src/libslic3r/GCode/PreviewData.cpp:359
+#: src/slic3r/GUI/Tab.cpp:2203
+msgid "Color Change G-code"
+msgstr "G-Code für Farbwechsel"
+
+#: src/libslic3r/PrintConfig.cpp:1960
+msgid "Color change G-code"
+msgstr "G-Code für Farbwechsel"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2531 src/slic3r/GUI/GUI_Preview.cpp:1475
+msgid "Color changes"
+msgstr "Farbwechsel"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2242 src/slic3r/GUI/GUI_Preview.cpp:282
+#: src/slic3r/GUI/GUI_Preview.cpp:784 src/libslic3r/GCode/PreviewData.cpp:364
 msgid "Color Print"
 msgstr "Color Print"
 
-#: src/libslic3r/PrintConfig.cpp:260
+#: src/libslic3r/PrintConfig.cpp:294
 msgid "Colorprint height"
 msgstr "Colorprint Höhe"
 
-#: src/libslic3r/PrintConfig.cpp:990
+#: src/libslic3r/PrintConfig.cpp:1034
 msgid "Combine infill every"
 msgstr "Infill kombinieren alle"
 
-#: src/libslic3r/PrintConfig.cpp:995
+#: src/libslic3r/PrintConfig.cpp:1039
 msgid "Combine infill every n layers"
 msgstr "Kombiniere das Infill all n Schichten"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:148
 msgid "Commands"
 msgstr "Befehle"
 
@@ -1321,23 +1559,23 @@ msgstr "Befehle"
 msgid "Comment:"
 msgstr "Kommentar:"
 
-#: src/slic3r/GUI/Tab.cpp:56 src/libslic3r/PrintConfig.cpp:280
+#: src/slic3r/GUI/Tab.cpp:107 src/libslic3r/PrintConfig.cpp:314
 msgid "Compatible print profiles"
 msgstr "Kompatible Druckprofile"
 
-#: src/libslic3r/PrintConfig.cpp:286
+#: src/libslic3r/PrintConfig.cpp:320
 msgid "Compatible print profiles condition"
 msgstr "Kompatible Druckprofile Bedingung"
 
-#: src/slic3r/GUI/Tab.cpp:50 src/libslic3r/PrintConfig.cpp:265
+#: src/slic3r/GUI/Tab.cpp:101 src/libslic3r/PrintConfig.cpp:299
 msgid "Compatible printers"
 msgstr "Kompatible Drucker"
 
-#: src/libslic3r/PrintConfig.cpp:271
+#: src/libslic3r/PrintConfig.cpp:305
 msgid "Compatible printers condition"
 msgstr "Kompatible Druckerbedingung"
 
-#: src/libslic3r/PrintConfig.cpp:304
+#: src/libslic3r/PrintConfig.cpp:338
 msgid "Complete individual objects"
 msgstr "Kompatible Einzelobjekte"
 
@@ -1345,27 +1583,27 @@ msgstr "Kompatible Einzelobjekte"
 msgid "Completed"
 msgstr "Fertig"
 
-#: src/libslic3r/Zipper.cpp:54
+#: src/libslic3r/miniz_extension.cpp:113
 msgid "compression failed"
 msgstr "Komprimierung fehlgeschlagen"
 
-#: src/libslic3r/PrintConfig.cpp:426 src/libslic3r/PrintConfig.cpp:849
+#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:887
 msgid "Concentric"
 msgstr "Konzentrisch"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2110
+#: src/slic3r/GUI/ConfigWizard.cpp:2625
 msgid "Configuration &Assistant"
 msgstr "Konfigurations &Assistent"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2113
+#: src/slic3r/GUI/ConfigWizard.cpp:2628
 msgid "Configuration &Wizard"
 msgstr "&Konfigurations-Assistent"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2109
+#: src/slic3r/GUI/ConfigWizard.cpp:2624
 msgid "Configuration Assistant"
 msgstr "Konfigurations-Assistent"
 
-#: src/libslic3r/PrintConfig.cpp:1316
+#: src/libslic3r/PrintConfig.cpp:1424
 msgid "Configuration notes"
 msgstr "Konfigurationsnotizen"
 
@@ -1381,11 +1619,15 @@ msgstr "Konfigurationsupdate"
 msgid "Configuration update is available"
 msgstr "Konfigurationsupdate ist verfügbar"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "Configuration update is available."
+msgstr "Konfigurationsupdate ist verfügbar."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "Configuration updates"
 msgstr "Konfigurationsupdates"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2112
+#: src/slic3r/GUI/ConfigWizard.cpp:2627
 msgid "Configuration Wizard"
 msgstr "Konfigurations-Assistent"
 
@@ -1393,15 +1635,11 @@ msgstr "Konfigurations-Assistent"
 msgid "Confirmation"
 msgstr "Bestätigung"
 
-#: src/slic3r/GUI/Tab.cpp:1931
-msgid "Connection failed."
-msgstr "Verbindung ist fehlgeschlagen."
-
-#: src/slic3r/GUI/Tab.cpp:3627
+#: src/slic3r/GUI/Tab.cpp:4046
 msgid "Connection of the support sticks and junctions"
 msgstr "Verbindung von Stützstäben und Verbindungen"
 
-#: src/slic3r/Utils/AstroBox.cpp:83
+#: src/slic3r/Utils/AstroBox.cpp:84
 msgid "Connection to AstroBox works correctly."
 msgstr "Die Verbindung zur AstroBox funktioniert korrekt."
 
@@ -1417,124 +1655,136 @@ msgstr "Die Verbindung zu FlashAir funktioniert einwandfrei und der Upload ist a
 msgid "Connection to OctoPrint works correctly."
 msgstr "Verbindung zu OctoPrint funktioniert einwandfrei."
 
-#: src/slic3r/GUI/Tab.cpp:1928
-msgid "Connection to printer works correctly."
-msgstr "Verbindung zum Drucker funktioniert einwandfrei."
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:260
+msgid "Connection to printers connected via the print host failed."
+msgstr "Die Verbindung zu Druckern, die über den Druck-Host angeschlossen sind, ist fehlgeschlagen."
 
-#: src/slic3r/Utils/OctoPrint.cpp:176
+#: src/slic3r/Utils/OctoPrint.cpp:185
 msgid "Connection to Prusa SL1 works correctly."
 msgstr "Verbindung zum Prusa SL1 funktioniert einwandfrei."
 
-#: src/libslic3r/PrintConfig.cpp:1909
+#: src/libslic3r/PrintConfig.cpp:2051
 msgid "Contact Z distance"
 msgstr "Kontakt Z-Abstand"
 
-#: src/slic3r/GUI/AboutDialog.cpp:261
+#: src/slic3r/GUI/AboutDialog.cpp:286
 msgid "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and numerous others."
 msgstr "Beiträge von Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik und zahlreichen anderen."
 
-#: src/libslic3r/PrintConfig.cpp:2659
+#: src/slic3r/GUI/GUI_App.cpp:245
+msgid "Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others."
+msgstr "Beiträge von Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik und zahlreichen anderen."
+
+#: src/libslic3r/PrintConfig.cpp:2823
 msgid "Controls the bridge type between two neighboring pillars. Can be zig-zag, cross (double zig-zag) or dynamic which will automatically switch between the first two depending on the distance of the two pillars."
 msgstr "Steuert den Brückentyp zwischen zwei benachbarten Säulen. Kann Zickzack, Kreuz (Doppelzickzack) oder dynamisch sein, das je nach Abstand der beiden Säulen automatisch zwischen den beiden erstgenannten umschaltet."
 
-#: src/slic3r/GUI/Tab.cpp:1444
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4886
+msgid "Convert from imperial units"
+msgstr "Von imperialen Einheiten umrechnen"
+
+#: src/slic3r/GUI/Tab.cpp:1790
 msgid "Cooling"
 msgstr "Kühlung"
 
-#: src/libslic3r/PrintConfig.cpp:660
+#: src/libslic3r/PrintConfig.cpp:696
 msgid "Cooling moves are gradually accelerating beginning at this speed."
 msgstr "Kühlbewegungen beschleunigen von dieser Anfangsgeschwindigkeit aus."
 
-#: src/libslic3r/PrintConfig.cpp:679
+#: src/libslic3r/PrintConfig.cpp:715
 msgid "Cooling moves are gradually accelerating towards this speed."
 msgstr "Kühlbewegungen beschleunigen auf diese Geschwindigkeit hin."
 
-#: src/slic3r/GUI/Tab.cpp:1465
+#: src/slic3r/GUI/Tab.cpp:1811
 msgid "Cooling thresholds"
 msgstr "Kühlungsschwellwerte"
 
-#: src/libslic3r/PrintConfig.cpp:327
+#: src/libslic3r/PrintConfig.cpp:361
 msgid "Cooling tube length"
 msgstr "Länge des Kühlschlauchs"
 
-#: src/libslic3r/PrintConfig.cpp:319
+#: src/libslic3r/PrintConfig.cpp:353
 msgid "Cooling tube position"
 msgstr "Position des Kühlschlauchs"
 
-#: src/slic3r/GUI/Plater.cpp:4752
+#: src/slic3r/GUI/Plater.cpp:4856
 msgid "Copies of the selected object"
 msgstr "Kopien des ausgewählten Objekts"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4505
+#: src/slic3r/GUI/GLCanvas3D.cpp:4871
 msgid "Copy"
 msgstr "Kopieren"
 
-#: src/slic3r/GUI/MainFrame.cpp:589
+#: src/slic3r/GUI/MainFrame.cpp:1195
 msgid "Copy selection to clipboard"
 msgstr "Auswahl in Zwischenablage kopieren"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
 msgid "Copy to clipboard"
 msgstr "Zu Zwischenablage kopieren"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:154
+#: src/slic3r/GUI/SysInfoDialog.cpp:177
 msgid "Copy to Clipboard"
 msgstr "Zu Zwischenablage kopieren"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:121
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
 msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
 msgstr "Das Kopieren des temporären G-Codes ist abgeschlossen, aber der exportierte Code konnte während der Kopierprüfung nicht geöffnet werden. Der Ausgabe-G-Code liegt in %1%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:118
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:153
 msgid "Copying of the temporary G-code has finished but the original code at %1% couldn't be opened during copy check. The output G-code is at %2%.tmp."
 msgstr "Das Kopieren des temporären G-Codes ist abgeschlossen, aber der Originalcode aus %1% konnte während der Kopierprüfung nicht geöffnet werden. Der ausgegebene G-Code liegt in %2%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:480
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:522
 msgid "Copying of the temporary G-code to the output G-code failed"
 msgstr "Das Kopieren des temporären G-Codes auf den Ausgabe-G-Code ist fehlgeschlagen"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:109
-msgid "Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?"
-msgstr "Das Kopieren des temporären G-Codes auf den Ausgabe-G-Code ist fehlgeschlagen. SD-Karte eventuell schreibgeschützt?"
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+msgid ""
+"Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\n"
+"Error message: %1%"
+msgstr ""
+"Das Kopieren des temporären G-Codes auf den Ausgabe-G-Code ist fehlgeschlagen. Vielleicht ist die SD-Karte schreibgeschützt?\n"
+"Fehlermeldung: %1%"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:112
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:147
 msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
 msgstr "Das Kopieren des temporären G-Codes auf den Ausgabe-G-Code ist fehlgeschlagen. Es könnte ein Problem mit dem Zielgerät vorliegen, bitte versuchen Sie erneut zu exportieren oder ein anderes Gerät zu verwenden. Der beschädigte Ausgabe-G-Code liegt in %1%.tmp."
 
-#: src/slic3r/GUI/AboutDialog.cpp:127 src/slic3r/GUI/AboutDialog.cpp:256
+#: src/slic3r/GUI/AboutDialog.cpp:139 src/slic3r/GUI/AboutDialog.cpp:281
 msgid "Copyright"
 msgstr "Urheberrecht"
 
-#: src/libslic3r/PrintConfig.cpp:2571 src/libslic3r/PrintConfig.cpp:2572
+#: src/libslic3r/PrintConfig.cpp:2714 src/libslic3r/PrintConfig.cpp:2715
 msgid "Correction for expansion"
 msgstr "Korrektur der Ausdehnung"
 
-#: src/slic3r/GUI/Tab.cpp:2100 src/slic3r/GUI/Tab.cpp:3519
+#: src/slic3r/GUI/Tab.cpp:2270 src/slic3r/GUI/Tab.cpp:3935
 msgid "Corrections"
 msgstr "Korrekturen"
 
-#: src/slic3r/GUI/Plater.cpp:1243 src/libslic3r/PrintConfig.cpp:760
-#: src/libslic3r/PrintConfig.cpp:2510 src/libslic3r/PrintConfig.cpp:2511
+#: src/slic3r/GUI/Plater.cpp:1158 src/libslic3r/PrintConfig.cpp:796
+#: src/libslic3r/PrintConfig.cpp:2653 src/libslic3r/PrintConfig.cpp:2654
 msgid "Cost"
 msgstr "Kosten"
 
-#: src/slic3r/GUI/Plater.cpp:239
+#: src/slic3r/GUI/Plater.cpp:245
 msgid "Cost (money)"
 msgstr "Kosten (Geld)"
 
-#: src/slic3r/GUI/Plater.cpp:2835
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:176
 msgid "Could not arrange model objects! Some geometries may be invalid."
 msgstr "Modellobjekte konnten nicht angeordnet werden! Einige Geometrien können ungültig sein."
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/Utils/AstroBox.cpp:90
 msgid "Could not connect to AstroBox"
 msgstr "Konnte keine Verbindung zur AstroBox herstellen"
 
-#: src/slic3r/Utils/Duet.cpp:54
+#: src/slic3r/Utils/Duet.cpp:55
 msgid "Could not connect to Duet"
 msgstr "Ich konnte keine Verbindung zum Duet herstellen"
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:74
 msgid "Could not connect to FlashAir"
 msgstr "Die Verbindung zu FlashAir konnte nicht hergestellt werden"
 
@@ -1542,56 +1792,69 @@ msgstr "Die Verbindung zu FlashAir konnte nicht hergestellt werden"
 msgid "Could not connect to OctoPrint"
 msgstr "Ich konnte keine Verbindung zu OctoPrint herstellen"
 
-#: src/slic3r/Utils/OctoPrint.cpp:181
+#: src/slic3r/Utils/OctoPrint.cpp:191
 msgid "Could not connect to Prusa SLA"
 msgstr "Ich konnte keine Verbindung zum Prusa SLA herstellen"
 
-#: src/slic3r/GUI/Tab.cpp:1687
+#: src/slic3r/Utils/Http.cpp:73
+msgid "Could not detect system SSL certificate store. PrusaSlicer will be unable to establish secure network connections."
+msgstr "Konnte den System-SSL-Zertifikatspeicher nicht erkennen. PrusaSlicer kann keine sicheren Netzwerkverbindungen herstellen."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:289
 msgid "Could not get a valid Printer Host reference"
 msgstr "Es konnte keine gültige Drucker-Host-Referenz ermittelt werden"
 
-#: src/slic3r/Utils/Duet.cpp:134
+#: src/slic3r/Utils/Duet.cpp:136
 msgid "Could not get resources to create a new connection"
 msgstr "Ressourcen zum Erstellen einer neuen Verbindung konnten nicht bezogen werden"
 
-#: src/libslic3r/PrintConfig.cpp:1959
+#: src/libslic3r/PrintConfig.cpp:2101
 msgid "Cover the top contact layer of the supports with loops. Disabled by default."
 msgstr "Deckt die obere Kontaktschicht der Stützstrukturen mit Schleifen ab. Standardmäßig deaktiviert."
 
-#: src/libslic3r/PrintConfig.cpp:89
+#: src/libslic3r/PrintConfig.cpp:91
 msgid "Cracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low."
 msgstr "Spalte, die kleiner als der doppelte Lückenschlussradius sind, werden während des Slicens des Dreiecksnetzes gefüllt. Der Lückenschluss kann die endgültige Druckauflösung verringern, daher ist es ratsam, den Wert relativ niedrig zu halten."
 
-#: src/libslic3r/Zipper.cpp:58
+#: src/libslic3r/miniz_extension.cpp:117
 msgid "CRC-32 check failed"
 msgstr "CRC-32 Check fehlgeschlagen"
 
-#: src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:3021
 msgid "Create pad around object and ignore the support elevation"
 msgstr "Erstellt eine Grundschicht um das Objekt herum und ignoriert die Unterstützungshöhe"
 
-#: src/libslic3r/PrintConfig.cpp:2724
+#: src/libslic3r/PrintConfig.cpp:2888
 msgid "Critical angle"
 msgstr "Kritischer Winkel"
 
-#: src/libslic3r/PrintConfig.cpp:2668
+#: src/libslic3r/PrintConfig.cpp:2832
 msgid "Cross"
 msgstr "Kreuz"
 
-#: src/libslic3r/PrintConfig.cpp:847
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:225
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:203
+msgid "Ctrl + Mouse wheel"
+msgstr "Strg + Mausrad"
+
+#: src/libslic3r/PrintConfig.cpp:885
 msgid "Cubic"
 msgstr "Kubisch"
 
-#: src/slic3r/GUI/wxExtensions.cpp:704
+#: src/slic3r/Utils/Http.cpp:91
+msgid "CURL init has failed. PrusaSlicer will be unable to establish network connections. See logs for additional details."
+msgstr "CURL Init ist fehlgeschlagen. PrusaSlicer ist nicht in der Lage, Netzwerkverbindungen herzustellen. Siehe Protokolle für weitere Details."
+
+#: src/slic3r/GUI/wxExtensions.cpp:624
 #, c-format
 msgid "Current mode is %s"
 msgstr "Aktueller Modus ist %s"
 
-#: src/slic3r/GUI/Tab.cpp:959
+#: src/slic3r/GUI/Tab.cpp:1278
 msgid "Current preset is inherited from"
 msgstr "Aktuelle Voreinstellung ist abgeleitet von"
 
-#: src/slic3r/GUI/Tab.cpp:957
+#: src/slic3r/GUI/Tab.cpp:1276
 msgid "Current preset is inherited from the default preset."
 msgstr "Aktuelle Voreinstellung ist abgeleitet von der Standardvoreinstellung."
 
@@ -1599,451 +1862,488 @@ msgstr "Aktuelle Voreinstellung ist abgeleitet von der Standardvoreinstellung."
 msgid "Current version:"
 msgstr "Aktuelle Version:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:98 src/slic3r/GUI/GUI_Preview.cpp:249
-#: src/libslic3r/ExtrusionEntity.cpp:322
+#: src/slic3r/GUI/BedShapeDialog.cpp:143 src/slic3r/GUI/GUI_Preview.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:327 src/libslic3r/ExtrusionEntity.cpp:362
 msgid "Custom"
 msgstr "Benutzerdefiniert"
 
-#: src/libslic3r/PrintConfig.cpp:112
+#: src/libslic3r/PrintConfig.cpp:114
 msgid "Custom CA certificate file can be specified for HTTPS OctoPrint connections, in crt/pem format. If left blank, the default OS CA certificate repository is used."
 msgstr "Benutzerdefinierte CA-Zertifikatsdatei kann für HTTPS OctoPrint-Verbindungen im crt/pem-Format angegeben werden. Wenn das Feld leer bleibt, wird das standardmäßige Zertifikatsverzeichnis der Betriebssystem-Zertifizierungsstelle verwendet."
 
-#: src/slic3r/GUI/Tab.cpp:1527 src/slic3r/GUI/Tab.cpp:1975
+#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2160
+#: src/libslic3r/PrintConfig.cpp:1978
 msgid "Custom G-code"
 msgstr "Benutzerdefinierter G-Code"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1619
+#: src/slic3r/GUI/DoubleSlider.cpp:1815
 msgid "Custom G-code on current layer (%1% mm)."
 msgstr "Benutzerdefinierter G-Code auf der aktuellen Ebene (%1% mm)."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/GCodeViewer.cpp:2580 src/slic3r/GUI/GUI_Preview.cpp:1477
+msgid "Custom G-codes"
+msgstr "Benutzerdefinierte G-Codes"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer"
 msgstr "Benutzerdefinierter Drucker"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer Setup"
 msgstr "Benutzerdefinierte Drucker-Einrichtung"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:736
+#: src/slic3r/GUI/ConfigWizard.cpp:1095
 msgid "Custom profile name:"
 msgstr "Benutzerdefinierter Profilname:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:42
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:144 src/libslic3r/PrintConfig.cpp:3402
+#: src/slic3r/GUI/DoubleSlider.cpp:1135
+msgid "Custom template (\"%1%\")"
+msgstr "Benutzerdefinierte Vorlage (\"%1%\")"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:146 src/libslic3r/PrintConfig.cpp:3601
 msgid "Cut"
 msgstr "Schneiden"
 
-#: src/slic3r/GUI/Plater.cpp:4786
+#: src/slic3r/GUI/Plater.cpp:4921
 msgid "Cut by Plane"
 msgstr "Schneiden durch Ebene"
 
-#: src/libslic3r/PrintConfig.cpp:3403
+#: src/libslic3r/PrintConfig.cpp:3602
 msgid "Cut model at the given Z."
 msgstr "Schneidet Modell am gegebenen Z-Wert."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Cylinder"
 msgstr "Zylinder"
 
-#: src/slic3r/GUI/MainFrame.cpp:568
+#: src/slic3r/GUI/MainFrame.cpp:1174
 msgid "D&eselect all"
 msgstr "All&es Abwählen"
 
-#: src/libslic3r/PrintConfig.cpp:3504
+#: src/libslic3r/PrintConfig.cpp:3709
 msgid "Data directory"
 msgstr "Datenverzeichnis"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:313
+#: src/slic3r/GUI/Mouse3DController.cpp:300
 msgid "Deadzone:"
 msgstr "Todeszone:"
 
-#: src/libslic3r/Zipper.cpp:52
+#: src/libslic3r/miniz_extension.cpp:111
 msgid "decompression failed or archive is corrupted"
 msgstr "Entpacken fehlgeschlagen oder Archiv defekt"
 
-#: src/slic3r/GUI/Plater.cpp:4720
+#: src/slic3r/GUI/Plater.cpp:4824
 msgid "Decrease Instances"
 msgstr "Kopien verringern"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1704 src/libslic3r/PrintConfig.cpp:335
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1832 src/libslic3r/PrintConfig.cpp:369
 msgid "Default"
 msgstr "Standard"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:457 src/slic3r/GUI/GUI_ObjectList.cpp:469
-#: src/slic3r/GUI/GUI_ObjectList.cpp:917 src/slic3r/GUI/GUI_ObjectList.cpp:3967
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3977
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4012
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:200
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:257
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:282
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:490
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:1753
+#: src/slic3r/GUI/ExtraRenderers.cpp:297 src/slic3r/GUI/GUI_ObjectList.cpp:496
+#: src/slic3r/GUI/GUI_ObjectList.cpp:508 src/slic3r/GUI/GUI_ObjectList.cpp:1015
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4454
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4464
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4499
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:202
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:259
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:284
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:492
 msgid "default"
 msgstr "Standard"
 
-#: src/libslic3r/PrintConfig.cpp:777
+#: src/libslic3r/PrintConfig.cpp:813
 msgid "Default base angle for infill orientation. Cross-hatching will be applied to this. Bridges will be infilled using the best direction Slic3r can detect, so this setting does not affect them."
 msgstr "Standard-Grundwinkel für die Ausrichtung der Füllung. Hierfür werden Kreuzschraffuren verwendet. Brücken werden mit der besten Richtung gefüllt, die Slic3r erkennen kann, so dass diese Einstellung sie nicht beeinflusst."
 
-#: src/libslic3r/PrintConfig.cpp:554
+#: src/slic3r/GUI/GCodeViewer.cpp:2289
+msgid "Default color"
+msgstr "Standardfarbe"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2313
+msgid "default color"
+msgstr "Standardfarbe"
+
+#: src/libslic3r/PrintConfig.cpp:590
 msgid "Default extrusion width"
 msgstr "Standardextrusionsbreite"
 
-#: src/slic3r/GUI/Tab.cpp:987
+#: src/slic3r/GUI/Tab.cpp:1305
 msgid "default filament profile"
 msgstr "Standard-Filamentprofil"
 
-#: src/libslic3r/PrintConfig.cpp:345
+#: src/libslic3r/PrintConfig.cpp:379
 msgid "Default filament profile"
 msgstr "Standard-Filamentprofil"
 
-#: src/libslic3r/PrintConfig.cpp:346
+#: src/libslic3r/PrintConfig.cpp:380
 msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
 msgstr "Standard-Filamentprofil, das dem aktuellen Druckerprofil zugeordnet ist. Bei Auswahl des aktuellen Druckerprofils wird dieses Filamentprofil aktiviert."
 
-#: src/slic3r/GUI/Tab.cpp:2919
-#, c-format
-msgid "Default preset (%s)"
-msgstr "Standard Voreinstellung(%s)"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:904 src/slic3r/GUI/GLCanvas3D.cpp:933
+#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
 msgid "Default print color"
 msgstr "Standard Druckfarbe"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1302
 msgid "default print profile"
 msgstr "Standard-Druckprofil"
 
-#: src/libslic3r/PrintConfig.cpp:352
+#: src/libslic3r/PrintConfig.cpp:386
 msgid "Default print profile"
 msgstr "Standard-Druckprofil"
 
-#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:2592
-#: src/libslic3r/PrintConfig.cpp:2603
+#: src/libslic3r/PrintConfig.cpp:387 src/libslic3r/PrintConfig.cpp:2735
+#: src/libslic3r/PrintConfig.cpp:2746
 msgid "Default print profile associated with the current printer profile. On selection of the current printer profile, this print profile will be activated."
 msgstr "Standarddruckprofil, das dem aktuellen Druckerprofil zugeordnet ist. Bei Auswahl des aktuellen Druckerprofils wird dieses Druckprofil aktiviert."
 
-#: src/slic3r/GUI/Tab.cpp:1001
+#: src/slic3r/GUI/Tab.cpp:1319
 msgid "default SLA material profile"
 msgstr "Standard-SLA-Materialprofil"
 
-#: src/libslic3r/PrintConfig.cpp:2591 src/libslic3r/PrintConfig.cpp:2602
+#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2745
 msgid "Default SLA material profile"
 msgstr "Standard-SLA-Materialprofil"
 
-#: src/slic3r/GUI/Tab.cpp:1005
+#: src/slic3r/GUI/Tab.cpp:1323
 msgid "default SLA print profile"
 msgstr "Standard-SLA-Druckprofil"
 
-#: src/slic3r/GUI/Field.cpp:136
+#: src/slic3r/GUI/Field.cpp:184
 msgid "default value"
 msgstr "Standardwert"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:734
+#: src/slic3r/GUI/ConfigWizard.cpp:1093
 msgid "Define a custom printer profile"
 msgstr "Benutzerdefiniertes Druckerprofil definieren"
 
-#: src/libslic3r/PrintConfig.cpp:2798
+#: src/libslic3r/PrintConfig.cpp:2962
 msgid "Defines the pad cavity depth. Set to zero to disable the cavity. Be careful when enabling this feature, as some resins may produce an extreme suction effect inside the cavity, which makes peeling the print off the vat foil difficult."
 msgstr "Definiert die Tiefe des Grundschichthohlraums. Zum Deaktivieren der Aushöhlung auf null setzen. Seien Sie vorsichtig, wenn Sie diese Funktion aktivieren, da einige Harze einen extremen Saugeffekt im Hohlraum erzeugen können, der das Abziehen des Drucks von der Wannenfolie erschwert."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:346
+#: src/slic3r/GUI/GUI_ObjectList.cpp:393
 msgid "degenerate facets"
 msgstr "entartete Facetten"
 
-#: src/libslic3r/PrintConfig.cpp:640
+#: src/libslic3r/PrintConfig.cpp:676
 msgid "Delay after unloading"
 msgstr "Verzögerung nach dem Entladen"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "delete"
 msgstr "löschen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4475 src/slic3r/GUI/GUI_ObjectList.cpp:1718
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/GLCanvas3D.cpp:4841 src/slic3r/GUI/GUI_ObjectList.cpp:1846
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Delete"
 msgstr "Löschen"
 
-#: src/slic3r/GUI/MainFrame.cpp:575
+#: src/slic3r/GUI/MainFrame.cpp:1181
 msgid "Delete &all"
 msgstr "&Alles löschen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4484 src/slic3r/GUI/KBShortcutsDialog.cpp:129
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/GLCanvas3D.cpp:4850 src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "Delete all"
 msgstr "Alle löschen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2176
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2341
 msgid "Delete All Instances from Object"
 msgstr "Alle Kopien des Objektes löschen"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1516
+#: src/slic3r/GUI/DoubleSlider.cpp:1708
 msgid "Delete color change"
 msgstr "Farbwechsel löschen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
 msgid "Delete color change marker for current layer"
 msgstr "Löscht einen Farbwechselmarker der aktuellen Schicht"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1519
+#: src/slic3r/GUI/DoubleSlider.cpp:1711
 msgid "Delete custom G-code"
 msgstr "Benutzerdefinierten G-Code löschen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:539
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:424
 msgid "Delete drainage hole"
 msgstr "Drainageloch entfernen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2192
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2357
 msgid "Delete Height Range"
 msgstr "Höhenbereich löschen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2246
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
 msgid "Delete Instance"
 msgstr "Kopie löschen"
 
-#: src/slic3r/GUI/Plater.cpp:2712
+#: src/slic3r/GUI/Plater.cpp:2673
 msgid "Delete Object"
 msgstr "Objekt löschen"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:101
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:104
 #, c-format
 msgid "Delete Option %s"
 msgstr "Lösche Option %s"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1518
+#: src/slic3r/GUI/DoubleSlider.cpp:1710
 msgid "Delete pause print"
 msgstr "Druckpause löschen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
+#: src/slic3r/GUI/PresetComboBoxes.cpp:652
+msgid "Delete physical printer"
+msgstr "Physischen Drucker löschen"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:659
+msgid "Delete Physical Printer"
+msgstr "Physischen Drucker löschen"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:123
 msgid "Delete selected"
 msgstr "Löschen ausgewählt"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2830
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3221
 msgid "Delete Selected"
 msgstr "Löschen ausgewählt"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2693
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3083
 msgid "Delete Selected Item"
 msgstr "Gewähltes Element löschen"
 
-#: src/slic3r/GUI/Plater.cpp:4677
+#: src/slic3r/GUI/Plater.cpp:4782
 msgid "Delete Selected Objects"
 msgstr "Ausgewählte Objekte entfernen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2319
 msgid "Delete Settings"
 msgstr "Einstellungen löschen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2227
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2393
 msgid "Delete Subobject"
 msgstr "Subobjekt löschen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:631
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:514
 msgid "Delete support point"
 msgstr "Stützpunkt löschen"
 
-#: src/slic3r/GUI/Tab.cpp:134
+#: src/slic3r/GUI/Tab.cpp:204
 msgid "Delete this preset"
 msgstr "Lösche diese Voreinstellung"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1035
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:55
+msgid "Delete this preset from this printer device"
+msgstr "Voreinstellung dieses Druckers löschen"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1160
 msgid "Delete tick mark - Left click or press \"-\" key"
 msgstr "Häkchen löschen - Linksklick oder Taste \"-\" drücken"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1517
+#: src/slic3r/GUI/DoubleSlider.cpp:1709
 msgid "Delete tool change"
 msgstr "Werkzeugwechsel löschen"
 
-#: src/slic3r/GUI/MainFrame.cpp:576
+#: src/slic3r/GUI/MainFrame.cpp:1182
 msgid "Deletes all objects"
 msgstr "Löscht alle Objekte"
 
-#: src/slic3r/GUI/MainFrame.cpp:573
+#: src/slic3r/GUI/MainFrame.cpp:1179
 msgid "Deletes the current selection"
 msgstr "Löscht die aktuelle Auswahl"
 
-#: src/libslic3r/PrintConfig.cpp:717 src/libslic3r/PrintConfig.cpp:2503
-#: src/libslic3r/PrintConfig.cpp:2504
+#: src/libslic3r/PrintConfig.cpp:753 src/libslic3r/PrintConfig.cpp:2646
+#: src/libslic3r/PrintConfig.cpp:2647
 msgid "Density"
 msgstr "Dichte"
 
-#: src/libslic3r/PrintConfig.cpp:791
+#: src/libslic3r/PrintConfig.cpp:827
 msgid "Density of internal infill, expressed in the range 0% - 100%."
 msgstr "Infilldichte. Als Prozentwert von 0% - 100% ausgedrückt."
 
-#: src/slic3r/GUI/Tab.cpp:1258 src/slic3r/GUI/Tab.cpp:1548
-#: src/slic3r/GUI/Tab.cpp:2019 src/slic3r/GUI/Tab.cpp:2135
-#: src/slic3r/GUI/Tab.cpp:3543 src/slic3r/GUI/Tab.cpp:3671
+#: src/slic3r/GUI/Tab.cpp:1588 src/slic3r/GUI/Tab.cpp:1895
+#: src/slic3r/GUI/Tab.cpp:2228 src/slic3r/GUI/Tab.cpp:2304
+#: src/slic3r/GUI/Tab.cpp:3959 src/slic3r/GUI/Tab.cpp:4090
 msgid "Dependencies"
 msgstr "Abhängigkeiten"
 
-#: src/libslic3r/PrintConfig.cpp:1612 src/libslic3r/PrintConfig.cpp:1613
+#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1721
 msgid "Deretraction Speed"
 msgstr "Wiedereinzugsgeschwindigkeit"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
+#: src/slic3r/GUI/GCodeViewer.cpp:2529 src/slic3r/GUI/GUI_Preview.cpp:337
+#: src/slic3r/GUI/GUI_Preview.cpp:1473
+msgid "Deretractions"
+msgstr "Wiedereinzüge"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:172
+msgid "Descriptive name for the printer"
+msgstr "Beschreibender Name des Druckers"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:122
 msgid "Deselect all"
 msgstr "Alles abwählen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Deselect by rectangle"
 msgstr "Abwahl über Rechteck"
 
-#: src/slic3r/GUI/MainFrame.cpp:569
+#: src/slic3r/GUI/MainFrame.cpp:1175
 msgid "Deselects all objects"
 msgstr "Alle Objekte abwählen"
 
-#: src/slic3r/GUI/Tab.cpp:963
+#: src/slic3r/GUI/Tab.cpp:1224
 msgid "Detach from system preset"
 msgstr "Lösen von der Systemvoreinstellung"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1246
 msgid "Detach preset"
 msgstr "Lösen der Voreinstellugen"
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/Tab.cpp:3323
 msgid "Detached"
 msgstr "Losgelöst"
 
-#: src/libslic3r/PrintConfig.cpp:1373
+#: src/libslic3r/PrintConfig.cpp:1481
 msgid "Detect bridging perimeters"
 msgstr "Umfangbrücken entdecken"
 
-#: src/libslic3r/PrintConfig.cpp:2075
+#: src/libslic3r/PrintConfig.cpp:2218
 msgid "Detect single-width walls (parts where two extrusions don't fit and we need to collapse them into a single trace)."
 msgstr "Erkennen von Wänden mit einfacher Breite (Teile, bei denen zwei Extrusionen nicht passen und wir sie in eine einzige Druckspur zusammenfassen müssen)."
 
-#: src/libslic3r/PrintConfig.cpp:2073
+#: src/libslic3r/PrintConfig.cpp:2216
 msgid "Detect thin walls"
 msgstr "Dünne Wände erkennen"
 
-#: src/libslic3r/PrintConfig.cpp:3472
+#: src/libslic3r/PrintConfig.cpp:3671
 msgid "Detect unconnected parts in the given model(s) and split them into separate objects."
 msgstr "Erkennung nicht zusammenhängender Teile in den angegebenen Modellen und Aufteilung in einzelne Objekte."
 
-#: src/slic3r/GUI/Plater.cpp:2368
+#: src/slic3r/GUI/Plater.cpp:2330
 msgid "Detected advanced data"
 msgstr "Erweiterte Daten gefunden"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:289
+#: src/slic3r/GUI/Mouse3DController.cpp:274
 msgid "Device:"
 msgstr "Gerät:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:93 src/libslic3r/PrintConfig.cpp:709
+#: src/slic3r/GUI/BedShapeDialog.cpp:95 src/libslic3r/PrintConfig.cpp:745
 msgid "Diameter"
 msgstr "Durchmesser"
 
-#: src/libslic3r/PrintConfig.cpp:2694
+#: src/libslic3r/PrintConfig.cpp:2858
 msgid "Diameter in mm of the pillar base"
 msgstr "Durchmesser der Pfeilerbasis in mm"
 
-#: src/libslic3r/PrintConfig.cpp:2650
+#: src/libslic3r/PrintConfig.cpp:2793
 msgid "Diameter in mm of the support pillars"
 msgstr "Durchmesser der Stützpfeiler in mm"
 
-#: src/libslic3r/PrintConfig.cpp:2622
+#: src/libslic3r/PrintConfig.cpp:2765
 msgid "Diameter of the pointing side of the head"
 msgstr "Durchmesser der Spitzenseite des Kopfes"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:94
+#: src/slic3r/GUI/BedShapeDialog.cpp:131
 msgid "Diameter of the print bed. It is assumed that origin (0,0) is located in the center."
 msgstr "Durchmesser des Druckbettes. Es wird angenommen, dass der Ursprung (0,0) sich im Mittelpunkt befindet."
 
-#: src/libslic3r/PrintConfig.cpp:1639
+#: src/libslic3r/PrintConfig.cpp:1747
 msgid "Direction"
 msgstr "Richtung"
 
-#: src/libslic3r/PrintConfig.cpp:359
+#: src/libslic3r/PrintConfig.cpp:393
 msgid "Disable fan for the first"
 msgstr "Kein Lüfter für die ersten"
 
-#: src/libslic3r/PrintConfig.cpp:1349
+#: src/libslic3r/PrintConfig.cpp:1457
 msgid "Disables retraction when the travel path does not exceed the upper layer's perimeters (and thus any ooze will be probably invisible)."
 msgstr "Deaktiviert den Einzug, wenn der Verfahrweg die Perimeter der oberen Schicht nicht überschreitet (und somit ist der Auslauf wahrscheinlich unsichtbar)."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:952
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:641
+msgid "Discard"
+msgstr "Verwerfen"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1066
 msgid "Discard all custom changes"
 msgstr "Alle benutzerdefinierten Änderungen verwerfen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1375
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222
 msgid "Discard changes"
 msgstr "Änderungen verwerfen"
 
-#: src/slic3r/GUI/GUI_App.cpp:932 src/slic3r/GUI/Tab.cpp:2946
-msgid "Discard changes and continue anyway?"
-msgstr "Änderungen verwerfen und fortfahren?"
-
-#: src/slic3r/GUI/Tab.cpp:2078
+#: src/slic3r/GUI/Tab.cpp:2248
 msgid "Display"
 msgstr "Display"
 
-#: src/libslic3r/PrintConfig.cpp:2359
+#: src/libslic3r/PrintConfig.cpp:2502
 msgid "Display height"
 msgstr "Displayhöhe"
 
-#: src/libslic3r/PrintConfig.cpp:2378
+#: src/libslic3r/PrintConfig.cpp:2521
 msgid "Display horizontal mirroring"
 msgstr "Zeige horizontale Spiegelung"
 
-#: src/libslic3r/PrintConfig.cpp:2392
+#: src/libslic3r/PrintConfig.cpp:2535
 msgid "Display orientation"
 msgstr "Displayausrichtung"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Display the Print Host Upload Queue window"
 msgstr "Zeige das Druckhost Warteschlangenfenster"
 
-#: src/libslic3r/PrintConfig.cpp:2385
+#: src/libslic3r/PrintConfig.cpp:2528
 msgid "Display vertical mirroring"
 msgstr "Zeige vertikale Spiegelung"
 
-#: src/libslic3r/PrintConfig.cpp:2353
+#: src/libslic3r/PrintConfig.cpp:2496
 msgid "Display width"
 msgstr "Displaybreite"
 
-#: src/libslic3r/PrintConfig.cpp:377
+#: src/libslic3r/PrintConfig.cpp:411
 msgid "Distance between copies"
 msgstr "Abstand zwischen Kopien"
 
-#: src/libslic3r/PrintConfig.cpp:1680
+#: src/libslic3r/PrintConfig.cpp:1157
+msgid "Distance between ironing lines"
+msgstr "Abstand zwischen Bügellinien"
+
+#: src/libslic3r/PrintConfig.cpp:1788
 msgid "Distance between skirt and object(s). Set this to zero to attach the skirt to the object(s) and get a brim for better adhesion."
 msgstr "Distanz zwischen Schürze und Objekt. Auf null stellen um die Schürze an das Objekt zu verbinden und einen Rand für bessere Haftung zu generieren."
 
-#: src/libslic3r/PrintConfig.cpp:2882
+#: src/libslic3r/PrintConfig.cpp:3046
 msgid "Distance between two connector sticks which connect the object and the generated pad."
 msgstr "Abstand zwischen zwei Verbindungsstäben, die das Objekt mit der erzeugten Grundschicht verbinden."
 
-#: src/libslic3r/PrintConfig.cpp:1679
+#: src/libslic3r/PrintConfig.cpp:1787
 msgid "Distance from object"
 msgstr "Abstand vom Objekt"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:85
+#: src/slic3r/GUI/BedShapeDialog.cpp:121
 msgid "Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."
 msgstr "Abstand der 0,0 G-Code-Koordinate von der linken vorderen Ecke des Rechtecks."
 
-#: src/libslic3r/PrintConfig.cpp:320
+#: src/libslic3r/PrintConfig.cpp:354
 msgid "Distance of the center-point of the cooling tube from the extruder tip."
 msgstr "Abstand des Mittelpunktes des Kühlrohres von der Extruderspitze."
 
-#: src/libslic3r/PrintConfig.cpp:1382
+#: src/libslic3r/PrintConfig.cpp:1490
 msgid "Distance of the extruder tip from the position where the filament is parked when unloaded. This should match the value in printer firmware."
 msgstr "Abstand der Extruderspitze von der Position, an der das Filament beim Entladen abgestellt wird. Dies sollte mit dem Wert in der Drucker-Firmware übereinstimmen."
 
-#: src/libslic3r/PrintConfig.cpp:378
+#: src/libslic3r/PrintConfig.cpp:412
 msgid "Distance used for the auto-arrange feature of the plater."
 msgstr "Abstand für die automatische Druckplattenbelegung."
 
-#: src/libslic3r/PrintConfig.cpp:3486
+#: src/libslic3r/PrintConfig.cpp:3685
 msgid "Do not fail if a file supplied to --load does not exist."
 msgstr "Nicht abbrechen, wenn eine an --load übergebene Datei nicht existiert."
 
-#: src/libslic3r/PrintConfig.cpp:3430
+#: src/libslic3r/PrintConfig.cpp:3629
 msgid "Do not rearrange the given models before merging and keep their original XY coordinates."
 msgstr "Die angegebenen Modelle werden vor dem Zusammenführen nicht neu angeordnet und behalten ihre ursprünglichen XY-Koordinaten."
 
-#: src/slic3r/GUI/Field.cpp:240
+#: src/slic3r/GUI/Field.cpp:288
 #, c-format
 msgid ""
 "Do you mean %s%% instead of %s %s?\n"
@@ -2054,31 +2354,35 @@ msgstr ""
 "Wählen Sie JA, wenn Sie diesen Wert auf %s%% ändern möchten, \n"
 "oder NEIN, wenn Sie sicher sind, dass %s %s ein korrekter Wert ist."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1920
+#: src/slic3r/GUI/DoubleSlider.cpp:2138
 msgid "Do you want to delete all saved tool changes?"
 msgstr "Möchten Sie alle gespeicherten Werkzeugänderungen löschen?"
 
-#: src/slic3r/GUI/GUI_App.cpp:884
+#: src/slic3r/GUI/GUI_App.cpp:1610
 msgid "Do you want to proceed?"
 msgstr "Wollen Sie fortfahren?"
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "Do you want to retry"
 msgstr "Möchten Sie es erneut versuchen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1045
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:911
 msgid "Do you want to save your manually edited support points?"
 msgstr "Möchten Sie Ihre manuell bearbeiteten Stützpunkte speichern?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1834
+#: src/slic3r/GUI/ConfigWizard.cpp:2261
 msgid "Do you want to select default filaments for these FFF printer models?"
 msgstr "Möchten Sie Standardfilamente für diese FFF-Druckermodelle auswählen?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1852
+#: src/slic3r/GUI/ConfigWizard.cpp:2279
 msgid "Do you want to select default SLA materials for these printer models?"
 msgstr "Möchten Sie Standard-SLA-Materialien für diese Druckermodelle auswählen?"
 
-#: src/libslic3r/PrintConfig.cpp:3429
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "does not contain valid gcode."
+msgstr "enthält keinen gültigen G-Code."
+
+#: src/libslic3r/PrintConfig.cpp:3628
 msgid "Don't arrange"
 msgstr "Nicht Anordnen"
 
@@ -2086,7 +2390,7 @@ msgstr "Nicht Anordnen"
 msgid "Don't notify about new releases any more"
 msgstr "Keine Benachrichtigung mehr über neue Releases"
 
-#: src/libslic3r/PrintConfig.cpp:369
+#: src/libslic3r/PrintConfig.cpp:403
 msgid "Don't support bridges"
 msgstr "Brücken nicht unterstützen"
 
@@ -2094,234 +2398,296 @@ msgstr "Brücken nicht unterstützen"
 msgid "Downgrade"
 msgstr "Downgrade"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1803
 msgid "Draft shield"
 msgstr "Windschutz"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Drag"
 msgstr "Ziehen"
 
-#: src/libslic3r/SLAPrintSteps.cpp:44
+#: src/slic3r/GUI/Plater.cpp:1406
+msgid "Drag and drop G-code file"
+msgstr "G-Code-Datei ziehen und ablegen"
+
+#: src/libslic3r/SLAPrintSteps.cpp:45
 msgid "Drilling holes into model."
 msgstr "Löcher in das Modell bohren."
 
-#: src/libslic3r/SLAPrintSteps.cpp:199
+#: src/libslic3r/SLAPrintSteps.cpp:201
 msgid "Drilling holes into the mesh failed. This is usually caused by broken model. Try to fix it first."
 msgstr "Das Bohren von Löchern in das Netz ist fehlgeschlagen. Dies wird normalerweise durch ein beschädigtes Modell verursacht. Versuchen Sie zuerst, es zu reparieren."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:337
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:349
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:345
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357
 msgid "Drop to bed"
 msgstr "Auf das Druckbett fallen lassen"
 
-#: src/libslic3r/PrintConfig.cpp:3433
+#: src/libslic3r/PrintConfig.cpp:3632
 msgid "Duplicate"
 msgstr "Duplizieren"
 
-#: src/libslic3r/PrintConfig.cpp:3438
+#: src/libslic3r/PrintConfig.cpp:3637
 msgid "Duplicate by grid"
 msgstr "Duplizieren nach Raster"
 
-#: src/slic3r/GUI/PresetHints.cpp:40
+#: src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Duration"
+msgstr "Dauer"
+
+#: src/slic3r/GUI/PresetHints.cpp:39
 msgid "During the other layers, fan"
 msgstr "Während der übrigen Schichten, Lüfter"
 
-#: src/libslic3r/PrintConfig.cpp:2669
+#: src/libslic3r/PrintConfig.cpp:2833
 msgid "Dynamic"
 msgstr "Dynamisch"
 
-#: src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1448
 msgid "E&xport"
 msgstr "E&xport"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:347
+#: src/slic3r/GUI/GUI_ObjectList.cpp:394
 msgid "edges fixed"
 msgstr "Kanten korrigiert"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1508
+#: src/slic3r/GUI/DoubleSlider.cpp:1700
 msgid "Edit color"
 msgstr "Farbe bearbeiten"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:960
+#: src/slic3r/GUI/DoubleSlider.cpp:1083
 msgid "Edit current color - Right click the colored slider segment"
 msgstr "Aktuelle Farbe bearbeiten - Rechtsklick auf das farbige Schiebereglersegment"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1510
+#: src/slic3r/GUI/DoubleSlider.cpp:1702
 msgid "Edit custom G-code"
 msgstr "Benutzerdefinierten G-Code bearbeiten"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3003
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3459
 msgid "Edit Height Range"
 msgstr "Höhenbereich bearbeiten"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1509
+#: src/slic3r/GUI/DoubleSlider.cpp:1701
 msgid "Edit pause print message"
 msgstr "Druckpausen-Mitteilung bearbeiten"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1037
+#: src/slic3r/GUI/PresetComboBoxes.cpp:645
+msgid "Edit physical printer"
+msgstr "Physischen Drucker bearbeiten"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:641
+msgid "Edit preset"
+msgstr "Voreinstellung bearbeiten"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1162
 msgid "Edit tick mark - Ctrl + Left click"
 msgstr "Häkchen bearbeiten - Strg + Linksklick"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1038
+#: src/slic3r/GUI/DoubleSlider.cpp:1163
 msgid "Edit tick mark - Right click"
 msgstr "Häkchen bearbeiten - Rechtsklick"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:282 src/slic3r/GUI/GUI_ObjectList.cpp:394
+#: src/slic3r/GUI/GUI_ObjectList.cpp:300 src/slic3r/GUI/GUI_ObjectList.cpp:441
 msgid "Editing"
 msgstr "Bearbeitung"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Ejec&t SD card / Flash drive"
 msgstr "SD-Kar&te/Flash-Laufwerk auswerfen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/NotificationManager.cpp:780
+msgid "Eject drive"
+msgstr "Laufwerk auswerfen"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
 msgid "Eject SD card / Flash drive"
 msgstr "SD-Karte/Flash-Laufwerk auswerfen"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Eject SD card / Flash drive after the G-code was exported to it."
 msgstr "SD-Karte / Flash-Laufwerk auswerfen, nachdem der G-Code dorthin exportiert wurde."
 
-#: src/slic3r/GUI/Plater.cpp:2202
+#: src/slic3r/GUI/Plater.cpp:2034
 #, c-format
 msgid "Ejecting of device %s(%s) has failed."
 msgstr "Das Auswerfen von Gerät %s(%s) ist fehlgeschlagen."
 
-#: src/libslic3r/PrintConfig.cpp:118
+#: src/libslic3r/PrintConfig.cpp:120
 msgid "Elephant foot compensation"
 msgstr "Elefantenfußkompensation"
 
-#: src/libslic3r/PrintConfig.cpp:2447
+#: src/libslic3r/PrintConfig.cpp:2590
 msgid "Elephant foot minimum width"
 msgstr "Elefantenfuß Mindestbreite"
 
-#: src/libslic3r/SLAPrint.cpp:625
+#: src/libslic3r/SLAPrint.cpp:639
 msgid "Elevation is too low for object. Use the \"Pad around object\" feature to print the object without elevation."
 msgstr "Die Erhöhung ist zu niedrig für das Objekt. Verwenden Sie die Funktion \"Grundschicht um Object\", um das Objekt ohne Erhöhung zu drucken."
 
-#: src/libslic3r/PrintConfig.cpp:1093
+#: src/libslic3r/PrintConfig.cpp:1186
 msgid "Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute intervals into the G-code to let the firmware show accurate remaining time. As of now only the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 firmware supports M73 Qxx Sxx for the silent mode."
 msgstr "Schreibt M73 P[Prozent gedruckt] R[Restzeit in Minuten] im Abstand von 1 Minute in den G-Code, damit die Firmware die genaue Restzeit anzeigt. Ab sofort erkennt nur noch die Prusa i3 MK3 Firmware das M73. Die i3 MK3 Firmware unterstützt auch das M73 Qxx Sxx für den Silent Mode."
 
-#: src/libslic3r/GCode.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1217
+msgid "Emit to G-code"
+msgstr "In G-Code ausgeben"
+
+#: src/libslic3r/GCode.cpp:622
 msgid "Empty layers detected, the output would not be printable."
 msgstr "Leere Schichten erkannt, die Ausgabe wäre nicht druckbar."
 
-#: src/slic3r/GUI/Tab.cpp:1445 src/libslic3r/PrintConfig.cpp:1355
-#: src/libslic3r/PrintConfig.cpp:2200
+#: src/slic3r/GUI/Tab.cpp:1791 src/libslic3r/PrintConfig.cpp:1463
+#: src/libslic3r/PrintConfig.cpp:2343
 msgid "Enable"
 msgstr "Aktivieren"
 
-#: src/libslic3r/PrintConfig.cpp:313
+#: src/libslic3r/PrintConfig.cpp:347
 msgid "Enable auto cooling"
 msgstr "Automatische Kühlung aktivieren"
 
-#: src/libslic3r/PrintConfig.cpp:572
+#: src/libslic3r/PrintConfig.cpp:608
 msgid "Enable fan if layer print time is below"
 msgstr "Lüfter einschalten wenn die Schichtdruckzeit geringer ist als"
 
-#: src/libslic3r/PrintConfig.cpp:2908
+#: src/libslic3r/PrintConfig.cpp:3072
 msgid "Enable hollowing"
 msgstr "Aushöhlung aktivieren"
 
-#: src/libslic3r/PrintConfig.cpp:2380
+#: src/libslic3r/PrintConfig.cpp:2523
 msgid "Enable horizontal mirroring of output images"
 msgstr "Horizontale Spiegelung der Ausgabebilder aktivieren"
 
-#: src/libslic3r/PrintConfig.cpp:1867
+#: src/libslic3r/PrintConfig.cpp:1124
+msgid "Enable ironing"
+msgstr "Bügeln aktivieren"
+
+#: src/libslic3r/PrintConfig.cpp:1125
+msgid "Enable ironing of the top layers with the hot print head for smooth surface"
+msgstr "Ermöglicht das Bügeln der oberen Schichten mit dem heißen Druckkopf für eine glatte Oberfläche"
+
+#: src/libslic3r/PrintConfig.cpp:2009
 msgid "Enable support material generation."
 msgstr "Aktiviert Generierung von Stützstrukturen."
 
-#: src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1010
 msgid "Enable this to add comments into the G-Code labeling print moves with what object they belong to, which is useful for the Octoprint CancelObject plugin. This settings is NOT compatible with Single Extruder Multi Material setup and Wipe into Object / Wipe into Infill."
 msgstr "Aktivieren Sie dies, um Kommentare in den G-Code einzufügen, die die Druckbewegungen beschriften zu welchem Objekt sie gehören, was für das OctoPrint CancelObject Plugin nützlich ist. Diese Einstellungen sind NICHT kompatibel mit der Einstellung Single Extruder Multi Material und Wischen ins Objekt / Wischen ins Infill."
 
-#: src/libslic3r/PrintConfig.cpp:929
+#: src/libslic3r/PrintConfig.cpp:973
 msgid "Enable this to get a commented G-code file, with each line explained by a descriptive text. If you print from SD card, the additional weight of the file could make your firmware slow down."
 msgstr "Aktivieren Sie diese Option, um eine kommentierte G-Code-Datei zu erhalten, wobei jede Zeile durch einen beschreibenden Text erklärt wird. Wenn Sie von einer SD-Karte drucken, kann die zusätzliche Dateigröße dazu führen, dass Ihre Firmware langsamer wird."
 
-#: src/libslic3r/PrintConfig.cpp:2186
+#: src/libslic3r/PrintConfig.cpp:2329
 msgid "Enable variable layer height feature"
 msgstr "Variable Schichthöhen aktivieren"
 
-#: src/libslic3r/PrintConfig.cpp:2387
+#: src/libslic3r/PrintConfig.cpp:2530
 msgid "Enable vertical mirroring of output images"
 msgstr "Vertikale Spiegelung der Ausgabebilder aktivieren"
 
-#: src/slic3r/GUI/Tab.cpp:1534 src/slic3r/GUI/Tab.cpp:1982
-#: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395
+#: src/slic3r/GUI/Tab.cpp:1880 src/slic3r/GUI/Tab.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:419 src/libslic3r/PrintConfig.cpp:429
 msgid "End G-code"
 msgstr "G-Code am Ende"
 
-#: src/libslic3r/PrintConfig.cpp:1924
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:239
+msgid "Enforce"
+msgstr "Erzwinge"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:30
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:381
+msgid "Enforce seam"
+msgstr "Naht erzwingen"
+
+#: src/libslic3r/PrintConfig.cpp:2066
 msgid "Enforce support for the first"
 msgstr "Erzwinge Stützstrukturen bei den ersten"
 
-#: src/libslic3r/PrintConfig.cpp:1931
+#: src/libslic3r/PrintConfig.cpp:2073
 msgid "Enforce support for the first n layers"
 msgstr "Erzwinge Stützstrukturen bei den ersten n Schichten"
 
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:47
+msgid "Enforce supports"
+msgstr "Stützen erzwingen"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:198
 #: src/slic3r/GUI/PrintHostDialogs.cpp:229
 msgid "Enqueued"
 msgstr "In der Warteschlange"
 
-#: src/libslic3r/PrintConfig.cpp:407
+#: src/libslic3r/PrintConfig.cpp:441
 msgid "Ensure vertical shell thickness"
 msgstr "Stelle die vertikale Hüllenstärke sicher"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1618
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4410
+#: src/slic3r/GUI/Search.cpp:433
+msgid "Enter a search term"
+msgstr "Suchbegriff eingeben"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1814
 msgid "Enter custom G-code used on current layer"
 msgstr "Benutzerdefinierten G-Code für die aktuelle Schicht eingeben"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Enter new name"
 msgstr "Geben Sie den neuen Namen ein"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1634
+#: src/slic3r/GUI/DoubleSlider.cpp:1830
 msgid "Enter short message shown on Printer display when a print is paused"
 msgstr "Geben Sie eine kurze Nachricht ein, die auf dem Druckerdisplay angezeigt wird, wenn der Druck angehalten wird"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1047
+#: src/slic3r/GUI/ConfigWizard.cpp:1413
 msgid "Enter the bed temperature needed for getting your filament to stick to your heated bed."
 msgstr "Geben Sie die Druckbetttemperatur ein, die erforderlich ist, damit Ihr Filament an Ihrem beheizten Druckbett haftet."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:979
+#: src/slic3r/GUI/ConfigWizard.cpp:1345
 msgid "Enter the diameter of your filament."
 msgstr "Geben Sie den Durchmesser des Filaments ein."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:966
+#: src/slic3r/GUI/ConfigWizard.cpp:1332
 msgid "Enter the diameter of your printer's hot end nozzle."
 msgstr "Geben Sie den Durchmesser der Hotenddüse ein."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1650
+#: src/slic3r/GUI/DoubleSlider.cpp:1851 src/slic3r/GUI/DoubleSlider.cpp:1855
 msgid "Enter the height you want to jump to"
 msgstr "Geben Sie die Höhe ein, auf die Sie wechseln möchten"
 
-#: src/slic3r/GUI/Plater.cpp:4751
+#: src/slic3r/GUI/DoubleSlider.cpp:1851
+msgid "Enter the move you want to jump to"
+msgstr "Geben Sie die Bewegung ein, zu welcher Sie wechseln möchten"
+
+#: src/slic3r/GUI/Plater.cpp:4855
 msgid "Enter the number of copies:"
 msgstr "Geben Sie die Anzahl der Kopien ein:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1033
+#: src/slic3r/GUI/ConfigWizard.cpp:1399
 msgid "Enter the temperature needed for extruding your filament."
 msgstr "Geben Sie die Temperatur ein, die für die Extrusion Ihres Filaments benötigt wird."
 
-#: src/libslic3r/PrintConfig.cpp:761
+#: src/libslic3r/PrintConfig.cpp:797
 msgid "Enter your filament cost per kg here. This is only for statistical information."
 msgstr "Geben Sie hier Ihre Filamentkosten pro kg ein. Dies dient ausschließlich statistischen Zwecken."
 
-#: src/libslic3r/PrintConfig.cpp:718
+#: src/libslic3r/PrintConfig.cpp:754
 msgid "Enter your filament density here. This is only for statistical information. A decent way is to weigh a known length of filament and compute the ratio of the length to volume. Better is to calculate the volume directly through displacement."
 msgstr "Geben Sie hier Ihre Filamentdichte ein. Dies dient ausschließlich statistischen Zwecken. Ein vernünftiger Weg ist es, eine bekannte Filamentlänge zu wiegen und das Verhältnis von Länge zu Volumen zu berechnen. Besser ist es, das Volumen direkt durch Verdrängung zu berechnen."
 
-#: src/libslic3r/PrintConfig.cpp:710
+#: src/libslic3r/PrintConfig.cpp:746
 msgid "Enter your filament diameter here. Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
 msgstr "Geben Sie hier Ihren Filamentdurchmesser ein. Eine hohe Genauigkeit ist erforderlich, also verwenden Sie einen Messschieber und führen Sie mehrere Messungen entlang des Filaments durch, um dann den Mittelwert zu berechnen."
 
-#: src/slic3r/GUI/MainFrame.cpp:422 src/slic3r/GUI/MainFrame.cpp:785
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:39
+msgid "Entering Paint-on supports"
+msgstr "Beginne Aufmal-Stützen"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:40
+msgid "Entering Seam painting"
+msgstr "Beginne Aufmal-Nähte"
+
+#: src/slic3r/GUI/MainFrame.cpp:1003 src/slic3r/GUI/MainFrame.cpp:1486
 #: src/slic3r/GUI/PrintHostDialogs.cpp:231
 msgid "Error"
 msgstr "Fehler"
@@ -2331,25 +2697,33 @@ msgstr "Fehler"
 msgid "Error accessing port at %s: %s"
 msgstr "Fehler beim Zugriff auf Port bei %s:%s"
 
-#: src/slic3r/GUI/Plater.cpp:3433
+#: src/slic3r/GUI/Plater.cpp:3238
 msgid "Error during reload"
 msgstr "Fehler beim erneuten Laden"
 
-#: src/slic3r/GUI/Plater.cpp:5043
+#: src/slic3r/GUI/Plater.cpp:5172
 #, c-format
 msgid "Error exporting 3MF file %s"
 msgstr "Fehler beim Exportieren der 3MF Datei %s"
 
-#: src/slic3r/GUI/Plater.cpp:5005
+#: src/slic3r/GUI/Plater.cpp:5138
 #, c-format
 msgid "Error exporting AMF file %s"
 msgstr "Fehler beim Exportieren der AMF Datei %s"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:154
+#: src/slic3r/GUI/OpenGLManager.cpp:276
+msgid "Error loading shaders"
+msgstr "Fehler beim Laden von Shadern"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:152
 msgid "Error Message"
 msgstr "Fehlermeldung"
 
-#: src/slic3r/GUI/AppConfig.cpp:114
+#: src/slic3r/GUI/GUI_App.cpp:661
+msgid "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to manually delete the file to recover from the error."
+msgstr "Fehler beim Parsen der PrusaGCodeViewer-Konfigurationsdatei, sie ist wahrscheinlich beschädigt. Versuchen Sie, die Datei manuell zu löschen, um den Fehler zu beheben."
+
+#: src/slic3r/GUI/GUI_App.cpp:655 src/slic3r/GUI/GUI_App.cpp:670
 msgid "Error parsing PrusaSlicer config file, it is probably corrupted. Try to manually delete the file to recover from the error. Your user profiles will not be affected."
 msgstr "Fehler beim Parsen der PrusaSlicer-Konfigurationsdatei, sie ist wahrscheinlich beschädigt. Versuchen Sie, die Datei manuell zu löschen, um den Fehler zu beheben. Ihre Benutzerprofile sind davon nicht betroffen."
 
@@ -2357,45 +2731,60 @@ msgstr "Fehler beim Parsen der PrusaSlicer-Konfigurationsdatei, sie ist wahrsche
 msgid "Error uploading to print host:"
 msgstr "Fehler beim Hochloden zu Druckhost:"
 
-#: src/libslic3r/Zipper.cpp:102
+#: src/slic3r/GUI/Plater.cpp:4752
+msgid "Error while loading .gcode file"
+msgstr "Fehler beim Laden einer .gcode-Datei"
+
+#: src/libslic3r/Zipper.cpp:27
 msgid "Error with zip archive"
 msgstr "Fehler beim ZIP-Archiv"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1918
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2077
 msgid "Error!"
 msgstr "Fehler!"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:505
+#: src/slic3r/GUI/BedShapeDialog.cpp:581
 msgid "Error! Invalid model"
 msgstr "Fehler! Ungültiges Modell"
 
+#: src/slic3r/GUI/NotificationManager.cpp:667
+#: src/slic3r/GUI/NotificationManager.cpp:683
+#: src/slic3r/GUI/NotificationManager.cpp:694
+msgid "ERROR:"
+msgstr "FEHLER:"
+
 #: src/slic3r/GUI/FirmwareDialog.cpp:647
 #, c-format
 msgid "Error: %s"
 msgstr "Fehler: %s"
 
-#: src/slic3r/GUI/Job.hpp:123
+#: src/slic3r/GUI/Jobs/Job.cpp:74
 msgid "ERROR: not enough resources to execute a new job."
 msgstr "FEHLER: Nicht genügend Ressourcen, um einen neuen Job auszuführen."
 
-#: src/slic3r/GUI/Plater.cpp:240 src/slic3r/GUI/Plater.cpp:1216
-#: src/slic3r/GUI/Plater.cpp:1258
+#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
+#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
+#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
 msgid "Estimated printing time"
 msgstr "Erwartete Druckzeit"
 
-#: src/slic3r/GUI/Plater.cpp:502
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Event"
+msgstr "Ereignis"
+
+#: src/slic3r/GUI/Plater.cpp:368
 msgid "Everywhere"
 msgstr "Überall"
 
-#: src/slic3r/GUI/PresetHints.cpp:51
+#: src/slic3r/GUI/PresetHints.cpp:50
 msgid "except for the first %1% layers."
 msgstr "außer für die ersten %1% Schichten."
 
-#: src/slic3r/GUI/PresetHints.cpp:53
+#: src/slic3r/GUI/PresetHints.cpp:52
 msgid "except for the first layer."
 msgstr "außer für die erste Schicht."
 
-#: src/libslic3r/Print.cpp:1377
+#: src/libslic3r/Print.cpp:1403
 msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm"
 msgstr "Übermäßig %1%=%2% mm, um mit einem Düsendurchmesser von %3% mm druckbar zu sein"
 
@@ -2404,116 +2793,129 @@ msgstr "Übermäßig %1%=%2% mm, um mit einem Düsendurchmesser von %3% mm druck
 msgid "Exit %s"
 msgstr "%s beenden"
 
-#: src/libslic3r/PrintConfig.cpp:371
+#: src/slic3r/GUI/Plater.cpp:2143
+msgid "Expand sidebar"
+msgstr "Seitenleiste aufklappen"
+
+#: src/libslic3r/PrintConfig.cpp:405
 msgid "Experimental option for preventing support material from being generated under bridged areas."
 msgstr "Experimentelle Option zur Verhinderung der Bildung von Trägermaterial unter Überbrückungsflächen."
 
-#: src/libslic3r/PrintConfig.cpp:1375
+#: src/libslic3r/PrintConfig.cpp:1483
 msgid "Experimental option to adjust flow for overhangs (bridge flow will be used), to apply bridge speed to them and enable fan."
 msgstr "Experimentelle Option zur Anpassung des Durchflusses für Überhänge (Brückenvolumenfluss wird verwendet), zur Anwendung der Brückengeschwindigkeit und zur Aktivierung des Lüfters."
 
-#: src/slic3r/GUI/GUI_App.cpp:815 src/slic3r/GUI/wxExtensions.cpp:755
+#: src/slic3r/GUI/GUI_App.cpp:1507 src/slic3r/GUI/wxExtensions.cpp:676
 msgid "Expert"
 msgstr "Experte"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:822
+#: src/slic3r/GUI/ConfigWizard.cpp:1181
 msgid "Expert mode"
 msgstr "Expertenmodus"
 
-#: src/slic3r/GUI/GUI_App.cpp:815
+#: src/slic3r/GUI/GUI_App.cpp:1507
 msgid "Expert View Mode"
 msgstr "Experten Anzeigemodus"
 
-#: src/slic3r/GUI/Plater.cpp:5521
+#: src/slic3r/GUI/Plater.cpp:5706
 msgid "Export"
 msgstr "Export"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export &Config"
 msgstr "Export &Konfiguration"
 
-#: src/slic3r/GUI/MainFrame.cpp:477 src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1068 src/slic3r/GUI/MainFrame.cpp:1448
 msgid "Export &G-code"
 msgstr "Export &G-Code"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export &toolpaths as OBJ"
-msgstr "&Werkzeugpfade als OBJ exportieren"
+msgstr "&Werkzeugwege als OBJ exportieren"
 
-#: src/libslic3r/PrintConfig.cpp:3338
+#: src/libslic3r/PrintConfig.cpp:3531
 msgid "Export 3MF"
 msgstr "Export 3MF"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export all presets including physical printers to file"
+msgstr "Alle Voreinstellungen einschließlich physischer Drucker in eine Datei exportieren"
+
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export all presets to file"
 msgstr "Exportiere alle Voreinstellungen in eine Datei"
 
-#: src/libslic3r/PrintConfig.cpp:3343
+#: src/libslic3r/PrintConfig.cpp:3536
 msgid "Export AMF"
 msgstr "Exportiere AMF"
 
-#: src/slic3r/GUI/Plater.cpp:2598
+#: src/slic3r/GUI/Plater.cpp:2560
 msgid "Export AMF file:"
 msgstr "Exportiere AMF Datei:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1657 src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3884
 msgid "Export as STL"
 msgstr "Exportiere als STL"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:117
 msgid "Export config"
 msgstr "Konfiguration exportieren"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export Config &Bundle"
 msgstr "Konfigurationssa&mlung exportieren"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export Config Bundle With Physical Printers"
+msgstr "Konfigurations-Bundle mit physischen Druckern exportieren"
+
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export current configuration to file"
 msgstr "Exportiere die aktuelle Konfiguration in eine Datei"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export current plate as AMF"
 msgstr "Exportiere die aktuelle Plattenbelegung als AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:477
+#: src/slic3r/GUI/MainFrame.cpp:1068
 msgid "Export current plate as G-code"
 msgstr "Exportiere die aktuelle Plattenbelegung als G-Code"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export current plate as G-code to SD card / Flash drive"
 msgstr "Aktuelle Druckplatte als G-Code auf SD-Karte/Flash-Laufwerk exportieren"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export current plate as STL"
 msgstr "Exportiere die aktuelle Plattenbelegung als STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export current plate as STL including supports"
 msgstr "Exportiert die aktuelle Plattenbelegung als STL einschließlich Stützstrukturen"
 
-#: src/slic3r/GUI/Plater.cpp:3664
-msgid "Export failed"
-msgstr "Export ist fehlgeschlagen"
-
-#: src/slic3r/GUI/ConfigWizard.cpp:801
+#: src/slic3r/GUI/ConfigWizard.cpp:1160
 msgid "Export full pathnames of models and parts sources into 3mf and amf files"
 msgstr "Exportieren Sie die vollständigen Pfadnamen der Modelle und Teilequellen in 3mf- und amf-Dateien"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:891
-#: src/slic3r/GUI/Plater.cpp:5521 src/libslic3r/PrintConfig.cpp:3353
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 src/slic3r/GUI/Plater.cpp:766
+#: src/slic3r/GUI/Plater.cpp:5706 src/libslic3r/PrintConfig.cpp:3546
 msgid "Export G-code"
 msgstr "Export G-Code"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export G-code to SD card / Flash drive"
 msgstr "G-Code auf SD-Karte/Flash-Laufwerk exportieren"
 
-#: src/libslic3r/PrintConfig.cpp:3320
+#: src/slic3r/GUI/NotificationManager.cpp:631
+#: src/slic3r/GUI/NotificationManager.cpp:748
+msgid "Export G-Code."
+msgstr "G-Code exportieren."
+
+#: src/libslic3r/PrintConfig.cpp:3513
 msgid "Export OBJ"
 msgstr "Exportiere OBJ"
 
-#: src/slic3r/GUI/Plater.cpp:2610
+#: src/slic3r/GUI/Plater.cpp:2572
 msgid "Export OBJ file:"
 msgstr "Exportiere OBJ Datei:"
 
@@ -2521,212 +2923,215 @@ msgstr "Exportiere OBJ Datei:"
 msgid "Export of a temporary 3mf file failed"
 msgstr "Export einer temporären 3MF Datei fehlgeschlagen"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export plate as &AMF"
 msgstr "Exportiere die Plattenbelegung als &AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export plate as &STL"
 msgstr "Exportiere die Plattenbelegung als &STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export plate as STL &including supports"
 msgstr "Export&iere Plattenbelegung als STL einschließlich Stützstrukturen"
 
-#: src/libslic3r/PrintConfig.cpp:3332
+#: src/libslic3r/PrintConfig.cpp:3525
 msgid "Export SLA"
 msgstr "Exportiere SLA"
 
-#: src/slic3r/GUI/Preferences.cpp:72
+#: src/slic3r/GUI/Preferences.cpp:89
 msgid "Export sources full pathnames to 3mf and amf"
 msgstr "Vollständige Pfadnamen der Quellen in 3mf und amf exportieren"
 
-#: src/libslic3r/PrintConfig.cpp:3348
+#: src/libslic3r/PrintConfig.cpp:3541
 msgid "Export STL"
 msgstr "Exportiere STL"
 
-#: src/slic3r/GUI/Plater.cpp:2591
+#: src/slic3r/GUI/Plater.cpp:2553
 msgid "Export STL file:"
 msgstr "Exportiere STL Datei:"
 
-#: src/libslic3r/PrintConfig.cpp:3339
+#: src/libslic3r/PrintConfig.cpp:3532
 msgid "Export the model(s) as 3MF."
 msgstr "Exportiert das/die Modell(e) als 3MF Datei."
 
-#: src/libslic3r/PrintConfig.cpp:3344
+#: src/libslic3r/PrintConfig.cpp:3537
 msgid "Export the model(s) as AMF."
 msgstr "Exportiert das/die Modell(e) als AMF Datei."
 
-#: src/libslic3r/PrintConfig.cpp:3321
+#: src/libslic3r/PrintConfig.cpp:3514
 msgid "Export the model(s) as OBJ."
 msgstr "Exportiert das/die Modell(e) als OBJ Datei."
 
-#: src/libslic3r/PrintConfig.cpp:3349
+#: src/libslic3r/PrintConfig.cpp:3542
 msgid "Export the model(s) as STL."
 msgstr "Exportiert das/die Modell(e) als STL Datei."
 
-#: src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/Plater.cpp:3884
 msgid "Export the selected object as STL file"
 msgstr "Exportiere das gewählte Objekt als STL Datei"
 
-#: src/slic3r/GUI/Plater.cpp:880
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 src/slic3r/GUI/Plater.cpp:755
 msgid "Export to SD card / Flash drive"
 msgstr "Export auf SD-Karte/Flash-Laufwerk"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export toolpaths as OBJ"
-msgstr "Werkzeugpfad als OBJ exportieren"
+msgstr "Werkzeugweg als OBJ exportieren"
 
-#: src/libslic3r/Print.cpp:1638
+#: src/slic3r/GUI/NotificationManager.hpp:317
+msgid "Exporting finished."
+msgstr "Exportieren beendet."
+
+#: src/libslic3r/Print.cpp:1676
 msgid "Exporting G-code"
 msgstr "Exportiere G-Code"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:341
-msgid "Exporting model..."
-msgstr "Exportiere Modell..."
+msgid "Exporting model"
+msgstr "Exportiere Modell"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:219
 #: src/slic3r/Utils/FixModelByWin10.cpp:359
 msgid "Exporting source model"
 msgstr "Exportieren des Quellmodells"
 
-#: src/libslic3r/SLAPrint.cpp:646
+#: src/libslic3r/SLAPrint.cpp:660
 msgid "Exposition time is out of printer profile bounds."
 msgstr "Belichtungszeit ist außerhalb der Druckerprofilgrenzen."
 
-#: src/slic3r/GUI/Tab.cpp:2117 src/slic3r/GUI/Tab.cpp:3515
+#: src/slic3r/GUI/Tab.cpp:2287 src/slic3r/GUI/Tab.cpp:3931
 msgid "Exposure"
 msgstr "Belichtung"
 
-#: src/libslic3r/PrintConfig.cpp:2541 src/libslic3r/PrintConfig.cpp:2542
+#: src/libslic3r/PrintConfig.cpp:2684 src/libslic3r/PrintConfig.cpp:2685
 msgid "Exposure time"
 msgstr "Belichtungszeit"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:311
+#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:315
+#: src/libslic3r/ExtrusionEntity.cpp:338
 msgid "External perimeter"
 msgstr "Außenkontur"
 
-#: src/slic3r/GUI/PresetHints.cpp:156
+#: src/slic3r/GUI/PresetHints.cpp:155
 msgid "external perimeters"
 msgstr "Außenkonturen"
 
-#: src/libslic3r/PrintConfig.cpp:446 src/libslic3r/PrintConfig.cpp:457
+#: src/libslic3r/PrintConfig.cpp:482 src/libslic3r/PrintConfig.cpp:493
 msgid "External perimeters"
 msgstr "Außenkonturen"
 
-#: src/libslic3r/PrintConfig.cpp:469
+#: src/libslic3r/PrintConfig.cpp:505
 msgid "External perimeters first"
 msgstr "Außenkonturen zuerst drucken"
 
-#: src/libslic3r/PrintConfig.cpp:1588 src/libslic3r/PrintConfig.cpp:1596
+#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1704
 msgid "Extra length on restart"
 msgstr "Extra Länge bei Neustart"
 
-#: src/libslic3r/PrintConfig.cpp:1390
+#: src/libslic3r/PrintConfig.cpp:1498
 msgid "Extra loading distance"
 msgstr "Zusätzliche Ladestrecke"
 
-#: src/libslic3r/PrintConfig.cpp:477
+#: src/libslic3r/PrintConfig.cpp:513
 msgid "Extra perimeters if needed"
 msgstr "Extra Konturen wenn notwendig"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:278 src/slic3r/GUI/Tab.cpp:1434
-#: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487
+#: src/slic3r/GUI/GCodeViewer.cpp:2277 src/slic3r/GUI/GCodeViewer.cpp:2313
+#: src/slic3r/GUI/GCodeViewer.cpp:2318 src/slic3r/GUI/GUI_ObjectList.cpp:296
+#: src/slic3r/GUI/Tab.cpp:1780 src/slic3r/GUI/wxExtensions.cpp:515
+#: src/libslic3r/PrintConfig.cpp:523
 msgid "Extruder"
 msgstr "Extruder"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1134 src/slic3r/GUI/DoubleSlider.cpp:1170
-#: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1704
-#: src/slic3r/GUI/Tab.cpp:2320 src/libslic3r/GCode/PreviewData.cpp:445
+#: src/slic3r/GUI/DoubleSlider.cpp:1263 src/slic3r/GUI/DoubleSlider.cpp:1297
+#: src/slic3r/GUI/GLCanvas3D.cpp:983 src/slic3r/GUI/GUI_ObjectList.cpp:1832
+#: src/slic3r/GUI/Tab.cpp:2489 src/libslic3r/GCode/PreviewData.cpp:450
 #, c-format
 msgid "Extruder %d"
 msgstr "Extruder %d"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1011
+#: src/slic3r/GUI/DoubleSlider.cpp:1137
 msgid "Extruder (tool) is changed to Extruder \"%1%\""
 msgstr "Extruder (Werkzeug) ist geändert auf Extruder \"%1%\""
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
-msgid "Extruder and Bed Temperatures"
-msgstr "Extruder- und Druckbetttemperatur"
-
 #: src/slic3r/GUI/WipeTowerDialog.cpp:255
 msgid "Extruder changed to"
 msgstr "Extruder geändert auf"
 
-#: src/slic3r/GUI/Tab.cpp:1233
+#: src/slic3r/GUI/Tab.cpp:1563
 msgid "Extruder clearance (mm)"
 msgstr "Extruder Abstand (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:522
+#: src/libslic3r/PrintConfig.cpp:558
 msgid "Extruder Color"
 msgstr "Extruder Farbe"
 
-#: src/libslic3r/PrintConfig.cpp:529
+#: src/libslic3r/PrintConfig.cpp:565
 msgid "Extruder offset"
 msgstr "Extruder Offset"
 
-#: src/libslic3r/PrintConfig.cpp:911
-msgid "Extruder temperature for first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output file."
-msgstr "Extrudertemperatur für die erste Schicht. Wenn Sie die Temperatur während des Druckvorgangs manuell regeln möchten, setzen Sie diesen Wert auf null, um die Temperatursteuerbefehle in der Ausgabedatei zu deaktivieren."
-
-#: src/libslic3r/PrintConfig.cpp:2065
-msgid "Extruder temperature for layers after the first one. Set this to zero to disable temperature control commands in the output."
-msgstr "Extrudertemperatur für Schichten nach der ersten Schicht. Setzen Sie diesen Wert auf null, um die Temperaturregelbefehle in der Ausgabedatei zu deaktivieren."
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:617
-#: src/slic3r/GUI/Tab.cpp:1180 src/slic3r/GUI/Tab.cpp:1838
-#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002
-#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1737
-#: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1965
+#: src/slic3r/GUI/GUI_ObjectList.cpp:97 src/slic3r/GUI/GUI_ObjectList.cpp:656
+#: src/slic3r/GUI/Tab.cpp:1510 src/slic3r/GUI/Tab.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:524 src/libslic3r/PrintConfig.cpp:1046
+#: src/libslic3r/PrintConfig.cpp:1517 src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:2080 src/libslic3r/PrintConfig.cpp:2107
 msgid "Extruders"
 msgstr "Extruder"
 
-#: src/libslic3r/PrintConfig.cpp:539
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1061
+msgid "Extruders count"
+msgstr "Extruder Anzahl"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2493
+msgid "Extrusion"
+msgstr "Extrusion"
+
+#: src/libslic3r/PrintConfig.cpp:575
 msgid "Extrusion axis"
 msgstr "Extrusionsachse"
 
-#: src/libslic3r/PrintConfig.cpp:545
+#: src/libslic3r/PrintConfig.cpp:581
 msgid "Extrusion multiplier"
 msgstr "Extrusionsfaktor"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1037
+#: src/slic3r/GUI/ConfigWizard.cpp:1403
 msgid "Extrusion Temperature:"
 msgstr "Extrusionstemperatur:"
 
-#: src/slic3r/GUI/Tab.cpp:1205
+#: src/slic3r/GUI/Tab.cpp:1535
 msgid "Extrusion width"
 msgstr "Extrusionbreite"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:618
-#: src/libslic3r/PrintConfig.cpp:447 src/libslic3r/PrintConfig.cpp:555
-#: src/libslic3r/PrintConfig.cpp:877 src/libslic3r/PrintConfig.cpp:1010
-#: src/libslic3r/PrintConfig.cpp:1418 src/libslic3r/PrintConfig.cpp:1757
-#: src/libslic3r/PrintConfig.cpp:1947 src/libslic3r/PrintConfig.cpp:2106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:657
+#: src/libslic3r/PrintConfig.cpp:483 src/libslic3r/PrintConfig.cpp:591
+#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1054
+#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1872
+#: src/libslic3r/PrintConfig.cpp:2089 src/libslic3r/PrintConfig.cpp:2249
 msgid "Extrusion Width"
 msgstr "Extrusionsbreite"
 
-#: src/slic3r/GUI/Plater.cpp:162
+#: src/slic3r/GUI/Plater.cpp:168
 msgid "Facets"
 msgstr "Flächen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:349
+#: src/slic3r/GUI/GUI_ObjectList.cpp:396
 msgid "facets added"
 msgstr "Facetten hinzugefügt"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:348
+#: src/slic3r/GUI/GUI_ObjectList.cpp:395
 msgid "facets removed"
 msgstr "Facetten enfernt"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:350
+#: src/slic3r/GUI/GUI_ObjectList.cpp:397
 msgid "facets reversed"
 msgstr "Facetten umgekehrt"
 
-#: src/libslic3r/PrintConfig.cpp:2517
+#: src/libslic3r/PrintConfig.cpp:2660
 msgid "Faded layers"
 msgstr "Ausblendende Schichten"
 
-#: src/libslic3r/Zipper.cpp:44
+#: src/libslic3r/miniz_extension.cpp:103
 msgid "failed finding central directory"
 msgstr "Zentrales Verzeichnis nicht gefunden"
 
@@ -2734,105 +3139,115 @@ msgstr "Zentrales Verzeichnis nicht gefunden"
 msgid "Failed loading the input model."
 msgstr "Das Laden des Inputmodells ist fehlgeschlagen."
 
-#: src/libslic3r/PrintBase.cpp:71
+#: src/libslic3r/PrintBase.cpp:72
 msgid "Failed processing of the output_filename_format template."
 msgstr "Die Verarbeitung der output_filename_format Vorlage ist fehlgeschlagen."
 
-#: src/slic3r/GUI/PresetHints.cpp:42
+#: src/slic3r/GUI/PresetHints.cpp:41
 msgid "Fan"
 msgstr "Kühllüfter"
 
-#: src/slic3r/GUI/Tab.cpp:1456
+#: src/slic3r/GUI/Tab.cpp:1802
 msgid "Fan settings"
 msgstr "Lüfter Einstellungen"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/Tab.cpp:1457
+#: src/slic3r/GUI/GUI_Preview.cpp:279 src/slic3r/GUI/Tab.cpp:1803
 msgid "Fan speed"
 msgstr "Lüftergeschwindigkeit"
 
-#: src/libslic3r/GCode/PreviewData.cpp:353
+#: src/slic3r/GUI/GCodeViewer.cpp:2239 src/libslic3r/GCode/PreviewData.cpp:358
 msgid "Fan Speed (%)"
 msgstr "Lüftergeschwindigkeit (%)"
 
-#: src/libslic3r/PrintConfig.cpp:2405
+#: src/libslic3r/PrintConfig.cpp:2548
 msgid "Fast"
 msgstr "Schnell"
 
-#: src/libslic3r/PrintConfig.cpp:2406
+#: src/libslic3r/PrintConfig.cpp:2549
 msgid "Fast tilt"
 msgstr "Schnelles Kippen"
 
-#: src/slic3r/GUI/GUI_App.cpp:141
+#: src/slic3r/GUI/GUI_App.cpp:531
 msgid "Fatal error"
 msgstr "Fataler Fehler"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:221 src/slic3r/GUI/GUI_Preview.cpp:575
-#: src/libslic3r/GCode/PreviewData.cpp:345
+#: src/slic3r/GUI/GUI_Init.cpp:88
+msgid "Fatal error, exception catched: %1%"
+msgstr "Fataler Fehler, abgefangene Ausnahme: %1%"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
+#: src/slic3r/GUI/GUI_Preview.cpp:275 src/slic3r/GUI/GUI_Preview.cpp:787
+#: src/libslic3r/GCode/PreviewData.cpp:350
 msgid "Feature type"
 msgstr "Merkmalstyp"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:234 src/slic3r/GUI/GUI_Preview.cpp:235
+#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:295
+#: src/slic3r/GUI/GUI_Preview.cpp:316
 msgid "Feature types"
 msgstr "Merkmalstypen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1525
+#: src/slic3r/GUI/ConfigWizard.cpp:1926
 msgid "FFF Technology Printers"
 msgstr "FFF Technologie Drucker"
 
-#: src/slic3r/GUI/Plater.cpp:816 src/slic3r/GUI/Tab.cpp:1425
-#: src/slic3r/GUI/Tab.cpp:1426
+#: src/slic3r/GUI/Plater.cpp:691 src/slic3r/GUI/Tab.cpp:1770
+#: src/slic3r/GUI/Tab.cpp:1771
 msgid "Filament"
 msgstr "Filament"
 
-#: src/slic3r/GUI/Preset.cpp:1522
+#: src/libslic3r/Preset.cpp:1301
 msgid "filament"
 msgstr "Filament"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Filament and Nozzle Diameters"
 msgstr "Filament- und Düsendurchmesser"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:983
+#: src/slic3r/GUI/ConfigWizard.cpp:1349
 msgid "Filament Diameter:"
 msgstr "Filamentdurchmesser:"
 
-#: src/libslic3r/PrintConfig.cpp:651
+#: src/libslic3r/PrintConfig.cpp:687
 msgid "Filament is cooled by being moved back and forth in the cooling tubes. Specify desired number of these moves."
 msgstr "Das Filament wird durch Hin- und Herbewegen in den Kühlschläuchen abgekühlt. Geben Sie die gewünschte Anzahl dieser Bewegungen an."
 
-#: src/libslic3r/PrintConfig.cpp:686
+#: src/libslic3r/PrintConfig.cpp:722
 msgid "Filament load time"
 msgstr "Filament Ladezeit"
 
-#: src/libslic3r/PrintConfig.cpp:588
+#: src/libslic3r/PrintConfig.cpp:624
 msgid "Filament notes"
 msgstr "Filament Bemerkungen"
 
-#: src/slic3r/GUI/Tab.cpp:1323 src/slic3r/GUI/Tab.cpp:1378
+#: src/slic3r/GUI/Tab.cpp:1669
 msgid "Filament Overrides"
 msgstr "Filament Übersteuerung"
 
-#: src/libslic3r/PrintConfig.cpp:1381
+#: src/libslic3r/PrintConfig.cpp:1489
 msgid "Filament parking position"
 msgstr "Filament Parkposition"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filament Profiles Selection"
 msgstr "Filament Profile Auswahl"
 
-#: src/slic3r/GUI/Tab.cpp:1471
+#: src/slic3r/GUI/Tab.cpp:1817
 msgid "Filament properties"
 msgstr "Filament Eigenschaften"
 
-#: src/slic3r/GUI/Tab.hpp:355
+#: src/slic3r/GUI/Tab.hpp:409
 msgid "Filament Settings"
 msgstr "Filamenteinstellungen"
 
-#: src/libslic3r/PrintConfig.cpp:726
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Filament Settings Tab"
+msgstr "Filamenteinstellungsreiter"
+
+#: src/libslic3r/PrintConfig.cpp:762
 msgid "Filament type"
 msgstr "Filament Typ"
 
-#: src/libslic3r/PrintConfig.cpp:701
+#: src/libslic3r/PrintConfig.cpp:737
 msgid "Filament unload time"
 msgstr "Filament Entladezeit"
 
@@ -2840,75 +3255,79 @@ msgstr "Filament Entladezeit"
 msgid "filaments"
 msgstr "Filamente"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filaments"
 msgstr "Filamente"
 
-#: src/libslic3r/Zipper.cpp:72
+#: src/slic3r/GUI/ConfigWizard.cpp:691
+msgid "Filaments marked with <b>*</b> are <b>not</b> compatible with some installed printers."
+msgstr "Mit <b>*</b> markierte Filamente sind <b>nicht</b> kompatibel mit einigen installierten Druckern."
+
+#: src/libslic3r/miniz_extension.cpp:131
 msgid "file close failed"
 msgstr "Dateischließen fehlgeschlagen"
 
-#: src/libslic3r/Zipper.cpp:66
+#: src/libslic3r/miniz_extension.cpp:125
 msgid "file create failed"
 msgstr "Dateierzeugen fehlgeschlagen"
 
-#: src/slic3r/GUI/MainFrame.cpp:791
+#: src/slic3r/GUI/MainFrame.cpp:1492
 msgid "File Not Found"
 msgstr "Datei nicht gefunden"
 
-#: src/libslic3r/Zipper.cpp:86
+#: src/libslic3r/miniz_extension.cpp:145
 msgid "file not found"
 msgstr "Datei nicht gefunden"
 
-#: src/libslic3r/Zipper.cpp:64
+#: src/libslic3r/miniz_extension.cpp:123
 msgid "file open failed"
 msgstr "Öffnen der Datei fehlgeschlagen"
 
-#: src/libslic3r/Zipper.cpp:70
+#: src/libslic3r/miniz_extension.cpp:129
 msgid "file read failed"
 msgstr "Dateilesen fehlgeschlagen"
 
-#: src/libslic3r/Zipper.cpp:74
+#: src/libslic3r/miniz_extension.cpp:133
 msgid "file seek failed"
 msgstr "Dateizugriff fehlgeschlagen"
 
-#: src/libslic3r/Zipper.cpp:76
+#: src/libslic3r/miniz_extension.cpp:135
 msgid "file stat failed"
 msgstr "Zugriff auf Dateieigenschaften fehlgeschlagen"
 
-#: src/libslic3r/Zipper.cpp:36
+#: src/libslic3r/miniz_extension.cpp:95
 msgid "file too large"
 msgstr "Datei zu groß"
 
-#: src/libslic3r/Zipper.cpp:68
+#: src/libslic3r/miniz_extension.cpp:127
 msgid "file write failed"
 msgstr "Schreiben der Datei fehlgeschlagen"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:153
+#: src/slic3r/GUI/PrintHostDialogs.cpp:151
 msgid "Filename"
 msgstr "Dateiname"
 
-#: src/libslic3r/PrintConfig.cpp:775
+#: src/libslic3r/PrintConfig.cpp:811
 msgid "Fill angle"
 msgstr "Füllwinkel"
 
-#: src/libslic3r/PrintConfig.cpp:789
+#: src/libslic3r/PrintConfig.cpp:825
 msgid "Fill density"
 msgstr "Fülldichte"
 
-#: src/libslic3r/PrintConfig.cpp:826
+#: src/libslic3r/PrintConfig.cpp:862
 msgid "Fill pattern"
 msgstr "Füllmuster"
 
-#: src/libslic3r/PrintConfig.cpp:437
+#: src/libslic3r/PrintConfig.cpp:473
 msgid "Fill pattern for bottom infill. This only affects the bottom external visible layer, and not its adjacent solid shells."
 msgstr "Füllmuster für die Boden Füllung. Dies wirkt sich nur auf die äußere sichtbare Bodenschicht aus, nicht aber auf die angrenzenden massiven Konturen."
 
-#: src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:864
 msgid "Fill pattern for general low-density infill."
 msgstr "Füllmuster für allgemeines Infill mit niedriger Dichte."
 
-#: src/libslic3r/PrintConfig.cpp:417
+#: src/libslic3r/PrintConfig.cpp:451
 msgid "Fill pattern for top infill. This only affects the top visible layer, and not its adjacent solid shells."
 msgstr "Füllmuster für die obere Füllung. Dies betrifft nur die obere sichtbare Schicht und nicht die angrenzenden massiven Konturen."
 
@@ -2916,7 +3335,7 @@ msgstr "Füllmuster für die obere Füllung. Dies betrifft nur die obere sichtba
 msgid "Finished"
 msgstr "Fertig"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891 src/slic3r/GUI/Tab.cpp:1947
+#: src/slic3r/GUI/ConfigWizard.cpp:1257 src/slic3r/GUI/Tab.cpp:2132
 msgid "Firmware"
 msgstr "Firmware"
 
@@ -2928,44 +3347,52 @@ msgstr "Firmware Flasher"
 msgid "Firmware image:"
 msgstr "Firmware Image:"
 
-#: src/slic3r/GUI/Tab.cpp:2577
+#: src/slic3r/GUI/Tab.cpp:2733
 msgid "Firmware Retraction"
 msgstr "Firmware Einzug"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891
+#: src/slic3r/GUI/ConfigWizard.cpp:1257
 msgid "Firmware Type"
 msgstr "Firmware Typ"
 
-#: src/libslic3r/PrintConfig.cpp:859 src/libslic3r/PrintConfig.cpp:868
-#: src/libslic3r/PrintConfig.cpp:876 src/libslic3r/PrintConfig.cpp:910
+#: src/libslic3r/PrintConfig.cpp:899 src/libslic3r/PrintConfig.cpp:908
+#: src/libslic3r/PrintConfig.cpp:918 src/libslic3r/PrintConfig.cpp:952
 msgid "First layer"
 msgstr "Erste Schicht"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:61 src/libslic3r/PrintConfig.cpp:889
+#: src/libslic3r/PrintConfig.cpp:909
+msgid "First layer bed temperature"
+msgstr "Erste Schicht Bett-Temperatur"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:60 src/libslic3r/PrintConfig.cpp:931
 msgid "First layer height"
 msgstr "Höhe der ersten Schicht"
 
-#: src/libslic3r/Print.cpp:1422
+#: src/libslic3r/Print.cpp:1448
 msgid "First layer height can't be greater than nozzle diameter"
 msgstr "Schichthöhe der ersten Schicht darf nicht größer sein als der Düsendurchmesser"
 
-#: src/libslic3r/PrintConfig.cpp:900
+#: src/libslic3r/PrintConfig.cpp:960
+msgid "First layer nozzle temperature"
+msgstr "Erste Schicht Düsentemperatur"
+
+#: src/libslic3r/PrintConfig.cpp:942
 msgid "First layer speed"
 msgstr "Druckgeschwindigkeit der ersten Schicht"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "First layer volumetric"
 msgstr "Volumenparameter der ersten Schicht"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1647
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
 msgid "Fix through the Netfabb"
 msgstr "Reparieren mittels Netfabb"
 
-#: src/slic3r/GUI/Plater.cpp:3473
+#: src/slic3r/GUI/Plater.cpp:3278
 msgid "Fix Throught NetFabb"
 msgstr "Reparieren mittels Netfabb"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Flash printer &firmware"
 msgstr "Flashe Drucker &Firmware"
 
@@ -2993,24 +3420,32 @@ msgstr "Es wird geflashed. Bitte nicht den Drucker abklemmen!"
 msgid "Flashing succeeded!"
 msgstr "Flashen erfolgreich!"
 
-#: src/slic3r/GUI/Tab.cpp:1218
+#: src/slic3r/GUI/Tab.cpp:1548
 msgid "Flow"
 msgstr "Fluss"
 
-#: src/slic3r/GUI/PresetHints.cpp:220
+#: src/libslic3r/PrintConfig.cpp:1145
+msgid "Flow rate"
+msgstr "Flussrate"
+
+#: src/slic3r/GUI/PresetHints.cpp:219
 msgid "flow rate is maximized"
 msgstr "die Durchflussmenge ist am Maximum"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:286
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:555
+msgid "Following printer preset(s) is duplicated:%1%The above preset for printer \"%2%\" will be used just once."
+msgstr "Folgende Druckervoreinstellung(en) wird (werden) dupliziert:%1% Die obige Voreinstellung für den Drucker \"%2%\" wird nur einmal verwendet."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:287
 msgid "For more information please visit our wiki page:"
 msgstr "Für weitere Informationen besuchen Sie bitte unsere Wiki-Seite:"
 
-#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Plater.cpp:624
+#: src/slic3r/GUI/Plater.cpp:367 src/slic3r/GUI/Plater.cpp:490
 msgid "For support enforcers only"
 msgstr "Nur für Stützverstärker"
 
 #. TRN Description for "WHITE BULLET"
-#: src/slic3r/GUI/Tab.cpp:3267
+#: src/slic3r/GUI/Tab.cpp:3702
 msgid ""
 "for the left button: indicates a non-system (or non-default) preset,\n"
 "for the right button: indicates that the settings hasn't been modified."
@@ -3018,25 +3453,25 @@ msgstr ""
 "Beim linken Knopf: zeigt eine Nicht-System- (oder Nicht-Standard-) Einstellung an.\n"
 "Beim rechten Knopf: zeigt an, dass die Einstellung nicht geändert wurde."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:136
+#: src/slic3r/GUI/ConfigManipulation.cpp:135
 msgid ""
 "For the Wipe Tower to work with the soluble supports, the support layers\n"
 "need to be synchronized with the object layers."
 msgstr "Damit der Reinigungsturm mit den löslichen Trägermaterialien arbeiten kann, müssen die Stützschichten mit den Objektschichten synchronisiert sein."
 
-#: src/libslic3r/Print.cpp:1396
+#: src/libslic3r/Print.cpp:1422
 msgid "For the Wipe Tower to work with the soluble supports, the support layers need to be synchronized with the object layers."
 msgstr "Damit der Reinigungsturm mit den löslichen Trägermaterialien arbeiten kann, müssen die Stützschichten mit den Objektschichten synchronisiert sein."
 
-#: src/libslic3r/PrintConfig.cpp:2864
+#: src/libslic3r/PrintConfig.cpp:3028
 msgid "Force pad around object everywhere"
 msgstr "Grundschicht überall um Objekt erzwingen"
 
-#: src/libslic3r/PrintConfig.cpp:1729
+#: src/libslic3r/PrintConfig.cpp:1844
 msgid "Force solid infill for regions having a smaller area than the specified threshold."
 msgstr "Massives Infill für Bereiche, die eine kleinere Fläche als die angegebene Schwelle aufweisen."
 
-#: src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1116
 msgid "Force the generation of solid shells between adjacent materials/volumes. Useful for multi-extruder prints with translucent materials or manual soluble support material."
 msgstr "Erzwingt die Erzeugung von massiven Schalen zwischen benachbarten Materialien/Volumina. Geeignet für Multiextruderdrucke mit transluzenten Materialien oder manuell löslichen Trägermaterialien."
 
@@ -3044,27 +3479,31 @@ msgstr "Erzwingt die Erzeugung von massiven Schalen zwischen benachbarten Materi
 msgid "From"
 msgstr "Von"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2223
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "from"
+msgstr "von"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2389
 msgid "From Object List You can't delete the last solid part from object."
 msgstr "Sie können nicht das letzte solide Teil des Objekts von der Objektliste löschen."
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front"
 msgstr "Front"
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front View"
 msgstr "Frontalansicht"
 
-#: src/slic3r/GUI/Tab.cpp:1013
+#: src/slic3r/GUI/Tab.cpp:1331
 msgid "full profile name"
 msgstr "vollständiger Profilname"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "G-code"
 msgstr "G-Code"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1021
+#: src/slic3r/GUI/DoubleSlider.cpp:1146
 msgid ""
 "G-code associated to this tick mark is in a conflict with print mode.\n"
 "Editing it will cause changes of Slider data."
@@ -3072,220 +3511,273 @@ msgstr ""
 "Der mit diesem Häkchen verbundene G-Code steht in Konflikt mit dem Druckmodus.\n"
 "Seine Bearbeitung führt zu Änderungen der Slicer-Daten."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:130
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:165
 msgid "G-code file exported to %1%"
 msgstr "G-Code Datei exportiert nach %1%"
 
-#: src/libslic3r/PrintConfig.cpp:936
+#: src/libslic3r/PrintConfig.cpp:980
 msgid "G-code flavor"
 msgstr "G-Code Typ"
 
-#: src/libslic3r/PrintConfig.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:79
+msgid "G-code preview"
+msgstr "G-Code Vorschau"
+
+#: src/libslic3r/PrintConfig.cpp:3552
+msgid "G-code viewer"
+msgstr "G-Code-Viewer"
+
+#: src/libslic3r/PrintConfig.cpp:757
 msgid "g/cm³"
 msgstr "g/cm³"
 
-#: src/libslic3r/PrintConfig.cpp:2505
+#: src/libslic3r/PrintConfig.cpp:2648
 msgid "g/ml"
 msgstr "g/ml"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:317
-#: src/libslic3r/PrintConfig.cpp:918
+#: src/slic3r/GUI/GUI_Preview.cpp:309 src/libslic3r/ExtrusionEntity.cpp:322
+#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:962
 msgid "Gap fill"
 msgstr "Lückenfüllung"
 
-#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1796
-#: src/slic3r/GUI/Tab.cpp:2040
+#: src/slic3r/GUI/Preferences.cpp:24 src/slic3r/GUI/Tab.cpp:2058
+#: src/slic3r/GUI/Tab.cpp:2240 src/slic3r/GUI/Tab.cpp:2348
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "General"
 msgstr "Allgemein"
 
-#: src/libslic3r/PrintConfig.cpp:1307
+#: src/libslic3r/PrintConfig.cpp:1415
 msgid "Generate no less than the number of skirt loops required to consume the specified amount of filament on the bottom layer. For multi-extruder machines, this minimum applies to each extruder."
 msgstr "Erzeugt nicht weniger als die Anzahl der Schürzenschleifen, die benötigt wird, um die angegebene Menge an Filament auf der unteren Schicht zu verbrauchen. Bei Multiextruder-Maschinen gilt dieses Minimum für jeden Extruder."
 
-#: src/libslic3r/PrintConfig.cpp:1865
+#: src/libslic3r/PrintConfig.cpp:2007
 msgid "Generate support material"
 msgstr "Generiere Stützstrukturen"
 
-#: src/libslic3r/PrintConfig.cpp:1926
+#: src/libslic3r/PrintConfig.cpp:2068
 msgid "Generate support material for the specified number of layers counting from bottom, regardless of whether normal support material is enabled or not and regardless of any angle threshold. This is useful for getting more adhesion of objects having a very thin or poor footprint on the build plate."
 msgstr "Generiere Stützstrukturen für die angegebene Anzahl von Schichten, die von unten gezählt werden, unabhängig davon, ob normale Stützstrukturen aktiviert sind oder nicht und unabhängig von einer Winkelschwelle. Dies ist nützlich, um die Haftung von Objekten mit einem sehr dünnen oder schlechten Standfuß auf der Bauplatte zu erhöhen."
 
-#: src/libslic3r/PrintConfig.cpp:2613
+#: src/libslic3r/PrintConfig.cpp:2756
 msgid "Generate supports"
 msgstr "Stützstrukturen generieren"
 
-#: src/libslic3r/PrintConfig.cpp:2615
+#: src/libslic3r/PrintConfig.cpp:2758
 msgid "Generate supports for the models"
 msgstr "Erzeugt Stützstrukturen für die Modelle"
 
-#: src/libslic3r/Print.cpp:1614
+#: src/slic3r/GUI/Plater.cpp:3554
+msgid "generated warnings"
+msgstr "erzeugte Warnungen"
+
+#: src/libslic3r/Print.cpp:1645
 msgid "Generating brim"
 msgstr "Generiere Rand"
 
-#: src/libslic3r/Print.cpp:1642
+#: src/libslic3r/Print.cpp:1680
 msgid "Generating G-code"
 msgstr "Generiere G-Code"
 
-#: src/libslic3r/SLAPrintSteps.cpp:48
+#: src/slic3r/GUI/GCodeViewer.cpp:1392
+msgid "Generating index buffers"
+msgstr "Generiere Indexpuffer"
+
+#: src/libslic3r/SLAPrintSteps.cpp:49
 msgid "Generating pad"
 msgstr "Generiere Grundschicht"
 
-#: src/libslic3r/PrintObject.cpp:152
+#: src/libslic3r/PrintObject.cpp:158
 msgid "Generating perimeters"
 msgstr "Generiere Außenkonturen"
 
-#: src/libslic3r/Print.cpp:1606
+#: src/libslic3r/Print.cpp:1636
 msgid "Generating skirt"
 msgstr "Generiere Schürze"
 
-#: src/libslic3r/PrintObject.cpp:395
+#: src/libslic3r/PrintObject.cpp:422
 msgid "Generating support material"
 msgstr "Generiere Stützstrukturen"
 
-#: src/libslic3r/SLAPrintSteps.cpp:46 src/libslic3r/SLAPrintSteps.cpp:356
+#: src/libslic3r/SLAPrintSteps.cpp:47 src/libslic3r/SLAPrintSteps.cpp:359
 msgid "Generating support points"
 msgstr "Erzeuge Stützpunkte"
 
-#: src/libslic3r/SLAPrintSteps.cpp:47
+#: src/libslic3r/SLAPrintSteps.cpp:48
 msgid "Generating support tree"
 msgstr "Erzeuge Baumstützstruktur"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2022
+#: src/slic3r/GUI/GCodeViewer.cpp:933
+msgid "Generating toolpaths"
+msgstr "Generiere Werkzeugwege"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:1318
+msgid "Generating vertex buffer"
+msgstr "Erzeuge den Vertex-Puffer"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2181
 msgid "Generic"
 msgstr "Generisch"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
 msgid "Gizmo cut"
 msgstr "Gizmo Schnitt"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
 msgid "Gizmo move"
 msgstr "Gizmo Bewegung"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
+msgid "Gizmo move: Press to snap by 1mm"
+msgstr "Gizmo Bewegung: Drücken um um 1 mm zu Rasten"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
 msgid "Gizmo Place face on bed"
 msgstr "Gizmo auf Fläche platzieren"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
 msgid "Gizmo rotate"
 msgstr "Gizmo Rotieren"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:203
+msgid "Gizmo rotate: Press to rotate selected objects around their own center"
+msgstr "Gizmo Rotieren: Drücken, um ausgewählte Objekte um ihr eigenes Zentrum zu drehen"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
 msgid "Gizmo scale"
 msgstr "Gizmo Skalieren"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+msgid "Gizmo scale: Press to activate one direction scaling"
+msgstr "Gizmo Skalieren: Drücken, um Eine-Richtung-Skalierung zu aktivieren"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:202
+msgid "Gizmo scale: Press to scale selected objects around their own center"
+msgstr "Gizmo Skalieren: Drücken, um ausgewählte Objekte um ihr eigenes Zentrum zu skalieren"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
+msgid "Gizmo scale: Press to snap by 5%"
+msgstr "Gizmo Skalieren: Drücken, um um 5% zu rasten"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:200
+msgid "Gizmo scale: Scale selection to fit print volume"
+msgstr "Gizmo Skalieren: Auswahl skalieren, um in das Druckvolumen zu passen"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
 msgid "Gizmo SLA hollow"
 msgstr "Gizmo SLA Aushöhlung"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
 msgid "Gizmo SLA support points"
 msgstr "Gizmo SLA Stützpunkte"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2921
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:562
+#: src/slic3r/GUI/GLCanvas3D.cpp:3165
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520
 msgid "Gizmo-Move"
 msgstr "Gizmo Bewegen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:489
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:639
 msgid "Gizmo-Place on Face"
 msgstr "Gizmo Auf Fläche legen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3001
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:564
+#: src/slic3r/GUI/GLCanvas3D.cpp:3249
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:522
 msgid "Gizmo-Rotate"
 msgstr "Gizmo-Rotation"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:563
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521
 msgid "Gizmo-Scale"
 msgstr "Gizmo Skalierung"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
 msgid "Gizmos"
 msgstr "Gizmos"
 
-#: src/slic3r/GUI/AboutDialog.cpp:259
+#: src/slic3r/GUI/AboutDialog.cpp:284 src/slic3r/GUI/GUI_App.cpp:244
 msgid "GNU Affero General Public License, version 3"
 msgstr "GNU Affero General Public License, Version 3"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:980
+#: src/slic3r/GUI/ConfigWizard.cpp:1346
 msgid "Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
 msgstr "Eine hohe Genauigkeit ist erforderlich, also verwenden Sie einen Messschieber und führen Sie mehrere Messungen entlang des Filaments durch, um dann den Mittelwert zu berechnen."
 
-#: src/libslic3r/PrintConfig.cpp:844
+#: src/libslic3r/PrintConfig.cpp:882
 msgid "Grid"
 msgstr "Gitternetz"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2454
+#: src/slic3r/GUI/PrintHostDialogs.cpp:57
+msgid "Group"
+msgstr "Gruppe"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2846
 msgid "Group manipulation"
 msgstr "Gruppenbearbeitung"
 
-#: src/slic3r/GUI/Preferences.cpp:133
+#: src/slic3r/GUI/Preferences.cpp:200
 msgid "GUI"
 msgstr "GUI"
 
-#: src/libslic3r/PrintConfig.cpp:852
+#: src/libslic3r/PrintConfig.cpp:890
 msgid "Gyroid"
 msgstr "Gyroid"
 
-#: src/slic3r/GUI/Tab.cpp:2937
-msgid "has the following unsaved changes:"
-msgstr "hat die folgenden ungesicherten Änderungen:"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47
 msgid "Head diameter"
 msgstr "Kopfdurchmesser"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:317
+#: src/libslic3r/PrintConfig.cpp:2772
+msgid "Head penetration"
+msgstr "Kopfeindringung"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:322
 msgid "Head penetration should not be greater than the head width."
 msgstr "Die Kopfeindringung sollte nicht größer als die Kopfbreite sein."
 
-#: src/libslic3r/PrintConfig.cpp:869
+#: src/libslic3r/PrintConfig.cpp:910
 msgid "Heated build plate temperature for the first layer. Set this to zero to disable bed temperature control commands in the output."
 msgstr "Druckbetttemperatur für die erste Schicht. Setzen Sie diesen Wert auf null, um die Befehle zur Steuerung der Betttemperatur im Ausgang zu deaktivieren."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:222 src/libslic3r/PrintConfig.cpp:500
+#: src/slic3r/GUI/GUI_Preview.cpp:276 src/libslic3r/PrintConfig.cpp:536
 msgid "Height"
 msgstr "Höhe"
 
-#: src/libslic3r/GCode/PreviewData.cpp:347
+#: src/slic3r/GUI/GCodeViewer.cpp:2236 src/libslic3r/GCode/PreviewData.cpp:352
 msgid "Height (mm)"
 msgstr "Höhe (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:1688
+#: src/libslic3r/PrintConfig.cpp:1796
 msgid "Height of skirt expressed in layers. Set this to a tall value to use skirt as a shield against drafts."
 msgstr "Höhe der Schürze in Schichten. Eine hohe Schürze kann gegen Zugluft schützen."
 
-#: src/libslic3r/PrintConfig.cpp:2360
+#: src/libslic3r/PrintConfig.cpp:2503
 msgid "Height of the display"
 msgstr "Displayhöhe"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1631
 msgid "Height range Modifier"
 msgstr "Höhenbereich Modifizierer"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Height ranges"
 msgstr "Höhenbereiche"
 
-#: src/libslic3r/PrintConfig.cpp:261
+#: src/libslic3r/PrintConfig.cpp:295
 msgid "Heights at which a filament change is to occur."
 msgstr "Höhen, bei denen eine Filamentwechsel stattfinden soll."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:433
+#: src/slic3r/GUI/ConfigWizard.cpp:451
 #, c-format
 msgid "Hello, welcome to %s! This %s helps you with the initial configuration; just a few settings and you will be ready to print."
 msgstr "Hallo, willkommen bei %s! Dieses %s hilft Ihnen bei der Erstkonfiguration; nur ein paar Einstellungen und Sie sind bereit zum Drucken."
 
-#: src/libslic3r/PrintConfig.cpp:3365
+#: src/libslic3r/PrintConfig.cpp:3564
 msgid "Help"
 msgstr "Hilfe"
 
-#: src/libslic3r/PrintConfig.cpp:3371
+#: src/libslic3r/PrintConfig.cpp:3570
 msgid "Help (FFF options)"
 msgstr "Hilfe (FFF Optionen)"
 
-#: src/libslic3r/PrintConfig.cpp:3376
+#: src/libslic3r/PrintConfig.cpp:3575
 msgid "Help (SLA options)"
 msgstr "Hilfe (SLA Optionen)"
 
@@ -3293,96 +3785,80 @@ msgstr "Hilfe (SLA Optionen)"
 msgid "Here you can adjust required purging volume (mm³) for any given pair of tools."
 msgstr "Hier können Sie das erforderliche Reinigungsvolumen (mm³) für ein beliebiges Werkzeugpaar einstellen."
 
-#: src/libslic3r/PrintConfig.cpp:973
+#: src/libslic3r/PrintConfig.cpp:1017
 msgid "High extruder current on filament swap"
 msgstr "Hohe Extruderstromstärke beim Filamentwechsel"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:277
+#: src/slic3r/GUI/GLCanvas3D.cpp:263
 msgid "Higher print quality versus higher print speed."
 msgstr "Höhere Druckqualität versus höhere Druckgeschwindigkeit."
 
-#: src/libslic3r/PrintConfig.cpp:427 src/libslic3r/PrintConfig.cpp:853
+#: src/libslic3r/PrintConfig.cpp:463 src/libslic3r/PrintConfig.cpp:891
 msgid "Hilbert Curve"
 msgstr "HIlbertkurve"
 
-#: src/slic3r/GUI/Plater.cpp:1042
+#: src/slic3r/GUI/Plater.cpp:916
 msgid "Hold Shift to Slice & Export G-code"
 msgstr "Halten Sie die Umschalttaste gedrückt, um zu slicen und den G-Code zu exportieren"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
 msgid "Hole depth"
 msgstr "Lochtiefe"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
 msgid "Hole diameter"
 msgstr "Lochdurchmesser"
 
-#: src/slic3r/GUI/Plater.cpp:2760
-msgid "Hollow"
-msgstr "Aushöhlen"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:977
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:785
 msgid "Hollow and drill"
 msgstr "Aushöhlen und Bohren"
 
-#: src/libslic3r/PrintConfig.cpp:2910
+#: src/libslic3r/PrintConfig.cpp:3074
 msgid "Hollow out a model to have an empty interior"
 msgstr "Ein Modell aushöhlen, um einen leeren Innenraum zu erhalten"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40
 msgid "Hollow this object"
 msgstr "Dieses Objekt aushöhlen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3654
-#: src/slic3r/GUI/Tab.cpp:3655 src/libslic3r/SLA/Hollowing.cpp:46
-#: src/libslic3r/SLA/Hollowing.cpp:58 src/libslic3r/SLA/Hollowing.cpp:67
-#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2909
-#: src/libslic3r/PrintConfig.cpp:2916 src/libslic3r/PrintConfig.cpp:2926
-#: src/libslic3r/PrintConfig.cpp:2935
+#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4073
+#: src/slic3r/GUI/Tab.cpp:4074 src/libslic3r/SLA/Hollowing.cpp:45
+#: src/libslic3r/SLA/Hollowing.cpp:57 src/libslic3r/SLA/Hollowing.cpp:66
+#: src/libslic3r/SLA/Hollowing.cpp:75 src/libslic3r/PrintConfig.cpp:3073
+#: src/libslic3r/PrintConfig.cpp:3080 src/libslic3r/PrintConfig.cpp:3090
+#: src/libslic3r/PrintConfig.cpp:3099
 msgid "Hollowing"
 msgstr "Aushöhlen"
 
-#: src/slic3r/GUI/Plater.cpp:2926
-msgid "Hollowing cancelled."
-msgstr "Aushöhlen abgebrochen."
-
-#: src/slic3r/GUI/Plater.cpp:2927
-msgid "Hollowing done."
-msgstr "Aushöhlung erledigt."
-
-#: src/slic3r/GUI/Plater.cpp:2929
-msgid "Hollowing failed."
-msgstr "Das Aushöhlen ist fehlgeschlagen."
-
-#: src/libslic3r/PrintConfig.cpp:2937
+#: src/libslic3r/PrintConfig.cpp:3101
 msgid "Hollowing is done in two steps: first, an imaginary interior is calculated deeper (offset plus the closing distance) in the object and then it's inflated back to the specified offset. A greater closing distance makes the interior more rounded. At zero, the interior will resemble the exterior the most."
 msgstr "Das Aushöhlen erfolgt in zwei Schritten: Zuerst wird ein imaginärer Innenraum tiefer (Versatz plus Schließabstand) in das Objekt hinein berechnet und dann wird es wieder auf den angegebenen Versatz aufgeblasen. Ein größerer Schließabstand macht den Innenraum runder. Bei Null wird der Innenraum dem Außenraum am ähnlichsten sein."
 
-#: src/libslic3r/SLAPrintSteps.cpp:43
+#: src/libslic3r/SLAPrintSteps.cpp:44
 msgid "Hollowing model"
 msgstr "Aushöhlen des Modells"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:813
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:624
 msgid "Hollowing parameter change"
 msgstr "Änderung der Aushöhlungsparameter"
 
-#: src/libslic3r/PrintConfig.cpp:850 src/libslic3r/PrintConfig.cpp:2011
+#: src/libslic3r/PrintConfig.cpp:888 src/libslic3r/PrintConfig.cpp:2153
 msgid "Honeycomb"
 msgstr "Bienenwabe"
 
-#: src/slic3r/GUI/Tab.cpp:1064
+#: src/slic3r/GUI/Tab.cpp:1386
 msgid "Horizontal shells"
 msgstr "Horizontale Konturhüllen"
 
-#: src/libslic3r/PrintConfig.cpp:245
+#: src/libslic3r/PrintConfig.cpp:279
 msgid "Horizontal width of the brim that will be printed around each object on the first layer."
 msgstr "Horizontalbreite des Randes, der um jedes Objekt auf der Bodenschicht gedruckt wird."
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:152
+#: src/slic3r/GUI/PrintHostDialogs.cpp:150
 msgid "Host"
 msgstr "Host"
 
-#: src/libslic3r/PrintConfig.cpp:1332
+#: src/libslic3r/PrintConfig.cpp:1440
 msgid "Host Type"
 msgstr "Host Typ"
 
@@ -3390,11 +3866,11 @@ msgstr "Host Typ"
 msgid "Hostname"
 msgstr "Hostname"
 
-#: src/libslic3r/PrintConfig.cpp:97
+#: src/libslic3r/PrintConfig.cpp:99
 msgid "Hostname, IP or URL"
 msgstr "Hostname, IP oder URL"
 
-#: src/slic3r/GUI/Tab.cpp:139
+#: src/slic3r/GUI/Tab.cpp:210
 msgid ""
 "Hover the cursor over buttons to find more information \n"
 "or click this button."
@@ -3402,57 +3878,66 @@ msgstr ""
 "Bewegen Sie den Mauszeiger über die Schaltflächen, um weitere Informationen zu erhalten,\n"
 "oder klicken Sie auf diese Schaltfläche."
 
-#: src/libslic3r/PrintConfig.cpp:2812
+#: src/libslic3r/PrintConfig.cpp:2976
 msgid "How far should the pad extend around the contained geometry"
 msgstr "Wie weit sich die Grundschicht um die enthaltene Geometrie erstrecken soll"
 
-#: src/libslic3r/PrintConfig.cpp:2901
+#: src/libslic3r/PrintConfig.cpp:3065
 msgid "How much should the tiny connectors penetrate into the model body."
 msgstr "Wie weit die kleinen Verbinder in den Modellkörper eindringen sollen."
 
-#: src/libslic3r/PrintConfig.cpp:2631
+#: src/libslic3r/PrintConfig.cpp:2774
 msgid "How much the pinhead has to penetrate the model surface"
 msgstr "Wie tief der Nadelkopf in die Modelloberfläche eindringt"
 
-#: src/libslic3r/PrintConfig.cpp:2755
+#: src/libslic3r/PrintConfig.cpp:2919
 msgid "How much the supports should lift up the supported object. If \"Pad around object\" is enabled, this value is ignored."
 msgstr "Wie viel die Stützen das unterstützte Objekt anheben sollen. Wenn \"Grundschicht um Objekt\" aktiviert ist, wird dieser Wert ignoriert."
 
-#: src/libslic3r/PrintConfig.cpp:111
+#: src/libslic3r/PrintConfig.cpp:1209
+msgid "How to apply limits"
+msgstr "Wie man Grenzen anwendet"
+
+#: src/libslic3r/PrintConfig.cpp:1203
+msgid "How to apply the Machine Limits"
+msgstr "Wie man Maschinengrenzen anwendet"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:358
+#: src/libslic3r/PrintConfig.cpp:113
 msgid "HTTPS CA File"
 msgstr "HTTPS CA Datei"
 
-#: src/slic3r/GUI/Tab.cpp:1713
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:319
 msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
 msgstr "HTTPS-CA-Datei ist optional. Sie wird nur benötigt, wenn Sie HTTPS mit einem selbstsignierten Zertifikat verwenden."
 
-#: src/slic3r/GUI/Preferences.cpp:222
+#: src/slic3r/GUI/Preferences.cpp:376
 msgid "Icon size in a respect to the default size"
 msgstr "Symbolgröße in Bezug auf die Standardgröße"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:149
+#: src/slic3r/GUI/PrintHostDialogs.cpp:147
 msgid "ID"
 msgstr "ID"
 
-#: src/libslic3r/PrintConfig.cpp:1873
+#: src/libslic3r/PrintConfig.cpp:2015
 msgid "If checked, supports will be generated automatically based on the overhang threshold value. If unchecked, supports will be generated inside the \"Support Enforcer\" volumes only."
 msgstr "Wenn dieses Kontrollkästchen aktiviert ist, werden Stützstrukturen automatisch basierend auf dem Schwellenwert für den Überhang generiert. Wenn diese Option nicht aktiviert ist, werden Stützen nur innerhalb der Volumen der \"Stützverstärker\" generiert."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:773
+#: src/slic3r/GUI/ConfigWizard.cpp:1132
 #, c-format
 msgid "If enabled, %s checks for new application versions online. When a new version becomes available, a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "Falls aktiviert, sucht %s online nach neuen Versionen der Anwendung. Falls eine neue Version verfügbar ist, wird eine Mitteilung beim nächsten Programmstart angezeigt (aber nie während der Programmausführung). Dies dient nur der Mitteilung; es findet keine automatische Installation statt."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:783
+#: src/slic3r/GUI/ConfigWizard.cpp:1142
 #, c-format
 msgid "If enabled, %s downloads updates of built-in system presets in the background.These updates are downloaded into a separate temporary location.When a new preset version becomes available it is offered at application startup."
 msgstr "Wenn aktiviert, lädt %s Updates der eingebauten Systemvoreinstellungen im Hintergrund herunter. Diese Updates werden in einen separaten temporären Speicherort heruntergeladen. Wenn eine neue Voreinstellungsversion verfügbar wird, wird sie beim Programmstart angeboten."
 
-#: src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:1994
 msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
 msgstr "Wenn aktiviert, werden alle Druckextruder zu Beginn des Druckvorgangs an der Vorderkante des Druckbetts geprimt."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:805
+#: src/slic3r/GUI/ConfigWizard.cpp:1164
 msgid ""
 "If enabled, allows the Reload from disk command to automatically find and load the files when invoked.\n"
 "If not enabled, the Reload from disk command will ask to select each file using an open file dialog."
@@ -3460,127 +3945,172 @@ msgstr ""
 "Wenn diese Option aktiviert ist, ermöglicht der Befehl Von Festplatte neu laden das automatische Suchen und Laden der Dateien, wenn er aufgerufen wird.\n"
 "Wenn nicht aktiviert, fordert der Befehl Von der Festplatte neu laden jede Datei über ein Dialogfeld zum Öffnen von Dateien zur Auswahl auf."
 
-#: src/slic3r/GUI/Preferences.cpp:74
+#: src/slic3r/GUI/Preferences.cpp:91
 msgid "If enabled, allows the Reload from disk command to automatically find and load the files when invoked."
 msgstr "Wenn diese Option aktiviert ist, ermöglicht der Befehl \"Von Festplatte neu laden\" das automatische Suchen und Laden der Dateien, wenn er aufgerufen wird."
 
-#: src/slic3r/GUI/Preferences.cpp:66
+#: src/slic3r/GUI/Preferences.cpp:238
+msgid "If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer. If disabled, changes made using the sequential slider, in preview, apply to the whole gcode."
+msgstr "Wenn diese Option aktiviert ist, gelten Änderungen, die mit dem sequentiellen Schieberegler in der Vorschau vorgenommen werden, nur für den G-Code der obersten Schicht. Wenn deaktiviert, werden Änderungen, die mit dem sequentiellen Schieberegler in der Vorschau vorgenommen werden, auf den gesamten G-Code angewendet."
+
+#: src/slic3r/GUI/Preferences.cpp:83
 msgid "If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "Wenn aktiviert, wird PrusaSlicer online nach den neuen Versionen von sich selbst suchen. Wenn eine neue Version verfügbar wird, wird beim nächsten Anwendungsstart (nie während der Programmnutzung) eine Benachrichtigung angezeigt. Dies ist nur ein Benachrichtigungsmechanismus, es erfolgt keine automatische Installation."
 
-#: src/slic3r/GUI/Preferences.cpp:82
+#: src/slic3r/GUI/Preferences.cpp:270
+msgid "If enabled, renders object using the environment map."
+msgstr "Wenn aktiviert, wird das Objekt mit Hilfe der Environment Map gerendert."
+
+#: src/slic3r/GUI/Preferences.cpp:200
+msgid "If enabled, reverses the direction of zoom with mouse wheel"
+msgstr "Wenn aktiviert, wird die Richtung des Zooms mit dem Mausrad umgekehrt"
+
+#: src/slic3r/GUI/Preferences.cpp:99
 msgid "If enabled, Slic3r downloads updates of built-in system presets in the background. These updates are downloaded into a separate temporary location. When a new preset version becomes available it is offered at application startup."
 msgstr "Wenn aktiviert, lädt Slic3r Updates der eingebauten Systemvoreinstellungen im Hintergrund herunter. Diese Updates werden in einen separaten temporären Speicherort heruntergeladen. Wenn eine neue Voreinstellungsversion verfügbar wird, wird sie beim Programmstart angeboten."
 
-#: src/slic3r/GUI/Preferences.cpp:106
+#: src/slic3r/GUI/Preferences.cpp:137
 msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
 msgstr "Wenn aktiviert, wird die 3D-Szene in Retina-Auflösung gerendert. Wenn Sie Probleme mit der 3D-Leistung haben, kann es hilfreich sein, diese Option zu deaktivieren."
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/slic3r/GUI/Preferences.cpp:215
+msgid "If enabled, the button for the collapse sidebar will be appeared in top right corner of the 3D Scene"
+msgstr "Wenn aktiviert, wird die Schaltfläche zum Zusammenklappen der Seitenleiste in der oberen rechten Ecke der 3D-Szene angezeigt"
+
+#: src/libslic3r/PrintConfig.cpp:3698
+msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
+msgstr "Wenn aktiviert, werden die Befehlszeilenargumente an eine vorhandene Instanz der GUI PrusaSlicer gesendet, oder ein vorhandenes PrusaSlicer-Fenster wird aktiviert. Übersteuert den Konfigurationswert \"single_instance\" aus den Anwendungseinstellungen."
+
+#: src/libslic3r/PrintConfig.cpp:1804
 msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
 msgstr "Wenn diese Option aktiviert ist, wird die Schürze so hoch wie das höchste gedruckte Objekt sein. Dies ist nützlich, um einen ABS- oder ASA-Druck vor dem Verziehen und Ablösen vom Druckbett aufgrund von Zugluft zu schützen."
 
-#: src/libslic3r/PrintConfig.cpp:1858
+#: src/libslic3r/PrintConfig.cpp:2000
 msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
 msgstr "Wenn aktiviert, wird der Reinigungsturm nicht auf Schichten ohne Werkzeugwechsel gedruckt. Bei Schichten mit Werkzeugwechsel fährt der Extruder nach unten, um den Reinigungsturm zu drucken. Der Benutzer ist dafür verantwortlich, dass es nicht zu einer Kollision mit dem Druck kommt."
 
-#: src/slic3r/GUI/Preferences.cpp:128
+#: src/slic3r/GUI/Preferences.cpp:193
 msgid "If enabled, use free camera. If not enabled, use constrained camera."
 msgstr "Wenn aktiviert, verwenden Sie eine freie Kamera. Wenn nicht aktiviert, verwenden Sie eine beschränkte Kamera."
 
-#: src/slic3r/GUI/Preferences.cpp:121
+#: src/slic3r/GUI/Preferences.cpp:186
 msgid "If enabled, use perspective camera. If not enabled, use orthographic camera."
 msgstr "Wenn aktiviert, verwenden Sie eine perspektivische Kamera. Wenn nicht aktiviert, verwenden Sie eine orthographische Kamera."
 
-#: src/slic3r/GUI/Preferences.cpp:145
+#: src/slic3r/GUI/Preferences.cpp:222
 msgid "If enabled, you can change size of toolbar icons manually."
 msgstr "Wenn aktiviert, können Sie die Größe der Symbolleistensymbole manuell ändern."
 
-#: src/slic3r/GUI/PresetHints.cpp:29
+#: src/slic3r/GUI/PresetHints.cpp:28
 msgid "If estimated layer time is below ~%1%s, fan will run at %2%%% and print speed will be reduced so that no less than %3%s are spent on that layer (however, speed will never be reduced below %4%mm/s)."
 msgstr "Wenn die geschätzte Schichtzeit unter  ~%1%s liegt, läuft der Lüfter mit %2%%% und die Druckgeschwindigkeit wird reduziert, so dass nicht weniger als %3%s für diese Schicht verwendet werden (die Geschwindigkeit wird jedoch nie unter %4%mm/s reduziert)."
 
-#: src/slic3r/GUI/PresetHints.cpp:36
+#: src/slic3r/GUI/PresetHints.cpp:35
 msgid "If estimated layer time is greater, but still below ~%1%s, fan will run at a proportionally decreasing speed between %2%%% and %3%%%."
 msgstr "Falls die erwartete Schichtdruckzeit größer, aber noch unterhalb von ~%1%s ist, wird der Lüfter mit einer sich proportional verringernden Geschwindigkeit zwischen %2%%% und %3%%% laufen."
 
-#: src/libslic3r/PrintConfig.cpp:901
+#: src/libslic3r/PrintConfig.cpp:943
 msgid "If expressed as absolute value in mm/s, this speed will be applied to all the print moves of the first layer, regardless of their type. If expressed as a percentage (for example: 40%) it will scale the default speeds."
 msgstr "Wird diese Geschwindigkeit als Absolutwert in mm/s angegeben, so wird sie auf alle Druckbewegungen der ersten Lage angewendet, unabhängig von ihrem Typ. In Prozent ausgedrückt (z.B. 40%) skaliert es die voreingestellten Geschwindigkeiten."
 
-#: src/libslic3r/PrintConfig.cpp:573
+#: src/libslic3r/PrintConfig.cpp:609
 msgid "If layer print time is estimated below this number of seconds, fan will be enabled and its speed will be calculated by interpolating the minimum and maximum speeds."
 msgstr "Wenn die Druckzeit der Ebenen unter dieser Anzahl von Sekunden liegt, wird der Lüfter aktiviert und seine Geschwindigkeit durch Interpolation der minimalen und maximalen Geschwindigkeiten berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:1706
+#: src/libslic3r/PrintConfig.cpp:1821
 msgid "If layer print time is estimated below this number of seconds, print moves speed will be scaled down to extend duration to this value."
 msgstr "Wenn die Druckzeit der Ebene unter dieser Anzahl von Sekunden liegt, wird die Geschwindigkeit des Druckvorgangs verringert, um die Zeitdauer auf diesen Wert zu verlängern."
 
-#: src/libslic3r/PrintConfig.cpp:567
+#: src/libslic3r/PrintConfig.cpp:603
 msgid "If this is enabled, fan will never be disabled and will be kept running at least at its minimum speed. Useful for PLA, harmful for ABS."
 msgstr "Wenn diese Option aktiviert ist, wird der Lüfter niemals deaktiviert und läuft mindestens mit seiner Minimaldrehzahl weiter. Sinnvoll für PLA, ungeignet für ABS."
 
-#: src/slic3r/GUI/Preferences.cpp:49
+#: src/slic3r/GUI/Preferences.cpp:66
 msgid "If this is enabled, Slic3r will auto-center objects around the print bed center."
 msgstr "Wenn diese Option aktiviert ist, zentriert PrusaSlicer Objekte automatisch um die Mitte des Druckbettes."
 
-#: src/slic3r/GUI/Preferences.cpp:57
+#: src/slic3r/GUI/Preferences.cpp:74
 msgid "If this is enabled, Slic3r will pre-process objects as soon as they're loaded in order to save time when exporting G-code."
 msgstr "Wenn diese Option aktiviert ist, wird PrusaSlicer Objekte vorverarbeiten, sobald sie geladen werden, um Zeit beim Export von G-Code zu sparen."
 
-#: src/slic3r/GUI/Preferences.cpp:41
+#: src/slic3r/GUI/Preferences.cpp:54
 msgid "If this is enabled, Slic3r will prompt the last output directory instead of the one containing the input files."
 msgstr "Wenn diese Option aktiviert ist, öffnet PrusaSlicer das letzte Ausgabeverzeichnis anstelle des Verzeichnisses, in dem sich die Eingabedateien befinden."
 
-#: src/libslic3r/PrintConfig.cpp:1562
+#: src/slic3r/GUI/Preferences.cpp:125
+msgid "If this is enabled, when starting PrusaSlicer and another instance of the same PrusaSlicer is already running, that instance will be reactivated instead."
+msgstr "Wenn dies aktiviert ist, wird beim Starten von PrusaSlicer, wenn bereits eine andere Instanz desselben PrusaSlicers läuft, diese Instanz stattdessen reaktiviert."
+
+#: src/libslic3r/PrintConfig.cpp:1670
 msgid "If you set this to a positive value, Z is quickly raised every time a retraction is triggered. When using multiple extruders, only the setting for the first extruder will be considered."
 msgstr "Wenn Sie diesen Wert auf einen positiven Wert setzen, wird Z bei jedem Auslösen eines Einzugs schnell angehoben. Bei Verwendung mehrerer Extruder wird nur die Einstellung für den ersten Extruder berücksichtigt."
 
-#: src/libslic3r/PrintConfig.cpp:1571
+#: src/libslic3r/PrintConfig.cpp:1679
 msgid "If you set this to a positive value, Z lift will only take place above the specified absolute Z. You can tune this setting for skipping lift on the first layers."
 msgstr "Wenn Sie diesen Wert auf einen positiven Wert setzen, erfolgt der Z-Hub nur oberhalb des angegebenen absoluten Z-Wertes. Sie können diese Einstellung für das Auslassen von Z-Hüben auf den ersten Ebenen einstellen."
 
-#: src/libslic3r/PrintConfig.cpp:1580
+#: src/libslic3r/PrintConfig.cpp:1688
 msgid "If you set this to a positive value, Z lift will only take place below the specified absolute Z. You can tune this setting for limiting lift to the first layers."
 msgstr "Wenn Sie diesen Wert auf einen positiven Wert setzen, erfolgt der Z-Hub nur unterhalb des angegebenen absoluten Z-Wertes. Sie können diese Einstellung so einstellen, dass der Z-Hub auf die ersten Lagen begrenzt wird."
 
-#: src/libslic3r/PrintConfig.cpp:1454
+#: src/libslic3r/PrintConfig.cpp:1562
 msgid "If you want to process the output G-code through custom scripts, just list their absolute paths here. Separate multiple scripts with a semicolon. Scripts will be passed the absolute path to the G-code file as the first argument, and they can access the Slic3r config settings by reading environment variables."
 msgstr "Wenn Sie den Ausgabe-G-Code durch eigene Skripte verarbeiten wollen, geben Sie hier einfach die absoluten Pfade an. Trennen Sie mehrere Skripte durch ein Semikolon. Skripten wird als erstes Argument der absolute Pfad zur G-Code-Datei übergeben, und sie können auf die PrusaSlicer-Konfigurationseinstellungen zugreifen, indem sie Umgebungsvariablen lesen."
 
-#: src/libslic3r/PrintConfig.cpp:530
+#: src/libslic3r/PrintConfig.cpp:566
 msgid "If your firmware doesn't handle the extruder displacement you need the G-code to take it into account. This option lets you specify the displacement of each extruder with respect to the first one. It expects positive coordinates (they will be subtracted from the XY coordinate)."
 msgstr "Wenn Ihre Firmware die Verschiebung des Extruders nicht beherrscht, benötigen Sie den G-Code, um sie zu berücksichtigen. Mit dieser Option können Sie die Verschiebung jedes Extruders in Bezug auf den ersten Extruder festlegen. Es erwartet positive Koordinaten (sie werden von der XY-Koordinate subtrahiert)."
 
-#: src/libslic3r/PrintConfig.cpp:2169
+#: src/libslic3r/PrintConfig.cpp:2312
 msgid "If your firmware requires relative E values, check this, otherwise leave it unchecked. Most firmwares use absolute values."
 msgstr "Wenn Ihre Firmware relative E-Werte benötigt, diese Option aktivieren, ansonsten lassen Sie sie unmarkiert. Die meisten Firmwares verwenden absolute Werte."
 
-#: src/libslic3r/PrintConfig.cpp:3485
+#: src/libslic3r/PrintConfig.cpp:1219
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: src/libslic3r/PrintConfig.cpp:3684
 msgid "Ignore non-existent config files"
 msgstr "Ignoriere fehlende Konfigurationsdateien"
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:192
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:173
+msgid "Ignores facets facing away from the camera."
+msgstr "Ignoriert die von der Kamera abgewandten Flächen."
+
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Import &Config"
 msgstr "Importiere &Konfiguration"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Import Config &Bundle"
 msgstr "Importiere Konfi&gurationssamlung"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Import Config from &project"
 msgstr "Importiere Konfiguration von &Projekt"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
 msgid "Import Config from ini/amf/3mf/gcode"
 msgstr "Konfiguration aus ini/amf/3mf/gcode importieren"
 
-#: src/slic3r/GUI/Plater.cpp:4603
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39
+msgid "Import file"
+msgstr "Datei importieren"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46
+msgid "Import model and profile"
+msgstr "Modell und Profil importieren"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48
+msgid "Import model only"
+msgstr "Nur Modell importieren"
+
+#: src/slic3r/GUI/Plater.cpp:4655
 msgid "Import Object"
 msgstr "Objekt importieren"
 
-#: src/slic3r/GUI/Plater.cpp:4607
+#: src/slic3r/GUI/Plater.cpp:4659
 msgid "Import Objects"
 msgstr "Objekte importieren"
 
@@ -3588,15 +4118,50 @@ msgstr "Objekte importieren"
 msgid "Import of the repaired 3mf file failed"
 msgstr "Import einer reparierten 3MF Datei fehlgeschlagen"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47
+msgid "Import profile only"
+msgstr "Nur Profil importieren"
+
+#: src/slic3r/GUI/MainFrame.cpp:1050
+msgid "Import SL1 archive"
+msgstr "SL1-Archiv importieren"
+
+#: src/slic3r/GUI/Plater.cpp:1561
+msgid "Import SLA archive"
+msgstr "SLA-Archiv importieren"
+
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Import STL (imperial units)"
+msgstr "STL importieren (imperiale Einheiten)"
+
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Import STL/OBJ/AM&F/3MF"
 msgstr "Importiere STL/OBJ/AM&F/3MF"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:118
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:111
 msgid "Import STL/OBJ/AMF/3MF without config, keep plater"
 msgstr "Importiere STL/OBJ/AMF/3MF mit Konfigurationsdaten, Druckplatte beibehalten"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3422
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:159
+msgid "Importing canceled."
+msgstr "Importieren abgebrochen."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:160
+msgid "Importing done."
+msgstr "Importieren abgeschlossen."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:135
+msgid "Importing SLA archive"
+msgstr "Importiere SLA-Archiv"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+msgid "in"
+msgstr "in"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3885
 #, c-format
 msgid "In this mode you can select only other %s Items%s"
 msgstr "In diesem Modus wählen Sie nur andere %s Elemente%s"
@@ -3605,25 +4170,25 @@ msgstr "In diesem Modus wählen Sie nur andere %s Elemente%s"
 msgid "Incompatible bundles:"
 msgstr "Inkompatible Konfigurationssammlungen:"
 
+#: src/slic3r/GUI/PresetComboBoxes.cpp:241
+msgid "Incompatible presets"
+msgstr "Inkompatible Voreinstellungen"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75
 #, c-format
 msgid "Incompatible with this %s"
 msgstr "Nicht kompatibel mit diesem %s"
 
-#: src/slic3r/GUI/Plater.cpp:4685
+#: src/slic3r/GUI/Plater.cpp:4790
 msgid "Increase Instances"
 msgstr "Kopien erhöhen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:264
+#: src/slic3r/GUI/GLCanvas3D.cpp:251
 msgid "Increase/decrease edit area"
 msgstr "Bearbeitungsbereich vergrößern/verkleinern"
 
-#: src/slic3r/GUI/Plater.cpp:2922
-msgid "Indexing hollowed object"
-msgstr "Indizierung ausgehöhlter Objekte"
-
 #. TRN Description for "UNLOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3258
+#: src/slic3r/GUI/Tab.cpp:3695
 msgid ""
 "indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
 "Click the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values."
@@ -3632,12 +4197,12 @@ msgstr ""
 "Klicken Sie auf das Symbol GEÖFFNETES SCHLOSS, um alle Einstellungen für die aktuelle Optionsgruppe auf die System- (oder Standard-) Werte zurückzusetzen."
 
 #. TRN Description for "LOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3254
+#: src/slic3r/GUI/Tab.cpp:3691
 msgid "indicates that the settings are the same as the system (or default) values for the current option group"
 msgstr "zeigt an, dass die Einstellungen mit den System- (oder Standard-) Werten für die aktuelle Optionsgruppe übereinstimmen"
 
 #. TRN Description for "BACK ARROW"
-#: src/slic3r/GUI/Tab.cpp:3270
+#: src/slic3r/GUI/Tab.cpp:3707
 msgid ""
 "indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
 "Click the BACK ARROW icon to reset all settings for the current option group to the last saved preset."
@@ -3645,419 +4210,475 @@ msgstr ""
 "zeigt an, dass die Einstellungen geändert wurden und nicht mit dem zuletzt gespeicherten Preset für die aktuelle Optionsgruppe übereinstimmen.\n"
 "Klicken Sie auf das Symbol PFEIL ZURÜCK, um alle Einstellungen für die aktuelle Optionsgruppe auf das zuletzt gespeicherte Preset zurückzusetzen."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:211
-#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96
-#: src/slic3r/GUI/GUI_ObjectList.cpp:614 src/slic3r/GUI/Plater.cpp:527
-#: src/slic3r/GUI/Tab.cpp:1091 src/slic3r/GUI/Tab.cpp:1092
-#: src/libslic3r/PrintConfig.cpp:203 src/libslic3r/PrintConfig.cpp:416
-#: src/libslic3r/PrintConfig.cpp:436 src/libslic3r/PrintConfig.cpp:776
-#: src/libslic3r/PrintConfig.cpp:790 src/libslic3r/PrintConfig.cpp:827
-#: src/libslic3r/PrintConfig.cpp:981 src/libslic3r/PrintConfig.cpp:991
-#: src/libslic3r/PrintConfig.cpp:1009 src/libslic3r/PrintConfig.cpp:1028
-#: src/libslic3r/PrintConfig.cpp:1047 src/libslic3r/PrintConfig.cpp:1728
-#: src/libslic3r/PrintConfig.cpp:1745
+#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:93
+#: src/slic3r/GUI/GUI_ObjectList.cpp:652 src/slic3r/GUI/Plater.cpp:393
+#: src/slic3r/GUI/Tab.cpp:1413 src/slic3r/GUI/Tab.cpp:1414
+#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:450
+#: src/libslic3r/PrintConfig.cpp:472 src/libslic3r/PrintConfig.cpp:812
+#: src/libslic3r/PrintConfig.cpp:826 src/libslic3r/PrintConfig.cpp:863
+#: src/libslic3r/PrintConfig.cpp:1025 src/libslic3r/PrintConfig.cpp:1035
+#: src/libslic3r/PrintConfig.cpp:1053 src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1091 src/libslic3r/PrintConfig.cpp:1843
+#: src/libslic3r/PrintConfig.cpp:1860
 msgid "Infill"
 msgstr "Infill"
 
-#: src/slic3r/GUI/PresetHints.cpp:174
+#: src/slic3r/GUI/PresetHints.cpp:173
 msgid "infill"
 msgstr "Infill"
 
-#: src/libslic3r/PrintConfig.cpp:1021
+#: src/libslic3r/PrintConfig.cpp:1065
 msgid "Infill before perimeters"
 msgstr "Infill vor Kontur"
 
-#: src/libslic3r/PrintConfig.cpp:1001
+#: src/libslic3r/PrintConfig.cpp:1045
 msgid "Infill extruder"
 msgstr "Infill Extruder"
 
-#: src/libslic3r/PrintConfig.cpp:1036
+#: src/libslic3r/PrintConfig.cpp:1080
 msgid "Infill/perimeters overlap"
 msgstr "Infill/Kontur Überlappung"
 
-#: src/libslic3r/Print.cpp:1584
+#: src/libslic3r/Print.cpp:1610
 msgid "Infilling layers"
 msgstr "Fülle Schichten"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3430
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3505 src/slic3r/GUI/Plater.cpp:141
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3893
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3968 src/slic3r/GUI/Plater.cpp:147
 msgid "Info"
 msgstr "Info"
 
-#: src/libslic3r/PrintConfig.cpp:1057
+#: src/slic3r/GUI/GUI_App.cpp:1087 src/slic3r/GUI/Tab.cpp:3435
+msgid "Information"
+msgstr "Informationen"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
+msgid "Infornation"
+msgstr "Informationen"
+
+#: src/libslic3r/PrintConfig.cpp:1101
 msgid "Inherits profile"
 msgstr "Übernimmt Profil"
 
-#: src/libslic3r/SLAPrint.cpp:653
+#: src/libslic3r/SLAPrint.cpp:667
 msgid "Initial exposition time is out of printer profile bounds."
 msgstr "Anfang-Belichtungszeit ist außerhalb der Druckerprofilgrenzen."
 
-#: src/libslic3r/PrintConfig.cpp:2564 src/libslic3r/PrintConfig.cpp:2565
+#: src/libslic3r/PrintConfig.cpp:2707 src/libslic3r/PrintConfig.cpp:2708
 msgid "Initial exposure time"
 msgstr "Anfang-Belichtungszeit"
 
-#: src/libslic3r/PrintConfig.cpp:2482 src/libslic3r/PrintConfig.cpp:2483
+#: src/libslic3r/PrintConfig.cpp:2625 src/libslic3r/PrintConfig.cpp:2626
 msgid "Initial layer height"
 msgstr "Anfangsschichthöhe"
 
-#: src/slic3r/GUI/Field.cpp:204
+#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
 msgid "Input value is out of range"
 msgstr "Der Eingabewert ist nicht im gültigen Bereich"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "Inspect / activate configuration snapshots"
 msgstr "Inspiziere / aktiviere Konfigurations-Momentaufnahmen"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:60
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:216
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
 #, c-format
 msgid "Instance %d"
 msgstr "Kopie %d"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2892
 msgid "Instance manipulation"
 msgstr "Kopie Bearbeitung"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:56
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:58
 msgid "Instances"
 msgstr "Kopien"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1091
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3781
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1215
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4244
 msgid "Instances to Separated Objects"
 msgstr "Kopien in einzelne Objekte wandeln"
 
-#: src/libslic3r/PrintConfig.cpp:1973
+#: src/libslic3r/PrintConfig.cpp:2115
 msgid "Interface layers"
 msgstr "Schnittstellen Schichten"
 
-#: src/libslic3r/PrintConfig.cpp:1957
+#: src/libslic3r/PrintConfig.cpp:2099
 msgid "Interface loops"
 msgstr "Kontaktschleifen"
 
-#: src/libslic3r/PrintConfig.cpp:1982
+#: src/libslic3r/PrintConfig.cpp:2124
 msgid "Interface pattern spacing"
 msgstr "Schnittstellenmuster Abstand"
 
-#: src/libslic3r/PrintConfig.cpp:1071
+#: src/libslic3r/PrintConfig.cpp:1115
 msgid "Interface shells"
 msgstr "Schnittstellenshells"
 
-#: src/libslic3r/Zipper.cpp:84
+#: src/libslic3r/miniz_extension.cpp:143
 msgid "internal error"
 msgstr "interner Fehler"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:240 src/libslic3r/ExtrusionEntity.cpp:313
+#: src/slic3r/GUI/GUI_Preview.cpp:304 src/libslic3r/ExtrusionEntity.cpp:317
+#: src/libslic3r/ExtrusionEntity.cpp:342
 msgid "Internal infill"
 msgstr "Internes Infill"
 
-#: src/slic3r/GUI/Plater.cpp:3106
+#: src/slic3r/GUI/BedShapeDialog.cpp:145
+msgid "Invalid"
+msgstr "Ungültig"
+
+#: src/slic3r/GUI/Plater.cpp:2906 src/slic3r/GUI/Plater.cpp:3583
 msgid "Invalid data"
 msgstr "Ungültige Daten"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:494 src/slic3r/GUI/BedShapeDialog.cpp:543
-#: src/slic3r/GUI/BedShapeDialog.cpp:566
+#: src/slic3r/GUI/BedShapeDialog.cpp:570 src/slic3r/GUI/BedShapeDialog.cpp:619
+#: src/slic3r/GUI/BedShapeDialog.cpp:642
 msgid "Invalid file format."
 msgstr "Ungültiges Dateiformat."
 
-#: src/libslic3r/Zipper.cpp:80
+#: src/libslic3r/miniz_extension.cpp:139
 msgid "invalid filename"
 msgstr "ungültiger Dateiname"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:319
+#: src/slic3r/GUI/ConfigManipulation.cpp:324
 msgid "Invalid Head penetration"
 msgstr "Ungültige Eindringtiefe des Stützkopfes"
 
-#: src/libslic3r/Zipper.cpp:48
+#: src/libslic3r/miniz_extension.cpp:107
 msgid "invalid header or archive is corrupted"
 msgstr "ungültiger Dateiheader oder Archiv ist beschädigt"
 
-#: src/slic3r/GUI/Field.cpp:195 src/slic3r/GUI/Field.cpp:226
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:376
+#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
+#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
 msgid "Invalid numeric input."
 msgstr "Ungültige numerische Eingabe."
 
-#: src/libslic3r/Zipper.cpp:78
+#: src/libslic3r/miniz_extension.cpp:137
 msgid "invalid parameter"
 msgstr "ungültiger Parameter"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:332
+#: src/slic3r/GUI/ConfigManipulation.cpp:337
 msgid "Invalid pinhead diameter"
 msgstr "Ungültiger Nadelkopfdurchmesser"
 
+#: src/slic3r/GUI/GUI_ObjectList.cpp:94 src/slic3r/GUI/GUI_ObjectList.cpp:653
+#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1420
+#: src/libslic3r/ExtrusionEntity.cpp:320 src/libslic3r/ExtrusionEntity.cpp:348
+#: src/libslic3r/PrintConfig.cpp:1126 src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1146 src/libslic3r/PrintConfig.cpp:1156
+msgid "Ironing"
+msgstr "Bügeln"
+
+#: src/libslic3r/PrintConfig.cpp:1131 src/libslic3r/PrintConfig.cpp:1133
+msgid "Ironing Type"
+msgstr "Bügeltyp"
+
+#: src/slic3r/GUI/GUI_App.cpp:243
+msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community."
+msgstr "basiert auf Slic3r von Alessandro Ranellucci und der RepRap Community."
+
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:258
+#: src/slic3r/GUI/AboutDialog.cpp:283 src/slic3r/GUI/GUI_App.cpp:244
 msgid "is licensed under the"
 msgstr "ist unter der Lizenz der"
 
-#: src/slic3r/GUI/Tab.cpp:2941
-msgid "is not compatible with print profile"
-msgstr "ist mit dem Druckprofil nicht kompatibel"
-
-#: src/slic3r/GUI/Tab.cpp:2940
-msgid "is not compatible with printer"
-msgstr "ist mit dem Drucker nicht kompatibel"
-
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso"
 msgstr "Iso"
 
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso View"
 msgstr "Iso Ansicht"
 
-#: src/slic3r/GUI/Tab.cpp:964
+#: src/slic3r/GUI/Tab.cpp:1282
 msgid "It can't be deleted or modified."
 msgstr "Es ist keine Löschung oder Änderung möglich."
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "It is not allowed to change the file to reload"
 msgstr "Es ist nicht erlaubt, die neu zu ladende Datei zu ändern"
 
-#: src/libslic3r/PrintConfig.cpp:974
+#: src/libslic3r/PrintConfig.cpp:1018
 msgid "It may be beneficial to increase the extruder motor current during the filament exchange sequence to allow for rapid ramming feed rates and to overcome resistance when loading a filament with an ugly shaped tip."
 msgstr "Es kann vorteilhaft sein, den Extrudermotorstrom während des Filamentwechselvorgangs zu erhöhen, um schnelle Rammvorschübe zu ermöglichen und den Widerstand beim Laden eines Filaments mit einer ungünstig geformten Spitze zu überwinden."
 
-#: src/slic3r/GUI/GUI_App.cpp:1084 src/slic3r/GUI/Tab.cpp:2958
+#: src/slic3r/GUI/Tab.cpp:3413
+msgid "It's a last preset for this physical printer."
+msgstr "Es handelt sich um die letzte Voreinstellung für diesen physischen Drucker."
+
+#: src/slic3r/GUI/GUI_App.cpp:1876 src/slic3r/GUI/Tab.cpp:3187
 msgid "It's impossible to print multi-part object(s) with SLA technology."
 msgstr "Es ist nicht möglich mehrteilige Objekte mit dem SLA-Verfahren zu drucken."
 
-#: src/slic3r/GUI/Tab.cpp:2229
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:601
+msgid "It's not possible to delete the last related preset for the printer."
+msgstr "Es ist nicht möglich, die letzte zugehörige Voreinstellung für den Drucker zu löschen."
+
+#: src/slic3r/GUI/Tab.cpp:2398
 msgid "Jerk limits"
 msgstr "Ruck-Begrenzungen"
 
-#: src/libslic3r/PrintConfig.cpp:1649
+#: src/libslic3r/PrintConfig.cpp:1757
 msgid "Jitter"
 msgstr "Jitter"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:957 src/slic3r/GUI/DoubleSlider.cpp:1529
-#: src/slic3r/GUI/DoubleSlider.cpp:1651
+#: src/slic3r/GUI/DoubleSlider.cpp:1077 src/slic3r/GUI/DoubleSlider.cpp:1721
+#: src/slic3r/GUI/DoubleSlider.cpp:1852 src/slic3r/GUI/DoubleSlider.cpp:1856
 msgid "Jump to height"
 msgstr "Zur Höhe wechseln"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:955
+#: src/slic3r/GUI/DoubleSlider.cpp:1075
 #, c-format
 msgid "Jump to height %s or Set extruder sequence for the entire print"
 msgstr "Auf Höhe %s wechseln oder Extrudersequenz für den gesamten Druck einstellen"
 
-#: src/libslic3r/PrintConfig.cpp:566
+#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
+msgid "Jump to move"
+msgstr "Zum Bewegen wechseln"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:315
+msgid "Just switch to \"%1%\" preset"
+msgstr "Wechseln Sie einfach zur \"%1%\" Voreinstellung"
+
+#: src/libslic3r/PrintConfig.cpp:602
 msgid "Keep fan always on"
 msgstr "Lüfter ständig laufen lassen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:169
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171
 msgid "Keep lower part"
 msgstr "Unteren Teil behalten"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:304
+#: src/slic3r/GUI/GLCanvas3D.cpp:290
 msgid "Keep min"
 msgstr "Halte min"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:168
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
 msgid "Keep upper part"
 msgstr "Oberen Teil behalten"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:37
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:39 src/slic3r/GUI/MainFrame.cpp:941
+#: src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Keyboard Shortcuts"
 msgstr "Tastaturkürzel"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:245
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:259
 msgid "Keyboard shortcuts"
 msgstr "Tastaturkürzel"
 
-#: src/libslic3r/PrintConfig.cpp:2498
+#: src/libslic3r/PrintConfig.cpp:2641
 msgid "kg"
 msgstr "kg"
 
-#: src/libslic3r/PrintConfig.cpp:965
+#: src/libslic3r/PrintConfig.cpp:1009
 msgid "Label objects"
 msgstr "Objekte benennen"
 
-#: src/libslic3r/PrintConfig.cpp:2399
+#: src/libslic3r/PrintConfig.cpp:2542
 msgid "Landscape"
 msgstr "Querformat"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Language"
 msgstr "Spache"
 
-#: src/slic3r/GUI/GUI_App.cpp:885
+#: src/slic3r/GUI/GUI_App.cpp:1605 src/slic3r/GUI/GUI_App.cpp:1614
 msgid "Language selection"
 msgstr "Sprachauswahl"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2140
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2242
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2307
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2408
 msgid "Last instance of an object cannot be deleted."
 msgstr "Letzte Kopie eines Objektes kann nicht gelöscht werden."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
 msgid "Layer"
 msgstr "Schicht"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:49
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1049
+#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 src/slic3r/GUI/Tab.cpp:1371
 #: src/libslic3r/PrintConfig.cpp:71
 msgid "Layer height"
 msgstr "Schichthöhe"
 
-#: src/libslic3r/Print.cpp:1427
+#: src/libslic3r/Print.cpp:1453
 msgid "Layer height can't be greater than nozzle diameter"
 msgstr "Schichthöhe darf nicht größer sein als der Düsendurchmesser"
 
-#: src/slic3r/GUI/Tab.cpp:2362
+#: src/slic3r/GUI/Tab.cpp:2531
 msgid "Layer height limits"
 msgstr "Schichthöhen Grenzen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
-msgid "Layer height:"
-msgstr "Schichthöhe:"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2488
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2880
 msgid "Layer range Settings to modify"
 msgstr "Schichtbereicheinstellungen zum Ändern"
 
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52
-#: src/libslic3r/PrintConfig.cpp:362 src/libslic3r/PrintConfig.cpp:994
-#: src/libslic3r/PrintConfig.cpp:1505 src/libslic3r/PrintConfig.cpp:1690
-#: src/libslic3r/PrintConfig.cpp:1750 src/libslic3r/PrintConfig.cpp:1930
-#: src/libslic3r/PrintConfig.cpp:1976
+#: src/libslic3r/PrintConfig.cpp:396 src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1613 src/libslic3r/PrintConfig.cpp:1798
+#: src/libslic3r/PrintConfig.cpp:1865 src/libslic3r/PrintConfig.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:2118
 msgid "layers"
 msgstr "Schichten"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:67 src/slic3r/GUI/Tab.cpp:3512
-#: src/slic3r/GUI/Tab.cpp:3600
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3928
+#: src/slic3r/GUI/Tab.cpp:4010
 msgid "Layers"
 msgstr "Schichten"
 
-#: src/slic3r/GUI/Tab.cpp:1048 src/slic3r/GUI/Tab.cpp:3598
+#: src/slic3r/GUI/Tab.cpp:1370 src/slic3r/GUI/Tab.cpp:4008
 msgid "Layers and perimeters"
 msgstr "Schichten und Umfänge"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:95
-#: src/slic3r/GUI/GUI_ObjectList.cpp:613 src/libslic3r/PrintConfig.cpp:72
-#: src/libslic3r/PrintConfig.cpp:175 src/libslic3r/PrintConfig.cpp:184
-#: src/libslic3r/PrintConfig.cpp:408 src/libslic3r/PrintConfig.cpp:470
-#: src/libslic3r/PrintConfig.cpp:478 src/libslic3r/PrintConfig.cpp:890
-#: src/libslic3r/PrintConfig.cpp:1075 src/libslic3r/PrintConfig.cpp:1374
-#: src/libslic3r/PrintConfig.cpp:1441 src/libslic3r/PrintConfig.cpp:1622
-#: src/libslic3r/PrintConfig.cpp:2074 src/libslic3r/PrintConfig.cpp:2133
-#: src/libslic3r/PrintConfig.cpp:2142
+#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:92
+#: src/slic3r/GUI/GUI_ObjectList.cpp:651 src/libslic3r/PrintConfig.cpp:72
+#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:218
+#: src/libslic3r/PrintConfig.cpp:442 src/libslic3r/PrintConfig.cpp:506
+#: src/libslic3r/PrintConfig.cpp:514 src/libslic3r/PrintConfig.cpp:932
+#: src/libslic3r/PrintConfig.cpp:1119 src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1549 src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:2217 src/libslic3r/PrintConfig.cpp:2276
+#: src/libslic3r/PrintConfig.cpp:2285
 msgid "Layers and Perimeters"
 msgstr "Schichten und Konturen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
 msgid "Layers Slider"
 msgstr "Schichtenschieber"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Bottom"
 msgstr "Boden"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Top"
 msgstr "Decke"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/Preferences.cpp:440
+msgid "Layout Options"
+msgstr "Layout-Optionen"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:48
+msgid "Leaving Paint-on supports"
+msgstr "Verlasse Aufmal-Stützen"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:47
+msgid "Leaving Seam painting"
+msgstr "Verlasse Aufmal-Nähte"
+
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left"
 msgstr "Links"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Left click"
 msgstr "Linker Mausklick"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:237
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:29
+msgid "Left mouse button"
+msgstr "Linke Maustaste"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:233
 msgid "Left mouse button:"
 msgstr "Linke Maustaste:"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left View"
 msgstr "Anicht von Links"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:257
+#: src/slic3r/GUI/GUI_Preview.cpp:339
 msgid "Legend"
 msgstr "Legende"
 
-#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1551
+#: src/slic3r/GUI/GUI_Preview.cpp:1480
+msgid "Legend/Estimated printing time"
+msgstr "Legende/geschätzte Druckzeit"
+
+#: src/libslic3r/PrintConfig.cpp:1651 src/libslic3r/PrintConfig.cpp:1659
 msgid "Length"
 msgstr "Länge"
 
-#: src/libslic3r/PrintConfig.cpp:328
+#: src/libslic3r/PrintConfig.cpp:362
 msgid "Length of the cooling tube to limit space for cooling moves inside it."
 msgstr "Länge des Kühlschlauchs, um den Raum für Kühlbewegungen im Inneren zu begrenzen."
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:129
+#: src/slic3r/GUI/AboutDialog.cpp:141
 msgid "License agreements of all following programs (libraries) are part of application license agreement"
 msgstr "Lizenzvereinbarungen für alle folgenden Programme (Bibliotheken) sind Teil der Anwendungslizenzvereinbarung"
 
-#: src/libslic3r/PrintConfig.cpp:1561
+#: src/libslic3r/PrintConfig.cpp:1669
 msgid "Lift Z"
 msgstr "Z Hebung"
 
-#: src/libslic3r/PrintConfig.cpp:848
+#: src/libslic3r/PrintConfig.cpp:886
 msgid "Line"
 msgstr "Linie"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1427
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1558
 msgid "Load"
 msgstr "Laden"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Load a model"
 msgstr "Lade ein Modell"
 
-#: src/libslic3r/PrintConfig.cpp:3505
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Load an model saved with imperial units"
+msgstr "Laden eines mit imperialen Einheiten gespeicherten Modells"
+
+#: src/slic3r/GUI/MainFrame.cpp:1058
+msgid "Load an SL1 archive"
+msgstr "SL1-Archiv laden"
+
+#: src/libslic3r/PrintConfig.cpp:3710
 msgid "Load and store settings at the given directory. This is useful for maintaining different profiles or including configurations from a network storage."
 msgstr "Lädt und speichert Einstellungen im angegebenen Verzeichnis. Dies ist nützlich, um verschiedene Profile zu pflegen oder Konfigurationen aus einem Netzwerkspeicher zu übernehmen."
 
-#: src/libslic3r/PrintConfig.cpp:3489
+#: src/libslic3r/PrintConfig.cpp:3688
 msgid "Load config file"
 msgstr "Lade Konfigurationsdatei"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:120
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
 msgid "Load Config from ini/amf/3mf/gcode and merge"
 msgstr "Lade und füge Konfiguration von ini/amf/3mf/gcode hinzu"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Load configuration from project file"
 msgstr "Lade Konfiguration aus Projektdatei"
 
-#: src/libslic3r/PrintConfig.cpp:3490
+#: src/libslic3r/PrintConfig.cpp:3689
 msgid "Load configuration from the specified file. It can be used more than once to load options from multiple files."
 msgstr "Lädt die Konfiguration aus der angegebenen Datei. Es kann mehr als einmal verwendet werden, um Optionen aus mehreren Dateien zu laden."
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Load exported configuration file"
 msgstr "Laden einer exportierten Konfigurationsdatei"
 
-#: src/slic3r/GUI/Plater.cpp:1395
-msgid "Load File"
-msgstr "Datei laden"
-
-#: src/slic3r/GUI/Plater.cpp:1399
-msgid "Load Files"
-msgstr "Dateien laden"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1879
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2038
 msgid "Load Part"
 msgstr "Teil laden"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Load presets from a bundle"
 msgstr "Lade Voreinstellungen aus einer Sammlung"
 
-#: src/slic3r/GUI/Plater.cpp:4575
+#: src/slic3r/GUI/Plater.cpp:4627
 msgid "Load Project"
 msgstr "Projekt laden"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:102
+#: src/slic3r/GUI/BedShapeDialog.cpp:243
 msgid "Load shape from STL..."
 msgstr "Lade Umriß von STL..."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:182 src/slic3r/GUI/BedShapeDialog.cpp:261
+#: src/slic3r/GUI/BedShapeDialog.cpp:325 src/slic3r/GUI/BedShapeDialog.cpp:405
 msgid "Load..."
 msgstr "Laden..."
 
@@ -4065,19 +4686,27 @@ msgstr "Laden..."
 msgid "loaded"
 msgstr "geladen wird"
 
-#: src/slic3r/GUI/Plater.cpp:2426
+#: src/slic3r/GUI/Plater.cpp:2388
 msgid "Loaded"
 msgstr "Geladen"
 
-#: src/slic3r/GUI/Plater.cpp:2273
+#: src/slic3r/GUI/Plater.cpp:2216
 msgid "Loading"
 msgstr "Lade"
 
-#: src/slic3r/GUI/GUI_App.cpp:474
+#: src/slic3r/GUI/GUI_App.cpp:797
+msgid "Loading configuration"
+msgstr "Lade Konfiguration"
+
+#: src/slic3r/GUI/Plater.cpp:2226
+msgid "Loading file"
+msgstr "Lade Datei"
+
+#: src/slic3r/GUI/GUI_App.cpp:1125
 msgid "Loading of a mode view"
 msgstr "Lade Anzeigemodus"
 
-#: src/slic3r/GUI/GUI_App.cpp:466
+#: src/slic3r/GUI/GUI_App.cpp:1120
 msgid "Loading of current presets"
 msgstr "Laden der aktuellen Voreinstellungen"
 
@@ -4086,101 +4715,117 @@ msgstr "Laden der aktuellen Voreinstellungen"
 msgid "Loading repaired model"
 msgstr "Lade repariertes Modell"
 
-#: src/libslic3r/PrintConfig.cpp:607
+#: src/libslic3r/PrintConfig.cpp:643
 msgid "Loading speed"
 msgstr "Ladegeschwindigkeit"
 
-#: src/libslic3r/PrintConfig.cpp:615
+#: src/libslic3r/PrintConfig.cpp:651
 msgid "Loading speed at the start"
 msgstr "Ladegeschwindigkeit zu Beginn"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:63
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:106
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:69
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:112
 msgid "Local coordinates"
 msgstr "Lokale Koordinaten"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
 msgid "Lock supports under new islands"
 msgstr "Fixiere Stützen unter neuen Inseln"
 
-#: src/slic3r/GUI/Tab.cpp:3252
+#: src/slic3r/GUI/Tab.cpp:3689
 msgid "LOCKED LOCK"
 msgstr "GESCHLOSSENES SCHLOSS"
 
-#: src/slic3r/GUI/Tab.cpp:3280
+#: src/slic3r/GUI/Tab.cpp:3717
 msgid "LOCKED LOCK icon indicates that the settings are the same as the system (or default) values for the current option group"
-msgstr "Das Symbol LOCKED LOCK zeigt an, dass die Einstellungen mit den System- (oder Standard-) Werten für die aktuelle Optionsgruppe übereinstimmen"
+msgstr "Das Symbol GESCHLOSSENES SCHLOSS zeigt an, dass die Einstellungen mit den System- (oder Standard-) Werten für die aktuelle Optionsgruppe übereinstimmen"
 
-#: src/slic3r/GUI/Tab.cpp:3296
+#: src/slic3r/GUI/Tab.cpp:3733
 msgid "LOCKED LOCK icon indicates that the value is the same as the system (or default) value."
-msgstr "Das Symbol LOCKED LOCK zeigt an, dass der Wert mit dem System- (oder Standard-) Wert übereinstimmt."
+msgstr "Das Symbol GESCHLOSSENES SCHLOSS zeigt an, dass der Wert mit dem System- (oder Standard-) Wert übereinstimmt."
 
-#: src/libslic3r/PrintConfig.cpp:3508
+#: src/libslic3r/PrintConfig.cpp:3713
 msgid "Logging level"
 msgstr "Logging-Level"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1810
 msgid "Loops (minimum)"
 msgstr "Schleifen (minimal)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
 msgid "Lower Layer"
 msgstr "Untere Schicht"
 
-#: src/slic3r/GUI/Tab.cpp:2188 src/slic3r/GUI/Tab.cpp:2273
-#: src/libslic3r/PrintConfig.cpp:1129 src/libslic3r/PrintConfig.cpp:1146
-#: src/libslic3r/PrintConfig.cpp:1163 src/libslic3r/PrintConfig.cpp:1179
-#: src/libslic3r/PrintConfig.cpp:1189 src/libslic3r/PrintConfig.cpp:1199
-#: src/libslic3r/PrintConfig.cpp:1209
+#: src/slic3r/GUI/Tab.cpp:2346 src/slic3r/GUI/Tab.cpp:2442
+#: src/libslic3r/PrintConfig.cpp:1202 src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1254 src/libslic3r/PrintConfig.cpp:1271
+#: src/libslic3r/PrintConfig.cpp:1287 src/libslic3r/PrintConfig.cpp:1297
+#: src/libslic3r/PrintConfig.cpp:1307 src/libslic3r/PrintConfig.cpp:1317
 msgid "Machine limits"
 msgstr "Maschinengrenzen"
 
-#: src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:3667
+msgid "Machine limits are not set, therefore the print time estimate may not be accurate."
+msgstr "Maschinengrenzen sind nicht gesetzt, daher ist die Schätzung der Druckzeit möglicherweise nicht genau."
+
+#: src/slic3r/GUI/Tab.cpp:3660
+msgid "Machine limits will be emitted to G-code and used to estimate print time."
+msgstr "Maschinengrenzen werden im G-Code ausgegeben und zur Schätzung der Druckzeit verwendet."
+
+#: src/slic3r/GUI/Tab.cpp:3663
+msgid "Machine limits will NOT be emitted to G-code, however they will be used to estimate print time, which may therefore not be accurate as the printer may apply a different set of machine limits."
+msgstr "Maschinenlimits werden NICHT im G-Code ausgegeben, sie werden jedoch zur Schätzung der Druckzeit verwendet, die daher möglicherweise nicht genau ist, da der Drucker möglicherweise eine andere Reihe von Maschinenlimits anwendet."
+
+#: src/slic3r/GUI/Plater.cpp:172
 msgid "Manifold"
 msgstr "Hülle ok"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
 msgid "Manual editing"
 msgstr "Manuelle Bearbeitung"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:180
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:214
 msgid "Masked SLA file exported to %1%"
 msgstr "Maskierte SLA-Datei exportiert nach %1%"
 
-#: src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1451
 msgid "Mate&rial Settings Tab"
 msgstr "Mate&rial Einstellungen"
 
-#: src/slic3r/GUI/Tab.cpp:3478 src/slic3r/GUI/Tab.cpp:3480
+#: src/slic3r/GUI/Tab.cpp:3894 src/slic3r/GUI/Tab.cpp:3896
 msgid "Material"
 msgstr "Material"
 
-#: src/slic3r/GUI/Tab.hpp:416
+#: src/slic3r/GUI/Tab.hpp:486
 msgid "Material Settings"
 msgstr "Material Einstellungen"
 
-#: src/slic3r/GUI/Plater.cpp:163
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Material Settings Tab"
+msgstr "Materialeinstellungsreiter"
+
+#: src/slic3r/GUI/Plater.cpp:169
 msgid "Materials"
 msgstr "Material"
 
-#: src/libslic3r/PrintConfig.cpp:1217 src/libslic3r/PrintConfig.cpp:1226
+#: src/libslic3r/PrintConfig.cpp:1325 src/libslic3r/PrintConfig.cpp:1334
 msgid "Max"
 msgstr "Max"
 
-#: src/libslic3r/PrintConfig.cpp:2734
+#: src/libslic3r/PrintConfig.cpp:2898
 msgid "Max bridge length"
 msgstr "Max Überbrückungslänge"
 
-#: src/libslic3r/PrintConfig.cpp:2658
+#: src/libslic3r/PrintConfig.cpp:2812
 msgid "Max bridges on a pillar"
 msgstr "Max Brücken auf einem Pfeiler"
 
-#: src/libslic3r/PrintConfig.cpp:2822
+#: src/libslic3r/PrintConfig.cpp:2986
 msgid "Max merge distance"
 msgstr "Maximaler Zusammenfügeabstand"
 
-#: src/libslic3r/PrintConfig.cpp:2743
+#: src/libslic3r/PrintConfig.cpp:2907
 msgid "Max pillar linking distance"
 msgstr "Max. Pfeiler Verbindungsabstand"
 
@@ -4188,7 +4833,7 @@ msgstr "Max. Pfeiler Verbindungsabstand"
 msgid "Max print height"
 msgstr "Max. Druckhöhe"
 
-#: src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1345
 msgid "Max print speed"
 msgstr "Maximale Druckgeschwindigkeit"
 
@@ -4196,171 +4841,189 @@ msgstr "Maximale Druckgeschwindigkeit"
 msgid "max PrusaSlicer version"
 msgstr "max PrusaSlicer Version"
 
-#: src/libslic3r/PrintConfig.cpp:1268
+#: src/libslic3r/PrintConfig.cpp:1376
 msgid "Max volumetric slope negative"
 msgstr "Max. volumetrische Steigung negativ"
 
-#: src/libslic3r/PrintConfig.cpp:1257
+#: src/libslic3r/PrintConfig.cpp:1365
 msgid "Max volumetric slope positive"
 msgstr "Max. volumetrische Steigung positiv"
 
-#: src/libslic3r/PrintConfig.cpp:597 src/libslic3r/PrintConfig.cpp:1247
+#: src/libslic3r/PrintConfig.cpp:633 src/libslic3r/PrintConfig.cpp:1355
 msgid "Max volumetric speed"
 msgstr "Maximale Volumengeschwindigkeit"
 
-#: src/libslic3r/PrintConfig.cpp:2268
+#: src/libslic3r/PrintConfig.cpp:2411
 msgid "Maximal bridging distance"
 msgstr "Maximaler Überbrückungsabstand"
 
-#: src/libslic3r/PrintConfig.cpp:2269
+#: src/libslic3r/PrintConfig.cpp:2412
 msgid "Maximal distance between supports on sparse infill sections."
 msgstr "Maximalabstand zwischen Stützen auf spärlichen Infill-Abschnitten."
 
-#: src/libslic3r/PrintConfig.cpp:1145
+#: src/libslic3r/PrintConfig.cpp:1253
 msgid "Maximum acceleration E"
 msgstr "Maximale Beschleunigung E"
 
-#: src/libslic3r/PrintConfig.cpp:1151
+#: src/libslic3r/PrintConfig.cpp:1259
 msgid "Maximum acceleration of the E axis"
 msgstr "Maximale Beschleunigung der E-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1148
+#: src/libslic3r/PrintConfig.cpp:1256
 msgid "Maximum acceleration of the X axis"
 msgstr "Maximale Beschleunigung der X-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1149
+#: src/libslic3r/PrintConfig.cpp:1257
 msgid "Maximum acceleration of the Y axis"
 msgstr "Maximale Beschleunigung der Y-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1150
+#: src/libslic3r/PrintConfig.cpp:1258
 msgid "Maximum acceleration of the Z axis"
 msgstr "Maximale Beschleunigung der Z-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1198
+#: src/libslic3r/PrintConfig.cpp:1306
 msgid "Maximum acceleration when extruding"
 msgstr "Maximale Beschleunigung beim Extrudieren"
 
-#: src/libslic3r/PrintConfig.cpp:1200
+#: src/libslic3r/PrintConfig.cpp:1308
 msgid "Maximum acceleration when extruding (M204 S)"
 msgstr "Maximale Beschleunigung beim Extrudieren (M204 S)"
 
-#: src/libslic3r/PrintConfig.cpp:1208
+#: src/libslic3r/PrintConfig.cpp:1316
 msgid "Maximum acceleration when retracting"
 msgstr "Maximale Beschleunigung beim Einzug"
 
-#: src/libslic3r/PrintConfig.cpp:1210
+#: src/libslic3r/PrintConfig.cpp:1318
 msgid "Maximum acceleration when retracting (M204 T)"
 msgstr "Maximale Beschleunigung beim Einzug (M204 T)"
 
-#: src/libslic3r/PrintConfig.cpp:1142
+#: src/libslic3r/PrintConfig.cpp:1250
 msgid "Maximum acceleration X"
 msgstr "Maximale Beschleunigung X"
 
-#: src/libslic3r/PrintConfig.cpp:1143
+#: src/libslic3r/PrintConfig.cpp:1251
 msgid "Maximum acceleration Y"
 msgstr "Maximale Beschleunigung Y"
 
-#: src/libslic3r/PrintConfig.cpp:1144
+#: src/libslic3r/PrintConfig.cpp:1252
 msgid "Maximum acceleration Z"
 msgstr "Maximale Beschleunigung Z"
 
-#: src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2391
 msgid "Maximum accelerations"
 msgstr "Maximale Beschleunigungen"
 
-#: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2534
+#: src/libslic3r/PrintConfig.cpp:2676 src/libslic3r/PrintConfig.cpp:2677
 msgid "Maximum exposure time"
 msgstr "Maximale Belichtungszeit"
 
-#: src/libslic3r/PrintConfig.cpp:1128
+#: src/libslic3r/PrintConfig.cpp:1236
 msgid "Maximum feedrate E"
 msgstr "Maximaler Vorschub E"
 
-#: src/libslic3r/PrintConfig.cpp:1134
+#: src/libslic3r/PrintConfig.cpp:1242
 msgid "Maximum feedrate of the E axis"
 msgstr "Maximaler Vorschub auf der E-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1131
+#: src/libslic3r/PrintConfig.cpp:1239
 msgid "Maximum feedrate of the X axis"
 msgstr "Maximaler Vorschub auf der X-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1240
 msgid "Maximum feedrate of the Y axis"
 msgstr "Maximaler Vorschub auf der Y-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1133
+#: src/libslic3r/PrintConfig.cpp:1241
 msgid "Maximum feedrate of the Z axis"
 msgstr "Maximaler Vorschub auf der Z-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1125
+#: src/libslic3r/PrintConfig.cpp:1233
 msgid "Maximum feedrate X"
 msgstr "Maximaler Vorschub X"
 
-#: src/libslic3r/PrintConfig.cpp:1126
+#: src/libslic3r/PrintConfig.cpp:1234
 msgid "Maximum feedrate Y"
 msgstr "Maximaler Vorschub Y"
 
-#: src/libslic3r/PrintConfig.cpp:1127
+#: src/libslic3r/PrintConfig.cpp:1235
 msgid "Maximum feedrate Z"
 msgstr "Maximaler Vorschub Z"
 
-#: src/slic3r/GUI/Tab.cpp:2217
+#: src/slic3r/GUI/Tab.cpp:2386
 msgid "Maximum feedrates"
 msgstr "Maximaler Vorschub"
 
-#: src/libslic3r/PrintConfig.cpp:2556 src/libslic3r/PrintConfig.cpp:2557
+#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2700
 msgid "Maximum initial exposure time"
 msgstr "Maximale Anfang-Belichtungszeit"
 
-#: src/libslic3r/PrintConfig.cpp:1162
+#: src/libslic3r/PrintConfig.cpp:1270
 msgid "Maximum jerk E"
 msgstr "Maximaler Ruck E"
 
-#: src/libslic3r/PrintConfig.cpp:1168
+#: src/libslic3r/PrintConfig.cpp:1276
 msgid "Maximum jerk of the E axis"
 msgstr "Maximaler Ruck auf der E-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1165
+#: src/libslic3r/PrintConfig.cpp:1273
 msgid "Maximum jerk of the X axis"
 msgstr "Maximaler Ruck auf der X-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1166
+#: src/libslic3r/PrintConfig.cpp:1274
 msgid "Maximum jerk of the Y axis"
 msgstr "Maximaler Ruck auf der Y-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1275
 msgid "Maximum jerk of the Z axis"
 msgstr "Maximaler Ruck auf der Z-Achse"
 
-#: src/libslic3r/PrintConfig.cpp:1159
+#: src/libslic3r/PrintConfig.cpp:1267
 msgid "Maximum jerk X"
 msgstr "Maximaler Ruck X"
 
-#: src/libslic3r/PrintConfig.cpp:1160
+#: src/libslic3r/PrintConfig.cpp:1268
 msgid "Maximum jerk Y"
 msgstr "Maximaler Ruck Y"
 
-#: src/libslic3r/PrintConfig.cpp:1161
+#: src/libslic3r/PrintConfig.cpp:1269
 msgid "Maximum jerk Z"
 msgstr "Maximaler Ruck Z"
 
-#: src/libslic3r/PrintConfig.cpp:2660
+#: src/libslic3r/PrintConfig.cpp:2814
 msgid "Maximum number of bridges that can be placed on a pillar. Bridges hold support point pinheads and connect to pillars as small branches."
 msgstr "Maximale Anzahl von Brücken, die auf einen Pfeiler gesetzt werden können. Brücken halten Stützpunkt-Nadelköpfe und verbinden sich als kleine Äste mit den Pfeilern."
 
-#: src/libslic3r/PrintConfig.cpp:598
+#: src/libslic3r/PrintConfig.cpp:634
 msgid "Maximum volumetric speed allowed for this filament. Limits the maximum volumetric speed of a print to the minimum of print and filament volumetric speed. Set to zero for no limit."
 msgstr "Maximale volumetrische Geschwindigkeit, die für dieses Filament zulässig ist. Begrenzt die maximale volumetrische Geschwindigkeit eines Drucks auf das Minimum von Druck- und Filament-Volumengeschwindigkeit. Wird auf null gesetzt, wenn es keine Begrenzung gibt."
 
-#: src/libslic3r/PrintConfig.cpp:3442
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2569 src/libslic3r/PrintConfig.cpp:3641
 msgid "Merge"
 msgstr "Zusammenfügen"
 
-#: src/libslic3r/PrintConfig.cpp:2683
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2660
+msgid "Merge all parts to the one single object"
+msgstr "Alle Teile zu einem einzigen Objekt zusammenfügen"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+msgid "Merge objects to the one multipart object"
+msgstr "Objekte zu einem mehrteiligen Objekt zusammenführen"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+msgid "Merge objects to the one single object"
+msgstr "Objekte zu einem einzigen Objekt zusammenführen"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2576
+msgid "Merged"
+msgstr "Zusammengeführt"
+
+#: src/libslic3r/PrintConfig.cpp:2847
 msgid "Merging bridges or pillars into another pillars can increase the radius. Zero means no increase, one means full increase."
 msgstr "Das Zusammenfügen von Brücken oder Säulen in andere Säulen kann den Radius vergrößern. Null bedeutet keine Erhöhung, eins bedeutet volle Erhöhung."
 
-#: src/libslic3r/SLAPrintSteps.cpp:64
+#: src/libslic3r/SLAPrintSteps.cpp:65
 msgid "Merging slices and calculating statistics"
 msgstr "Zusammenführung der Slices und Berechnung der Statistiken"
 
@@ -4368,15 +5031,15 @@ msgstr "Zusammenführung der Slices und Berechnung der Statistiken"
 msgid "Mesh repair failed."
 msgstr "Netzreparatur fehlgeschlagen."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1635
+#: src/slic3r/GUI/DoubleSlider.cpp:1831
 msgid "Message for pause print on current layer (%1% mm)."
 msgstr "Meldung für die Druckpause auf der aktuellen Schicht (%1% mm)."
 
-#: src/libslic3r/PrintConfig.cpp:1280 src/libslic3r/PrintConfig.cpp:1289
+#: src/libslic3r/PrintConfig.cpp:1388 src/libslic3r/PrintConfig.cpp:1397
 msgid "Min"
 msgstr "Min"
 
-#: src/libslic3r/PrintConfig.cpp:1298
+#: src/libslic3r/PrintConfig.cpp:1406
 msgid "Min print speed"
 msgstr "Minimale Druckgeschwindigkeit"
 
@@ -4384,232 +5047,237 @@ msgstr "Minimale Druckgeschwindigkeit"
 msgid "min PrusaSlicer version"
 msgstr "min PrusaSlicer Version"
 
-#: src/libslic3r/PrintConfig.cpp:2772
+#: src/libslic3r/PrintConfig.cpp:2936
 msgid "Minimal distance of the support points"
 msgstr "Minimaler Abstand der Stützpunkte"
 
-#: src/libslic3r/PrintConfig.cpp:1306
+#: src/libslic3r/PrintConfig.cpp:1414
 msgid "Minimal filament extrusion length"
 msgstr "Minimale Filament Extrusionlänge"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
 msgid "Minimal points distance"
 msgstr "Minimaler Prunktabstand"
 
-#: src/libslic3r/PrintConfig.cpp:667
+#: src/libslic3r/PrintConfig.cpp:703
 msgid "Minimal purge on wipe tower"
 msgstr "Minimale Wischmenge im Wischturm"
 
-#: src/libslic3r/PrintConfig.cpp:187
+#: src/libslic3r/PrintConfig.cpp:221
 msgid "Minimum bottom shell thickness"
 msgstr "Minimale Stärke der Bodenschale"
 
-#: src/slic3r/GUI/PresetHints.cpp:339
+#: src/slic3r/GUI/PresetHints.cpp:337
 msgid "Minimum bottom shell thickness is %1% mm."
 msgstr "Die Mindeststärke der Bodenschale beträgt %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1512
+#: src/libslic3r/PrintConfig.cpp:1620
 msgid "Minimum detail resolution, used to simplify the input file for speeding up the slicing job and reducing memory usage. High-resolution models often carry more detail than printers can render. Set to zero to disable any simplification and use full resolution from input."
 msgstr "Minimale Detailauflösung, die verwendet wird, um die Eingabedatei zu vereinfachen, um den Slicingjob zu beschleunigen und den Speicherverbrauch zu reduzieren. Hochauflösende Modelle weisen oft mehr Details auf, als der Drucker wiedergeben kann. Setzen Sie den Wert auf Null, um die Vereinfachung zu deaktivieren und die volle Auflösung des Eingangsdatei zu verwenden."
 
-#: src/libslic3r/PrintConfig.cpp:2525 src/libslic3r/PrintConfig.cpp:2526
+#: src/libslic3r/PrintConfig.cpp:2668 src/libslic3r/PrintConfig.cpp:2669
 msgid "Minimum exposure time"
 msgstr "Minimale Belichtungszeit"
 
-#: src/libslic3r/PrintConfig.cpp:1178
+#: src/libslic3r/PrintConfig.cpp:1286
 msgid "Minimum feedrate when extruding"
 msgstr "Maximaler Vorschub bei Extrusion"
 
-#: src/libslic3r/PrintConfig.cpp:1180
+#: src/libslic3r/PrintConfig.cpp:1288
 msgid "Minimum feedrate when extruding (M205 S)"
 msgstr "Minimaler Vorschub beim Extrudieren (M205 S)"
 
-#: src/slic3r/GUI/Tab.cpp:2234
+#: src/slic3r/GUI/Tab.cpp:2403
 msgid "Minimum feedrates"
 msgstr "Minimaler Vorschub"
 
-#: src/libslic3r/PrintConfig.cpp:2548 src/libslic3r/PrintConfig.cpp:2549
+#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2692
 msgid "Minimum initial exposure time"
 msgstr "Minimale Anfang-Belichtungszeit"
 
-#: src/slic3r/GUI/Tab.cpp:1069
+#: src/slic3r/GUI/Tab.cpp:1391
 msgid "Minimum shell thickness"
 msgstr "Minimale Schalenstärke"
 
-#: src/libslic3r/PrintConfig.cpp:1787 src/libslic3r/PrintConfig.cpp:1788
+#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1903
 msgid "Minimum thickness of a top / bottom shell"
 msgstr "Mindeststärke einer Ober-/Bodenschale"
 
-#: src/libslic3r/PrintConfig.cpp:2146
+#: src/libslic3r/PrintConfig.cpp:2289
 msgid "Minimum top shell thickness"
 msgstr "Mindeststärke der oberen Schale"
 
-#: src/slic3r/GUI/PresetHints.cpp:320
+#: src/slic3r/GUI/PresetHints.cpp:318
 msgid "Minimum top shell thickness is %1% mm."
 msgstr "Die Mindeststärke der Oberschale beträgt %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1522
+#: src/libslic3r/PrintConfig.cpp:1630
 msgid "Minimum travel after retraction"
 msgstr "Minimalbewegung nach Einziehen"
 
-#: src/libslic3r/PrintConfig.cpp:1188
+#: src/libslic3r/PrintConfig.cpp:1296
 msgid "Minimum travel feedrate"
 msgstr "Minimaler Vorschub im Eilgang"
 
-#: src/libslic3r/PrintConfig.cpp:1190
+#: src/libslic3r/PrintConfig.cpp:1298
 msgid "Minimum travel feedrate (M205 T)"
 msgstr "Minimaler Vorschub im Eilgang (M205 T)"
 
-#: src/libslic3r/PrintConfig.cpp:2917
+#: src/libslic3r/PrintConfig.cpp:3081
 msgid "Minimum wall thickness of a hollowed model."
 msgstr "Mindestwandstärke eines ausgehöhlten Modells."
 
-#: src/libslic3r/PrintConfig.cpp:2449
+#: src/libslic3r/PrintConfig.cpp:2592
 msgid "Minimum width of features to maintain when doing elephant foot compensation."
 msgstr "Mindestbreite der Merkmale, die bei der Kompensation des Elefantenfußes einzuhalten sind."
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror"
 msgstr "Spiegeln"
 
-#: src/libslic3r/PrintConfig.cpp:2379
+#: src/libslic3r/PrintConfig.cpp:2522
 msgid "Mirror horizontally"
 msgstr "Horizontal spiegeln"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2053
+#: src/slic3r/GUI/GLCanvas3D.cpp:2226
 msgid "Mirror Object"
 msgstr "Objekt spiegeln"
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror the selected object"
 msgstr "Ausgewähltes Objekt spiegeln"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Mirror the selected object along the X axis"
 msgstr "Ausgewähltes Objekt entlang der X-Achse spiegeln"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Mirror the selected object along the Y axis"
 msgstr "Ausgewähltes Objekt entlang der Y-Achse spiegeln"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Mirror the selected object along the Z axis"
 msgstr "Ausgewähltes Objekt entlang der Z-Achse spiegeln"
 
-#: src/libslic3r/PrintConfig.cpp:2386
+#: src/libslic3r/PrintConfig.cpp:2529
 msgid "Mirror vertically"
 msgstr "Vertikal spiegeln"
 
-#: src/slic3r/Utils/AstroBox.cpp:68 src/slic3r/Utils/OctoPrint.cpp:68
+#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:68
 #, c-format
 msgid "Mismatched type of print host: %s"
 msgstr "Nicht übereinstimmender Typ des Druckhosts: %s"
 
-#: src/libslic3r/ExtrusionEntity.cpp:323
+#: src/libslic3r/ExtrusionEntity.cpp:328 src/libslic3r/ExtrusionEntity.cpp:364
 msgid "Mixed"
 msgstr "Gemischt"
 
-#: src/libslic3r/PrintConfig.cpp:2491
+#: src/libslic3r/PrintConfig.cpp:2634
 msgid "ml"
 msgstr "ml"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:92 src/slic3r/GUI/ConfigWizard.cpp:218
-#: src/slic3r/GUI/ConfigWizard.cpp:970 src/slic3r/GUI/ConfigWizard.cpp:984
+#: src/slic3r/GUI/BedShapeDialog.cpp:129 src/slic3r/GUI/ConfigWizard.cpp:236
+#: src/slic3r/GUI/ConfigWizard.cpp:1336 src/slic3r/GUI/ConfigWizard.cpp:1350
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:135
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:333
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/GCodeViewer.cpp:2183 src/slic3r/GUI/GCodeViewer.cpp:2189
+#: src/slic3r/GUI/GCodeViewer.cpp:2197 src/slic3r/GUI/GUI_ObjectLayers.cpp:145
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 #: src/slic3r/GUI/WipeTowerDialog.cpp:85 src/libslic3r/PrintConfig.cpp:75
-#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:91
-#: src/libslic3r/PrintConfig.cpp:122 src/libslic3r/PrintConfig.cpp:188
-#: src/libslic3r/PrintConfig.cpp:246 src/libslic3r/PrintConfig.cpp:321
-#: src/libslic3r/PrintConfig.cpp:329 src/libslic3r/PrintConfig.cpp:379
-#: src/libslic3r/PrintConfig.cpp:505 src/libslic3r/PrintConfig.cpp:516
-#: src/libslic3r/PrintConfig.cpp:534 src/libslic3r/PrintConfig.cpp:712
-#: src/libslic3r/PrintConfig.cpp:1231 src/libslic3r/PrintConfig.cpp:1292
-#: src/libslic3r/PrintConfig.cpp:1310 src/libslic3r/PrintConfig.cpp:1328
-#: src/libslic3r/PrintConfig.cpp:1384 src/libslic3r/PrintConfig.cpp:1394
-#: src/libslic3r/PrintConfig.cpp:1516 src/libslic3r/PrintConfig.cpp:1524
-#: src/libslic3r/PrintConfig.cpp:1565 src/libslic3r/PrintConfig.cpp:1573
-#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1591
-#: src/libslic3r/PrintConfig.cpp:1599 src/libslic3r/PrintConfig.cpp:1682
-#: src/libslic3r/PrintConfig.cpp:1914 src/libslic3r/PrintConfig.cpp:1985
-#: src/libslic3r/PrintConfig.cpp:2019 src/libslic3r/PrintConfig.cpp:2147
-#: src/libslic3r/PrintConfig.cpp:2226 src/libslic3r/PrintConfig.cpp:2233
-#: src/libslic3r/PrintConfig.cpp:2240 src/libslic3r/PrintConfig.cpp:2270
-#: src/libslic3r/PrintConfig.cpp:2280 src/libslic3r/PrintConfig.cpp:2290
-#: src/libslic3r/PrintConfig.cpp:2450 src/libslic3r/PrintConfig.cpp:2484
-#: src/libslic3r/PrintConfig.cpp:2623 src/libslic3r/PrintConfig.cpp:2632
-#: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2651
-#: src/libslic3r/PrintConfig.cpp:2695 src/libslic3r/PrintConfig.cpp:2705
-#: src/libslic3r/PrintConfig.cpp:2717 src/libslic3r/PrintConfig.cpp:2737
-#: src/libslic3r/PrintConfig.cpp:2747 src/libslic3r/PrintConfig.cpp:2757
-#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2790
-#: src/libslic3r/PrintConfig.cpp:2804 src/libslic3r/PrintConfig.cpp:2815
-#: src/libslic3r/PrintConfig.cpp:2828 src/libslic3r/PrintConfig.cpp:2873
-#: src/libslic3r/PrintConfig.cpp:2883 src/libslic3r/PrintConfig.cpp:2892
-#: src/libslic3r/PrintConfig.cpp:2902 src/libslic3r/PrintConfig.cpp:2918
-#: src/libslic3r/PrintConfig.cpp:2942
+#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:93
+#: src/libslic3r/PrintConfig.cpp:124 src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:280 src/libslic3r/PrintConfig.cpp:355
+#: src/libslic3r/PrintConfig.cpp:363 src/libslic3r/PrintConfig.cpp:413
+#: src/libslic3r/PrintConfig.cpp:541 src/libslic3r/PrintConfig.cpp:552
+#: src/libslic3r/PrintConfig.cpp:570 src/libslic3r/PrintConfig.cpp:748
+#: src/libslic3r/PrintConfig.cpp:1158 src/libslic3r/PrintConfig.cpp:1339
+#: src/libslic3r/PrintConfig.cpp:1400 src/libslic3r/PrintConfig.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:1436 src/libslic3r/PrintConfig.cpp:1492
+#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1624
+#: src/libslic3r/PrintConfig.cpp:1632 src/libslic3r/PrintConfig.cpp:1673
+#: src/libslic3r/PrintConfig.cpp:1681 src/libslic3r/PrintConfig.cpp:1691
+#: src/libslic3r/PrintConfig.cpp:1699 src/libslic3r/PrintConfig.cpp:1707
+#: src/libslic3r/PrintConfig.cpp:1790 src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2127 src/libslic3r/PrintConfig.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:2290 src/libslic3r/PrintConfig.cpp:2369
+#: src/libslic3r/PrintConfig.cpp:2376 src/libslic3r/PrintConfig.cpp:2383
+#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2433 src/libslic3r/PrintConfig.cpp:2593
+#: src/libslic3r/PrintConfig.cpp:2627 src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2784
+#: src/libslic3r/PrintConfig.cpp:2794 src/libslic3r/PrintConfig.cpp:2859
+#: src/libslic3r/PrintConfig.cpp:2869 src/libslic3r/PrintConfig.cpp:2881
+#: src/libslic3r/PrintConfig.cpp:2901 src/libslic3r/PrintConfig.cpp:2911
+#: src/libslic3r/PrintConfig.cpp:2921 src/libslic3r/PrintConfig.cpp:2939
+#: src/libslic3r/PrintConfig.cpp:2954 src/libslic3r/PrintConfig.cpp:2968
+#: src/libslic3r/PrintConfig.cpp:2979 src/libslic3r/PrintConfig.cpp:2992
+#: src/libslic3r/PrintConfig.cpp:3037 src/libslic3r/PrintConfig.cpp:3047
+#: src/libslic3r/PrintConfig.cpp:3056 src/libslic3r/PrintConfig.cpp:3066
+#: src/libslic3r/PrintConfig.cpp:3082 src/libslic3r/PrintConfig.cpp:3106
 msgid "mm"
 msgstr "mm"
 
-#: src/libslic3r/PrintConfig.cpp:1547 src/libslic3r/PrintConfig.cpp:1556
+#: src/libslic3r/PrintConfig.cpp:1655 src/libslic3r/PrintConfig.cpp:1664
 msgid "mm (zero to disable)"
 msgstr "mm (null eingeben zum Deaktivieren)"
 
-#: src/libslic3r/PrintConfig.cpp:451 src/libslic3r/PrintConfig.cpp:560
-#: src/libslic3r/PrintConfig.cpp:882 src/libslic3r/PrintConfig.cpp:895
-#: src/libslic3r/PrintConfig.cpp:1015 src/libslic3r/PrintConfig.cpp:1041
-#: src/libslic3r/PrintConfig.cpp:1423 src/libslic3r/PrintConfig.cpp:1761
-#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:1951
-#: src/libslic3r/PrintConfig.cpp:2111
+#: src/libslic3r/PrintConfig.cpp:487 src/libslic3r/PrintConfig.cpp:596
+#: src/libslic3r/PrintConfig.cpp:924 src/libslic3r/PrintConfig.cpp:937
+#: src/libslic3r/PrintConfig.cpp:1059 src/libslic3r/PrintConfig.cpp:1085
+#: src/libslic3r/PrintConfig.cpp:1531 src/libslic3r/PrintConfig.cpp:1876
+#: src/libslic3r/PrintConfig.cpp:2025 src/libslic3r/PrintConfig.cpp:2093
+#: src/libslic3r/PrintConfig.cpp:2254
 msgid "mm or %"
 msgstr "mm oder %"
 
-#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:609
-#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:626
-#: src/libslic3r/PrintConfig.cpp:634 src/libslic3r/PrintConfig.cpp:661
-#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:922
-#: src/libslic3r/PrintConfig.cpp:1050 src/libslic3r/PrintConfig.cpp:1135
-#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1181
-#: src/libslic3r/PrintConfig.cpp:1191 src/libslic3r/PrintConfig.cpp:1241
-#: src/libslic3r/PrintConfig.cpp:1300 src/libslic3r/PrintConfig.cpp:1433
-#: src/libslic3r/PrintConfig.cpp:1607 src/libslic3r/PrintConfig.cpp:1616
-#: src/libslic3r/PrintConfig.cpp:2028 src/libslic3r/PrintConfig.cpp:2154
+#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
+#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
+#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
+#: src/libslic3r/PrintConfig.cpp:716 src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1094 src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1243 src/libslic3r/PrintConfig.cpp:1277
+#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1349 src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1541 src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1724 src/libslic3r/PrintConfig.cpp:2170
+#: src/libslic3r/PrintConfig.cpp:2297
 msgid "mm/s"
 msgstr "mm/s"
 
-#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:904
-#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1772
-#: src/libslic3r/PrintConfig.cpp:1995 src/libslic3r/PrintConfig.cpp:2124
+#: src/libslic3r/PrintConfig.cpp:498 src/libslic3r/PrintConfig.cpp:946
+#: src/libslic3r/PrintConfig.cpp:1835 src/libslic3r/PrintConfig.cpp:1887
+#: src/libslic3r/PrintConfig.cpp:2137 src/libslic3r/PrintConfig.cpp:2267
 msgid "mm/s or %"
 msgstr "mm/s oder %"
 
-#: src/libslic3r/PrintConfig.cpp:196 src/libslic3r/PrintConfig.cpp:339
-#: src/libslic3r/PrintConfig.cpp:862 src/libslic3r/PrintConfig.cpp:984
-#: src/libslic3r/PrintConfig.cpp:1152 src/libslic3r/PrintConfig.cpp:1201
-#: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1403
+#: src/libslic3r/PrintConfig.cpp:230 src/libslic3r/PrintConfig.cpp:373
+#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:1028
+#: src/libslic3r/PrintConfig.cpp:1260 src/libslic3r/PrintConfig.cpp:1309
+#: src/libslic3r/PrintConfig.cpp:1319 src/libslic3r/PrintConfig.cpp:1511
 msgid "mm/s²"
 msgstr "mm/s²"
 
-#: src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:1845
 msgid "mm²"
 msgstr "mm²"
 
-#: src/libslic3r/PrintConfig.cpp:672
+#: src/libslic3r/PrintConfig.cpp:708
 msgid "mm³"
 msgstr "mm³"
 
-#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:601
-#: src/libslic3r/PrintConfig.cpp:1250
+#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1358
 msgid "mm³/s"
 msgstr "mm³/s"
 
-#: src/libslic3r/PrintConfig.cpp:1262 src/libslic3r/PrintConfig.cpp:1273
+#: src/libslic3r/PrintConfig.cpp:1370 src/libslic3r/PrintConfig.cpp:1381
 msgid "mm³/s²"
 msgstr "mm³/s²"
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:1512
 msgid "Mode"
 msgstr "&Modus"
 
@@ -4617,7 +5285,7 @@ msgstr "&Modus"
 msgid "model"
 msgstr "Modell"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:251
+#: src/slic3r/GUI/BedShapeDialog.cpp:395
 msgid "Model"
 msgstr "Modell"
 
@@ -4646,99 +5314,125 @@ msgstr "Modellreparatur beendet"
 msgid "Model repaired successfully"
 msgstr "Modellreparatur erfolgreich"
 
-#: src/slic3r/GUI/Tab.cpp:979
+#: src/slic3r/GUI/GUI_App.cpp:1506 src/slic3r/GUI/wxExtensions.cpp:675
+msgctxt "Mode"
+msgid "Advanced"
+msgstr "Erweitert"
+
+#: src/slic3r/GUI/Tab.cpp:1241
 msgid "Modifications to the current profile will be saved."
 msgstr "Änderungen am aktuellen Profil werden gespeichert."
 
-#: src/slic3r/GUI/Preset.cpp:247
+#: src/slic3r/GUI/GUI_App.cpp:1425
 msgid "modified"
 msgstr "geändert"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Modifier"
 msgstr "Veränderer"
 
-#: src/slic3r/GUI/Tab.cpp:1161
+#: src/slic3r/GUI/Tab.cpp:1491
 msgid "Modifiers"
 msgstr "Veränderer"
 
-#: src/libslic3r/PrintConfig.cpp:2512
+#: src/libslic3r/PrintConfig.cpp:2655
 msgid "money/bottle"
 msgstr "Kosten/Flasche"
 
-#: src/libslic3r/PrintConfig.cpp:762
+#: src/libslic3r/PrintConfig.cpp:798
 msgid "money/kg"
 msgstr "Kosten/kg"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/libslic3r/PrintConfig.cpp:461
+msgid "Monotonic"
+msgstr "Monotonisch"
+
+#: src/slic3r/GUI/NotificationManager.cpp:305
+#: src/slic3r/GUI/NotificationManager.cpp:315
+msgid "More"
+msgstr "Mehr"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Mouse wheel"
 msgstr "Mausrad"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:261
+#: src/slic3r/GUI/GLCanvas3D.cpp:249
 msgid "Mouse wheel:"
 msgstr "Mausrad:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:64
 msgid "Move"
 msgstr "Bewegen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Move clipping plane"
 msgstr "Beschnittebene bewegen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Move current slider thumb Down"
 msgstr "Bewege aktuellen Schieberegler nach unten"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
+msgid "Move current slider thumb Left"
+msgstr "Bewege aktuellen Schieberegler nach links"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
+msgid "Move current slider thumb Right"
+msgstr "Bewege aktuellen Schieberegler nach rechts"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Move current slider thumb Up"
 msgstr "Bewege aktuellen Schieberegler nach oben"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:1059
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:835
 msgid "Move drainage hole"
 msgstr "Drainageloch bewegen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3505
+#: src/slic3r/GUI/GLCanvas3D.cpp:3810
 msgid "Move Object"
 msgstr "Objekt bewegen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
 msgid "Move point"
 msgstr "Punkt bewegen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
 msgid "Move selection 10 mm in negative X direction"
 msgstr "Auswahl 10 mm in negativer X-Richtung verschieben"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
 msgid "Move selection 10 mm in negative Y direction"
 msgstr "Auswahl 10 mm in negativer Y-Richtung verschieben"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
 msgid "Move selection 10 mm in positive X direction"
 msgstr "Auswahl 10 mm in positiver X-Richtung verschieben"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
 msgid "Move selection 10 mm in positive Y direction"
 msgstr "Auswahl 10 mm in positiver Y-Richtung verschieben"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1097
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:955
 msgid "Move support point"
 msgstr "Stützpunkt bewegen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/GCodeViewer.cpp:2492
+msgid "Movement"
+msgstr "Bewegung"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Movement in camera space"
 msgstr "Bewegung im Kameraraum"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
 msgid "Movement step set to 1 mm"
 msgstr "Bewegungsschritt auf 1 mm eingestellt"
 
-#: src/libslic3r/PrintConfig.cpp:2201
+#: src/libslic3r/PrintConfig.cpp:2344
 msgid "Multi material printers may need to prime or purge extruders on tool changes. Extrude the excess material into the wipe tower."
 msgstr "Multi-Material-Drucker müssen eventuell Extruder bei Werkzeugwechseln vor- oder nachspülen. Extrudieren Sie das überschüssige Material in den Reinigungsturm."
 
-#: src/slic3r/GUI/Plater.cpp:2360 src/slic3r/GUI/Plater.cpp:2413
+#: src/slic3r/GUI/Plater.cpp:2322 src/slic3r/GUI/Plater.cpp:2375
 msgid "Multi-part object detected"
 msgstr "Objekt mit mehreren Teilen erkannt"
 
@@ -4747,11 +5441,11 @@ msgstr "Objekt mit mehreren Teilen erkannt"
 msgid "Multiple %s devices found. Please only connect one at a time for flashing."
 msgstr "Mehrere %s Geräte gefunden. Bitte immer nur eins zum Flashen anschließen."
 
-#: src/slic3r/GUI/Tab.cpp:1179
+#: src/slic3r/GUI/Tab.cpp:1509
 msgid "Multiple Extruders"
 msgstr "Mehrere Extruder"
 
-#: src/slic3r/GUI/Plater.cpp:2410
+#: src/slic3r/GUI/Plater.cpp:2372
 msgid ""
 "Multiple objects were loaded for a multi-material printer.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -4761,36 +5455,41 @@ msgstr ""
 "Soll ich, anstatt sie als mehrere Objekte zu betrachten, \n"
 "diese Dateien als ein einzelnes Objekt mit mehreren Teilen behandeln?"
 
-#: src/libslic3r/PrintConfig.cpp:3439
+#: src/libslic3r/PrintConfig.cpp:3638
 msgid "Multiply copies by creating a grid."
 msgstr "Multiple Kopien durch Erstellen eines Rasters."
 
-#: src/libslic3r/PrintConfig.cpp:3434
+#: src/libslic3r/PrintConfig.cpp:3633
 msgid "Multiply copies by this factor."
 msgstr "Mehrfache Kopien mit diesem Faktor."
 
-#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:580
+#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:715
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:874
 msgid "N/A"
 msgstr "N.V."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:270
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:153
+#: src/slic3r/GUI/GUI_ObjectList.cpp:284
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:161
 msgid "Name"
 msgstr "Name"
 
-#: src/libslic3r/PrintConfig.cpp:1488
+#: src/libslic3r/PrintConfig.cpp:114
+msgid "Name of the printer"
+msgstr "Name des Druckers"
+
+#: src/libslic3r/PrintConfig.cpp:1596
 msgid "Name of the printer variant. For example, the printer variants may be differentiated by a nozzle diameter."
 msgstr "Name der Druckervariante. Beispielsweise können die Druckervarianten durch einen Düsendurchmesser unterschieden werden."
 
-#: src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1590
 msgid "Name of the printer vendor."
 msgstr "Name des Druckerherstellers."
 
-#: src/libslic3r/PrintConfig.cpp:1058
+#: src/libslic3r/PrintConfig.cpp:1102
 msgid "Name of the profile, from which this profile inherits."
 msgstr "Name des Profils, von dem dieses Profil abgeleitet wurde."
 
-#: src/libslic3r/PrintConfig.cpp:1630
+#: src/libslic3r/PrintConfig.cpp:1738
 msgid "Nearest"
 msgstr "Nächste"
 
@@ -4798,14 +5497,30 @@ msgstr "Nächste"
 msgid "Network lookup"
 msgstr "Network Lookup"
 
-#: src/slic3r/GUI/Plater.cpp:2151
+#: src/slic3r/GUI/Preferences.cpp:430
+msgid "New layout, access via settings button in the top menu"
+msgstr "Neues Layout, Zugang über die Schaltfläche Einstellungen im oberen Menü"
+
+#: src/slic3r/GUI/Plater.cpp:2056
 msgid "New Project"
 msgstr "Neues Projekt"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:105
 msgid "New project, clear plater"
 msgstr "Neues Projekt, Druckplatte leeren"
 
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:609
+msgid "New Value"
+msgstr "Neuer Wert"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1178
+msgid "New value"
+msgstr "Neuer Wert"
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "New version is available."
+msgstr "Eine neue Version ist verfügbar."
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:38
 #, c-format
 msgid "New version of %s is available"
@@ -4815,23 +5530,23 @@ msgstr "Eine neue Version von %s ist verfügbar"
 msgid "New version:"
 msgstr "Neue Version:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4673
+#: src/slic3r/GUI/GLCanvas3D.cpp:5089
 msgid "Next Redo action: %1%"
 msgstr "Nächste Redo Aktion: %1%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4641
+#: src/slic3r/GUI/GLCanvas3D.cpp:5051
 msgid "Next Undo action: %1%"
 msgstr "Nächste Undo-Aktion: %1%"
 
-#: src/libslic3r/PrintConfig.cpp:960
+#: src/libslic3r/PrintConfig.cpp:1004
 msgid "No extrusion"
 msgstr "Keine Extrusion"
 
-#: src/libslic3r/SLAPrintSteps.cpp:453
+#: src/libslic3r/SLAPrintSteps.cpp:451
 msgid "No pad can be generated for this model with the current configuration"
 msgstr "Für dieses Modell kann mit der aktuellen Konfiguration keine Grundschicht generiert werden"
 
-#: src/slic3r/GUI/MainFrame.cpp:784
+#: src/slic3r/GUI/MainFrame.cpp:1485
 msgid "No previously sliced file."
 msgstr "Keine vorher gesclicete Datei."
 
@@ -4839,175 +5554,221 @@ msgstr "Keine vorher gesclicete Datei."
 msgid "NO RAMMING AT ALL"
 msgstr "ÜBERHAUPT KEIN RAMMEN"
 
-#: src/libslic3r/PrintConfig.cpp:1857
+#: src/libslic3r/PrintConfig.cpp:1999
 msgid "No sparse layers (EXPERIMENTAL)"
 msgstr "Keine spärlichen Schichten (EXPERIMENTELL)"
 
-#: src/libslic3r/PrintConfig.cpp:2774
+#: src/libslic3r/PrintConfig.cpp:2938
 msgid "No support points will be placed closer than this threshold."
 msgstr "Es werden keine Stützpunkte näher als dieser Schwellenwert platziert."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "No updates available"
 msgstr "Keine Updates verfügbar"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:291 src/slic3r/GUI/ConfigWizard.cpp:574
-#: src/slic3r/GUI/Plater.cpp:499 src/slic3r/GUI/Plater.cpp:639
-#: src/libslic3r/ExtrusionEntity.cpp:309
+#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/ConfigWizard.cpp:599
+#: src/slic3r/GUI/Plater.cpp:365 src/slic3r/GUI/Plater.cpp:505
+#: src/libslic3r/ExtrusionEntity.cpp:312
 msgid "None"
 msgstr "Kein"
 
-#: src/slic3r/GUI/Tab.cpp:2203
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2372
 msgid "Normal"
 msgstr "Normal"
 
-#: src/slic3r/GUI/Plater.cpp:1286
+#: src/slic3r/GUI/Plater.cpp:1177 src/slic3r/GUI/Plater.cpp:1224
 msgid "normal mode"
 msgstr "Normaler Modus"
 
-#: src/libslic3r/Zipper.cpp:46
+#: src/slic3r/GUI/GCodeViewer.cpp:2552
+msgid "Normal mode"
+msgstr "Normaler Modus"
+
+#: src/libslic3r/miniz_extension.cpp:105
 msgid "not a ZIP archive"
 msgstr "kein ZIP Archiv"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:223 src/slic3r/GUI/BedShapeDialog.cpp:302
+#: src/slic3r/GUI/BedShapeDialog.cpp:366 src/slic3r/GUI/BedShapeDialog.cpp:446
 msgid "Not found:"
 msgstr "Nicht gefunden:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1019
+#: src/slic3r/GUI/DoubleSlider.cpp:1144
 msgid "Note"
 msgstr "Hinweis"
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/GUI/Tab.cpp:3408
+msgid "Note, that selected preset will be deleted from this/those printer(s) too."
+msgstr "Beachten Sie, dass die ausgewählte Voreinstellung auch von diesem/diesen Drucker(n) gelöscht wird."
+
+#: src/slic3r/GUI/Tab.cpp:3416
+msgid "Note, that this/those printer(s) will be deleted after deleting of the selected preset."
+msgstr "Beachten Sie, dass dieser/diese Drucker nach dem Löschen der ausgewählten Voreinstellung gelöscht werden."
+
+#: src/slic3r/GUI/Tab.cpp:2039
+msgid ""
+"Note: All parameters from this group are moved to the Physical Printer settings (see changelog).\n"
+"\n"
+"A new Physical Printer profile is created by clicking on the \"cog\" icon right of the Printer profiles combo box, by selecting the \"Add physical printer\" item in the Printer combo box. The Physical Printer profile editor opens also when clicking on the \"cog\" icon in the Printer settings tab. The Physical Printer profiles are being stored into PrusaSlicer/physical_printer directory."
+msgstr ""
+"Hinweis: Alle Parameter aus dieser Gruppe werden in die Einstellungen des physischen Druckers verschoben (siehe Changelog).\n"
+"\n"
+"Ein neues physisches Druckerprofil wird erstellt, indem man auf das \"Zahnrad\"-Symbol rechts vom Auswahlfeld \"Druckerprofile\" klickt, indem man den Punkt \"Physischen Drucker hinzufügen\" im Auswahlfeld \"Drucker\" auswählt. Der Profil-Editor für physische Drucker wird auch durch Klicken auf das \"Zahnrad\"-Symbol in der Registerkarte \"Druckereinstellungen\" geöffnet. Die Profile des physischen Druckers werden im Verzeichnis PrusaSlicer/physical_printer gespeichert."
+
+#: src/slic3r/Utils/AstroBox.cpp:92
 msgid "Note: AstroBox version at least 1.1.0 is required."
 msgstr "Hinweis: Die AstroBox-Version 1.1.0 oder höher ist erforderlich."
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:76
 msgid "Note: FlashAir with firmware 2.00.02 or newer and activated upload function is required."
 msgstr "Hinweis: FlashAir mit Firmware 2.00.02 oder neuer und aktivierter Upload-Funktion ist erforderlich."
 
-#: src/slic3r/Utils/OctoPrint.cpp:89
+#: src/slic3r/Utils/OctoPrint.cpp:91
 msgid "Note: OctoPrint version at least 1.1.0 is required."
 msgstr "Hinweis: Es ist mindestens die OctoPrint-Version 1.1.0 erforderlich."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1345
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1192
 msgid "Note: some shortcuts work in (non)editing mode only."
 msgstr "Hinweis: Einige Tastenkombinationen funktionieren nur im (Nicht-)Bearbeitungsmodus."
 
-#: src/slic3r/GUI/Tab.cpp:1251 src/slic3r/GUI/Tab.cpp:1252
-#: src/slic3r/GUI/Tab.cpp:1540 src/slic3r/GUI/Tab.cpp:1541
-#: src/slic3r/GUI/Tab.cpp:2012 src/slic3r/GUI/Tab.cpp:2013
-#: src/slic3r/GUI/Tab.cpp:2128 src/slic3r/GUI/Tab.cpp:2129
-#: src/slic3r/GUI/Tab.cpp:3535 src/slic3r/GUI/Tab.cpp:3536
+#: src/slic3r/GUI/SavePresetDialog.cpp:151
+msgid "Note: This preset will be replaced after saving"
+msgstr "Hinweis: Diese Voreinstellung wird nach dem Speichern ersetzt"
+
+#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582
+#: src/slic3r/GUI/Tab.cpp:1887 src/slic3r/GUI/Tab.cpp:1888
+#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2297 src/slic3r/GUI/Tab.cpp:2298
+#: src/slic3r/GUI/Tab.cpp:3951 src/slic3r/GUI/Tab.cpp:3952
 msgid "Notes"
 msgstr "Anmerkungen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1751 src/slic3r/GUI/DoubleSlider.cpp:1905
-#: src/slic3r/GUI/DoubleSlider.cpp:1926 src/slic3r/GUI/GUI.cpp:245
+#: src/slic3r/GUI/ConfigWizard.cpp:2237 src/slic3r/GUI/DoubleSlider.cpp:2124
+#: src/slic3r/GUI/DoubleSlider.cpp:2144 src/slic3r/GUI/GUI.cpp:244
 msgid "Notice"
 msgstr "Hinweis"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:218
+#: src/slic3r/GUI/ConfigWizard.cpp:236
 msgid "nozzle"
 msgstr "Düse"
 
-#: src/slic3r/GUI/Tab.cpp:1870 src/slic3r/GUI/Tab.cpp:2340
-#: src/libslic3r/PrintConfig.cpp:1326
+#: src/slic3r/GUI/Tab.cpp:1790
+msgid "Nozzle"
+msgstr "Düse"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1392
+msgid "Nozzle and Bed Temperatures"
+msgstr "Düsen- und Bett-Temperaturen"
+
+#: src/slic3r/GUI/Tab.cpp:2104 src/slic3r/GUI/Tab.cpp:2509
+#: src/libslic3r/PrintConfig.cpp:1434
 msgid "Nozzle diameter"
 msgstr "Düsendurchmesser"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:969
+#: src/slic3r/GUI/ConfigWizard.cpp:1335
 msgid "Nozzle Diameter:"
 msgstr "Düsendurchmesser:"
 
-#: src/libslic3r/PrintConfig.cpp:650
+#: src/libslic3r/PrintConfig.cpp:2201
+msgid "Nozzle temperature"
+msgstr "Düsentemperatur"
+
+#: src/libslic3r/PrintConfig.cpp:2198
+msgid "Nozzle temperature for layers after the first one. Set this to zero to disable temperature control commands in the output G-code."
+msgstr "Düsentemperatur für Schichten nach der ersten. Setzen Sie diesen Wert auf Null, um Temperatursteuerungsbefehle im ausgegebenen G-Code zu deaktivieren."
+
+#: src/libslic3r/PrintConfig.cpp:961
+msgid "Nozzle temperature for the first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output G-code."
+msgstr "Düsentemperatur für die erste Schicht. Wenn Sie die Temperatur während des Drucks manuell steuern möchten, setzen Sie diesen Wert auf Null, um Temperatursteuerungsbefehle im ausgegebenen G-Code zu deaktivieren."
+
+#: src/libslic3r/PrintConfig.cpp:686
 msgid "Number of cooling moves"
 msgstr "Anzahl der Kühlbewegungen"
 
-#: src/slic3r/GUI/Tab.cpp:1839
+#: src/slic3r/GUI/Tab.cpp:2073
 msgid "Number of extruders of the printer."
 msgstr "Anzahl der Extruder des Druckers."
 
-#: src/libslic3r/PrintConfig.cpp:1975
+#: src/libslic3r/PrintConfig.cpp:2117
 msgid "Number of interface layers to insert between the object(s) and support material."
 msgstr "Anzahl der Schnittstellenschichten, die zwischen Objekt(en) und Trägermaterial eingefügt werden sollen."
 
-#: src/libslic3r/PrintConfig.cpp:1697
+#: src/libslic3r/PrintConfig.cpp:1812
 msgid "Number of loops for the skirt. If the Minimum Extrusion Length option is set, the number of loops might be greater than the one configured here. Set this to zero to disable skirt completely."
 msgstr "Anzahl der Schleifen für die Schürze. Wenn die Option Minimale Extrusionslänge gesetzt ist, kann die Anzahl der Schleifen größer sein als die hier konfigurierte. Setzen Sie diesen Wert auf null, um die Schürze komplett zu deaktivieren."
 
-#: src/libslic3r/PrintConfig.cpp:2365
+#: src/libslic3r/PrintConfig.cpp:2508
 msgid "Number of pixels in"
 msgstr "Anzahl an Pixeln in"
 
-#: src/libslic3r/PrintConfig.cpp:2367
+#: src/libslic3r/PrintConfig.cpp:2510
 msgid "Number of pixels in X"
 msgstr "Anzahl an Pixeln in X"
 
-#: src/libslic3r/PrintConfig.cpp:2373
+#: src/libslic3r/PrintConfig.cpp:2516
 msgid "Number of pixels in Y"
 msgstr "Anzahl an Pixeln in Y"
 
-#: src/libslic3r/PrintConfig.cpp:176
+#: src/libslic3r/PrintConfig.cpp:210
 msgid "Number of solid layers to generate on bottom surfaces."
 msgstr "Anzahl der zu erzeugenden massiven Schichten auf der Bodenfläche."
 
-#: src/libslic3r/PrintConfig.cpp:1781
+#: src/libslic3r/PrintConfig.cpp:1896
 msgid "Number of solid layers to generate on top and bottom surfaces."
 msgstr "Anzahl der zu erzeugenden massiven Schichten auf der Ober- und Unterseite."
 
-#: src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2277
 msgid "Number of solid layers to generate on top surfaces."
 msgstr "Anzahl der zu erzeugenden massiven Schichten auf der Oberseite."
 
-#: src/libslic3r/PrintConfig.cpp:2518
+#: src/libslic3r/PrintConfig.cpp:2661
 msgid "Number of the layers needed for the exposure time fade from initial exposure time to the exposure time"
 msgstr "Anzahl der für die Reduzierung der Belichtungszeit benötigten Schichten, von der anfänglichen bis zur Belichtungszeit"
 
-#: src/slic3r/GUI/Plater.cpp:241
+#: src/slic3r/GUI/Plater.cpp:247
 msgid "Number of tool changes"
 msgstr "Anzahl der Werkzeugwechsel"
 
-#: src/libslic3r/PrintConfig.cpp:2753
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:2917
 msgid "Object elevation"
 msgstr "Objekt-Hebung"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2466
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2858
 msgid "Object manipulation"
 msgstr "Objektbearbeitung"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:155 src/libslic3r/GCode.cpp:638
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:163 src/libslic3r/GCode.cpp:623
 msgid "Object name"
 msgstr "Objektname"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3417
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3880
 msgid "Object or Instance"
 msgstr "Objekt oder Kopie"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Object reordered"
 msgstr "Objekt neu angeordnet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2479
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2871
 msgid "Object Settings to modify"
 msgstr "Abweichende Objekteigenschaften"
 
-#: src/slic3r/GUI/Plater.cpp:2529
+#: src/slic3r/GUI/Plater.cpp:2491
 msgid "Object too large?"
 msgstr "Objekt zu groß?"
 
-#: src/libslic3r/PrintConfig.cpp:2262
+#: src/libslic3r/PrintConfig.cpp:2405
 msgid "Object will be used to purge the nozzle after a toolchange to save material that would otherwise end up in the wipe tower and decrease print time. Colours of the objects will be mixed as a result."
 msgstr "Objekt wird zum Reinigen der Düse nach einem Materialwechsel verwendet, um Material zu sparen, das sonst im Reinigungsturm landen und die Druckzeit verkürzen würde. Die Farben der Objekte werden dabei gemischt."
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "object(s)"
 msgstr "Objekt(e)"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "objects"
 msgstr "Objekte"
 
-#: src/libslic3r/PrintConfig.cpp:429 src/libslic3r/PrintConfig.cpp:855
+#: src/libslic3r/PrintConfig.cpp:465 src/libslic3r/PrintConfig.cpp:893
 msgid "Octagram Spiral"
 msgstr "Achterstern-Spirale"
 
@@ -5015,64 +5776,97 @@ msgstr "Achterstern-Spirale"
 msgid "OctoPrint version"
 msgstr "OctoPrint Version"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3425
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3888
 msgid "of a current Object"
 msgstr "des aktuellen Objekts"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
 msgid "Offset"
 msgstr "Offset"
 
-#: src/slic3r/GUI/Tab.cpp:1755
+#: src/slic3r/GUI/Preferences.cpp:422
+msgid "Old regular layout with the tab bar"
+msgstr "Altes reguläres Layout mit der Registerleiste"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:608
+msgid "Old Value"
+msgstr "Alter Wert"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1177
+msgid "Old value"
+msgstr "Alter Wert"
+
+#: src/slic3r/GUI/Preferences.cpp:123
+msgid "On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances of same app from the command line. In such case this settings will allow only one instance."
+msgstr "Unter OSX wird standardmäßig immer nur eine Instanz der Anwendung ausgeführt. Es ist jedoch erlaubt, mehrere Instanzen derselben Anwendung von der Befehlszeile aus auszuführen. In einem solchen Fall erlauben diese Einstellungen nur eine Instanz."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:359
 #, c-format
 msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain."
 msgstr "Auf diesem System verwendet %s HTTPS-Zertifikate aus dem System Zertifikatsspeicher oder Schlüsselbund."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:950
+#: src/slic3r/GUI/DoubleSlider.cpp:1064
 msgid "One layer mode"
 msgstr "Eine Schicht Modus"
 
-#: src/libslic3r/Print.cpp:1365
+#: src/libslic3r/Print.cpp:1391
 msgid "One or more object were assigned an extruder that the printer does not have."
 msgstr "Eines oder mehrere Objekte wurden einem Extruder zugewiesen, der auf diesem Drucker nicht vorhanden ist."
 
-#: src/libslic3r/PrintConfig.cpp:1903 src/libslic3r/PrintConfig.cpp:2676
+#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
 msgid "Only create support if it lies on a build plate. Don't create support on a print."
 msgstr "Nur dann Stützen schaffen, wenn sie auf der Druckplattform aufbauen. Erstellt keine Stützstrukturen, die auf dem Ausdruck gründen würden."
 
-#: src/libslic3r/PrintConfig.cpp:1027
+#: src/libslic3r/PrintConfig.cpp:1071
 msgid "Only infill where needed"
 msgstr "Infill nur wo es notwendig ist drucken"
 
-#: src/slic3r/GUI/Tab.cpp:2373
+#: src/slic3r/GUI/Tab.cpp:2542
 msgid "Only lift Z"
 msgstr "Nur Z anheben"
 
-#: src/libslic3r/PrintConfig.cpp:1570
+#: src/libslic3r/PrintConfig.cpp:1678
 msgid "Only lift Z above"
 msgstr "Z nur Anheben über"
 
-#: src/libslic3r/PrintConfig.cpp:1579
+#: src/libslic3r/PrintConfig.cpp:1687
 msgid "Only lift Z below"
 msgstr "Z anheben nur unter"
 
-#: src/libslic3r/PrintConfig.cpp:1348
+#: src/libslic3r/PrintConfig.cpp:1456
 msgid "Only retract when crossing perimeters"
 msgstr "Nur bei Umfangsüberquerungen einziehen"
 
-#: src/slic3r/GUI/Tab.cpp:1187
+#: src/slic3r/GUI/ConfigWizard.cpp:714
+msgid "Only the following installed printers are compatible with the selected filament:"
+msgstr "Nur die folgenden installierten Drucker sind mit dem ausgewählten Filament kompatibel:"
+
+#: src/slic3r/GUI/Tab.cpp:1517
 msgid "Ooze prevention"
 msgstr "Vermeidung von Nachsickern (Ooze)"
 
-#: src/libslic3r/Print.cpp:1266
+#: src/libslic3r/Print.cpp:1292
 msgid "Ooze prevention is currently not supported with the wipe tower enabled."
 msgstr "Die Sickervermeidung wird derzeit nicht unterstützt, wenn der Wischturm aktiviert ist."
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open &PrusaSlicer"
+msgstr "Öffne &PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "Open a G-code file"
+msgstr "Öffne eine G-Code-Datei"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:77
+#: src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open a new PrusaSlicer instance"
+msgstr "Öffne eine neue PrusaSlicer-Instanz"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "Open a project file"
 msgstr "Öffne eine Projektdatei"
 
-#: src/slic3r/GUI/Tab.cpp:1729
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:330
 msgid "Open CA certificate file"
 msgstr "Open CA Zertifikat Datei"
 
@@ -5085,116 +5879,150 @@ msgstr "Änderungsseite öffnen"
 msgid "Open download page"
 msgstr "Downloadseite öffnen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
+#: src/slic3r/GUI/NotificationManager.cpp:742
+msgid "Open Folder."
+msgstr "Öffne Ordner."
+
+#: src/slic3r/Utils/Process.cpp:151
+msgid "Open G-code file:"
+msgstr "Öffne G-Code-Datei:"
+
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:1141
+msgid "Open G-code viewer"
+msgstr "G-Code-Viewer öffnen"
+
+#: src/slic3r/GUI/MainFrame.cpp:79
+msgid "Open new G-code viewer"
+msgstr "Neuen G-Code-Viewer öffnen"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open new instance"
+msgstr "Neue Instanz öffnen"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:106
 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater"
 msgstr "Öffne Projekt STL/OBJ/AMF/3MF mit Konfiguration, Druckplatte leeren"
 
-#: src/slic3r/GUI/MainFrame.cpp:693
+#: src/slic3r/GUI/MainFrame.cpp:77 src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open PrusaSlicer"
+msgstr "PrusaSlicer öffnen"
+
+#: src/slic3r/GUI/MainFrame.cpp:918 src/slic3r/GUI/MainFrame.cpp:1317
 #, c-format
 msgid "Open the %s website in your browser"
 msgstr "%s-Website in Ihrem Browser öffnen"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Open the Prusa3D drivers download page in your browser"
 msgstr "Download-Seite für die Prusa3D-Treiber in Ihrem Browser öffnen"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Open the software releases page in your browser"
 msgstr "Seite mit Programmversionen in Ihrem Browser öffnen"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:220 src/slic3r/GUI/Plater.cpp:3961
 msgid "Optimize orientation"
 msgstr "Optimiere Ausrichtung"
 
-#: src/slic3r/GUI/Plater.cpp:2767
+#: src/slic3r/GUI/Plater.cpp:1555
 msgid "Optimize Rotation"
 msgstr "Rotation optimieren"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Plater.cpp:3962
 msgid "Optimize the rotation of the object for better print results."
 msgstr "Optimiere die Rotation des Objekts für ein besseres Druckergebnis."
 
-#: src/libslic3r/PrintConfig.cpp:137
+#: src/libslic3r/PrintConfig.cpp:170
 msgid "Optimize travel moves in order to minimize the crossing of perimeters. This is mostly useful with Bowden extruders which suffer from oozing. This feature slows down both the print and the G-code generation."
 msgstr "Optimieren Sie die Verfahrbewegungen, um das Überschreiten von Konturen zu minimieren. Dies ist vor allem bei Bowdenextrudern nützlich, die unter sickerndem Material leiden. Diese Funktion verlangsamt sowohl den Druck als auch die Generierung des G-Codes."
 
-#: src/slic3r/GUI/Tab.cpp:1131
+#: src/slic3r/GUI/GCodeViewer.cpp:2525 src/slic3r/GUI/GUI_Preview.cpp:320
+#: src/slic3r/GUI/GUI_Preview.cpp:333
+msgid "Options"
+msgstr "Optionen"
+
+#: src/slic3r/GUI/Tab.cpp:1460
 msgid "Options for support material and raft"
 msgstr "Optionen für Stützstrukturen und Raft"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:989
+#: src/slic3r/GUI/Mouse3DController.cpp:315
+msgid "Options:"
+msgstr "Optionen:"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1112
 msgid "or press \"+\" key"
 msgstr "oder drücken Sie die Taste \"+\""
 
-#: src/slic3r/GUI/Plater.cpp:2892
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:74
 msgid "Orientation found."
 msgstr "Ausrichtung gefunden."
 
-#: src/slic3r/GUI/Plater.cpp:2891
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:73
 msgid "Orientation search canceled."
 msgstr "Ausrichtungssuche abgebrochen."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:84
+#: src/slic3r/GUI/BedShapeDialog.cpp:94
 msgid "Origin"
 msgstr "Nullpunkt"
 
-#: src/slic3r/GUI/Tab.cpp:1227
+#: src/slic3r/GUI/Tab.cpp:1557
 msgid "Other"
 msgstr "Sonstige"
 
-#: src/libslic3r/PrintConfig.cpp:144 src/libslic3r/PrintConfig.cpp:2064
+#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:2206
 msgid "Other layers"
 msgstr "Andere Schichten"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:856
+#: src/slic3r/GUI/ConfigWizard.cpp:1222
 msgid "Other Vendors"
 msgstr "Andere Hersteller"
 
-#: src/slic3r/GUI/Tab.cpp:1238 src/slic3r/GUI/Tab.cpp:3666
+#: src/slic3r/GUI/Tab.cpp:1568 src/slic3r/GUI/Tab.cpp:4085
 msgid "Output file"
 msgstr "Ausgabedatei"
 
-#: src/libslic3r/PrintConfig.cpp:3493
+#: src/libslic3r/PrintConfig.cpp:3692
 msgid "Output File"
 msgstr "Ausgabedatei"
 
-#: src/libslic3r/PrintConfig.cpp:1363
+#: src/libslic3r/PrintConfig.cpp:1471
 msgid "Output filename format"
 msgstr "Ausgabe Dateinamen Format"
 
-#: src/libslic3r/PrintConfig.cpp:3381
+#: src/libslic3r/PrintConfig.cpp:3580
 msgid "Output Model Info"
 msgstr "Ausgabe Modellinformationen"
 
-#: src/slic3r/GUI/Tab.cpp:1230 src/slic3r/GUI/Tab.cpp:3665
+#: src/slic3r/GUI/Tab.cpp:1560 src/slic3r/GUI/Tab.cpp:4084
 msgid "Output options"
 msgstr "Ausgabeoptionen"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/ExtrusionEntity.cpp:312
+#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/libslic3r/ExtrusionEntity.cpp:340
 msgid "Overhang perimeter"
 msgstr "Überhängende Außenkontur"
 
-#: src/libslic3r/PrintConfig.cpp:2042
+#: src/libslic3r/PrintConfig.cpp:2184
 msgid "Overhang threshold"
 msgstr "Überhangsschwellwert"
 
-#: src/slic3r/GUI/Tab.cpp:1215
+#: src/slic3r/GUI/Tab.cpp:1545
 msgid "Overlap"
 msgstr "Überlappung"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "P&rint Settings Tab"
 msgstr "D&ruckeinstellungen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:625
-#: src/slic3r/GUI/Plater.cpp:635 src/slic3r/GUI/Tab.cpp:3636
-#: src/slic3r/GUI/Tab.cpp:3637 src/libslic3r/PrintConfig.cpp:2781
-#: src/libslic3r/PrintConfig.cpp:2788 src/libslic3r/PrintConfig.cpp:2802
-#: src/libslic3r/PrintConfig.cpp:2813 src/libslic3r/PrintConfig.cpp:2823
-#: src/libslic3r/PrintConfig.cpp:2845 src/libslic3r/PrintConfig.cpp:2856
-#: src/libslic3r/PrintConfig.cpp:2863 src/libslic3r/PrintConfig.cpp:2870
-#: src/libslic3r/PrintConfig.cpp:2881 src/libslic3r/PrintConfig.cpp:2890
-#: src/libslic3r/PrintConfig.cpp:2899
+#: src/slic3r/GUI/GUI_ObjectList.cpp:105 src/slic3r/GUI/GUI_ObjectList.cpp:664
+#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Tab.cpp:4055
+#: src/slic3r/GUI/Tab.cpp:4056 src/slic3r/GUI/Tab.cpp:4127
+#: src/libslic3r/PrintConfig.cpp:2945 src/libslic3r/PrintConfig.cpp:2952
+#: src/libslic3r/PrintConfig.cpp:2966 src/libslic3r/PrintConfig.cpp:2977
+#: src/libslic3r/PrintConfig.cpp:2987 src/libslic3r/PrintConfig.cpp:3009
+#: src/libslic3r/PrintConfig.cpp:3020 src/libslic3r/PrintConfig.cpp:3027
+#: src/libslic3r/PrintConfig.cpp:3034 src/libslic3r/PrintConfig.cpp:3045
+#: src/libslic3r/PrintConfig.cpp:3054 src/libslic3r/PrintConfig.cpp:3063
 msgid "Pad"
 msgstr "Grundschicht (Pad)"
 
@@ -5202,150 +6030,186 @@ msgstr "Grundschicht (Pad)"
 msgid "Pad and Support"
 msgstr "Grundschicht und Stützen"
 
-#: src/libslic3r/PrintConfig.cpp:2855
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:3019
 msgid "Pad around object"
 msgstr "Grundschicht um Objekt"
 
-#: src/libslic3r/PrintConfig.cpp:2862
+#: src/libslic3r/PrintConfig.cpp:3026
 msgid "Pad around object everywhere"
 msgstr "Grundschicht überall um Objekt"
 
-#: src/libslic3r/PrintConfig.cpp:2811
+#: src/libslic3r/PrintConfig.cpp:2975
 msgid "Pad brim size"
 msgstr "Grundschicht Randgröße"
 
-#: src/libslic3r/SLA/Pad.cpp:691
+#: src/libslic3r/SLA/Pad.cpp:532
 msgid "Pad brim size is too small for the current configuration."
 msgstr "Die Randgröße der Grundschicht ist für die aktuelle Konfiguration zu klein."
 
-#: src/libslic3r/PrintConfig.cpp:2898
+#: src/libslic3r/PrintConfig.cpp:3062
 msgid "Pad object connector penetration"
 msgstr "Objektgrundschicht Verbindungseindringtiefe"
 
-#: src/libslic3r/PrintConfig.cpp:2880
+#: src/libslic3r/PrintConfig.cpp:3044
 msgid "Pad object connector stride"
 msgstr "Objektgrundschicht Verbindungsschritte"
 
-#: src/libslic3r/PrintConfig.cpp:2889
+#: src/libslic3r/PrintConfig.cpp:3053
 msgid "Pad object connector width"
 msgstr "Objektgrundschicht Verbinderbreite"
 
-#: src/libslic3r/PrintConfig.cpp:2869
+#: src/libslic3r/PrintConfig.cpp:3033
 msgid "Pad object gap"
 msgstr "Grundschicht Objekt Abstand"
 
-#: src/libslic3r/PrintConfig.cpp:2797
+#: src/libslic3r/PrintConfig.cpp:2961
 msgid "Pad wall height"
 msgstr "Grundschicht Wandhöhe"
 
-#: src/libslic3r/PrintConfig.cpp:2844
+#: src/libslic3r/PrintConfig.cpp:3008
 msgid "Pad wall slope"
 msgstr "Grundschicht Wandneigung"
 
-#: src/libslic3r/PrintConfig.cpp:2787
+#: src/libslic3r/PrintConfig.cpp:2951
 msgid "Pad wall thickness"
 msgstr "Grundschicht Wandstärke"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Page Down"
 msgstr "Page Down"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Page Up"
 msgstr "Page Up"
 
-#: src/slic3r/GUI/Field.cpp:139
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33
+msgid "Paint-on supports"
+msgstr "Aufmal-Stützen"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:178
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:159
+msgid "Paints all facets inside, regardless of their orientation."
+msgstr "Bemalt alle umfassten Flächen, unabhängig von ihrer Ausrichtung."
+
+#: src/slic3r/GUI/Field.cpp:187
 msgid "parameter name"
 msgstr "Parametername"
 
-#: src/slic3r/GUI/Field.cpp:243
+#: src/slic3r/GUI/Field.cpp:291
 msgid "Parameter validation"
 msgstr "Parameterüberprüfung"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Part"
 msgstr "Teil"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2494
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2886
 msgid "Part manipulation"
 msgstr "Teilbearbeitung"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2483
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2875
 msgid "Part Settings to modify"
 msgstr "Abweichende Teileigenschaften"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4514
+#: src/libslic3r/PrintConfig.cpp:138
+msgid "Password"
+msgstr "Kennwort"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4880
 msgid "Paste"
 msgstr "Einfügen"
 
-#: src/slic3r/GUI/MainFrame.cpp:592
+#: src/slic3r/GUI/MainFrame.cpp:1198
 msgid "Paste clipboard"
 msgstr "Aus Zwischenablage einfügen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
 msgid "Paste from clipboard"
 msgstr "Aus Zwischenablage einfügen"
 
-#: src/slic3r/GUI/Plater.cpp:5606
+#: src/slic3r/GUI/Plater.cpp:5803
 msgid "Paste From Clipboard"
 msgstr "Aus Zwischenablage einfügen"
 
-#: src/libslic3r/PrintConfig.cpp:2002
+#: src/libslic3r/PrintConfig.cpp:2144
 msgid "Pattern"
 msgstr "Muster"
 
-#: src/libslic3r/PrintConfig.cpp:1891
+#: src/libslic3r/PrintConfig.cpp:2033
 msgid "Pattern angle"
 msgstr "Muster Winkel"
 
-#: src/libslic3r/PrintConfig.cpp:2016
+#: src/libslic3r/PrintConfig.cpp:2158
 msgid "Pattern spacing"
 msgstr "Muster Abstand"
 
-#: src/libslic3r/PrintConfig.cpp:2004
+#: src/libslic3r/PrintConfig.cpp:2146
 msgid "Pattern used to generate support material."
 msgstr "Unterstützungsmaterialmuster."
 
-#: src/slic3r/GUI/Plater.cpp:1261
+#: src/slic3r/GUI/GCodeViewer.cpp:2437 src/slic3r/GUI/GCodeViewer.cpp:2460
+#: src/slic3r/GUI/Plater.cpp:1199
 msgid "Pause"
 msgstr "Pause"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1009
+#: src/slic3r/GUI/DoubleSlider.cpp:1133
 msgid "Pause print (\"%1%\")"
 msgstr "Druck pausieren (\"%1%\")"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:934 src/slic3r/GUI/GLCanvas3D.cpp:943
-#: src/slic3r/GUI/GLCanvas3D.cpp:982
+#: src/slic3r/GUI/Tab.cpp:2209 src/libslic3r/PrintConfig.cpp:1969
+msgid "Pause Print G-code"
+msgstr "Druckpausen G-Code"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
+#: src/slic3r/GUI/GLCanvas3D.cpp:988
 msgid "Pause print or custom G-code"
 msgstr "Druckpausen oder benutzerdefinierter G-Code"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:175
+#: src/libslic3r/PrintConfig.cpp:1147
+msgid "Percent of a flow rate relative to object's normal layer height."
+msgstr "Prozent einer Flussrate relativ zur normalen Schichthöhe des Objekts."
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2233
+msgid "Percentage"
+msgstr "Prozent"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:177
 msgid "Perform cut"
 msgstr "Schnitt ausführen"
 
-#: src/libslic3r/PrintConfig.cpp:2927
+#: src/libslic3r/PrintConfig.cpp:3091
 msgid "Performance vs accuracy of calculation. Lower values may produce unwanted artifacts."
 msgstr "Leistung vs. Genauigkeit der Berechnung. Niedrigere Werte können zu unerwünschten Artefakten führen."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:237 src/libslic3r/ExtrusionEntity.cpp:310
+#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:336
 msgid "Perimeter"
 msgstr "Außenkontur"
 
-#: src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1516
 msgid "Perimeter extruder"
 msgstr "Umfang Extruder"
 
-#: src/slic3r/GUI/PresetHints.cpp:165
+#: src/slic3r/GUI/PresetHints.cpp:164
 msgid "perimeters"
 msgstr "Außenkonturen"
 
-#: src/libslic3r/PrintConfig.cpp:1399 src/libslic3r/PrintConfig.cpp:1417
-#: src/libslic3r/PrintConfig.cpp:1430 src/libslic3r/PrintConfig.cpp:1440
+#: src/libslic3r/PrintConfig.cpp:1507 src/libslic3r/PrintConfig.cpp:1525
+#: src/libslic3r/PrintConfig.cpp:1538 src/libslic3r/PrintConfig.cpp:1548
 msgid "Perimeters"
 msgstr "Konturen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:860
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:159
+msgid "Physical Printer"
+msgstr "Physischer Drucker"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:789
+#: src/slic3r/GUI/PresetComboBoxes.cpp:948
+msgid "Physical printers"
+msgstr "Physische Drucker"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1226
 #, c-format
 msgid "Pick another vendor supported by %s"
 msgstr "Wählen Sie einen anderen Hersteller, der von %s unterstützt wird"
@@ -5354,126 +6218,148 @@ msgstr "Wählen Sie einen anderen Hersteller, der von %s unterstützt wird"
 msgid "Picture sizes to be stored into a .gcode and .sl1 files"
 msgstr "Bildgrößen, die in einer.gcode und .sl1 Datei gespeichert werden sollen"
 
-#: src/libslic3r/PrintConfig.cpp:2681
+#: src/libslic3r/PrintConfig.cpp:2822
+msgid "Pillar connection mode"
+msgstr "Pfeiler-Verbindungsmodus"
+
+#: src/libslic3r/PrintConfig.cpp:2791
+msgid "Pillar diameter"
+msgstr "Pfeiler-Durchmesser"
+
+#: src/libslic3r/PrintConfig.cpp:2845
 msgid "Pillar widening factor"
 msgstr "Pfeilerverbreiterungsfaktor"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:330
+#: src/slic3r/GUI/ConfigManipulation.cpp:335
 msgid "Pinhead diameter should be smaller than the pillar diameter."
 msgstr "Der Nadelkopfdurchmesser sollte kleiner sein als der Säulendurchmesser."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:79
+#: src/libslic3r/PrintConfig.cpp:2763
+msgid "Pinhead front diameter"
+msgstr "Nadelkopf vorderer Durchmesser"
+
+#: src/libslic3r/PrintConfig.cpp:2781
+msgid "Pinhead width"
+msgstr "Nadelkopf Breite"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:110
 msgid "Place bearings in slots and resume printing"
 msgstr "Lager in Nuten einsetzen und Druck wieder aufnehmen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41
 msgid "Place on face"
 msgstr "Auf Fläche legen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:192 src/slic3r/GUI/MainFrame.cpp:204
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:190 src/slic3r/GUI/MainFrame.cpp:340
+#: src/slic3r/GUI/MainFrame.cpp:352
 msgid "Plater"
 msgstr "Druckplatte"
 
-#: src/slic3r/GUI/GUI_App.cpp:1085
+#: src/slic3r/GUI/GUI_App.cpp:1877
 msgid "Please check and fix your object list."
 msgstr "Bitte überprüfen und korrigieren Sie Ihre Objektliste."
 
-#: src/slic3r/GUI/Plater.cpp:2312 src/slic3r/GUI/Tab.cpp:2959
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2255
+#: src/slic3r/GUI/Tab.cpp:3188
 msgid "Please check your object list before preset changing."
 msgstr "Bitte überprüfen Sie Ihre Objektliste, bevor Sie die Voreinstellungen ändern."
 
-#: src/slic3r/GUI/Plater.cpp:3286
+#: src/slic3r/GUI/Plater.cpp:3089
 msgid "Please select the file to reload"
 msgstr "Bitte wählen Sie die neu zu ladende Datei aus"
 
-#: src/slic3r/GUI/AboutDialog.cpp:39 src/slic3r/GUI/AboutDialog.cpp:291
+#: src/slic3r/GUI/AboutDialog.cpp:43 src/slic3r/GUI/AboutDialog.cpp:48
+#: src/slic3r/GUI/AboutDialog.cpp:317
 msgid "Portions copyright"
 msgstr "Teile des Urheberrechts"
 
-#: src/libslic3r/PrintConfig.cpp:2400
+#: src/libslic3r/PrintConfig.cpp:2543
 msgid "Portrait"
 msgstr "Hochformat"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:215
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:457
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:223
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:505
 msgid "Position"
 msgstr "Position"
 
-#: src/slic3r/GUI/Tab.cpp:2367
+#: src/slic3r/GUI/Tab.cpp:2536
 msgid "Position (for multi-extruder printers)"
 msgstr "Position (für Multi-Extruder-Drucker)"
 
-#: src/libslic3r/PrintConfig.cpp:1623
+#: src/libslic3r/PrintConfig.cpp:1731
 msgid "Position of perimeters starting points."
 msgstr "Position des Startpunktes des Umfangs."
 
-#: src/libslic3r/PrintConfig.cpp:2224
+#: src/libslic3r/PrintConfig.cpp:2367
 msgid "Position X"
 msgstr "X-Position"
 
-#: src/libslic3r/PrintConfig.cpp:2231
+#: src/libslic3r/PrintConfig.cpp:2374
 msgid "Position Y"
 msgstr "Y-Position"
 
-#: src/slic3r/GUI/Tab.cpp:1245 src/libslic3r/PrintConfig.cpp:1453
+#: src/slic3r/GUI/Tab.cpp:1575 src/libslic3r/PrintConfig.cpp:1561
 msgid "Post-processing scripts"
 msgstr "Nachbearbeitungs Script"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Pre&view"
 msgstr "&Vorschau"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:149 src/slic3r/GUI/Preferences.cpp:10
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 src/slic3r/GUI/Preferences.cpp:12
 msgid "Preferences"
 msgstr "Einstellungen"
 
-#: src/libslic3r/PrintConfig.cpp:1641
+#: src/libslic3r/PrintConfig.cpp:1749
 msgid "Preferred direction of the seam"
 msgstr "Bevorzugte Richtung für die Naht"
 
-#: src/libslic3r/PrintConfig.cpp:1652
+#: src/libslic3r/PrintConfig.cpp:1760
 msgid "Preferred direction of the seam - jitter"
 msgstr "Bevorzugte Zitterrichtung für die Naht"
 
-#: src/libslic3r/PrintObject.cpp:255
+#: src/libslic3r/PrintObject.cpp:261
 msgid "Preparing infill"
 msgstr "Infill wird vorbereitet"
 
-#: src/slic3r/GUI/Tab.cpp:2920
-#, c-format
-msgid "Preset (%s)"
-msgstr "Voreinstellung (%s)"
+#: src/slic3r/GUI/GUI_App.cpp:855
+msgid "Preparing settings tabs"
+msgstr "Vorbereiten der Einstellungs-Registerkarten"
 
-#: src/slic3r/GUI/Tab.cpp:3082
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1009
+msgid "Preset \"%1%\" has the following unsaved changes:"
+msgstr "Die \"%1%\" Voreinstellung hat die folgenden ungespeicherten Änderungen:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1014
+msgid "Preset \"%1%\" is not compatible with the new print profile and it has the following unsaved changes:"
+msgstr "Die \"%1%\" Voreinstellung ist mit dem neuen Druckprofil nicht kompatibel und weist die folgenden ungespeicherten Änderungen auf:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1013
+msgid "Preset \"%1%\" is not compatible with the new printer profile and it has the following unsaved changes:"
+msgstr "Die \"%1%\" Voreinstellung ist mit dem neuen Druckerprofil nicht kompatibel und weist die folgenden ungespeicherten Änderungen auf:"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:136
+msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
+msgstr "Die Voreinstellung mit dem Namen \"%1%\" existiert bereits und ist mit dem ausgewählten Drucker nicht kompatibel."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:148
 msgid "Preset with name \"%1%\" already exists."
 msgstr "Eine Voreinstellung mit dem Namen \"%1%\" existiert bereits."
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/SavePresetDialog.cpp:219
 msgctxt "PresetName"
 msgid "Copy"
 msgstr "Kopieren"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
 msgid "Press to activate deselection rectangle"
 msgstr "Drücken um das Abwahlrechteck zu aktivieren"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
-msgid "Press to activate one direction scaling in Gizmo scale"
-msgstr "Drücken um Eine-Richtungs-Skalierung im Skalierungsgizmo zu aktivieren"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:156
 msgid "Press to activate selection rectangle"
 msgstr "Drücken um das Auswahlrechteck zu aktivieren"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
-msgid ""
-"Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\n"
-"selected objects around their own center"
-msgstr ""
-"Zum Skalieren drücken (in Gizmo-Skalierung) oder drehen (in Gizmo-Rotation)\n"
-"ausgewählter Objekte um ihr eigenes Zentrum herum"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:155
 msgid ""
 "Press to select multiple objects\n"
 "or move multiple objects with mouse"
@@ -5481,164 +6367,187 @@ msgstr ""
 "Drücken zum Auswählen des mehrteiligen Objekts \n"
 "oder Bewegen des mehrteiligen Objekts mit der Maus"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
-#, no-c-format
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
 msgid ""
-"Press to snap by 5% in Gizmo scale\n"
-"or to snap by 1mm in Gizmo move"
-msgstr ""
-"Drücken um mit 5% bei der Gizmo Skalierung zu rasten\n"
-"oder mit 1 mm bei der Gizmo Bewegung"
+"Press to speed up 5 times while moving thumb\n"
+"with arrow keys or mouse wheel"
+msgstr "Drücken, um 5 Mal schneller zu werden, während der Regler mit Pfeiltasten oder Mausrad bewegt wird"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4105
-#: src/slic3r/GUI/Tab.cpp:2390
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 src/slic3r/GUI/Plater.cpp:4052
+#: src/slic3r/GUI/Tab.cpp:2559
 msgid "Preview"
 msgstr "Vorschau"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
 msgid "Preview hollowed and drilled model"
 msgstr "Vorschau des ausgehöhlten und aufgebohrten Modells"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid "Previously sliced file ("
 msgstr "Vorher geslicete Datei ("
 
-#: src/libslic3r/PrintConfig.cpp:1851
+#: src/libslic3r/PrintConfig.cpp:1993
 msgid "Prime all printing extruders"
 msgstr "Alle Druckextruder vorfüllen"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1521
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/libslic3r/Preset.cpp:1300
 msgid "print"
 msgstr "Druck"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/GCodeViewer.cpp:2436 src/slic3r/GUI/GCodeViewer.cpp:2451
+msgid "Print"
+msgstr "Druck"
+
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Print &Host Upload Queue"
 msgstr "Druck&host Warteschlange"
 
-#: src/libslic3r/PrintConfig.cpp:471
+#: src/libslic3r/PrintConfig.cpp:507
 msgid "Print contour perimeters from the outermost one to the innermost one instead of the default inverse order."
 msgstr "Drucken Sie Konturumfänge von der äußersten zur innersten Kontur anstatt der standardmäßigen umgekehrten Reihenfolge."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Print Diameters"
 msgstr "Druckdurchmesser"
 
-#: src/slic3r/GUI/Tab.cpp:1944 src/slic3r/GUI/Tab.cpp:2123
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:209 src/slic3r/GUI/Tab.cpp:2024
 msgid "Print Host upload"
 msgstr "Hochladen zum Druckhost"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:142
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
 #: src/slic3r/GUI/PrintHostDialogs.cpp:136
 msgid "Print host upload queue"
 msgstr "Druckhost Warteschlange"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:970
+#: src/slic3r/GUI/DoubleSlider.cpp:1093
 msgid "Print mode"
 msgstr "Druckmodus"
 
-#: src/slic3r/GUI/Tab.hpp:328 src/slic3r/GUI/Tab.hpp:431
+#: src/slic3r/GUI/GCodeViewer.cpp:2579 src/slic3r/GUI/GUI_Preview.cpp:1476
+msgid "Print pauses"
+msgstr "Druckpausen"
+
+#: src/slic3r/GUI/Tab.hpp:378 src/slic3r/GUI/Tab.hpp:502
 msgid "Print Settings"
 msgstr "Druckeinstellungen"
 
-#: src/slic3r/GUI/Plater.cpp:815
+#: src/slic3r/GUI/Plater.cpp:690
 msgid "Print settings"
 msgstr "Druckeinstellungen"
 
-#: src/slic3r/GUI/Tab.cpp:1478
+#: src/slic3r/GUI/GLCanvas3D.cpp:4303 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Print Settings Tab"
+msgstr "Druckeinstellungsreiter"
+
+#: src/slic3r/GUI/Tab.cpp:1824
 msgid "Print speed override"
 msgstr "Korrektur der Druckgeschwindigkeit"
 
-#: src/libslic3r/GCode.cpp:638
+#: src/libslic3r/GCode.cpp:623
 msgid "Print z"
 msgstr "Druck z"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Print&er Settings Tab"
 msgstr "Druck&ereinstellungen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1621
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1750
 msgid "Printable"
 msgstr "Druckbar"
 
-#: src/slic3r/GUI/Plater.cpp:819
+#: src/slic3r/GUI/Plater.cpp:694
 msgid "Printer"
 msgstr "Drucker"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1525
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/libslic3r/Preset.cpp:1304
 msgid "printer"
 msgstr "Drucker"
 
-#: src/libslic3r/PrintConfig.cpp:2439 src/libslic3r/PrintConfig.cpp:2440
+#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2583
 msgid "Printer absolute correction"
 msgstr "Drucker absolute Korrektur"
 
-#: src/libslic3r/PrintConfig.cpp:2456 src/libslic3r/PrintConfig.cpp:2457
+#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2600
 msgid "Printer gamma correction"
 msgstr "Drucker Gammakorrektur"
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1294
 msgid "printer model"
 msgstr "Druckermodell"
 
-#: src/libslic3r/PrintConfig.cpp:1472
+#: src/libslic3r/PrintConfig.cpp:1580
 msgid "Printer notes"
 msgstr "Drucker Anmerkungen"
 
-#: src/libslic3r/PrintConfig.cpp:2431 src/libslic3r/PrintConfig.cpp:2432
-#: src/libslic3r/PrintConfig.cpp:2433
+#: src/libslic3r/PrintConfig.cpp:144
+msgid "Printer preset name"
+msgstr "Name der Druckervoreinstellung"
+
+#: src/libslic3r/PrintConfig.cpp:2574 src/libslic3r/PrintConfig.cpp:2575
+#: src/libslic3r/PrintConfig.cpp:2576
 msgid "Printer scaling correction"
 msgstr "Drucker skalierte Korrektur"
 
-#: src/slic3r/GUI/Tab.hpp:391
+#: src/slic3r/GUI/Tab.hpp:453
 msgid "Printer Settings"
 msgstr "Druckereinstellungen"
 
+#: src/slic3r/GUI/GLCanvas3D.cpp:4305 src/slic3r/GUI/GLCanvas3D.cpp:4941
+msgid "Printer Settings Tab"
+msgstr "Druckereinstellungsreiter"
+
 #: src/libslic3r/PrintConfig.cpp:43 src/libslic3r/PrintConfig.cpp:44
 msgid "Printer technology"
 msgstr "Druckertechnologie"
 
-#: src/libslic3r/PrintConfig.cpp:1466
+#: src/libslic3r/PrintConfig.cpp:1574
 msgid "Printer type"
 msgstr "Druckertyp"
 
-#: src/libslic3r/PrintConfig.cpp:1487
+#: src/libslic3r/PrintConfig.cpp:1595
 msgid "Printer variant"
 msgstr "Druckervariante"
 
-#: src/libslic3r/PrintConfig.cpp:1481
+#: src/libslic3r/PrintConfig.cpp:1589
 msgid "Printer vendor"
 msgstr "Druckerhersteller"
 
-#: src/libslic3r/Print.cpp:1388
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:476
+msgid "Printer with name \"%1%\" already exists."
+msgstr "Drucker mit dem Namen \"%1%\" existiert bereits."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:587
+msgid "Printer:"
+msgstr "Drucker:"
+
+#: src/libslic3r/Print.cpp:1414
 msgid "Printing with multiple extruders of differing nozzle diameters. If support is to be printed with the current extruder (support_material_extruder == 0 or support_material_interface_extruder == 0), all nozzles have to be of the same diameter."
 msgstr "Der Druck erfolgt mit mehreren Extrudern mit unterschiedlichen Düsendurchmessern. Falls Stützen mit dem aktuellen Extruder gedruckt werden sollen (support_material_extruder == 0 oder support_material_interface_extruder == 0), müssen alle Druckdüsen den gleichen Durchmesser aufweisen."
 
 #. TRN "Processing input_file_basename"
-#: src/slic3r/GUI/MainFrame.cpp:849
+#: src/slic3r/GUI/MainFrame.cpp:1550
 #, c-format
 msgid "Processing %s"
 msgstr "Berechne %s"
 
-#: src/slic3r/GUI/Plater.cpp:2283
-#, c-format
-msgid "Processing input file %s"
-msgstr "Eingabe Datei %s wird verarbeitet"
-
-#: src/libslic3r/PrintObject.cpp:108
+#: src/libslic3r/PrintObject.cpp:114
 msgid "Processing triangulated mesh"
 msgstr "Verarbeitung der dreieckigen Netze"
 
-#: src/slic3r/GUI/Tab.cpp:1259 src/slic3r/GUI/Tab.cpp:1549
-#: src/slic3r/GUI/Tab.cpp:2020 src/slic3r/GUI/Tab.cpp:2136
-#: src/slic3r/GUI/Tab.cpp:3544 src/slic3r/GUI/Tab.cpp:3672
+#: src/slic3r/GUI/Tab.cpp:1589 src/slic3r/GUI/Tab.cpp:1896
+#: src/slic3r/GUI/Tab.cpp:2229 src/slic3r/GUI/Tab.cpp:2305
+#: src/slic3r/GUI/Tab.cpp:3960 src/slic3r/GUI/Tab.cpp:4091
 msgid "Profile dependencies"
 msgstr "Profil Abhängigkeiten"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:566
+#: src/slic3r/GUI/ConfigWizard.cpp:590
 msgid "Profile:"
 msgstr "Profil:"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:150
+#: src/slic3r/GUI/PrintHostDialogs.cpp:148
 msgid "Progress"
 msgstr "Fortschritt"
 
@@ -5646,23 +6555,35 @@ msgstr "Fortschritt"
 msgid "Progress:"
 msgstr "Fortschritt:"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Prusa 3D &Drivers"
 msgstr "Prusa 3&D Treiber"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1995
+#: src/slic3r/GUI/ConfigWizard.cpp:2506
 msgid "Prusa FFF Technology Printers"
 msgstr "Prusa FFF Technologie Drucker"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1998
+#: src/slic3r/GUI/ConfigWizard.cpp:2509
 msgid "Prusa MSLA Technology Printers"
 msgstr "Prusa MSLA Technologie Drucker"
 
-#: src/slic3r/GUI/AboutDialog.cpp:260
+#: src/slic3r/Utils/Http.cpp:78
+msgid "PrusaSlicer detected system SSL certificate store in: %1%"
+msgstr "PrusaSlicer erkannte System-SSL-Zertifikatspeicher in: %1%"
+
+#: src/slic3r/GUI/GUI_Init.cpp:85 src/slic3r/GUI/GUI_Init.cpp:88
+msgid "PrusaSlicer GUI initialization failed"
+msgstr "PrusaSlicer GUI-Initialisierung fehlgeschlagen"
+
+#: src/slic3r/GUI/AboutDialog.cpp:285
 msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
 msgstr "PrusaSlicer basiert auf Slic3r von Alessandro Ranellucci und der RepRap Community."
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:284
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:525
+msgid "PrusaSlicer is closing: Unsaved Changes"
+msgstr "PrusaSlicer wird geschlossen: Nicht gespeicherte Änderungen"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:259
 #, c-format
 msgid ""
 "PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n"
@@ -5673,7 +6594,11 @@ msgstr "PrusaSlicer benötigt einen OpenGL 2.0-fähigen Grafiktreiber, um korrek
 msgid "PrusaSlicer version"
 msgstr "PrusaSlicer Version"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:815
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:662
+msgid "PrusaSlicer will remember your action."
+msgstr "PrusaSlicer wird sich an Ihre Aktion erinnern."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1174
 msgid ""
 "PrusaSlicer's user interfaces comes in three variants:\n"
 "Simple, Advanced, and Expert.\n"
@@ -5683,64 +6608,80 @@ msgstr ""
 "Einfach, Fortgeschritten und Experte.\n"
 "Der einfache Modus zeigt nur die am häufigsten verwendeten Einstellungen, die für den regulären 3D-Druck relevant sind. Die beiden anderen bieten eine immer anspruchsvollere Feinabstimmung, sie sind für fortgeschrittene bzw. erfahrene Anwender geeignet."
 
-#: src/libslic3r/PrintConfig.cpp:2254
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:668
+msgid "PrusaSlicer: Don't ask me again"
+msgstr "PrusaSlicer: Fragen Sie mich nicht noch einmal"
+
+#: src/libslic3r/PrintConfig.cpp:2397
 msgid "Purging after toolchange will done inside this object's infills. This lowers the amount of waste but may result in longer print time  due to additional travel moves."
 msgstr "Das Reinigen nach dem Werkzeugwechsel erfolgt innerhalb der Füllungen dieses Objekts. Dies reduziert die Abfallquote, kann aber aufgrund zusätzlicher Verfahrwege zu einer längeren Druckzeit führen."
 
-#: src/slic3r/GUI/Plater.cpp:544
+#: src/slic3r/GUI/Plater.cpp:410
 msgid "Purging volumes"
 msgstr "Reinigungsvolumen"
 
-#: src/libslic3r/PrintConfig.cpp:2207
+#: src/libslic3r/PrintConfig.cpp:2350
 msgid "Purging volumes - load/unload volumes"
 msgstr "Reinigungsvolumen - Lade-/Entladevolumen"
 
-#: src/libslic3r/PrintConfig.cpp:2214
+#: src/libslic3r/PrintConfig.cpp:2357
 msgid "Purging volumes - matrix"
 msgstr "Reinigungsvolumen - Matrix"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:1201
+msgid "Purpose of Machine Limits"
+msgstr "Zweck der Maschinengrenzen"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
 msgid "Quality"
 msgstr "Qualität"
 
-#: src/slic3r/GUI/Tab.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:1402
 msgid "Quality (slower slicing)"
 msgstr "Qualität (langsameres Slicen)"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:273
+#: src/slic3r/GUI/GLCanvas3D.cpp:260
 msgid "Quality / Speed"
 msgstr "Qualität / Geschwindigkeit"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1182
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1530
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1536
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1849
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:61
+msgid "Quick"
+msgstr "Schnell"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1306
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1661
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1667
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2008
 #, c-format
 msgid "Quick Add Settings (%s)"
 msgstr "Schnelles Einstellen (%s)"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Quick Slice"
 msgstr "Quick Slice"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Quick Slice and Save As"
 msgstr "Quick Slice und Speichern unter"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
 #, c-format
 msgid "Quit %s"
 msgstr "%s verlassen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:294 src/libslic3r/PrintConfig.cpp:511
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Quit, I will move my data now"
+msgstr "Beenden, ich werde meine Daten jetzt verschieben"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:280 src/libslic3r/PrintConfig.cpp:547
 msgid "Radius"
 msgstr "Radius"
 
-#: src/slic3r/GUI/Tab.cpp:1127
+#: src/slic3r/GUI/Tab.cpp:1456
 msgid "Raft"
 msgstr "Raft"
 
-#: src/libslic3r/PrintConfig.cpp:1501
+#: src/libslic3r/PrintConfig.cpp:1609
 msgid "Raft layers"
 msgstr "Raftschichten"
 
@@ -5766,27 +6707,27 @@ msgstr "Abstand der Rammlinien"
 msgid "Ramming line width"
 msgstr "Breite der Rammlinie"
 
-#: src/libslic3r/PrintConfig.cpp:694
+#: src/libslic3r/PrintConfig.cpp:730
 msgid "Ramming parameters"
 msgstr "Rammparameter"
 
-#: src/slic3r/GUI/Tab.cpp:1505
+#: src/slic3r/GUI/Tab.cpp:1850
 msgid "Ramming settings"
 msgstr "Einstellungen für das Rammen"
 
-#: src/libslic3r/PrintConfig.cpp:1629
+#: src/libslic3r/PrintConfig.cpp:1737
 msgid "Random"
 msgstr "Zufällig"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 msgid "Range"
 msgstr "Bereich"
 
-#: src/libslic3r/SLAPrintSteps.cpp:65
+#: src/libslic3r/SLAPrintSteps.cpp:66
 msgid "Rasterizing layers"
 msgstr "Schichten werden gerastert"
 
-#: src/slic3r/GUI/MainFrame.cpp:596
+#: src/slic3r/GUI/MainFrame.cpp:1202
 msgid "Re&load from disk"
 msgstr "Erneutes &Laden von der Festplatte"
 
@@ -5798,210 +6739,243 @@ msgstr "Neu konfigurieren"
 msgid "Ready"
 msgstr "Fertig"
 
-#: src/slic3r/GUI/Plater.cpp:3115
+#: src/slic3r/GUI/Plater.cpp:2915
 msgid "Ready to slice"
 msgstr "Bereit zum Slicen"
 
-#: src/slic3r/GUI/MainFrame.cpp:669 src/libslic3r/PrintConfig.cpp:1632
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
+#: src/libslic3r/PrintConfig.cpp:1740
 msgid "Rear"
 msgstr "Hinten"
 
-#: src/slic3r/GUI/MainFrame.cpp:669
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
 msgid "Rear View"
 msgstr "Ansicht von Hinten"
 
-#: src/slic3r/GUI/MainFrame.cpp:413
+#: src/slic3r/GUI/MainFrame.cpp:994
 msgid "Recent projects"
 msgstr "L&etzte Projekte"
 
-#: src/slic3r/GUI/PresetHints.cpp:263
+#: src/slic3r/GUI/PresetHints.cpp:262
 #, c-format
 msgid "Recommended object thin wall thickness for layer height %.2f and"
 msgstr "Empfohlene Stärke der dünnen Wände des Objekts für die Schichthöhe %.2f und"
 
-#: src/slic3r/GUI/PresetHints.cpp:274
+#: src/slic3r/GUI/PresetHints.cpp:273
 msgid "Recommended object thin wall thickness: Not available due to excessively small extrusion width."
 msgstr "Empfohlene Stärke der dünnen Wände des Objekts: Nicht verfügbar wegen extrem geringer Extrusionsbreite."
 
-#: src/slic3r/GUI/PresetHints.cpp:247
+#: src/slic3r/GUI/PresetHints.cpp:246
 msgid "Recommended object thin wall thickness: Not available due to invalid layer height."
 msgstr "Empfohlene Stärke der dünnen Wände des Objekts: Nicht verfügbar wegen unzulässiger Schichthöhe."
 
-#: src/slic3r/GUI/GUI_App.cpp:450 src/slic3r/GUI/GUI_App.cpp:459
+#: src/slic3r/GUI/GUI_App.cpp:1102 src/slic3r/GUI/GUI_App.cpp:1115
 msgid "Recreating"
 msgstr "Neu Erzeugen"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:73
+#: src/slic3r/GUI/BedShapeDialog.cpp:141
 msgid "Rectangular"
 msgstr "Rechteckig"
 
-#: src/libslic3r/PrintConfig.cpp:425 src/libslic3r/PrintConfig.cpp:843
-#: src/libslic3r/PrintConfig.cpp:2009
+#: src/libslic3r/PrintConfig.cpp:460 src/libslic3r/PrintConfig.cpp:881
+#: src/libslic3r/PrintConfig.cpp:2151
 msgid "Rectilinear"
 msgstr "Geradlinig"
 
-#: src/libslic3r/PrintConfig.cpp:2010
+#: src/libslic3r/PrintConfig.cpp:2152
 msgid "Rectilinear grid"
 msgstr "Rechtwinkliges Gitter"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4657 src/slic3r/GUI/KBShortcutsDialog.cpp:131
-#: src/slic3r/GUI/MainFrame.cpp:584
+#: src/slic3r/GUI/GLCanvas3D.cpp:5067 src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/MainFrame.cpp:1190
 msgid "Redo"
 msgstr "Redo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Redo %1$d Action"
 msgid_plural "Redo %1$d Actions"
 msgstr[0] "Redo %1$d Aktion"
 msgstr[1] "Redo %1$d Aktionen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Redo History"
 msgstr "Redo Verlauf"
 
-#: src/slic3r/GUI/Tab.cpp:1098
+#: src/slic3r/GUI/Tab.cpp:1426
 msgid "Reducing printing time"
 msgstr "Druckzeit wird verkürzt"
 
-#: src/slic3r/GUI/Plater.cpp:3452
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
+msgid "Refresh Printers"
+msgstr "Drucker aktualisieren"
+
+#: src/libslic3r/PrintConfig.cpp:145
+msgid "Related printer preset name"
+msgstr "Zugehöriger Name der Druckervoreinstellung"
+
+#: src/slic3r/GUI/Plater.cpp:3257
 msgid "Reload all from disk"
 msgstr "Alles von der Festplatte neu laden"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:798 src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3225
-#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/ConfigWizard.cpp:1157 src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3028
+#: src/slic3r/GUI/Plater.cpp:3852 src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload from disk"
 msgstr "Neuladen von Festplatte"
 
-#: src/slic3r/GUI/Plater.cpp:3339
+#: src/slic3r/GUI/Plater.cpp:3142
 msgid "Reload from:"
 msgstr "Neuladen von:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:129
 msgid "Reload plater from disk"
 msgstr "Druckplatte neu von der Festplatte laden"
 
-#: src/slic3r/GUI/MainFrame.cpp:597
+#: src/slic3r/GUI/MainFrame.cpp:1203
 msgid "Reload the plater from disk"
 msgstr "Druckplatte neu von der Festplatte laden"
 
-#: src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload the selected object from disk"
 msgstr "Das ausgewählte Objekt von der Festplatte neu laden"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3934
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3852
 msgid "Reload the selected volumes from disk"
 msgstr "Die ausgewählten Volumen von der Festplatte neu laden"
 
-#: src/slic3r/GUI/Preferences.cpp:39
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Remaining time"
+msgstr "Restzeit"
+
+#: src/slic3r/GUI/GUI_App.cpp:720 src/slic3r/GUI/UnsavedChangesDialog.cpp:653
+msgid "Remember my choice"
+msgstr "Auswahl merken"
+
+#: src/slic3r/GUI/Preferences.cpp:52
 msgid "Remember output directory"
 msgstr "Ausgabeverzeichnis merken"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/MainFrame.cpp:166
+msgid "Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases"
+msgstr "Denken Sie daran, nach Updates zu suchen unter https://github.com/prusa3d/PrusaSlicer/releases"
+
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "remove"
 msgstr "Entfernen"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:190 src/slic3r/GUI/BedShapeDialog.cpp:269
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/BedShapeDialog.cpp:413
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Remove"
 msgstr "Entfernen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
 msgid "Remove all holes"
 msgstr "Alle Löcher entfernen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
 msgid "Remove all points"
 msgstr "Alle Punkte entfernen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:246
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:35
+msgid "Remove all selection"
+msgstr "Gesamte Auswahl entfernen"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:239
 msgid "Remove detail"
 msgstr "Detail entfernen"
 
-#: src/slic3r/GUI/Plater.cpp:879
-msgid "Remove device"
-msgstr "Gerät entfernen"
-
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:182
 msgid "Remove extruder from sequence"
 msgstr "Extruder aus der Sequenz entfernen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4537 src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/GLCanvas3D.cpp:4903 src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove instance"
 msgstr "Kopie entfernen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
 msgid "Remove Instance of the selected object"
 msgstr "Entfernt Kopie des gewählten Objekts"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:153
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:161
 msgid "Remove layer range"
 msgstr "Schichtbereich entfernen"
 
-#: src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove one instance of the selected object"
 msgstr "Entferne eine Kopie des gewählten Objekts"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:95
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:98
 msgid "Remove parameter"
 msgstr "Parameter entfernen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Remove point"
 msgstr "Punkt entfernen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Remove point from selection"
 msgstr "Punkt von Auswahl entfernen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
 msgid "Remove selected holes"
 msgstr "Ausgewählte Löcher entfernen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1371
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218
 msgid "Remove selected points"
 msgstr "Ausgewählte Punkte entfernen"
 
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:34
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:368
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:378
+msgid "Remove selection"
+msgstr "Auswahl entfernen"
+
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
 msgid "Remove the selected object"
 msgstr "Ausgewähltes Objekt entfernen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:453
+#: src/slic3r/GUI/ConfigWizard.cpp:456
 msgid "Remove user profiles (a snapshot will be taken beforehand)"
 msgstr "Benutzerprofile entfernen (eine Momentaufnahme wird vorab erstellt)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1765
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Object"
 msgstr "Objekt umbenennen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Sub-object"
 msgstr "Subobjekt umbenennen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Renaming"
 msgstr "Am Umbenennen"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:115
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:150
 msgid "Renaming of the G-code after copying to the selected destination folder has failed. Current path is %1%.tmp. Please try exporting again."
 msgstr "Das Umbenennen des G-Codes nach dem Kopieren in den ausgewählten Zielordner ist fehlgeschlagen. Der aktuelle Pfad ist %1%.tmp. Bitte versuchen Sie erneut zu exportieren."
 
-#: src/libslic3r/PrintConfig.cpp:3515
+#: src/slic3r/GUI/Preferences.cpp:255
+msgid "Render"
+msgstr "Render"
+
+#: src/libslic3r/PrintConfig.cpp:3720
 msgid "Render with a software renderer"
 msgstr "Rendern mit einem Software-Renderer"
 
-#: src/libslic3r/PrintConfig.cpp:3516
+#: src/libslic3r/PrintConfig.cpp:3721
 msgid "Render with a software renderer. The bundled MESA software renderer is loaded instead of the default OpenGL driver."
 msgstr "Rendern mit einem Software-Renderer. Der mitgelieferte MESA-Software-Renderer wird anstelle des standardmäßigen OpenGL-Treibers geladen."
 
-#: src/slic3r/GUI/MainFrame.cpp:911 src/libslic3r/PrintConfig.cpp:3447
+#: src/slic3r/GUI/MainFrame.cpp:1612 src/libslic3r/PrintConfig.cpp:3646
 msgid "Repair"
 msgstr "Reparieren"
 
@@ -6025,38 +6999,38 @@ msgstr "Die reparierte 3MF Datei enhält keine Volumen"
 msgid "Repairing model by the Netfabb service"
 msgstr "Reparieren des Modells durch den Netfabb-Dienst"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat last quick slice"
 msgstr "Letzten Quick Slice wiederholen"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat Last Quick Slice"
 msgstr "Letzten Quick Slice wiederholen"
 
-#: src/slic3r/GUI/Tab.cpp:3083
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:477
 msgid "Replace?"
 msgstr "Ersetzen?"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
 msgid "Report an I&ssue"
 msgstr "Ein &Problem melden"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
 #, c-format
 msgid "Report an issue on %s"
 msgstr "Einen Problem melden über %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:713
+#: src/slic3r/Utils/PresetUpdater.cpp:733
 #, c-format
 msgid "requires max. %s"
 msgstr "benötigt max. %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:710
+#: src/slic3r/Utils/PresetUpdater.cpp:730
 #, c-format
 msgid "requires min. %s"
 msgstr "benötigt min. %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:705
+#: src/slic3r/Utils/PresetUpdater.cpp:726
 #, c-format
 msgid "requires min. %s and max. %s"
 msgstr "benötigt min. %s und max. %s"
@@ -6065,270 +7039,300 @@ msgstr "benötigt min. %s und max. %s"
 msgid "Rescan"
 msgstr "Rescan"
 
-#: src/slic3r/GUI/Tab.cpp:1906
-msgid "Rescan serial ports"
-msgstr "Serielle Schnittstellen nochmals abfragen"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:313
+#: src/slic3r/GUI/GLCanvas3D.cpp:299
 msgid "Reset"
 msgstr "Rücksetzen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1373
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220
 msgid "Reset clipping plane"
 msgstr "Beschnittebene zurücksetzen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:59
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:26
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
 msgid "Reset direction"
 msgstr "Richtung zurücksetzen"
 
-#: src/slic3r/GUI/Plater.cpp:2723
+#: src/slic3r/GUI/Plater.cpp:2684
 msgid "Reset Project"
 msgstr "Projekt zurücksetzen"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:372
 msgid "Reset rotation"
 msgstr "Rotation zurücksetzen"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:394
 msgid "Reset Rotation"
 msgstr "Rotation zurücksetzen"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:397
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:399
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:407
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409
 msgid "Reset scale"
 msgstr "Skalierung zurücksetzen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:252
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:136
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:118
+msgid "Reset selection"
+msgstr "Auswahl zurücksetzen"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:243
 msgid "Reset to base"
 msgstr "Zurücksetzen auf Basis"
 
-#: src/slic3r/GUI/Tab.cpp:2394
+#: src/slic3r/GUI/Tab.cpp:2564
 msgid "Reset to Filament Color"
 msgstr "Zurücksetzen auf Filamentfarbe"
 
-#: src/libslic3r/PrintConfig.cpp:1511
+#: src/libslic3r/PrintConfig.cpp:1619
 msgid "Resolution"
 msgstr "Auflösung"
 
-#: src/libslic3r/PrintConfig.cpp:1529
+#: src/libslic3r/PrintConfig.cpp:1637
 msgid "Retract amount before wipe"
 msgstr "Einzugslänge vor einer Reinigung"
 
-#: src/libslic3r/PrintConfig.cpp:1537
+#: src/libslic3r/PrintConfig.cpp:1645
 msgid "Retract on layer change"
 msgstr "Bei Schichtwechsel einziehen"
 
-#: src/slic3r/GUI/Tab.cpp:1324 src/slic3r/GUI/Tab.cpp:1383
-#: src/slic3r/GUI/Tab.cpp:2370
+#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/Tab.cpp:1670
+#: src/slic3r/GUI/Tab.cpp:2539
 msgid "Retraction"
 msgstr "Einzug"
 
-#: src/libslic3r/PrintConfig.cpp:1523
+#: src/libslic3r/PrintConfig.cpp:1631
 msgid "Retraction is not triggered when travel moves are shorter than this length."
 msgstr "Der Einzug wird nicht ausgelöst, wenn die Fahrbewegungen kürzer als diese Länge sind."
 
-#: src/libslic3r/PrintConfig.cpp:1544
+#: src/libslic3r/PrintConfig.cpp:1652
 msgid "Retraction Length"
 msgstr "Einzugslänge"
 
-#: src/libslic3r/PrintConfig.cpp:1552
+#: src/libslic3r/PrintConfig.cpp:1660
 msgid "Retraction Length (Toolchange)"
 msgstr "Einzugslänge (Werkzeugwechsel)"
 
-#: src/libslic3r/PrintConfig.cpp:1604 src/libslic3r/PrintConfig.cpp:1605
+#: src/libslic3r/PrintConfig.cpp:1712 src/libslic3r/PrintConfig.cpp:1713
 msgid "Retraction Speed"
 msgstr "Einzugsgeschwindigkeit"
 
-#: src/slic3r/GUI/Tab.cpp:2386
+#: src/slic3r/GUI/Tab.cpp:2555
 msgid "Retraction when tool is disabled (advanced settings for multi-extruder setups)"
 msgstr "Einzug, wenn das Werkzeug deaktiviert ist (weiterführende Einstellungen für Multi-Extruder-Einrichtungen)"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:254
+#: src/slic3r/GUI/GCodeViewer.cpp:2528 src/slic3r/GUI/GUI_Preview.cpp:336
+#: src/slic3r/GUI/GUI_Preview.cpp:1472
 msgid "Retractions"
 msgstr "Einzüge"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/Preferences.cpp:198
+msgid "Reverse direction of zoom with mouse wheel"
+msgstr "Umkehrung der Zoom-Richtung des Mausrads"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4886
+msgid "Revert conversion from imperial units"
+msgstr "Umrechnung von imperialen Einheiten rückgängig machen"
+
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right"
 msgstr "Rechts"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:402
+#: src/slic3r/GUI/GUI_ObjectList.cpp:449
 msgid "Right button click the icon to change the object printable property"
 msgstr "Klicken Sie mit der rechten Maustaste auf das Symbol, um die Druckbar-Eigenschaft des Objekts zu ändern"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:396
+#: src/slic3r/GUI/GUI_ObjectList.cpp:443
 msgid "Right button click the icon to change the object settings"
 msgstr "Klicken Sie mit der rechten Maustaste auf das Symbol, um die Objekteinstellungen zu ändern"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:359
+#: src/slic3r/GUI/GUI_ObjectList.cpp:406
 msgid "Right button click the icon to fix STL through Netfabb"
 msgstr "Klicken Sie mit der rechten Maustaste auf das Symbol, um die STL über Netfabb zu reparieren"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Right click"
 msgstr "Rechter Mausklick"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:243
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:31
+msgid "Right mouse button"
+msgstr "Rechte Maustaste"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:237
 msgid "Right mouse button:"
 msgstr "Rechte Maustaste:"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right View"
 msgstr "Ansicht von rechts"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:480
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:499
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:517
-#: src/libslic3r/PrintConfig.cpp:3451
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:513
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:527
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:546
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562
+#: src/libslic3r/PrintConfig.cpp:3650
 msgid "Rotate"
 msgstr "Drehen"
 
-#: src/libslic3r/PrintConfig.cpp:3456
+#: src/libslic3r/PrintConfig.cpp:3655
 msgid "Rotate around X"
 msgstr "Rotiere um X"
 
-#: src/libslic3r/PrintConfig.cpp:3461
+#: src/libslic3r/PrintConfig.cpp:3660
 msgid "Rotate around Y"
 msgstr "Rotiere um Y"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:172
 msgid "Rotate lower part upwards"
 msgstr "Unteren Teil umdrehen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Rotate selection 45 degrees CCW"
 msgstr "Auswahl um 45 Grad drehen gegen UZS"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Rotate selection 45 degrees CW"
 msgstr "Auswahl um 45 Grad drehen im UZS"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458
-#: src/slic3r/GUI/Mouse3DController.cpp:304
-#: src/slic3r/GUI/Mouse3DController.cpp:321
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:210
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:224
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:506
+#: src/slic3r/GUI/Mouse3DController.cpp:288
+#: src/slic3r/GUI/Mouse3DController.cpp:309
 msgid "Rotation"
 msgstr "Rotation"
 
-#: src/libslic3r/PrintConfig.cpp:3457
+#: src/libslic3r/PrintConfig.cpp:3656
 msgid "Rotation angle around the X axis in degrees."
 msgstr "Rotationswinkel um die X-Achse in Grad."
 
-#: src/libslic3r/PrintConfig.cpp:3462
+#: src/libslic3r/PrintConfig.cpp:3661
 msgid "Rotation angle around the Y axis in degrees."
 msgstr "Rotationswinkel um die Y-Achse in Grad."
 
-#: src/libslic3r/PrintConfig.cpp:3452
+#: src/libslic3r/PrintConfig.cpp:3651
 msgid "Rotation angle around the Z axis in degrees."
 msgstr "Rotationswinkel um die Z-Achse in Grad."
 
-#: src/slic3r/GUI/GUI_App.cpp:797
+#: src/slic3r/GUI/GUI_App.cpp:1474
 #, c-format
 msgid "Run %s"
 msgstr "%s ausführen"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:128
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:478
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:520
 msgid "Running post-processing scripts"
 msgstr "Post-Prozess Scripts werden ausgeführt"
 
 #: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:83
-#: src/libslic3r/PrintConfig.cpp:644 src/libslic3r/PrintConfig.cpp:688
-#: src/libslic3r/PrintConfig.cpp:703 src/libslic3r/PrintConfig.cpp:2408
-#: src/libslic3r/PrintConfig.cpp:2417 src/libslic3r/PrintConfig.cpp:2527
-#: src/libslic3r/PrintConfig.cpp:2535 src/libslic3r/PrintConfig.cpp:2543
-#: src/libslic3r/PrintConfig.cpp:2550 src/libslic3r/PrintConfig.cpp:2558
-#: src/libslic3r/PrintConfig.cpp:2566
+#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:724
+#: src/libslic3r/PrintConfig.cpp:739 src/libslic3r/PrintConfig.cpp:2551
+#: src/libslic3r/PrintConfig.cpp:2560 src/libslic3r/PrintConfig.cpp:2670
+#: src/libslic3r/PrintConfig.cpp:2678 src/libslic3r/PrintConfig.cpp:2686
+#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2701
+#: src/libslic3r/PrintConfig.cpp:2709
 msgid "s"
 msgstr "s"
 
-#: src/slic3r/GUI/MainFrame.cpp:481 src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1072 src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end G-code"
 msgstr "S&ende G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end to print"
 msgstr "Zum Drucken s&enden"
 
-#. TRN Preset
-#: src/slic3r/GUI/Tab.cpp:3417
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:642
+msgid "Save"
+msgstr "Speichern"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:72
 #, c-format
 msgid "Save %s as:"
 msgstr "Speichere %s als:"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 #, c-format
 msgid "Save %s file as:"
 msgstr "Speichere %s Datei als:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1046
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:912
 msgid "Save changes?"
 msgstr "Änderungen speichern?"
 
-#: src/libslic3r/PrintConfig.cpp:3386
+#: src/libslic3r/PrintConfig.cpp:3585
 msgid "Save config file"
 msgstr "Speichere Konfigurationsdatei"
 
-#: src/slic3r/GUI/MainFrame.cpp:925
+#: src/slic3r/GUI/MainFrame.cpp:1626
 msgid "Save configuration as:"
 msgstr "Konfiguration speichern unter:"
 
-#: src/libslic3r/PrintConfig.cpp:3387
+#: src/libslic3r/PrintConfig.cpp:3586
 msgid "Save configuration to the specified file."
 msgstr "Sichert die Konfiguration in der angegebenen Datei."
 
 #. TRN "Save current Settings"
-#: src/slic3r/GUI/Tab.cpp:133
+#: src/slic3r/GUI/Tab.cpp:203
 #, c-format
 msgid "Save current %s"
 msgstr "Speichere aktuelle %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "Save current project file"
 msgstr "Speichere aktuelle Projektdatei"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save current project file as"
 msgstr "Speichere aktuelle Projektdatei als"
 
-#: src/slic3r/GUI/Plater.cpp:2604
+#: src/slic3r/GUI/Plater.cpp:2566
 msgid "Save file as:"
 msgstr "Speichere Datei als:"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save G-code file as:"
 msgstr "Speichere G-Code Datei als:"
 
-#: src/slic3r/GUI/MainFrame.cpp:899
+#: src/slic3r/GUI/MainFrame.cpp:1600
 msgid "Save OBJ file (less prone to coordinate errors than STL) as:"
 msgstr "Speichern als OBJ-Datei (weniger anfällig für Koordinatenfehler als STL):"
 
-#: src/slic3r/GUI/Tab.hpp:443
+#: src/slic3r/GUI/SavePresetDialog.cpp:190
+#: src/slic3r/GUI/SavePresetDialog.cpp:196
 msgid "Save preset"
 msgstr "Sichern der Voreinstellung"
 
-#: src/slic3r/GUI/MainFrame.cpp:980
+#: src/slic3r/GUI/MainFrame.cpp:1681
 msgid "Save presets bundle as:"
 msgstr "Sichern der Voreinstellungssammlung unter:"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save Project &as"
 msgstr "Projekt sichern &als"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:114
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:107
 msgid "Save project (3mf)"
 msgstr "Speichere Projekt (3mf)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:115
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:108
 msgid "Save project as (3mf)"
 msgstr "Speichere Projekt als (3mf)"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save SL1 file as:"
 msgstr "Speichere SL1 Datei als:"
 
-#: src/slic3r/GUI/MainFrame.cpp:838
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:744
+msgid "Save the selected options to preset \"%1%\"."
+msgstr "Speichern der ausgewählten Optionen unter der Voreinstellung \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Save the selected options."
+msgstr "Speichern der ausgewählten Optionen."
+
+#: src/slic3r/GUI/MainFrame.cpp:1539
 msgid "Save zip file as:"
 msgstr "Speichere Zip Datei als:"
 
@@ -6338,157 +7342,184 @@ msgstr "Speichere Zip Datei als:"
 msgid "Saving mesh into the 3MF container failed."
 msgstr "Sichern des Netzes in einen 3MF-Container fehlgeschlagen."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:47
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:230
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:500
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:518
-#: src/libslic3r/PrintConfig.cpp:3466
+#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:78
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:238
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:547
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:563
+#: src/libslic3r/PrintConfig.cpp:3665
 msgid "Scale"
 msgstr "Skalieren"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:459
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:507
 msgid "Scale factors"
 msgstr "Skalierungsfaktoren"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
-msgid ""
-"Scale selection to fit print volume\n"
-"in Gizmo scale"
-msgstr "Auswahl passend zum Druckvolumen in der Gizmo Skalierung anpassen"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale the selected object to fit the print volume"
 msgstr "Skalieren des ausgewählten Objekts so, dass es in das Druckvolumen passt"
 
-#: src/libslic3r/PrintConfig.cpp:3475
+#: src/libslic3r/PrintConfig.cpp:3674
 msgid "Scale to Fit"
 msgstr "Passend skalieren"
 
-#: src/slic3r/GUI/Selection.cpp:939
+#: src/slic3r/GUI/Selection.cpp:988
 msgid "Scale To Fit"
 msgstr "Passend skalieren"
 
-#: src/libslic3r/PrintConfig.cpp:3476
+#: src/libslic3r/PrintConfig.cpp:3675
 msgid "Scale to fit the given volume."
 msgstr "Auf das gegebene Volumen skalieren."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale to print volume"
 msgstr "Auf Druckvolumen skalieren"
 
-#: src/libslic3r/PrintConfig.cpp:3467
+#: src/libslic3r/PrintConfig.cpp:3666
 msgid "Scaling factor or percentage."
 msgstr "Skalierungsfaktor oder Prozentsatz."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:505
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:545
 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
 msgstr "Geplante Hochladung auf `%1%`. Siehe Fenster -> Druck-Host Uploadwarteschlange"
 
-#: src/libslic3r/PrintConfig.cpp:1621
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:46
+msgid "Seam painting"
+msgstr "Aufmal-Nähte"
+
+#: src/libslic3r/PrintConfig.cpp:1729
 msgid "Seam position"
 msgstr "Nahtposition"
 
-#: src/libslic3r/PrintConfig.cpp:1642
+#: src/libslic3r/PrintConfig.cpp:1750
 msgid "Seam preferred direction"
 msgstr "Bevorzugte Richtung für Nähte"
 
-#: src/libslic3r/PrintConfig.cpp:1651
+#: src/libslic3r/PrintConfig.cpp:1759
 msgid "Seam preferred direction jitter"
 msgstr "Bevorzugte Zitterrichtung für Nähte"
 
+#: src/slic3r/GUI/MainFrame.cpp:1207
+msgid "Searc&h"
+msgstr "Suc&hen"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4957
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 src/slic3r/GUI/Search.cpp:426
+msgid "Search"
+msgstr "Suchen"
+
+#: src/slic3r/GUI/ImGuiWrapper.cpp:803 src/slic3r/GUI/Search.cpp:460
+msgid "Search in English"
+msgstr "Suche in Englisch"
+
+#: src/slic3r/GUI/MainFrame.cpp:1216
+msgid "Search in settings"
+msgstr "Suche in Einstellungen"
+
+#: src/slic3r/GUI/Tab.cpp:222
+msgid "Search in settings [%1%]"
+msgstr "Suche in Einstellungen [%1%]"
+
 #: src/slic3r/GUI/BonjourDialog.cpp:218
 msgid "Searching for devices"
 msgstr "Es wird nach Geräten gesucht"
 
-#: src/slic3r/GUI/Plater.cpp:2858
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:41
 msgid "Searching for optimal orientation"
 msgstr "Suche nach der optimalen Orientierung"
 
-#: src/slic3r/GUI/GUI_App.cpp:1103
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "See more."
+msgstr "Siehe mehr."
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "See Releases page."
+msgstr "Siehe Releases-Seite."
+
+#: src/slic3r/GUI/GUI_App.cpp:1895
 msgid "Select a gcode file:"
 msgstr "Gcode Datei auswählen:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:121
 msgid "Select all objects"
 msgstr "Alle Objekte auswählen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1370
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217
 msgid "Select all points"
 msgstr "Alle Punkte auswählen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1976
+#: src/slic3r/GUI/ConfigWizard.cpp:2487
 msgid "Select all standard printers"
 msgstr "Wähle alle Standarddrucker"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
 msgid "Select by rectangle"
 msgstr "Auswahl über Rechteck"
 
-#: src/slic3r/GUI/MainFrame.cpp:944 src/slic3r/GUI/MainFrame.cpp:1006
+#: src/slic3r/GUI/MainFrame.cpp:1645 src/slic3r/GUI/MainFrame.cpp:1707
 msgid "Select configuration to load:"
 msgstr "Konfiguration zum Laden auswählen:"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:82
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:88
 msgid "Select coordinate space, in which the transformation will be performed."
 msgstr "Koordinatenraum wählen, in dem die Transformation durchgeführt wird."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3971
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4458
 msgid "Select extruder number:"
 msgstr "Wählen Sie die Extruder Nummer:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
 msgid "Select Filament Settings Tab"
 msgstr "Wählt Filamenteinstellungsreiter"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
 msgid "Select Plater Tab"
 msgstr "Wählt Druckplattenreiter"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
 msgid "Select Print Settings Tab"
 msgstr "Wählt Druckeinstellungsreiter"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:139
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:135
 msgid "Select Printer Settings Tab"
 msgstr "Wählt Druckereinstellungsreiter"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1265
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1396
 msgid "Select showing settings"
 msgstr "Wähle Anzeigeeinstellungen"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Select the language"
 msgstr "Wählen Sie die Sprache aus"
 
-#: src/slic3r/GUI/Tab.cpp:57
+#: src/slic3r/GUI/Tab.cpp:108
 msgid "Select the print profiles this profile is compatible with."
 msgstr "Wählt die Druckprofile, die mit diesem Profil kompatibel sind."
 
-#: src/slic3r/GUI/Tab.cpp:51
+#: src/slic3r/GUI/Tab.cpp:102
 msgid "Select the printers this profile is compatible with."
 msgstr "Wählen Sie die Drucker aus, die mit diesem Profil kompatibel sind."
 
-#: src/slic3r/GUI/MainFrame.cpp:889
+#: src/slic3r/GUI/MainFrame.cpp:1590
 msgid "Select the STL file to repair:"
 msgstr "Geben Sie die STL-Datei an, die repariert werden soll:"
 
-#: src/slic3r/GUI/Preferences.cpp:237
+#: src/slic3r/GUI/Preferences.cpp:391
 msgid "Select toolbar icon size in respect to the default one."
 msgstr "Wählen Sie die Symbolgröße der Symbolleiste in Bezug auf die Standardgröße."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Select type of part"
 msgstr "Wählen Sie den Typ des Teils"
 
-#: src/slic3r/GUI/Plater.cpp:638
+#: src/slic3r/GUI/Plater.cpp:504
 msgid "Select what kind of pad do you need"
 msgstr "Wählen Sie aus, welche Art von Grundschicht Sie benötigen"
 
-#: src/slic3r/GUI/Plater.cpp:498
+#: src/slic3r/GUI/Plater.cpp:364
 msgid "Select what kind of support do you need"
 msgstr "Wählen Sie aus, welche Art von Unterstützung Sie benötigen"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1917
+#: src/slic3r/GUI/DoubleSlider.cpp:2135
 msgid ""
 "Select YES if you want to delete all saved tool changes, \n"
 "NO if you want all tool changes switch to color changes, \n"
@@ -6498,59 +7529,59 @@ msgstr ""
 "NEIN, wenn Sie möchten, dass alle Werkzeugänderungen auf Farbwechsel umgestellt werden, \n"
 "oder ABBRECHEN, um sie unverändert zu lassen."
 
-#: src/slic3r/GUI/Selection.cpp:146
+#: src/slic3r/GUI/Selection.cpp:191
 msgid "Selection-Add"
 msgstr "Auswahl hinzufügen"
 
-#: src/slic3r/GUI/Selection.cpp:376
+#: src/slic3r/GUI/Selection.cpp:421
 msgid "Selection-Add All"
 msgstr "Auswahl Alles hinzufügen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3299
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3762
 msgid "Selection-Add from list"
 msgstr "Auswahl aus Liste hinzufügen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6598
+#: src/slic3r/GUI/GLCanvas3D.cpp:7193
 msgid "Selection-Add from rectangle"
 msgstr "Auswahl über Rechteck hinzufügen"
 
-#: src/slic3r/GUI/Selection.cpp:256
+#: src/slic3r/GUI/Selection.cpp:301
 msgid "Selection-Add Instance"
 msgstr "Auswahl Kopie hinzufügen"
 
-#: src/slic3r/GUI/Selection.cpp:219
+#: src/slic3r/GUI/Selection.cpp:264
 msgid "Selection-Add Object"
 msgstr "Auswahl Objekt hinzufügen"
 
-#: src/slic3r/GUI/Selection.cpp:187
+#: src/slic3r/GUI/Selection.cpp:232
 msgid "Selection-Remove"
 msgstr "Auswahl entfernen"
 
-#: src/slic3r/GUI/Selection.cpp:402
+#: src/slic3r/GUI/Selection.cpp:447
 msgid "Selection-Remove All"
 msgstr "Auswahl Alles entfernen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3291
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3754
 msgid "Selection-Remove from list"
 msgstr "Auswahl aus Liste entfernen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6617
+#: src/slic3r/GUI/GLCanvas3D.cpp:7212
 msgid "Selection-Remove from rectangle"
 msgstr "Auswahl über Rechteck entfernen"
 
-#: src/slic3r/GUI/Selection.cpp:275
+#: src/slic3r/GUI/Selection.cpp:320
 msgid "Selection-Remove Instance"
 msgstr "Auswahl Kopie entfernen"
 
-#: src/slic3r/GUI/Selection.cpp:238
+#: src/slic3r/GUI/Selection.cpp:283
 msgid "Selection-Remove Object"
 msgstr "Auswahl Objekt entfernen"
 
-#: src/slic3r/GUI/MainFrame.cpp:566
+#: src/slic3r/GUI/MainFrame.cpp:1172
 msgid "Selects all objects"
 msgstr "Alle Objekte auswählen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send G-code"
 msgstr "Sende G-code"
 
@@ -6558,29 +7589,29 @@ msgstr "Sende G-code"
 msgid "Send G-Code to printer host"
 msgstr "Sende G-Code zum Druckerhost"
 
-#: src/slic3r/GUI/MainFrame.cpp:481
+#: src/slic3r/GUI/MainFrame.cpp:1072
 msgid "Send to print current plate as G-code"
 msgstr "Sende die aktuelle Plattenbelegung als G-Code zum Drucken"
 
-#: src/slic3r/GUI/Plater.cpp:878 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/Plater.cpp:753 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send to printer"
 msgstr "Zum Drucker senden"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1305
+#: src/slic3r/GUI/GLCanvas3D.cpp:1312
 msgid "Seq."
 msgstr "Seq."
 
-#: src/slic3r/GUI/Tab.cpp:1231
+#: src/slic3r/GUI/Tab.cpp:1561
 msgid "Sequential printing"
 msgstr "Sequentielles Drucken"
 
-#: src/slic3r/GUI/Tab.cpp:1901 src/libslic3r/PrintConfig.cpp:1661
-msgid "Serial port"
-msgstr "Serieller Port"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
+msgid "Sequential Slider"
+msgstr "Sequentieller Schieberegler"
 
-#: src/libslic3r/PrintConfig.cpp:1669
-msgid "Serial port speed"
-msgstr "Serielle Portgeschwindigkeit"
+#: src/slic3r/GUI/Preferences.cpp:230
+msgid "Sequential slider applied only to top layer"
+msgstr "Sequentieller Schieberegler wird nur auf die oberste Schicht angewendet"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:807
 msgid "Serial port:"
@@ -6590,17 +7621,16 @@ msgstr "Serieller Port:"
 msgid "Service name"
 msgstr "Name des Dienstes"
 
-#: src/slic3r/GUI/Tab.cpp:1802 src/slic3r/GUI/Tab.cpp:2046
-#: src/slic3r/GUI/Tab.cpp:3176
+#: src/slic3r/GUI/Tab.cpp:3509 src/slic3r/GUI/Tab.cpp:3588
 msgid "Set"
 msgstr "Setzen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1728
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Object"
 msgstr "Als separates Objekt festlegen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Objects"
 msgstr "Als separate Objekte festlegen"
 
@@ -6608,7 +7638,7 @@ msgstr "Als separate Objekte festlegen"
 msgid "Set extruder change for every"
 msgstr "Extruderwechsel bei jedem"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Set extruder for selected items"
 msgstr "Extruder für die gewählten Elemente wählen"
 
@@ -6616,7 +7646,7 @@ msgstr "Extruder für die gewählten Elemente wählen"
 msgid "Set extruder sequence"
 msgstr "Extrudersequenz einstellen"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1532
+#: src/slic3r/GUI/DoubleSlider.cpp:1728
 msgid "Set extruder sequence for the entire print"
 msgstr "Extrudersequenz für den gesamten Druck einstellen"
 
@@ -6624,84 +7654,84 @@ msgstr "Extrudersequenz für den gesamten Druck einstellen"
 msgid "Set extruder(tool) sequence"
 msgstr "Extruder(werkzeug)sequenz einstellen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
 msgid "Set lower thumb to current slider thumb"
 msgstr "Stelle den unteren Regler auf den aktuellen Schieberegler"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:297
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305
 msgid "Set Mirror"
 msgstr "Spiegel setzen"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Set number of instances"
 msgstr "Setze Anzahl der Kopien"
 
-#: src/slic3r/GUI/Plater.cpp:4756
+#: src/slic3r/GUI/Plater.cpp:4860
 #, c-format
 msgid "Set numbers of copies to %d"
 msgstr "Setze Anzahl der Kopien auf %d"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:781
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:828
 msgid "Set Orientation"
 msgstr "Orientierung setzen"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:750
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:797
 msgid "Set Position"
 msgstr "Position setzen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Printable"
 msgstr "Setze Druckbar"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Printable Instance"
 msgstr "Setze druckbare Kopie"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:846
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:893
 msgid "Set Scale"
 msgstr "Setze Skalierung"
 
-#: src/libslic3r/PrintConfig.cpp:2393
+#: src/libslic3r/PrintConfig.cpp:2536
 msgid "Set the actual LCD display orientation inside the SLA printer. Portrait mode will flip the meaning of display width and height parameters and the output images will be rotated by 90 degrees."
 msgstr "Setzt die aktuelle Ausrichtung der LCD-Anzeige im SLA-Drucker. Der Hochformatmodus kehrt die Bedeutung der Anzeigeparameter Breite und Höhe um und die Ausgabebilder werden um 90 Grad gedreht."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:932
+#: src/slic3r/GUI/ConfigWizard.cpp:1298
 msgid "Set the shape of your printer's bed."
 msgstr "Stellen Sie die Konturen Ihres Druckerbettes ein."
 
-#: src/libslic3r/PrintConfig.cpp:556
+#: src/libslic3r/PrintConfig.cpp:592
 msgid "Set this to a non-zero value to allow a manual extrusion width. If left to zero, Slic3r derives extrusion widths from the nozzle diameter (see the tooltips for perimeter extrusion width, infill extrusion width etc). If expressed as percentage (for example: 230%), it will be computed over layer height."
 msgstr "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite zuzulassen. Falls auf null belassen, wird PrusaSlicer die Extrusionsbreiten vom Durchmesser der Druckdüse ableiten (siehe die Hilfstexte für die Extrusionsbreite für Außenkonturen, Infill usw.). Falls als Prozentwert (z.B. 230%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:448
+#: src/libslic3r/PrintConfig.cpp:484
 msgid "Set this to a non-zero value to set a manual extrusion width for external perimeters. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%), it will be computed over layer height."
 msgstr "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite für externe Außenkonturen anzugeben. Falls auf null belassen, wird die Standard-Extrusionsbreite verwendet (falls angeben), ansonsten wird der Durchmesser der Druckdüse x 1,125 verwendet. Falls als Prozentwert (z.B. 200%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:878
+#: src/libslic3r/PrintConfig.cpp:920
 msgid "Set this to a non-zero value to set a manual extrusion width for first layer. You can use this to force fatter extrudates for better adhesion. If expressed as percentage (for example 120%) it will be computed over first layer height. If set to zero, it will use the default extrusion width."
 msgstr "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite für die erste Druckschicht anzugeben. Sie können damit eine stärkere Extrusion für bessere Haftung erzwingen. Falls auf null belassen, wird die Standard-Extrusionsbreite verwendet. Falls als Prozentwert (z.B. 120%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:1873
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite für den Infill bei massiven Flächen anzugeben. Falls auf null belassen, wird die Standard-Extrusionsbreite verwendet (falls angeben), ansonsten wird der Durchmesser der Druckdüse x 1,125 verwendet. Falls als Prozentwert (z.B. 90%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:2107
+#: src/libslic3r/PrintConfig.cpp:2250
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite für die oberen Außenflächen anzugeben. Dünnere Extrusionsbreiten sind vorteilhaft, um Engstellen auszufüllen und um eine schönere Oberfläche zu erhalten. Falls auf null belassen, wird die Standard-Extrusionsbreite verwendet (falls angeben), ansonsten wird der Durchmesser der Druckdüse verwendet. Falls als Prozentwert (z.B. 90%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:1011
+#: src/libslic3r/PrintConfig.cpp:1055
 msgid "Set this to a non-zero value to set a manual extrusion width for infill. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. You may want to use fatter extrudates to speed up the infill and make your parts stronger. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite für den Infill anzugeben. Falls auf null belassen, wird die Standard-Extrusionsbreite verwendet (falls angeben), ansonsten wird der Durchmesser der Druckdüse x 1,125 verwendet. Stärke Extrusionsbreiten sind vorteilhaft, um den Infill zu beschleunigen und um die Teile stärker zu machen. Falls als Prozentwert (z.B. 90%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:1419
+#: src/libslic3r/PrintConfig.cpp:1527
 msgid "Set this to a non-zero value to set a manual extrusion width for perimeters. You may want to use thinner extrudates to get more accurate surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%) it will be computed over layer height."
 msgstr "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite für Außenkonturen anzugeben. Dünnere Extrusionsbreiten sind vorteilhaft, um genauere Oberflächen zu erhalten. Falls auf null belassen, wird die Standard-Extrusionsbreite verwendet (falls angeben), ansonsten wird der Durchmesser der Druckdüse x 1,125 verwendet. Falls als Prozentwert (z.B. 200%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:1948
+#: src/libslic3r/PrintConfig.cpp:2090
 msgid "Set this to a non-zero value to set a manual extrusion width for support material. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite für die Stützstrukturen anzugeben. Falls auf null belassen, wird die Standard-Extrusionsbreite verwendet (falls angeben), ansonsten wird der Durchmesser der Druckdüse verwendet. Als Prozentwert (z.B. 90%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:512
+#: src/libslic3r/PrintConfig.cpp:548
 msgid "Set this to the clearance radius around your extruder. If the extruder is not centered, choose the largest value for safety. This setting is used to check for collisions and to display the graphical preview in the plater."
 msgstr "Stellen Sie dies auf den Freiraumradius um Ihren Extruder ein. Wenn der Extruder nicht zentriert ist, wählen Sie  zur Sicherheit den größten Wert. Diese Einstellung wird verwendet, um Kollisionen zu prüfen und die grafische Vorschau auf der Druckplatte anzuzeigen."
 
@@ -6709,23 +7739,23 @@ msgstr "Stellen Sie dies auf den Freiraumradius um Ihren Extruder ein. Wenn der
 msgid "Set this to the maximum height that can be reached by your extruder while printing."
 msgstr "Stellen Sie hier die maximale Höhe ein, die Ihr Extruder beim Drucken erreichen kann."
 
-#: src/libslic3r/PrintConfig.cpp:501
+#: src/libslic3r/PrintConfig.cpp:537
 msgid "Set this to the vertical distance between your nozzle tip and (usually) the X carriage rods. In other words, this is the height of the clearance cylinder around your extruder, and it represents the maximum depth the extruder can peek before colliding with other printed objects."
 msgstr "Stellen Sie dies auf den vertikalen Abstand zwischen Ihrer Düsenspitze und (in der Regel) den X-Wagenstangen ein. Mit anderen Worten, das ist die Höhe des Abstandszylinders um Ihren Extruder herum und stellt die maximale Tiefe dar, die der Extruder vor der Kollision mit anderen Druckobjekten sehen kann."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Unprintable"
 msgstr "Setze Undruckbar"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Unprintable Instance"
 msgstr "Setze undruckbare Kopie"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
 msgid "Set upper thumb to current slider thumb"
 msgstr "Stelle den oberen Regler auf den aktuellen Schieberegler"
 
-#: src/libslic3r/PrintConfig.cpp:3509
+#: src/libslic3r/PrintConfig.cpp:3714
 msgid ""
 "Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:trace\n"
 "For example. loglevel=2 logs fatal, error and warning level messages."
@@ -6733,63 +7763,74 @@ msgstr ""
 "Stellt die Empfindlichkeit der Protokollierung ein. 0:fatal, 1:Fehler, 2:Warnung, 3:Info, 4:Debug, 5: Trace.\n"
 "Zum Beispiel. loglevel=2 protokolliert fatale, Fehler- und Warnstufenmeldungen."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:155
+#: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/MainFrame.cpp:1969
 msgid "Settings"
 msgstr "Einstellungen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Settings for height range"
 msgstr "Einstellungen für Höhenbereich"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:162
+#: src/slic3r/GUI/Preferences.cpp:431
+msgid "Settings in non-modal window"
+msgstr "Einstellungen im nicht-modalen Fenster"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:161
 msgid "Shall I adjust those settings for supports?"
 msgstr "Soll ich diese Einstellungen für Stützen anpassen?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:89
+#: src/slic3r/GUI/ConfigManipulation.cpp:88
 msgid "Shall I adjust those settings in order to enable Spiral Vase?"
 msgstr "Soll ich diese Einstellungen anpassen, um die Spiralvase zu aktivieren?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:118
 msgid "Shall I adjust those settings in order to enable the Wipe Tower?"
 msgstr "Soll ich diese Einstellungen anpassen, um den Reinigungsturm zu aktivieren?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/ConfigManipulation.cpp:209
 msgid "Shall I switch to rectilinear fill pattern?"
 msgstr "Soll ich auf geradliniges Füllmuster wechseln?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:139
+#: src/slic3r/GUI/ConfigManipulation.cpp:138
 msgid "Shall I synchronize support layers in order to enable the Wipe Tower?"
 msgstr "Soll ich die Stützschichten synchronisieren, um den Reinigungsturm zu aktivieren?"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2059
+#: src/slic3r/GUI/BedShapeDialog.cpp:156 src/slic3r/GUI/BedShapeDialog.cpp:222
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2215
 msgid "Shape"
 msgstr "Form"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:256
+#: src/slic3r/GUI/GUI_Preview.cpp:338 src/slic3r/GUI/GUI_Preview.cpp:1478
 msgid "Shells"
 msgstr "Konturhüllen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:249
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:33
+msgid "Shift + Left mouse button"
+msgstr "Gross + Linke Maustaste"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:241
 msgid "Shift + Left mouse button:"
 msgstr "Gross + Linke Maustaste:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:255
+#: src/slic3r/GUI/GLCanvas3D.cpp:245
 msgid "Shift + Right mouse button:"
 msgstr "Gross + Rechte Maustaste:"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:231
+#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:288
 msgid "Show"
 msgstr "Anzeigen"
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show &Configuration Folder"
 msgstr "Zeige &Konfigurationsordner"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show &labels"
 msgstr "Anzeigen &Beschriftungen"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
 msgid "Show about dialog"
 msgstr "\"Über\"-Dialog anzeigen"
 
@@ -6797,111 +7838,127 @@ msgstr "\"Über\"-Dialog anzeigen"
 msgid "Show advanced settings"
 msgstr "Ausführliche Einstellungen anzeigen"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:159
+#: src/slic3r/GUI/PrintHostDialogs.cpp:157
 msgid "Show error message"
 msgstr "Fehlermeldungen anzeigen"
 
-#: src/slic3r/GUI/Preferences.cpp:95
+#: src/slic3r/GUI/Preferences.cpp:112
 msgid "Show incompatible print and filament presets"
 msgstr "Inkompatible Druck- und Filamenteinstellungen anzeigen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:145
 msgid "Show keyboard shortcuts list"
 msgstr "Liste der Tastaturkürzel anzeigen"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/GCodeViewer.cpp:2591
+msgid "Show normal mode"
+msgstr "Normalen Modus zeigen"
+
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show object/instance labels in 3D scene"
 msgstr "Objekt-/Kopiebeschriftungen in der 3D-Szene anzeigen"
 
+#: src/slic3r/GUI/Preferences.cpp:213
+msgid "Show sidebar collapse/expand button"
+msgstr "Schaltfläche zum Zu-/Ausklappen der Seitenleiste zeigen"
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:377
 msgid "Show simplified settings"
 msgstr "Vereinfachte Einstellungen anzeigen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:52
+#: src/slic3r/GUI/Preferences.cpp:169 src/slic3r/GUI/Preferences.cpp:171
+msgid "Show splash screen"
+msgstr "Startbildschirm anzeigen"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2586
+msgid "Show stealth mode"
+msgstr "Stealth Modus anzeigen"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
 msgid "Show supports"
 msgstr "Stützen anzeigen"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "Show system information"
 msgstr "Systeminformationen anzeigen"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "Show the 3D editing view"
 msgstr "Anzeigen des 3D Editiermodus"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Show the 3D slices preview"
 msgstr "Vorschau der 3D-Schnitte anzeigen"
 
-#: src/slic3r/GUI/MainFrame.cpp:617
+#: src/slic3r/GUI/MainFrame.cpp:1224
 msgid "Show the filament settings"
 msgstr "Filamenteinstellungen anzeigen"
 
-#: src/libslic3r/PrintConfig.cpp:3372
+#: src/libslic3r/PrintConfig.cpp:3571
 msgid "Show the full list of print/G-code configuration options."
 msgstr "Zeigt die vollständige Liste der Konfigurationsmöglichkeiten für Druck/GCode an."
 
-#: src/libslic3r/PrintConfig.cpp:3377
+#: src/libslic3r/PrintConfig.cpp:3576
 msgid "Show the full list of SLA print configuration options."
 msgstr "Zeigt die vollständige Liste der Konfigurationsmöglichkeiten für SLA Druck an."
 
-#: src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/MainFrame.cpp:941 src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Show the list of the keyboard shortcuts"
 msgstr "Liste der Tastaturkürzel anzeigen"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "Show the plater"
 msgstr "Druckplatte anzeigen"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "Show the print settings"
 msgstr "Druckeinstellungen anzeigen"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Show the printer settings"
 msgstr "Druckereinstellungen anzeigen"
 
-#: src/libslic3r/PrintConfig.cpp:3366
+#: src/libslic3r/PrintConfig.cpp:3565
 msgid "Show this help."
 msgstr "Diese Hilfe zeigen."
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show user configuration folder (datadir)"
 msgstr "Zeige Benutzerkonfigurationsordner (datadir)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:185
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
 msgid "Show/Hide 3Dconnexion devices settings dialog"
 msgstr "Einstellungsdialog für 3Dconnexion-Geräte ein-/ausblenden"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
-msgid "Show/Hide Legend"
-msgstr "Zeige/Verberge Legende"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+msgid "Show/Hide Legend & Estimated printing time"
+msgstr "Legende & geschätzte Druckzeit anzeigen/verbergen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:146
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
 msgid "Show/Hide object/instance labels"
 msgstr "Objekt-/Kopiebeschriftungen ein-/ausblenden"
 
-#: src/slic3r/GUI/GUI_App.cpp:813 src/slic3r/GUI/wxExtensions.cpp:753
+#: src/slic3r/GUI/GUI_App.cpp:1504 src/slic3r/GUI/wxExtensions.cpp:673
 msgid "Simple"
 msgstr "Einfach"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:820
+#: src/slic3r/GUI/ConfigWizard.cpp:1179
 msgid "Simple mode"
 msgstr "Einfacher Modus"
 
-#: src/slic3r/GUI/GUI_App.cpp:813
+#: src/slic3r/GUI/GUI_App.cpp:1504
 msgid "Simple View Mode"
 msgstr "EInfacher Anzeigemodus"
 
-#: src/slic3r/GUI/Tab.cpp:2298 src/slic3r/GUI/Tab.cpp:2306
+#: src/slic3r/GUI/Tab.cpp:2467 src/slic3r/GUI/Tab.cpp:2475
 msgid "Single extruder MM setup"
 msgstr "Einzelextruder MM Setup"
 
-#: src/libslic3r/PrintConfig.cpp:1845
+#: src/libslic3r/PrintConfig.cpp:1987
 msgid "Single Extruder Multi Material"
 msgstr "Einzelextruder mit Multi-Material"
 
-#: src/slic3r/GUI/Tab.cpp:1867
+#: src/slic3r/GUI/Tab.cpp:2101
 msgid ""
 "Single Extruder Multi Material is selected, \n"
 "and all extruders must have the same diameter.\n"
@@ -6911,435 +7968,463 @@ msgstr ""
 "und alle Extruder müssen den gleichen Durchmesser haben.\n"
 "Möchten Sie den Durchmesser für alle Extruder auf den Wert des ersten Extruderdüsendurchmessers ändern?"
 
-#: src/slic3r/GUI/Tab.cpp:2307
+#: src/slic3r/GUI/Tab.cpp:2476
 msgid "Single extruder multimaterial parameters"
 msgstr "Einzelextruder Multimaterial Parameter"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:77
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:160
-#: src/slic3r/GUI/Tab.cpp:2324
+#: src/slic3r/GUI/Preferences.cpp:120 src/libslic3r/PrintConfig.cpp:3689
+msgid "Single instance mode"
+msgstr "Einzelinstanz-Modus"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:93
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:240 src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:2493
 msgid "Size"
 msgstr "Größe"
 
-#: src/slic3r/GUI/Tab.cpp:1797 src/slic3r/GUI/Tab.cpp:2041
+#: src/slic3r/GUI/Tab.cpp:2059 src/slic3r/GUI/Tab.cpp:2241
 msgid "Size and coordinates"
 msgstr "Größe und Koordinaten"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:78
+#: src/slic3r/GUI/BedShapeDialog.cpp:110
 msgid "Size in X and Y of the rectangular plate."
 msgstr "Größe der rechteckigen Platte in X und Y."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:245 src/slic3r/GUI/Tab.cpp:1111
-#: src/libslic3r/ExtrusionEntity.cpp:318
+#: src/slic3r/GUI/GUI_Preview.cpp:310 src/slic3r/GUI/Tab.cpp:1439
+#: src/libslic3r/ExtrusionEntity.cpp:323 src/libslic3r/ExtrusionEntity.cpp:354
 msgid "Skirt"
 msgstr "Schürze"
 
-#: src/slic3r/GUI/Tab.cpp:1110
+#: src/slic3r/GUI/Tab.cpp:1438
 msgid "Skirt and brim"
 msgstr "Schürze und Rand"
 
-#: src/libslic3r/PrintConfig.cpp:1687
+#: src/libslic3r/PrintConfig.cpp:1795
 msgid "Skirt height"
 msgstr "Schürzenhöhe"
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/libslic3r/PrintConfig.cpp:1811
 msgid "Skirt Loops"
 msgstr "Schleifen für die Schürze"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1334
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1181
 msgid "SLA gizmo keyboard shortcuts"
 msgstr "SLA Gizmo Tastaturkürzel"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1058
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:924
 msgid "SLA gizmo turned off"
 msgstr "SLA Gizmo ausgeschaltet"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1017
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:897
 msgid "SLA gizmo turned on"
 msgstr "SLA Gizmo eingeschaltet"
 
-#: src/slic3r/GUI/Plater.cpp:818 src/slic3r/GUI/Preset.cpp:1524
+#: src/slic3r/GUI/Plater.cpp:693 src/libslic3r/Preset.cpp:1303
 msgid "SLA material"
 msgstr "SLA Material"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Material Profiles Selection"
 msgstr "SLA Material Profile Auswahl"
 
-#: src/libslic3r/PrintConfig.cpp:2470 src/libslic3r/PrintConfig.cpp:2471
+#: src/libslic3r/PrintConfig.cpp:2613 src/libslic3r/PrintConfig.cpp:2614
 msgid "SLA material type"
 msgstr "SLA Materialtyp"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Materials"
 msgstr "SLA Materialien"
 
-#: src/slic3r/GUI/Preset.cpp:1523
+#: src/libslic3r/Preset.cpp:1302
 msgid "SLA print"
 msgstr "SLA Druck"
 
-#: src/libslic3r/PrintConfig.cpp:2578
+#: src/libslic3r/PrintConfig.cpp:2721
 msgid "SLA print material notes"
 msgstr "SLA Druckmaterial-Anmerkungen"
 
-#: src/slic3r/GUI/Plater.cpp:817
+#: src/slic3r/GUI/Plater.cpp:692
 msgid "SLA print settings"
 msgstr "SLA Druckeinstellungen"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:996
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:869
 msgid "SLA Support Points"
 msgstr "SLA Stützpunkte"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:687
-msgid "SLA supports outside the print area were detected"
-msgstr "SLA Stützstrukturen außerhalb des Druckraums entdeckt"
+#: src/slic3r/GUI/GLCanvas3D.cpp:635
+msgid "SLA supports outside the print area were detected."
+msgstr "SLA-Stützen außerhalb des Druckbereichs wurden erkannt."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1530
+#: src/slic3r/GUI/ConfigWizard.cpp:1931
 msgid "SLA Technology Printers"
 msgstr "SLA Technologie Drucker"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Slab"
 msgstr "Slab"
 
-#: src/libslic3r/PrintConfig.cpp:1333
+#: src/libslic3r/PrintConfig.cpp:1441
 msgid "Slic3r can upload G-code files to a printer host. This field must contain the kind of the host."
 msgstr "PrusaSlicer kann G-Code Dateien auf einen Drucker-Host hochladen. Dieses Feld sollte den Typ des Hosts enthalten."
 
-#: src/libslic3r/PrintConfig.cpp:105
+#: src/libslic3r/PrintConfig.cpp:107
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
 msgstr "PrusaSlicer kann G-Code Dateien zu einem Druckerhost hochladen. Dieses Feld sollte den API-Schlüssel oder das Kennwort enthalten, die für die Authentifizierung erforderlich sind."
 
-#: src/libslic3r/PrintConfig.cpp:98
+#: src/libslic3r/PrintConfig.cpp:100
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
 msgstr "PrusaSlicer kann G-Code Dateien auf einen Drucker-Host hochladen. Dieses Feld sollte den Hostnamen, die IP-Adresse oder die URL der Drucker-Hostinstanz enthalten."
 
-#: src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1407
 msgid "Slic3r will not scale speed down below this speed."
 msgstr "PrusaSlicer wird die Geschwindigkeit nicht unterhalb dieser Geschwindigkeit skalieren."
 
-#: src/libslic3r/PrintConfig.cpp:3359
+#: src/libslic3r/PrintConfig.cpp:3558
 msgid "Slice"
 msgstr "Slice"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Slice a file into a G-code"
 msgstr "Datei zu G-Code slicen"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Slice a file into a G-code, save as"
 msgstr "Datei zu G-Code slicen, speichern als"
 
-#: src/libslic3r/PrintConfig.cpp:87
+#: src/libslic3r/PrintConfig.cpp:89
 msgid "Slice gap closing radius"
 msgstr "Slice Lückenschlussradius"
 
-#: src/slic3r/GUI/Plater.cpp:892 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5110
+#: src/slic3r/GUI/Plater.cpp:767 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5237
 msgid "Slice now"
 msgstr "Jetzt slicen"
 
-#: src/libslic3r/PrintConfig.cpp:3333
+#: src/libslic3r/PrintConfig.cpp:3526
 msgid "Slice the model and export SLA printing layers as PNG."
 msgstr "Slice das Modell und Export von SLA-Druckschichten als PNG."
 
-#: src/libslic3r/PrintConfig.cpp:3354
+#: src/libslic3r/PrintConfig.cpp:3547
 msgid "Slice the model and export toolpaths as G-code."
 msgstr "Modell slicen und Werkzeugwege als G-Code exportieren."
 
-#: src/libslic3r/PrintConfig.cpp:3360
+#: src/libslic3r/PrintConfig.cpp:3559
 msgid "Slice the model as FFF or SLA based on the printer_technology configuration value."
 msgstr "Slice das Modell als FFF oder SLA basierend auf dem Konfigurationswert von printer_technology."
 
-#: src/slic3r/GUI/Plater.cpp:216
+#: src/slic3r/GUI/Plater.cpp:222
 msgid "Sliced Info"
 msgstr "Slice-Info"
 
-#: src/slic3r/GUI/MainFrame.cpp:847 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5107 src/slic3r/GUI/Tab.cpp:1221
-#: src/slic3r/GUI/Tab.cpp:3662
+#: src/slic3r/GUI/MainFrame.cpp:1548 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5234 src/slic3r/GUI/Tab.cpp:1551
+#: src/slic3r/GUI/Tab.cpp:4081
 msgid "Slicing"
 msgstr "Slice"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:134
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:184
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:170
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:219
 msgid "Slicing complete"
 msgstr "Slicing abgeschlossen"
 
-#: src/libslic3r/SLAPrint.cpp:760
+#: src/libslic3r/SLAPrint.cpp:780
 msgid "Slicing done"
 msgstr "Slicing abgeschlossen"
 
-#: src/slic3r/GUI/MainFrame.cpp:874
+#: src/slic3r/GUI/MainFrame.cpp:1575
 msgid "Slicing Done!"
 msgstr "Slicing abgeschlossen!"
 
-#: src/libslic3r/SLAPrintSteps.cpp:245
+#: src/slic3r/GUI/NotificationManager.cpp:751
+msgid "Slicing finished."
+msgstr "Slicing abgeschlossen."
+
+#: src/libslic3r/SLAPrintSteps.cpp:247
 msgid "Slicing had to be stopped due to an internal error: Inconsistent slice index."
 msgstr "Das Slicen wurde wegen eines internen Fehlers gestoppt: Defekter Sliceindex."
 
-#: src/libslic3r/SLAPrintSteps.cpp:45
+#: src/libslic3r/SLAPrintSteps.cpp:46
 msgid "Slicing model"
 msgstr "Slice das Modell"
 
-#: src/libslic3r/SLAPrintSteps.cpp:49
+#: src/libslic3r/SLAPrintSteps.cpp:50
 msgid "Slicing supports"
 msgstr "Slice Stützstrukturen"
 
-#: src/libslic3r/PrintConfig.cpp:2414
+#: src/libslic3r/PrintConfig.cpp:2557
 msgid "Slow"
 msgstr "Langsam"
 
-#: src/libslic3r/PrintConfig.cpp:1705
+#: src/libslic3r/PrintConfig.cpp:1820
 msgid "Slow down if layer print time is below"
 msgstr "Langsamer drucken wenn die Schichtdruckzeit geringer ist als"
 
-#: src/libslic3r/PrintConfig.cpp:2415
+#: src/libslic3r/PrintConfig.cpp:2558
 msgid "Slow tilt"
 msgstr "Langsames Kippen"
 
-#: src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1830
 msgid "Small perimeters"
 msgstr "Dünne Außenkonturen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:288
+#: src/libslic3r/PrintConfig.cpp:2801
+msgid "Small pillar diameter percent"
+msgstr "Kleiner Pfeilerdurchmesser in Prozent"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:274
 msgid "Smooth"
 msgstr "Glätten"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:258
+#: src/slic3r/GUI/GLCanvas3D.cpp:247
 msgid "Smoothing"
 msgstr "Glätten"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Snapshot name"
 msgstr "Name der Momentaufnahme"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Software &Releases"
 msgstr "Software &Release"
 
-#: src/slic3r/GUI/PresetHints.cpp:184
+#: src/slic3r/GUI/PresetHints.cpp:183
 msgid "solid infill"
 msgstr "Massives Infill"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/ExtrusionEntity.cpp:314
-#: src/libslic3r/PrintConfig.cpp:1756 src/libslic3r/PrintConfig.cpp:1767
+#: src/slic3r/GUI/GUI_Preview.cpp:305 src/libslic3r/ExtrusionEntity.cpp:318
+#: src/libslic3r/ExtrusionEntity.cpp:344 src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:1882
 msgid "Solid infill"
 msgstr "Massives Infill"
 
-#: src/libslic3r/PrintConfig.cpp:1744
+#: src/libslic3r/PrintConfig.cpp:1859
 msgid "Solid infill every"
 msgstr "Massives Infill alle"
 
-#: src/libslic3r/PrintConfig.cpp:1736
+#: src/libslic3r/PrintConfig.cpp:1851
 msgid "Solid infill extruder"
 msgstr "Massives Infill Extruder"
 
-#: src/libslic3r/PrintConfig.cpp:1727
+#: src/libslic3r/PrintConfig.cpp:1842
 msgid "Solid infill threshold area"
 msgstr "Massives Infill Flächen Schwellwert"
 
-#: src/slic3r/GUI/Tab.cpp:1065 src/libslic3r/PrintConfig.cpp:1780
+#: src/slic3r/GUI/Tab.cpp:1387 src/libslic3r/PrintConfig.cpp:1895
 msgid "Solid layers"
 msgstr "Massive Schichten"
 
-#: src/libslic3r/PrintConfig.cpp:754
+#: src/libslic3r/PrintConfig.cpp:790
 msgid "Soluble material"
 msgstr "Lösliches Material"
 
-#: src/libslic3r/PrintConfig.cpp:755
+#: src/libslic3r/PrintConfig.cpp:791
 msgid "Soluble material is most likely used for a soluble support."
 msgstr "Lösliches Material wird meistens für Stützstrukturen verwendet."
 
-#: src/libslic3r/PrintConfig.cpp:937
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:735
+msgid "Some fields are too long to fit. Right mouse click reveals the full text."
+msgstr "Einige Texte sind zu lang. Ein rechter Mausklick zeigt den vollständigen Text an."
+
+#: src/libslic3r/PrintConfig.cpp:981
 msgid "Some G/M-code commands, including temperature control and others, are not universal. Set this option to your printer's firmware to get a compatible output. The \"No extrusion\" flavor prevents PrusaSlicer from exporting any extrusion value at all."
 msgstr "Einige G/M-Code Befehle, einschließlich Temperaturregelung und andere, sind nicht universell einsetzbar. Stellen Sie diese Option auf die Firmware Ihres Druckers ein, um eine kompatible Ausgabe zu erhalten. Der Zusatz \"No Extrusion\" verhindert, dass PrusaSlicer überhaupt einen Extrusionswert exportiert."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:688
-msgid "Some objects are not visible"
-msgstr "Einige Objekte sind nicht sichtbar"
+#: src/slic3r/GUI/Plater.cpp:2309
+#, c-format
+msgid ""
+"Some object(s) in file %s looks like saved in inches.\n"
+"Should I consider them as a saved in inches and convert them?"
+msgstr ""
+"Einige Objekte in der Datei %s sehen aus wie in Zoll gespeichert.\n"
+"Als in Zoll gespeicherte Objekte betrachten und konvertieren?"
 
-#: src/libslic3r/Print.cpp:1226
+#: src/slic3r/GUI/GLCanvas3D.cpp:636
+msgid "Some objects are not visible."
+msgstr "Einige Objekte sind nicht sichtbar."
+
+#: src/libslic3r/Print.cpp:1252
 msgid "Some objects are too close; your extruder will collide with them."
 msgstr "Einige Objekte sind zu nahe; Ihr Extruder wird mit ihnen zusammenstoßen."
 
-#: src/libslic3r/Print.cpp:1228
+#: src/libslic3r/Print.cpp:1254
 msgid "Some objects are too tall and cannot be printed without extruder collisions."
 msgstr "Einige Objekte sind zu hoch und können nicht ohne Zusammenstoss mit dem Extruder gedruckt werden."
 
-#: src/libslic3r/PrintConfig.cpp:2824
+#: src/libslic3r/PrintConfig.cpp:2988
 msgid "Some objects can get along with a few smaller pads instead of a single big one. This parameter defines how far the center of two smaller pads should be. If theyare closer, they will get merged into one pad."
 msgstr "Einige Objekte können mit ein paar kleineren Grundschichten auskommen, anstatt mit einer einzigen großen. Dieser Parameter definiert, wie weit die Mittelpunkte von zwei kleineren Grundschichten entfernt sein soll. Wenn sie näher sind, werden sie zu einem Block zusammengeführt."
 
-#: src/libslic3r/PrintConfig.cpp:2187
+#: src/libslic3r/PrintConfig.cpp:2330
 msgid "Some printers or printer setups may have difficulties printing with a variable layer height. Enabled by default."
 msgstr "Mit einigen Druckern oder Druckerkonfigurationen ist es schwierig, mit einer variablen Schichthöhe zu drucken. Standardmässig aktiviert."
 
-#: src/libslic3r/PrintConfig.cpp:1984
+#: src/libslic3r/PrintConfig.cpp:2126
 msgid "Spacing between interface lines. Set zero to get a solid interface."
 msgstr "Abstand zwischen den Schnittstellenlinien. Auf null stellen, um ein massives Interface zu erhalten."
 
-#: src/libslic3r/PrintConfig.cpp:2018
+#: src/libslic3r/PrintConfig.cpp:1155
+msgid "Spacing between ironing passes"
+msgstr "Abstand zwischen Bügelwegen"
+
+#: src/libslic3r/PrintConfig.cpp:2160
 msgid "Spacing between support material lines."
 msgstr "Abstand zwischen Stützstrukturlinien."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:616
-#: src/slic3r/GUI/GUI_Preview.cpp:224 src/slic3r/GUI/Tab.cpp:1145
-#: src/libslic3r/PrintConfig.cpp:235 src/libslic3r/PrintConfig.cpp:458
-#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1048
-#: src/libslic3r/PrintConfig.cpp:1431 src/libslic3r/PrintConfig.cpp:1668
-#: src/libslic3r/PrintConfig.cpp:1716 src/libslic3r/PrintConfig.cpp:1768
-#: src/libslic3r/PrintConfig.cpp:2118
+#: src/slic3r/GUI/GUI_ObjectList.cpp:96 src/slic3r/GUI/GUI_ObjectList.cpp:655
+#: src/slic3r/GUI/GUI_Preview.cpp:278 src/slic3r/GUI/Tab.cpp:1474
+#: src/libslic3r/PrintConfig.cpp:269 src/libslic3r/PrintConfig.cpp:494
+#: src/libslic3r/PrintConfig.cpp:963 src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1165 src/libslic3r/PrintConfig.cpp:1539
+#: src/libslic3r/PrintConfig.cpp:1776 src/libslic3r/PrintConfig.cpp:1831
+#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:2261
 msgid "Speed"
 msgstr "Geschwindigkeit"
 
-#: src/libslic3r/PrintConfig.cpp:1670
-msgid "Speed (baud) of USB/serial port for printer connection."
-msgstr "Geschwindigkeit (baud) des USB/seriellen Ports für den Drucker Anschluß."
-
-#: src/libslic3r/GCode/PreviewData.cpp:351
+#: src/slic3r/GUI/GCodeViewer.cpp:2238 src/libslic3r/GCode/PreviewData.cpp:356
 msgid "Speed (mm/s)"
 msgstr "Geschwindigkeit (mm/s)"
 
-#: src/libslic3r/PrintConfig.cpp:920
+#: src/libslic3r/PrintConfig.cpp:964
 msgid "Speed for filling small gaps using short zigzag moves. Keep this reasonably low to avoid too much shaking and resonance issues. Set zero to disable gaps filling."
 msgstr "Geschwindigkeit, mit der kleine Lücken mit kurzen Zickzackbewegungen gefüllt werden. Beschränken Sie diese auf einen mässigen Wert, um übermässiges Rütteln und Resonanzprobleme zu vermeiden. Auf null gesetzt, wird das Füllen kleiner Lücken deaktiviert."
 
-#: src/slic3r/GUI/Tab.cpp:1158
+#: src/slic3r/GUI/Tab.cpp:1488
 msgid "Speed for non-print moves"
 msgstr "Geschwindigkeit für Bewegungen zwischen den Druckvorgängen"
 
-#: src/libslic3r/PrintConfig.cpp:1432
+#: src/libslic3r/PrintConfig.cpp:1540
 msgid "Speed for perimeters (contours, aka vertical shells). Set to zero for auto."
 msgstr "Geschwindigkeit für Außenkonturen (Konturen, bzw. vertikale Hüllen). Für Automatik auf null setzen."
 
-#: src/slic3r/GUI/Tab.cpp:1146
+#: src/slic3r/GUI/Tab.cpp:1475
 msgid "Speed for print moves"
 msgstr "Geschwindigkeit für Druckbewegungen"
 
-#: src/libslic3r/PrintConfig.cpp:236
+#: src/libslic3r/PrintConfig.cpp:270
 msgid "Speed for printing bridges."
 msgstr "Brückendruckgeschwindigkeit."
 
-#: src/libslic3r/PrintConfig.cpp:1769
+#: src/libslic3r/PrintConfig.cpp:1884
 msgid "Speed for printing solid regions (top/bottom/internal horizontal shells). This can be expressed as a percentage (for example: 80%) over the default infill speed above. Set to zero for auto."
 msgstr "Druckgeschwindigkeit für massive Bereiche (obere/untere/innenliegende waagrechte Hüllen). Sie kann als Prozentwert (z.B. 80%) der oben eingegebenen standardmässigen Infill-Geschwindigkeit angegeben werden. Für Automatik auf null setzen."
 
-#: src/libslic3r/PrintConfig.cpp:1993
+#: src/libslic3r/PrintConfig.cpp:2135
 msgid "Speed for printing support material interface layers. If expressed as percentage (for example 50%) it will be calculated over support material speed."
 msgstr "Geschwindigkeit für den Druck von Trägermaterial-Schnittstellenschichten. Wenn es als Prozentsatz (z.B. 50%) ausgedrückt wird, wird es über die Geschwindigkeit des Trägermaterials berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:2027
+#: src/libslic3r/PrintConfig.cpp:2169
 msgid "Speed for printing support material."
 msgstr "Druckgeschwindigkeit der Stützstrukturen."
 
-#: src/libslic3r/PrintConfig.cpp:1049
+#: src/libslic3r/PrintConfig.cpp:1093
 msgid "Speed for printing the internal fill. Set to zero for auto."
 msgstr "Druckgeschwindigkeit für den Infill. Für Automatik auf null setzen."
 
-#: src/libslic3r/PrintConfig.cpp:2119
+#: src/libslic3r/PrintConfig.cpp:2262
 msgid "Speed for printing top solid layers (it only applies to the uppermost external layers and not to their internal solid layers). You may want to slow down this to get a nicer surface finish. This can be expressed as a percentage (for example: 80%) over the solid infill speed above. Set to zero for auto."
 msgstr "Druckgeschwindigkeit für die oberen massiven Schichten (betrifft nur die obersten Außenkonturen und nicht deren innenliegende massiven Schichten). Wir empfehlen, diesen Wert zu reduzieren, um eine schönere Oberfläche zu erhalten. Dies kann als Prozentwert (z.B. 80%) der oben eingegebenen Geschwindigkeit für massives Infill angegeben werden. Für Automatik auf null setzen."
 
-#: src/libslic3r/PrintConfig.cpp:2153
+#: src/libslic3r/PrintConfig.cpp:2296
 msgid "Speed for travel moves (jumps between distant extrusion points)."
 msgstr "Bewegungsgeschwindigkeit (zwischen weit entfernten Extrusionsorten)."
 
-#: src/libslic3r/PrintConfig.cpp:659
+#: src/libslic3r/PrintConfig.cpp:695
 msgid "Speed of the first cooling move"
 msgstr "Geschwindigkeit der ersten Kühlbewegung"
 
-#: src/libslic3r/PrintConfig.cpp:678
+#: src/libslic3r/PrintConfig.cpp:714
 msgid "Speed of the last cooling move"
 msgstr "Geschwindigkeit der letzten Kühlbewegung"
 
-#: src/libslic3r/PrintConfig.cpp:616
+#: src/libslic3r/PrintConfig.cpp:652
 msgid "Speed used at the very beginning of loading phase."
 msgstr "Geschwindigkeit, die zu Beginn der Ladephase verwendet wird."
 
-#: src/libslic3r/PrintConfig.cpp:608
+#: src/libslic3r/PrintConfig.cpp:644
 msgid "Speed used for loading the filament on the wipe tower."
 msgstr "Geschwindigkeit, mit der Filament auf dem Reinigungsturm geladen wird."
 
-#: src/libslic3r/PrintConfig.cpp:624
+#: src/libslic3r/PrintConfig.cpp:660
 msgid "Speed used for unloading the filament on the wipe tower (does not affect  initial part of unloading just after ramming)."
 msgstr "Geschwindigkeit, mit der Filament auf dem Reinigungsturm entladen wird (betrifft nicht den ersten Teil des Entladens direkt nach dem Rammen)."
 
-#: src/libslic3r/PrintConfig.cpp:633
+#: src/libslic3r/PrintConfig.cpp:669
 msgid "Speed used for unloading the tip of the filament immediately after ramming."
 msgstr "Geschwindigkeit, mit der die Spitze des Filaments unmittelbar nach dem Rammen entladen wird."
 
-#: src/slic3r/GUI/Mouse3DController.cpp:296
+#: src/slic3r/GUI/Mouse3DController.cpp:279
 msgid "Speed:"
 msgstr "Geschwindigkeit:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:37
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Sphere"
 msgstr "Kugel"
 
-#: src/libslic3r/PrintConfig.cpp:1794
+#: src/libslic3r/PrintConfig.cpp:1909
 msgid "Spiral vase"
 msgstr "Spiralvasenmodus"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:90
+#: src/slic3r/GUI/ConfigManipulation.cpp:89
 msgid "Spiral Vase"
 msgstr "Spiralvasenmodus"
 
-#: src/slic3r/GUI/Plater.cpp:4019 src/slic3r/GUI/Plater.cpp:4034
-#: src/slic3r/GUI/Plater.cpp:4048 src/libslic3r/PrintConfig.cpp:3471
+#: src/slic3r/GUI/Plater.cpp:3939 src/slic3r/GUI/Plater.cpp:3954
+#: src/slic3r/GUI/Plater.cpp:3972 src/libslic3r/PrintConfig.cpp:3670
 msgid "Split"
 msgstr "Trennen"
 
-#: src/slic3r/GUI/Plater.cpp:4019
+#: src/slic3r/GUI/Plater.cpp:3939
 msgid "Split the selected object"
 msgstr "Teile das gewählte Objekt"
 
-#: src/slic3r/GUI/Plater.cpp:4014 src/slic3r/GUI/Plater.cpp:4034
+#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3954
 msgid "Split the selected object into individual objects"
 msgstr "Ausgewähltes Objekt in Einzelobjekte trennen"
 
-#: src/slic3r/GUI/Plater.cpp:4016 src/slic3r/GUI/Plater.cpp:4048
+#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3972
 msgid "Split the selected object into individual sub-parts"
 msgstr "Ausgewähltes Objekt in einzelne Unterteile trennen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4550
+#: src/slic3r/GUI/GLCanvas3D.cpp:4916
 msgid "Split to objects"
 msgstr "In Objekte trennen"
 
-#: src/slic3r/GUI/Plater.cpp:2981
+#: src/slic3r/GUI/Plater.cpp:2774
 msgid "Split to Objects"
 msgstr "In Objekte trennen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4560 src/slic3r/GUI/GUI_ObjectList.cpp:1487
+#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/GUI_ObjectList.cpp:1618
 msgid "Split to parts"
 msgstr "In Teile trennen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2274
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2440
 msgid "Split to Parts"
 msgstr "In Teile trennen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "Standard"
 msgstr "Standard"
 
-#: src/libslic3r/PrintConfig.cpp:846
+#: src/libslic3r/PrintConfig.cpp:884
 msgid "Stars"
 msgstr "Sterne"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "Start a new project"
 msgstr "Ein neues Projekt beginnen"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Start at height"
 msgstr "Starte auf Höhe"
 
-#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1976
-#: src/libslic3r/PrintConfig.cpp:1813 src/libslic3r/PrintConfig.cpp:1828
+#: src/slic3r/GUI/Tab.cpp:1873 src/slic3r/GUI/Tab.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:1928 src/libslic3r/PrintConfig.cpp:1943
 msgid "Start G-code"
 msgstr "Start G-Code"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "Start new slicing process"
 msgstr "Neuen Slicing-Prozess starten"
 
@@ -7347,7 +8432,37 @@ msgstr "Neuen Slicing-Prozess starten"
 msgid "Start printing after upload"
 msgstr "Beginne den Druckjob nach dem Hochladen"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:151
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Start the application"
+msgstr "Anwendung starten"
+
+#: src/slic3r/GUI/GUI_App.cpp:386
+msgid ""
+"Starting with %1% 2.3, configuration directory on Linux has changed (according to XDG Base Directory Specification) to \n"
+"%2%.\n"
+"\n"
+"This directory did not exist yet (maybe you run the new version for the first time).\n"
+"However, an old %1% configuration directory was detected in \n"
+"%3%.\n"
+"\n"
+"Consider moving the contents of the old directory to the new location in order to access your profiles, etc.\n"
+"Note that if you decide to downgrade %1% in future, it will use the old location again.\n"
+"\n"
+"What do you want to do now?"
+msgstr ""
+"Beginnend mit %1% 2.3 hat sich das Konfigurationsverzeichnis unter Linux (gemäß XDG Base Directory Specification) geändert in \n"
+"%2%.\n"
+"\n"
+"Dieses Verzeichnis existierte noch nicht (vielleicht führen Sie die neue Version zum ersten Mal aus).\n"
+"Es wurde jedoch ein altes %1%-Konfigurationsverzeichnis entdeckt in \n"
+"%3%.\n"
+"\n"
+"Ziehen Sie in Betracht, den Inhalt des alten Verzeichnisses an den neuen Ort zu verschieben, um auf Ihre Profile usw. zuzugreifen.\n"
+"Beachten Sie, dass bei einem zukünftigen Downgrade von %1% wieder der alte Speicherort verwendet wird.\n"
+"\n"
+"Was möchten Sie jetzt tun?"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:149
 msgid "Status"
 msgstr "Status"
 
@@ -7355,166 +8470,160 @@ msgstr "Status"
 msgid "Status:"
 msgstr "Status:"
 
-#: src/slic3r/GUI/Tab.cpp:2209
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2378
 msgid "Stealth"
 msgstr "Stealth"
 
-#: src/slic3r/GUI/Plater.cpp:1291
+#: src/slic3r/GUI/Plater.cpp:1187 src/slic3r/GUI/Plater.cpp:1235
 msgid "stealth mode"
 msgstr "Stealth Modus"
 
-#: src/slic3r/GUI/Plater.cpp:4985
+#: src/slic3r/GUI/GCodeViewer.cpp:2557
+msgid "Stealth mode"
+msgstr "Stealth Modus"
+
+#: src/slic3r/GUI/Plater.cpp:5118
 #, c-format
 msgid "STL file exported to %s"
 msgstr "Die STL-Datei wurde exportiert zu %s"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Stop at height"
 msgstr "Stoppe auf Höhe"
 
-#: src/slic3r/GUI/Tab.cpp:1693 src/slic3r/GUI/Tab.cpp:1928
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
 msgid "Success!"
 msgstr "Erfolg!"
 
-#: src/slic3r/GUI/PresetHints.cpp:203
+#: src/slic3r/GUI/Plater.cpp:2047
+#, c-format
+msgid "Successfully unmounted. The device %s(%s) can now be safely removed from the computer."
+msgstr "Erfolgreich ausgeworfen. Das Gerät %s(%s) kann nun sicher vom Computer entfernt werden."
+
+#: src/slic3r/GUI/PresetHints.cpp:202
 msgid "support"
 msgstr "Stützen"
 
-#: src/libslic3r/PrintConfig.cpp:2692
+#: src/libslic3r/PrintConfig.cpp:2856
 msgid "Support base diameter"
 msgstr "Stützfuß Durchmesser"
 
-#: src/libslic3r/PrintConfig.cpp:2702
+#: src/libslic3r/PrintConfig.cpp:2866
 msgid "Support base height"
 msgstr "Stützfuß Höhe"
 
-#: src/libslic3r/PrintConfig.cpp:2711
+#: src/libslic3r/PrintConfig.cpp:2875
 msgid "Support base safety distance"
 msgstr "Sicherheitsabstand der Stützbasis"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Blocker"
 msgstr "Stützblocker"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/libslic3r/PrintConfig.cpp:895
+msgid "Support Cubic"
+msgstr "Stütz-kubisch"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Enforcer"
 msgstr "Stützverstärker"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:163
+#: src/slic3r/GUI/ConfigManipulation.cpp:162
 msgid "Support Generator"
 msgstr "Stütz-Generator"
 
-#: src/slic3r/GUI/Tab.cpp:3608
+#: src/slic3r/GUI/Tab.cpp:4018
 msgid "Support head"
 msgstr "Stützkopf"
 
-#: src/libslic3r/PrintConfig.cpp:2620
-msgid "Support head front diameter"
-msgstr "Durchmesser des Stützkopfes vorne"
-
-#: src/libslic3r/PrintConfig.cpp:2629
-msgid "Support head penetration"
-msgstr "Eindringtiefe des Stützkopfes"
-
-#: src/libslic3r/PrintConfig.cpp:2638
-msgid "Support head width"
-msgstr "Stützkopfbreite"
-
-#: src/slic3r/GUI/PresetHints.cpp:213
+#: src/slic3r/GUI/PresetHints.cpp:212
 msgid "support interface"
 msgstr "Schnittstelle zu den Stützen"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:97
-#: src/slic3r/GUI/GUI_ObjectList.cpp:615 src/slic3r/GUI/GUI_Preview.cpp:246
-#: src/slic3r/GUI/Tab.cpp:1120 src/slic3r/GUI/Tab.cpp:1121
-#: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370
-#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1866
-#: src/libslic3r/PrintConfig.cpp:1872 src/libslic3r/PrintConfig.cpp:1880
-#: src/libslic3r/PrintConfig.cpp:1892 src/libslic3r/PrintConfig.cpp:1902
-#: src/libslic3r/PrintConfig.cpp:1910 src/libslic3r/PrintConfig.cpp:1925
-#: src/libslic3r/PrintConfig.cpp:1946 src/libslic3r/PrintConfig.cpp:1958
-#: src/libslic3r/PrintConfig.cpp:1974 src/libslic3r/PrintConfig.cpp:1983
-#: src/libslic3r/PrintConfig.cpp:1992 src/libslic3r/PrintConfig.cpp:2003
-#: src/libslic3r/PrintConfig.cpp:2017 src/libslic3r/PrintConfig.cpp:2025
-#: src/libslic3r/PrintConfig.cpp:2026 src/libslic3r/PrintConfig.cpp:2035
-#: src/libslic3r/PrintConfig.cpp:2043 src/libslic3r/PrintConfig.cpp:2057
+#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:95
+#: src/slic3r/GUI/GUI_ObjectList.cpp:654 src/slic3r/GUI/GUI_Preview.cpp:311
+#: src/slic3r/GUI/Tab.cpp:1449 src/slic3r/GUI/Tab.cpp:1450
+#: src/libslic3r/ExtrusionEntity.cpp:324 src/libslic3r/ExtrusionEntity.cpp:356
+#: src/libslic3r/PrintConfig.cpp:404 src/libslic3r/PrintConfig.cpp:1610
+#: src/libslic3r/PrintConfig.cpp:2008 src/libslic3r/PrintConfig.cpp:2014
+#: src/libslic3r/PrintConfig.cpp:2022 src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2044 src/libslic3r/PrintConfig.cpp:2052
+#: src/libslic3r/PrintConfig.cpp:2067 src/libslic3r/PrintConfig.cpp:2088
+#: src/libslic3r/PrintConfig.cpp:2100 src/libslic3r/PrintConfig.cpp:2116
+#: src/libslic3r/PrintConfig.cpp:2125 src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2145 src/libslic3r/PrintConfig.cpp:2159
+#: src/libslic3r/PrintConfig.cpp:2167 src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2177 src/libslic3r/PrintConfig.cpp:2185
+#: src/libslic3r/PrintConfig.cpp:2199
 msgid "Support material"
 msgstr "Stützstrukturen"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:247 src/libslic3r/ExtrusionEntity.cpp:320
-#: src/libslic3r/PrintConfig.cpp:1991
+#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/ExtrusionEntity.cpp:325
+#: src/libslic3r/ExtrusionEntity.cpp:358 src/libslic3r/PrintConfig.cpp:2133
 msgid "Support material interface"
 msgstr "Schnittstellenmaterial zu den Stützstrukturen"
 
-#: src/libslic3r/PrintConfig.cpp:2044
+#: src/libslic3r/PrintConfig.cpp:2186
 msgid "Support material will not be generated for overhangs whose slope angle (90° = vertical) is above the given threshold. In other words, this value represent the most horizontal slope (measured from the horizontal plane) that you can print without support material. Set to zero for automatic detection (recommended)."
 msgstr "Für Überhänge, deren Neigungswinkel (90° = vertikal) oberhalb der vorgegebenen Schwelle liegt, wird keine Stützstruktur erzeugt. Mit anderen Worten, dieser Wert stellt die größte horizontale Steigung (gemessen von der horizontalen Ebene) dar, die Sie ohne Trägermaterial drucken können. Für die automatische Erkennung auf null setzen (empfohlen)."
 
-#: src/libslic3r/PrintConfig.cpp:1964
+#: src/libslic3r/PrintConfig.cpp:2106
 msgid "Support material/raft interface extruder"
 msgstr "Stützstrukturen/Raft Schnittstellen Extruder"
 
-#: src/libslic3r/PrintConfig.cpp:1937
+#: src/libslic3r/PrintConfig.cpp:2079
 msgid "Support material/raft/skirt extruder"
 msgstr "Stützstrukturen/Raft/Schürzen Extruder"
 
-#: src/slic3r/GUI/Plater.cpp:500 src/libslic3r/PrintConfig.cpp:1901
-#: src/libslic3r/PrintConfig.cpp:2674
+#: src/slic3r/GUI/Plater.cpp:366 src/libslic3r/PrintConfig.cpp:2043
+#: src/libslic3r/PrintConfig.cpp:2838
 msgid "Support on build plate only"
-msgstr "Stützstrukturen nur auf dem Druckbrett"
+msgstr "Stützstrukturen nur auf dem Druckbett"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:888
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:762
 msgid "Support parameter change"
 msgstr "Stützparameter Änderung"
 
-#: src/slic3r/GUI/Tab.cpp:3613
+#: src/slic3r/GUI/Tab.cpp:4023
 msgid "Support pillar"
 msgstr "Stützpfeiler"
 
-#: src/libslic3r/PrintConfig.cpp:2658
-msgid "Support pillar connection mode"
-msgstr "Stützpfeiler Verbindungsmodus"
-
-#: src/libslic3r/PrintConfig.cpp:2648
-msgid "Support pillar diameter"
-msgstr "Durchmesser der Stützpfeiler"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
-#: src/libslic3r/PrintConfig.cpp:2764
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/libslic3r/PrintConfig.cpp:2928
 msgid "Support points density"
 msgstr "Stützpunktdichte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1196
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048
 msgid "Support points edit"
 msgstr "Stützpunkte editieren"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:624
-#: src/slic3r/GUI/Plater.cpp:495 src/slic3r/GUI/Tab.cpp:3604
-#: src/slic3r/GUI/Tab.cpp:3605 src/libslic3r/PrintConfig.cpp:2614
-#: src/libslic3r/PrintConfig.cpp:2621 src/libslic3r/PrintConfig.cpp:2630
-#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2649
-#: src/libslic3r/PrintConfig.cpp:2675 src/libslic3r/PrintConfig.cpp:2682
-#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2703
-#: src/libslic3r/PrintConfig.cpp:2712 src/libslic3r/PrintConfig.cpp:2725
-#: src/libslic3r/PrintConfig.cpp:2735 src/libslic3r/PrintConfig.cpp:2744
-#: src/libslic3r/PrintConfig.cpp:2754 src/libslic3r/PrintConfig.cpp:2765
-#: src/libslic3r/PrintConfig.cpp:2773
+#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:663
+#: src/slic3r/GUI/Plater.cpp:361 src/slic3r/GUI/Tab.cpp:4014
+#: src/slic3r/GUI/Tab.cpp:4015 src/libslic3r/PrintConfig.cpp:2757
+#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2773
+#: src/libslic3r/PrintConfig.cpp:2782 src/libslic3r/PrintConfig.cpp:2792
+#: src/libslic3r/PrintConfig.cpp:2802 src/libslic3r/PrintConfig.cpp:2839
+#: src/libslic3r/PrintConfig.cpp:2846 src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:2867 src/libslic3r/PrintConfig.cpp:2876
+#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899
+#: src/libslic3r/PrintConfig.cpp:2908 src/libslic3r/PrintConfig.cpp:2918
+#: src/libslic3r/PrintConfig.cpp:2929 src/libslic3r/PrintConfig.cpp:2937
 msgid "Supports"
 msgstr "Stützen"
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "supports and pad"
 msgstr "Stützen und Grundschicht"
 
-#: src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1185
 msgid "Supports remaining times"
 msgstr "Unterstützt Restzeit"
 
-#: src/libslic3r/PrintConfig.cpp:1101
+#: src/libslic3r/PrintConfig.cpp:1194
 msgid "Supports stealth mode"
 msgstr "Unterstützt Stealth Modus"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:159
+#: src/slic3r/GUI/ConfigManipulation.cpp:158
 msgid ""
 "Supports work better, if the following feature is enabled:\n"
 "- Detect bridging perimeters"
@@ -7522,44 +8631,60 @@ msgstr ""
 "Stützen funktionieren besser, wenn die folgende Funktion aktiviert ist:\n"
 "- Erkennen von Umfangbrücken"
 
-#: src/slic3r/GUI/Preferences.cpp:87
+#: src/slic3r/GUI/Preferences.cpp:104
 msgid "Suppress \" - default - \" presets"
 msgstr "\"Standard\"-Einstellungen unterdrücken"
 
-#: src/slic3r/GUI/Preferences.cpp:89
+#: src/slic3r/GUI/Preferences.cpp:106
 msgid "Suppress \" - default - \" presets in the Print / Filament / Printer selections once there are any other valid presets available."
 msgstr "\"Standard\"-Einstellungen in den Auswahlen für Druck / Filament / Drucker unterdrücken, falls andere gültige Voreinstellungen vorhanden sind."
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "SVG"
 msgstr "SVG"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144
+#: src/slic3r/GUI/Mouse3DController.cpp:318
+msgid "Swap Y/Z axes"
+msgstr "Y/Z-Achsen vertauschen"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+msgid "Switch between Editor/Preview"
+msgstr "Umschalten zwischen Editor/Vorschau"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1273
 msgid "Switch code to Change extruder"
 msgstr "Code umschalten auf Extruder wechseln"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1179
+#: src/slic3r/GUI/DoubleSlider.cpp:1306
 msgid "Switch code to Color change (%1%) for:"
 msgstr "Umschalten des Codes auf Farbwechsel (%1%) für:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
 msgid "Switch to 3D"
 msgstr "Zeige 3D"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1376
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1223
 msgid "Switch to editing mode"
 msgstr "Zum Bearbeitungsmodus umschalten"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
 msgid "Switch to Preview"
 msgstr "Wechseln zur Vorschau"
 
-#: src/slic3r/GUI/wxExtensions.cpp:703
+#: src/slic3r/GUI/GLCanvas3D.cpp:4302 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Switch to Settings"
+msgstr "Zu Einstellungen wechseln"
+
+#: src/slic3r/GUI/wxExtensions.cpp:623
 #, c-format
 msgid "Switch to the %s mode"
 msgstr "Wechseln zum %s Modus"
 
-#: src/slic3r/GUI/GUI_App.cpp:882
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:542
+msgid "Switching Presets: Unsaved Changes"
+msgstr "Voreinstellungen umschalten: Nicht gespeicherte Änderungen"
+
+#: src/slic3r/GUI/GUI_App.cpp:1608
 msgid ""
 "Switching the language will trigger application restart.\n"
 "You will lose content of the plater."
@@ -7577,65 +8702,72 @@ msgstr ""
 "\n"
 "Wollen Sie fortfahren?"
 
-#: src/slic3r/GUI/Tab.cpp:1014
+#: src/slic3r/GUI/Tab.cpp:1332
 msgid "symbolic profile name"
 msgstr "symbolischer Profilname"
 
-#: src/libslic3r/PrintConfig.cpp:2036
+#: src/libslic3r/PrintConfig.cpp:2178
 msgid "Synchronize support layers with the object print layers. This is useful with multi-material printers, where the extruder switch is expensive."
 msgstr "Stützschichten mit den Druckschichten des Objekts synchronisieren. Dies ist nützlich bei Multi-Material-Druckern, bei denen der Wechsel des Extruders kostenaufwendig ist."
 
-#: src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2176
 msgid "Synchronize with object layers"
 msgstr "Mit Objektschichten synchronisieren"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "System &Info"
 msgstr "System&informationen"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:78
+#: src/slic3r/GUI/SysInfoDialog.cpp:90 src/slic3r/GUI/SysInfoDialog.cpp:92
 msgid "System Information"
 msgstr "Systeminformationen"
 
-#: src/slic3r/GUI/Preset.cpp:1109 src/slic3r/GUI/Preset.cpp:1164
-#: src/slic3r/GUI/Preset.cpp:1242 src/slic3r/GUI/Preset.cpp:1284
-#: src/slic3r/GUI/PresetBundle.cpp:1583 src/slic3r/GUI/PresetBundle.cpp:1672
+#: src/slic3r/GUI/PresetComboBoxes.cpp:188
+#: src/slic3r/GUI/PresetComboBoxes.cpp:226
+#: src/slic3r/GUI/PresetComboBoxes.cpp:724
+#: src/slic3r/GUI/PresetComboBoxes.cpp:774
+#: src/slic3r/GUI/PresetComboBoxes.cpp:886
+#: src/slic3r/GUI/PresetComboBoxes.cpp:930
 msgid "System presets"
 msgstr "Systemvoreinstellungen"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Take Configuration &Snapshot"
 msgstr "Erfa&ssen einer Konfigurations-Momentaufnahme"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Taking configuration snapshot"
 msgstr "Ich erfasse eine Momentaufnahme der Konfiguration"
 
-#: src/slic3r/GUI/Tab.cpp:1433 src/libslic3r/PrintConfig.cpp:2067
+#: src/slic3r/GUI/Tab.cpp:1779
 msgid "Temperature"
 msgstr "Temperatur"
 
-#: src/libslic3r/PrintConfig.cpp:1804
+#: src/libslic3r/PrintConfig.cpp:1919
 msgid "Temperature difference to be applied when an extruder is not active. Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped."
 msgstr "Der anzuwendende Temperaturunterschied, wenn kein Extruder aktiv ist. Dies aktiviert eine \"Wegwerf-\"Schürze über die ganze Druckhöhe, auf der die Düsen periodisch gereinigt werden."
 
-#: src/libslic3r/PrintConfig.cpp:1803
+#: src/libslic3r/PrintConfig.cpp:1918
 msgid "Temperature variation"
 msgstr "Temperaturen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
+#: src/slic3r/GUI/ConfigWizard.cpp:1383
 msgid "Temperatures"
 msgstr "Temperaturen"
 
-#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:1915
+#: src/slic3r/GUI/Tab.cpp:2215
+msgid "Template Custom G-code"
+msgstr "Vorlage Benutzerdefinierter G-Code"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:284
 msgid "Test"
 msgstr "Test"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:172
+#: src/slic3r/GUI/BedShapeDialog.cpp:315
 msgid "Texture"
 msgstr "Textur"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:208
+#: src/slic3r/GUI/ConfigManipulation.cpp:207
 msgid "The %1% infill pattern is not supposed to work at 100%% density."
 msgstr "Das %1% Füllmuster ist nicht für die Arbeit mit 100%% Dichte vorgesehen."
 
@@ -7653,11 +8785,11 @@ msgstr ""
 "Das %s-Gerät wurde nicht gefunden.\n"
 "Wenn das Gerät angeschlossen ist, drücken Sie bitte die Reset-Taste neben dem USB-Anschluss...."
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1238
 msgid "The current custom preset will be detached from the parent system preset."
 msgstr "Die aktuelle benutzerdefinierte Voreinstellung wird von der Voreinstellung des übergeordneten Systems gelöst."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:925
 msgid ""
 "The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
 "Non-uniform scaling of tilted objects is only possible in the World coordinate system,\n"
@@ -7667,120 +8799,137 @@ msgstr ""
 "Eine ungleiche Skalierung von geschwenkten Objekten ist nur im Weltkoordinatensystem möglich,\n"
 "sobald die Drehung in die Objektkoordinaten eingearbeitet wurde."
 
-#: src/libslic3r/PrintConfig.cpp:2726
+#: src/libslic3r/PrintConfig.cpp:2890
 msgid "The default angle for connecting support sticks and junctions."
 msgstr "Der Standardwinkel für die Verbindung von Stützstäben und Verbindungen."
 
-#: src/libslic3r/SLAPrint.cpp:631
+#: src/libslic3r/SLAPrint.cpp:645
 msgid "The endings of the support pillars will be deployed on the gap between the object and the pad. 'Support base safety distance' has to be greater than the 'Pad object gap' parameter to avoid this."
 msgstr "Die Enden der Stützpfeiler werden auf dem Spalt zwischen dem Objekt und der Grundschicht eingesetzt. Der \"Sicherheitsabstand der Stützbasis\" muss größer sein als der Parameter \"Objektabstand Grundschicht\", um dies zu vermeiden."
 
-#: src/libslic3r/PrintConfig.cpp:489
+#: src/libslic3r/PrintConfig.cpp:525
 msgid "The extruder to use (unless more specific extruder settings are specified). This value overrides perimeter and infill extruders, but not the support extruders."
 msgstr "Der Extruder, der verwendet werden soll, falls keine sonstigen Extrudereinstellungen angegeben wurden. Dies übersteuert die Angaben für die Außenkontur- und Infill-Extruder, aber nicht die Angabe des Extruders für die Stützen."
 
-#: src/libslic3r/PrintConfig.cpp:1003
+#: src/libslic3r/PrintConfig.cpp:1047
 msgid "The extruder to use when printing infill."
 msgstr "Extruder der beim Infill benutzt wird."
 
-#: src/libslic3r/PrintConfig.cpp:1410
+#: src/libslic3r/PrintConfig.cpp:1518
 msgid "The extruder to use when printing perimeters and brim. First extruder is 1."
 msgstr "Extruder der beim Umfang und Rand Drucken benutzt werden soll. Der erste Extruder ist 1."
 
-#: src/libslic3r/PrintConfig.cpp:1738
+#: src/libslic3r/PrintConfig.cpp:1853
 msgid "The extruder to use when printing solid infill."
 msgstr "Der Extruder der beim Drucken von massivem Infill benutzt werden soll."
 
-#: src/libslic3r/PrintConfig.cpp:1966
+#: src/libslic3r/PrintConfig.cpp:2108
 msgid "The extruder to use when printing support material interface (1+, 0 to use the current extruder to minimize tool changes). This affects raft too."
 msgstr "Der Extruder, der für den Druck von Schnittstellen zu den Stützstrukturen verwendet wird (1+, oder null um den aktuellen Extruder für die Minimierung von Werkzeugwechseln zu verwenden). Dies betrifft auch den Raft."
 
-#: src/libslic3r/PrintConfig.cpp:1939
+#: src/libslic3r/PrintConfig.cpp:2081
 msgid "The extruder to use when printing support material, raft and skirt (1+, 0 to use the current extruder to minimize tool changes)."
 msgstr "Der Extruder, der für den Druck von Stützstrukturen, Raft und Schürze verwendet wird (1+, oder null um den aktuellen Extruder für die Minimierung von Werkzeugwechseln zu verwenden)."
 
-#: src/libslic3r/PrintConfig.cpp:727
+#: src/libslic3r/PrintConfig.cpp:763
 msgid "The filament material type for use in custom G-codes."
 msgstr "Die Materialart des Filaments zur Verwendung in benutzerdefinierten G-Codes."
 
-#: src/libslic3r/PrintConfig.cpp:3494
+#: src/libslic3r/PrintConfig.cpp:3693
 msgid "The file where the output will be written (if not specified, it will be based on the input file)."
 msgstr "Die Datei, in die die Ausgabe geschrieben wird (falls nicht angegeben, basiert sie auf der Eingabedatei)."
 
-#: src/libslic3r/PrintConfig.cpp:1102
+#: src/libslic3r/PrintConfig.cpp:1195
 msgid "The firmware supports stealth mode"
 msgstr "Die Firmware unterstützt den Stealth Modus"
 
-#: src/libslic3r/PrintConfig.cpp:120
+#: src/libslic3r/PrintConfig.cpp:122
 msgid "The first layer will be shrunk in the XY plane by the configured value to compensate for the 1st layer squish aka an Elephant Foot effect."
 msgstr "Die erste Schicht wird in der XY-Ebene um den vorgegebenen Wert verkleinert, um das Ausquetschen in der ersten Schicht (\"Elephant Foot\"-Effekt) zu kompensieren."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3820
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3927 src/slic3r/GUI/Tab.cpp:3457
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4283
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4410
+#: src/slic3r/GUI/SavePresetDialog.cpp:117
 msgid "the following characters are not allowed:"
 msgstr "die folgenden Zeichen sind nicht erlaubt:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1830
+#: src/slic3r/GUI/ConfigWizard.cpp:2257
 msgid "The following FFF printer models have no filament selected:"
 msgstr "Bei den folgenden FFF-Druckermodellen wurde kein Filament ausgewählt:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1848
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1004
+msgid "The following presets were modified:"
+msgstr "Die folgenden Voreinstellungen wurden geändert:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:2275
 msgid "The following SLA printer models have no materials selected:"
 msgstr "Bei den folgenden SLA-Druckermodellen wurden keine Materialien ausgewählt:"
 
-#: src/slic3r/GUI/Tab.cpp:3461
+#: src/slic3r/GUI/SavePresetDialog.cpp:125
 msgid "the following suffix is not allowed:"
 msgstr "das folgenden Suffix ist nicht erlaubt:"
 
-#: src/libslic3r/PrintConfig.cpp:2871
+#: src/libslic3r/PrintConfig.cpp:3035
 msgid "The gap between the object bottom and the generated pad in zero elevation mode."
 msgstr "Der Abstand zwischen dem Objektboden und der erzeugten Grundschicht im Nullhöhenmodus."
 
-#: src/libslic3r/PrintConfig.cpp:2704
+#: src/libslic3r/PrintConfig.cpp:2868
 msgid "The height of the pillar base cone"
 msgstr "Die Höhe des Pfeilergrundkegels"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1922
+#: src/slic3r/GUI/DoubleSlider.cpp:2140
 msgid "The last color change data was saved for a multi extruder printing with tool changes for whole print."
 msgstr "Die letzten Farbwechsel-Daten wurden für einen Multi-Extruder-Druck mit Werkzeugwechsel für den gesamten Druck gespeichert."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1900 src/slic3r/GUI/DoubleSlider.cpp:1916
+#: src/slic3r/GUI/DoubleSlider.cpp:2119 src/slic3r/GUI/DoubleSlider.cpp:2134
 msgid "The last color change data was saved for a multi extruder printing."
 msgstr "Die letzten Farbwechsel-Daten wurden für einen Multi-Extruder-Druck gespeichert."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1899
+#: src/slic3r/GUI/DoubleSlider.cpp:2118
 msgid "The last color change data was saved for a single extruder printing."
 msgstr "Die letzten Farbwechsel-Daten wurden für einen Einzel-Extruder-Druck gespeichert."
 
-#: src/libslic3r/PrintConfig.cpp:2745
+#: src/libslic3r/PrintConfig.cpp:2909
 msgid "The max distance of two pillars to get linked with each other. A zero value will prohibit pillar cascading."
 msgstr "Der maximale Abstand zwischen 2 Pfeilern, die miteinander verbunden werden. Ein Wert von null verhindert die Kaskadierung von Pfeilern."
 
-#: src/libslic3r/PrintConfig.cpp:2736
+#: src/libslic3r/PrintConfig.cpp:2900
 msgid "The max length of a bridge"
 msgstr "Die maximale Länge einer Überbrückung"
 
-#: src/libslic3r/PrintConfig.cpp:2714
+#: src/libslic3r/PrintConfig.cpp:2878
 msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
 msgstr "Der Mindestabstand des Säulenfußes zum Modell in mm. Sinnvoll im Nullhöhenmodus, bei dem ein Spalt gemäß diesem Parameter zwischen Modell und Grundschicht eingefügt wird."
 
-#: src/libslic3r/PrintConfig.cpp:185
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
+msgid "The name cannot be empty."
+msgstr "Name kann nicht leer sein."
+
+#: src/libslic3r/PrintConfig.cpp:219
 msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
 msgstr "Die Anzahl der unteren Massivschichten wird über bottom_solid_layers erhöht, wenn es notwendig ist, um die Mindeststärke der Bodenschale zu erfüllen."
 
-#: src/libslic3r/PrintConfig.cpp:2143
+#: src/libslic3r/PrintConfig.cpp:2286
 msgid "The number of top solid layers is increased above top_solid_layers if necessary to satisfy minimum thickness of top shell. This is useful to prevent pillowing effect when printing with variable layer height."
 msgstr "Die Anzahl der obersten Massivschichten wird über top_solid_layers erhöht, wenn es notwendig ist, um die Mindeststärke der Oberschale zu erfüllen. Dies ist nützlich, um einen Kisseneffekt beim Drucken mit variabler Lagenhöhe zu verhindern."
 
-#: src/libslic3r/PrintConfig.cpp:2277
+#: src/slic3r/GUI/Plater.cpp:2326
+msgid "The object appears to be saved in inches"
+msgstr "Das Objekt scheint in Zoll gespeichert zu sein"
+
+#: src/libslic3r/PrintConfig.cpp:2420
 msgid "The object will be grown/shrunk in the XY plane by the configured value (negative = inwards, positive = outwards). This might be useful for fine-tuning hole sizes."
 msgstr "Das Objekt wird in der XY-Ebene um den konfigurierten Wert (negativ = einwärts, positiv = auswärts) vergrößert/verkleinert. Dies kann bei der Feinabstimmung von Lochgrößen hilfreich sein."
 
-#: src/libslic3r/PrintConfig.cpp:1503
+#: src/libslic3r/PrintConfig.cpp:1611
 msgid "The object will be raised by this number of layers, and support material will be generated under it."
 msgstr "Das Objekt wird um diese Anzahl von Schichten angehoben, und darunter wird Trägermaterial erzeugt."
 
-#: src/libslic3r/PrintConfig.cpp:2424
+#: src/libslic3r/PrintConfig.cpp:2803
+msgid "The percentage of smaller pillars compared to the normal pillar diameter which are used in problematic areas where a normal pilla cannot fit."
+msgstr "Der Prozentsatz der im Vergleich zum normalen Pfeilerdurchmesser kleineren Pfeiler, die in problematischen Bereichen eingesetzt werden, in die ein normaler Pfeiler nicht passt."
+
+#: src/libslic3r/PrintConfig.cpp:2567
 msgid ""
 "The percentage of the bed area. \n"
 "If the print area exceeds the specified value, \n"
@@ -7790,39 +8939,51 @@ msgstr ""
 "Wenn der Druckbereich den angegebenen Wert überschreitet,\n"
 "wird eine langsame Verkippung verwendet, andernfalls - eine schnelle Verkippung"
 
-#: src/slic3r/GUI/GUI_App.cpp:932
-msgid "The presets on the following tabs were modified"
-msgstr "Die Voreinstellungen auf den folgenden Reitern wurden geändert"
+#: src/slic3r/GUI/Tab.cpp:3430
+msgid "The physical printer(s) below is based on the preset, you are going to delete."
+msgstr "Der (die) untenstehende(n) physische(n) Drucker basiert (basieren) auf der Voreinstellung, die Sie löschen möchten."
 
-#: src/libslic3r/PrintConfig.cpp:1846
+#: src/slic3r/GUI/Tab.cpp:3438
+msgid "The physical printer(s) below is based only on the preset, you are going to delete."
+msgstr "Der (die) untenstehende(n) physische(n) Drucker basiert (basieren) nur auf der Voreinstellung, die Sie löschen möchten."
+
+#: src/slic3r/GUI/GUI_App.cpp:1676
+msgid "The preset(s) modifications are successfully saved"
+msgstr "Die Änderungen der Voreinstellung(en) wurden erfolgreich gespeichert"
+
+#: src/libslic3r/PrintConfig.cpp:1988
 msgid "The printer multiplexes filaments into a single hot end."
 msgstr "Der Drucker multiplext mehrere Filamente in einem Hotend."
 
-#: src/libslic3r/Format/3mf.cpp:1630
+#: src/libslic3r/Format/3mf.cpp:1667
 msgid "The selected 3mf file has been saved with a newer version of %1% and is not compatible."
 msgstr "Die ausgewählte 3mf-Datei wurde mit einer neueren Version von %1% gespeichert und ist nicht kompatibel."
 
-#: src/libslic3r/Format/AMF.cpp:934
+#: src/libslic3r/Format/AMF.cpp:955
 msgid "The selected amf file has been saved with a newer version of %1% and is not compatible."
 msgstr "Die ausgewählte amf-Datei wurde mit einer neueren Version von %1% gespeichert und ist nicht kompatibel."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:513
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "The selected file"
+msgstr "Die gewählte Datei"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:589
 msgid "The selected file contains no geometry."
 msgstr "Die ausgewählte Datei enthält keine Geometrie."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:517
+#: src/slic3r/GUI/BedShapeDialog.cpp:593
 msgid "The selected file contains several disjoint areas. This is not supported."
 msgstr "Die ausgewählte Datei enthält mehrere nicht zusammenhängende Bereiche. Dies wird nicht unterstützt."
 
-#: src/slic3r/GUI/Plater.cpp:2970
+#: src/slic3r/GUI/Plater.cpp:2763
 msgid "The selected object can't be split because it contains more than one volume/material."
 msgstr "Das ausgewählte Objekt konnte nicht getrennt werden, weil es aus mehr als einem Volumen/Material besteht."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2270 src/slic3r/GUI/Plater.cpp:2978
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2771
 msgid "The selected object couldn't be split because it contains only one part."
 msgstr "Das ausgewählte Objekt konnte nicht getrennt werden, da es nur aus einem Teil besteht."
 
-#: src/slic3r/GUI/MainFrame.cpp:461
+#: src/slic3r/GUI/MainFrame.cpp:1003
 msgid ""
 "The selected project is no longer available.\n"
 "Do you want to remove it from the recent projects list?"
@@ -7830,7 +8991,7 @@ msgstr ""
 "Das ausgewählte Projekt ist nicht mehr verfügbar.\n"
 "Wollen Sie es aus der Liste der letzten Projekte entfernen?"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:998
+#: src/slic3r/GUI/DoubleSlider.cpp:1121
 msgid ""
 "The sequential print is on.\n"
 "It's impossible to apply any custom G-code for objects printing sequentually.\n"
@@ -7840,20 +9001,24 @@ msgstr ""
 "Es ist unmöglich, einen benutzerdefinierten G-Code für Objekte anzuwenden, die sequentiell gedruckt werden.\n"
 "Dieser Code wird bei der G-Code-Generierung nicht verarbeitet."
 
-#: src/libslic3r/PrintConfig.cpp:2846
+#: src/slic3r/GUI/ConfigWizard.cpp:1187
+msgid "The size of the object can be specified in inches"
+msgstr "Die Größe des Objekts kann in Zoll angegeben werden"
+
+#: src/libslic3r/PrintConfig.cpp:3010
 msgid "The slope of the pad wall relative to the bed plane. 90 degrees means straight walls."
 msgstr "Die Neigung der Grundschichtwand in Bezug auf die Druckbettebene. 90 Grad bedeutet gerade Wände."
 
-#: src/libslic3r/PrintConfig.cpp:1614
+#: src/libslic3r/PrintConfig.cpp:1722
 msgid "The speed for loading of a filament into extruder after retraction (it only applies to the extruder motor). If left to zero, the retraction speed is used."
 msgstr "Die Geschwindigkeit, mit der ein Filament nach dem Einzug wieder in den Extruder vorgeschoben wird. Falls null, wird die Einzugsgeschwindigkeit verwendet."
 
-#: src/libslic3r/PrintConfig.cpp:1606
+#: src/libslic3r/PrintConfig.cpp:1714
 msgid "The speed for retractions (it only applies to the extruder motor)."
 msgstr "Die Einzugsgeschwindigkeit (sie betrifft nur den Extruderantrieb)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:81
-#, no-c-format
+#: src/slic3r/GUI/ConfigManipulation.cpp:80
+#, c-format
 msgid ""
 "The Spiral Vase mode requires:\n"
 "- one perimeter\n"
@@ -7871,41 +9036,42 @@ msgstr ""
 "- Vertikale Schalenstärke sicherstellen aktiv\n"
 "- Dünne Wände erkennen nicht aktiv"
 
-#: src/libslic3r/Print.cpp:1237
+#: src/libslic3r/Print.cpp:1263
 msgid "The Spiral Vase option can only be used when printing a single object."
 msgstr "Die Option Spiralvase kann nur beim Drucken eines einzelnen Objekts verwendet werden."
 
-#: src/libslic3r/Print.cpp:1244
+#: src/libslic3r/Print.cpp:1270
 msgid "The Spiral Vase option can only be used when printing single material objects."
 msgstr "Die Option Spiralvase kann nur beim Drucken von Objekten aus einem einzigen Material verwendet werden."
 
-#: src/slic3r/GUI/Tab.cpp:3068
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:464
 msgid "The supplied name is empty. It can't be saved."
 msgstr "Der angegebene Name ist leer. Die Speicherung kann nicht erfolgen."
 
-#: src/slic3r/GUI/Tab.cpp:3465
+#: src/slic3r/GUI/SavePresetDialog.cpp:131
 msgid "The supplied name is not available."
 msgstr "Der angegebene Name ist nicht verfügbar."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3819
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3926 src/slic3r/GUI/Tab.cpp:3456
-#: src/slic3r/GUI/Tab.cpp:3460
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4282
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4409
+#: src/slic3r/GUI/SavePresetDialog.cpp:116
+#: src/slic3r/GUI/SavePresetDialog.cpp:124
 msgid "The supplied name is not valid;"
 msgstr "Der angegebene Name ist ungültig;"
 
-#: src/libslic3r/Print.cpp:1222
+#: src/libslic3r/Print.cpp:1248
 msgid "The supplied settings will cause an empty print."
 msgstr "Die vorgenommenen Einstellungen führen zu einem leeren Druck."
 
-#: src/libslic3r/PrintConfig.cpp:2789
+#: src/libslic3r/PrintConfig.cpp:2953
 msgid "The thickness of the pad and its optional cavity walls."
 msgstr "Die Stärke der Grundschicht und seine optionalen Hohlraumwände."
 
-#: src/libslic3r/PrintConfig.cpp:1911
+#: src/libslic3r/PrintConfig.cpp:2053
 msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
 msgstr "Der vertikale Abstand zwischen Objekt und Trägermaterialschnittstelle. Wenn Sie diesen Wert auf 0 setzen, wird PrusaSlicer auch verhindern, dass Bridge-Flow und -Geschwindigkeit für die erste Objektschicht verwendet werden."
 
-#: src/slic3r/GUI/Tab.cpp:2575
+#: src/slic3r/GUI/Tab.cpp:2731
 msgid ""
 "The Wipe option is not available when using the Firmware Retraction mode.\n"
 "\n"
@@ -7915,11 +9081,11 @@ msgstr ""
 "\n"
 "Soll ich sie ausschalten, um den Firmware-Einzug zu aktivieren?"
 
-#: src/libslic3r/Print.cpp:1268
+#: src/libslic3r/Print.cpp:1294
 msgid "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)."
 msgstr "Der Reinigungsturm unterstützt derzeit kein volumetrisches E (use_volumetric_e=0)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:115
+#: src/slic3r/GUI/ConfigManipulation.cpp:114
 msgid ""
 "The Wipe Tower currently supports the non-soluble supports only\n"
 "if they are printed with the current extruder without triggering a tool change.\n"
@@ -7928,51 +9094,55 @@ msgstr ""
 "Der Reinigungsturm unterstützt derzeit nur die unlöslichen Stützen, wenn sie mit dem aktuellen Extruder gedruckt werden, ohne einen Werkzeugwechsel auszulösen.\n"
 "(sowohl der Stützstruktur-Extruder als auch der Stützstruktur-Schnittstellen-Extruder müssen auf 0 eingestellt sein)"
 
-#: src/libslic3r/Print.cpp:1400
+#: src/libslic3r/Print.cpp:1426
 msgid "The Wipe Tower currently supports the non-soluble supports only if they are printed with the current extruder without triggering a tool change. (both support_material_extruder and support_material_interface_extruder need to be set to 0)."
 msgstr "Der Reinigungsturm unterstützt zur Zeit nichtlösliche Stützen nur, falls sie mit dem aktuellen Extruder ohne einen Werkzeugwechsel gedruckt werden (sowohl support_material_extruder wie auch support_material_interface_extruder müssen auf null gesetzt werden)."
 
-#: src/libslic3r/Print.cpp:1270
+#: src/libslic3r/Print.cpp:1296
 msgid "The Wipe Tower is currently not supported for multimaterial sequential prints."
 msgstr "Der Wischturm wird derzeit nicht für sequentielle Multimaterialdrucke unterstützt."
 
-#: src/libslic3r/Print.cpp:1262
-msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors."
-msgstr "Der Reinigungsturm wird derzeit nur für die Varianten Marlin und RepRap/Sprinter und Repetier G-Code unterstützt."
+#: src/libslic3r/Print.cpp:1290
+msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors."
+msgstr "Der Wischturm wird derzeit nur für die Varianten Marlin, RepRap/Sprinter, RepRapFirmware und Repetier-G-Code unterstützt."
 
-#: src/libslic3r/Print.cpp:1264
+#: src/libslic3r/Print.cpp:1290
 msgid "The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."
 msgstr "Der Wischturm wird derzeit nur mit relativer Extruder-Adressierung unterstützt ((use_relative_e_distances=1)."
 
-#: src/libslic3r/Print.cpp:1293
+#: src/libslic3r/Print.cpp:1319
 msgid "The Wipe Tower is only supported for multiple objects if they are printed over an equal number of raft layers"
 msgstr "Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese mit der gleichen Anzahl von Raftschichten gedruckt werden"
 
-#: src/libslic3r/Print.cpp:1295
+#: src/libslic3r/Print.cpp:1321
 msgid "The Wipe Tower is only supported for multiple objects if they are printed with the same support_material_contact_distance"
 msgstr "Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese mit der gleichen support_material_contact_distance gedruckt werden"
 
-#: src/libslic3r/Print.cpp:1297
+#: src/libslic3r/Print.cpp:1323
 msgid "The Wipe Tower is only supported for multiple objects if they are sliced equally."
 msgstr "Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese gleich gesliced werden."
 
-#: src/libslic3r/Print.cpp:1291
+#: src/libslic3r/Print.cpp:1317
 msgid "The Wipe Tower is only supported for multiple objects if they have equal layer heights"
 msgstr "Der Wischturm wird nur für mehrere Objekte unterstützt, wenn diese die gleiche Schichthöhe haben"
 
-#: src/libslic3r/Print.cpp:1257
+#: src/libslic3r/Print.cpp:1283
 msgid "The wipe tower is only supported if all extruders have the same nozzle diameter and use filaments of the same diameter."
 msgstr "Der Wischturm wird nur unterstützt, wenn alle Extruder den gleichen Düsendurchmesser haben und Filamente mit dem gleichen Durchmesser verwenden."
 
-#: src/libslic3r/Print.cpp:1339
+#: src/libslic3r/Print.cpp:1365
 msgid "The Wipe tower is only supported if all objects have the same variable layer height"
 msgstr "Der Reinigungsturm wird nur unterstützt, wenn alle Objekte die gleiche variable Schichthöhe haben"
 
-#: src/libslic3r/SLAPrintSteps.cpp:621
+#: src/slic3r/GUI/Plater.cpp:3563
+msgid "There are active warnings concerning sliced models:"
+msgstr "Es gibt aktive Warnungen zu gesliceten Modellen:"
+
+#: src/libslic3r/SLAPrintSteps.cpp:619
 msgid "There are unprintable objects. Try to adjust support settings to make the objects printable."
 msgstr "Es gibt nicht druckbare Objekte. Versuchen Sie, die Stützeinstellungen anzupassen, um die Objekte druckbar zu machen."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1030
+#: src/slic3r/GUI/DoubleSlider.cpp:1155
 msgid ""
 "There is a color change for extruder that has not been used before.\n"
 "Check your settings to avoid redundant color changes."
@@ -7980,7 +9150,7 @@ msgstr ""
 "Es gibt einen Farbwechsel für den Extruder, der bisher noch nicht verwendet wurde.\n"
 "Überprüfen Sie Ihre Einstellungen, um überflüssige Farbwechsel zu vermeiden."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1024
+#: src/slic3r/GUI/DoubleSlider.cpp:1149
 msgid ""
 "There is a color change for extruder that won't be used till the end of print job.\n"
 "This code won't be processed during G-code generation."
@@ -7988,7 +9158,7 @@ msgstr ""
 "Es gibt einen Farbwechsel für den Extruder, der nicht vor dem Ende des Druckauftrags verwendet wird.\n"
 "Dieser Code wird bei der G-Code-Generierung nicht verarbeitet."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1027
+#: src/slic3r/GUI/DoubleSlider.cpp:1152
 msgid ""
 "There is an extruder change set to the same extruder.\n"
 "This code won't be processed during G-code generation."
@@ -7996,12 +9166,16 @@ msgstr ""
 "Es gibt einen Extruderwechsel, der auf denselben Extruder eingestellt ist.\n"
 "Dieser Code wird während der G-Code-Generierung nicht verarbeitet."
 
+#: src/libslic3r/GCode.cpp:604
+msgid "There is an object with no extrusions on the first layer."
+msgstr "Es gibt ein Objekt ohne Extrusionen in der ersten Schicht."
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:225
 #, c-format
 msgid "This %s version: %s"
 msgstr "Diese %s Version: %s"
 
-#: src/slic3r/GUI/Tab.cpp:982
+#: src/slic3r/GUI/Tab.cpp:1244
 msgid ""
 "This action is not revertable.\n"
 "Do you want to proceed?"
@@ -8009,79 +9183,79 @@ msgstr ""
 "Diese Aktion ist nicht umkehrbar.\n"
 "Wollen Sie fortfahren?"
 
-#: src/libslic3r/PrintConfig.cpp:165
+#: src/libslic3r/PrintConfig.cpp:199
 msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Dieser Code wird beim sequentiellen Drucken zwischen Objekten eingefügt. Standardmäßig werden Extruder- und Betttemperatur mit dem Befehl, der nicht auf die Änderung wartet, zurückgesetzt. Wenn jedoch M104, M109, M140 oder M190 in diesem benutzerdefinierten Code erkannt werden, fügt Slic3r keine Temperaturbefehle hinzu. Beachten Sie, dass Sie Platzhaltervariablen für alle PrusaSlicer-Einstellungen verwenden können, so dass Sie einen \"M109 S[first_layer_temperature]\"-Befehl an beliebiger Stelle platzieren können."
 
-#: src/libslic3r/PrintConfig.cpp:1081
+#: src/libslic3r/PrintConfig.cpp:1174
 msgid "This custom code is inserted at every layer change, right after the Z move and before the extruder moves to the first layer point. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Dieser benutzerdefinierte Code wird bei jedem Schichtwechsel eingefügt, direkt nach der Z-Bewegung und bevor der Extruder zum ersten Lagenpunkt fährt. Beachten Sie, dass Sie Platzhaltervariablen für alle Slic3r-Einstellungen sowie [layer_num] und [layer_z] verwenden können."
 
-#: src/libslic3r/PrintConfig.cpp:154
+#: src/libslic3r/PrintConfig.cpp:188
 msgid "This custom code is inserted at every layer change, right before the Z move. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Dieser benutzerdefinierte Code wird bei jedem Lagenwechsel, unmittelbar vor der Z Bewegung, eingefügt. Beachten Sie, dass Sie Platzhaltervariablen für alle PrusaSlicer-Einstellungen sowie [layer_num] und [layer_z] verwenden können."
 
-#: src/libslic3r/PrintConfig.cpp:2094
+#: src/libslic3r/PrintConfig.cpp:2237
 msgid "This custom code is inserted before every toolchange. Placeholder variables for all PrusaSlicer settings as well as {previous_extruder} and {next_extruder} can be used. When a tool-changing command which changes to the correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit no other such command. It is therefore possible to script custom behaviour both before and after the toolchange."
 msgstr "Dieser benutzerdefinierte Code wird vor jedem Werkzeugwechsel eingefügt. Platzhaltervariablen für alle PrusaSlicer-Einstellungen sowie {previous_extruder} und {next_extruder} können verwendet werden. Wenn ein Werkzeugwechselbefehl enthalten ist, der zum richtigen Extruder wechselt (z.B. T{next_extruder}), gibt PrusaSlicer keinen anderen solchen Befehl aus. Es ist daher möglich, benutzerdefiniertes Verhalten sowohl vor als auch nach dem Werkzeugwechsel zu skripten."
 
-#: src/libslic3r/PrintConfig.cpp:396
+#: src/libslic3r/PrintConfig.cpp:430
 msgid "This end procedure is inserted at the end of the output file, before the printer end gcode (and before any toolchange from this filament in case of multimaterial printers). Note that you can use placeholder variables for all PrusaSlicer settings. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Dieser Endvorgang wird am Ende der Ausgabedatei, vor dem G-Code des Druckerendes (und vor jedem Werkzeugwechsel von diesem Filament bei Multimaterialdruckern) eingefügt. Beachten Sie, dass Sie Platzhaltervariablen für alle PrusaSlicer-Einstellungen verwenden können. Wenn Sie mehrere Extruder haben, wird der gcode in Extruderreihenfolge verarbeitet."
 
-#: src/libslic3r/PrintConfig.cpp:386
+#: src/libslic3r/PrintConfig.cpp:420
 msgid "This end procedure is inserted at the end of the output file. Note that you can use placeholder variables for all PrusaSlicer settings."
 msgstr "Diese Endprozedur wird am Ende der Ausgabedatei eingefügt. Beachten Sie, dass Sie Platzhaltervariablen für alle PrusaSlicer-Einstellungen verwenden können."
 
-#: src/libslic3r/PrintConfig.cpp:1258 src/libslic3r/PrintConfig.cpp:1269
+#: src/libslic3r/PrintConfig.cpp:1366 src/libslic3r/PrintConfig.cpp:1377
 msgid "This experimental setting is used to limit the speed of change in extrusion rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."
 msgstr "Diese experimentelle Einstellung beschränkt die Änderungsgeschwindigkeit der Extrusionsmenge. Ein Wert von 1.8 mm³/s² gewährleistet, dass eine Änderung der Extrusionsmenge von 1.8 mm³/s (0.45mm Extrusionsbreite, 0.2mm Extrusionshöhe, Vorschub 20 mm/s) zu 5.4 mm³/s (Vorschub 60 mm/s) mindestens 2 Sekunden dauern wird."
 
-#: src/libslic3r/PrintConfig.cpp:1248
+#: src/libslic3r/PrintConfig.cpp:1356
 msgid "This experimental setting is used to set the maximum volumetric speed your extruder supports."
 msgstr "Diese experimentelle Einstellung gibt die maximale volumetrische Geschwindigkeit an, die von Ihrem Extruder unterstützt wird."
 
-#: src/libslic3r/PrintConfig.cpp:2162
+#: src/libslic3r/PrintConfig.cpp:2305
 msgid "This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin."
 msgstr "Diese experimentelle Einstellung benutzt G10 und G11 Befehle, damit die Druckerfirmware den Einzug übernimmt. Dies wird nur von neueren Marlin-Versionen unterstützt."
 
-#: src/libslic3r/PrintConfig.cpp:2176
+#: src/libslic3r/PrintConfig.cpp:2319
 msgid "This experimental setting uses outputs the E values in cubic millimeters instead of linear millimeters. If your firmware doesn't already know filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' in your start G-code in order to turn volumetric mode on and use the filament diameter associated to the filament selected in Slic3r. This is only supported in recent Marlin."
 msgstr "Diese experimentelle Einstellung generiert E-Koordinaten in Kubikmillimetern stat in linearen Millimetern.  Wenn die Firmware den Filamentdurchmesser noch nicht kennt, können Sie Befehle wie 'M200 D[filament_diameter_0] T0' in den Start-G-Code eingeben, um den volumetrischen Modus zu aktivieren und den in PrusaSlicer angegebenen Filamentdurchmesser zu benutzen. Dies wird nur von neueren Marlin-Versionen unterstützt."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3972
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4459
 msgid "This extruder will be set for selected items"
 msgstr "Dieser Extruder wird den gewählten Elementen zugeordnet"
 
-#: src/libslic3r/PrintConfig.cpp:224
+#: src/libslic3r/PrintConfig.cpp:258
 msgid "This factor affects the amount of plastic for bridging. You can decrease it slightly to pull the extrudates and prevent sagging, although default settings are usually good and you should experiment with cooling (use a fan) before tweaking this."
 msgstr "Diese Einstellung beeinflusst den Materialausstoss bei Brücken. Sie können den Wert leicht verringern, um die Extrusionsfäden zu strecken und ein Durchhängen zu vermeiden. Die Standardwerte sind aber normalerweise ausreichend und Sie sollten zuerst mit der Lüftergeschwindigkeit experimentieren, bevor Sie diesen Wert verändern."
 
-#: src/libslic3r/PrintConfig.cpp:546
+#: src/libslic3r/PrintConfig.cpp:582
 msgid "This factor changes the amount of flow proportionally. You may need to tweak this setting to get nice surface finish and correct single wall widths. Usual values are between 0.9 and 1.1. If you think you need to change this more, check filament diameter and your firmware E steps."
 msgstr "Dieser Faktor ändert die Extrusionsmenge proportional. Sie müssen diese Einstellung möglicherweise anpassen, um schöne Oberflächen und korrekte Hüllenstärken zu erhalten. Die üblichen Werte bewegen sich zwischen 0,9 und 1,1. Falls Sie größere Anpassungen eingeben müssen, kontrollieren Sie auch den Filamentdurchmesser und die E-Schritte in Ihrer Firmware."
 
-#: src/libslic3r/PrintConfig.cpp:214
+#: src/libslic3r/PrintConfig.cpp:248
 msgid "This fan speed is enforced during all bridges and overhangs."
 msgstr "Die Lüftergeschwindigkeit, die für Überbrückungen und Überhänge benutzt wird."
 
-#: src/libslic3r/PrintConfig.cpp:992
+#: src/libslic3r/PrintConfig.cpp:1036
 msgid "This feature allows to combine infill and speed up your print by extruding thicker infill layers while preserving thin perimeters, thus accuracy."
 msgstr "Diese Einstellung erlaubt es, Infill zu kombinieren und die Druckdauer zu verringern, indem stärkere Infill-Schichten gedruckt werden, während gleichzeitig dünne Außenkonturen und damit die Genauigkeit erhalten bleiben."
 
-#: src/libslic3r/PrintConfig.cpp:1746
+#: src/libslic3r/PrintConfig.cpp:1861
 msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
 msgstr "Diese Einstellung erzwingt eine massive Schicht nach einer vorgegebenen Anzahl von Schichten. Null deaktiviert diese Einstellung. Sie können jeden Wert eingeben (z.B. 9999); PrusaSlicer wird automatisch die größtmögliche Anzahl von Schichten wählen, die in Abhängigkeit von Düsendurchmesser und Schichthöhe kombiniert werden können."
 
-#: src/libslic3r/PrintConfig.cpp:1795
+#: src/libslic3r/PrintConfig.cpp:1910
 msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
 msgstr "Dieses Verfahren erhöht die Z-Position allmählich, während eine einfache Hülle gedruckt wird, um jeglichen sichtbaren Saum zu vermeiden. Diese Option setzt eine einzige Außenkontur, keinen Infill, keine massiven Deckenschichten und keine Stützen voraus. Sie können immer noch eine beliebige Anzahl von Bodenschichten sowie Schleifen für Schürzen und Rand einstellen. Die Methode funktioniert nicht, wenn mehr als ein Objekt gedruckt wird."
 
-#: src/slic3r/GUI/Plater.cpp:2367
+#: src/slic3r/GUI/Plater.cpp:2329
 msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
 msgstr "Diese Datei kann nicht im einfachen Modus geladen werden. Möchten Sie in den fortgeschrittenen Modus wechseln?"
 
-#: src/slic3r/GUI/Plater.cpp:2357
+#: src/slic3r/GUI/Plater.cpp:2319
 msgid ""
 "This file contains several objects positioned at multiple heights.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -8105,84 +9279,96 @@ msgstr ""
 "Möchtest Sie fortfahren und diese Hex-Datei trotzdem flashen?\n"
 "Bitte fahren Sie nur fort, wenn Sie der festen Überzeugung sind, dass dies das Richtige ist."
 
-#: src/libslic3r/PrintConfig.cpp:314
+#: src/libslic3r/PrintConfig.cpp:348
 msgid "This flag enables the automatic cooling logic that adjusts print speed and fan speed according to layer printing time."
 msgstr "Diese Einstellung aktiviert the Logik, die die Druckgeschwindigkeit und Lüftergeschwindigkeit automatisch gemäß der Schichtdruckdauer regelt."
 
-#: src/slic3r/GUI/Plater.cpp:536
+#: src/slic3r/GUI/Plater.cpp:402
 msgid "This flag enables the brim that will be printed around each object on the first layer."
 msgstr "Dieses Kontrollkästchen aktiviert den Rand (Brim), der um jedes Objekt auf der ersten Ebene gedruckt wird."
 
-#: src/libslic3r/PrintConfig.cpp:1538
+#: src/libslic3r/PrintConfig.cpp:1646
 msgid "This flag enforces a retraction whenever a Z move is done."
 msgstr "Diese Stellung erzwingt einen Einzug bei jeder Z-Bewegung."
 
-#: src/libslic3r/PrintConfig.cpp:2194
+#: src/libslic3r/PrintConfig.cpp:2337
 msgid "This flag will move the nozzle while retracting to minimize the possible blob on leaky extruders."
 msgstr "Diese Einstellung wird die Düse während dem Einzug bewegen, um mögliche Tropfen bei einem undichten Extruder zu minimieren."
 
-#: src/slic3r/GUI/Tab.cpp:953
+#: src/libslic3r/PrintConfig.cpp:1961
+msgid "This G-code will be used as a code for the color change"
+msgstr "Dieser G-Code wird als Code für den Farbwechsel verwendet"
+
+#: src/libslic3r/PrintConfig.cpp:1970
+msgid "This G-code will be used as a code for the pause print"
+msgstr "Dieser G-Code wird als Code für die Druckpause verwendet"
+
+#: src/libslic3r/PrintConfig.cpp:1979
+msgid "This G-code will be used as a custom code"
+msgstr "Dieser G-Code wird als benutzerdefinierter Code verwendet"
+
+#: src/slic3r/GUI/Tab.cpp:1272
 msgid "This is a default preset."
 msgstr "Dies ist eine Standard-Voreinstellung."
 
-#: src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2930
 msgid "This is a relative measure of support points density."
 msgstr "Dies ist ein relatives Maß für die Dichte der Stützpunkte."
 
-#: src/slic3r/GUI/Tab.cpp:2338
+#: src/slic3r/GUI/Tab.cpp:2507
 msgid "This is a single extruder multimaterial printer, diameters of all extruders will be set to the new value. Do you want to proceed?"
 msgstr "Dies ist ein Einzelextruder-Multimaterialdrucker, die Durchmesser aller Extruder werden auf den neuen Wert eingestellt. Möchten Sie fortfahren?"
 
-#: src/slic3r/GUI/Tab.cpp:955
+#: src/slic3r/GUI/Tab.cpp:1274
 msgid "This is a system preset."
 msgstr "Dies ist eine Systemvoreinstellung."
 
-#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:583
+#: src/libslic3r/PrintConfig.cpp:559 src/libslic3r/PrintConfig.cpp:619
 msgid "This is only used in the Slic3r interface as a visual help."
 msgstr "Dies wird nur als visuelles Hilfsmittel in der PrusaSlicer-Benutzeroberfläche verwendet."
 
-#: src/libslic3r/PrintConfig.cpp:336
+#: src/libslic3r/PrintConfig.cpp:370
 msgid "This is the acceleration your printer will be reset to after the role-specific acceleration values are used (perimeter/infill). Set zero to prevent resetting acceleration at all."
 msgstr "Dies ist der Beschleunigungswert, auf den Ihr Drucker zurückgesetzt wird, nachdem aufgabenspezifische Beschleunigungswerte (Außenkonturen/Infill) verwendet wurden. Setzen Sie dies auf null, um ein Zurückstellen der Beschleunigungswerte zu deaktivieren."
 
-#: src/libslic3r/PrintConfig.cpp:194
+#: src/libslic3r/PrintConfig.cpp:228
 msgid "This is the acceleration your printer will use for bridges. Set zero to disable acceleration control for bridges."
 msgstr "Die Beschleunigung, die Ihr Drucker für Brücken verwendet.  Setzen Sie dies auf null, um die Beschleunigungskontrolle bei Brücken zu deaktivieren."
 
-#: src/libslic3r/PrintConfig.cpp:860
+#: src/libslic3r/PrintConfig.cpp:900
 msgid "This is the acceleration your printer will use for first layer. Set zero to disable acceleration control for first layer."
 msgstr "Die Beschleunigung, die Ihr Drucker für die erste Schicht verwendet.  Setzen Sie dies auf null, um die Beschleunigungskontrolle bei der ersten Schicht zu deaktivieren."
 
-#: src/libslic3r/PrintConfig.cpp:982
+#: src/libslic3r/PrintConfig.cpp:1026
 msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
 msgstr "Diese Stellung bestimmt die Beschleunigung des Druckers für Infill. Setzen Sie dies auf null, um die Beschleunigungskontrolle für das Infill zu deaktivieren."
 
-#: src/libslic3r/PrintConfig.cpp:1400
+#: src/libslic3r/PrintConfig.cpp:1508
 msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
 msgstr "Dies ist die Beschleunigung, die der Drucker für Außenkonturen benutzen wird. Ein hoher Wert wie 9000 ergibt üblicherweise gute Resultate falls Ihre Hardware mithalten kann. Setzen Sie dies auf null, um die Beschleunigungskontrolle bei Außenkonturen zu deaktivieren."
 
-#: src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1435
 msgid "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"
 msgstr "Durchmesser der Extruderdüse (z.B.: 0.5, 0.35 usw.)"
 
-#: src/libslic3r/PrintConfig.cpp:1227
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:1335
+#, c-format
 msgid "This is the highest printable layer height for this extruder, used to cap the variable layer height and support layer height. Maximum recommended layer height is 75% of the extrusion width to achieve reasonable inter-layer adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter."
 msgstr "Dies ist die höchste druckbare Schichthöhe für diesen Extruder, mit der die variable Schichthöhe und Stützschichthöhe abgedeckt wird. Die maximale empfohlene Schichthöhe beträgt 75% der Extrusionsbreite, um eine angemessene Zwischenlagenhaftung zu erreichen. Bei Einstellung auf 0 ist die Lagenhöhe auf 75% des Düsendurchmessers begrenzt."
 
-#: src/libslic3r/PrintConfig.cpp:1290
+#: src/libslic3r/PrintConfig.cpp:1398
 msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
 msgstr "Dies ist die niedrigste druckbare Schichthöhe für diesen Extruder und begrenzt die Auflösung bei variabler Schichthöhe. Typische Werte liegen zwischen 0,05 mm und 0,1 mm."
 
-#: src/libslic3r/GCode.cpp:639
+#: src/libslic3r/GCode.cpp:624
 msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
 msgstr "Dies wird in der Regel durch vernachlässigbar kleine Extrusionen oder durch ein fehlerhaftes Modell verursacht. Versuchen Sie, das Modell zu reparieren oder seine Ausrichtung auf dem Druckbett zu ändern."
 
-#: src/libslic3r/PrintConfig.cpp:2215
+#: src/libslic3r/PrintConfig.cpp:2358
 msgid "This matrix describes volumes (in cubic milimetres) required to purge the new filament on the wipe tower for any given pair of tools."
 msgstr "Diese Matrix beschreibt die Volumina (in Kubikmillimetern), die benötigt werden, um das neue Filament auf dem Reinigungsturm für ein bestimmtes Werkzeugpaar zu reinigen."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:928
 msgid ""
 "This operation is irreversible.\n"
 "Do you want to proceed?"
@@ -8190,31 +9376,35 @@ msgstr ""
 "Dieser Vorgang ist nicht mehr rückgängig zu machen.\n"
 "Möchten Sie fortfahren?"
 
-#: src/libslic3r/PrintConfig.cpp:1442
+#: src/libslic3r/PrintConfig.cpp:1550
 msgid "This option sets the number of perimeters to generate for each layer. Note that Slic3r may increase this number automatically when it detects sloping surfaces which benefit from a higher number of perimeters if the Extra Perimeters option is enabled."
 msgstr "Diese Stellung bestimmt die Anzahl der Außenkonturen, die für jede Schicht erzeugt werden.  PusaSlicer kann diese Zahl automatisch vergrößern, wenn es schräge Oberflächen erkennt, die sich mit einer höheren Zahl von Außenkonturen besser drucken lassen, wenn die \"Zusätzliche Außenkonturen falls notwendig\" Option aktiviert ist."
 
-#: src/libslic3r/PrintConfig.cpp:1356
+#: src/libslic3r/PrintConfig.cpp:1464
 msgid "This option will drop the temperature of the inactive extruders to prevent oozing. It will enable a tall skirt automatically and move extruders outside such skirt when changing temperatures."
 msgstr "Mit dieser Option wird die Temperatur der inaktiven Extruder gesenkt, um ein Materialnachsickern zu verhindern. Es aktiviert automatisch eine hohe Schürze und bewegt die Extruder bei Temperaturänderungen außerhalb dieser Schürze."
 
-#: src/libslic3r/PrintConfig.cpp:1029
+#: src/libslic3r/PrintConfig.cpp:1073
 msgid "This option will limit infill to the areas actually needed for supporting ceilings (it will act as internal support material). If enabled, slows down the G-code generation due to the multiple checks involved."
 msgstr "Diese Einstellung beschränkt den Infill auf die Bereiche, die tatsächlich für das Stützen von Decken benötigt werden (der Infill dient hier als interne Stützstruktur). Falls aktiviert, kann dies die Erstellung des G-Codes wegen zusätzlichen Kontrollschritten verlangsamen."
 
-#: src/libslic3r/PrintConfig.cpp:1022
+#: src/libslic3r/PrintConfig.cpp:1066
 msgid "This option will switch the print order of perimeters and infill, making the latter first."
 msgstr "Diese Einstellungen kehrt die Druckreihenfolge von Außenkonturen und Infill um, sodass der Infill zuerst gedruckt wird."
 
-#: src/libslic3r/PrintConfig.cpp:459
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:85
+msgid "This printer will be shown in the presets list as"
+msgstr "Dieser Drucker wird in der Voreinstellungsliste angezeigt als"
+
+#: src/libslic3r/PrintConfig.cpp:495
 msgid "This separate setting will affect the speed of external perimeters (the visible ones). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
 msgstr "Diese separate Einstellung wirkt sich auf die Geschwindigkeit der äußeren (sichtbaren) Außenkonturen aus. Als Prozentwert eingegeben (z.B. 80%), wird sie ausgehend von der obigen Geschwindigkeitseinstellung für Außenkonturen berechnet. Für die automatische Berechnung auf null setzen."
 
-#: src/libslic3r/PrintConfig.cpp:1717
+#: src/libslic3r/PrintConfig.cpp:1832
 msgid "This separate setting will affect the speed of perimeters having radius <= 6.5mm (usually holes). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
 msgstr "Diese separate Einstellung wirkt sich auf die Geschwindigkeit von Außenkonturen mit einem Radius <= 6,5 mm (üblicherweise Bohrungen) aus. Als Prozentwert eingegeben (z.B. 80%), wird sie ausgehend von der obigen Geschwindigkeitseinstellung für Außenkonturen berechnet. Für eine automatische Berechnung setzen Sie dies auf null."
 
-#: src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1082
 msgid "This setting applies an additional overlap between infill and perimeters for better bonding. Theoretically this shouldn't be needed, but backlash might cause gaps. If expressed as percentage (example: 15%) it is calculated over perimeter extrusion width."
 msgstr "Diese Einstellung fügt eine zusätzliche Überlappung zwischen Außenkonturen und Infill ein, um die Haftung zu verbessern. Theoretisch sollte dies nicht notwendig sein, doch vorhandenes Getriebespiel könnte Lücken erzeugen.  Als Prozentwert eingegeben (z.B. 15%) wird sie ausgehend von der Extrusionsbreite für die Außenkontur ausgerechnet."
 
@@ -8222,31 +9412,31 @@ msgstr "Diese Einstellung fügt eine zusätzliche Überlappung zwischen Außenko
 msgid "This setting controls the height (and thus the total number) of the slices/layers. Thinner layers give better accuracy but take more time to print."
 msgstr "Diese Einstellung bestimmt die Höhe (und damit die Gesamtanzahl) der Scheiben/Schichten. Dünnere Schichten ergeben eine bessere Genauigkeit, benötigen aber mehr Zeit zum Drucken."
 
-#: src/libslic3r/PrintConfig.cpp:1218
+#: src/libslic3r/PrintConfig.cpp:1326
 msgid "This setting represents the maximum speed of your fan."
 msgstr "Diese Einstellung bestimmt die maximale Geschwindigkeit Ihres Lüfters."
 
-#: src/libslic3r/PrintConfig.cpp:1281
+#: src/libslic3r/PrintConfig.cpp:1389
 msgid "This setting represents the minimum PWM your fan needs to work."
 msgstr "Diese Einstellung gibt den minimalen PWM-Wert an, den Ihr Lüfter für den Betrieb benötigt."
 
-#: src/libslic3r/PrintConfig.cpp:1829
+#: src/libslic3r/PrintConfig.cpp:1944
 msgid "This start procedure is inserted at the beginning, after any printer start gcode (and after any toolchange to this filament in case of multi-material printers). This is used to override settings for a specific filament. If PrusaSlicer detects M104, M109, M140 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Dieser Startvorgang wird am Anfang, nach jedem Drucker-Startgcode (und nach jedem Werkzeugwechsel zu diesem Filament bei Multi-Material-Druckern) eingefügt. Dies wird verwendet, um die Einstellungen für einen bestimmten Filament zu überschreiben. Wenn PrusaSlicer M104, M109, M140 oder M190 in Ihren benutzerdefinierten Codes erkennt, werden solche Befehle nicht automatisch vorangestellt, so dass Sie die Reihenfolge der Heizbefehle und andere benutzerdefinierte Aktionen anpassen können. Beachten Sie, dass Sie Platzhaltervariablen für alle PrusaSlicer-Einstellungen verwenden können, so dass Sie einen Befehl \"M109 S[first_layer_temperature]\" beliebig platzieren können. Wenn Sie mehrere Extruder haben, wird der gcode in Extruderreihenfolge verarbeitet."
 
-#: src/libslic3r/PrintConfig.cpp:1814
+#: src/libslic3r/PrintConfig.cpp:1929
 msgid "This start procedure is inserted at the beginning, after bed has reached the target temperature and extruder just started heating, and before extruder has finished heating. If PrusaSlicer detects M104 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Dieser Startvorgang wird am Anfang eingefügt, nachdem das Bett die Solltemperatur erreicht hat und der Extruder gerade mit dem Erwärmen begonnen hat, und bevor der Extruder das Erwärmen beendet hat. Wenn PrusaSlicer M104 oder M190 in Ihren benutzerdefinierten Codes erkennt, werden solche Befehle nicht automatisch vorangestellt, so dass Sie die Reihenfolge der Heizbefehle und andere benutzerdefinierte Aktionen anpassen können. Beachten Sie, dass Sie Platzhaltervariablen für alle PrusaSlicer-Einstellungen verwenden können, so dass Sie einen Befehl \"M109 S[first_layer_temperature]\" beliebig platzieren können."
 
-#: src/libslic3r/PrintConfig.cpp:695
+#: src/libslic3r/PrintConfig.cpp:731
 msgid "This string is edited by RammingDialog and contains ramming specific parameters."
 msgstr "Diese Zeichenfolge wird vom RammDialog angepasst und enthält für das Rammen spezifische Parameter."
 
-#: src/libslic3r/PrintConfig.cpp:2286
+#: src/libslic3r/PrintConfig.cpp:2429
 msgid "This value will be added (or subtracted) from all the Z coordinates in the output G-code. It is used to compensate for bad Z endstop position: for example, if your endstop zero actually leaves the nozzle 0.3mm far from the print bed, set this to -0.3 (or fix your endstop)."
 msgstr "Dieser Wert wird zu allen Z-Koordinaten im ausgegebenen G-Code hinzuaddiert oder davon abgezogen. Damit kann eine fehlerhafte Z-Endanschlagsposition kompensiert werden: wenn z.B. bei Ihrem Nullwert die Druckdüse sich beim Endanschlag 0.3mm über der Druckplatte befindet, setzen Sie diesen Wert auf -0.3 (oder stellen Sie Ihren Endanschlag neu ein)."
 
-#: src/libslic3r/PrintConfig.cpp:2208
+#: src/libslic3r/PrintConfig.cpp:2351
 msgid "This vector saves required volumes to change from/to each tool used on the wipe tower. These values are used to simplify creation of the full purging volumes below."
 msgstr "Dieser Vektor speichert die erforderlichen Volumina für den Wechsel von/zu jedem am Reinigungsturm verwendeten Werkzeug. Diese Werte werden verwendet, um die Erstellung des vollen Reinigungsvolumens zu vereinfachen."
 
@@ -8263,82 +9453,96 @@ msgstr ""
 "\n"
 "Sie können %s entweder beenden und es mit einer neueren Version nochmals versuchen, oder Sie können die erstmalige Startkonfiguration nochmals wiederholen. In diesem Fall wird eine Sicherungskopie der aktuellen Konfiguration erstellt, bevor die mit dieser %s-Version kompatiblen Dateien installiert werden."
 
-#: src/libslic3r/PrintConfig.cpp:2458
+#: src/libslic3r/PrintConfig.cpp:2601
 msgid "This will apply a gamma correction to the rasterized 2D polygons. A gamma value of zero means thresholding with the threshold in the middle. This behaviour eliminates antialiasing without losing holes in polygons."
 msgstr "Dadurch wird eine Gammakorrektur auf die gerasterten 2D-Polygone angewendet. Ein Gamma-Wert von null bedeutet Schwellenwertbildung mit dem Schwellenwert in der Mitte. Dieses Verhalten eliminiert Antialiasing, ohne Löcher in Polygonen zu verlieren."
 
-#: src/libslic3r/PrintConfig.cpp:2081
+#: src/libslic3r/PrintConfig.cpp:2224
 msgid "Threads"
 msgstr "Threads"
 
-#: src/libslic3r/PrintConfig.cpp:2082
+#: src/libslic3r/PrintConfig.cpp:2225
 msgid "Threads are used to parallelize long-running tasks. Optimal threads number is slightly above the number of available cores/processors."
 msgstr "Threads werden benutzt, um mehrere zeitaufwendige Berechnungen gleichzeitig auszuführen. Die optimale Anzahl beträgt etwas mehr als die Anzahl der verfügbaren Kerne/Prozessoren."
 
-#: src/slic3r/GUI/Tab.cpp:2093
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235
+msgid "Threshold:"
+msgstr "Schwellwert:"
+
+#: src/slic3r/GUI/Tab.cpp:2263
 msgid "Tilt"
 msgstr "Kippen"
 
-#: src/slic3r/GUI/Tab.cpp:2094
+#: src/slic3r/GUI/Tab.cpp:2264
 msgid "Tilt time"
 msgstr "Kippzeit"
 
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
 #: src/slic3r/GUI/RammingChart.cpp:76
 msgid "Time"
 msgstr "Zeit"
 
-#: src/libslic3r/PrintConfig.cpp:687
+#: src/libslic3r/PrintConfig.cpp:723
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Zeit, in der die Druckerfirmware (oder die Multi-Material-Einheit 2.0) während eines Werkzeugwechsels (bei Ausführung des T-Codes) ein anderes Filament lädt. Diese Zeit wird vom G-Code Zeitschätzer zur Gesamtdruckzeit addiert."
 
-#: src/libslic3r/PrintConfig.cpp:702
+#: src/libslic3r/PrintConfig.cpp:738
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Zeit, in der die Druckerfirmware (oder die Multi-Material-Einheit 2.0) während eines Werkzeugwechsels (bei Ausführung des T-Codes) ein Filament entlädt. Diese Zeit wird vom G-Code Zeitschätzer zur Gesamtdruckzeit addiert."
 
-#: src/libslic3r/PrintConfig.cpp:2407
+#: src/libslic3r/PrintConfig.cpp:2550
 msgid "Time of the fast tilt"
 msgstr "Dauer des schnellen Kippens"
 
-#: src/libslic3r/PrintConfig.cpp:2416
+#: src/libslic3r/PrintConfig.cpp:2559
 msgid "Time of the slow tilt"
 msgstr "Dauer des langsamen Kippens"
 
-#: src/libslic3r/PrintConfig.cpp:641
+#: src/libslic3r/PrintConfig.cpp:677
 msgid "Time to wait after the filament is unloaded. May help to get reliable toolchanges with flexible materials that may need more time to shrink to original dimensions."
 msgstr "Wartezeit, nachdem das Filament entladen wurde. Dies kann zu zuverlässigeren Werkzeugwechseln beitragen bei flexiblen Materialien, die mehr Zeit zum Schrumpfen auf ihre ursprüngliche Größe brauchen."
 
-#: src/slic3r/GUI/Tab.cpp:966
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "to"
+msgstr "bis"
+
+#: src/slic3r/GUI/Tab.cpp:1284
 msgid "To do that please specify a new name for the preset."
 msgstr "Zur Ausführung geben Sie bitte einen neuen Namen für die Voreinstellung ein."
 
-#: src/slic3r/GUI/Plater.cpp:4014
+#: src/slic3r/GUI/Plater.cpp:3934
 msgid "To objects"
 msgstr "Zu Objekten"
 
-#: src/slic3r/GUI/Plater.cpp:4016
+#: src/slic3r/GUI/Plater.cpp:3936
 msgid "To parts"
 msgstr "Zu Teilen"
 
-#: src/slic3r/GUI/Tab.cpp:1756
+#: src/slic3r/Utils/Http.cpp:82
+msgid "To specify the system certificate store manually, please set the %1% environment variable to the correct CA bundle and restart the application."
+msgstr "Um den System-Zertifikatspeicher manuell anzugeben, setzen Sie bitte die Umgebungsvariable %1% auf das richtige CA-Bundle und starten Sie die Anwendung neu."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:360
 msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain."
 msgstr "Um eine benutzerdefinierte CA-Datei zu verwenden, importieren Sie bitte Ihre CA-Datei in den Zertifikatsspeicher / Schlüsselbund."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:271
 #, c-format
 msgid "Toggle %c axis mirroring"
 msgstr "Umschalten der Spiegelung der %c-Achse"
 
-#: src/libslic3r/Zipper.cpp:34
+#: src/libslic3r/miniz_extension.cpp:93
 msgid "too many files"
 msgstr "zu viele Dateien"
 
-#: src/libslic3r/SLAPrintSteps.cpp:190
-msgid "Too much overlapping holes."
+#: src/libslic3r/SLAPrintSteps.cpp:192
+msgid "Too many overlapping holes."
 msgstr "Zu viele überlappende Löcher."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:227 src/slic3r/GUI/GUI_Preview.cpp:335
-#: src/slic3r/GUI/GUI_Preview.cpp:519 src/slic3r/GUI/GUI_Preview.cpp:574
-#: src/slic3r/GUI/GUI_Preview.cpp:835 src/libslic3r/GCode/PreviewData.cpp:357
+#: src/slic3r/GUI/GCodeViewer.cpp:2241 src/slic3r/GUI/GUI_Preview.cpp:281
+#: src/slic3r/GUI/GUI_Preview.cpp:453 src/slic3r/GUI/GUI_Preview.cpp:693
+#: src/slic3r/GUI/GUI_Preview.cpp:786 src/slic3r/GUI/GUI_Preview.cpp:1270
+#: src/libslic3r/GCode/PreviewData.cpp:362
 msgid "Tool"
 msgstr "Werkzeug"
 
@@ -8346,51 +9550,64 @@ msgstr "Werkzeug"
 msgid "Tool #"
 msgstr "Werkzeug #"
 
-#: src/slic3r/GUI/Tab.cpp:2000 src/libslic3r/PrintConfig.cpp:2093
+#: src/slic3r/GUI/Tab.cpp:2189 src/libslic3r/PrintConfig.cpp:2236
 msgid "Tool change G-code"
 msgstr "G-Code für Werkzeugwechsel"
 
-#: src/slic3r/GUI/Tab.cpp:1491
+#: src/slic3r/GUI/GCodeViewer.cpp:2530 src/slic3r/GUI/GUI_Preview.cpp:1474
+msgid "Tool changes"
+msgstr "Werkzeugwechsel"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:1479
+msgid "Tool marker"
+msgstr "Werkzeugposition"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:223
+msgid "Tool position"
+msgstr "Werkzeugposition"
+
+#: src/slic3r/GUI/Tab.cpp:1837
 msgid "Toolchange parameters with single extruder MM printers"
 msgstr "Werkzeugwechsel-Parameter für MM-Drucker mit einem Extruder"
 
 #. TRN To be shown in the main menu View->Top
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:662 src/libslic3r/PrintConfig.cpp:2132
-#: src/libslic3r/PrintConfig.cpp:2141
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
+#: src/libslic3r/PrintConfig.cpp:2275 src/libslic3r/PrintConfig.cpp:2284
 msgid "Top"
 msgstr "Decke"
 
-#: src/slic3r/GUI/PresetHints.cpp:304
+#: src/slic3r/GUI/PresetHints.cpp:302
 msgid "Top / bottom shell thickness hint: Not available due to invalid layer height."
 msgstr "Hinweis zur Ober-/Bodenschalestärke: Nicht verfügbar wegen ungültiger Schichthöhe."
 
-#: src/libslic3r/PrintConfig.cpp:415
+#: src/libslic3r/PrintConfig.cpp:449
 msgid "Top fill pattern"
 msgstr "Deckenfüllmuster"
 
-#: src/slic3r/GUI/PresetHints.cpp:323
+#: src/slic3r/GUI/PresetHints.cpp:321
 msgid "Top is open."
 msgstr "Oben ist offen."
 
-#: src/slic3r/GUI/PresetHints.cpp:317
+#: src/slic3r/GUI/PresetHints.cpp:315
 msgid "Top shell is %1% mm thick for layer height %2% mm."
 msgstr "Die obere Schale ist %1% mm stark für eine Schichthöhe von %2% mm."
 
-#: src/slic3r/GUI/PresetHints.cpp:192
+#: src/slic3r/GUI/PresetHints.cpp:191
 msgid "top solid infill"
 msgstr "Oberes massives Infill"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:242 src/libslic3r/ExtrusionEntity.cpp:315
-#: src/libslic3r/PrintConfig.cpp:2105 src/libslic3r/PrintConfig.cpp:2117
+#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:319
+#: src/libslic3r/ExtrusionEntity.cpp:346 src/libslic3r/PrintConfig.cpp:2248
+#: src/libslic3r/PrintConfig.cpp:2260
 msgid "Top solid infill"
 msgstr "Oberes massives Infill"
 
-#: src/libslic3r/PrintConfig.cpp:2135
+#: src/libslic3r/PrintConfig.cpp:2278
 msgid "Top solid layers"
 msgstr "Obere massive Schichten"
 
-#: src/slic3r/GUI/MainFrame.cpp:662
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
 msgid "Top View"
 msgstr "Ansicht von oben"
 
@@ -8406,90 +9623,128 @@ msgstr "Gesamtes Rammvolumen"
 msgid "Total ramming time"
 msgstr "Gesamte Rammdauer"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:516
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:640
+msgid "Transfer"
+msgstr "Transfer"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:745
+msgid "Transfer the selected options to the newly selected preset \"%1%\"."
+msgstr "Übertragen der ausgewählten Optionen auf die neu gewählte Voreinstellung \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Transfer the selected settings to the newly selected preset."
+msgstr "Übertragen der gewählten Einstellungen auf die neu gewählte Voreinstellung."
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:561
 msgid "Translate"
-msgstr "Übersetzen"
+msgstr "Versetzen"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:300
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:282
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Translation"
-msgstr "Übersetzung"
+msgstr "Position"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:253 src/libslic3r/PrintConfig.cpp:2152
+#: src/slic3r/GUI/GCodeViewer.cpp:2489 src/slic3r/GUI/GUI_Preview.cpp:335
+#: src/slic3r/GUI/GUI_Preview.cpp:1471 src/libslic3r/PrintConfig.cpp:2295
 msgid "Travel"
 msgstr "Eilgang"
 
-#: src/libslic3r/PrintConfig.cpp:845
+#: src/libslic3r/PrintConfig.cpp:883
 msgid "Triangles"
 msgstr "Dreiecke"
 
-#: src/libslic3r/PrintConfig.cpp:3448
+#: src/libslic3r/PrintConfig.cpp:3647
 msgid "Try to repair any non-manifold meshes (this option is implicitly added whenever we need to slice the model to perform the requested action)."
 msgstr "Repariere alle ungeschlossenen Netze (diese Option wird implizit hinzugefügt, wenn wir das Modell slicen müssen, um die gewünschte Aktion ausführen zu können)."
 
-#: src/libslic3r/PrintConfig.cpp:1467
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:165
+msgid "Type here the name of your printer device"
+msgstr "Geben Sie hier den Namen Ihres Druckers ein"
+
+#: src/libslic3r/PrintConfig.cpp:1575
 msgid "Type of the printer."
 msgstr "Druckertyp."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013 src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/ConfigWizard.cpp:2524 src/slic3r/GUI/ConfigWizard.cpp:2526
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Type:"
 msgstr "Typ:"
 
-#: src/slic3r/GUI/Plater.cpp:3428
+#: src/slic3r/GUI/OpenGLManager.cpp:275
+#, c-format
+msgid ""
+"Unable to load the following shaders:\n"
+"%s"
+msgstr ""
+"Die folgenden Shader konnten nicht geladen werden:\n"
+"%s"
+
+#: src/slic3r/GUI/Plater.cpp:3233
 msgid "Unable to reload:"
 msgstr "Kann nicht nachgeladen werden:"
 
-#: src/libslic3r/Zipper.cpp:32
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:137
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:146
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:845
+msgid "Undef"
+msgstr "Undef"
+
+#: src/libslic3r/miniz_extension.cpp:91
 msgid "undefined error"
 msgstr "unbekannter Fehler"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/KBShortcutsDialog.cpp:130
-#: src/slic3r/GUI/MainFrame.cpp:581
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/KBShortcutsDialog.cpp:125
+#: src/slic3r/GUI/MainFrame.cpp:1187
 msgid "Undo"
 msgstr "Undo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Undo %1$d Action"
 msgid_plural "Undo %1$d Actions"
 msgstr[0] "Undo %1$d Aktion"
 msgstr[1] "Undo %1$d Aktionen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Undo History"
 msgstr "Undo Verlauf"
 
-#: src/libslic3r/Zipper.cpp:56
+#: src/libslic3r/miniz_extension.cpp:115
 msgid "unexpected decompressed size"
 msgstr "unerwartete dekomprimierte Größe"
 
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27
+#: src/slic3r/GUI/GUI_Preview.cpp:299 src/libslic3r/ExtrusionEntity.cpp:310
 msgid "Unknown"
 msgstr "Unbekannt"
 
-#: src/slic3r/Utils/Duet.cpp:82 src/slic3r/Utils/Duet.cpp:137
-#: src/slic3r/Utils/FlashAir.cpp:119 src/slic3r/Utils/FlashAir.cpp:140
-#: src/slic3r/Utils/FlashAir.cpp:156
+#: src/slic3r/Utils/Duet.cpp:84 src/slic3r/Utils/Duet.cpp:139
+#: src/slic3r/Utils/FlashAir.cpp:122 src/slic3r/Utils/FlashAir.cpp:143
+#: src/slic3r/Utils/FlashAir.cpp:159
 msgid "Unknown error occured"
 msgstr "Unbekannter Fehler aufgetreten"
 
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:178
+msgid "Unknown error occured during exporting G-code."
+msgstr "Unbekannter Fehler trat beim Exportieren von G-Code auf."
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:263
 msgid "unloaded"
 msgstr "entladen wird"
 
-#: src/libslic3r/PrintConfig.cpp:623
+#: src/libslic3r/PrintConfig.cpp:659
 msgid "Unloading speed"
 msgstr "Entladegeschwindigkeit"
 
-#: src/libslic3r/PrintConfig.cpp:632
+#: src/libslic3r/PrintConfig.cpp:668
 msgid "Unloading speed at the start"
 msgstr "Entladegeschwindigkeit zu Beginn"
 
-#: src/slic3r/GUI/Tab.cpp:3256
+#: src/slic3r/GUI/Tab.cpp:3693
 msgid "UNLOCKED LOCK"
 msgstr "OFFENES SCHLOSS"
 
-#: src/slic3r/GUI/Tab.cpp:3282
+#: src/slic3r/GUI/Tab.cpp:3719
 msgid ""
 "UNLOCKED LOCK icon indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
 "Click to reset all settings for current option group to the system (or default) values."
@@ -8497,7 +9752,7 @@ msgstr ""
 "Das Symbol GEÖFFNETES SCHLOSS zeigt an, dass einige Einstellungen geändert wurden und nicht mehr mit den System- (oder Standard-) Werte für die aktuelle Optionsgruppe identisch sind.\n"
 "Klicken Sie, um alle Einstellungen für die aktuelle Optionsgruppe auf die System- (oder Standard-) Werte zurückzusetzen."
 
-#: src/slic3r/GUI/Tab.cpp:3297
+#: src/slic3r/GUI/Tab.cpp:3734
 msgid ""
 "UNLOCKED LOCK icon indicates that the value was changed and is not equal to the system (or default) value.\n"
 "Click to reset current value to the system (or default) value."
@@ -8505,56 +9760,43 @@ msgstr ""
 "Das Symbol GEÖFFNETES SCHLOSS zeigt an, dass der Wert geändert wurde und nicht  mit der System- (oder Standard-) Einstellung identisch ist.\n"
 "Klicken Sie, um den aktuellen Wert auf die System- (oder Standard-) Einstellung zurückzusetzen."
 
-#: src/slic3r/GUI/Plater.cpp:5203
-#, c-format
-msgid "Unmounting successful. The device %s(%s) can now be safely removed from the computer."
-msgstr "Aushängen erfolgreich. Das Gerät %s(%s) kann nun sicher vom Computer entfernt werden."
-
-#: src/slic3r/GUI/GUI_Preview.cpp:255
-msgid "Unretractions"
-msgstr "Wiedereinzüge"
-
-#: src/slic3r/GUI/Tab.cpp:2947
-msgid "Unsaved Changes"
-msgstr "Nicht abgespeicherte Änderungen"
-
-#: src/slic3r/GUI/GUI_App.cpp:935
-msgid "Unsaved Presets"
-msgstr "Nicht abgespeicherte Voreinstellungen"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
 msgid "Unselect gizmo or clear selection"
 msgstr "Gizmo abwählen oder Auswahl löschen"
 
-#: src/libslic3r/Zipper.cpp:60
+#: src/libslic3r/miniz_extension.cpp:119
 msgid "unsupported central directory size"
 msgstr "nicht unterstützte zentrale Verzeichnisgröße"
 
-#: src/libslic3r/Zipper.cpp:40
+#: src/libslic3r/miniz_extension.cpp:99
 msgid "unsupported encryption"
 msgstr "nicht unterstützte Verschlüsselung"
 
-#: src/libslic3r/Zipper.cpp:42
+#: src/libslic3r/miniz_extension.cpp:101
 msgid "unsupported feature"
 msgstr "nicht unterstützte Funktion"
 
-#: src/libslic3r/Zipper.cpp:38
+#: src/libslic3r/miniz_extension.cpp:97
 msgid "unsupported method"
 msgstr "nicht unterstützte Methode"
 
-#: src/libslic3r/Zipper.cpp:50
+#: src/libslic3r/miniz_extension.cpp:109
 msgid "unsupported multidisk archive"
 msgstr "nicht unterstütztes Multidisk-Archiv"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:292
+#: src/slic3r/GUI/OpenGLManager.cpp:267
 msgid "Unsupported OpenGL version"
 msgstr "Nicht unterstützte OpenGL Version"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3420
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3883
 msgid "Unsupported selection"
 msgstr "Nicht unterstützte Auswahl"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:955
+#: src/slic3r/GUI/GCodeViewer.cpp:2183
+msgid "up to"
+msgstr "bis zu"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:961
 #, c-format
 msgid "up to %.2f mm"
 msgstr "bis zu %.2f mm"
@@ -8563,15 +9805,15 @@ msgstr "bis zu %.2f mm"
 msgid "Update available"
 msgstr "Ein Update ist verfügbar"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:779 src/slic3r/GUI/Preferences.cpp:80
+#: src/slic3r/GUI/ConfigWizard.cpp:1138 src/slic3r/GUI/Preferences.cpp:97
 msgid "Update built-in Presets automatically"
 msgstr "Eingebaute Voreinstellungen automatisch aktualisieren"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Updates"
 msgstr "Updates"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:786
+#: src/slic3r/GUI/ConfigWizard.cpp:1145
 msgid "Updates are never applied without user's consent and never overwrite user's customized settings."
 msgstr "Updates werden niemals ohne das Einverständnis des Benutzers ausgeführt, und werden niemals die vom Benutzer geänderten Einstellungen überschreiben."
 
@@ -8579,7 +9821,7 @@ msgstr "Updates werden niemals ohne das Einverständnis des Benutzers ausgeführ
 msgid "Upgrade"
 msgstr "Aktualisieren"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Upload a firmware image into an Arduino based printer"
 msgstr "Lade ein Firmware Image zu einem Arduino-basierten Drucker hoch"
 
@@ -8595,101 +9837,118 @@ msgstr "Transferiere zum Druckerhost mit dem Dateinamen:"
 msgid "Uploading"
 msgstr "Lade hoch"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
 msgid "Upper Layer"
 msgstr "Obere Schicht"
 
-#: src/slic3r/GUI/Tab.cpp:1900
-msgid "USB/Serial connection"
-msgstr "USB/Serielle Verbindung"
-
-#: src/libslic3r/PrintConfig.cpp:1662
-msgid "USB/serial port for printer connection."
-msgstr "USB-/serielle Schnittstelle für den Druckeranschluss."
-
-#: src/slic3r/GUI/DoubleSlider.cpp:1147
+#: src/slic3r/GUI/DoubleSlider.cpp:1276
 msgid "Use another extruder"
 msgstr "Einen anderen Extruder verwenden"
 
-#: src/slic3r/GUI/Preferences.cpp:143
+#: src/slic3r/GUI/Preferences.cpp:220
 msgid "Use custom size for toolbar icons"
 msgstr "Benutzerdefinierte Größe für Symbolleistensymbole verwenden"
 
-#: src/libslic3r/PrintConfig.cpp:2161
+#: src/slic3r/GUI/Preferences.cpp:268
+msgid "Use environment map"
+msgstr "Environment Map verwenden"
+
+#: src/libslic3r/PrintConfig.cpp:2304
 msgid "Use firmware retraction"
 msgstr "Firmware-Einzug aktivieren"
 
+#: src/slic3r/GUI/ImGuiWrapper.cpp:800 src/slic3r/GUI/Search.cpp:464
+msgid "Use for search"
+msgstr "Zur Suche verwenden"
+
+#: src/libslic3r/PrintConfig.cpp:1218
+msgid "Use for time estimate"
+msgstr "Zur Zeitschätzung verwenden"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:42
 msgid "Use forward slashes ( / ) as a directory separator if needed."
 msgstr "Benutzen Sie den Schrägstrich (/) als Verzeichnistrenner falls nötig."
 
-#: src/slic3r/GUI/Preferences.cpp:126
+#: src/slic3r/GUI/Preferences.cpp:191
 msgid "Use free camera"
 msgstr "Benutze freie Kamera"
 
-#: src/libslic3r/PrintConfig.cpp:2780
+#: src/slic3r/GUI/ConfigWizard.cpp:1188
+msgid "Use inches"
+msgstr "Zoll verwenden"
+
+#: src/libslic3r/PrintConfig.cpp:2944
 msgid "Use pad"
 msgstr "Grundschicht benutzen"
 
-#: src/slic3r/GUI/Preferences.cpp:119
+#: src/slic3r/GUI/Preferences.cpp:184
 msgid "Use perspective camera"
 msgstr "Benutze perspektivische Kamera"
 
-#: src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2311
 msgid "Use relative E distances"
 msgstr "Relative Abstände für Extrusion benutzen"
 
-#: src/slic3r/GUI/Preferences.cpp:104
+#: src/slic3r/GUI/Preferences.cpp:135
 msgid "Use Retina resolution for the 3D scene"
 msgstr "Verwende Retina Auflösung für die 3D Anzeige"
 
-#: src/libslic3r/PrintConfig.cpp:540
+#: src/libslic3r/PrintConfig.cpp:576
 msgid "Use this option to set the axis letter associated to your printer's extruder (usually E but some printers use A)."
 msgstr "Verwenden Sie diese Einstellung, um den Buchstaben der Achse anzugeben, die mit Ihrem Extruder verknüpft ist (normalerweise E, aber bei manchen Druckern ist dies A)."
 
-#: src/libslic3r/PrintConfig.cpp:1893
+#: src/libslic3r/PrintConfig.cpp:2035
 msgid "Use this setting to rotate the support material pattern on the horizontal plane."
 msgstr "Verwenden Sie diese Einstellung, um das Muster für die Stützstrukturen auf der horizontalen Ebene zu drehen."
 
-#: src/libslic3r/PrintConfig.cpp:2175
+#: src/libslic3r/PrintConfig.cpp:2318
 msgid "Use volumetric E"
 msgstr "Volumetrisches E benutzen"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1171
+#: src/slic3r/GUI/DoubleSlider.cpp:1298
 msgid "used"
 msgstr "genutzt"
 
-#: src/slic3r/GUI/Plater.cpp:237
+#: src/slic3r/GUI/Plater.cpp:243
 msgid "Used Filament (g)"
 msgstr "Filamentbedarf (g)"
 
-#: src/slic3r/GUI/Plater.cpp:235 src/slic3r/GUI/Plater.cpp:1229
+#: src/slic3r/GUI/Plater.cpp:1141
+msgid "Used Filament (in)"
+msgstr "Filamentbedarf (Zoll)"
+
+#: src/slic3r/GUI/Plater.cpp:1153
+msgid "Used Filament (in³)"
+msgstr "Filamentbedarf (Zoll³)"
+
+#: src/slic3r/GUI/Plater.cpp:241 src/slic3r/GUI/Plater.cpp:1141
 msgid "Used Filament (m)"
 msgstr "Filamentbedarf (Meter)"
 
-#: src/slic3r/GUI/Plater.cpp:236
+#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1153
 msgid "Used Filament (mm³)"
 msgstr "Filamentbedarf (mm³)"
 
-#: src/slic3r/GUI/Plater.cpp:1191
+#: src/slic3r/GUI/Plater.cpp:1100
 msgid "Used Material (ml)"
 msgstr "Benutztes Material (ml)"
 
-#: src/slic3r/GUI/Plater.cpp:238
+#: src/slic3r/GUI/Plater.cpp:244
 msgid "Used Material (unit)"
 msgstr "Benutztes Material (Einheit)"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 src/libslic3r/PrintConfig.cpp:132
 msgid "User"
 msgstr "Benutzer"
 
-#: src/slic3r/GUI/Preset.cpp:1168 src/slic3r/GUI/Preset.cpp:1288
-#: src/slic3r/GUI/PresetBundle.cpp:1677
+#: src/slic3r/GUI/PresetComboBoxes.cpp:230
+#: src/slic3r/GUI/PresetComboBoxes.cpp:778
+#: src/slic3r/GUI/PresetComboBoxes.cpp:934
 msgid "User presets"
 msgstr "Benutzerdefinierte Voreinstellungen"
 
-#: src/libslic3r/Zipper.cpp:90
+#: src/libslic3r/miniz_extension.cpp:149
 msgid "validation failed"
 msgstr "Überprüfung fehlgeschlagen"
 
@@ -8701,31 +9960,31 @@ msgstr "Der Wert ist gleich wie die Systemeinstellung"
 msgid "Value was changed and is not equal to the system value or the last saved preset"
 msgstr "Der Wert wurde geändert und ist nicht gleich wie die Systemeinstellung oder die letzte abgespeicherte Voreinstellung"
 
-#: src/slic3r/GUI/Tab.cpp:2202
+#: src/slic3r/GUI/Tab.cpp:2371
 msgid "Values in this column are for Normal mode"
 msgstr "Werte in dieser Spalte sind für den normalen Modus"
 
-#: src/slic3r/GUI/Tab.cpp:2208
+#: src/slic3r/GUI/Tab.cpp:2377
 msgid "Values in this column are for Stealth mode"
 msgstr "Werte in dieser Spalte sind für den Stealth Modus"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:234 src/slic3r/GUI/GLCanvas3D.cpp:4573
+#: src/slic3r/GUI/GLCanvas3D.cpp:231 src/slic3r/GUI/GLCanvas3D.cpp:4978
 msgid "Variable layer height"
 msgstr "Variable Schichthöhe"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1709
+#: src/slic3r/GUI/GLCanvas3D.cpp:1786
 msgid "Variable layer height - Adaptive"
 msgstr "Variable Schichthöhe - Adaptiv"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:599
+#: src/slic3r/GUI/GLCanvas3D.cpp:565
 msgid "Variable layer height - Manual edit"
 msgstr "Variable Schichthöhe - Manuell bearbeiten"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1701
+#: src/slic3r/GUI/GLCanvas3D.cpp:1778
 msgid "Variable layer height - Reset"
 msgstr "Variable Schichthöhe - Zurücksetzen"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1717
+#: src/slic3r/GUI/GLCanvas3D.cpp:1794
 msgid "Variable layer height - Smooth all"
 msgstr "Variable Schichthöhe - Alles glätten"
 
@@ -8733,19 +9992,20 @@ msgstr "Variable Schichthöhe - Alles glätten"
 msgid "variants"
 msgstr "Varianten"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:971
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1289
 msgid "vendor"
 msgstr "Hersteller"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:565
+#: src/slic3r/GUI/ConfigWizard.cpp:589
 msgid "Vendor:"
 msgstr "Hersteller:"
 
-#: src/libslic3r/PrintConfig.cpp:928
+#: src/libslic3r/PrintConfig.cpp:972
 msgid "Verbose G-code"
 msgstr "Ausführlicher G-Code"
 
-#: src/slic3r/GUI/AboutDialog.cpp:231 src/slic3r/GUI/MainFrame.cpp:64
+#: src/slic3r/GUI/AboutDialog.cpp:256 src/slic3r/GUI/GUI_App.cpp:239
+#: src/slic3r/GUI/MainFrame.cpp:164
 msgid "Version"
 msgstr "Version"
 
@@ -8753,24 +10013,36 @@ msgstr "Version"
 msgid "version"
 msgstr "Version"
 
-#: src/slic3r/GUI/Tab.cpp:1053
+#: src/slic3r/GUI/Tab.cpp:1375
 msgid "Vertical shells"
 msgstr "Vertikale Konturhüllen"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:218
+#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
 msgid "View"
 msgstr "Ansicht"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:813
+#: src/slic3r/GUI/ConfigWizard.cpp:1172
 msgid "View mode"
 msgstr "Anzeigemodus"
 
-#: src/libslic3r/SLAPrintSteps.cpp:413 src/libslic3r/SLAPrintSteps.cpp:422
-#: src/libslic3r/SLAPrintSteps.cpp:461
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:666
+msgid ""
+"Visit \"Preferences\" and check \"%1%\"\n"
+"to be asked about unsaved changes again."
+msgstr ""
+"Besuchen Sie \"Präferenzen\" und überprüfen Sie \"%1%\",\n"
+"um über nicht gespeicherte Änderungen wieder gefragt zu werden."
+
+#: src/libslic3r/PrintConfig.cpp:3553
+msgid "Visualize an already sliced and saved G-code"
+msgstr "Visualisierung eines bereits gesliceten und gespeicherten G-Codes"
+
+#: src/libslic3r/SLAPrintSteps.cpp:411 src/libslic3r/SLAPrintSteps.cpp:420
+#: src/libslic3r/SLAPrintSteps.cpp:459
 msgid "Visualizing supports"
 msgstr "Anzeigen der Stützstrukturen"
 
-#: src/slic3r/GUI/Plater.cpp:161
+#: src/slic3r/GUI/Plater.cpp:167
 msgid "Volume"
 msgstr "Volumen"
 
@@ -8778,23 +10050,23 @@ msgstr "Volumen"
 msgid "Volume to purge (mm³) when the filament is being"
 msgstr "Volumen zum Reinigen (mm³) wenn das Filament ist"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Volumes in Object reordered"
 msgstr "Volumen in Objekt neu angeordnet"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Volumetric"
 msgstr "Volumetrisch"
 
-#: src/slic3r/GUI/Tab.cpp:1591
+#: src/slic3r/GUI/Tab.cpp:1930
 msgid "Volumetric flow hints not available"
 msgstr "Hinweise zum Volumenstrom nicht verfügbar"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:226
+#: src/slic3r/GUI/GUI_Preview.cpp:280
 msgid "Volumetric flow rate"
 msgstr "Volumetrische Flussrate"
 
-#: src/libslic3r/GCode/PreviewData.cpp:355
+#: src/slic3r/GUI/GCodeViewer.cpp:2240 src/libslic3r/GCode/PreviewData.cpp:360
 msgid "Volumetric flow rate (mm³/s)"
 msgstr "Volumetrische Flussrate (mm³/s)"
 
@@ -8802,151 +10074,166 @@ msgstr "Volumetrische Flussrate (mm³/s)"
 msgid "Volumetric speed"
 msgstr "Volumengeschwindigkeit"
 
-#: src/libslic3r/PrintConfig.cpp:2915
+#: src/libslic3r/PrintConfig.cpp:3079
 msgid "Wall thickness"
 msgstr "Wandstärke"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1270 src/slic3r/GUI/GUI.cpp:251
-#: src/slic3r/GUI/Tab.cpp:3084 src/slic3r/GUI/WipeTowerDialog.cpp:45
-#: src/slic3r/GUI/WipeTowerDialog.cpp:366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1129 src/slic3r/GUI/GUI.cpp:256
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:478
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:502
+#: src/slic3r/GUI/WipeTowerDialog.cpp:45 src/slic3r/GUI/WipeTowerDialog.cpp:366
 msgid "Warning"
 msgstr "Warnung"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:431
+#: src/slic3r/GUI/NotificationManager.cpp:672
+#: src/slic3r/GUI/NotificationManager.cpp:687
+#: src/slic3r/GUI/NotificationManager.cpp:702
+msgid "WARNING:"
+msgstr "WARNUNG:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:449
 msgid "Welcome"
 msgstr "Willkommen"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:427
+#: src/slic3r/GUI/ConfigWizard.cpp:445
 #, c-format
 msgid "Welcome to the %s Configuration Assistant"
 msgstr "Willkommen zum %s Konfigurations-Assistent"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:429
+#: src/slic3r/GUI/ConfigWizard.cpp:447
 #, c-format
 msgid "Welcome to the %s Configuration Wizard"
 msgstr "Willkommen zum %s Konfigurations-Assistent"
 
-#: src/slic3r/GUI/Preferences.cpp:97
+#: src/slic3r/GUI/SavePresetDialog.cpp:310
+msgid "What would you like to do with \"%1%\" preset after saving?"
+msgstr "Was möchten Sie mit der Voreinstellung \"%1%\" nach dem Speichern machen?"
+
+#: src/slic3r/GUI/Preferences.cpp:114
 msgid "When checked, the print and filament presets are shown in the preset editor even if they are marked as incompatible with the active printer"
 msgstr "Falls angekreuzt, werden Voreinstellungen für Druck und Filament im Voreinstellungseditor auch dann angezeigt, wenn sie als inkompatibel zum aktiven Drucker gekennzeichnet wurden"
 
-#: src/slic3r/GUI/PresetHints.cpp:224
+#: src/slic3r/GUI/Preferences.cpp:156
+msgid "When closing the application, always ask for unsaved changes"
+msgstr "Wenn Sie die Anwendung schließen, immer nach nicht gespeicherten Änderungen fragen"
+
+#: src/slic3r/GUI/PresetHints.cpp:223
 msgid "when printing"
 msgstr "während dem Druck"
 
-#: src/libslic3r/PrintConfig.cpp:253
+#: src/libslic3r/PrintConfig.cpp:287
 msgid "When printing multi-material objects, this settings will make Slic3r to clip the overlapping object parts one by the other (2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc)."
 msgstr "Wenn Multi-Material-Objekte gedruckt werden, wird Slic3r mit diesen Einstellungen einen überlappenden Teil des Objekts durch den anderen einschränken (zweiter Teil wird durch den ersten Teil eingeschränkt, dritter Teil wird durch den ersten und zweiten eingeschränkt usw.)."
 
-#: src/libslic3r/PrintConfig.cpp:305
+#: src/libslic3r/PrintConfig.cpp:339
 msgid "When printing multiple objects or copies, this feature will complete each object before moving onto next one (and starting it from its bottom layer). This feature is useful to avoid the risk of ruined prints. Slic3r should warn and prevent you from extruder collisions, but beware."
 msgstr "Wenn mehrere Objekte oder Kopien gedruckt werden, wird bei dieser Einstellung jedes Objekt vollständig gedruckt, bevor das nächste (angefangen mit der Bodenschicht) begonnen wird. Diese Einstellung ist nützlich, um Fehldrucke zu vermeiden. PrusaSlicer sollte vor Extruderkollisionen warnen und diese verhindern, aber seien Sie trotzdem aufmerksam."
 
-#: src/libslic3r/PrintConfig.cpp:891
+#: src/libslic3r/PrintConfig.cpp:933
 msgid "When printing with very low layer heights, you might still want to print a thicker bottom layer to improve adhesion and tolerance for non perfect build plates. This can be expressed as an absolute value or as a percentage (for example: 150%) over the default layer height."
 msgstr "Wenn mit sehr kleinen Schichthöhen gedruckt wird, möchten Sie vielleicht trotzdem eine stärkere Bodenschicht drucken, um die Haftung sowie die Toleranz bei nicht perfekt ebenen Druckplatten zu verbessern. Dieser Wert kann als Absolutwert oder als Prozentwert (z.B. 150%) der Standardschichthöhe angegeben werden."
 
-#: src/libslic3r/PrintConfig.cpp:1553
+#: src/libslic3r/PrintConfig.cpp:1661
 msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Wenn der Einzug vor dem Werkzeugwechsel ausgelöst wird, wird das Filament um diese Länge eingezogen. (Die Länge wird am unverarbeiteten Filament vor dem Extruder gemessen)."
 
-#: src/libslic3r/PrintConfig.cpp:1545
+#: src/libslic3r/PrintConfig.cpp:1653
 msgid "When retraction is triggered, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Wenn der Einzug ausgelöst wird, wird das Filament um diese Länge eingezogen.  (Die Länge wird am unverarbeiteten Filament vor dem Extruder gemessen)."
 
-#: src/libslic3r/PrintConfig.cpp:1391
+#: src/libslic3r/PrintConfig.cpp:1499
 msgid "When set to zero, the distance the filament is moved from parking position during load is exactly the same as it was moved back during unload. When positive, it is loaded further,  if negative, the loading move is shorter than unloading."
 msgstr "Wenn auf null gesetzt, ist der Weg, den das Filament während der Beladung aus der Parkposition zurücklegt, genau der gleiche wie beim Entladen. Im positiven Fall wird sie weiter geladen, im negativen Fall ist die Ladebewegung kürzer als die Entladung."
 
-#: src/libslic3r/PrintConfig.cpp:1238
+#: src/libslic3r/PrintConfig.cpp:1346
 msgid "When setting other speed settings to 0 Slic3r will autocalculate the optimal speed in order to keep constant extruder pressure. This experimental setting is used to set the highest print speed you want to allow."
 msgstr "Wenn andere Geschwindigkeitseinstellungen auf null gesetzt wurden, wird PrusaSlicer die optimale Geschwindigkeit automatisch berechnen, um den Extruderdruck konstant zu halten. Diese experimentelle Einstellung erlaubt Ihnen, die höchste zulässige Druckgeschwindigkeit anzugeben."
 
-#: src/libslic3r/PrintConfig.cpp:1597
+#: src/libslic3r/PrintConfig.cpp:1705
 msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament."
 msgstr "Wenn der Einzug nach dem Werkzeugwechsel kompensiert wurde, wird der Extruder diese zusätzliche Menge an Filament ausgeben."
 
-#: src/libslic3r/PrintConfig.cpp:1589
+#: src/libslic3r/PrintConfig.cpp:1697
 msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed."
 msgstr "Wenn der Einzug nach der Zwischenbewegung kompensiert wurde, wird der Extruder diese zusätzliche Menge an Filament ausgeben. Diese Einstellung wird selten benötigt."
 
-#: src/slic3r/GUI/Tab.cpp:3263
+#: src/slic3r/GUI/Tab.cpp:3700
 msgid "WHITE BULLET"
 msgstr "WEISSER PUNKT"
 
-#: src/slic3r/GUI/Tab.cpp:3285
+#: src/slic3r/GUI/Tab.cpp:3722
 msgid "WHITE BULLET icon indicates a non system (or non default) preset."
 msgstr "Das Symbol mit dem WEISSEN PUNKT zeigt eine Nicht-System- (oder nicht standardmäßige) Voreinstellung an."
 
-#: src/slic3r/GUI/Tab.cpp:3288
+#: src/slic3r/GUI/Tab.cpp:3725
 msgid "WHITE BULLET icon indicates that the settings are the same as in the last saved preset for the current option group."
 msgstr "Das Symbol WEISSER PUNKT zeigt an, dass die Einstellungen dieselben sind wie in der zuletzt gespeicherten Voreinstellung für die aktuelle Optionsgruppe."
 
-#: src/slic3r/GUI/Tab.cpp:3303
+#: src/slic3r/GUI/Tab.cpp:3740
 msgid "WHITE BULLET icon indicates that the value is the same as in the last saved preset."
 msgstr "Das Symbol WEISSER PUNKT zeigt an, dass der Wert identisch ist mit demjenigen in der zuletzt gespeicherten Voreinstellung."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:223 src/libslic3r/PrintConfig.cpp:2238
+#: src/slic3r/GUI/GUI_Preview.cpp:277 src/libslic3r/PrintConfig.cpp:2381
 msgid "Width"
 msgstr "Breite"
 
-#: src/libslic3r/GCode/PreviewData.cpp:349
+#: src/slic3r/GUI/GCodeViewer.cpp:2237 src/libslic3r/GCode/PreviewData.cpp:354
 msgid "Width (mm)"
 msgstr "Breite (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:2640
+#: src/libslic3r/PrintConfig.cpp:2783
 msgid "Width from the back sphere center to the front sphere center"
 msgstr "Abstand von der Mitte der hinteren Kugel bis zur Mitte der vorderen Kugel"
 
-#: src/libslic3r/PrintConfig.cpp:2239
+#: src/libslic3r/PrintConfig.cpp:2382
 msgid "Width of a wipe tower"
 msgstr "Breite des Reinigungsturms"
 
-#: src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3055
 msgid "Width of the connector sticks which connect the object and the generated pad."
 msgstr "Breite der Verbindungsstäbe, die das Objekt und die erzeugte Grundschicht verbinden."
 
-#: src/libslic3r/PrintConfig.cpp:2354
+#: src/libslic3r/PrintConfig.cpp:2497
 msgid "Width of the display"
 msgstr "Displaybreite"
 
-#: src/slic3r/GUI/PresetHints.cpp:48
+#: src/slic3r/GUI/PresetHints.cpp:47
 msgid "will always run at %1%%%"
 msgstr "wird immer mit %1%%% laufen"
 
-#: src/slic3r/GUI/PresetHints.cpp:55
+#: src/slic3r/GUI/PresetHints.cpp:54
 msgid "will be turned off."
 msgstr "wird abgeschaltet."
 
-#: src/libslic3r/PrintConfig.cpp:2441
+#: src/libslic3r/PrintConfig.cpp:2584
 msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
 msgstr "Vergrößert oder verringert die geslicten 2D-Polygone entsprechend dem Vorzeichen der Korrektur."
 
-#: src/libslic3r/PrintConfig.cpp:2261
+#: src/libslic3r/PrintConfig.cpp:2404
 msgid "Wipe into this object"
 msgstr "Dieses Objekt zum Reinigen verwenden"
 
-#: src/libslic3r/PrintConfig.cpp:2253
+#: src/libslic3r/PrintConfig.cpp:2396
 msgid "Wipe into this object's infill"
 msgstr "Das Infill dieses Objekts zum Reinigen verwenden"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101
-#: src/slic3r/GUI/GUI_ObjectList.cpp:619 src/libslic3r/PrintConfig.cpp:2252
-#: src/libslic3r/PrintConfig.cpp:2260
+#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:99
+#: src/slic3r/GUI/GUI_ObjectList.cpp:658 src/libslic3r/PrintConfig.cpp:2395
+#: src/libslic3r/PrintConfig.cpp:2403
 msgid "Wipe options"
 msgstr "Wischoptionen"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:248 src/slic3r/GUI/Tab.cpp:1191
-#: src/libslic3r/ExtrusionEntity.cpp:321
+#: src/slic3r/GUI/GUI_Preview.cpp:313 src/slic3r/GUI/Tab.cpp:1521
+#: src/libslic3r/ExtrusionEntity.cpp:326 src/libslic3r/ExtrusionEntity.cpp:360
 msgid "Wipe tower"
 msgstr "Reinigungsturm"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "wipe tower"
 msgstr "Reinigungsturm"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:120
-#: src/slic3r/GUI/ConfigManipulation.cpp:140
+#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:139
 msgid "Wipe Tower"
 msgstr "Reinigungsturm"
 
@@ -8954,36 +10241,36 @@ msgstr "Reinigungsturm"
 msgid "Wipe tower - Purging volume adjustment"
 msgstr "Reinigungsturm - Anpassung des Reinigungsvolumens"
 
-#: src/slic3r/GUI/Tab.cpp:1488
+#: src/slic3r/GUI/Tab.cpp:1834
 msgid "Wipe tower parameters"
 msgstr "Reinigungsturm Parameter"
 
-#: src/libslic3r/PrintConfig.cpp:2245
+#: src/libslic3r/PrintConfig.cpp:2388
 msgid "Wipe tower rotation angle"
 msgstr "Rotationswinkel des Reinigungsturms"
 
-#: src/libslic3r/PrintConfig.cpp:2246
+#: src/libslic3r/PrintConfig.cpp:2389
 msgid "Wipe tower rotation angle with respect to x-axis."
 msgstr "Rotationswinkel des Reinigungsturms bezogen auf die X-Achse."
 
-#: src/libslic3r/PrintConfig.cpp:2193
+#: src/libslic3r/PrintConfig.cpp:2336
 msgid "Wipe while retracting"
 msgstr "Während Einzug reinigen"
 
-#: src/slic3r/GUI/PresetHints.cpp:225
+#: src/slic3r/GUI/PresetHints.cpp:224
 msgid "with a volumetric rate"
 msgstr "mit einer Volumenrate von"
 
-#: src/libslic3r/PrintConfig.cpp:1530
+#: src/libslic3r/PrintConfig.cpp:1638
 msgid "With bowden extruders, it may be wise to do some amount of quick retract before doing the wipe movement."
 msgstr "Bei Bowden-Extrudern kann es ratsam sein, vor der Reinigungsbewegung einen kurzen Einzug auszuführen."
 
-#: src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2198
 msgid "With sheath around the support"
 msgstr "Mit Umhüllung der Stützen"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:62
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:105
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:68
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:111
 msgid "World coordinates"
 msgstr "Weltkoordinaten"
 
@@ -9001,84 +10288,100 @@ msgstr ""
 "\n"
 "Aktualisierte Konfigurationssammlungen:"
 
-#: src/libslic3r/Zipper.cpp:92
+#: src/libslic3r/miniz_extension.cpp:151
 msgid "write calledback failed"
 msgstr "Schreibabruf fehlgeschlagen"
 
-#: src/libslic3r/PrintConfig.cpp:3382
+#: src/libslic3r/PrintConfig.cpp:3581
 msgid "Write information about the model to the console."
 msgstr "Schreibt Informationen über das Modell auf die Konsole."
 
-#: src/slic3r/Utils/Duet.cpp:131
+#: src/slic3r/Utils/Duet.cpp:133
 msgid "Wrong password"
 msgstr "Ungültiges Kennwort"
 
-#: src/libslic3r/PrintConfig.cpp:2225
+#: src/libslic3r/PrintConfig.cpp:2368
 msgid "X coordinate of the left front corner of a wipe tower"
 msgstr "X-Koordinate der linken vorderen Ecke des Reinigungsturms"
 
-#: src/libslic3r/PrintConfig.cpp:1879
+#: src/libslic3r/PrintConfig.cpp:2021
 msgid "XY separation between an object and its support"
 msgstr "XY-Abstand zwischen einem Objekt und seinen Stützen"
 
-#: src/libslic3r/PrintConfig.cpp:1881
+#: src/libslic3r/PrintConfig.cpp:2023
 msgid "XY separation between an object and its support. If expressed as percentage (for example 50%), it will be calculated over external perimeter width."
 msgstr "XY-Abstand zwischen einem Objekt und seinen Stützen. Falls in Prozenten angegeben (z.B. 50%), wird der Abstand von der Breite der Außenkontur ausgehend berechnet."
 
-#: src/libslic3r/PrintConfig.cpp:2275
+#: src/libslic3r/PrintConfig.cpp:2418
 msgid "XY Size Compensation"
 msgstr "XY-Größenausgleich"
 
-#: src/libslic3r/PrintConfig.cpp:2232
+#: src/libslic3r/PrintConfig.cpp:2375
 msgid "Y coordinate of the left front corner of a wipe tower"
 msgstr "Y-Koordinate der linken vorderen Ecke des Reinigungsturms"
 
-#: src/slic3r/GUI/Plater.cpp:1170
+#: src/slic3r/GUI/Plater.cpp:1079
 msgid "Yes"
 msgstr "Ja"
 
-#: src/libslic3r/PrintConfig.cpp:1317
+#: src/slic3r/GUI/Plater.cpp:1405
+msgid "You can open only one .gcode file at a time."
+msgstr "Sie können immer nur eine .gcode-Datei gleichzeitig öffnen."
+
+#: src/libslic3r/PrintConfig.cpp:1425
 msgid "You can put here your personal notes. This text will be added to the G-code header comments."
 msgstr "Sie können hier Ihre persönlichen Notizen eingeben.  Der Text wird dem Header vom G-Code hinzugefügt."
 
-#: src/libslic3r/PrintConfig.cpp:589
+#: src/libslic3r/PrintConfig.cpp:625
 msgid "You can put your notes regarding the filament here."
 msgstr "Sie können Ihre Notizen zum Filament hier eingeben."
 
-#: src/libslic3r/PrintConfig.cpp:1473
+#: src/libslic3r/PrintConfig.cpp:1581
 msgid "You can put your notes regarding the printer here."
 msgstr "Sie können Ihre Bemerkungen zum Drucker hier eingeben."
 
-#: src/libslic3r/PrintConfig.cpp:2579
+#: src/libslic3r/PrintConfig.cpp:2722
 msgid "You can put your notes regarding the SLA print material here."
 msgstr "Sie können Ihre Notizen zum SLA Druckmaterial hier eingeben."
 
-#: src/libslic3r/PrintConfig.cpp:360
+#: src/libslic3r/PrintConfig.cpp:394
 msgid "You can set this to a positive value to disable fan at all during the first layers, so that it does not make adhesion worse."
 msgstr "Sie können einen positiven Wert eingeben, um den Lüfter vollständig für die ersten Schichten auszuschalten, damit er die Haftung nicht beeinträchtigt."
 
-#: src/libslic3r/PrintConfig.cpp:1364
+#: src/libslic3r/PrintConfig.cpp:1472
 msgid "You can use all configuration options as variables inside this template. For example: [layer_height], [fill_density] etc. You can also use [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename], [input_filename_base]."
 msgstr "Sie können alle Konfigurationsoptionen als Variablen in dieser Vorlage benutzen.   Zum Beispiel: [layer_height], [fill_density] usw. Sie können auch [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename], und [input_filename_base] benutzen."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3546
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4009
 msgid "You can't change a type of the last solid part of the object."
 msgstr "Sie können nicht die Art des letzten soliden Teils des Objektes ändern."
 
-#: src/slic3r/GUI/Plater.cpp:2390
+#: src/slic3r/GUI/Plater.cpp:2352
 #, c-format
 msgid "You can't to add the object(s) from %s because of one or some of them is(are) multi-part"
 msgstr "Sie können die Objekte aus %s nicht hinzufügen, weil eines oder einige von ihnen mehrteilig ist (sind)"
 
-#: src/slic3r/GUI/Plater.cpp:2311
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2254
 msgid "You cannot load SLA project with a multi-part object on the bed"
 msgstr "Sie können kein SLA-Projekt mit einem mehrteiligen Objekt auf das Druckbett laden"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:578
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:625
 msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
 msgstr "Sie können den nichtgleichmäßigen Skalierungsmodus nicht für mehrere Objekte/Teileauswahlen verwenden"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
+#: src/slic3r/GUI/SavePresetDialog.cpp:277
+msgid ""
+"You have selected physical printer \"%1%\" \n"
+"with related printer preset \"%2%\""
+msgstr ""
+"Sie haben den physischen Drucker \"%1%\" ausgewählt \n"
+"mit der zugehörigen Druckervoreinstellung \"%2%\"."
+
+#: src/slic3r/GUI/GUI_App.cpp:1078
+msgid "You have the following presets with saved options for \"Print Host upload\""
+msgstr "Sie haben die folgenden Voreinstellungen mit gespeicherten Optionen für \"Hochladen zum Druckhost\""
+
+#: src/slic3r/GUI/OpenGLManager.cpp:262
 msgid "You may need to update your graphics card driver."
 msgstr "Möglicherweise müssen Sie Ihren Grafikkartentreiber aktualisieren."
 
@@ -9086,37 +10389,49 @@ msgstr "Möglicherweise müssen Sie Ihren Grafikkartentreiber aktualisieren."
 msgid "You must install a configuration update."
 msgstr "Ein Konfigurations-Update muss installiert werden."
 
-#: src/slic3r/GUI/Preferences.cpp:172
+#: src/slic3r/GUI/Preferences.cpp:299
 #, c-format
 msgid "You need to restart %s to make the changes effective."
 msgstr "Sie müssen %s neu starten, damit die Änderungen wirksam werden."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3421
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
+msgid "You should to change a name of your printer device. It can't be saved."
+msgstr "Sie sollten den Namen Ihres Druckers ändern. Er kann nicht gespeichert werden."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
 #, c-format
 msgid "You started your selection with %s Item."
 msgstr "Sie haben Ihre Auswahl mit %s Elementen begonnen."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1902
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:664
+msgid "You will not be asked about the unsaved changes the next time you close PrusaSlicer."
+msgstr "Wenn Sie PrusaSlicer das nächste Mal schließen, werden Sie nicht nach den ungespeicherten Änderungen gefragt."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:665
+msgid "You will not be asked about the unsaved changes the next time you switch a preset."
+msgstr "Wenn Sie das nächste Mal eine Voreinstellung wechseln, werden Sie nicht nach den ungespeicherten Änderungen gefragt."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:2121
 msgid "Your current changes will delete all saved color changes."
 msgstr "Ihre aktuellen Änderungen löschen alle gespeicherten Farbwechsel."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1923
+#: src/slic3r/GUI/DoubleSlider.cpp:2141
 msgid "Your current changes will delete all saved extruder (tool) changes."
 msgstr "Ihre aktuellen Änderungen löschen alle gespeicherten Extruder-(Werkzeug-) Wechsel."
 
-#: src/slic3r/GUI/MainFrame.cpp:911
+#: src/slic3r/GUI/MainFrame.cpp:1612
 msgid "Your file was repaired."
 msgstr "Ihre Datei wurde repariert."
 
-#: src/slic3r/GUI/Plater.cpp:2528
+#: src/slic3r/GUI/Plater.cpp:2490
 msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
 msgstr "Ihr Objekt scheint zu groß zu sein. Es wurde deshalb automatisch verkleinert, um auf Ihre Druckplatte zu passen."
 
-#: src/libslic3r/PrintConfig.cpp:2285
+#: src/libslic3r/PrintConfig.cpp:2428
 msgid "Z offset"
 msgstr "Z-Abstand"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:60
+#: src/slic3r/GUI/ConfigManipulation.cpp:59
 msgid ""
 "Zero first layer height is not valid.\n"
 "\n"
@@ -9126,7 +10441,7 @@ msgstr ""
 "\n"
 "Die erste Schichthöhe wird auf 0,01 zurückgesetzt."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/ConfigManipulation.cpp:47
 msgid ""
 "Zero layer height is not valid.\n"
 "\n"
@@ -9136,28 +10451,28 @@ msgstr ""
 "\n"
 "Die Schichthöhe wird auf 0,01 zurückgesetzt."
 
-#: src/libslic3r/PrintConfig.cpp:2667
+#: src/libslic3r/PrintConfig.cpp:2831
 msgid "Zig-Zag"
 msgstr "Zickzack"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:308
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:294
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Zoom"
 msgstr "Zoom"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:183
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
 msgid "Zoom in"
 msgstr "Heranzoomen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:184
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
 msgid "Zoom out"
 msgstr "Herauszoomen"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
 msgid "Zoom to Bed"
 msgstr "Zoom aufs Druckbett"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
 msgid ""
 "Zoom to selected object\n"
 "or all objects in scene, if none selected"
@@ -9165,14 +10480,16 @@ msgstr ""
 "Auf ausgewähltes Objekt zoomen\n"
 "oder alle Objekte in der Szene, wenn keines ausgewählt ist"
 
-#: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780
-#: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650
-#: src/libslic3r/PrintConfig.cpp:1894 src/libslic3r/PrintConfig.cpp:2049
-#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2727
-#: src/libslic3r/PrintConfig.cpp:2848
+#: src/libslic3r/PrintConfig.cpp:241 src/libslic3r/PrintConfig.cpp:816
+#: src/libslic3r/PrintConfig.cpp:1748 src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:2036 src/libslic3r/PrintConfig.cpp:2191
+#: src/libslic3r/PrintConfig.cpp:2390 src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3012
 msgid "°"
 msgstr "°"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1038 src/slic3r/GUI/ConfigWizard.cpp:1052
+#: src/slic3r/GUI/ConfigWizard.cpp:1404 src/slic3r/GUI/ConfigWizard.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:180 src/libslic3r/PrintConfig.cpp:912
+#: src/libslic3r/PrintConfig.cpp:956 src/libslic3r/PrintConfig.cpp:2209
 msgid "°C"
 msgstr "°C"
diff --git a/resources/localization/es/PrusaSlicer.mo b/resources/localization/es/PrusaSlicer.mo
index 0da47d5b627636133bf710a5488a7c651d34219b..43aaac113a429eb2d67497fd0d1bf2fb4b40488d 100644
GIT binary patch
delta 80908
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
BRNw#r

delta 51419
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%0A&RbDegR=B{VwWZni=mdSbVu*)nOi`ej)UZ>4v
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
bmsN}5@g9?{##m=@`KirXfzioSYtjDzq(<lE

diff --git a/resources/localization/es/PrusaSlicer_es.po b/resources/localization/es/PrusaSlicer_es.po
index 0e69f373c..2dbf8e8aa 100644
--- a/resources/localization/es/PrusaSlicer_es.po
+++ b/resources/localization/es/PrusaSlicer_es.po
@@ -5,82 +5,106 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Poedit 2.4.2\n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
 "PO-Revision-Date: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
 
-#: src/slic3r/GUI/MainFrame.cpp:66
-msgid " - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/releases"
-msgstr " - Recuerda comprobar las actualizaciones en http://github.com/prusa3d/PrusaSlicer/releases"
+#: src/slic3r/GUI/Tab.cpp:4124
+msgid ""
+"\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n"
+"To enable \"%1%\", please switch off \"%2%\""
+msgstr ""
+"\"%1%\" está desactivado porque \"%2%\" está en la categoría \"%3%\".\n"
+"Para activar \"%1%\", por favor desactiva \"%2%\""
 
-#: src/slic3r/GUI/MainFrame.cpp:872
-msgid " was successfully sliced."
-msgstr " fue laminado con éxito."
-
-#: src/libslic3r/PrintConfig.cpp:215 src/libslic3r/PrintConfig.cpp:792
-#: src/libslic3r/PrintConfig.cpp:1219 src/libslic3r/PrintConfig.cpp:1282
-#: src/libslic3r/PrintConfig.cpp:1532 src/libslic3r/PrintConfig.cpp:2425
-#: src/libslic3r/PrintConfig.cpp:2767
+#: src/libslic3r/PrintConfig.cpp:249 src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1390 src/libslic3r/PrintConfig.cpp:1640
+#: src/libslic3r/PrintConfig.cpp:2568 src/libslic3r/PrintConfig.cpp:2805
+#: src/libslic3r/PrintConfig.cpp:2931
 msgid "%"
 msgstr "%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:963
+#: src/slic3r/GUI/GLCanvas3D.cpp:969
 #, c-format
 msgid "%.2f - %.2f mm"
 msgstr "%.2f - %.2f mm"
 
 #. TRN  Remove/Delete
-#: src/slic3r/GUI/Tab.cpp:3126
+#: src/slic3r/GUI/Tab.cpp:3425
 msgid "%1% Preset"
 msgstr "%1% Preset"
 
-#: src/slic3r/GUI/Plater.cpp:4400
+#: src/slic3r/GUI/Plater.cpp:4423
 msgid "%1% printer was active at the time the target Undo / Redo snapshot was taken. Switching to %1% printer requires reloading of %1% presets."
 msgstr "La impresora %1% esta activa mientras la captura del objetivo de Deshacer / Rehacer fue tomada. Cambiar a la impresora %1% requiere recargar los preajustes %1%."
 
-#: src/libslic3r/Print.cpp:1374
+#: src/slic3r/GUI/MainFrame.cpp:1585
+msgid "%1% was successfully sliced."
+msgstr "%1% fue laminado con éxito."
+
+#: src/libslic3r/Print.cpp:1400
 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm"
 msgstr "%1%=%2% mm es demasiado bajo para ser impreso a una altura de capa de %3% mm"
 
-#: src/slic3r/GUI/PresetHints.cpp:229
+#: src/slic3r/GUI/PresetHints.cpp:228
 #, c-format
 msgid "%3.2f mm³/s at filament speed %3.2f mm/s."
 msgstr "%3.2f mm³/s a una velocidad de filamento de %3.2f mm/s."
 
-#: src/slic3r/GUI/Plater.cpp:1152
+#: src/slic3r/GUI/Plater.cpp:1061
 #, c-format
 msgid "%d (%d shells)"
 msgstr "%d (%d pieles)"
 
-#: src/slic3r/GUI/Plater.cpp:1160
+#: src/slic3r/GUI/Plater.cpp:1069
 #, c-format
 msgid "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d facets reversed, %d backwards edges"
 msgstr "%d facetas problemáticas, %d aristas corregidas, %d facetas eliminadas, %d facetas añadidas, %d facetas invertidas, %d aristas  del revés"
 
-#: src/slic3r/GUI/PresetHints.cpp:270
+#: src/slic3r/GUI/PresetHints.cpp:269
 #, c-format
 msgid "%d lines: %.2f mm"
 msgstr "%d líneas: %.2f mm"
 
-#: src/slic3r/GUI/MainFrame.cpp:1027
+#: src/slic3r/GUI/MainFrame.cpp:1728
 #, c-format
 msgid "%d presets successfully imported."
 msgstr "%d ajustes iniciales importados con éxito."
 
-#: src/slic3r/GUI/MainFrame.cpp:692
+#: src/slic3r/GUI/GUI_App.cpp:718
+#, c-format
+msgid ""
+"%s\n"
+"Do you want to continue?"
+msgstr ""
+"%s\n"
+"¿Quieres continuar?"
+
+#: src/slic3r/GUI/MainFrame.cpp:917 src/slic3r/GUI/MainFrame.cpp:1316
 #, c-format
 msgid "%s &Website"
 msgstr "%s Sitio &Web"
 
+#: src/slic3r/GUI/GUI_App.cpp:394
+#, c-format
+msgid "%s - BREAKING CHANGE"
+msgstr "%s - CAMBIO IMPORTANTE"
+
+#: src/slic3r/GUI/Plater.cpp:1410
+#, c-format
+msgid "%s - Drop project file"
+msgstr "%s - Soltar archivo de proyecto"
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:211
 #, c-format
 msgid "%s configuration is incompatible"
 msgstr "%s la configuración es incompatible"
 
-#: src/slic3r/GUI/Field.cpp:175
+#: src/slic3r/GUI/Field.cpp:223
 #, c-format
 msgid "%s doesn't support percentage"
 msgstr "%s no permite porcentajes"
@@ -90,7 +114,7 @@ msgstr "%s no permite porcentajes"
 msgid "%s error"
 msgstr "%s error"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:481
+#: src/slic3r/GUI/ConfigWizard.cpp:499
 #, c-format
 msgid "%s Family"
 msgstr "%s Familia"
@@ -100,7 +124,7 @@ msgstr "%s Familia"
 msgid "%s has encountered an error"
 msgstr "%s ha ocurrido un error"
 
-#: src/slic3r/GUI/GUI_App.cpp:138
+#: src/slic3r/GUI/GUI_App.cpp:528
 #, c-format
 msgid ""
 "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it.\n"
@@ -111,12 +135,12 @@ msgstr ""
 "\n"
 "La aplicación se cerrará."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:222
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:62
 #, c-format
 msgid "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it."
 msgstr "%s ha encontrado un error. Probablemente fue causado por quedarse sin memoria. Si estás seguro de tener suficiente RAM en su sistema, esto también puede ser un error y nos complacería que lo informaras."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:308
+#: src/slic3r/GUI/UpdateDialogs.cpp:309
 #, c-format
 msgid "%s has no configuration updates available."
 msgstr "%s no tiene actualizaciones de configuración disponibles."
@@ -143,7 +167,7 @@ msgstr ""
 "\n"
 "Por favof, continúa con el %s que sigue para establecer los nuevos ajustes y seleccionar si quieres que estos se actualicen automáticamente."
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:1512
 #, c-format
 msgid "%s View Mode"
 msgstr "%s Tipo de vista"
@@ -163,218 +187,252 @@ msgstr ""
 "\n"
 "Configuraciones actualizadas:"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
 #, c-format
 msgid "&About %s"
 msgstr "&Acerca de %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:908
+#: src/slic3r/GUI/MainFrame.cpp:1297
+msgid "&Collapse sidebar"
+msgstr "Barra lateral ocultable (&C)"
+
+#: src/slic3r/GUI/GUI_App.cpp:1645
 msgid "&Configuration"
 msgstr "&Configuración"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "&Configuration Snapshots"
 msgstr "Instantáneas de la &Configuración"
 
-#: src/slic3r/GUI/MainFrame.cpp:588
+#: src/slic3r/GUI/MainFrame.cpp:1194
 msgid "&Copy"
 msgstr "&Copiar"
 
-#: src/slic3r/GUI/MainFrame.cpp:572
+#: src/slic3r/GUI/MainFrame.cpp:1178
 msgid "&Delete selected"
 msgstr "Eli&minar selección"
 
-#: src/slic3r/GUI/MainFrame.cpp:722
+#: src/slic3r/GUI/MainFrame.cpp:1348 src/slic3r/GUI/MainFrame.cpp:1358
 msgid "&Edit"
 msgstr "&Editar"
 
-#: src/slic3r/GUI/MainFrame.cpp:506
+#: src/slic3r/GUI/MainFrame.cpp:1103
 msgid "&Export"
 msgstr "&Exportar"
 
-#: src/slic3r/GUI/MainFrame.cpp:617 src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1224 src/slic3r/GUI/MainFrame.cpp:1451
 msgid "&Filament Settings Tab"
 msgstr "Pestaña de Ajustes de &filamento"
 
-#: src/slic3r/GUI/MainFrame.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:1347 src/slic3r/GUI/MainFrame.cpp:1357
+#: src/slic3r/GUI/MainFrame.cpp:1417
 msgid "&File"
 msgstr "&Archivo"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1981
+#: src/slic3r/GUI/ConfigWizard.cpp:2492
 msgid "&Finish"
 msgstr "&Terminar"
 
-#: src/slic3r/GUI/MainFrame.cpp:727
+#: src/slic3r/GUI/MainFrame.cpp:1141
+msgid "&G-code preview"
+msgstr "Previsualización código G (&G)"
+
+#: src/slic3r/GUI/MainFrame.cpp:1353 src/slic3r/GUI/MainFrame.cpp:1363
+#: src/slic3r/GUI/MainFrame.cpp:1423
 msgid "&Help"
 msgstr "Ayu&da"
 
-#: src/slic3r/GUI/MainFrame.cpp:474
+#: src/slic3r/GUI/MainFrame.cpp:1065
 msgid "&Import"
 msgstr "&Importar"
 
-#: src/slic3r/GUI/GUI_App.cpp:822
+#: src/slic3r/GUI/GUI_App.cpp:1517
 msgid "&Language"
 msgstr "&Idioma"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "&New Project"
 msgstr "&Nuevo proyecto"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1980
+#: src/slic3r/GUI/ConfigWizard.cpp:2491
 msgid "&Next >"
 msgstr "&Siguiente >"
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "&Open G-code"
+msgstr "Abrir código G (&O)"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "&Open Project"
 msgstr "Abrir pr&oyecto"
 
-#: src/slic3r/GUI/MainFrame.cpp:591
+#: src/slic3r/GUI/MainFrame.cpp:1197
 msgid "&Paste"
 msgstr "&Pegar"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "&Plater Tab"
 msgstr "&Pestaña Base de impresión"
 
-#: src/slic3r/GUI/GUI_App.cpp:804
+#: src/slic3r/GUI/GUI_App.cpp:1487
 msgid "&Preferences"
 msgstr "&Preferencias"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
 msgid "&Quit"
 msgstr "Sa&lir"
 
-#: src/slic3r/GUI/MainFrame.cpp:583
+#: src/slic3r/GUI/MainFrame.cpp:1189
 msgid "&Redo"
 msgstr "&Rehacer"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "&Repair STL file"
 msgstr "&Reparar archivo STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "&Save Project"
 msgstr "G&uardar proyecto"
 
-#: src/slic3r/GUI/MainFrame.cpp:565
+#: src/slic3r/GUI/MainFrame.cpp:1171
 msgid "&Select all"
 msgstr "&Seleccionar todo"
 
-#: src/slic3r/GUI/MainFrame.cpp:580
+#: src/slic3r/GUI/MainFrame.cpp:1186
 msgid "&Undo"
 msgstr "Des&hacer"
 
-#: src/slic3r/GUI/MainFrame.cpp:724
+#: src/slic3r/GUI/MainFrame.cpp:1350 src/slic3r/GUI/MainFrame.cpp:1360
+#: src/slic3r/GUI/MainFrame.cpp:1418
 msgid "&View"
 msgstr "Ve&r"
 
-#: src/slic3r/GUI/MainFrame.cpp:723
+#: src/slic3r/GUI/MainFrame.cpp:1349 src/slic3r/GUI/MainFrame.cpp:1359
 msgid "&Window"
 msgstr "&Ventana"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:603 src/slic3r/GUI/ConfigWizard.cpp:631
+#: src/slic3r/GUI/ConfigWizard.cpp:662 src/slic3r/GUI/ConfigWizard.cpp:812
+#: src/slic3r/GUI/ConfigWizard.cpp:873 src/slic3r/GUI/ConfigWizard.cpp:1007
 msgid "(All)"
 msgstr "(Todo)"
 
-#: src/libslic3r/PrintConfig.cpp:1446
+#: src/libslic3r/PrintConfig.cpp:1554
 msgid "(minimum)"
 msgstr "(mínimo)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:116
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:109
 msgid "(Re)slice"
 msgstr "(Re)laminar"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "(Re)Slice No&w"
 msgstr "(Re)Laminar A&hora"
 
-#: src/libslic3r/PrintConfig.cpp:771 src/libslic3r/PrintConfig.cpp:2587
+#: src/libslic3r/PrintConfig.cpp:807 src/libslic3r/PrintConfig.cpp:2730
 msgid "(Unknown)"
 msgstr "(Desconocido)"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid ") not found."
 msgstr ") no encontrado."
 
-#: src/libslic3r/PrintConfig.cpp:1918
+#: src/libslic3r/PrintConfig.cpp:2060
 msgid "0 (soluble)"
 msgstr "0 (soluble)"
 
-#: src/libslic3r/PrintConfig.cpp:1919
+#: src/libslic3r/PrintConfig.cpp:2061
 msgid "0.2 (detachable)"
 msgstr "0.2 (despegable)"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "3&D"
 msgstr "3&D"
 
-#: src/slic3r/GUI/Plater.cpp:4097
+#: src/slic3r/GUI/Plater.cpp:4044
 msgid "3D editor view"
 msgstr "Vista editor 3D"
 
-#: src/libslic3r/PrintConfig.cpp:851
+#: src/libslic3r/PrintConfig.cpp:889
 msgid "3D Honeycomb"
 msgstr "Panal de abeja 3D"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:274
+#: src/slic3r/GUI/NotificationManager.hpp:318
+msgid "3D Mouse disconnected."
+msgstr "Ratón 3D desconectado."
+
+#: src/slic3r/GUI/Mouse3DController.cpp:263
 msgid "3Dconnexion settings"
 msgstr "Ajustes 3Dconnexion"
 
-#: src/slic3r/GUI/Plater.cpp:5038
+#: src/slic3r/GUI/Plater.cpp:5167
 #, c-format
 msgid "3MF file exported to %s"
 msgstr "Archivo 3MF exportado a %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1979
+#: src/slic3r/GUI/ConfigWizard.cpp:2490
 msgid "< &Back"
 msgstr "< &Anterior"
 
-#: src/libslic3r/PrintConfig.cpp:287
+#: src/libslic3r/PrintConfig.cpp:321
 msgid "A boolean expression using the configuration values of an active print profile. If this expression evaluates to true, this profile is considered compatible with the active print profile."
 msgstr "Una expresión booleana que utiliza los valores de configuración de un perfil de impresión activo. Si esta expresión se evalúa como verdadera, este perfil se considera compatible con el perfil de impresión activo."
 
-#: src/libslic3r/PrintConfig.cpp:272
+#: src/libslic3r/PrintConfig.cpp:306
 msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
 msgstr "Una expresión booleana utilizando valores de configuración de un perfil existente. Si esta expresión es verdadera, el perfil será considerado compatible con el perfil de impresión activo."
 
-#: src/slic3r/GUI/Tab.cpp:975
+#: src/slic3r/GUI/Tab.cpp:1237
 msgid "A copy of the current system preset will be created, which will be detached from the system preset."
 msgstr "Se creará una copia del preajuste del sistema actual, que se separará del preajuste del sistema."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1034
+#: src/slic3r/GUI/ConfigWizard.cpp:1400
 msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
 msgstr "Una buena aproximación es de 160 a 230 °C para PLA y de 215 a 250 °C para ABS."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1048
+#: src/slic3r/GUI/ConfigWizard.cpp:1414
 msgid "A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have no heated bed."
 msgstr "Una buena aproximación son unos 60 °C para PLA y 110 °C para  ABS. Deja el valor a cero si no tienes base calefactable."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:686
-msgid "A toolpath outside the print area was detected"
-msgstr "Se detectó una trayectoria fuera del área de impresión"
+#: src/slic3r/GUI/GLCanvas3D.cpp:634
+msgid "A toolpath outside the print area was detected."
+msgstr "Ha sido detectada una trayectoria fuera del área de impresión."
 
-#: src/slic3r/GUI/AboutDialog.cpp:199
+#: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215
 #, c-format
 msgid "About %s"
 msgstr "Acerca de %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:959
+#: src/slic3r/GUI/GCodeViewer.cpp:2189
+msgid "above"
+msgstr "sobre"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:965
 #, c-format
 msgid "above %.2f mm"
 msgstr "sobre %.2f mm"
 
-#: src/libslic3r/PrintConfig.cpp:1569
+#: src/libslic3r/PrintConfig.cpp:1677
 msgid "Above Z"
 msgstr "Encima de Z"
 
-#: src/slic3r/GUI/Tab.cpp:1164
+#: src/slic3r/GUI/Tab.cpp:1494
 msgid "Acceleration control (advanced)"
 msgstr "Control de aceleración (avanzado)"
 
-#: src/libslic3r/PrintConfig.cpp:2925
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:221
+#: src/libslic3r/PrintConfig.cpp:3089
 msgid "Accuracy"
 msgstr "Precisión"
 
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:59
+msgid "Accurate"
+msgstr "Preciso"
+
+#: src/slic3r/GUI/Plater.cpp:1423
+msgid "Action"
+msgstr "Acción"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78
 msgid "Activate"
 msgstr "Activar"
@@ -383,67 +441,75 @@ msgstr "Activar"
 msgid "Active"
 msgstr "Activo"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1135 src/slic3r/GUI/GUI_ObjectList.cpp:1705
+#: src/slic3r/GUI/DoubleSlider.cpp:1264 src/slic3r/GUI/GUI_ObjectList.cpp:1833
 msgid "active"
 msgstr "activo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:267
+#: src/slic3r/GUI/GLCanvas3D.cpp:254
 msgid "Adaptive"
 msgstr "Adaptativa"
 
-#: src/slic3r/GUI/Tab.cpp:241
-msgid "Add a new printer"
-msgstr "Añadir una impresora nueva"
+#: src/libslic3r/PrintConfig.cpp:894
+msgid "Adaptive Cubic"
+msgstr "Cúbico Adaptativo"
 
-#: src/libslic3r/PrintConfig.cpp:2782
+#: src/slic3r/GUI/SavePresetDialog.cpp:314
+msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\""
+msgstr "Añade \"%1%\" como siguiente ajuste preestablecido para la impresora física \"%2%\""
+
+#: src/libslic3r/PrintConfig.cpp:2946
 msgid "Add a pad underneath the supported model"
 msgstr "Añade un pad debajo del modelo compatible"
 
-#: src/libslic3r/PrintConfig.cpp:2058
+#: src/libslic3r/PrintConfig.cpp:2200
 msgid "Add a sheath (a single perimeter line) around the base support. This makes the support more reliable, but also more difficult to remove."
 msgstr "Añadir una funda (una sola línea de perímetro) alrededor de la base del soporte. Esto hace el soporte más fiable pero también más difícil de retirar."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:991
+#: src/slic3r/GUI/DoubleSlider.cpp:1114
 msgid "Add another code - Ctrl + Left click"
 msgstr "Añadir otro código - Ctrl + Click izquierdo"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:992
+#: src/slic3r/GUI/DoubleSlider.cpp:1115
 msgid "Add another code - Right click"
 msgstr "Añadir otro código - Click derecho"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1477
+#: src/slic3r/GUI/DoubleSlider.cpp:1665
 msgid "Add color change"
 msgstr "Añadir cambio de color"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1180
+#: src/slic3r/GUI/DoubleSlider.cpp:1307
 msgid "Add color change (%1%) for:"
 msgstr "Añadir cambio de color (%1%) para:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:988
+#: src/slic3r/GUI/DoubleSlider.cpp:1111
 msgid "Add color change - Left click"
 msgstr "Añadir cambio de color - Click izquierdo"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:986
+#: src/slic3r/GUI/DoubleSlider.cpp:1109
 msgid "Add color change - Left click for predefined color or Shift + Left click for custom color selection"
 msgstr "Añadir cambio de color - Click izquierdo para color preddefinido o Mayus + Click izquierdo para selección de color personalizada"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
 msgid "Add color change marker for current layer"
 msgstr "Añadir marcador de cambio de color para la capa actual"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1490
+#: src/slic3r/GUI/DoubleSlider.cpp:1682
 msgid "Add custom G-code"
 msgstr "Añadir código G personalizado"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:240
+#: src/slic3r/GUI/DoubleSlider.cpp:1679
+msgid "Add custom template"
+msgstr "Añadir plantilla personalizada"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:235
 msgid "Add detail"
 msgstr "Añadir detalle"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:421
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:308
 msgid "Add drainage hole"
 msgstr "Añadir orificio de drenaje"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:984
+#: src/slic3r/GUI/DoubleSlider.cpp:1107
 msgid "Add extruder change - Left click"
 msgstr "Añadir cambio de extrusor - Click izquierdo"
 
@@ -451,30 +517,30 @@ msgstr "Añadir cambio de extrusor - Click izquierdo"
 msgid "Add extruder to sequence"
 msgstr "Añadir extrusor a la secuencia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1993
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
 msgid "Add Generic Subobject"
 msgstr "Añadir Subobjeto Genérico"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2896
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2925
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2943
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3297
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3325
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3345
 msgid "Add Height Range"
 msgstr "Añadir Rango de Alturas"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4526 src/slic3r/GUI/Plater.cpp:3788
-#: src/slic3r/GUI/Plater.cpp:3800 src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/GLCanvas3D.cpp:4892 src/slic3r/GUI/Plater.cpp:3708
+#: src/slic3r/GUI/Plater.cpp:3720 src/slic3r/GUI/Plater.cpp:3858
 msgid "Add instance"
 msgstr "Añadir instancia"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:153
 msgid "Add Instance of the selected object"
 msgstr "Añadir instancia del objeto seleccionado"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:162
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:165
 msgid "Add layer range"
 msgstr "Añadir rango de capas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2328
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2692
 msgid "Add Layers"
 msgstr "Añadir Capas"
 
@@ -482,12 +548,12 @@ msgstr "Añadir Capas"
 msgid "Add modifier"
 msgstr "Añadir modificador"
 
-#: src/libslic3r/PrintConfig.cpp:479
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:515
+#, c-format
 msgid "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r keeps adding perimeters, until more than 70% of the loop immediately above is supported."
 msgstr "Añadir más perímetros cuando se necesiten para evitar huecos en las paredes inclinadas. Slic3r sigue añadiendo perímetros hasta que más del 70% del perímetro superior sea soportado."
 
-#: src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/Plater.cpp:3858
 msgid "Add one more instance of the selected object"
 msgstr "Añadir una instancia más del objeto seleccionado"
 
@@ -495,52 +561,61 @@ msgstr "Añadir una instancia más del objeto seleccionado"
 msgid "Add part"
 msgstr "Añadir pieza"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1487
+#: src/slic3r/GUI/DoubleSlider.cpp:1675
 msgid "Add pause print"
 msgstr "Añadir pausa de impresión"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
+#: src/slic3r/GUI/PresetComboBoxes.cpp:627
+#: src/slic3r/GUI/PresetComboBoxes.cpp:674
+msgid "Add physical printer"
+msgstr "Añadir impresora física"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
 msgid "Add point"
 msgstr "Añadir punto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
 msgid "Add point to selection"
 msgstr "Añadir punto a selección"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1509
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:180
+msgid "Add preset for this printer device"
+msgstr "Añadir ajuste preestablecido para este dispositivo de impresión"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1640
 msgid "Add settings"
 msgstr "Añadir ajustes"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1386
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1517
 msgid "Add Settings Bundle for Height range"
 msgstr "Añadir Conjunto de Ajustes para Rango de Alturas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1388
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1519
 msgid "Add Settings Bundle for Object"
 msgstr "Añadir Conjunto de Ajustes para Objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1387
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1518
 msgid "Add Settings Bundle for Sub-object"
 msgstr "Añadir Conjunto de Ajustes para Sub-objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1314
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1445
 msgid "Add Settings for Layers"
 msgstr "Añadir Ajustes para Capas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1316
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1447
 msgid "Add Settings for Object"
 msgstr "Agregar Ajustes para Objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1315
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1446
 msgid "Add Settings for Sub-object"
 msgstr "Agregar Ajustes para Sub-objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2051
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1953
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2210
 msgid "Add Shape"
 msgstr "Añadir forma"
 
-#: src/libslic3r/PrintConfig.cpp:409
+#: src/libslic3r/PrintConfig.cpp:443
 msgid "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)."
 msgstr "Añade un relleno completo cerca de las superficies inclinadas para garantizar el ancho vertical solicitado(capas sólidas arriba+abajo)."
 
@@ -552,11 +627,19 @@ msgstr "Añadir bloqueo soportes"
 msgid "Add support enforcer"
 msgstr "Añadir refuerzo soportes"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:494
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:374
 msgid "Add support point"
 msgstr "Añadir punto de soporte"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4467
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:371
+msgid "Add supports"
+msgstr "Añadir soportes"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:293
+msgid "Add supports by angle"
+msgstr "Añadir soportes según ángulo"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4833
 msgid "Add..."
 msgstr "Añadir..."
 
@@ -564,23 +647,29 @@ msgstr "Añadir..."
 msgid "Add/Remove filaments"
 msgstr "Añadir/Retirar filamentos"
 
-#: src/slic3r/GUI/Preset.cpp:1201
+#: src/slic3r/GUI/PresetComboBoxes.cpp:813
 msgid "Add/Remove materials"
 msgstr "Añadir/Retirar materiales"
 
-#: src/slic3r/GUI/Preset.cpp:1203
+#: src/slic3r/GUI/PresetComboBoxes.cpp:622
+#: src/slic3r/GUI/PresetComboBoxes.cpp:669
+msgid "Add/Remove presets"
+msgstr "Añadir/Quitar ajustes preestablecidos"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:815
+#: src/slic3r/GUI/PresetComboBoxes.cpp:972
 msgid "Add/Remove printers"
 msgstr "Añade/Quita impresoras"
 
-#: src/slic3r/GUI/Tab.cpp:970
+#: src/slic3r/GUI/Tab.cpp:1288
 msgid "Additional information:"
 msgstr "Información adicional:"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:59
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:62
 msgid "Additional Settings"
 msgstr "Ajustes adiccionales"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:791
+#: src/slic3r/GUI/ConfigWizard.cpp:1150
 msgid "Additionally a backup snapshot of the whole configuration is created before an update is applied."
 msgstr "Además se realizará una instantánea de toda la configuración antes de aplicar una actualización."
 
@@ -588,23 +677,22 @@ msgstr "Además se realizará una instantánea de toda la configuración antes d
 msgid "Address"
 msgstr "Dirección"
 
-#: src/slic3r/GUI/GUI_App.cpp:814 src/slic3r/GUI/GUI_ObjectList.cpp:104
-#: src/slic3r/GUI/GUI_ObjectList.cpp:622 src/slic3r/GUI/Tab.cpp:1087
-#: src/slic3r/GUI/Tab.cpp:1102 src/slic3r/GUI/Tab.cpp:1201
-#: src/slic3r/GUI/Tab.cpp:1204 src/slic3r/GUI/Tab.cpp:1470
-#: src/slic3r/GUI/Tab.cpp:1967 src/slic3r/GUI/Tab.cpp:3661
-#: src/slic3r/GUI/wxExtensions.cpp:754 src/libslic3r/PrintConfig.cpp:88
-#: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223
-#: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2276
-#: src/libslic3r/PrintConfig.cpp:2448
+#: src/slic3r/GUI/GUI_ObjectList.cpp:102 src/slic3r/GUI/GUI_ObjectList.cpp:661
+#: src/slic3r/GUI/Tab.cpp:1409 src/slic3r/GUI/Tab.cpp:1430
+#: src/slic3r/GUI/Tab.cpp:1531 src/slic3r/GUI/Tab.cpp:1534
+#: src/slic3r/GUI/Tab.cpp:1816 src/slic3r/GUI/Tab.cpp:2152
+#: src/slic3r/GUI/Tab.cpp:4080 src/libslic3r/PrintConfig.cpp:90
+#: src/libslic3r/PrintConfig.cpp:121 src/libslic3r/PrintConfig.cpp:257
+#: src/libslic3r/PrintConfig.cpp:1081 src/libslic3r/PrintConfig.cpp:2419
+#: src/libslic3r/PrintConfig.cpp:2591
 msgid "Advanced"
 msgstr "Avanzado"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:821
+#: src/slic3r/GUI/ConfigWizard.cpp:1180
 msgid "Advanced mode"
 msgstr "Modo avanzado"
 
-#: src/slic3r/GUI/GUI_App.cpp:814
+#: src/slic3r/GUI/GUI_App.cpp:1506
 msgid "Advanced View Mode"
 msgstr "Modo vista avanzada"
 
@@ -612,124 +700,140 @@ msgstr "Modo vista avanzada"
 msgid "Advanced: Output log"
 msgstr "Avanzado: Registro de salida"
 
-#: src/libslic3r/PrintConfig.cpp:668
+#: src/libslic3r/PrintConfig.cpp:704
 msgid "After a tool change, the exact position of the newly loaded filament inside the nozzle may not be known, and the filament pressure is likely not yet stable. Before purging the print head into an infill or a sacrificial object, Slic3r will always prime this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."
 msgstr "Después de un cambio de herramienta, la posición exacta del filamento recién cargado dentro de la boquilla puede no ser conocida, y es probable que la presión del filamento aún no sea estable. Antes de purgar el cabezal de impresión en un relleno o en un objeto de sacrificio, Slic3r siempre purgará esta cantidad de material en la torre de limpieza para producir de forma fiable sucesivas rellenos u objetos de sacrificio."
 
-#: src/slic3r/GUI/Tab.cpp:1994 src/libslic3r/PrintConfig.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:2182 src/libslic3r/PrintConfig.cpp:1173
 msgid "After layer change G-code"
 msgstr "Código G tras  un cambio de capa"
 
-#: src/libslic3r/PrintConfig.cpp:3398
+#: src/libslic3r/PrintConfig.cpp:3597
 msgid "Align the model to the given point."
 msgstr "Alinear el modelo a un punto dado."
 
-#: src/libslic3r/PrintConfig.cpp:3397
+#: src/libslic3r/PrintConfig.cpp:3596
 msgid "Align XY"
 msgstr "Alinear XY"
 
-#: src/libslic3r/PrintConfig.cpp:1631
+#: src/libslic3r/PrintConfig.cpp:1739
 msgid "Aligned"
 msgstr "Alineado"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:290 src/slic3r/GUI/ConfigWizard.cpp:573
-#: src/slic3r/GUI/Tab.cpp:3174
+#: src/slic3r/GUI/ConfigWizard.cpp:308 src/slic3r/GUI/ConfigWizard.cpp:598
+#: src/slic3r/GUI/Tab.cpp:3507 src/slic3r/GUI/UnsavedChangesDialog.cpp:921
 msgid "All"
 msgstr "Todo"
 
-#: src/libslic3r/Print.cpp:1219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
+msgid "All gizmos: Rotate - left mouse button; Pan - right mouse button"
+msgstr "Todos los movimientos: Rotar - botón izquierdo ratón; Girar- botón derecho ratón"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:694
+msgid "All installed printers are compatible with the selected filament."
+msgstr "Todas las impresoras instaladas son compatibles con el filamento seleccionado."
+
+#: src/libslic3r/Print.cpp:1245
 msgid "All objects are outside of the print volume."
 msgstr "Todos los objetos están fuera del volumen de impresión."
 
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "All objects will be removed, continue?"
 msgstr "Todos los objetos serán eliminados, deseas continuar?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737
+msgid "All settings changes will be discarded."
+msgstr "Todos los cambios de los ajustes serán descartados."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "All standard"
 msgstr "Todo estandar"
 
-#: src/libslic3r/Zipper.cpp:62
+#: src/libslic3r/miniz_extension.cpp:121
 msgid "allocation failed"
 msgstr "asignación fallida"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Along X axis"
 msgstr "A lo largo del eje X"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Along Y axis"
 msgstr "A lo largo del eje Y"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Along Z axis"
 msgstr "A lo largo del eje Z"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:222
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:160
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:141
+msgid "Alt + Mouse wheel"
+msgstr "Alt + Rueda del ratón"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:240
 msgid "Alternate nozzles:"
 msgstr "Alternar nozzles:"
 
-#: src/slic3r/GUI/Plater.cpp:5002
+#: src/slic3r/GUI/Preferences.cpp:163
+msgid "Always ask for unsaved changes when selecting new preset"
+msgstr "Preguntar siempre por los cambios no guardados al seleccionar un nuevo ajuste preestablecido"
+
+#: src/slic3r/GUI/Plater.cpp:5135
 #, c-format
 msgid "AMF file exported to %s"
 msgstr "Archivo AMF exportado a %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:690
+#: src/slic3r/GUI/GLCanvas3D.cpp:638
 msgid ""
-"An object outside the print area was detected\n"
-"Resolve the current problem to continue slicing"
+"An object outside the print area was detected.\n"
+"Resolve the current problem to continue slicing."
 msgstr ""
-"Se ha detectado una pieza fuera del área de impresión\n"
-"Soluciona el problema actual para continuar el laminado"
+"Se detectó un objeto fuera del área de impresión.\n"
+"Resuelve el problema actual para seguir laminando."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:685
-msgid "An object outside the print area was detected"
-msgstr "Se ha detectado una pieza fuera del área de impresión"
+#: src/slic3r/GUI/GLCanvas3D.cpp:633
+msgid "An object outside the print area was detected."
+msgstr "Se detectó un objeto fuera del área de impresión."
 
-#: src/slic3r/GUI/Tab.cpp:2943
-msgid "and it has the following unsaved changes:"
-msgstr "y tiene los siguientes cambios sin guardar:"
-
-#: src/slic3r/GUI/Plater.cpp:3170
+#: src/slic3r/GUI/Plater.cpp:2972
 msgid "Another export job is currently running."
 msgstr "Otro trabajo de exportación está aún en marcha."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Any arrow"
 msgstr "Cualquier flecha"
 
-#: src/slic3r/GUI/Tab.cpp:965
+#: src/slic3r/GUI/Tab.cpp:1283
 msgid "Any modifications should be saved as a new preset inherited from this one."
 msgstr "Cualquier modificación debe guardarse como un nuevo preset heredado de este."
 
-#: src/libslic3r/PrintConfig.cpp:104
+#: src/libslic3r/PrintConfig.cpp:106
 msgid "API Key / Password"
 msgstr "Clave API / Contraseña"
 
-#: src/slic3r/GUI/GUI_App.cpp:810
+#: src/slic3r/GUI/GUI_App.cpp:1493
 msgid "Application preferences"
 msgstr "Preferencias de la aplicación"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1374
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221
 msgid "Apply changes"
 msgstr "Aplicar cambios"
 
-#: src/libslic3r/PrintConfig.cpp:575 src/libslic3r/PrintConfig.cpp:1708
+#: src/libslic3r/PrintConfig.cpp:611 src/libslic3r/PrintConfig.cpp:1823
 msgid "approximate seconds"
 msgstr "segundos aproximadamente"
 
-#: src/libslic3r/PrintConfig.cpp:428 src/libslic3r/PrintConfig.cpp:854
+#: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:892
 msgid "Archimedean Chords"
 msgstr "Acordes de Arquímedes"
 
-#: src/libslic3r/Zipper.cpp:88
+#: src/libslic3r/miniz_extension.cpp:147
 msgid "archive is too large"
 msgstr "el archivo es demasiado grande"
 
-#. TRN  remove/delete
-#: src/slic3r/GUI/Tab.cpp:3123
+#: src/slic3r/GUI/Tab.cpp:3420
 msgid "Are you sure you want to %1% the selected preset?"
 msgstr "¿Estás seguro de que deseas %1% el preset seleccionado?"
 
@@ -741,97 +845,125 @@ msgstr ""
 "¿Estas seguro de cancelar el flaseo del firmware?\n"
 "¡Esto podría dejar tu impresora en un estado inusable!"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1903 src/slic3r/GUI/DoubleSlider.cpp:1924
+#: src/slic3r/GUI/DoubleSlider.cpp:2122 src/slic3r/GUI/DoubleSlider.cpp:2142
 msgid "Are you sure you want to continue?"
 msgstr "¿Estás seguro de que quieres continuar?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1269
+#: src/slic3r/GUI/Tab.cpp:3392
+msgid "Are you sure you want to delete \"%1%\" preset from the physical printer \"%2%\"?"
+msgstr "¿Está seguro de que desea eliminar el ajuste preestablecido \"%1%\" de la impresora física \"%2%\"?"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:658
+msgid "Are you sure you want to delete \"%1%\" printer?"
+msgstr "¿Estás seguro de que quieres borrar la impresora \"%1%\"?"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1128
 msgid "Are you sure you want to do it?"
 msgstr "¿Estás seguro de que quieres hacerlo?"
 
-#: src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2566
 msgid "Area fill"
 msgstr "Área de relleno"
 
-#: src/slic3r/GUI/Plater.cpp:641
+#: src/slic3r/GUI/Plater.cpp:507
 msgid "Around object"
 msgstr "Alrededor de objeto"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:157
-#: src/slic3r/GUI/Plater.cpp:2754
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/Plater.cpp:1549
 msgid "Arrange"
 msgstr "Organiza"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:152
 msgid "Arrange selection"
 msgstr "Ordenar selección"
 
-#: src/libslic3r/PrintConfig.cpp:3443
+#: src/libslic3r/PrintConfig.cpp:3642
 msgid "Arrange the supplied models in a plate and merge them in a single model in order to perform actions once."
 msgstr "Organizar los modelos suministrados en una base y combínarlos en un solo modelo para realizar acciones una vez."
 
-#: src/slic3r/GUI/Plater.cpp:2813
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:149
 msgid "Arranging"
 msgstr "Organizando"
 
-#: src/slic3r/GUI/Plater.cpp:2841
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:182
 msgid "Arranging canceled."
 msgstr "Ordenamiento cancelado."
 
-#: src/slic3r/GUI/Plater.cpp:2842
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:183
 msgid "Arranging done."
 msgstr "Organización terminada."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Arrow Down"
 msgstr "Flecha hacia abajo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
 msgid "Arrow Left"
 msgstr "Flecha hacia izquierda"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
 msgid "Arrow Right"
 msgstr "Flecha hacia derecha"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Arrow Up"
 msgstr "Flecha hacia arriba"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:290
+#: src/slic3r/GUI/GUI_App.cpp:246
+msgid "Artwork model by Nora Al-Badri and Jan Nikolai Nelles"
+msgstr "Modelo artístico realizado por Nora Al-Badri y Jan Nikolai Nelles"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:265
 msgid "As a workaround, you may run PrusaSlicer with a software rendered 3D graphics by running prusa-slicer.exe with the --sw_renderer parameter."
 msgstr "Como solución alternativa, puedes ejecutar PrusaSlicer con un software de gráficos en 3D ejecutando prusaslicer.exe con el parámetro --sw_renderer."
 
-#: src/slic3r/GUI/GUI_App.cpp:1086 src/slic3r/GUI/Plater.cpp:2313
-#: src/slic3r/GUI/Tab.cpp:2960
+#: src/slic3r/GUI/Preferences.cpp:154
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:659
+msgid "Ask for unsaved changes when closing application"
+msgstr "Preguntar por los cambios no guardados al cerrar la aplicación"
+
+#: src/slic3r/GUI/Preferences.cpp:161
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:660
+msgid "Ask for unsaved changes when selecting new preset"
+msgstr "Preguntar por los cambios no guardados al seleccionar un nuevo ajuste preestablecido"
+
+#: src/slic3r/GUI/GUI_App.cpp:1878 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210
+#: src/slic3r/GUI/Plater.cpp:2256 src/slic3r/GUI/Tab.cpp:3189
 msgid "Attention!"
 msgstr "¡Atención!"
 
-#: src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:150
+msgid "Authorization Type"
+msgstr "Tipo de Autorización"
+
+#: src/libslic3r/PrintConfig.cpp:2013
 msgid "Auto generated supports"
 msgstr "Soportes generados automáticamente"
 
-#: src/slic3r/GUI/Preferences.cpp:47
+#: src/slic3r/GUI/Preferences.cpp:64
 msgid "Auto-center parts"
 msgstr "Piezas auto-centradas"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1377
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1224
 msgid "Auto-generate points"
 msgstr "Auto-generar puntos"
 
-#: src/slic3r/GUI/Plater.cpp:1157
+#: src/slic3r/GUI/Plater.cpp:1066
 #, c-format
 msgid "Auto-repaired (%d errors)"
 msgstr "Reparados automáticamente (%d errores)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:339
+#: src/slic3r/GUI/GUI_ObjectList.cpp:386
 #, c-format
 msgid "Auto-repaired (%d errors):"
 msgstr "Reparado automáticamente (%d errores):"
@@ -840,39 +972,47 @@ msgstr "Reparado automáticamente (%d errores):"
 msgid "Autodetected"
 msgstr "Detectado automáticamente"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1273
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1134
 msgid "Autogenerate support points"
 msgstr "Genera los puntos de apoyo automáticamente"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1268
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127
 msgid "Autogeneration will erase all manually edited points."
 msgstr "La autogeneración borrará todos los puntos editados manualmente."
 
-#: src/slic3r/GUI/Tab.cpp:3632
+#: src/slic3r/GUI/Tab.cpp:4051
 msgid "Automatic generation"
 msgstr "Generación automática"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Automatic updates"
 msgstr "Actualizaciones automáticas"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "Automatically repair an STL file"
 msgstr "Archivo STL reparado automáticamente"
 
-#: src/slic3r/GUI/Tab.cpp:1171
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:129
+msgid "Autoset by angle"
+msgstr "Establecer automáticamente según ángulo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:233
+msgid "Autoset custom supports"
+msgstr "Soportes personalizados automáticos"
+
+#: src/slic3r/GUI/Tab.cpp:1501
 msgid "Autospeed (advanced)"
 msgstr "Velocidad automática (avanzado)"
 
-#: src/libslic3r/PrintConfig.cpp:136
+#: src/libslic3r/PrintConfig.cpp:169
 msgid "Avoid crossing perimeters"
 msgstr "Evita cruzar perímetros"
 
-#: src/slic3r/GUI/Tab.cpp:3268
+#: src/slic3r/GUI/Tab.cpp:3705
 msgid "BACK ARROW"
 msgstr "FLECHA HACIA ATRÁS"
 
-#: src/slic3r/GUI/Tab.cpp:3290
+#: src/slic3r/GUI/Tab.cpp:3727
 msgid ""
 "BACK ARROW icon indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
 "Click to reset all settings for the current option group to the last saved preset."
@@ -880,7 +1020,7 @@ msgstr ""
 "El símbolo de FLECHA ATRÁS indica que los ajustes cambiaron y que no son iguales a los que se guardaron para el grupo de opciones actual.\n"
 "Haz clic para devolver esos valores a los últimos guardados."
 
-#: src/slic3r/GUI/Tab.cpp:3304
+#: src/slic3r/GUI/Tab.cpp:3741
 msgid ""
 "BACK ARROW icon indicates that the value was changed and is not equal to the last saved preset.\n"
 "Click to reset current value to the last saved preset."
@@ -888,19 +1028,23 @@ msgstr ""
 "La FLECHA ATRÁS indica que el valor ha cambiado y ya no es el mismo que el guardado la última vez.\n"
 "Haz clic para restaurar el valor al último ajuste guardado."
 
-#: src/slic3r/GUI/Preferences.cpp:55
+#: src/slic3r/GUI/Preferences.cpp:72
 msgid "Background processing"
 msgstr "Procesamiento en segundo plano"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:351
+#: src/slic3r/GUI/GUI_ObjectList.cpp:398
 msgid "backwards edges"
 msgstr "bordes hacia atrás"
 
-#: src/slic3r/GUI/MainFrame.cpp:174
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:60
+msgid "Balanced"
+msgstr "Balanceado"
+
+#: src/slic3r/GUI/MainFrame.cpp:535 src/slic3r/GUI/MainFrame.cpp:537
 msgid "based on Slic3r"
 msgstr "basado en Slic3r"
 
-#: src/slic3r/GUI/Tab.cpp:1439
+#: src/slic3r/GUI/Tab.cpp:1785
 msgid "Bed"
 msgstr "Base"
 
@@ -912,7 +1056,7 @@ msgstr "Modelo de base personalizado"
 msgid "Bed custom texture"
 msgstr "Textura personalizada de la base"
 
-#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/BedShapeDialog.hpp:98 src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape"
 msgstr "Forma de la base de impresión"
 
@@ -920,23 +1064,23 @@ msgstr "Forma de la base de impresión"
 msgid "Bed shape"
 msgstr "Forma de la base de impresión"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape and Size"
 msgstr "Tamaño y forma de la base"
 
-#: src/libslic3r/PrintConfig.cpp:147
+#: src/libslic3r/PrintConfig.cpp:181
 msgid "Bed temperature"
 msgstr "Temperatura de la base"
 
-#: src/libslic3r/PrintConfig.cpp:145
+#: src/libslic3r/PrintConfig.cpp:178
 msgid "Bed temperature for layers after the first one. Set this to zero to disable bed temperature control commands in the output."
-msgstr "Temperatura de la base calefactable para las capas después de la primera. Ajuste esto a cero para deshabilitar los comandos de control de temperatura de la base calefactable en la salida."
+msgstr "Temperatura de la base calefactable para las capas después de la primera. Ajusta esto a cero para deshabilitar los comandos de control de temperatura de la base calefactable en la salida."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1051
+#: src/slic3r/GUI/ConfigWizard.cpp:1417
 msgid "Bed Temperature:"
 msgstr "Temperatura de la base:"
 
-#: src/slic3r/GUI/Tab.cpp:1988 src/libslic3r/PrintConfig.cpp:153
+#: src/slic3r/GUI/Tab.cpp:2175 src/libslic3r/PrintConfig.cpp:187
 msgid "Before layer change G-code"
 msgstr "Código G para antes del cambio de capa"
 
@@ -944,143 +1088,191 @@ msgstr "Código G para antes del cambio de capa"
 msgid "Before roll back"
 msgstr "Antes de volver atrás"
 
-#: src/slic3r/GUI/Plater.cpp:640
+#: src/slic3r/GUI/Plater.cpp:506
 msgid "Below object"
 msgstr "Por debajo del objeto"
 
-#: src/libslic3r/PrintConfig.cpp:1578
+#: src/libslic3r/PrintConfig.cpp:1686
 msgid "Below Z"
 msgstr "Por debajo de Z"
 
-#: src/libslic3r/PrintConfig.cpp:164
+#: src/libslic3r/PrintConfig.cpp:198
 msgid "Between objects G-code"
 msgstr "Código G para entre objetos"
 
-#: src/slic3r/GUI/Tab.cpp:2006
+#: src/slic3r/GUI/Tab.cpp:2196
 msgid "Between objects G-code (for sequential printing)"
 msgstr "Código G para entre objetos (para impresión secuencial)"
 
-#: src/libslic3r/PrintConfig.cpp:2489 src/libslic3r/PrintConfig.cpp:2490
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:242
+msgid "Block"
+msgstr "Bloquear"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:32
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:383
+msgid "Block seam"
+msgstr "Bloquear costura"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:373
+msgid "Block supports"
+msgstr "Bloquear soportes"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:292
+msgid "Block supports by angle"
+msgstr "Bloquear soportes según ángulo"
+
+#: src/libslic3r/PrintConfig.cpp:2632 src/libslic3r/PrintConfig.cpp:2633
 msgid "Bottle volume"
 msgstr "Volumen de la botella"
 
-#: src/libslic3r/PrintConfig.cpp:2496 src/libslic3r/PrintConfig.cpp:2497
+#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2640
 msgid "Bottle weight"
 msgstr "Peso botella"
 
 #. TRN To be shown in the main menu View->Bottom
 #. TRN To be shown in Print Settings "Bottom solid layers"
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:665 src/libslic3r/PrintConfig.cpp:174
-#: src/libslic3r/PrintConfig.cpp:183
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
+#: src/libslic3r/PrintConfig.cpp:208 src/libslic3r/PrintConfig.cpp:217
 msgid "Bottom"
 msgstr "Inferior"
 
-#: src/libslic3r/PrintConfig.cpp:435
+#: src/libslic3r/PrintConfig.cpp:471
 msgid "Bottom fill pattern"
 msgstr "Patrón de relleno inferior"
 
-#: src/slic3r/GUI/PresetHints.cpp:342
+#: src/slic3r/GUI/PresetHints.cpp:340
 msgid "Bottom is open."
 msgstr "La parte inferior está abierta."
 
-#: src/slic3r/GUI/PresetHints.cpp:336
+#: src/slic3r/GUI/PresetHints.cpp:334
 msgid "Bottom shell is %1% mm thick for layer height %2% mm."
 msgstr "La carcasa  inferior es %1% mm más grueso para la altura de capa de %2% mm."
 
-#: src/libslic3r/PrintConfig.cpp:177
+#: src/libslic3r/PrintConfig.cpp:211
 msgid "Bottom solid layers"
 msgstr "Capas sólidas inferiores"
 
-#: src/slic3r/GUI/MainFrame.cpp:665
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
 msgid "Bottom View"
 msgstr "Vista inferior"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1464
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1468
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1595
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
 msgid "Box"
 msgstr "Caja"
 
-#: src/libslic3r/PrintConfig.cpp:193
+#: src/libslic3r/PrintConfig.cpp:227
 msgid "Bridge"
 msgstr "Puente"
 
-#: src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:256
 msgid "Bridge flow ratio"
 msgstr "Relación de flujo del puente"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/slic3r/GUI/GUI_Preview.cpp:308 src/libslic3r/ExtrusionEntity.cpp:321
+#: src/libslic3r/ExtrusionEntity.cpp:350
 msgid "Bridge infill"
 msgstr "Relleno de puente"
 
-#: src/libslic3r/PrintConfig.cpp:234
+#: src/libslic3r/PrintConfig.cpp:268
 msgid "Bridges"
 msgstr "Puentes"
 
-#: src/libslic3r/PrintConfig.cpp:213
+#: src/libslic3r/PrintConfig.cpp:247
 msgid "Bridges fan speed"
 msgstr "Velocidad del ventilador para puentes"
 
-#: src/libslic3r/PrintConfig.cpp:202
+#: src/libslic3r/PrintConfig.cpp:236
 msgid "Bridging angle"
 msgstr "Ángulo de puente"
 
-#: src/libslic3r/PrintConfig.cpp:204
+#: src/libslic3r/PrintConfig.cpp:238
 msgid "Bridging angle override. If left to zero, the bridging angle will be calculated automatically. Otherwise the provided angle will be used for all bridges. Use 180° for zero angle."
 msgstr "Anulación de ángulo de puente. Si se deja en cero, el ángulo de puente se calculará automáticamente. De lo contrario, el ángulo proporcionado se usará para todos los puentes. Use 180 ° para ángulo con cero grados."
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Bridging volumetric"
 msgstr "Puente volumétrico"
 
-#: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1117
+#: src/slic3r/GUI/Plater.cpp:400 src/slic3r/GUI/Tab.cpp:1446
 msgid "Brim"
 msgstr "Balsa"
 
-#: src/libslic3r/PrintConfig.cpp:244
+#: src/libslic3r/PrintConfig.cpp:278
 msgid "Brim width"
 msgstr "Ancho de la balsa"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1658
-#: src/slic3r/GUI/Tab.cpp:1721
+#: src/slic3r/GUI/FirmwareDialog.cpp:805
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:271
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
 msgid "Browse"
 msgstr "Buscar"
 
-#: src/libslic3r/Zipper.cpp:82
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:28
+msgid "Brush shape"
+msgstr "Forma de pincel"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:44
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:27
+msgid "Brush size"
+msgstr "Tamaño del pincel"
+
+#: src/libslic3r/miniz_extension.cpp:141
 msgid "buffer too small"
 msgstr "buffer demasiado pequeño"
 
+#: src/slic3r/GUI/GUI_App.cpp:1152
+msgid ""
+"But since this version of PrusaSlicer we don't show this information in Printer Settings anymore.\n"
+"Settings will be available in physical printers settings."
+msgstr ""
+"Pero dado que a partir de esta versión de PrusaSlicer ya no mostramos esta información el los ajustes de impresora.\n"
+"Los ajustes se mostrarán en la configuración de impresora física."
+
 #: src/slic3r/GUI/ButtonsDescription.cpp:16
 msgid "Buttons And Text Colors Description"
 msgstr "Descripción de los botones y de los colores del texto"
 
-#: src/slic3r/GUI/PresetHints.cpp:223
+#: src/slic3r/GUI/GUI_App.cpp:1084
+msgid ""
+"By default new Printer devices will be named as \"Printer N\" during its creation.\n"
+"Note: This name can be changed later from the physical printers settings"
+msgstr ""
+"Por defecto, los nuevos dispositivos de impresión se llamarán \"Impresora N\" durante su creación.\n"
+"Nota: Este nombre se puede cambiar posteriormente en los ajustes de impresora física"
+
+#: src/slic3r/GUI/PresetHints.cpp:222
 msgid "by the print profile maximum"
 msgstr "por el máximo perfil de impresión"
 
-#: src/slic3r/GUI/Preferences.cpp:113
+#: src/slic3r/GUI/Preferences.cpp:178
 msgid "Camera"
 msgstr "Cámara"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:144
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
 msgid "Camera view"
 msgstr "Vista de cámara"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1982 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/ConfigWizard.cpp:2493 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:245
 #: src/slic3r/GUI/ProgressStatusBar.cpp:26
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:644
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:157
+#: src/slic3r/GUI/PrintHostDialogs.cpp:155
 msgid "Cancel selected"
 msgstr "Cancelar selección"
 
-#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/PrintHostDialogs.cpp:233
+#: src/slic3r/GUI/Plater.cpp:3589 src/slic3r/GUI/PrintHostDialogs.cpp:233
 msgid "Cancelled"
 msgstr "Cancelado"
 
-#: src/slic3r/GUI/Plater.cpp:3153 src/slic3r/GUI/PrintHostDialogs.cpp:232
+#: src/slic3r/GUI/Plater.cpp:2953 src/slic3r/GUI/PrintHostDialogs.cpp:232
 msgid "Cancelling"
 msgstr "Cancelando"
 
@@ -1092,7 +1284,7 @@ msgstr "Cancelando..."
 msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
 msgstr "No se puede calcular el ancho de extrusión para %1%: Variable \"%2%\" no accesible."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3400
 msgid ""
 "Cannot insert a new layer range after the current layer range.\n"
 "Current layer range overlaps with the next layer range."
@@ -1100,7 +1292,7 @@ msgstr ""
 "No se puede insertar un nuevo rango de capas después del rango de capa actual.\n"
 "El rango de capa actual se superpone con el siguiente rango de capa."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3391
 msgid ""
 "Cannot insert a new layer range after the current layer range.\n"
 "The next layer range is too thin to be split to two\n"
@@ -1110,7 +1302,7 @@ msgstr ""
 "El siguiente rango de capa es demasiado delgado para dividirse en dos\n"
 "sin violar la altura mínima de la capa."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3395
 msgid ""
 "Cannot insert a new layer range between the current and the next layer range.\n"
 "The gap between the current layer range and the next layer range\n"
@@ -1120,80 +1312,88 @@ msgstr ""
 "La brecha entre el rango de capa actual y el siguiente rango de capa\n"
 "es más delgada que la altura mínima de capa permitida."
 
-#: src/slic3r/GUI/Tab.cpp:3073
+#: src/slic3r/GUI/SavePresetDialog.cpp:137
 msgid "Cannot overwrite a system profile."
 msgstr "No se puede sobre-escribir un perfil del sistema."
 
-#: src/slic3r/GUI/Tab.cpp:3077
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
 msgid "Cannot overwrite an external profile."
 msgstr "No puedo sobre-escribir un valor externo."
 
-#: src/libslic3r/SLAPrint.cpp:613
+#: src/libslic3r/SLAPrint.cpp:627
 msgid "Cannot proceed without support points! Add support points or disable support generation."
 msgstr "No se puede proceder sin puntos de soporte! Añade puntos de soporte o desactiva la generación de soportes."
 
-#: src/slic3r/GUI/Tab.cpp:1834
+#: src/slic3r/GUI/Tab.cpp:2068 src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "Capabilities"
 msgstr "Capacidades"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Capture a configuration snapshot"
 msgstr "Captura una instantánea de configuración"
 
-#: src/libslic3r/PrintConfig.cpp:3424
+#: src/slic3r/GUI/ImGuiWrapper.cpp:801 src/slic3r/GUI/Search.cpp:458
+msgid "Category"
+msgstr "Categoría"
+
+#: src/libslic3r/PrintConfig.cpp:3623
 msgid "Center"
 msgstr "Centro"
 
-#: src/libslic3r/PrintConfig.cpp:3425
+#: src/libslic3r/PrintConfig.cpp:3624
 msgid "Center the print around the given center."
 msgstr "Centrar la impresión alrededor del centro dado."
 
-#: src/slic3r/GUI/Tab.cpp:1728
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:329
 msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
 msgstr "Archivos de certificados (*.crt, *.pem)|*.crt;*.pem|Todos|*.*"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+#: src/slic3r/GUI/SavePresetDialog.cpp:313
+msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\""
+msgstr "Cambia \"%1%\" a \"%2%\" para esta impresora física \"%3%\""
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
 msgid "Change camera type (perspective, orthographic)"
 msgstr "Cambiar tipo de cámara (perspectiva, ortográfica)"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:885
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:693
 msgid "Change drainage hole diameter"
 msgstr "Cambiar diámetro orificio de drenaje"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144 src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/DoubleSlider.cpp:1273 src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Change extruder"
 msgstr "Cambiar extrusor"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:536
+#: src/slic3r/GUI/GUI_ObjectList.cpp:574
 msgid "Change Extruder"
 msgstr "Cambiar Extrusor"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1145
+#: src/slic3r/GUI/DoubleSlider.cpp:1274
 msgid "Change extruder (N/A)"
 msgstr "Cambiar extrusor (N/A)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3997
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4484
 msgid "Change Extruders"
 msgstr "Cambiar Extrusores"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:157
 #, c-format
 msgid "Change Option %s"
 msgstr "Cambiar opción %s"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3558
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4021
 msgid "Change Part Type"
 msgstr "Cambiar Tipo de Pieza"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:820
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:694
 msgid "Change point head diameter"
 msgstr "Cambiar diámetro de la cabeza de punta"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Change the number of instances of the selected object"
 msgstr "Cambiar número de instancias al objeto seleccionado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1589
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1718
 msgid "Change type"
 msgstr "Cambiar tipo"
 
@@ -1201,125 +1401,172 @@ msgstr "Cambiar tipo"
 msgid "Changelog && Download"
 msgstr "Registro de cambios && Descargar"
 
-#: src/slic3r/GUI/GUI_App.cpp:442
+#: src/slic3r/GUI/GUI_App.cpp:1245
 msgid "Changing of an application language"
 msgstr "Cambio de idioma de una aplicación"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:769 src/slic3r/GUI/Preferences.cpp:64
+#: src/slic3r/GUI/ConfigWizard.cpp:1128 src/slic3r/GUI/Preferences.cpp:81
 msgid "Check for application updates"
 msgstr "Comprueba si hay actualizaciones de la aplicación"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for configuration updates"
 msgstr "Comprueba si hay actualizaciones de configuración"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for updates"
 msgstr "Comprueba si hay act&ualizaciones"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:532
+#: src/slic3r/GUI/BedShapeDialog.cpp:608
 msgid "Choose a file to import bed texture from (PNG/SVG):"
 msgstr "Escoge un archivo para importar la textura de la base de impresión (PNG/SVG):"
 
-#: src/slic3r/GUI/MainFrame.cpp:773
+#: src/slic3r/GUI/MainFrame.cpp:1474
 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Elija un archivo para laminar (STL / OBJ / AMF / 3MF / PRUSA):"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:555
+#: src/slic3r/GUI/BedShapeDialog.cpp:631
 msgid "Choose an STL file to import bed model from:"
 msgstr "Escoge un archivo STL para importar el modelo de la base de impresión:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:487
+#: src/slic3r/GUI/BedShapeDialog.cpp:563
 msgid "Choose an STL file to import bed shape from:"
 msgstr "Escoge un archivo STL para importar la forma de la base:"
 
-#: src/slic3r/GUI/GUI_App.cpp:555
+#: src/slic3r/GUI/GUI_App.cpp:1208
 msgid "Choose one file (3MF/AMF):"
 msgstr "Selecciona un archivo (3MF/AMF):"
 
-#: src/slic3r/GUI/GUI_App.cpp:567
+#: src/slic3r/GUI/GUI_App.cpp:1233
+msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):"
+msgstr "Elige un archivo (GCODE/.GCO/.G/.ngc/NGC):"
+
+#: src/slic3r/GUI/GUI_App.cpp:1220
 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Escoja uno o mas archivos (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:895
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:35
+msgid "Choose SLA archive:"
+msgstr "Elegir archivo SLA:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1261
 msgid "Choose the type of firmware used by your printer."
 msgstr "Selecciona el tipo de firmware que usa tu impresora."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:89
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:53
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:36
+msgid "Circle"
+msgstr "Círculo"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:142
 msgid "Circular"
 msgstr "Circular"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/GLCanvas3D.cpp:4657
-msgid "Click right mouse button to open History"
-msgstr "Click con botón derecho para abrir Historial"
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
+msgid "Click right mouse button to open/close History"
+msgstr "Clic con botón derecho del ratón para abrir/cerrar Historia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:404
+#: src/slic3r/GUI/GUI_ObjectList.cpp:451
 msgid "Click the icon to change the object printable property"
 msgstr "Click en el icono para cambiar las propiedades del objeto imprimible"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:398
+#: src/slic3r/GUI/GUI_ObjectList.cpp:445
 msgid "Click the icon to change the object settings"
 msgstr "Click en el icono para cambiar los ajustes del objeto"
 
-#: src/slic3r/GUI/Plater.cpp:343
+#: src/slic3r/GUI/PresetComboBoxes.cpp:566
 msgid "Click to edit preset"
 msgstr "Clic para cambiar el ajuste inicial"
 
-#: src/libslic3r/PrintConfig.cpp:252
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to hide"
+msgstr "Clic para ocultar"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to show"
+msgstr "Clic para mostrar"
+
+#: src/libslic3r/PrintConfig.cpp:286
 msgid "Clip multi-part objects"
 msgstr "Enlazaar objetos de varias partes"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:25
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
 msgid "Clipping of view"
 msgstr "Recorte de la vista"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:852
-#: src/slic3r/GUI/Mouse3DController.cpp:364
-#: src/slic3r/GUI/PrintHostDialogs.cpp:161
+#: src/slic3r/GUI/Mouse3DController.cpp:353
+#: src/slic3r/GUI/PrintHostDialogs.cpp:159
 msgid "Close"
 msgstr "Cerrar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
-#: src/libslic3r/PrintConfig.cpp:2934
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:3098
 msgid "Closing distance"
 msgstr "Distancia de cierre"
 
-#: src/slic3r/GUI/Plater.cpp:1260 src/libslic3r/PrintConfig.cpp:582
+#: src/slic3r/GUI/MainFrame.cpp:1297 src/slic3r/GUI/Plater.cpp:2144
+msgid "Collapse sidebar"
+msgstr "Ocultar barra lateral"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+msgid "Collapse/Expand the sidebar"
+msgstr "Ocultar/Expandir barra lateral"
+
+#: src/slic3r/GUI/Plater.cpp:1198 src/libslic3r/PrintConfig.cpp:618
 msgid "Color"
 msgstr "Color"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1005
+#: src/slic3r/GUI/GCodeViewer.cpp:2410 src/slic3r/GUI/GCodeViewer.cpp:2438
+msgid "Color change"
+msgstr "Cambio de color"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1130
 msgid "Color change (\"%1%\")"
 msgstr "Cambio de color (\"%1%\")"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1006
+#: src/slic3r/GUI/DoubleSlider.cpp:1131
 msgid "Color change (\"%1%\") for Extruder %2%"
 msgstr "Cambio de color (\"%1%\") para el Extrusor %2%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:995
+#: src/slic3r/GUI/GLCanvas3D.cpp:1001
 #, c-format
 msgid "Color change for Extruder %d at %.2f mm"
 msgstr "Cambio de color para Extrusor %d en %.2f mm"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:228 src/slic3r/GUI/GUI_Preview.cpp:572
-#: src/libslic3r/GCode/PreviewData.cpp:359
+#: src/slic3r/GUI/Tab.cpp:2203
+msgid "Color Change G-code"
+msgstr "Código G Cambio Color"
+
+#: src/libslic3r/PrintConfig.cpp:1960
+msgid "Color change G-code"
+msgstr "Código G Cambio color"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2531 src/slic3r/GUI/GUI_Preview.cpp:1475
+msgid "Color changes"
+msgstr "Cambios de color"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2242 src/slic3r/GUI/GUI_Preview.cpp:282
+#: src/slic3r/GUI/GUI_Preview.cpp:784 src/libslic3r/GCode/PreviewData.cpp:364
 msgid "Color Print"
 msgstr "Color Print"
 
-#: src/libslic3r/PrintConfig.cpp:260
+#: src/libslic3r/PrintConfig.cpp:294
 msgid "Colorprint height"
 msgstr "Altura de Colorprint"
 
-#: src/libslic3r/PrintConfig.cpp:990
+#: src/libslic3r/PrintConfig.cpp:1034
 msgid "Combine infill every"
 msgstr "Combinar el relleno cada"
 
-#: src/libslic3r/PrintConfig.cpp:995
+#: src/libslic3r/PrintConfig.cpp:1039
 msgid "Combine infill every n layers"
 msgstr "Combinar el relleno cada n capas"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:148
 msgid "Commands"
 msgstr "Comandos"
 
@@ -1327,23 +1574,23 @@ msgstr "Comandos"
 msgid "Comment:"
 msgstr "Comentario:"
 
-#: src/slic3r/GUI/Tab.cpp:56 src/libslic3r/PrintConfig.cpp:280
+#: src/slic3r/GUI/Tab.cpp:107 src/libslic3r/PrintConfig.cpp:314
 msgid "Compatible print profiles"
 msgstr "Perfiles de impresión compatibles"
 
-#: src/libslic3r/PrintConfig.cpp:286
+#: src/libslic3r/PrintConfig.cpp:320
 msgid "Compatible print profiles condition"
 msgstr "Condición de perfiles de impresión compatibles"
 
-#: src/slic3r/GUI/Tab.cpp:50 src/libslic3r/PrintConfig.cpp:265
+#: src/slic3r/GUI/Tab.cpp:101 src/libslic3r/PrintConfig.cpp:299
 msgid "Compatible printers"
 msgstr "Impresoras compatibles"
 
-#: src/libslic3r/PrintConfig.cpp:271
+#: src/libslic3r/PrintConfig.cpp:305
 msgid "Compatible printers condition"
 msgstr "Condición de impresoras compatibles"
 
-#: src/libslic3r/PrintConfig.cpp:304
+#: src/libslic3r/PrintConfig.cpp:338
 msgid "Complete individual objects"
 msgstr "Completar objetos individuales"
 
@@ -1351,27 +1598,27 @@ msgstr "Completar objetos individuales"
 msgid "Completed"
 msgstr "Completado"
 
-#: src/libslic3r/Zipper.cpp:54
+#: src/libslic3r/miniz_extension.cpp:113
 msgid "compression failed"
 msgstr "compresión fallida"
 
-#: src/libslic3r/PrintConfig.cpp:426 src/libslic3r/PrintConfig.cpp:849
+#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:887
 msgid "Concentric"
 msgstr "Concentrico"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2110
+#: src/slic3r/GUI/ConfigWizard.cpp:2625
 msgid "Configuration &Assistant"
 msgstr "&Asistente de configuración"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2113
+#: src/slic3r/GUI/ConfigWizard.cpp:2628
 msgid "Configuration &Wizard"
 msgstr "Ayudante de co&nfiguración"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2109
+#: src/slic3r/GUI/ConfigWizard.cpp:2624
 msgid "Configuration Assistant"
 msgstr "Asistente de Configuración"
 
-#: src/libslic3r/PrintConfig.cpp:1316
+#: src/libslic3r/PrintConfig.cpp:1424
 msgid "Configuration notes"
 msgstr "Notas de configuración"
 
@@ -1387,11 +1634,15 @@ msgstr "Actualización de configuración"
 msgid "Configuration update is available"
 msgstr "Hay disponible una actualización de la Configuración"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "Configuration update is available."
+msgstr "Disponible la actualización de la configuración."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "Configuration updates"
 msgstr "Actualizaciones de la configuración"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2112
+#: src/slic3r/GUI/ConfigWizard.cpp:2627
 msgid "Configuration Wizard"
 msgstr "Asistente de configuración"
 
@@ -1399,15 +1650,11 @@ msgstr "Asistente de configuración"
 msgid "Confirmation"
 msgstr "Confirmación"
 
-#: src/slic3r/GUI/Tab.cpp:1931
-msgid "Connection failed."
-msgstr "Conexión fallida."
-
-#: src/slic3r/GUI/Tab.cpp:3627
+#: src/slic3r/GUI/Tab.cpp:4046
 msgid "Connection of the support sticks and junctions"
 msgstr "Conexión de las varillas de soporte y uniones"
 
-#: src/slic3r/Utils/AstroBox.cpp:83
+#: src/slic3r/Utils/AstroBox.cpp:84
 msgid "Connection to AstroBox works correctly."
 msgstr "La conexión a Astrobox funciona correctamente."
 
@@ -1423,124 +1670,136 @@ msgstr "La conexión a FlashAir funciona correctamente y la carga está habilita
 msgid "Connection to OctoPrint works correctly."
 msgstr "La conexión a OctoPrint funciona correctamente."
 
-#: src/slic3r/GUI/Tab.cpp:1928
-msgid "Connection to printer works correctly."
-msgstr "La conexión con la impresora funciona correctamente."
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:260
+msgid "Connection to printers connected via the print host failed."
+msgstr "Falló la conexión a las impresoras conectadas a través del host de impresión."
 
-#: src/slic3r/Utils/OctoPrint.cpp:176
+#: src/slic3r/Utils/OctoPrint.cpp:185
 msgid "Connection to Prusa SL1 works correctly."
 msgstr "La conexión con la Prusa SL1 funciona correctamente."
 
-#: src/libslic3r/PrintConfig.cpp:1909
+#: src/libslic3r/PrintConfig.cpp:2051
 msgid "Contact Z distance"
 msgstr "Distancia Z de contacto"
 
-#: src/slic3r/GUI/AboutDialog.cpp:261
+#: src/slic3r/GUI/AboutDialog.cpp:286
 msgid "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and numerous others."
 msgstr "Contribuciones de Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik y muchos otros."
 
-#: src/libslic3r/PrintConfig.cpp:2659
+#: src/slic3r/GUI/GUI_App.cpp:245
+msgid "Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others."
+msgstr "Contribuciones de  Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik y muchos otros."
+
+#: src/libslic3r/PrintConfig.cpp:2823
 msgid "Controls the bridge type between two neighboring pillars. Can be zig-zag, cross (double zig-zag) or dynamic which will automatically switch between the first two depending on the distance of the two pillars."
 msgstr "Controla el tipo de puente entre dos pilares adyacentes. Puede ser zig-zag, cruzado(doble zig-zag) o dinámico que cambiará automáticamente entre los dos primeros dependiendo de la distancia de los dos pilares."
 
-#: src/slic3r/GUI/Tab.cpp:1444
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4886
+msgid "Convert from imperial units"
+msgstr "Convertir de unidades imperiales"
+
+#: src/slic3r/GUI/Tab.cpp:1790
 msgid "Cooling"
 msgstr "Enfriamiento"
 
-#: src/libslic3r/PrintConfig.cpp:660
+#: src/libslic3r/PrintConfig.cpp:696
 msgid "Cooling moves are gradually accelerating beginning at this speed."
 msgstr "Los movimientos de enfriamiento se están acelerando gradualmente comenzando a esta velocidad."
 
-#: src/libslic3r/PrintConfig.cpp:679
+#: src/libslic3r/PrintConfig.cpp:715
 msgid "Cooling moves are gradually accelerating towards this speed."
 msgstr "Los movimientos de enfriamiento se están acelerando gradualmente hacia esta velocidad."
 
-#: src/slic3r/GUI/Tab.cpp:1465
+#: src/slic3r/GUI/Tab.cpp:1811
 msgid "Cooling thresholds"
 msgstr "Umbrales de enfriamiento"
 
-#: src/libslic3r/PrintConfig.cpp:327
+#: src/libslic3r/PrintConfig.cpp:361
 msgid "Cooling tube length"
 msgstr "Longitud del tubo de enfriamiento"
 
-#: src/libslic3r/PrintConfig.cpp:319
+#: src/libslic3r/PrintConfig.cpp:353
 msgid "Cooling tube position"
 msgstr "Posición del tubo de refrigeración"
 
-#: src/slic3r/GUI/Plater.cpp:4752
+#: src/slic3r/GUI/Plater.cpp:4856
 msgid "Copies of the selected object"
 msgstr "Copias del objeto seleccionado"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4505
+#: src/slic3r/GUI/GLCanvas3D.cpp:4871
 msgid "Copy"
 msgstr "Copiar"
 
-#: src/slic3r/GUI/MainFrame.cpp:589
+#: src/slic3r/GUI/MainFrame.cpp:1195
 msgid "Copy selection to clipboard"
 msgstr "Copiar selección al portapapeles"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
 msgid "Copy to clipboard"
 msgstr "Copiar al portapapeles"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:154
+#: src/slic3r/GUI/SysInfoDialog.cpp:177
 msgid "Copy to Clipboard"
 msgstr "Copiar al portapapeles"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:121
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
 msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
 msgstr "La copia del código G temporal ha finalizado, pero el código exportado no se pudo abrir durante la verificación de la copia. El código G de salida está en %1%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:118
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:153
 msgid "Copying of the temporary G-code has finished but the original code at %1% couldn't be opened during copy check. The output G-code is at %2%.tmp."
 msgstr "La copia del código G temporal ha finalizado, pero el código original en %1% no se pudo abrir durante la verificación de copia. El código G de salida está en%2%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:480
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:522
 msgid "Copying of the temporary G-code to the output G-code failed"
 msgstr "Error al copiar el código G temporal al código G de salida"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:109
-msgid "Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?"
-msgstr "La copia del código G tempolar al código G de salida falló. ¿Tal vez la tarjeta SD tiene la escritura bloqueada?"
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+msgid ""
+"Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\n"
+"Error message: %1%"
+msgstr ""
+"Error al copiar el código G temporal en el código G de salida. ¿Quizás la tarjeta SD está bloqueada contra escritura?\n"
+"Mensaje de error: %1%"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:112
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:147
 msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
 msgstr "La copia del código G temporal al código G de salida ha fallado. Puede haber un problema con el dispositivo de destino, intenta exportar nuevamente o usa un dispositivo diferente. El código G de salida dañado está en %1%.tmp."
 
-#: src/slic3r/GUI/AboutDialog.cpp:127 src/slic3r/GUI/AboutDialog.cpp:256
+#: src/slic3r/GUI/AboutDialog.cpp:139 src/slic3r/GUI/AboutDialog.cpp:281
 msgid "Copyright"
 msgstr "Copyright"
 
-#: src/libslic3r/PrintConfig.cpp:2571 src/libslic3r/PrintConfig.cpp:2572
+#: src/libslic3r/PrintConfig.cpp:2714 src/libslic3r/PrintConfig.cpp:2715
 msgid "Correction for expansion"
 msgstr "Corrección para la expansión"
 
-#: src/slic3r/GUI/Tab.cpp:2100 src/slic3r/GUI/Tab.cpp:3519
+#: src/slic3r/GUI/Tab.cpp:2270 src/slic3r/GUI/Tab.cpp:3935
 msgid "Corrections"
 msgstr "Correcciones"
 
-#: src/slic3r/GUI/Plater.cpp:1243 src/libslic3r/PrintConfig.cpp:760
-#: src/libslic3r/PrintConfig.cpp:2510 src/libslic3r/PrintConfig.cpp:2511
+#: src/slic3r/GUI/Plater.cpp:1158 src/libslic3r/PrintConfig.cpp:796
+#: src/libslic3r/PrintConfig.cpp:2653 src/libslic3r/PrintConfig.cpp:2654
 msgid "Cost"
 msgstr "Coste"
 
-#: src/slic3r/GUI/Plater.cpp:239
+#: src/slic3r/GUI/Plater.cpp:245
 msgid "Cost (money)"
 msgstr "Coste (dinero)"
 
-#: src/slic3r/GUI/Plater.cpp:2835
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:176
 msgid "Could not arrange model objects! Some geometries may be invalid."
 msgstr "¡No se pudieron organizar los objetos modelo! Algunas geometrías pueden ser inválidas."
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/Utils/AstroBox.cpp:90
 msgid "Could not connect to AstroBox"
 msgstr "No se pudo conectar con Astrobox"
 
-#: src/slic3r/Utils/Duet.cpp:54
+#: src/slic3r/Utils/Duet.cpp:55
 msgid "Could not connect to Duet"
 msgstr "No se pudo conectar con la Duet"
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:74
 msgid "Could not connect to FlashAir"
 msgstr "No puedo conectar con FlashAir"
 
@@ -1548,56 +1807,69 @@ msgstr "No puedo conectar con FlashAir"
 msgid "Could not connect to OctoPrint"
 msgstr "No puedo conectar con OctoPrint"
 
-#: src/slic3r/Utils/OctoPrint.cpp:181
+#: src/slic3r/Utils/OctoPrint.cpp:191
 msgid "Could not connect to Prusa SLA"
 msgstr "No se pudo conectar con la Prusa SLA"
 
-#: src/slic3r/GUI/Tab.cpp:1687
+#: src/slic3r/Utils/Http.cpp:73
+msgid "Could not detect system SSL certificate store. PrusaSlicer will be unable to establish secure network connections."
+msgstr "No se pudo detectar el almacén de certificados SSL del sistema. PrusaSlicer no podrá establecer conexiones de red seguras."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:289
 msgid "Could not get a valid Printer Host reference"
 msgstr "No pude conseguir una referencia válida de gestor de impresora"
 
-#: src/slic3r/Utils/Duet.cpp:134
+#: src/slic3r/Utils/Duet.cpp:136
 msgid "Could not get resources to create a new connection"
 msgstr "No se pudieron obtener recursos para crear una nueva conexión"
 
-#: src/libslic3r/PrintConfig.cpp:1959
+#: src/libslic3r/PrintConfig.cpp:2101
 msgid "Cover the top contact layer of the supports with loops. Disabled by default."
 msgstr "Cubrir la capa de contacto superior de los soportes con bucles. Desactivado por defecto."
 
-#: src/libslic3r/PrintConfig.cpp:89
+#: src/libslic3r/PrintConfig.cpp:91
 msgid "Cracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low."
 msgstr "Las ranuras de menos de dos veces el radio de cierre de huecos se rellenan durante el laminado de la malla triangular. La operación de cierre de huecos puede reducir la resolución de la impresión, por lo tanto es aconsejable mantener ese valor razonablemente bajo."
 
-#: src/libslic3r/Zipper.cpp:58
+#: src/libslic3r/miniz_extension.cpp:117
 msgid "CRC-32 check failed"
 msgstr "Comprobación con CRC-32 fallida"
 
-#: src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:3021
 msgid "Create pad around object and ignore the support elevation"
 msgstr "Crear pad alrededor del objeto e ignorar la elevación del soporte"
 
-#: src/libslic3r/PrintConfig.cpp:2724
+#: src/libslic3r/PrintConfig.cpp:2888
 msgid "Critical angle"
 msgstr "Ángulo crítico"
 
-#: src/libslic3r/PrintConfig.cpp:2668
+#: src/libslic3r/PrintConfig.cpp:2832
 msgid "Cross"
 msgstr "Cruzado"
 
-#: src/libslic3r/PrintConfig.cpp:847
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:225
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:203
+msgid "Ctrl + Mouse wheel"
+msgstr "Ctrl + Rueda del ratón"
+
+#: src/libslic3r/PrintConfig.cpp:885
 msgid "Cubic"
 msgstr "Cúbico"
 
-#: src/slic3r/GUI/wxExtensions.cpp:704
+#: src/slic3r/Utils/Http.cpp:91
+msgid "CURL init has failed. PrusaSlicer will be unable to establish network connections. See logs for additional details."
+msgstr "CURL init ha fallado. PrusaSlicer no podrá establecer conexiones de red. Consulta los registros para obtener detalles adicionales."
+
+#: src/slic3r/GUI/wxExtensions.cpp:624
 #, c-format
 msgid "Current mode is %s"
 msgstr "El modo actual es %s"
 
-#: src/slic3r/GUI/Tab.cpp:959
+#: src/slic3r/GUI/Tab.cpp:1278
 msgid "Current preset is inherited from"
 msgstr "El preajuste fue heredado de"
 
-#: src/slic3r/GUI/Tab.cpp:957
+#: src/slic3r/GUI/Tab.cpp:1276
 msgid "Current preset is inherited from the default preset."
 msgstr "El preajuste fue heredado del preajuste predeterminado."
 
@@ -1605,451 +1877,488 @@ msgstr "El preajuste fue heredado del preajuste predeterminado."
 msgid "Current version:"
 msgstr "Versión actual:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:98 src/slic3r/GUI/GUI_Preview.cpp:249
-#: src/libslic3r/ExtrusionEntity.cpp:322
+#: src/slic3r/GUI/BedShapeDialog.cpp:143 src/slic3r/GUI/GUI_Preview.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:327 src/libslic3r/ExtrusionEntity.cpp:362
 msgid "Custom"
 msgstr "Personalizado"
 
-#: src/libslic3r/PrintConfig.cpp:112
+#: src/libslic3r/PrintConfig.cpp:114
 msgid "Custom CA certificate file can be specified for HTTPS OctoPrint connections, in crt/pem format. If left blank, the default OS CA certificate repository is used."
 msgstr "Un archivo de certificado CA personalizado puede ser especificado para conexiones HTTPS OctoPrint, en formato crt/pem. Si se deja en blanco,  el repositorio de certificados OS CA será usado."
 
-#: src/slic3r/GUI/Tab.cpp:1527 src/slic3r/GUI/Tab.cpp:1975
+#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2160
+#: src/libslic3r/PrintConfig.cpp:1978
 msgid "Custom G-code"
 msgstr "Código G personalizado"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1619
+#: src/slic3r/GUI/DoubleSlider.cpp:1815
 msgid "Custom G-code on current layer (%1% mm)."
 msgstr "Código G personalizado en la capa actual (%1% mm)."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/GCodeViewer.cpp:2580 src/slic3r/GUI/GUI_Preview.cpp:1477
+msgid "Custom G-codes"
+msgstr "Códigos G personalizados"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer"
 msgstr "Impresora customizada"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer Setup"
 msgstr "Configuración personalizada de impresora"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:736
+#: src/slic3r/GUI/ConfigWizard.cpp:1095
 msgid "Custom profile name:"
 msgstr "Nombre impresora customizada:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:42
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:144 src/libslic3r/PrintConfig.cpp:3402
+#: src/slic3r/GUI/DoubleSlider.cpp:1135
+msgid "Custom template (\"%1%\")"
+msgstr "Plantilla personalizada (\"%1%\")"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:146 src/libslic3r/PrintConfig.cpp:3601
 msgid "Cut"
 msgstr "Cortar"
 
-#: src/slic3r/GUI/Plater.cpp:4786
+#: src/slic3r/GUI/Plater.cpp:4921
 msgid "Cut by Plane"
 msgstr "Cortar por el Plano"
 
-#: src/libslic3r/PrintConfig.cpp:3403
+#: src/libslic3r/PrintConfig.cpp:3602
 msgid "Cut model at the given Z."
 msgstr "Cortar modelo a una Z dada."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Cylinder"
 msgstr "Cilindro"
 
-#: src/slic3r/GUI/MainFrame.cpp:568
+#: src/slic3r/GUI/MainFrame.cpp:1174
 msgid "D&eselect all"
 msgstr "D&eseleccionar todo"
 
-#: src/libslic3r/PrintConfig.cpp:3504
+#: src/libslic3r/PrintConfig.cpp:3709
 msgid "Data directory"
 msgstr "Directorio de datos"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:313
+#: src/slic3r/GUI/Mouse3DController.cpp:300
 msgid "Deadzone:"
 msgstr "Zona muerta:"
 
-#: src/libslic3r/Zipper.cpp:52
+#: src/libslic3r/miniz_extension.cpp:111
 msgid "decompression failed or archive is corrupted"
 msgstr "descompresión fallida o archivo está dañado"
 
-#: src/slic3r/GUI/Plater.cpp:4720
+#: src/slic3r/GUI/Plater.cpp:4824
 msgid "Decrease Instances"
 msgstr "Reducir Instancias"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1704 src/libslic3r/PrintConfig.cpp:335
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1832 src/libslic3r/PrintConfig.cpp:369
 msgid "Default"
 msgstr "Por defecto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:457 src/slic3r/GUI/GUI_ObjectList.cpp:469
-#: src/slic3r/GUI/GUI_ObjectList.cpp:917 src/slic3r/GUI/GUI_ObjectList.cpp:3967
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3977
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4012
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:200
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:257
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:282
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:490
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:1753
+#: src/slic3r/GUI/ExtraRenderers.cpp:297 src/slic3r/GUI/GUI_ObjectList.cpp:496
+#: src/slic3r/GUI/GUI_ObjectList.cpp:508 src/slic3r/GUI/GUI_ObjectList.cpp:1015
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4454
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4464
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4499
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:202
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:259
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:284
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:492
 msgid "default"
 msgstr "por defecto"
 
-#: src/libslic3r/PrintConfig.cpp:777
+#: src/libslic3r/PrintConfig.cpp:813
 msgid "Default base angle for infill orientation. Cross-hatching will be applied to this. Bridges will be infilled using the best direction Slic3r can detect, so this setting does not affect them."
 msgstr "Ángulo base predeterminado para orientación de relleno. Se aplicará sombreado cruzado a esto. Los puentes se rellenarán utilizando la mejor dirección que Slic3r pueda detectar, por lo que esta configuración no los afecta."
 
-#: src/libslic3r/PrintConfig.cpp:554
+#: src/slic3r/GUI/GCodeViewer.cpp:2289
+msgid "Default color"
+msgstr "Color predeterminado"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2313
+msgid "default color"
+msgstr "color predeterminado"
+
+#: src/libslic3r/PrintConfig.cpp:590
 msgid "Default extrusion width"
 msgstr "Ancho de extrusión por defecto"
 
-#: src/slic3r/GUI/Tab.cpp:987
+#: src/slic3r/GUI/Tab.cpp:1305
 msgid "default filament profile"
 msgstr "perfil de filamento por defecto"
 
-#: src/libslic3r/PrintConfig.cpp:345
+#: src/libslic3r/PrintConfig.cpp:379
 msgid "Default filament profile"
 msgstr "Perfil de filamento por defecto"
 
-#: src/libslic3r/PrintConfig.cpp:346
+#: src/libslic3r/PrintConfig.cpp:380
 msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
 msgstr "Perfil de filamento por defecto asociado con el perfil de impresora actual. Al seleccionar el perfil de impresora actual se activará este perfil de filamento."
 
-#: src/slic3r/GUI/Tab.cpp:2919
-#, c-format
-msgid "Default preset (%s)"
-msgstr "Ajustes por defecto (%s)"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:904 src/slic3r/GUI/GLCanvas3D.cpp:933
+#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
 msgid "Default print color"
 msgstr "Color de impresión predeterminado"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1302
 msgid "default print profile"
 msgstr "perfil de impresión por defecto"
 
-#: src/libslic3r/PrintConfig.cpp:352
+#: src/libslic3r/PrintConfig.cpp:386
 msgid "Default print profile"
 msgstr "Perfil de impresión por defecto"
 
-#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:2592
-#: src/libslic3r/PrintConfig.cpp:2603
+#: src/libslic3r/PrintConfig.cpp:387 src/libslic3r/PrintConfig.cpp:2735
+#: src/libslic3r/PrintConfig.cpp:2746
 msgid "Default print profile associated with the current printer profile. On selection of the current printer profile, this print profile will be activated."
 msgstr "Perfil de impresión por defecto asociado con el perfil de impresora actual. Al seleccionar el perfil de impresora actual se activará este perfil de impresión."
 
-#: src/slic3r/GUI/Tab.cpp:1001
+#: src/slic3r/GUI/Tab.cpp:1319
 msgid "default SLA material profile"
 msgstr "perfil de material de SLA por defecto"
 
-#: src/libslic3r/PrintConfig.cpp:2591 src/libslic3r/PrintConfig.cpp:2602
+#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2745
 msgid "Default SLA material profile"
 msgstr "Perfil de material de SLA predeterminado"
 
-#: src/slic3r/GUI/Tab.cpp:1005
+#: src/slic3r/GUI/Tab.cpp:1323
 msgid "default SLA print profile"
 msgstr "perfil de impresión de SLA por defecto"
 
-#: src/slic3r/GUI/Field.cpp:136
+#: src/slic3r/GUI/Field.cpp:184
 msgid "default value"
 msgstr "valor por defecto"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:734
+#: src/slic3r/GUI/ConfigWizard.cpp:1093
 msgid "Define a custom printer profile"
 msgstr "Definir un perfil de impresora personalizado"
 
-#: src/libslic3r/PrintConfig.cpp:2798
+#: src/libslic3r/PrintConfig.cpp:2962
 msgid "Defines the pad cavity depth. Set to zero to disable the cavity. Be careful when enabling this feature, as some resins may produce an extreme suction effect inside the cavity, which makes peeling the print off the vat foil difficult."
 msgstr "Define la profundidad de la cavidad del pad. Establecerer a cero para deshabilitar la cavidad. Ten cuidado al habilitar esta función, ya que algunas resinas pueden producir un efecto de succión extremo dentro de la cavidad, lo que dificulta el despegado de la impresión de la lámina de la cuba."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:346
+#: src/slic3r/GUI/GUI_ObjectList.cpp:393
 msgid "degenerate facets"
 msgstr "facetas degeneradas"
 
-#: src/libslic3r/PrintConfig.cpp:640
+#: src/libslic3r/PrintConfig.cpp:676
 msgid "Delay after unloading"
 msgstr "Retardo tras la descarga"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "delete"
 msgstr "borra"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4475 src/slic3r/GUI/GUI_ObjectList.cpp:1718
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/GLCanvas3D.cpp:4841 src/slic3r/GUI/GUI_ObjectList.cpp:1846
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Delete"
 msgstr "Borra"
 
-#: src/slic3r/GUI/MainFrame.cpp:575
+#: src/slic3r/GUI/MainFrame.cpp:1181
 msgid "Delete &all"
 msgstr "Borr&ar todo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4484 src/slic3r/GUI/KBShortcutsDialog.cpp:129
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/GLCanvas3D.cpp:4850 src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "Delete all"
 msgstr "Eliminar todo"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2176
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2341
 msgid "Delete All Instances from Object"
 msgstr "Eliminar todas las instancias del Objeto"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1516
+#: src/slic3r/GUI/DoubleSlider.cpp:1708
 msgid "Delete color change"
 msgstr "Eliminar cambio de color"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
 msgid "Delete color change marker for current layer"
 msgstr "Eliminar marcador de cambio de color para la capa actual"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1519
+#: src/slic3r/GUI/DoubleSlider.cpp:1711
 msgid "Delete custom G-code"
 msgstr "Eliminar código G personalizado"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:539
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:424
 msgid "Delete drainage hole"
 msgstr "Eliminar orificio de drenaje"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2192
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2357
 msgid "Delete Height Range"
 msgstr "Eliminar Rango de Alturas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2246
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
 msgid "Delete Instance"
 msgstr "Eliminar Instancia"
 
-#: src/slic3r/GUI/Plater.cpp:2712
+#: src/slic3r/GUI/Plater.cpp:2673
 msgid "Delete Object"
 msgstr "Eliminar Objeto"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:101
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:104
 #, c-format
 msgid "Delete Option %s"
 msgstr "Eliminar Opción %s"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1518
+#: src/slic3r/GUI/DoubleSlider.cpp:1710
 msgid "Delete pause print"
 msgstr "Eliminar pausa de impresión"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
+#: src/slic3r/GUI/PresetComboBoxes.cpp:652
+msgid "Delete physical printer"
+msgstr "Eliminar impresora física"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:659
+msgid "Delete Physical Printer"
+msgstr "Eliminar Impresora Física"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:123
 msgid "Delete selected"
 msgstr "Eliminar selección"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2830
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3221
 msgid "Delete Selected"
 msgstr "Eliminar Selección"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2693
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3083
 msgid "Delete Selected Item"
 msgstr "Eliminar Objeto Seleccionado"
 
-#: src/slic3r/GUI/Plater.cpp:4677
+#: src/slic3r/GUI/Plater.cpp:4782
 msgid "Delete Selected Objects"
 msgstr "Eliminar Objetos Seleccionados"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2319
 msgid "Delete Settings"
 msgstr "Eliminar Ajustes"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2227
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2393
 msgid "Delete Subobject"
 msgstr "Eliminar Subobjeto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:631
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:514
 msgid "Delete support point"
 msgstr "Borra punto de apoyo"
 
-#: src/slic3r/GUI/Tab.cpp:134
+#: src/slic3r/GUI/Tab.cpp:204
 msgid "Delete this preset"
 msgstr "Borra este ajuste"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1035
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:55
+msgid "Delete this preset from this printer device"
+msgstr "Eliminar este ajuste preestablecido para este dispositivo de impresión"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1160
 msgid "Delete tick mark - Left click or press \"-\" key"
 msgstr "Eliminar marca de verificación - Click izquierdo o presionar tecla \"-\""
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1517
+#: src/slic3r/GUI/DoubleSlider.cpp:1709
 msgid "Delete tool change"
 msgstr "Eliminar cambio de herramienta"
 
-#: src/slic3r/GUI/MainFrame.cpp:576
+#: src/slic3r/GUI/MainFrame.cpp:1182
 msgid "Deletes all objects"
 msgstr "Borra todos los objetos"
 
-#: src/slic3r/GUI/MainFrame.cpp:573
+#: src/slic3r/GUI/MainFrame.cpp:1179
 msgid "Deletes the current selection"
 msgstr "Borrar la selección actual"
 
-#: src/libslic3r/PrintConfig.cpp:717 src/libslic3r/PrintConfig.cpp:2503
-#: src/libslic3r/PrintConfig.cpp:2504
+#: src/libslic3r/PrintConfig.cpp:753 src/libslic3r/PrintConfig.cpp:2646
+#: src/libslic3r/PrintConfig.cpp:2647
 msgid "Density"
 msgstr "Densidad"
 
-#: src/libslic3r/PrintConfig.cpp:791
+#: src/libslic3r/PrintConfig.cpp:827
 msgid "Density of internal infill, expressed in the range 0% - 100%."
 msgstr "Densidad de relleno interior, expresado en el rango 0% - 100%."
 
-#: src/slic3r/GUI/Tab.cpp:1258 src/slic3r/GUI/Tab.cpp:1548
-#: src/slic3r/GUI/Tab.cpp:2019 src/slic3r/GUI/Tab.cpp:2135
-#: src/slic3r/GUI/Tab.cpp:3543 src/slic3r/GUI/Tab.cpp:3671
+#: src/slic3r/GUI/Tab.cpp:1588 src/slic3r/GUI/Tab.cpp:1895
+#: src/slic3r/GUI/Tab.cpp:2228 src/slic3r/GUI/Tab.cpp:2304
+#: src/slic3r/GUI/Tab.cpp:3959 src/slic3r/GUI/Tab.cpp:4090
 msgid "Dependencies"
 msgstr "Dependencias"
 
-#: src/libslic3r/PrintConfig.cpp:1612 src/libslic3r/PrintConfig.cpp:1613
+#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1721
 msgid "Deretraction Speed"
 msgstr "Velocidad de deretracción"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
+#: src/slic3r/GUI/GCodeViewer.cpp:2529 src/slic3r/GUI/GUI_Preview.cpp:337
+#: src/slic3r/GUI/GUI_Preview.cpp:1473
+msgid "Deretractions"
+msgstr "Deretracciones"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:172
+msgid "Descriptive name for the printer"
+msgstr "Un nombre descriptivo para la impresora"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:122
 msgid "Deselect all"
 msgstr "Deseleccionar todo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Deselect by rectangle"
 msgstr "Deseleccionar mediante rectángulo"
 
-#: src/slic3r/GUI/MainFrame.cpp:569
+#: src/slic3r/GUI/MainFrame.cpp:1175
 msgid "Deselects all objects"
 msgstr "Deseleccionar todos los objetos"
 
-#: src/slic3r/GUI/Tab.cpp:963
+#: src/slic3r/GUI/Tab.cpp:1224
 msgid "Detach from system preset"
 msgstr "Separar del preajuste del sistema"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1246
 msgid "Detach preset"
 msgstr "Separar preajuste"
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/Tab.cpp:3323
 msgid "Detached"
 msgstr "Separado"
 
-#: src/libslic3r/PrintConfig.cpp:1373
+#: src/libslic3r/PrintConfig.cpp:1481
 msgid "Detect bridging perimeters"
 msgstr "Detectar perímetros con puentes"
 
-#: src/libslic3r/PrintConfig.cpp:2075
+#: src/libslic3r/PrintConfig.cpp:2218
 msgid "Detect single-width walls (parts where two extrusions don't fit and we need to collapse them into a single trace)."
 msgstr "Detecta muros de ancho único (partes donde dos extrusiones no se ajustan y tenemos que colapsarlas en un solo rastro)."
 
-#: src/libslic3r/PrintConfig.cpp:2073
+#: src/libslic3r/PrintConfig.cpp:2216
 msgid "Detect thin walls"
 msgstr "Detecta paredes delgadas"
 
-#: src/libslic3r/PrintConfig.cpp:3472
+#: src/libslic3r/PrintConfig.cpp:3671
 msgid "Detect unconnected parts in the given model(s) and split them into separate objects."
 msgstr "Detectadas piezas desconectadas en el(los) modelo(s) dado(s) y divídido(s) en objetos separados."
 
-#: src/slic3r/GUI/Plater.cpp:2368
+#: src/slic3r/GUI/Plater.cpp:2330
 msgid "Detected advanced data"
 msgstr "Datos avanzados detectados"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:289
+#: src/slic3r/GUI/Mouse3DController.cpp:274
 msgid "Device:"
 msgstr "Dispositivo:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:93 src/libslic3r/PrintConfig.cpp:709
+#: src/slic3r/GUI/BedShapeDialog.cpp:95 src/libslic3r/PrintConfig.cpp:745
 msgid "Diameter"
 msgstr "Diámetro"
 
-#: src/libslic3r/PrintConfig.cpp:2694
+#: src/libslic3r/PrintConfig.cpp:2858
 msgid "Diameter in mm of the pillar base"
 msgstr "Diámetro en mm del pilar de la base"
 
-#: src/libslic3r/PrintConfig.cpp:2650
+#: src/libslic3r/PrintConfig.cpp:2793
 msgid "Diameter in mm of the support pillars"
 msgstr "Diámetro en mm de los pilares de soporte"
 
-#: src/libslic3r/PrintConfig.cpp:2622
+#: src/libslic3r/PrintConfig.cpp:2765
 msgid "Diameter of the pointing side of the head"
 msgstr "Diámetro de la parte en punta de la cabeza"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:94
+#: src/slic3r/GUI/BedShapeDialog.cpp:131
 msgid "Diameter of the print bed. It is assumed that origin (0,0) is located in the center."
 msgstr "Diámetro de la base de impresión. Se supone que el origen (0,0) está ubicado en el centro."
 
-#: src/libslic3r/PrintConfig.cpp:1639
+#: src/libslic3r/PrintConfig.cpp:1747
 msgid "Direction"
 msgstr "Dirección"
 
-#: src/libslic3r/PrintConfig.cpp:359
+#: src/libslic3r/PrintConfig.cpp:393
 msgid "Disable fan for the first"
 msgstr "Desactivar ventilador para la primera"
 
-#: src/libslic3r/PrintConfig.cpp:1349
+#: src/libslic3r/PrintConfig.cpp:1457
 msgid "Disables retraction when the travel path does not exceed the upper layer's perimeters (and thus any ooze will be probably invisible)."
 msgstr "Desactiva la retracción cuando la trayectoria de desplazamiento no supera los perímetros de la capa superior (y, por lo tanto, cualquier goteo probablemente será invisible)."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:952
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:641
+msgid "Discard"
+msgstr "Descartar"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1066
 msgid "Discard all custom changes"
 msgstr "Descartar todos los cambios personalizados"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1375
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222
 msgid "Discard changes"
 msgstr "Descartar los cambios"
 
-#: src/slic3r/GUI/GUI_App.cpp:932 src/slic3r/GUI/Tab.cpp:2946
-msgid "Discard changes and continue anyway?"
-msgstr "¿Descartar los cambios y continuar de todos modos?"
-
-#: src/slic3r/GUI/Tab.cpp:2078
+#: src/slic3r/GUI/Tab.cpp:2248
 msgid "Display"
 msgstr "Pantalla"
 
-#: src/libslic3r/PrintConfig.cpp:2359
+#: src/libslic3r/PrintConfig.cpp:2502
 msgid "Display height"
 msgstr "Altura de la pantalla"
 
-#: src/libslic3r/PrintConfig.cpp:2378
+#: src/libslic3r/PrintConfig.cpp:2521
 msgid "Display horizontal mirroring"
 msgstr "Espejo horizontal de la pantalla"
 
-#: src/libslic3r/PrintConfig.cpp:2392
+#: src/libslic3r/PrintConfig.cpp:2535
 msgid "Display orientation"
 msgstr "Orientación de la pantalla"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Display the Print Host Upload Queue window"
 msgstr "Mostrar la ventana de la cola de carga del host de impresión"
 
-#: src/libslic3r/PrintConfig.cpp:2385
+#: src/libslic3r/PrintConfig.cpp:2528
 msgid "Display vertical mirroring"
 msgstr "Espejo vertical de la pantalla"
 
-#: src/libslic3r/PrintConfig.cpp:2353
+#: src/libslic3r/PrintConfig.cpp:2496
 msgid "Display width"
 msgstr "Anchura de la pantalla"
 
-#: src/libslic3r/PrintConfig.cpp:377
+#: src/libslic3r/PrintConfig.cpp:411
 msgid "Distance between copies"
 msgstr "Distancia entre copias"
 
-#: src/libslic3r/PrintConfig.cpp:1680
+#: src/libslic3r/PrintConfig.cpp:1157
+msgid "Distance between ironing lines"
+msgstr "Distancia entre las líneas alisadas"
+
+#: src/libslic3r/PrintConfig.cpp:1788
 msgid "Distance between skirt and object(s). Set this to zero to attach the skirt to the object(s) and get a brim for better adhesion."
 msgstr "Distancia entre falda y objeto(s). Ajuste esto a cero para unir la falda a los objetos y obtener un borde para una mejor adhesión."
 
-#: src/libslic3r/PrintConfig.cpp:2882
+#: src/libslic3r/PrintConfig.cpp:3046
 msgid "Distance between two connector sticks which connect the object and the generated pad."
 msgstr "Distancia entre dos palitos de apoyo entre la pieza y la base generada."
 
-#: src/libslic3r/PrintConfig.cpp:1679
+#: src/libslic3r/PrintConfig.cpp:1787
 msgid "Distance from object"
 msgstr "Distancia del objeto"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:85
+#: src/slic3r/GUI/BedShapeDialog.cpp:121
 msgid "Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."
 msgstr "Distancia de la coordenada del código G de 0,0 de la esquina frontal izquierda del rectángulo."
 
-#: src/libslic3r/PrintConfig.cpp:320
+#: src/libslic3r/PrintConfig.cpp:354
 msgid "Distance of the center-point of the cooling tube from the extruder tip."
 msgstr "Distancia desde el centro del tubo de enfriado a la punta del extrusor."
 
-#: src/libslic3r/PrintConfig.cpp:1382
+#: src/libslic3r/PrintConfig.cpp:1490
 msgid "Distance of the extruder tip from the position where the filament is parked when unloaded. This should match the value in printer firmware."
 msgstr "Distancia de la punta del extrusor desde la posición donde el filamento es colocado cuando se descarga. Esto debería coincidir con el valor en el firmware de la impresora."
 
-#: src/libslic3r/PrintConfig.cpp:378
+#: src/libslic3r/PrintConfig.cpp:412
 msgid "Distance used for the auto-arrange feature of the plater."
 msgstr "Distancia utilizada para la función de organización automática de la base."
 
-#: src/libslic3r/PrintConfig.cpp:3486
+#: src/libslic3r/PrintConfig.cpp:3685
 msgid "Do not fail if a file supplied to --load does not exist."
 msgstr "No fallar si el archivo suministrado para --load no existe."
 
-#: src/libslic3r/PrintConfig.cpp:3430
+#: src/libslic3r/PrintConfig.cpp:3629
 msgid "Do not rearrange the given models before merging and keep their original XY coordinates."
 msgstr "No reorganizar los modelos dados antes de fusionar y mantener sus coordenadas XY originales."
 
-#: src/slic3r/GUI/Field.cpp:240
+#: src/slic3r/GUI/Field.cpp:288
 #, c-format
 msgid ""
 "Do you mean %s%% instead of %s %s?\n"
@@ -2060,31 +2369,35 @@ msgstr ""
 "Escoge SI si deseas cambiar este valor a %s%%,\n"
 "o NO si estás seguro  que %s %s es el valor correcto."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1920
+#: src/slic3r/GUI/DoubleSlider.cpp:2138
 msgid "Do you want to delete all saved tool changes?"
 msgstr "¿Desea eliminar todos los cambios de herramienta guardados?"
 
-#: src/slic3r/GUI/GUI_App.cpp:884
+#: src/slic3r/GUI/GUI_App.cpp:1610
 msgid "Do you want to proceed?"
 msgstr "¿Deseas continuar?"
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "Do you want to retry"
 msgstr "Quieres volver a intentarlo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1045
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:911
 msgid "Do you want to save your manually edited support points?"
 msgstr "¿Deseas guardar tus puntos de soporte editados manualmente?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1834
+#: src/slic3r/GUI/ConfigWizard.cpp:2261
 msgid "Do you want to select default filaments for these FFF printer models?"
 msgstr "¿Desea seleccionar filamentos predeterminados para estos modelos de impresoras FFF?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1852
+#: src/slic3r/GUI/ConfigWizard.cpp:2279
 msgid "Do you want to select default SLA materials for these printer models?"
 msgstr "¿Desea seleccionar materiales SLA predeterminados para estos modelos de impresora?"
 
-#: src/libslic3r/PrintConfig.cpp:3429
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "does not contain valid gcode."
+msgstr "no contiene gcode válido."
+
+#: src/libslic3r/PrintConfig.cpp:3628
 msgid "Don't arrange"
 msgstr "No organizar"
 
@@ -2092,7 +2405,11 @@ msgstr "No organizar"
 msgid "Don't notify about new releases any more"
 msgstr "No quiero recibir avisos de nuevas versiones"
 
-#: src/libslic3r/PrintConfig.cpp:369
+#: src/slic3r/GUI/Plater.cpp:1431
+msgid "Don't show again"
+msgstr "No mostrar de nuevo"
+
+#: src/libslic3r/PrintConfig.cpp:403
 msgid "Don't support bridges"
 msgstr "No soportar puentes"
 
@@ -2100,234 +2417,296 @@ msgstr "No soportar puentes"
 msgid "Downgrade"
 msgstr "Volver a una versión anterior"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1803
 msgid "Draft shield"
 msgstr "Escudo de protección"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Drag"
 msgstr "Arrastra"
 
-#: src/libslic3r/SLAPrintSteps.cpp:44
+#: src/slic3r/GUI/Plater.cpp:1406
+msgid "Drag and drop G-code file"
+msgstr "Arrastra y suelta el archivo código G"
+
+#: src/libslic3r/SLAPrintSteps.cpp:45
 msgid "Drilling holes into model."
 msgstr "Taladrando agujeros en el modelo."
 
-#: src/libslic3r/SLAPrintSteps.cpp:199
+#: src/libslic3r/SLAPrintSteps.cpp:201
 msgid "Drilling holes into the mesh failed. This is usually caused by broken model. Try to fix it first."
 msgstr "Perforación de agujeros en la malla fallida. Esto generalmente es causado por un modelo roto. Intenta arreglarlo primero."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:337
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:349
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:345
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357
 msgid "Drop to bed"
 msgstr "Colocar en la Cama"
 
-#: src/libslic3r/PrintConfig.cpp:3433
+#: src/libslic3r/PrintConfig.cpp:3632
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: src/libslic3r/PrintConfig.cpp:3438
+#: src/libslic3r/PrintConfig.cpp:3637
 msgid "Duplicate by grid"
 msgstr "Duplicar por cuadrícula"
 
-#: src/slic3r/GUI/PresetHints.cpp:40
+#: src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Duration"
+msgstr "Duración"
+
+#: src/slic3r/GUI/PresetHints.cpp:39
 msgid "During the other layers, fan"
 msgstr "Durante las otras capas, el ventilador"
 
-#: src/libslic3r/PrintConfig.cpp:2669
+#: src/libslic3r/PrintConfig.cpp:2833
 msgid "Dynamic"
 msgstr "Dinámico"
 
-#: src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1448
 msgid "E&xport"
 msgstr "E&xportar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:347
+#: src/slic3r/GUI/GUI_ObjectList.cpp:394
 msgid "edges fixed"
 msgstr "esquimas reparadas"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1508
+#: src/slic3r/GUI/DoubleSlider.cpp:1700
 msgid "Edit color"
 msgstr "Editar color"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:960
+#: src/slic3r/GUI/DoubleSlider.cpp:1083
 msgid "Edit current color - Right click the colored slider segment"
 msgstr "Editar color actual - Clic derecho en el segmento de color deslizante"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1510
+#: src/slic3r/GUI/DoubleSlider.cpp:1702
 msgid "Edit custom G-code"
 msgstr "Editar código G personalizado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3003
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3459
 msgid "Edit Height Range"
 msgstr "Editar Rango de Alturas"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1509
+#: src/slic3r/GUI/DoubleSlider.cpp:1701
 msgid "Edit pause print message"
 msgstr "Editar mensaje de pausa de impresión"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1037
+#: src/slic3r/GUI/PresetComboBoxes.cpp:645
+msgid "Edit physical printer"
+msgstr "Editar impresora física"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:641
+msgid "Edit preset"
+msgstr "Editar ajuste preestablecido"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1162
 msgid "Edit tick mark - Ctrl + Left click"
 msgstr "Editar la marca - Ctrl+ Click izquierdo"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1038
+#: src/slic3r/GUI/DoubleSlider.cpp:1163
 msgid "Edit tick mark - Right click"
 msgstr "Editar marca de verificación - Clic derecho"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:282 src/slic3r/GUI/GUI_ObjectList.cpp:394
+#: src/slic3r/GUI/GUI_ObjectList.cpp:300 src/slic3r/GUI/GUI_ObjectList.cpp:441
 msgid "Editing"
 msgstr "Edición"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Ejec&t SD card / Flash drive"
 msgstr "Expul&sa tarjeta SD / disco USB"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/NotificationManager.cpp:780
+msgid "Eject drive"
+msgstr "Expulsar la unidad"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
 msgid "Eject SD card / Flash drive"
 msgstr "Expulsa la tarjeta SD / disco USB"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Eject SD card / Flash drive after the G-code was exported to it."
 msgstr "Expulsa la tarjeta SD / disco USB después de que se haya exportado a él."
 
-#: src/slic3r/GUI/Plater.cpp:2202
+#: src/slic3r/GUI/Plater.cpp:2034
 #, c-format
 msgid "Ejecting of device %s(%s) has failed."
 msgstr "La expulsión del dispositivo %s(%s) ha fallado."
 
-#: src/libslic3r/PrintConfig.cpp:118
+#: src/libslic3r/PrintConfig.cpp:120
 msgid "Elephant foot compensation"
 msgstr "Compensación del pie de elefante"
 
-#: src/libslic3r/PrintConfig.cpp:2447
+#: src/libslic3r/PrintConfig.cpp:2590
 msgid "Elephant foot minimum width"
 msgstr "Ancho mínimo del pie de elefante"
 
-#: src/libslic3r/SLAPrint.cpp:625
+#: src/libslic3r/SLAPrint.cpp:639
 msgid "Elevation is too low for object. Use the \"Pad around object\" feature to print the object without elevation."
 msgstr "Elevación demasiado baja para el objeto. Utiliza la característica \"Pad alrededor del objeto\" para imprimir el objeto sin elevación."
 
-#: src/libslic3r/PrintConfig.cpp:1093
+#: src/libslic3r/PrintConfig.cpp:1186
 msgid "Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute intervals into the G-code to let the firmware show accurate remaining time. As of now only the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 firmware supports M73 Qxx Sxx for the silent mode."
 msgstr "Emitir M73 P[porcentaje impreso] R[tiempo restante en minutos] en intervalos de 1 minuto en el código G para permitir que el firmware muestre el tiempo restante preciso. A partir de ahora solo el firmware Prusa i3 MK3 reconoce M73. También el firmware i3 MK3 es compatible con M73 Qxx Sxx para el modo silencioso."
 
-#: src/libslic3r/GCode.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1217
+msgid "Emit to G-code"
+msgstr "Emitir a código G"
+
+#: src/libslic3r/GCode.cpp:622
 msgid "Empty layers detected, the output would not be printable."
 msgstr "Capas vacías detectadas, la salida no sería imprimible."
 
-#: src/slic3r/GUI/Tab.cpp:1445 src/libslic3r/PrintConfig.cpp:1355
-#: src/libslic3r/PrintConfig.cpp:2200
+#: src/slic3r/GUI/Tab.cpp:1791 src/libslic3r/PrintConfig.cpp:1463
+#: src/libslic3r/PrintConfig.cpp:2343
 msgid "Enable"
 msgstr "Habilitar"
 
-#: src/libslic3r/PrintConfig.cpp:313
+#: src/libslic3r/PrintConfig.cpp:347
 msgid "Enable auto cooling"
 msgstr "Habilitar el enfriamiento automático"
 
-#: src/libslic3r/PrintConfig.cpp:572
+#: src/libslic3r/PrintConfig.cpp:608
 msgid "Enable fan if layer print time is below"
 msgstr "Habilitar ventilador si el tiempo de impresión de la capa está por debajo"
 
-#: src/libslic3r/PrintConfig.cpp:2908
+#: src/libslic3r/PrintConfig.cpp:3072
 msgid "Enable hollowing"
 msgstr "Habilitar vaciado"
 
-#: src/libslic3r/PrintConfig.cpp:2380
+#: src/libslic3r/PrintConfig.cpp:2523
 msgid "Enable horizontal mirroring of output images"
 msgstr "Activar espejo horizontal de salida de imágenes"
 
-#: src/libslic3r/PrintConfig.cpp:1867
+#: src/libslic3r/PrintConfig.cpp:1124
+msgid "Enable ironing"
+msgstr "Activar alisado"
+
+#: src/libslic3r/PrintConfig.cpp:1125
+msgid "Enable ironing of the top layers with the hot print head for smooth surface"
+msgstr "Habilitar el alisado de las capas superiores con el cabezal de impresión caliente para obtener una superficie lisa"
+
+#: src/libslic3r/PrintConfig.cpp:2009
 msgid "Enable support material generation."
 msgstr "Habilite la generación de material de soporte."
 
-#: src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1010
 msgid "Enable this to add comments into the G-Code labeling print moves with what object they belong to, which is useful for the Octoprint CancelObject plugin. This settings is NOT compatible with Single Extruder Multi Material setup and Wipe into Object / Wipe into Infill."
 msgstr "Habilita esto para añadir los comentarios al código G, etiquetando movimientos de impresión con el objeto al que pertenecen, lo que es útil para el plugin Octoprint CancelObject. Esta configuración NO es compatible con la configuración de Single Extruder Multi Material y Limpiar en Objeto / Limpiar en Relleno."
 
-#: src/libslic3r/PrintConfig.cpp:929
+#: src/libslic3r/PrintConfig.cpp:973
 msgid "Enable this to get a commented G-code file, with each line explained by a descriptive text. If you print from SD card, the additional weight of the file could make your firmware slow down."
 msgstr "Habilítelo para obtener un archivo de código G comentado, con cada línea explicada por un texto descriptivo. Si imprime desde una tarjeta SD, el peso adicional del archivo podría ralentizar su firmware."
 
-#: src/libslic3r/PrintConfig.cpp:2186
+#: src/libslic3r/PrintConfig.cpp:2329
 msgid "Enable variable layer height feature"
 msgstr "Habilitar la función de altura de capa variable"
 
-#: src/libslic3r/PrintConfig.cpp:2387
+#: src/libslic3r/PrintConfig.cpp:2530
 msgid "Enable vertical mirroring of output images"
 msgstr "Activar espejo vertical de salida de imágenes"
 
-#: src/slic3r/GUI/Tab.cpp:1534 src/slic3r/GUI/Tab.cpp:1982
-#: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395
+#: src/slic3r/GUI/Tab.cpp:1880 src/slic3r/GUI/Tab.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:419 src/libslic3r/PrintConfig.cpp:429
 msgid "End G-code"
 msgstr "Código G final"
 
-#: src/libslic3r/PrintConfig.cpp:1924
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:239
+msgid "Enforce"
+msgstr "Imponer"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:30
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:381
+msgid "Enforce seam"
+msgstr "Imponer costura"
+
+#: src/libslic3r/PrintConfig.cpp:2066
 msgid "Enforce support for the first"
 msgstr "Forzar soportes para la primera"
 
-#: src/libslic3r/PrintConfig.cpp:1931
+#: src/libslic3r/PrintConfig.cpp:2073
 msgid "Enforce support for the first n layers"
 msgstr "Aplicar soportes para las primeras n capas"
 
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:47
+msgid "Enforce supports"
+msgstr "Imponer soportes"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:198
 #: src/slic3r/GUI/PrintHostDialogs.cpp:229
 msgid "Enqueued"
 msgstr "En cola"
 
-#: src/libslic3r/PrintConfig.cpp:407
+#: src/libslic3r/PrintConfig.cpp:441
 msgid "Ensure vertical shell thickness"
 msgstr "Asegurar el espesor de la carcasa vertical"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1618
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4410
+#: src/slic3r/GUI/Search.cpp:433
+msgid "Enter a search term"
+msgstr "Teclea un término de búsqueda"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1814
 msgid "Enter custom G-code used on current layer"
 msgstr "Ingresa el código G personalizado utilizado en la capa actual"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Enter new name"
 msgstr "Introduce un nuevo nombre"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1634
+#: src/slic3r/GUI/DoubleSlider.cpp:1830
 msgid "Enter short message shown on Printer display when a print is paused"
 msgstr "Introduce un mensaje corto a mostrar en la pantalla de la impresora cuando la impresión se ponga en pausa"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1047
+#: src/slic3r/GUI/ConfigWizard.cpp:1413
 msgid "Enter the bed temperature needed for getting your filament to stick to your heated bed."
 msgstr "Introduce la temperatura de la base necesaria para que adhiera el filamento a la base calefactable."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:979
+#: src/slic3r/GUI/ConfigWizard.cpp:1345
 msgid "Enter the diameter of your filament."
 msgstr "Introduce el diámetro de tu filamento."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:966
+#: src/slic3r/GUI/ConfigWizard.cpp:1332
 msgid "Enter the diameter of your printer's hot end nozzle."
 msgstr "Introduce el diámetro de la boquilla del fusor de tu impresora."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1650
+#: src/slic3r/GUI/DoubleSlider.cpp:1851 src/slic3r/GUI/DoubleSlider.cpp:1855
 msgid "Enter the height you want to jump to"
 msgstr "Introduce la altura a la que deseas saltar"
 
-#: src/slic3r/GUI/Plater.cpp:4751
+#: src/slic3r/GUI/DoubleSlider.cpp:1851
+msgid "Enter the move you want to jump to"
+msgstr "Introduce el movimiento al que desea saltar"
+
+#: src/slic3r/GUI/Plater.cpp:4855
 msgid "Enter the number of copies:"
 msgstr "Introduce el número de copias:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1033
+#: src/slic3r/GUI/ConfigWizard.cpp:1399
 msgid "Enter the temperature needed for extruding your filament."
 msgstr "Introduce la temperatura necesaria para extruir tu filamento."
 
-#: src/libslic3r/PrintConfig.cpp:761
+#: src/libslic3r/PrintConfig.cpp:797
 msgid "Enter your filament cost per kg here. This is only for statistical information."
 msgstr "Ingrese su coste del filamento por kg aquí. Esto es solo para información estadística."
 
-#: src/libslic3r/PrintConfig.cpp:718
+#: src/libslic3r/PrintConfig.cpp:754
 msgid "Enter your filament density here. This is only for statistical information. A decent way is to weigh a known length of filament and compute the ratio of the length to volume. Better is to calculate the volume directly through displacement."
 msgstr "Ingrese su densidad de filamento aquí. Esto es solo para información estadística. Una forma decente es pesar una longitud conocida de filamento y calcular la relación entre la longitud y el volumen. Lo mejor es calcular el volumen directamente a través del desplazamiento."
 
-#: src/libslic3r/PrintConfig.cpp:710
+#: src/libslic3r/PrintConfig.cpp:746
 msgid "Enter your filament diameter here. Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
 msgstr "Ingrese el diámetro de su fila aquí. Se requiere una buena precisión, por lo tanto, use un calibre y realice múltiples mediciones a lo largo del filamento, luego calcule el promedio."
 
-#: src/slic3r/GUI/MainFrame.cpp:422 src/slic3r/GUI/MainFrame.cpp:785
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:39
+msgid "Entering Paint-on supports"
+msgstr "Entrando al Pintado de soportes"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:40
+msgid "Entering Seam painting"
+msgstr "Entrando al Pintado de costuras"
+
+#: src/slic3r/GUI/MainFrame.cpp:1003 src/slic3r/GUI/MainFrame.cpp:1486
 #: src/slic3r/GUI/PrintHostDialogs.cpp:231
 msgid "Error"
 msgstr "Error"
@@ -2337,25 +2716,33 @@ msgstr "Error"
 msgid "Error accessing port at %s: %s"
 msgstr "Error al acceder al puerto en %s: %s"
 
-#: src/slic3r/GUI/Plater.cpp:3433
+#: src/slic3r/GUI/Plater.cpp:3238
 msgid "Error during reload"
 msgstr "Error al recargar"
 
-#: src/slic3r/GUI/Plater.cpp:5043
+#: src/slic3r/GUI/Plater.cpp:5172
 #, c-format
 msgid "Error exporting 3MF file %s"
 msgstr "Error al exportar archivo 3MF %s"
 
-#: src/slic3r/GUI/Plater.cpp:5005
+#: src/slic3r/GUI/Plater.cpp:5138
 #, c-format
 msgid "Error exporting AMF file %s"
 msgstr "Error exportando archivo AMF %s"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:154
+#: src/slic3r/GUI/OpenGLManager.cpp:276
+msgid "Error loading shaders"
+msgstr "Error al cargar sombras"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:152
 msgid "Error Message"
 msgstr "Mensaje de Error"
 
-#: src/slic3r/GUI/AppConfig.cpp:114
+#: src/slic3r/GUI/GUI_App.cpp:661
+msgid "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to manually delete the file to recover from the error."
+msgstr "Error al analizar el archivo de configuración de PrusaGCodeViewer, probablemente esté dañado. Intenta eliminar manualmente el archivo para recuperarse del error."
+
+#: src/slic3r/GUI/GUI_App.cpp:655 src/slic3r/GUI/GUI_App.cpp:670
 msgid "Error parsing PrusaSlicer config file, it is probably corrupted. Try to manually delete the file to recover from the error. Your user profiles will not be affected."
 msgstr "Error al analizar el archivo de configuración de PrusaSlicer, probablemente está dañado. Intenta eliminar manualmente el archivo para recuperarse del error. Tus perfiles de usuario no se verán afectados."
 
@@ -2363,45 +2750,60 @@ msgstr "Error al analizar el archivo de configuración de PrusaSlicer, probablem
 msgid "Error uploading to print host:"
 msgstr "Error al cargar a la impresora:"
 
-#: src/libslic3r/Zipper.cpp:102
+#: src/slic3r/GUI/Plater.cpp:4752
+msgid "Error while loading .gcode file"
+msgstr "Error al cargar el archivo .gcode"
+
+#: src/libslic3r/Zipper.cpp:27
 msgid "Error with zip archive"
 msgstr "Error con el archivo ZIP"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1918
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2077
 msgid "Error!"
 msgstr "¡Error!"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:505
+#: src/slic3r/GUI/BedShapeDialog.cpp:581
 msgid "Error! Invalid model"
 msgstr "Error! Modelo inválido"
 
+#: src/slic3r/GUI/NotificationManager.cpp:667
+#: src/slic3r/GUI/NotificationManager.cpp:683
+#: src/slic3r/GUI/NotificationManager.cpp:694
+msgid "ERROR:"
+msgstr "ERROR:"
+
 #: src/slic3r/GUI/FirmwareDialog.cpp:647
 #, c-format
 msgid "Error: %s"
 msgstr "Error: %s"
 
-#: src/slic3r/GUI/Job.hpp:123
+#: src/slic3r/GUI/Jobs/Job.cpp:74
 msgid "ERROR: not enough resources to execute a new job."
 msgstr "ERROR: no hay suficientes recursos para ejecutar el trabajo."
 
-#: src/slic3r/GUI/Plater.cpp:240 src/slic3r/GUI/Plater.cpp:1216
-#: src/slic3r/GUI/Plater.cpp:1258
+#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
+#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
+#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
 msgid "Estimated printing time"
 msgstr "Tiempo estimado de impresión"
 
-#: src/slic3r/GUI/Plater.cpp:502
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Event"
+msgstr "Evento"
+
+#: src/slic3r/GUI/Plater.cpp:368
 msgid "Everywhere"
 msgstr "En todos los sitios"
 
-#: src/slic3r/GUI/PresetHints.cpp:51
+#: src/slic3r/GUI/PresetHints.cpp:50
 msgid "except for the first %1% layers."
 msgstr "a excepción de las %1% primeras capas."
 
-#: src/slic3r/GUI/PresetHints.cpp:53
+#: src/slic3r/GUI/PresetHints.cpp:52
 msgid "except for the first layer."
 msgstr "a excepción de la primera capa."
 
-#: src/libslic3r/Print.cpp:1377
+#: src/libslic3r/Print.cpp:1403
 msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm"
 msgstr "%1%=%2% mm excesivos para ser imprimible con un nozzle de diámetro de %3% mm"
 
@@ -2410,116 +2812,129 @@ msgstr "%1%=%2% mm excesivos para ser imprimible con un nozzle de diámetro de %
 msgid "Exit %s"
 msgstr "Salir %s"
 
-#: src/libslic3r/PrintConfig.cpp:371
+#: src/slic3r/GUI/Plater.cpp:2143
+msgid "Expand sidebar"
+msgstr "Expandir barra lateral"
+
+#: src/libslic3r/PrintConfig.cpp:405
 msgid "Experimental option for preventing support material from being generated under bridged areas."
 msgstr "Opción experimental para evitar que se genere material de soporte debajo de las áreas con puente."
 
-#: src/libslic3r/PrintConfig.cpp:1375
+#: src/libslic3r/PrintConfig.cpp:1483
 msgid "Experimental option to adjust flow for overhangs (bridge flow will be used), to apply bridge speed to them and enable fan."
 msgstr "Opción experimental para ajustar el flujo para salientes (se usará el flujo del puente), para aplicar la velocidad del puente a ellos y habilitar el ventilador."
 
-#: src/slic3r/GUI/GUI_App.cpp:815 src/slic3r/GUI/wxExtensions.cpp:755
+#: src/slic3r/GUI/GUI_App.cpp:1507 src/slic3r/GUI/wxExtensions.cpp:676
 msgid "Expert"
 msgstr "Experto"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:822
+#: src/slic3r/GUI/ConfigWizard.cpp:1181
 msgid "Expert mode"
 msgstr "Modo experto"
 
-#: src/slic3r/GUI/GUI_App.cpp:815
+#: src/slic3r/GUI/GUI_App.cpp:1507
 msgid "Expert View Mode"
 msgstr "Modo de visualización experto"
 
-#: src/slic3r/GUI/Plater.cpp:5521
+#: src/slic3r/GUI/Plater.cpp:5706
 msgid "Export"
 msgstr "Exportar"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export &Config"
 msgstr "Exportar &Configuración"
 
-#: src/slic3r/GUI/MainFrame.cpp:477 src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1068 src/slic3r/GUI/MainFrame.cpp:1448
 msgid "Export &G-code"
 msgstr "Exportar código &G"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export &toolpaths as OBJ"
 msgstr "Exportar &trayectorias de herramientas como OBJ"
 
-#: src/libslic3r/PrintConfig.cpp:3338
+#: src/libslic3r/PrintConfig.cpp:3531
 msgid "Export 3MF"
 msgstr "Exportar 3MF"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export all presets including physical printers to file"
+msgstr "Exportar todos los ajustes preestablecidos, incluidas las impresoras físicas, al archivo"
+
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export all presets to file"
 msgstr "Exportar todos los preajustes al archivo"
 
-#: src/libslic3r/PrintConfig.cpp:3343
+#: src/libslic3r/PrintConfig.cpp:3536
 msgid "Export AMF"
 msgstr "Exportar AMF"
 
-#: src/slic3r/GUI/Plater.cpp:2598
+#: src/slic3r/GUI/Plater.cpp:2560
 msgid "Export AMF file:"
 msgstr "Exportar archivo AMF:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1657 src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3884
 msgid "Export as STL"
 msgstr "Exportar como STL"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:117
 msgid "Export config"
 msgstr "Exportar configuración"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export Config &Bundle"
 msgstr "Exportar Conjunto de A&justes"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export Config Bundle With Physical Printers"
+msgstr "Exportar Paquete de Configuración Con Impresoras Físicas"
+
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export current configuration to file"
 msgstr "Exportar la configuración actual al archivo"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export current plate as AMF"
 msgstr "Exportar plataforma actual como AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:477
+#: src/slic3r/GUI/MainFrame.cpp:1068
 msgid "Export current plate as G-code"
 msgstr "Exportar plataforma actual como código G"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export current plate as G-code to SD card / Flash drive"
 msgstr "Exporta a G-code en la tarjeta SD / disco USB"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export current plate as STL"
 msgstr "Exportar plataforma actual como STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export current plate as STL including supports"
 msgstr "Exportar la plataforma actual como STL incluyendo soportes"
 
-#: src/slic3r/GUI/Plater.cpp:3664
-msgid "Export failed"
-msgstr "Error al exportar"
-
-#: src/slic3r/GUI/ConfigWizard.cpp:801
+#: src/slic3r/GUI/ConfigWizard.cpp:1160
 msgid "Export full pathnames of models and parts sources into 3mf and amf files"
 msgstr "Exportar nombres de ruta completos de las fuentes de los modelos y de piezas a archivos 3mf y amf"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:891
-#: src/slic3r/GUI/Plater.cpp:5521 src/libslic3r/PrintConfig.cpp:3353
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 src/slic3r/GUI/Plater.cpp:766
+#: src/slic3r/GUI/Plater.cpp:5706 src/libslic3r/PrintConfig.cpp:3546
 msgid "Export G-code"
 msgstr "Exportar código G"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export G-code to SD card / Flash drive"
 msgstr "Exporta G-code a la tarjeta SD / disco USB"
 
-#: src/libslic3r/PrintConfig.cpp:3320
+#: src/slic3r/GUI/NotificationManager.cpp:631
+#: src/slic3r/GUI/NotificationManager.cpp:748
+msgid "Export G-Code."
+msgstr "Exportar Código G."
+
+#: src/libslic3r/PrintConfig.cpp:3513
 msgid "Export OBJ"
 msgstr "Exportar OBJ"
 
-#: src/slic3r/GUI/Plater.cpp:2610
+#: src/slic3r/GUI/Plater.cpp:2572
 msgid "Export OBJ file:"
 msgstr "Exportar archivo OBJ:"
 
@@ -2527,212 +2942,215 @@ msgstr "Exportar archivo OBJ:"
 msgid "Export of a temporary 3mf file failed"
 msgstr "La exportación de un archivo temporal de 3mf falló"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export plate as &AMF"
 msgstr "Exportar plataforma como &AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export plate as &STL"
 msgstr "Exportar plataforma como &STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export plate as STL &including supports"
 msgstr "Exportar plataforma como STL &incluyendo soportes"
 
-#: src/libslic3r/PrintConfig.cpp:3332
+#: src/libslic3r/PrintConfig.cpp:3525
 msgid "Export SLA"
 msgstr "Exportar SLA"
 
-#: src/slic3r/GUI/Preferences.cpp:72
+#: src/slic3r/GUI/Preferences.cpp:89
 msgid "Export sources full pathnames to 3mf and amf"
 msgstr "Exportar nombres de ruta completos de las fuentes a 3mf y amf"
 
-#: src/libslic3r/PrintConfig.cpp:3348
+#: src/libslic3r/PrintConfig.cpp:3541
 msgid "Export STL"
 msgstr "Exportar STL"
 
-#: src/slic3r/GUI/Plater.cpp:2591
+#: src/slic3r/GUI/Plater.cpp:2553
 msgid "Export STL file:"
 msgstr "Exportar archivo STL:"
 
-#: src/libslic3r/PrintConfig.cpp:3339
+#: src/libslic3r/PrintConfig.cpp:3532
 msgid "Export the model(s) as 3MF."
 msgstr "Exportar el(los) objeto(s) como 3MF."
 
-#: src/libslic3r/PrintConfig.cpp:3344
+#: src/libslic3r/PrintConfig.cpp:3537
 msgid "Export the model(s) as AMF."
 msgstr "Exportar el(los) objeto(s) como AMF."
 
-#: src/libslic3r/PrintConfig.cpp:3321
+#: src/libslic3r/PrintConfig.cpp:3514
 msgid "Export the model(s) as OBJ."
 msgstr "Exportar el(los) objeto(s) como OBJ."
 
-#: src/libslic3r/PrintConfig.cpp:3349
+#: src/libslic3r/PrintConfig.cpp:3542
 msgid "Export the model(s) as STL."
 msgstr "Exportar el(los) objeto(s) como STL."
 
-#: src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/Plater.cpp:3884
 msgid "Export the selected object as STL file"
 msgstr "Exportar el objeto seleccionado como archivo STL"
 
-#: src/slic3r/GUI/Plater.cpp:880
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 src/slic3r/GUI/Plater.cpp:755
 msgid "Export to SD card / Flash drive"
 msgstr "Exportar a tarjeta SD / tarjeta Flash"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export toolpaths as OBJ"
 msgstr "Exportar trayectorias de herramientas como OBJ"
 
-#: src/libslic3r/Print.cpp:1638
+#: src/slic3r/GUI/NotificationManager.hpp:317
+msgid "Exporting finished."
+msgstr "Exportación finalizada."
+
+#: src/libslic3r/Print.cpp:1676
 msgid "Exporting G-code"
 msgstr "Exportando código G"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:341
-msgid "Exporting model..."
-msgstr "Exportando el modelo..."
+msgid "Exporting model"
+msgstr "Exportando modelo"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:219
 #: src/slic3r/Utils/FixModelByWin10.cpp:359
 msgid "Exporting source model"
 msgstr "Exportando el modelo original"
 
-#: src/libslic3r/SLAPrint.cpp:646
+#: src/libslic3r/SLAPrint.cpp:660
 msgid "Exposition time is out of printer profile bounds."
 msgstr "Tiempo de exposición inicial fuera de los límites del perfil de impresión."
 
-#: src/slic3r/GUI/Tab.cpp:2117 src/slic3r/GUI/Tab.cpp:3515
+#: src/slic3r/GUI/Tab.cpp:2287 src/slic3r/GUI/Tab.cpp:3931
 msgid "Exposure"
 msgstr "Exposición"
 
-#: src/libslic3r/PrintConfig.cpp:2541 src/libslic3r/PrintConfig.cpp:2542
+#: src/libslic3r/PrintConfig.cpp:2684 src/libslic3r/PrintConfig.cpp:2685
 msgid "Exposure time"
 msgstr "Tiempo de exposición"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:311
+#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:315
+#: src/libslic3r/ExtrusionEntity.cpp:338
 msgid "External perimeter"
 msgstr "Perímetro externo"
 
-#: src/slic3r/GUI/PresetHints.cpp:156
+#: src/slic3r/GUI/PresetHints.cpp:155
 msgid "external perimeters"
 msgstr "perímetros externos"
 
-#: src/libslic3r/PrintConfig.cpp:446 src/libslic3r/PrintConfig.cpp:457
+#: src/libslic3r/PrintConfig.cpp:482 src/libslic3r/PrintConfig.cpp:493
 msgid "External perimeters"
 msgstr "Perímetros externos"
 
-#: src/libslic3r/PrintConfig.cpp:469
+#: src/libslic3r/PrintConfig.cpp:505
 msgid "External perimeters first"
 msgstr "Perímetros externos primero"
 
-#: src/libslic3r/PrintConfig.cpp:1588 src/libslic3r/PrintConfig.cpp:1596
+#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1704
 msgid "Extra length on restart"
 msgstr "Longitud adicional en el reinicio"
 
-#: src/libslic3r/PrintConfig.cpp:1390
+#: src/libslic3r/PrintConfig.cpp:1498
 msgid "Extra loading distance"
 msgstr "Distancia de carga adicional"
 
-#: src/libslic3r/PrintConfig.cpp:477
+#: src/libslic3r/PrintConfig.cpp:513
 msgid "Extra perimeters if needed"
 msgstr "Perímetros adicionales si es necesario"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:278 src/slic3r/GUI/Tab.cpp:1434
-#: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487
+#: src/slic3r/GUI/GCodeViewer.cpp:2277 src/slic3r/GUI/GCodeViewer.cpp:2313
+#: src/slic3r/GUI/GCodeViewer.cpp:2318 src/slic3r/GUI/GUI_ObjectList.cpp:296
+#: src/slic3r/GUI/Tab.cpp:1780 src/slic3r/GUI/wxExtensions.cpp:515
+#: src/libslic3r/PrintConfig.cpp:523
 msgid "Extruder"
 msgstr "Extrusor"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1134 src/slic3r/GUI/DoubleSlider.cpp:1170
-#: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1704
-#: src/slic3r/GUI/Tab.cpp:2320 src/libslic3r/GCode/PreviewData.cpp:445
+#: src/slic3r/GUI/DoubleSlider.cpp:1263 src/slic3r/GUI/DoubleSlider.cpp:1297
+#: src/slic3r/GUI/GLCanvas3D.cpp:983 src/slic3r/GUI/GUI_ObjectList.cpp:1832
+#: src/slic3r/GUI/Tab.cpp:2489 src/libslic3r/GCode/PreviewData.cpp:450
 #, c-format
 msgid "Extruder %d"
 msgstr "Extrusor %d"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1011
+#: src/slic3r/GUI/DoubleSlider.cpp:1137
 msgid "Extruder (tool) is changed to Extruder \"%1%\""
 msgstr "El Extrusor (herramienta) se cambia al Extrusor \"%1%\""
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
-msgid "Extruder and Bed Temperatures"
-msgstr "Temperaturas del Extrusor y de la Base"
-
 #: src/slic3r/GUI/WipeTowerDialog.cpp:255
 msgid "Extruder changed to"
 msgstr "El extrusor cambia a"
 
-#: src/slic3r/GUI/Tab.cpp:1233
+#: src/slic3r/GUI/Tab.cpp:1563
 msgid "Extruder clearance (mm)"
 msgstr "Distancia libre del extrusor (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:522
+#: src/libslic3r/PrintConfig.cpp:558
 msgid "Extruder Color"
 msgstr "Color del extrusor"
 
-#: src/libslic3r/PrintConfig.cpp:529
+#: src/libslic3r/PrintConfig.cpp:565
 msgid "Extruder offset"
 msgstr "Offset del extrusor"
 
-#: src/libslic3r/PrintConfig.cpp:911
-msgid "Extruder temperature for first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output file."
-msgstr "Temperatura del extrusor para la primera capa. Si desea controlar la temperatura manualmente durante la impresión, configúrela en cero para desactivar los comandos de control de temperatura en el archivo de salida."
-
-#: src/libslic3r/PrintConfig.cpp:2065
-msgid "Extruder temperature for layers after the first one. Set this to zero to disable temperature control commands in the output."
-msgstr "Temperatura del extrusor para capas después del primera. Ajuste esto a cero para desactivar los comandos de control de temperatura en la salida."
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:617
-#: src/slic3r/GUI/Tab.cpp:1180 src/slic3r/GUI/Tab.cpp:1838
-#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002
-#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1737
-#: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1965
+#: src/slic3r/GUI/GUI_ObjectList.cpp:97 src/slic3r/GUI/GUI_ObjectList.cpp:656
+#: src/slic3r/GUI/Tab.cpp:1510 src/slic3r/GUI/Tab.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:524 src/libslic3r/PrintConfig.cpp:1046
+#: src/libslic3r/PrintConfig.cpp:1517 src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:2080 src/libslic3r/PrintConfig.cpp:2107
 msgid "Extruders"
 msgstr "Extrusores"
 
-#: src/libslic3r/PrintConfig.cpp:539
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1061
+msgid "Extruders count"
+msgstr "Contador de extrusores"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2493
+msgid "Extrusion"
+msgstr "Extrusión"
+
+#: src/libslic3r/PrintConfig.cpp:575
 msgid "Extrusion axis"
 msgstr "Eje de extrusión"
 
-#: src/libslic3r/PrintConfig.cpp:545
+#: src/libslic3r/PrintConfig.cpp:581
 msgid "Extrusion multiplier"
 msgstr "Multiplicador de extrusión"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1037
+#: src/slic3r/GUI/ConfigWizard.cpp:1403
 msgid "Extrusion Temperature:"
 msgstr "Temperatura de Extrusión:"
 
-#: src/slic3r/GUI/Tab.cpp:1205
+#: src/slic3r/GUI/Tab.cpp:1535
 msgid "Extrusion width"
 msgstr "Ancho de extrusión"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:618
-#: src/libslic3r/PrintConfig.cpp:447 src/libslic3r/PrintConfig.cpp:555
-#: src/libslic3r/PrintConfig.cpp:877 src/libslic3r/PrintConfig.cpp:1010
-#: src/libslic3r/PrintConfig.cpp:1418 src/libslic3r/PrintConfig.cpp:1757
-#: src/libslic3r/PrintConfig.cpp:1947 src/libslic3r/PrintConfig.cpp:2106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:657
+#: src/libslic3r/PrintConfig.cpp:483 src/libslic3r/PrintConfig.cpp:591
+#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1054
+#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1872
+#: src/libslic3r/PrintConfig.cpp:2089 src/libslic3r/PrintConfig.cpp:2249
 msgid "Extrusion Width"
 msgstr "Ancho de Extrusión"
 
-#: src/slic3r/GUI/Plater.cpp:162
+#: src/slic3r/GUI/Plater.cpp:168
 msgid "Facets"
 msgstr "Facetas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:349
+#: src/slic3r/GUI/GUI_ObjectList.cpp:396
 msgid "facets added"
 msgstr "facetas añadidas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:348
+#: src/slic3r/GUI/GUI_ObjectList.cpp:395
 msgid "facets removed"
 msgstr "facetas retiradas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:350
+#: src/slic3r/GUI/GUI_ObjectList.cpp:397
 msgid "facets reversed"
 msgstr "facetas invertidas"
 
-#: src/libslic3r/PrintConfig.cpp:2517
+#: src/libslic3r/PrintConfig.cpp:2660
 msgid "Faded layers"
 msgstr "Capas descoloridas"
 
-#: src/libslic3r/Zipper.cpp:44
+#: src/libslic3r/miniz_extension.cpp:103
 msgid "failed finding central directory"
 msgstr "búsqueda de directorio central fallida"
 
@@ -2740,105 +3158,115 @@ msgstr "búsqueda de directorio central fallida"
 msgid "Failed loading the input model."
 msgstr "No se pudo cargar el modelo de entrada."
 
-#: src/libslic3r/PrintBase.cpp:71
+#: src/libslic3r/PrintBase.cpp:72
 msgid "Failed processing of the output_filename_format template."
 msgstr "Error al procesar la plantilla output_filename_format."
 
-#: src/slic3r/GUI/PresetHints.cpp:42
+#: src/slic3r/GUI/PresetHints.cpp:41
 msgid "Fan"
 msgstr "Ventilador"
 
-#: src/slic3r/GUI/Tab.cpp:1456
+#: src/slic3r/GUI/Tab.cpp:1802
 msgid "Fan settings"
 msgstr "Configuración del ventilador"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/Tab.cpp:1457
+#: src/slic3r/GUI/GUI_Preview.cpp:279 src/slic3r/GUI/Tab.cpp:1803
 msgid "Fan speed"
 msgstr "Velocidad del ventilador"
 
-#: src/libslic3r/GCode/PreviewData.cpp:353
+#: src/slic3r/GUI/GCodeViewer.cpp:2239 src/libslic3r/GCode/PreviewData.cpp:358
 msgid "Fan Speed (%)"
 msgstr "Velocidad Ventilador (%)"
 
-#: src/libslic3r/PrintConfig.cpp:2405
+#: src/libslic3r/PrintConfig.cpp:2548
 msgid "Fast"
 msgstr "Rápida"
 
-#: src/libslic3r/PrintConfig.cpp:2406
+#: src/libslic3r/PrintConfig.cpp:2549
 msgid "Fast tilt"
 msgstr "Inclinación rápida"
 
-#: src/slic3r/GUI/GUI_App.cpp:141
+#: src/slic3r/GUI/GUI_App.cpp:531
 msgid "Fatal error"
 msgstr "Error fatal"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:221 src/slic3r/GUI/GUI_Preview.cpp:575
-#: src/libslic3r/GCode/PreviewData.cpp:345
+#: src/slic3r/GUI/GUI_Init.cpp:88
+msgid "Fatal error, exception catched: %1%"
+msgstr "Error fatal, excepción detectada: %1%"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
+#: src/slic3r/GUI/GUI_Preview.cpp:275 src/slic3r/GUI/GUI_Preview.cpp:787
+#: src/libslic3r/GCode/PreviewData.cpp:350
 msgid "Feature type"
 msgstr "Tipo de función"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:234 src/slic3r/GUI/GUI_Preview.cpp:235
+#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:295
+#: src/slic3r/GUI/GUI_Preview.cpp:316
 msgid "Feature types"
 msgstr "Tipos de funciones"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1525
+#: src/slic3r/GUI/ConfigWizard.cpp:1926
 msgid "FFF Technology Printers"
 msgstr "Impresoras de Tecnología FFF"
 
-#: src/slic3r/GUI/Plater.cpp:816 src/slic3r/GUI/Tab.cpp:1425
-#: src/slic3r/GUI/Tab.cpp:1426
+#: src/slic3r/GUI/Plater.cpp:691 src/slic3r/GUI/Tab.cpp:1770
+#: src/slic3r/GUI/Tab.cpp:1771
 msgid "Filament"
 msgstr "Filamento"
 
-#: src/slic3r/GUI/Preset.cpp:1522
+#: src/libslic3r/Preset.cpp:1301
 msgid "filament"
 msgstr "filamento"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Filament and Nozzle Diameters"
 msgstr "Filamento y diámetros de boquilla"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:983
+#: src/slic3r/GUI/ConfigWizard.cpp:1349
 msgid "Filament Diameter:"
 msgstr "Diámetro del filamento:"
 
-#: src/libslic3r/PrintConfig.cpp:651
+#: src/libslic3r/PrintConfig.cpp:687
 msgid "Filament is cooled by being moved back and forth in the cooling tubes. Specify desired number of these moves."
 msgstr "El filamento se enfría al ser movido hacia adelante y hacia atrás en los tubos de enfriamiento. Especifica el número deseado de estos movimientos."
 
-#: src/libslic3r/PrintConfig.cpp:686
+#: src/libslic3r/PrintConfig.cpp:722
 msgid "Filament load time"
 msgstr "Tiempo de carga de filamento"
 
-#: src/libslic3r/PrintConfig.cpp:588
+#: src/libslic3r/PrintConfig.cpp:624
 msgid "Filament notes"
 msgstr "Notas del filamento"
 
-#: src/slic3r/GUI/Tab.cpp:1323 src/slic3r/GUI/Tab.cpp:1378
+#: src/slic3r/GUI/Tab.cpp:1669
 msgid "Filament Overrides"
 msgstr "Anulaciones de filamentos"
 
-#: src/libslic3r/PrintConfig.cpp:1381
+#: src/libslic3r/PrintConfig.cpp:1489
 msgid "Filament parking position"
 msgstr "Posición de aparcar el filamento"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filament Profiles Selection"
 msgstr "Selección Perfiles de Filamento"
 
-#: src/slic3r/GUI/Tab.cpp:1471
+#: src/slic3r/GUI/Tab.cpp:1817
 msgid "Filament properties"
 msgstr "Propiedades del filamento"
 
-#: src/slic3r/GUI/Tab.hpp:355
+#: src/slic3r/GUI/Tab.hpp:409
 msgid "Filament Settings"
 msgstr "Configuración del filamento"
 
-#: src/libslic3r/PrintConfig.cpp:726
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Filament Settings Tab"
+msgstr "Pestaña Ajustes Filamento"
+
+#: src/libslic3r/PrintConfig.cpp:762
 msgid "Filament type"
 msgstr "Tipo de filamento"
 
-#: src/libslic3r/PrintConfig.cpp:701
+#: src/libslic3r/PrintConfig.cpp:737
 msgid "Filament unload time"
 msgstr "Tiempo de descarga del filamento"
 
@@ -2846,75 +3274,79 @@ msgstr "Tiempo de descarga del filamento"
 msgid "filaments"
 msgstr "filamentos"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filaments"
 msgstr "Filamentos"
 
-#: src/libslic3r/Zipper.cpp:72
+#: src/slic3r/GUI/ConfigWizard.cpp:691
+msgid "Filaments marked with <b>*</b> are <b>not</b> compatible with some installed printers."
+msgstr "Los filamentos marcados con <b>*</b> y <b>no</b> son compatibles con algunas impresoras instaladas."
+
+#: src/libslic3r/miniz_extension.cpp:131
 msgid "file close failed"
 msgstr "cierre del archivo fallido"
 
-#: src/libslic3r/Zipper.cpp:66
+#: src/libslic3r/miniz_extension.cpp:125
 msgid "file create failed"
 msgstr "creación del archivo fallida"
 
-#: src/slic3r/GUI/MainFrame.cpp:791
+#: src/slic3r/GUI/MainFrame.cpp:1492
 msgid "File Not Found"
 msgstr "Archivo no encontrado"
 
-#: src/libslic3r/Zipper.cpp:86
+#: src/libslic3r/miniz_extension.cpp:145
 msgid "file not found"
 msgstr "archivo no encontrado"
 
-#: src/libslic3r/Zipper.cpp:64
+#: src/libslic3r/miniz_extension.cpp:123
 msgid "file open failed"
 msgstr "apertura de archivo fallida"
 
-#: src/libslic3r/Zipper.cpp:70
+#: src/libslic3r/miniz_extension.cpp:129
 msgid "file read failed"
 msgstr "lectura del archivo fallida"
 
-#: src/libslic3r/Zipper.cpp:74
+#: src/libslic3r/miniz_extension.cpp:133
 msgid "file seek failed"
 msgstr "búsqueda de archivo fallida"
 
-#: src/libslic3r/Zipper.cpp:76
+#: src/libslic3r/miniz_extension.cpp:135
 msgid "file stat failed"
 msgstr "estadística de archivos fallida"
 
-#: src/libslic3r/Zipper.cpp:36
+#: src/libslic3r/miniz_extension.cpp:95
 msgid "file too large"
 msgstr "archivo demasiado grande"
 
-#: src/libslic3r/Zipper.cpp:68
+#: src/libslic3r/miniz_extension.cpp:127
 msgid "file write failed"
 msgstr "escritura del archivo fallida"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:153
+#: src/slic3r/GUI/PrintHostDialogs.cpp:151
 msgid "Filename"
 msgstr "Nombre de archivo"
 
-#: src/libslic3r/PrintConfig.cpp:775
+#: src/libslic3r/PrintConfig.cpp:811
 msgid "Fill angle"
 msgstr "Ángulo de relleno"
 
-#: src/libslic3r/PrintConfig.cpp:789
+#: src/libslic3r/PrintConfig.cpp:825
 msgid "Fill density"
 msgstr "Densidad de relleno"
 
-#: src/libslic3r/PrintConfig.cpp:826
+#: src/libslic3r/PrintConfig.cpp:862
 msgid "Fill pattern"
 msgstr "Patrón de relleno"
 
-#: src/libslic3r/PrintConfig.cpp:437
+#: src/libslic3r/PrintConfig.cpp:473
 msgid "Fill pattern for bottom infill. This only affects the bottom external visible layer, and not its adjacent solid shells."
 msgstr "Patrón de relleno para la tapa inferior. Esto sólo afecta a la capa inferior externa visible, y no a las paredes adyacentes."
 
-#: src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:864
 msgid "Fill pattern for general low-density infill."
 msgstr "Patrón de relleno para el relleno general de baja densidad."
 
-#: src/libslic3r/PrintConfig.cpp:417
+#: src/libslic3r/PrintConfig.cpp:451
 msgid "Fill pattern for top infill. This only affects the top visible layer, and not its adjacent solid shells."
 msgstr "Patrón de relleno para el relleno superior. Esto solo afecta a la capa superior visible, y no a sus capas sólidas adyacentes."
 
@@ -2922,7 +3354,7 @@ msgstr "Patrón de relleno para el relleno superior. Esto solo afecta a la capa
 msgid "Finished"
 msgstr "Terminado"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891 src/slic3r/GUI/Tab.cpp:1947
+#: src/slic3r/GUI/ConfigWizard.cpp:1257 src/slic3r/GUI/Tab.cpp:2132
 msgid "Firmware"
 msgstr "Firmware"
 
@@ -2934,44 +3366,52 @@ msgstr "Flasheador de firmware"
 msgid "Firmware image:"
 msgstr "Imagen del firmware:"
 
-#: src/slic3r/GUI/Tab.cpp:2577
+#: src/slic3r/GUI/Tab.cpp:2733
 msgid "Firmware Retraction"
 msgstr "Retracción del firmware"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891
+#: src/slic3r/GUI/ConfigWizard.cpp:1257
 msgid "Firmware Type"
 msgstr "Tipo de Firmware"
 
-#: src/libslic3r/PrintConfig.cpp:859 src/libslic3r/PrintConfig.cpp:868
-#: src/libslic3r/PrintConfig.cpp:876 src/libslic3r/PrintConfig.cpp:910
+#: src/libslic3r/PrintConfig.cpp:899 src/libslic3r/PrintConfig.cpp:908
+#: src/libslic3r/PrintConfig.cpp:918 src/libslic3r/PrintConfig.cpp:952
 msgid "First layer"
 msgstr "Primera capa"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:61 src/libslic3r/PrintConfig.cpp:889
+#: src/libslic3r/PrintConfig.cpp:909
+msgid "First layer bed temperature"
+msgstr "Temperatura de la base calefable para la primera capa"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:60 src/libslic3r/PrintConfig.cpp:931
 msgid "First layer height"
 msgstr "Altura de la primera capa"
 
-#: src/libslic3r/Print.cpp:1422
+#: src/libslic3r/Print.cpp:1448
 msgid "First layer height can't be greater than nozzle diameter"
 msgstr "La altura de primera capa no puede ser mayor que el diametro de la boquilla"
 
-#: src/libslic3r/PrintConfig.cpp:900
+#: src/libslic3r/PrintConfig.cpp:960
+msgid "First layer nozzle temperature"
+msgstr "Temperatura de la boquilla para la primera capa"
+
+#: src/libslic3r/PrintConfig.cpp:942
 msgid "First layer speed"
 msgstr "Velocidad de la primera capa"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "First layer volumetric"
 msgstr "Primera capa volumétrica"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1647
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
 msgid "Fix through the Netfabb"
 msgstr "Reparar mediante Netfabb"
 
-#: src/slic3r/GUI/Plater.cpp:3473
+#: src/slic3r/GUI/Plater.cpp:3278
 msgid "Fix Throught NetFabb"
 msgstr "Reparar mediante NetFabb"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Flash printer &firmware"
 msgstr "Grabar &firmware en la impresora"
 
@@ -2999,24 +3439,32 @@ msgstr "Flasheo en curso. ¡Por favor no desconecte la impresora!"
 msgid "Flashing succeeded!"
 msgstr "¡Exito al flashear!"
 
-#: src/slic3r/GUI/Tab.cpp:1218
+#: src/slic3r/GUI/Tab.cpp:1548
 msgid "Flow"
 msgstr "Flujo"
 
-#: src/slic3r/GUI/PresetHints.cpp:220
+#: src/libslic3r/PrintConfig.cpp:1145
+msgid "Flow rate"
+msgstr "Tasa de flujo"
+
+#: src/slic3r/GUI/PresetHints.cpp:219
 msgid "flow rate is maximized"
 msgstr "se maximiza el flujo de material"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:286
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:555
+msgid "Following printer preset(s) is duplicated:%1%The above preset for printer \"%2%\" will be used just once."
+msgstr "Los siguientes ajustes preestablecidos de la impresora están duplicados:%1%El preajuste anterior para impresora \"%2%\" se utilizará solo una vez."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:287
 msgid "For more information please visit our wiki page:"
 msgstr "Para más información visite por favor la página de nuestra wiki:"
 
-#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Plater.cpp:624
+#: src/slic3r/GUI/Plater.cpp:367 src/slic3r/GUI/Plater.cpp:490
 msgid "For support enforcers only"
 msgstr "Sólo para modificadores de soportes"
 
 #. TRN Description for "WHITE BULLET"
-#: src/slic3r/GUI/Tab.cpp:3267
+#: src/slic3r/GUI/Tab.cpp:3702
 msgid ""
 "for the left button: indicates a non-system (or non-default) preset,\n"
 "for the right button: indicates that the settings hasn't been modified."
@@ -3024,7 +3472,7 @@ msgstr ""
 "para el botón izquierdo: indica un preajuste que no es del sistema (o no predeterminado),\n"
 "para el botón derecho: indica que la configuración no se ha modificado."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:136
+#: src/slic3r/GUI/ConfigManipulation.cpp:135
 msgid ""
 "For the Wipe Tower to work with the soluble supports, the support layers\n"
 "need to be synchronized with the object layers."
@@ -3032,19 +3480,19 @@ msgstr ""
 "Para que la Torre de Limpieza funcione con los soportes solubles, las capas de soporte\n"
 "deben sincronizarse con las capas de objetos."
 
-#: src/libslic3r/Print.cpp:1396
+#: src/libslic3r/Print.cpp:1422
 msgid "For the Wipe Tower to work with the soluble supports, the support layers need to be synchronized with the object layers."
 msgstr "Para que la Torre de limpieza funcione con soportes solubles, las capas de soportes necesitan estar sincronizadas con las capas del objeto."
 
-#: src/libslic3r/PrintConfig.cpp:2864
+#: src/libslic3r/PrintConfig.cpp:3028
 msgid "Force pad around object everywhere"
 msgstr "Forzar el pad alrededor del objeto en todas partes"
 
-#: src/libslic3r/PrintConfig.cpp:1729
+#: src/libslic3r/PrintConfig.cpp:1844
 msgid "Force solid infill for regions having a smaller area than the specified threshold."
 msgstr "Forzar el relleno sólido para las regiones que tienen un área más pequeña que el umbral especificado."
 
-#: src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1116
 msgid "Force the generation of solid shells between adjacent materials/volumes. Useful for multi-extruder prints with translucent materials or manual soluble support material."
 msgstr "Forzar la generación de carcasas sólidas entre materiales / volúmenes adyacentes. Útil para impresiones de múltiples extrusoras con materiales translúcidos o material de soporte soluble manual."
 
@@ -3052,27 +3500,31 @@ msgstr "Forzar la generación de carcasas sólidas entre materiales / volúmenes
 msgid "From"
 msgstr "Desde"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2223
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "from"
+msgstr "desde"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2389
 msgid "From Object List You can't delete the last solid part from object."
 msgstr "Desde la Lista de Objetos no puedes eliminar la última parte sólida del objeto."
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front"
 msgstr "Frontal"
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front View"
 msgstr "Vista frontal"
 
-#: src/slic3r/GUI/Tab.cpp:1013
+#: src/slic3r/GUI/Tab.cpp:1331
 msgid "full profile name"
 msgstr "nombre completo perfil"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "G-code"
 msgstr "Código G"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1021
+#: src/slic3r/GUI/DoubleSlider.cpp:1146
 msgid ""
 "G-code associated to this tick mark is in a conflict with print mode.\n"
 "Editing it will cause changes of Slider data."
@@ -3080,220 +3532,273 @@ msgstr ""
 "El código G asociado a esta marca de verificación está en conflicto con el modo de impresión.\n"
 "Su edición provocará cambios en los datos del Slider."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:130
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:165
 msgid "G-code file exported to %1%"
 msgstr "Archivo de código G exportado a %1%"
 
-#: src/libslic3r/PrintConfig.cpp:936
+#: src/libslic3r/PrintConfig.cpp:980
 msgid "G-code flavor"
 msgstr "Tipo de código G"
 
-#: src/libslic3r/PrintConfig.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:79
+msgid "G-code preview"
+msgstr "Previsualización código G"
+
+#: src/libslic3r/PrintConfig.cpp:3552
+msgid "G-code viewer"
+msgstr "Visor código G"
+
+#: src/libslic3r/PrintConfig.cpp:757
 msgid "g/cm³"
 msgstr "g/cm³"
 
-#: src/libslic3r/PrintConfig.cpp:2505
+#: src/libslic3r/PrintConfig.cpp:2648
 msgid "g/ml"
 msgstr "g/ml"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:317
-#: src/libslic3r/PrintConfig.cpp:918
+#: src/slic3r/GUI/GUI_Preview.cpp:309 src/libslic3r/ExtrusionEntity.cpp:322
+#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:962
 msgid "Gap fill"
 msgstr "Relleno"
 
-#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1796
-#: src/slic3r/GUI/Tab.cpp:2040
+#: src/slic3r/GUI/Preferences.cpp:24 src/slic3r/GUI/Tab.cpp:2058
+#: src/slic3r/GUI/Tab.cpp:2240 src/slic3r/GUI/Tab.cpp:2348
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "General"
 msgstr "General"
 
-#: src/libslic3r/PrintConfig.cpp:1307
+#: src/libslic3r/PrintConfig.cpp:1415
 msgid "Generate no less than the number of skirt loops required to consume the specified amount of filament on the bottom layer. For multi-extruder machines, this minimum applies to each extruder."
 msgstr "Generar no menos que el número de bucles de falda requeridos para consumir la cantidad especificada de filamento en la capa inferior. Para máquinas multi-extrusoras, este mínimo se aplica a cada extrusora."
 
-#: src/libslic3r/PrintConfig.cpp:1865
+#: src/libslic3r/PrintConfig.cpp:2007
 msgid "Generate support material"
 msgstr "Generar material de soporte"
 
-#: src/libslic3r/PrintConfig.cpp:1926
+#: src/libslic3r/PrintConfig.cpp:2068
 msgid "Generate support material for the specified number of layers counting from bottom, regardless of whether normal support material is enabled or not and regardless of any angle threshold. This is useful for getting more adhesion of objects having a very thin or poor footprint on the build plate."
 msgstr "Generar material de soporte para la cantidad especificada de capas contando desde abajo, independientemente de si el material de soporte normal está habilitado o no e independientemente de cualquier umbral de ángulo. Es útil para obtener una mayor adhesión de los objetos que tienen una huella muy delgada o deficiente en la placa de construcción."
 
-#: src/libslic3r/PrintConfig.cpp:2613
+#: src/libslic3r/PrintConfig.cpp:2756
 msgid "Generate supports"
 msgstr "Generar soportes"
 
-#: src/libslic3r/PrintConfig.cpp:2615
+#: src/libslic3r/PrintConfig.cpp:2758
 msgid "Generate supports for the models"
 msgstr "Generar soportes para los modelos"
 
-#: src/libslic3r/Print.cpp:1614
+#: src/slic3r/GUI/Plater.cpp:3554
+msgid "generated warnings"
+msgstr "avisos generados"
+
+#: src/libslic3r/Print.cpp:1645
 msgid "Generating brim"
 msgstr "Generando balsa"
 
-#: src/libslic3r/Print.cpp:1642
+#: src/libslic3r/Print.cpp:1680
 msgid "Generating G-code"
 msgstr "Generando G-code"
 
-#: src/libslic3r/SLAPrintSteps.cpp:48
+#: src/slic3r/GUI/GCodeViewer.cpp:1392
+msgid "Generating index buffers"
+msgstr "Generando buffers de índice"
+
+#: src/libslic3r/SLAPrintSteps.cpp:49
 msgid "Generating pad"
 msgstr "Generando pad"
 
-#: src/libslic3r/PrintObject.cpp:152
+#: src/libslic3r/PrintObject.cpp:158
 msgid "Generating perimeters"
 msgstr "Generando perímetros"
 
-#: src/libslic3r/Print.cpp:1606
+#: src/libslic3r/Print.cpp:1636
 msgid "Generating skirt"
 msgstr "Generando falda"
 
-#: src/libslic3r/PrintObject.cpp:395
+#: src/libslic3r/PrintObject.cpp:422
 msgid "Generating support material"
 msgstr "Generando material de soporte"
 
-#: src/libslic3r/SLAPrintSteps.cpp:46 src/libslic3r/SLAPrintSteps.cpp:356
+#: src/libslic3r/SLAPrintSteps.cpp:47 src/libslic3r/SLAPrintSteps.cpp:359
 msgid "Generating support points"
 msgstr "Generando puntos de soporte"
 
-#: src/libslic3r/SLAPrintSteps.cpp:47
+#: src/libslic3r/SLAPrintSteps.cpp:48
 msgid "Generating support tree"
 msgstr "Generando soporte tipo árbol"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2022
+#: src/slic3r/GUI/GCodeViewer.cpp:933
+msgid "Generating toolpaths"
+msgstr "Generando trayectorias"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:1318
+msgid "Generating vertex buffer"
+msgstr "Generando buffer de vértice"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2181
 msgid "Generic"
 msgstr "Genérico"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
 msgid "Gizmo cut"
 msgstr "Corte Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
 msgid "Gizmo move"
 msgstr "Movimiento Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
+msgid "Gizmo move: Press to snap by 1mm"
+msgstr "Herramienta de mover: Pulsa para ajustar en pasos de 1 mm"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
 msgid "Gizmo Place face on bed"
 msgstr "Gizmo Colocar cara en la base"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
 msgid "Gizmo rotate"
 msgstr "Rotación Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:203
+msgid "Gizmo rotate: Press to rotate selected objects around their own center"
+msgstr "Herramienta de rotación: Pulsa para girar la pieza sobre su propio centro"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
 msgid "Gizmo scale"
 msgstr "Escala Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+msgid "Gizmo scale: Press to activate one direction scaling"
+msgstr "Herramienta de escala: Pulsa para activar una dirección de escalado"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:202
+msgid "Gizmo scale: Press to scale selected objects around their own center"
+msgstr "Herramienta de escala: Pulsa para escalar la pieza seleccionada alrededor de su propio centro"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
+msgid "Gizmo scale: Press to snap by 5%"
+msgstr "Herramienta de Escala: pulsa para ajustar un  5%"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:200
+msgid "Gizmo scale: Scale selection to fit print volume"
+msgstr "Herramienta de escala: Escala las piezas seleccionadas para ajustarse al volumen de impresión"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
 msgid "Gizmo SLA hollow"
 msgstr "Gizmo SLA vaciado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
 msgid "Gizmo SLA support points"
 msgstr "Puntos de soporte SLA Gizmo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2921
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:562
+#: src/slic3r/GUI/GLCanvas3D.cpp:3165
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520
 msgid "Gizmo-Move"
 msgstr "Gizmo-Mover"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:489
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:639
 msgid "Gizmo-Place on Face"
 msgstr "Gizmo-Colocar en Cara"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3001
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:564
+#: src/slic3r/GUI/GLCanvas3D.cpp:3249
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:522
 msgid "Gizmo-Rotate"
 msgstr "Gizmo-Rotar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:563
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521
 msgid "Gizmo-Scale"
 msgstr "Gizmo-Escalar"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
 msgid "Gizmos"
 msgstr "Gizmos"
 
-#: src/slic3r/GUI/AboutDialog.cpp:259
+#: src/slic3r/GUI/AboutDialog.cpp:284 src/slic3r/GUI/GUI_App.cpp:244
 msgid "GNU Affero General Public License, version 3"
 msgstr "GNU Affero General Public License, versión 3"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:980
+#: src/slic3r/GUI/ConfigWizard.cpp:1346
 msgid "Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
 msgstr "Se necesita buena precisión, así que usa un calibre y realiza varias medidas a lo largo del filamento, luego calcula la media."
 
-#: src/libslic3r/PrintConfig.cpp:844
+#: src/libslic3r/PrintConfig.cpp:882
 msgid "Grid"
 msgstr "Rejilla"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2454
+#: src/slic3r/GUI/PrintHostDialogs.cpp:57
+msgid "Group"
+msgstr "Agrupar"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2846
 msgid "Group manipulation"
 msgstr "Manipulación de grupos"
 
-#: src/slic3r/GUI/Preferences.cpp:133
+#: src/slic3r/GUI/Preferences.cpp:200
 msgid "GUI"
 msgstr "IU"
 
-#: src/libslic3r/PrintConfig.cpp:852
+#: src/libslic3r/PrintConfig.cpp:890
 msgid "Gyroid"
 msgstr "Giroide"
 
-#: src/slic3r/GUI/Tab.cpp:2937
-msgid "has the following unsaved changes:"
-msgstr "tiene los siguientes cambios no guardados:"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47
 msgid "Head diameter"
 msgstr "Diámetro de la cabeza"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:317
+#: src/libslic3r/PrintConfig.cpp:2772
+msgid "Head penetration"
+msgstr "Penetración de la cabeza"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:322
 msgid "Head penetration should not be greater than the head width."
 msgstr "La penetración de la cabeza no debaría ser mayor que el ancho de la cabeza."
 
-#: src/libslic3r/PrintConfig.cpp:869
+#: src/libslic3r/PrintConfig.cpp:910
 msgid "Heated build plate temperature for the first layer. Set this to zero to disable bed temperature control commands in the output."
-msgstr "Temperatura de base calefactable para la primera capa. Ajuste esto a cero para deshabilitar los comandos de control de temperatura de la cama en la salida."
+msgstr "Temperatura de base calefactable para la primera capa. Ajusta esto a cero para deshabilitar los comandos de control de temperatura de la cama en la salida."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:222 src/libslic3r/PrintConfig.cpp:500
+#: src/slic3r/GUI/GUI_Preview.cpp:276 src/libslic3r/PrintConfig.cpp:536
 msgid "Height"
 msgstr "Altura"
 
-#: src/libslic3r/GCode/PreviewData.cpp:347
+#: src/slic3r/GUI/GCodeViewer.cpp:2236 src/libslic3r/GCode/PreviewData.cpp:352
 msgid "Height (mm)"
 msgstr "Altura (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:1688
+#: src/libslic3r/PrintConfig.cpp:1796
 msgid "Height of skirt expressed in layers. Set this to a tall value to use skirt as a shield against drafts."
 msgstr "Altura de la falda expresada en capas. Establezca esto en un valor alto para usar la falda como escudo contra corrientes de aire."
 
-#: src/libslic3r/PrintConfig.cpp:2360
+#: src/libslic3r/PrintConfig.cpp:2503
 msgid "Height of the display"
 msgstr "Altura de la pantalla"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1631
 msgid "Height range Modifier"
 msgstr "Modificador Rango de Alturas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Height ranges"
 msgstr "Rango de alturas"
 
-#: src/libslic3r/PrintConfig.cpp:261
+#: src/libslic3r/PrintConfig.cpp:295
 msgid "Heights at which a filament change is to occur."
 msgstr "Alturas en las que se producirá un cambio de filamento."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:433
+#: src/slic3r/GUI/ConfigWizard.cpp:451
 #, c-format
 msgid "Hello, welcome to %s! This %s helps you with the initial configuration; just a few settings and you will be ready to print."
 msgstr "Hola, bienvenido a %s! Este %s te ayuda con la configuración inicial; sólo unos pocos ajustes y estarás preparado para imprimir."
 
-#: src/libslic3r/PrintConfig.cpp:3365
+#: src/libslic3r/PrintConfig.cpp:3564
 msgid "Help"
 msgstr "Ayuda"
 
-#: src/libslic3r/PrintConfig.cpp:3371
+#: src/libslic3r/PrintConfig.cpp:3570
 msgid "Help (FFF options)"
 msgstr "Ayuda (opciones FFF)"
 
-#: src/libslic3r/PrintConfig.cpp:3376
+#: src/libslic3r/PrintConfig.cpp:3575
 msgid "Help (SLA options)"
 msgstr "Ayuda (opciones SLA)"
 
@@ -3301,96 +3806,80 @@ msgstr "Ayuda (opciones SLA)"
 msgid "Here you can adjust required purging volume (mm³) for any given pair of tools."
 msgstr "Aquí puedes ajustar el volumende purga requerida (mm³) para cualquier par de herramientas."
 
-#: src/libslic3r/PrintConfig.cpp:973
+#: src/libslic3r/PrintConfig.cpp:1017
 msgid "High extruder current on filament swap"
 msgstr "Alta intensidad en el extrusor durante el cambio de filamento"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:277
+#: src/slic3r/GUI/GLCanvas3D.cpp:263
 msgid "Higher print quality versus higher print speed."
 msgstr "Mayor calidad de impresión contra mayor velocidad de impresión."
 
-#: src/libslic3r/PrintConfig.cpp:427 src/libslic3r/PrintConfig.cpp:853
+#: src/libslic3r/PrintConfig.cpp:463 src/libslic3r/PrintConfig.cpp:891
 msgid "Hilbert Curve"
 msgstr "Curva de Hilbert"
 
-#: src/slic3r/GUI/Plater.cpp:1042
+#: src/slic3r/GUI/Plater.cpp:916
 msgid "Hold Shift to Slice & Export G-code"
 msgstr "Mantén presionada la tecla Shift para laminar y exportar el código G"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
 msgid "Hole depth"
 msgstr "Profundidad del orificio"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
 msgid "Hole diameter"
 msgstr "Diámetro del orificio"
 
-#: src/slic3r/GUI/Plater.cpp:2760
-msgid "Hollow"
-msgstr "Vaciado"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:977
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:785
 msgid "Hollow and drill"
 msgstr "Vaciado y taladrado"
 
-#: src/libslic3r/PrintConfig.cpp:2910
+#: src/libslic3r/PrintConfig.cpp:3074
 msgid "Hollow out a model to have an empty interior"
 msgstr "Vaciado de un modelo para tener un interior vacío"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40
 msgid "Hollow this object"
 msgstr "Vaciar este objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3654
-#: src/slic3r/GUI/Tab.cpp:3655 src/libslic3r/SLA/Hollowing.cpp:46
-#: src/libslic3r/SLA/Hollowing.cpp:58 src/libslic3r/SLA/Hollowing.cpp:67
-#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2909
-#: src/libslic3r/PrintConfig.cpp:2916 src/libslic3r/PrintConfig.cpp:2926
-#: src/libslic3r/PrintConfig.cpp:2935
+#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4073
+#: src/slic3r/GUI/Tab.cpp:4074 src/libslic3r/SLA/Hollowing.cpp:45
+#: src/libslic3r/SLA/Hollowing.cpp:57 src/libslic3r/SLA/Hollowing.cpp:66
+#: src/libslic3r/SLA/Hollowing.cpp:75 src/libslic3r/PrintConfig.cpp:3073
+#: src/libslic3r/PrintConfig.cpp:3080 src/libslic3r/PrintConfig.cpp:3090
+#: src/libslic3r/PrintConfig.cpp:3099
 msgid "Hollowing"
 msgstr "Vaciando el interior"
 
-#: src/slic3r/GUI/Plater.cpp:2926
-msgid "Hollowing cancelled."
-msgstr "Vaciado cancelado."
-
-#: src/slic3r/GUI/Plater.cpp:2927
-msgid "Hollowing done."
-msgstr "Vaciado acabado."
-
-#: src/slic3r/GUI/Plater.cpp:2929
-msgid "Hollowing failed."
-msgstr "Vaciado fallido."
-
-#: src/libslic3r/PrintConfig.cpp:2937
+#: src/libslic3r/PrintConfig.cpp:3101
 msgid "Hollowing is done in two steps: first, an imaginary interior is calculated deeper (offset plus the closing distance) in the object and then it's inflated back to the specified offset. A greater closing distance makes the interior more rounded. At zero, the interior will resemble the exterior the most."
 msgstr "El vaciado del interior se hace en dos pasos: primero, se calcula un interior imaginario (un desplazamiento más la distancia de cierre) en la pieza y luego, se hincha hasta alcanzar el desplazamiento especificado. Una distancia de cierre mayor hace que interior sea más redondeado. Si es cero, el interior se parecerá mucho al exterior."
 
-#: src/libslic3r/SLAPrintSteps.cpp:43
+#: src/libslic3r/SLAPrintSteps.cpp:44
 msgid "Hollowing model"
 msgstr "Vaciando modelo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:813
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:624
 msgid "Hollowing parameter change"
 msgstr "Cambio del parámetro de vaciar el interior"
 
-#: src/libslic3r/PrintConfig.cpp:850 src/libslic3r/PrintConfig.cpp:2011
+#: src/libslic3r/PrintConfig.cpp:888 src/libslic3r/PrintConfig.cpp:2153
 msgid "Honeycomb"
 msgstr "Panal de abeja"
 
-#: src/slic3r/GUI/Tab.cpp:1064
+#: src/slic3r/GUI/Tab.cpp:1386
 msgid "Horizontal shells"
 msgstr "Carcasas horizontales"
 
-#: src/libslic3r/PrintConfig.cpp:245
+#: src/libslic3r/PrintConfig.cpp:279
 msgid "Horizontal width of the brim that will be printed around each object on the first layer."
 msgstr "Ancho horizontal del borde que se imprimirá alrededor de cada objeto en la primera capa."
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:152
+#: src/slic3r/GUI/PrintHostDialogs.cpp:150
 msgid "Host"
 msgstr "Equipo"
 
-#: src/libslic3r/PrintConfig.cpp:1332
+#: src/libslic3r/PrintConfig.cpp:1440
 msgid "Host Type"
 msgstr "Tipo de host"
 
@@ -3398,67 +3887,76 @@ msgstr "Tipo de host"
 msgid "Hostname"
 msgstr "Nombre del equipo"
 
-#: src/libslic3r/PrintConfig.cpp:97
+#: src/libslic3r/PrintConfig.cpp:99
 msgid "Hostname, IP or URL"
 msgstr "Nombre de equipo, IP o URL"
 
-#: src/slic3r/GUI/Tab.cpp:139
+#: src/slic3r/GUI/Tab.cpp:210
 msgid ""
 "Hover the cursor over buttons to find more information \n"
 "or click this button."
 msgstr "Sitúa el cursos sobre los botones para más información o haz clic en este botón."
 
-#: src/libslic3r/PrintConfig.cpp:2812
+#: src/libslic3r/PrintConfig.cpp:2976
 msgid "How far should the pad extend around the contained geometry"
 msgstr "¿Hasta dónde debe extenderse el pad alrededor de la geometría contenida"
 
-#: src/libslic3r/PrintConfig.cpp:2901
+#: src/libslic3r/PrintConfig.cpp:3065
 msgid "How much should the tiny connectors penetrate into the model body."
 msgstr "Cuanto deberían penetrar los conectores pequeños en el modelo del cuerpo."
 
-#: src/libslic3r/PrintConfig.cpp:2631
+#: src/libslic3r/PrintConfig.cpp:2774
 msgid "How much the pinhead has to penetrate the model surface"
 msgstr "Cuánto tiene que penetrar la cabeza del pin en la superficie del modelo"
 
-#: src/libslic3r/PrintConfig.cpp:2755
+#: src/libslic3r/PrintConfig.cpp:2919
 msgid "How much the supports should lift up the supported object. If \"Pad around object\" is enabled, this value is ignored."
 msgstr "Cuanto deberían los soportes deberían levantar el objeto soportado. Si \"Pad alrededor del objeto\" está activado, este valor será ignorado."
 
-#: src/libslic3r/PrintConfig.cpp:111
+#: src/libslic3r/PrintConfig.cpp:1209
+msgid "How to apply limits"
+msgstr "Cómo aplicar límites"
+
+#: src/libslic3r/PrintConfig.cpp:1203
+msgid "How to apply the Machine Limits"
+msgstr "Cómo aplicar los Límites Máquina"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:358
+#: src/libslic3r/PrintConfig.cpp:113
 msgid "HTTPS CA File"
 msgstr "Archivo HTTPS CA"
 
-#: src/slic3r/GUI/Tab.cpp:1713
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:319
 msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
 msgstr "El archivo HTTPS CA es opcional. Sólo se necesita si vas a usar HTTPS con un certificado auto-firmado."
 
-#: src/slic3r/GUI/Preferences.cpp:222
+#: src/slic3r/GUI/Preferences.cpp:376
 msgid "Icon size in a respect to the default size"
 msgstr "Tamaño del icono respecto al tamaño original"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:149
+#: src/slic3r/GUI/PrintHostDialogs.cpp:147
 msgid "ID"
 msgstr "ID"
 
-#: src/libslic3r/PrintConfig.cpp:1873
+#: src/libslic3r/PrintConfig.cpp:2015
 msgid "If checked, supports will be generated automatically based on the overhang threshold value. If unchecked, supports will be generated inside the \"Support Enforcer\" volumes only."
 msgstr "Si se marca, los soportes se generarán automáticamente según el valor del umbral de voladizo. Si no se selecciona, los apoyos se generarán solo dentro de los volúmenes \"Forzar soportes\"."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:773
+#: src/slic3r/GUI/ConfigWizard.cpp:1132
 #, c-format
 msgid "If enabled, %s checks for new application versions online. When a new version becomes available, a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "Si está activado, %s comprueba si hay nuevas versiones de Slic3r PE en la red. Cuando hay disponible una nueva versión se muestra una notificación al iniciar la aplicación (nunca durante el uso del programa). Esto es sólo un mecanismo de notificación, sin que se realice una instalación automática."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:783
+#: src/slic3r/GUI/ConfigWizard.cpp:1142
 #, c-format
 msgid "If enabled, %s downloads updates of built-in system presets in the background.These updates are downloaded into a separate temporary location.When a new preset version becomes available it is offered at application startup."
 msgstr "Si está activado, %s descargará actualizaciones de los ajustes del sistema mientras lo usamos. Estas actualizaciones se descargan a una ubicación temporal. Cuando hay un nuevo ajuste disponible, este se podrá incorporar y usar cuando la aplicación se vuelva a iniciar."
 
-#: src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:1994
 msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
 msgstr "Si está habilitado, todos los extrusores de impresión estarán cebados en el borde frontal de la cama de impresión al comienzo de la impresión."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:805
+#: src/slic3r/GUI/ConfigWizard.cpp:1164
 msgid ""
 "If enabled, allows the Reload from disk command to automatically find and load the files when invoked.\n"
 "If not enabled, the Reload from disk command will ask to select each file using an open file dialog."
@@ -3466,127 +3964,180 @@ msgstr ""
 "Si está activado, permite que la orden de Recarga desde el disco encuentre y cargue los archivos al invocarla. \n"
 "Si no está activado, la orden de Recarga desde el disco te pedirá que selecciones cada archivo en un cuadro de abrir archivo."
 
-#: src/slic3r/GUI/Preferences.cpp:74
+#: src/slic3r/GUI/Preferences.cpp:91
 msgid "If enabled, allows the Reload from disk command to automatically find and load the files when invoked."
 msgstr "Si está activado, permite que la orden de Recarga desde el disco busque y cargue los ficheros cuando se invoque."
 
-#: src/slic3r/GUI/Preferences.cpp:66
+#: src/slic3r/GUI/Preferences.cpp:238
+msgid "If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer. If disabled, changes made using the sequential slider, in preview, apply to the whole gcode."
+msgstr "Si está activado, los cambios realizados con el control deslizante secuencial, en la vista previa, se aplican solo a la capa superior del código G. Si está desactivado, los cambios realizados con el control deslizante secuencial, en la vista previa, se aplican a todo el código G."
+
+#: src/slic3r/GUI/Preferences.cpp:83
 msgid "If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "Si está habilitado, PrusaSlicer buscará las nuevas versiones de sí mismo en línea. Cuando una nueva versión esté disponible, se mostrará una notificación en el siguiente inicio de la aplicación (nunca durante el uso del programa). Esto es solo un mecanismo de notificación, no se realiza instalación automática."
 
-#: src/slic3r/GUI/Preferences.cpp:82
+#: src/slic3r/GUI/Preferences.cpp:270
+msgid "If enabled, renders object using the environment map."
+msgstr "Si está activado, visualiza el objeto usando el mapa del entorno."
+
+#: src/slic3r/GUI/Preferences.cpp:200
+msgid "If enabled, reverses the direction of zoom with mouse wheel"
+msgstr "Si está habilitado, invierte la dirección del zoom con la rueda del mouse"
+
+#: src/slic3r/GUI/Preferences.cpp:99
 msgid "If enabled, Slic3r downloads updates of built-in system presets in the background. These updates are downloaded into a separate temporary location. When a new preset version becomes available it is offered at application startup."
 msgstr "Si está activado, Slic3r descargará actualizaciones de los ajustes del sistema mientras lo usamos. Estas actualizaciones se descargan a una ubicación temporal. Cuando hay un nuevo ajuste disponible, este se podrá incorporar y usar cuando la aplicación se vuelva a iniciar."
 
-#: src/slic3r/GUI/Preferences.cpp:106
+#: src/slic3r/GUI/Preferences.cpp:137
 msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
 msgstr "Si está activado, la escena 3D se mostrará en resolución Retina. Si tienes problemas de prestaciones 3D, desactivar esta opción te puede ayudar."
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/slic3r/GUI/Preferences.cpp:215
+msgid "If enabled, the button for the collapse sidebar will be appeared in top right corner of the 3D Scene"
+msgstr "Si está habilitado, el botón de la barra lateral ocultable aparecerá en la esquina superior derecha de la escena 3D"
+
+#: src/libslic3r/PrintConfig.cpp:3698
+msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
+msgstr "Si está habilitado, los argumentos de la línea de comando se envían a una instancia existente de GUI PrusaSlicer, o se activa una ventana de PrusaSlicer existente. Anula el valor de configuración \"single_instance\" de las preferencias de la aplicación."
+
+#: src/libslic3r/PrintConfig.cpp:1804
 msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
 msgstr "Si está habilitado, la falda será tan alta como un objeto impreso más alto. Esto es útil para proteger una impresión ABS o ASA de la deformación y la separación de la cama de impresión debido al viento."
 
-#: src/libslic3r/PrintConfig.cpp:1858
+#: src/libslic3r/PrintConfig.cpp:2000
 msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
 msgstr "Si está habilitado, laTorre de Limpieza no se imprimirá en capas sin cambios de herramientas. En capas con cambio de herramienta, el extrusor viajará hacia abajo para imprimir la torre de limpieza. El usuario es responsable de garantizar que no haya colisión con la impresión."
 
-#: src/slic3r/GUI/Preferences.cpp:128
+#: src/slic3r/GUI/Preferences.cpp:193
 msgid "If enabled, use free camera. If not enabled, use constrained camera."
 msgstr "Si está activado, usa la cámara libre. Si no está activado, usa la cámara restringida."
 
-#: src/slic3r/GUI/Preferences.cpp:121
+#: src/slic3r/GUI/Preferences.cpp:186
 msgid "If enabled, use perspective camera. If not enabled, use orthographic camera."
 msgstr "Si está activado, se usará una cámara en perspectiva. Si no está activo, se usará una cámara ortográfica."
 
-#: src/slic3r/GUI/Preferences.cpp:145
+#: src/slic3r/GUI/Preferences.cpp:222
 msgid "If enabled, you can change size of toolbar icons manually."
 msgstr "Si está activado, puedes cambiar el tamaño de la barra de herramientas manualmente."
 
-#: src/slic3r/GUI/PresetHints.cpp:29
+#: src/slic3r/GUI/PresetHints.cpp:28
 msgid "If estimated layer time is below ~%1%s, fan will run at %2%%% and print speed will be reduced so that no less than %3%s are spent on that layer (however, speed will never be reduced below %4%mm/s)."
 msgstr "Si el tiempo de capa estimado está por debajo de ~%1%s, el ventilador funcionará en %2%%% y la velocidad de impresión se reducirá de modo que no se gaste menos de %3%s en esa capa (sin embargo, la velocidad nunca se reducirá por debajo de %4%mm/s) ."
 
-#: src/slic3r/GUI/PresetHints.cpp:36
+#: src/slic3r/GUI/PresetHints.cpp:35
 msgid "If estimated layer time is greater, but still below ~%1%s, fan will run at a proportionally decreasing speed between %2%%% and %3%%%."
 msgstr "Si el tiempo estimado de la capa es mayor, pero todavía por debajo de ~%1%s, el ventilador funcionará a una velocidad proporcionalmente menor entre %2%%% y %3%%%."
 
-#: src/libslic3r/PrintConfig.cpp:901
+#: src/libslic3r/PrintConfig.cpp:943
 msgid "If expressed as absolute value in mm/s, this speed will be applied to all the print moves of the first layer, regardless of their type. If expressed as a percentage (for example: 40%) it will scale the default speeds."
 msgstr "Si se expresa como valor absoluto en mm / s, esta velocidad se aplicará a todos los movimientos de impresión de la primera capa, independientemente de su tipo. Si se expresa como un porcentaje (por ejemplo: 40%), escalará las velocidades predeterminadas."
 
-#: src/libslic3r/PrintConfig.cpp:573
+#: src/libslic3r/PrintConfig.cpp:609
 msgid "If layer print time is estimated below this number of seconds, fan will be enabled and its speed will be calculated by interpolating the minimum and maximum speeds."
 msgstr "Si el tiempo de impresión de capa se estima por debajo de este número de segundos, el ventilador se habilitará y su velocidad se calculará al interpolar las velocidades mínima y máxima."
 
-#: src/libslic3r/PrintConfig.cpp:1706
+#: src/libslic3r/PrintConfig.cpp:1821
 msgid "If layer print time is estimated below this number of seconds, print moves speed will be scaled down to extend duration to this value."
 msgstr "Si el tiempo de impresión de la capa se estima por debajo de este número de segundos, la velocidad de los movimientos de impresión se reducirá para extender la duración a este valor."
 
-#: src/libslic3r/PrintConfig.cpp:567
+#: src/libslic3r/PrintConfig.cpp:603
 msgid "If this is enabled, fan will never be disabled and will be kept running at least at its minimum speed. Useful for PLA, harmful for ABS."
 msgstr "Si esto está habilitado, el ventilador nunca se desactivará y se mantendrá funcionando al menos a su velocidad mínima. Útil para PLA, no recomendado para ABS."
 
-#: src/slic3r/GUI/Preferences.cpp:49
+#: src/slic3r/GUI/Preferences.cpp:66
 msgid "If this is enabled, Slic3r will auto-center objects around the print bed center."
 msgstr "Si esto está habilitado, Slic3r centrará automáticamente los objetos alrededor del centro de la base de impresión."
 
-#: src/slic3r/GUI/Preferences.cpp:57
+#: src/slic3r/GUI/Preferences.cpp:74
 msgid "If this is enabled, Slic3r will pre-process objects as soon as they're loaded in order to save time when exporting G-code."
 msgstr "Si esto está habilitado, Slic3r preprocesará objetos tan pronto como se carguen para ahorrar tiempo al exportar el código G."
 
-#: src/slic3r/GUI/Preferences.cpp:41
+#: src/slic3r/GUI/Preferences.cpp:54
 msgid "If this is enabled, Slic3r will prompt the last output directory instead of the one containing the input files."
 msgstr "Si esto está habilitado, Slic3r solicitará el último directorio de salida en lugar del que contiene los archivos de entrada."
 
-#: src/libslic3r/PrintConfig.cpp:1562
+#: src/slic3r/GUI/Preferences.cpp:125
+msgid "If this is enabled, when starting PrusaSlicer and another instance of the same PrusaSlicer is already running, that instance will be reactivated instead."
+msgstr "Si está habilitado, al iniciar PrusaSlicer y ya se está ejecutando otra instancia del mismo PrusaSlicer, esa instancia se reactivará en su lugar."
+
+#: src/libslic3r/PrintConfig.cpp:1670
 msgid "If you set this to a positive value, Z is quickly raised every time a retraction is triggered. When using multiple extruders, only the setting for the first extruder will be considered."
 msgstr "Si establece esto en un valor positivo, Z se levantará rápidamente cada vez que se active una retracción. Cuando se usan múltiples extrusores , solo se considerará la configuración del primer extrusor."
 
-#: src/libslic3r/PrintConfig.cpp:1571
+#: src/libslic3r/PrintConfig.cpp:1679
 msgid "If you set this to a positive value, Z lift will only take place above the specified absolute Z. You can tune this setting for skipping lift on the first layers."
 msgstr "Si establece esto en un valor positivo, la elevación de Z solo tendrá lugar por encima de la Z absoluta especificada. Puede ajustar esta configuración para omitir el levantamiento en las primeras capas."
 
-#: src/libslic3r/PrintConfig.cpp:1580
+#: src/libslic3r/PrintConfig.cpp:1688
 msgid "If you set this to a positive value, Z lift will only take place below the specified absolute Z. You can tune this setting for limiting lift to the first layers."
 msgstr "Si configura esto en un valor positivo, la elevación Z solo tendrá lugar por debajo de la Z absoluta especificada. Puede ajustar esta configuración para limitar la elevación a las primeras capas."
 
-#: src/libslic3r/PrintConfig.cpp:1454
+#: src/libslic3r/PrintConfig.cpp:1562
 msgid "If you want to process the output G-code through custom scripts, just list their absolute paths here. Separate multiple scripts with a semicolon. Scripts will be passed the absolute path to the G-code file as the first argument, and they can access the Slic3r config settings by reading environment variables."
 msgstr "Si desea procesar el código G de salida a través de scripts personalizados, simplemente haga una lista de sus rutas absolutas aquí. Separe los scripts múltiples con un punto y coma. Los scripts se pasarán por la ruta absoluta al archivo de código G como primer argumento, y pueden acceder a la configuración de configuración de Slic3r leyendo las variables de entorno."
 
-#: src/libslic3r/PrintConfig.cpp:530
+#: src/libslic3r/PrintConfig.cpp:566
 msgid "If your firmware doesn't handle the extruder displacement you need the G-code to take it into account. This option lets you specify the displacement of each extruder with respect to the first one. It expects positive coordinates (they will be subtracted from the XY coordinate)."
 msgstr "Si su firmware no maneja el desplazamiento del extrusor, necesita el código G para tenerlo en cuenta. Esta opción le permite especificar el desplazamiento de cada extrusora con respecto a la primera. Se esperan coordenadas positivas (se restarán de la coordenada XY)."
 
-#: src/libslic3r/PrintConfig.cpp:2169
+#: src/libslic3r/PrintConfig.cpp:2312
 msgid "If your firmware requires relative E values, check this, otherwise leave it unchecked. Most firmwares use absolute values."
 msgstr "Si su firmware requiere valores E relativos, verifique esto, de lo contrario, deje sin marcar. La mayoría de los firmwares usan valores absolutos."
 
-#: src/libslic3r/PrintConfig.cpp:3485
+#: src/libslic3r/PrintConfig.cpp:1219
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: src/libslic3r/PrintConfig.cpp:3684
 msgid "Ignore non-existent config files"
 msgstr "Ignorar archivos de configuración inexistentes"
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:192
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:173
+msgid "Ignores facets facing away from the camera."
+msgstr "Ignora los lados que no están mirando hacia la cámara."
+
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Import &Config"
 msgstr "Importar &Configuración"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Import Config &Bundle"
 msgstr "Importar &Conjunto de Ajustes"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Import Config from &project"
 msgstr "Importar configuración desde un &proyecto"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
 msgid "Import Config from ini/amf/3mf/gcode"
 msgstr "Importar Configuración desde ini/amf/3mf/gcode"
 
-#: src/slic3r/GUI/Plater.cpp:4603
+#: src/slic3r/GUI/Plater.cpp:1419
+msgid "Import config only"
+msgstr "Importar configuración solo"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39
+msgid "Import file"
+msgstr "Importar archivo"
+
+#: src/slic3r/GUI/Plater.cpp:1418
+msgid "Import geometry only"
+msgstr "Importar geometría solo"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46
+msgid "Import model and profile"
+msgstr "Importar modelo y perfil"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48
+msgid "Import model only"
+msgstr "Importar modelo únicamente"
+
+#: src/slic3r/GUI/Plater.cpp:4655
 msgid "Import Object"
 msgstr "Importar Objeto"
 
-#: src/slic3r/GUI/Plater.cpp:4607
+#: src/slic3r/GUI/Plater.cpp:4659
 msgid "Import Objects"
 msgstr "Importar Objetos"
 
@@ -3594,15 +4145,50 @@ msgstr "Importar Objetos"
 msgid "Import of the repaired 3mf file failed"
 msgstr "La importación del archivo 3mf reparado ha fallado"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47
+msgid "Import profile only"
+msgstr "Importar perfil únicamente"
+
+#: src/slic3r/GUI/MainFrame.cpp:1050
+msgid "Import SL1 archive"
+msgstr "Importar archivo SL1"
+
+#: src/slic3r/GUI/Plater.cpp:1561
+msgid "Import SLA archive"
+msgstr "Importar archivo SLA"
+
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Import STL (imperial units)"
+msgstr "Importar STL (unidades imperiales)"
+
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Import STL/OBJ/AM&F/3MF"
 msgstr "Importar STL/OBJ/AM&F/3MF"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:118
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:111
 msgid "Import STL/OBJ/AMF/3MF without config, keep plater"
 msgstr "Importar  STL/OBJ/AMF/3MF sin configuración, mantener la base"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3422
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:159
+msgid "Importing canceled."
+msgstr "Importación cancelada."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:160
+msgid "Importing done."
+msgstr "Importación finalizada."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:135
+msgid "Importing SLA archive"
+msgstr "Importando archivo SLA"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+msgid "in"
+msgstr "en"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3885
 #, c-format
 msgid "In this mode you can select only other %s Items%s"
 msgstr "En este modo, solo puede seleccionar otros %s Items %s"
@@ -3611,25 +4197,25 @@ msgstr "En este modo, solo puede seleccionar otros %s Items %s"
 msgid "Incompatible bundles:"
 msgstr "Grupos incompatibles:"
 
+#: src/slic3r/GUI/PresetComboBoxes.cpp:241
+msgid "Incompatible presets"
+msgstr "Ajustes preestablecidos imcompatibles"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75
 #, c-format
 msgid "Incompatible with this %s"
 msgstr "Incompatible con este %s"
 
-#: src/slic3r/GUI/Plater.cpp:4685
+#: src/slic3r/GUI/Plater.cpp:4790
 msgid "Increase Instances"
 msgstr "Aumentar Instancias"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:264
+#: src/slic3r/GUI/GLCanvas3D.cpp:251
 msgid "Increase/decrease edit area"
 msgstr "Incrementar/reducir area edición"
 
-#: src/slic3r/GUI/Plater.cpp:2922
-msgid "Indexing hollowed object"
-msgstr "Indexando pieza vaciada"
-
 #. TRN Description for "UNLOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3258
+#: src/slic3r/GUI/Tab.cpp:3695
 msgid ""
 "indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
 "Click the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values."
@@ -3638,12 +4224,12 @@ msgstr ""
 "Haz clic en el icono CANDADO DESBLOQUEADO para restablecer todos los ajustes del grupo de opciones actual a los valores del sistema (o predeterminados)."
 
 #. TRN Description for "LOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3254
+#: src/slic3r/GUI/Tab.cpp:3691
 msgid "indicates that the settings are the same as the system (or default) values for the current option group"
 msgstr "indica que los ajustes son los mismos que los valores del sistema (o por defecto) para el grupo de opciones actual"
 
 #. TRN Description for "BACK ARROW"
-#: src/slic3r/GUI/Tab.cpp:3270
+#: src/slic3r/GUI/Tab.cpp:3707
 msgid ""
 "indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
 "Click the BACK ARROW icon to reset all settings for the current option group to the last saved preset."
@@ -3651,419 +4237,475 @@ msgstr ""
 "indica que los ajustes cambiaron y no son iguales que los ajustes grabados la última vez para el grupo de opciones actual.\n"
 "Haz clic en el símbolo de FLECHA ATRÁS para resetear todos los ajustes del grupo de opciones actual a los grabados la vez anterior."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:211
-#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96
-#: src/slic3r/GUI/GUI_ObjectList.cpp:614 src/slic3r/GUI/Plater.cpp:527
-#: src/slic3r/GUI/Tab.cpp:1091 src/slic3r/GUI/Tab.cpp:1092
-#: src/libslic3r/PrintConfig.cpp:203 src/libslic3r/PrintConfig.cpp:416
-#: src/libslic3r/PrintConfig.cpp:436 src/libslic3r/PrintConfig.cpp:776
-#: src/libslic3r/PrintConfig.cpp:790 src/libslic3r/PrintConfig.cpp:827
-#: src/libslic3r/PrintConfig.cpp:981 src/libslic3r/PrintConfig.cpp:991
-#: src/libslic3r/PrintConfig.cpp:1009 src/libslic3r/PrintConfig.cpp:1028
-#: src/libslic3r/PrintConfig.cpp:1047 src/libslic3r/PrintConfig.cpp:1728
-#: src/libslic3r/PrintConfig.cpp:1745
+#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:93
+#: src/slic3r/GUI/GUI_ObjectList.cpp:652 src/slic3r/GUI/Plater.cpp:393
+#: src/slic3r/GUI/Tab.cpp:1413 src/slic3r/GUI/Tab.cpp:1414
+#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:450
+#: src/libslic3r/PrintConfig.cpp:472 src/libslic3r/PrintConfig.cpp:812
+#: src/libslic3r/PrintConfig.cpp:826 src/libslic3r/PrintConfig.cpp:863
+#: src/libslic3r/PrintConfig.cpp:1025 src/libslic3r/PrintConfig.cpp:1035
+#: src/libslic3r/PrintConfig.cpp:1053 src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1091 src/libslic3r/PrintConfig.cpp:1843
+#: src/libslic3r/PrintConfig.cpp:1860
 msgid "Infill"
 msgstr "Relleno"
 
-#: src/slic3r/GUI/PresetHints.cpp:174
+#: src/slic3r/GUI/PresetHints.cpp:173
 msgid "infill"
 msgstr "relleno"
 
-#: src/libslic3r/PrintConfig.cpp:1021
+#: src/libslic3r/PrintConfig.cpp:1065
 msgid "Infill before perimeters"
 msgstr "Rellenar antes que los perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:1001
+#: src/libslic3r/PrintConfig.cpp:1045
 msgid "Infill extruder"
 msgstr "Extrusor para el relleno"
 
-#: src/libslic3r/PrintConfig.cpp:1036
+#: src/libslic3r/PrintConfig.cpp:1080
 msgid "Infill/perimeters overlap"
 msgstr "Superposición de relleno/perímetros"
 
-#: src/libslic3r/Print.cpp:1584
+#: src/libslic3r/Print.cpp:1610
 msgid "Infilling layers"
 msgstr "Rellenando capas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3430
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3505 src/slic3r/GUI/Plater.cpp:141
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3893
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3968 src/slic3r/GUI/Plater.cpp:147
 msgid "Info"
 msgstr "Info"
 
-#: src/libslic3r/PrintConfig.cpp:1057
+#: src/slic3r/GUI/GUI_App.cpp:1087 src/slic3r/GUI/Tab.cpp:3435
+msgid "Information"
+msgstr "Información"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
+msgid "Infornation"
+msgstr "Información"
+
+#: src/libslic3r/PrintConfig.cpp:1101
 msgid "Inherits profile"
 msgstr "Hereda el perfil"
 
-#: src/libslic3r/SLAPrint.cpp:653
+#: src/libslic3r/SLAPrint.cpp:667
 msgid "Initial exposition time is out of printer profile bounds."
 msgstr "El tiempo de exposición inicial está fuera de los límites del perfil de impresión."
 
-#: src/libslic3r/PrintConfig.cpp:2564 src/libslic3r/PrintConfig.cpp:2565
+#: src/libslic3r/PrintConfig.cpp:2707 src/libslic3r/PrintConfig.cpp:2708
 msgid "Initial exposure time"
 msgstr "Tiempo de exposición inicial"
 
-#: src/libslic3r/PrintConfig.cpp:2482 src/libslic3r/PrintConfig.cpp:2483
+#: src/libslic3r/PrintConfig.cpp:2625 src/libslic3r/PrintConfig.cpp:2626
 msgid "Initial layer height"
 msgstr "Altura de la capa inicial"
 
-#: src/slic3r/GUI/Field.cpp:204
+#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
 msgid "Input value is out of range"
 msgstr "El valor introducido está fuera de rango"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "Inspect / activate configuration snapshots"
 msgstr "Inspeccionar / activar instantáneas de configuración"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:60
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:216
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
 #, c-format
 msgid "Instance %d"
 msgstr "Instancia %d"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2892
 msgid "Instance manipulation"
 msgstr "Manipulación de instancias"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:56
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:58
 msgid "Instances"
 msgstr "Instancias"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1091
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3781
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1215
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4244
 msgid "Instances to Separated Objects"
 msgstr "Instancias para Separar Objetos"
 
-#: src/libslic3r/PrintConfig.cpp:1973
+#: src/libslic3r/PrintConfig.cpp:2115
 msgid "Interface layers"
 msgstr "Capas de interfaz"
 
-#: src/libslic3r/PrintConfig.cpp:1957
+#: src/libslic3r/PrintConfig.cpp:2099
 msgid "Interface loops"
 msgstr "Bucles de interfaz"
 
-#: src/libslic3r/PrintConfig.cpp:1982
+#: src/libslic3r/PrintConfig.cpp:2124
 msgid "Interface pattern spacing"
 msgstr "Espaciado de patrón de interfaz"
 
-#: src/libslic3r/PrintConfig.cpp:1071
+#: src/libslic3r/PrintConfig.cpp:1115
 msgid "Interface shells"
 msgstr "Carcasas de interfaz"
 
-#: src/libslic3r/Zipper.cpp:84
+#: src/libslic3r/miniz_extension.cpp:143
 msgid "internal error"
 msgstr "error interno"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:240 src/libslic3r/ExtrusionEntity.cpp:313
+#: src/slic3r/GUI/GUI_Preview.cpp:304 src/libslic3r/ExtrusionEntity.cpp:317
+#: src/libslic3r/ExtrusionEntity.cpp:342
 msgid "Internal infill"
 msgstr "Relleno interno"
 
-#: src/slic3r/GUI/Plater.cpp:3106
+#: src/slic3r/GUI/BedShapeDialog.cpp:145
+msgid "Invalid"
+msgstr "Inválido"
+
+#: src/slic3r/GUI/Plater.cpp:2906 src/slic3r/GUI/Plater.cpp:3583
 msgid "Invalid data"
 msgstr "Datos inválidos"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:494 src/slic3r/GUI/BedShapeDialog.cpp:543
-#: src/slic3r/GUI/BedShapeDialog.cpp:566
+#: src/slic3r/GUI/BedShapeDialog.cpp:570 src/slic3r/GUI/BedShapeDialog.cpp:619
+#: src/slic3r/GUI/BedShapeDialog.cpp:642
 msgid "Invalid file format."
 msgstr "Formato inválido de archivo."
 
-#: src/libslic3r/Zipper.cpp:80
+#: src/libslic3r/miniz_extension.cpp:139
 msgid "invalid filename"
 msgstr "nombre de archivo inválido"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:319
+#: src/slic3r/GUI/ConfigManipulation.cpp:324
 msgid "Invalid Head penetration"
 msgstr "Penetración inválida de la cabeza"
 
-#: src/libslic3r/Zipper.cpp:48
+#: src/libslic3r/miniz_extension.cpp:107
 msgid "invalid header or archive is corrupted"
 msgstr "encabezado inválido o archivo está dañado"
 
-#: src/slic3r/GUI/Field.cpp:195 src/slic3r/GUI/Field.cpp:226
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:376
+#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
+#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
 msgid "Invalid numeric input."
 msgstr "Entrada numérica no válida."
 
-#: src/libslic3r/Zipper.cpp:78
+#: src/libslic3r/miniz_extension.cpp:137
 msgid "invalid parameter"
 msgstr "parámetro inválido"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:332
+#: src/slic3r/GUI/ConfigManipulation.cpp:337
 msgid "Invalid pinhead diameter"
 msgstr "Diámetro de la cabeza del pin inválido"
 
+#: src/slic3r/GUI/GUI_ObjectList.cpp:94 src/slic3r/GUI/GUI_ObjectList.cpp:653
+#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1420
+#: src/libslic3r/ExtrusionEntity.cpp:320 src/libslic3r/ExtrusionEntity.cpp:348
+#: src/libslic3r/PrintConfig.cpp:1126 src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1146 src/libslic3r/PrintConfig.cpp:1156
+msgid "Ironing"
+msgstr "Alisado"
+
+#: src/libslic3r/PrintConfig.cpp:1131 src/libslic3r/PrintConfig.cpp:1133
+msgid "Ironing Type"
+msgstr "Tipo de alisado"
+
+#: src/slic3r/GUI/GUI_App.cpp:243
+msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community."
+msgstr "está basado en Slic3r de Alessandro Ranellucci y la comunidad RepRap."
+
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:258
+#: src/slic3r/GUI/AboutDialog.cpp:283 src/slic3r/GUI/GUI_App.cpp:244
 msgid "is licensed under the"
 msgstr "está licenciado bajo el/los"
 
-#: src/slic3r/GUI/Tab.cpp:2941
-msgid "is not compatible with print profile"
-msgstr "no es compatible con el perfil de impresión"
-
-#: src/slic3r/GUI/Tab.cpp:2940
-msgid "is not compatible with printer"
-msgstr "no es compatible con esta impresora"
-
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso"
 msgstr "Iso"
 
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso View"
 msgstr "Vista Iso"
 
-#: src/slic3r/GUI/Tab.cpp:964
+#: src/slic3r/GUI/Tab.cpp:1282
 msgid "It can't be deleted or modified."
 msgstr "No puede ser borrado o modificado."
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "It is not allowed to change the file to reload"
 msgstr "No está permitido cambiar el archivo a recargar"
 
-#: src/libslic3r/PrintConfig.cpp:974
+#: src/libslic3r/PrintConfig.cpp:1018
 msgid "It may be beneficial to increase the extruder motor current during the filament exchange sequence to allow for rapid ramming feed rates and to overcome resistance when loading a filament with an ugly shaped tip."
 msgstr "Puede ser beneficioso aumentar la corriente del motor del extrusor durante la secuencia de intercambio de filamentos para permitir velocidades de alimentación de rampa rápidas y superar la resistencia cuando se carga un filamento con una punta de forma fea."
 
-#: src/slic3r/GUI/GUI_App.cpp:1084 src/slic3r/GUI/Tab.cpp:2958
+#: src/slic3r/GUI/Tab.cpp:3413
+msgid "It's a last preset for this physical printer."
+msgstr "Es un último valor predeterminado para esta impresora."
+
+#: src/slic3r/GUI/GUI_App.cpp:1876 src/slic3r/GUI/Tab.cpp:3187
 msgid "It's impossible to print multi-part object(s) with SLA technology."
 msgstr "Es imposible imprimir objetos de varias piezas con tecnología SLA."
 
-#: src/slic3r/GUI/Tab.cpp:2229
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:601
+msgid "It's not possible to delete the last related preset for the printer."
+msgstr "No es posible borrar el último ajuste preestablecido relacionado con la impresora."
+
+#: src/slic3r/GUI/Tab.cpp:2398
 msgid "Jerk limits"
 msgstr "Límites del jerk"
 
-#: src/libslic3r/PrintConfig.cpp:1649
+#: src/libslic3r/PrintConfig.cpp:1757
 msgid "Jitter"
 msgstr "Jitter"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:957 src/slic3r/GUI/DoubleSlider.cpp:1529
-#: src/slic3r/GUI/DoubleSlider.cpp:1651
+#: src/slic3r/GUI/DoubleSlider.cpp:1077 src/slic3r/GUI/DoubleSlider.cpp:1721
+#: src/slic3r/GUI/DoubleSlider.cpp:1852 src/slic3r/GUI/DoubleSlider.cpp:1856
 msgid "Jump to height"
 msgstr "Salta a la altura"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:955
+#: src/slic3r/GUI/DoubleSlider.cpp:1075
 #, c-format
 msgid "Jump to height %s or Set extruder sequence for the entire print"
 msgstr "Salta a la altura %s o Fija la secuencia del extrusor para toda la impresión"
 
-#: src/libslic3r/PrintConfig.cpp:566
+#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
+msgid "Jump to move"
+msgstr "Saltar al movimiento"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:315
+msgid "Just switch to \"%1%\" preset"
+msgstr "Simplemente cambiar al ajuste predeterminado \"%1%\""
+
+#: src/libslic3r/PrintConfig.cpp:602
 msgid "Keep fan always on"
 msgstr "Mantener el ventilador siempre encendido"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:169
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171
 msgid "Keep lower part"
 msgstr "Mantener la parte inferior"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:304
+#: src/slic3r/GUI/GLCanvas3D.cpp:290
 msgid "Keep min"
 msgstr "Mantener mínimo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:168
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
 msgid "Keep upper part"
 msgstr "Mantener la parte superior"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:37
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:39 src/slic3r/GUI/MainFrame.cpp:941
+#: src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Keyboard Shortcuts"
 msgstr "Atajos de teclado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:245
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:259
 msgid "Keyboard shortcuts"
 msgstr "Atajos de teclado"
 
-#: src/libslic3r/PrintConfig.cpp:2498
+#: src/libslic3r/PrintConfig.cpp:2641
 msgid "kg"
 msgstr "kg"
 
-#: src/libslic3r/PrintConfig.cpp:965
+#: src/libslic3r/PrintConfig.cpp:1009
 msgid "Label objects"
 msgstr "Etiquetar objetos"
 
-#: src/libslic3r/PrintConfig.cpp:2399
+#: src/libslic3r/PrintConfig.cpp:2542
 msgid "Landscape"
 msgstr "Paisaje"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Language"
 msgstr "Idioma"
 
-#: src/slic3r/GUI/GUI_App.cpp:885
+#: src/slic3r/GUI/GUI_App.cpp:1605 src/slic3r/GUI/GUI_App.cpp:1614
 msgid "Language selection"
 msgstr "Selección de idiomas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2140
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2242
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2307
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2408
 msgid "Last instance of an object cannot be deleted."
 msgstr "La última instancia de un objeto no puede ser eliminada."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
 msgid "Layer"
 msgstr "Capa"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:49
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1049
+#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 src/slic3r/GUI/Tab.cpp:1371
 #: src/libslic3r/PrintConfig.cpp:71
 msgid "Layer height"
 msgstr "Altura de la capa"
 
-#: src/libslic3r/Print.cpp:1427
+#: src/libslic3r/Print.cpp:1453
 msgid "Layer height can't be greater than nozzle diameter"
 msgstr "La altura de la capa no puede ser mayor que diámetro de la boquilla"
 
-#: src/slic3r/GUI/Tab.cpp:2362
+#: src/slic3r/GUI/Tab.cpp:2531
 msgid "Layer height limits"
 msgstr "Límites de altura de la capa"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
-msgid "Layer height:"
-msgstr "Altura de la capa:"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2488
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2880
 msgid "Layer range Settings to modify"
 msgstr "Ajustes del Rango de capas a modificar"
 
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52
-#: src/libslic3r/PrintConfig.cpp:362 src/libslic3r/PrintConfig.cpp:994
-#: src/libslic3r/PrintConfig.cpp:1505 src/libslic3r/PrintConfig.cpp:1690
-#: src/libslic3r/PrintConfig.cpp:1750 src/libslic3r/PrintConfig.cpp:1930
-#: src/libslic3r/PrintConfig.cpp:1976
+#: src/libslic3r/PrintConfig.cpp:396 src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1613 src/libslic3r/PrintConfig.cpp:1798
+#: src/libslic3r/PrintConfig.cpp:1865 src/libslic3r/PrintConfig.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:2118
 msgid "layers"
 msgstr "capas"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:67 src/slic3r/GUI/Tab.cpp:3512
-#: src/slic3r/GUI/Tab.cpp:3600
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3928
+#: src/slic3r/GUI/Tab.cpp:4010
 msgid "Layers"
 msgstr "Capas"
 
-#: src/slic3r/GUI/Tab.cpp:1048 src/slic3r/GUI/Tab.cpp:3598
+#: src/slic3r/GUI/Tab.cpp:1370 src/slic3r/GUI/Tab.cpp:4008
 msgid "Layers and perimeters"
 msgstr "Capas y perímetros"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:95
-#: src/slic3r/GUI/GUI_ObjectList.cpp:613 src/libslic3r/PrintConfig.cpp:72
-#: src/libslic3r/PrintConfig.cpp:175 src/libslic3r/PrintConfig.cpp:184
-#: src/libslic3r/PrintConfig.cpp:408 src/libslic3r/PrintConfig.cpp:470
-#: src/libslic3r/PrintConfig.cpp:478 src/libslic3r/PrintConfig.cpp:890
-#: src/libslic3r/PrintConfig.cpp:1075 src/libslic3r/PrintConfig.cpp:1374
-#: src/libslic3r/PrintConfig.cpp:1441 src/libslic3r/PrintConfig.cpp:1622
-#: src/libslic3r/PrintConfig.cpp:2074 src/libslic3r/PrintConfig.cpp:2133
-#: src/libslic3r/PrintConfig.cpp:2142
+#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:92
+#: src/slic3r/GUI/GUI_ObjectList.cpp:651 src/libslic3r/PrintConfig.cpp:72
+#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:218
+#: src/libslic3r/PrintConfig.cpp:442 src/libslic3r/PrintConfig.cpp:506
+#: src/libslic3r/PrintConfig.cpp:514 src/libslic3r/PrintConfig.cpp:932
+#: src/libslic3r/PrintConfig.cpp:1119 src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1549 src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:2217 src/libslic3r/PrintConfig.cpp:2276
+#: src/libslic3r/PrintConfig.cpp:2285
 msgid "Layers and Perimeters"
 msgstr "Capas y Perímetros"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
 msgid "Layers Slider"
 msgstr "Deslizador de Capas"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Bottom"
 msgstr "Inferior"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Top"
 msgstr "Superior"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/Preferences.cpp:440
+msgid "Layout Options"
+msgstr "Opciones de diseño"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:48
+msgid "Leaving Paint-on supports"
+msgstr "Saliendo del Pintado de soportes"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:47
+msgid "Leaving Seam painting"
+msgstr "Saliendo del Pintado de costuras"
+
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left"
 msgstr "Izquierda"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Left click"
 msgstr "Clic izquierdo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:237
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:29
+msgid "Left mouse button"
+msgstr "Botón izquierdo del ratón"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:233
 msgid "Left mouse button:"
 msgstr "Botón izquierdo del ratón:"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left View"
 msgstr "Vista izquierda"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:257
+#: src/slic3r/GUI/GUI_Preview.cpp:339
 msgid "Legend"
 msgstr "Leyenda"
 
-#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1551
+#: src/slic3r/GUI/GUI_Preview.cpp:1480
+msgid "Legend/Estimated printing time"
+msgstr "Leyenda/Tiempo de impresión estimado"
+
+#: src/libslic3r/PrintConfig.cpp:1651 src/libslic3r/PrintConfig.cpp:1659
 msgid "Length"
 msgstr "Largo"
 
-#: src/libslic3r/PrintConfig.cpp:328
+#: src/libslic3r/PrintConfig.cpp:362
 msgid "Length of the cooling tube to limit space for cooling moves inside it."
 msgstr "Longitud del tubo de enfriado para limitar el espacio para movimientos de enfriamiento dentro del mismo."
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:129
+#: src/slic3r/GUI/AboutDialog.cpp:141
 msgid "License agreements of all following programs (libraries) are part of application license agreement"
 msgstr "Los acuerdos de licencia de todos los programas (bibliotecas) siguientes forman parte del acuerdo de licencia de la aplicación"
 
-#: src/libslic3r/PrintConfig.cpp:1561
+#: src/libslic3r/PrintConfig.cpp:1669
 msgid "Lift Z"
 msgstr "Levantar Z"
 
-#: src/libslic3r/PrintConfig.cpp:848
+#: src/libslic3r/PrintConfig.cpp:886
 msgid "Line"
 msgstr "Lineal"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1427
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1558
 msgid "Load"
 msgstr "Cargar"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Load a model"
 msgstr "Cargar un modelo"
 
-#: src/libslic3r/PrintConfig.cpp:3505
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Load an model saved with imperial units"
+msgstr "Cargar un modelo guardado con unidades imperiales"
+
+#: src/slic3r/GUI/MainFrame.cpp:1058
+msgid "Load an SL1 archive"
+msgstr "Cargar un archivo SL1"
+
+#: src/libslic3r/PrintConfig.cpp:3710
 msgid "Load and store settings at the given directory. This is useful for maintaining different profiles or including configurations from a network storage."
 msgstr "Cargar y almacenar configuraciones en el directorio dado. Esto es útil para mantener diferentes perfiles o incluir configuraciones desde un almacenamiento de red."
 
-#: src/libslic3r/PrintConfig.cpp:3489
+#: src/libslic3r/PrintConfig.cpp:3688
 msgid "Load config file"
 msgstr "Cargar archivo de configuración"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:120
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
 msgid "Load Config from ini/amf/3mf/gcode and merge"
 msgstr "Carga Configuración desde ini/amf/3mf/gcode y mezcla"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Load configuration from project file"
 msgstr "Cargar configuración desde archivo de proyecto"
 
-#: src/libslic3r/PrintConfig.cpp:3490
+#: src/libslic3r/PrintConfig.cpp:3689
 msgid "Load configuration from the specified file. It can be used more than once to load options from multiple files."
 msgstr "Cargar la configuración desde el archivo especificado. Se puede usar más de una vez para cargar opciones de varios archivos."
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Load exported configuration file"
 msgstr "Cargar archivo de configuración exportado"
 
-#: src/slic3r/GUI/Plater.cpp:1395
-msgid "Load File"
-msgstr "Cargar Archivo"
-
-#: src/slic3r/GUI/Plater.cpp:1399
-msgid "Load Files"
-msgstr "Cargar Archivos"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1879
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2038
 msgid "Load Part"
 msgstr "Cargar pieza"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Load presets from a bundle"
 msgstr "Cargar preajustes de un paquete"
 
-#: src/slic3r/GUI/Plater.cpp:4575
+#: src/slic3r/GUI/Plater.cpp:4627
 msgid "Load Project"
 msgstr "Cargar Proyecto"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:102
+#: src/slic3r/GUI/BedShapeDialog.cpp:243
 msgid "Load shape from STL..."
 msgstr "Cargar forma desde STL..."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:182 src/slic3r/GUI/BedShapeDialog.cpp:261
+#: src/slic3r/GUI/BedShapeDialog.cpp:325 src/slic3r/GUI/BedShapeDialog.cpp:405
 msgid "Load..."
 msgstr "Cargar..."
 
@@ -4071,19 +4713,27 @@ msgstr "Cargar..."
 msgid "loaded"
 msgstr "cargado"
 
-#: src/slic3r/GUI/Plater.cpp:2426
+#: src/slic3r/GUI/Plater.cpp:2388
 msgid "Loaded"
 msgstr "Cargado"
 
-#: src/slic3r/GUI/Plater.cpp:2273
+#: src/slic3r/GUI/Plater.cpp:2216
 msgid "Loading"
 msgstr "Carga"
 
-#: src/slic3r/GUI/GUI_App.cpp:474
+#: src/slic3r/GUI/GUI_App.cpp:797
+msgid "Loading configuration"
+msgstr "Cargando configuración"
+
+#: src/slic3r/GUI/Plater.cpp:2226
+msgid "Loading file"
+msgstr "Cargando archivo"
+
+#: src/slic3r/GUI/GUI_App.cpp:1125
 msgid "Loading of a mode view"
 msgstr "Carga de modo de vista"
 
-#: src/slic3r/GUI/GUI_App.cpp:466
+#: src/slic3r/GUI/GUI_App.cpp:1120
 msgid "Loading of current presets"
 msgstr "Cargando los preajustes actuales"
 
@@ -4092,101 +4742,117 @@ msgstr "Cargando los preajustes actuales"
 msgid "Loading repaired model"
 msgstr "Cargando modelo reparado"
 
-#: src/libslic3r/PrintConfig.cpp:607
+#: src/libslic3r/PrintConfig.cpp:643
 msgid "Loading speed"
 msgstr "Velocidad de carga"
 
-#: src/libslic3r/PrintConfig.cpp:615
+#: src/libslic3r/PrintConfig.cpp:651
 msgid "Loading speed at the start"
 msgstr "Velocidad de carga al inicio"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:63
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:106
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:69
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:112
 msgid "Local coordinates"
 msgstr "Coordenadas locales"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
 msgid "Lock supports under new islands"
 msgstr "Bloquear soportes bajo nuevas islas"
 
-#: src/slic3r/GUI/Tab.cpp:3252
+#: src/slic3r/GUI/Tab.cpp:3689
 msgid "LOCKED LOCK"
 msgstr "CANDADO CERRADO"
 
-#: src/slic3r/GUI/Tab.cpp:3280
+#: src/slic3r/GUI/Tab.cpp:3717
 msgid "LOCKED LOCK icon indicates that the settings are the same as the system (or default) values for the current option group"
 msgstr "El icono de CANDADO BLOQUEADO  indica que los ajustes son los mismos que los valores del sistema (por defecto)  para el grupo de opciones actual"
 
-#: src/slic3r/GUI/Tab.cpp:3296
+#: src/slic3r/GUI/Tab.cpp:3733
 msgid "LOCKED LOCK icon indicates that the value is the same as the system (or default) value."
 msgstr "El icono de CANDADO BLOQUEADO indica que el valor es el mismo que el del sistema (por defecto)"
 
-#: src/libslic3r/PrintConfig.cpp:3508
+#: src/libslic3r/PrintConfig.cpp:3713
 msgid "Logging level"
 msgstr "Nivel de registro"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1810
 msgid "Loops (minimum)"
 msgstr "Bucles (mínimo)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
 msgid "Lower Layer"
 msgstr "Capa inferior"
 
-#: src/slic3r/GUI/Tab.cpp:2188 src/slic3r/GUI/Tab.cpp:2273
-#: src/libslic3r/PrintConfig.cpp:1129 src/libslic3r/PrintConfig.cpp:1146
-#: src/libslic3r/PrintConfig.cpp:1163 src/libslic3r/PrintConfig.cpp:1179
-#: src/libslic3r/PrintConfig.cpp:1189 src/libslic3r/PrintConfig.cpp:1199
-#: src/libslic3r/PrintConfig.cpp:1209
+#: src/slic3r/GUI/Tab.cpp:2346 src/slic3r/GUI/Tab.cpp:2442
+#: src/libslic3r/PrintConfig.cpp:1202 src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1254 src/libslic3r/PrintConfig.cpp:1271
+#: src/libslic3r/PrintConfig.cpp:1287 src/libslic3r/PrintConfig.cpp:1297
+#: src/libslic3r/PrintConfig.cpp:1307 src/libslic3r/PrintConfig.cpp:1317
 msgid "Machine limits"
 msgstr "Límites de la máquina"
 
-#: src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:3667
+msgid "Machine limits are not set, therefore the print time estimate may not be accurate."
+msgstr "Los límites de la máquina no están establecidos, por lo tanto, el tiempo estimado de impresión puede no ser exacto."
+
+#: src/slic3r/GUI/Tab.cpp:3660
+msgid "Machine limits will be emitted to G-code and used to estimate print time."
+msgstr "Los límites de la máquina se emitirán al código G y se utilizarán para calcular el tiempo de impresión."
+
+#: src/slic3r/GUI/Tab.cpp:3663
+msgid "Machine limits will NOT be emitted to G-code, however they will be used to estimate print time, which may therefore not be accurate as the printer may apply a different set of machine limits."
+msgstr "Los límites máquina NO se emitirán al código G, sin embargo, se utilizarán para estimar el tiempo de impresión, que por lo tanto puede no ser exacto ya que la impresora puede aplicar un conjunto diferente de límites de la máquina."
+
+#: src/slic3r/GUI/Plater.cpp:172
 msgid "Manifold"
 msgstr "Manifold"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
 msgid "Manual editing"
 msgstr "Edición manual"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:180
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:214
 msgid "Masked SLA file exported to %1%"
 msgstr "Archivo SLA enmascarado exportado a %1%"
 
-#: src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1451
 msgid "Mate&rial Settings Tab"
 msgstr "Pestaña Ajustes de Mate&rial"
 
-#: src/slic3r/GUI/Tab.cpp:3478 src/slic3r/GUI/Tab.cpp:3480
+#: src/slic3r/GUI/Tab.cpp:3894 src/slic3r/GUI/Tab.cpp:3896
 msgid "Material"
 msgstr "Material"
 
-#: src/slic3r/GUI/Tab.hpp:416
+#: src/slic3r/GUI/Tab.hpp:486
 msgid "Material Settings"
 msgstr "Configuraciones del material"
 
-#: src/slic3r/GUI/Plater.cpp:163
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Material Settings Tab"
+msgstr "Pestaña Ajustes de Material"
+
+#: src/slic3r/GUI/Plater.cpp:169
 msgid "Materials"
 msgstr "Materiales"
 
-#: src/libslic3r/PrintConfig.cpp:1217 src/libslic3r/PrintConfig.cpp:1226
+#: src/libslic3r/PrintConfig.cpp:1325 src/libslic3r/PrintConfig.cpp:1334
 msgid "Max"
 msgstr "Max"
 
-#: src/libslic3r/PrintConfig.cpp:2734
+#: src/libslic3r/PrintConfig.cpp:2898
 msgid "Max bridge length"
 msgstr "Distancia máxima de puentes"
 
-#: src/libslic3r/PrintConfig.cpp:2658
+#: src/libslic3r/PrintConfig.cpp:2812
 msgid "Max bridges on a pillar"
 msgstr "Puentes maximos en un pilar"
 
-#: src/libslic3r/PrintConfig.cpp:2822
+#: src/libslic3r/PrintConfig.cpp:2986
 msgid "Max merge distance"
 msgstr "Distancia máxima de combinación"
 
-#: src/libslic3r/PrintConfig.cpp:2743
+#: src/libslic3r/PrintConfig.cpp:2907
 msgid "Max pillar linking distance"
 msgstr "Distancia máxima de enlace del pilar"
 
@@ -4194,7 +4860,7 @@ msgstr "Distancia máxima de enlace del pilar"
 msgid "Max print height"
 msgstr "Máxima altura de impresión"
 
-#: src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1345
 msgid "Max print speed"
 msgstr "Velocidad máxima de impresión"
 
@@ -4202,171 +4868,189 @@ msgstr "Velocidad máxima de impresión"
 msgid "max PrusaSlicer version"
 msgstr "máxima versión PrusaSlicer"
 
-#: src/libslic3r/PrintConfig.cpp:1268
+#: src/libslic3r/PrintConfig.cpp:1376
 msgid "Max volumetric slope negative"
 msgstr "Máx. Pendiente volumétrica negativa"
 
-#: src/libslic3r/PrintConfig.cpp:1257
+#: src/libslic3r/PrintConfig.cpp:1365
 msgid "Max volumetric slope positive"
 msgstr "Máx. Pendiente volumétrica positiva"
 
-#: src/libslic3r/PrintConfig.cpp:597 src/libslic3r/PrintConfig.cpp:1247
+#: src/libslic3r/PrintConfig.cpp:633 src/libslic3r/PrintConfig.cpp:1355
 msgid "Max volumetric speed"
 msgstr "Velocidad volumétrica máxima"
 
-#: src/libslic3r/PrintConfig.cpp:2268
+#: src/libslic3r/PrintConfig.cpp:2411
 msgid "Maximal bridging distance"
 msgstr "Distancia máxima de puentes"
 
-#: src/libslic3r/PrintConfig.cpp:2269
+#: src/libslic3r/PrintConfig.cpp:2412
 msgid "Maximal distance between supports on sparse infill sections."
 msgstr "Distancia máxima entre soportes en las secciones con relleno ligero."
 
-#: src/libslic3r/PrintConfig.cpp:1145
+#: src/libslic3r/PrintConfig.cpp:1253
 msgid "Maximum acceleration E"
 msgstr "Máxima aceleración E"
 
-#: src/libslic3r/PrintConfig.cpp:1151
+#: src/libslic3r/PrintConfig.cpp:1259
 msgid "Maximum acceleration of the E axis"
 msgstr "Máxima aceleración en el eje E"
 
-#: src/libslic3r/PrintConfig.cpp:1148
+#: src/libslic3r/PrintConfig.cpp:1256
 msgid "Maximum acceleration of the X axis"
 msgstr "Máxima aceleración en el eje X"
 
-#: src/libslic3r/PrintConfig.cpp:1149
+#: src/libslic3r/PrintConfig.cpp:1257
 msgid "Maximum acceleration of the Y axis"
 msgstr "Máxima aceleración en el eje Y"
 
-#: src/libslic3r/PrintConfig.cpp:1150
+#: src/libslic3r/PrintConfig.cpp:1258
 msgid "Maximum acceleration of the Z axis"
 msgstr "Máxima aceleración en el eje Z"
 
-#: src/libslic3r/PrintConfig.cpp:1198
+#: src/libslic3r/PrintConfig.cpp:1306
 msgid "Maximum acceleration when extruding"
 msgstr "Aceleración máxima al extruir"
 
-#: src/libslic3r/PrintConfig.cpp:1200
+#: src/libslic3r/PrintConfig.cpp:1308
 msgid "Maximum acceleration when extruding (M204 S)"
 msgstr "Aceleración máxima con extrusión (M204 S)"
 
-#: src/libslic3r/PrintConfig.cpp:1208
+#: src/libslic3r/PrintConfig.cpp:1316
 msgid "Maximum acceleration when retracting"
 msgstr "Aceleración máxima al retraer"
 
-#: src/libslic3r/PrintConfig.cpp:1210
+#: src/libslic3r/PrintConfig.cpp:1318
 msgid "Maximum acceleration when retracting (M204 T)"
 msgstr "Aceleración máxima al retraer (M204 T)"
 
-#: src/libslic3r/PrintConfig.cpp:1142
+#: src/libslic3r/PrintConfig.cpp:1250
 msgid "Maximum acceleration X"
 msgstr "Máxima aceleración X"
 
-#: src/libslic3r/PrintConfig.cpp:1143
+#: src/libslic3r/PrintConfig.cpp:1251
 msgid "Maximum acceleration Y"
 msgstr "Máxima aceleración Y"
 
-#: src/libslic3r/PrintConfig.cpp:1144
+#: src/libslic3r/PrintConfig.cpp:1252
 msgid "Maximum acceleration Z"
 msgstr "Máxima aceleración Z"
 
-#: src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2391
 msgid "Maximum accelerations"
 msgstr "Aceleraciones máximas"
 
-#: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2534
+#: src/libslic3r/PrintConfig.cpp:2676 src/libslic3r/PrintConfig.cpp:2677
 msgid "Maximum exposure time"
 msgstr "Tiempo de exposición máximo"
 
-#: src/libslic3r/PrintConfig.cpp:1128
+#: src/libslic3r/PrintConfig.cpp:1236
 msgid "Maximum feedrate E"
 msgstr "Máximo avance E"
 
-#: src/libslic3r/PrintConfig.cpp:1134
+#: src/libslic3r/PrintConfig.cpp:1242
 msgid "Maximum feedrate of the E axis"
 msgstr "Máximo avance del eje E"
 
-#: src/libslic3r/PrintConfig.cpp:1131
+#: src/libslic3r/PrintConfig.cpp:1239
 msgid "Maximum feedrate of the X axis"
 msgstr "Máximo avance en el eje X"
 
-#: src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1240
 msgid "Maximum feedrate of the Y axis"
 msgstr "Máximo avance del eje Y"
 
-#: src/libslic3r/PrintConfig.cpp:1133
+#: src/libslic3r/PrintConfig.cpp:1241
 msgid "Maximum feedrate of the Z axis"
 msgstr "Máximo avance del eje Z"
 
-#: src/libslic3r/PrintConfig.cpp:1125
+#: src/libslic3r/PrintConfig.cpp:1233
 msgid "Maximum feedrate X"
 msgstr "Máxima velocidad en X"
 
-#: src/libslic3r/PrintConfig.cpp:1126
+#: src/libslic3r/PrintConfig.cpp:1234
 msgid "Maximum feedrate Y"
 msgstr "Máxima velocidad en Y"
 
-#: src/libslic3r/PrintConfig.cpp:1127
+#: src/libslic3r/PrintConfig.cpp:1235
 msgid "Maximum feedrate Z"
 msgstr "Máximo avance en Z"
 
-#: src/slic3r/GUI/Tab.cpp:2217
+#: src/slic3r/GUI/Tab.cpp:2386
 msgid "Maximum feedrates"
 msgstr "Avance máximo"
 
-#: src/libslic3r/PrintConfig.cpp:2556 src/libslic3r/PrintConfig.cpp:2557
+#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2700
 msgid "Maximum initial exposure time"
 msgstr "Tiempo de exposición inicial máximo"
 
-#: src/libslic3r/PrintConfig.cpp:1162
+#: src/libslic3r/PrintConfig.cpp:1270
 msgid "Maximum jerk E"
 msgstr "Máximo jerk E"
 
-#: src/libslic3r/PrintConfig.cpp:1168
+#: src/libslic3r/PrintConfig.cpp:1276
 msgid "Maximum jerk of the E axis"
 msgstr "Maximo jerk del eje E"
 
-#: src/libslic3r/PrintConfig.cpp:1165
+#: src/libslic3r/PrintConfig.cpp:1273
 msgid "Maximum jerk of the X axis"
 msgstr "Maximo jerk del eje Y"
 
-#: src/libslic3r/PrintConfig.cpp:1166
+#: src/libslic3r/PrintConfig.cpp:1274
 msgid "Maximum jerk of the Y axis"
 msgstr "Maximo jerk del eje Y"
 
-#: src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1275
 msgid "Maximum jerk of the Z axis"
 msgstr "Maximo jerk del eje Z"
 
-#: src/libslic3r/PrintConfig.cpp:1159
+#: src/libslic3r/PrintConfig.cpp:1267
 msgid "Maximum jerk X"
 msgstr "Máximo jerk X"
 
-#: src/libslic3r/PrintConfig.cpp:1160
+#: src/libslic3r/PrintConfig.cpp:1268
 msgid "Maximum jerk Y"
 msgstr "Máximo jerk Y"
 
-#: src/libslic3r/PrintConfig.cpp:1161
+#: src/libslic3r/PrintConfig.cpp:1269
 msgid "Maximum jerk Z"
 msgstr "Máximo jerk Z"
 
-#: src/libslic3r/PrintConfig.cpp:2660
+#: src/libslic3r/PrintConfig.cpp:2814
 msgid "Maximum number of bridges that can be placed on a pillar. Bridges hold support point pinheads and connect to pillars as small branches."
 msgstr "Número máximo de puentes que se pueden colocar en un pilar. Los puentes sostienen cabezas de alfiler de puntos de apoyo y se conectan a los pilares como pequeñas ramas."
 
-#: src/libslic3r/PrintConfig.cpp:598
+#: src/libslic3r/PrintConfig.cpp:634
 msgid "Maximum volumetric speed allowed for this filament. Limits the maximum volumetric speed of a print to the minimum of print and filament volumetric speed. Set to zero for no limit."
 msgstr "Velocidad volumétrica máxima permitida para este filamento. Limita la velocidad volumétrica máxima de una impresión al mínimo de velocidad volumétrica de impresión y filamento. Establecer en cero para usar sin límite."
 
-#: src/libslic3r/PrintConfig.cpp:3442
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2569 src/libslic3r/PrintConfig.cpp:3641
 msgid "Merge"
 msgstr "Combinar"
 
-#: src/libslic3r/PrintConfig.cpp:2683
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2660
+msgid "Merge all parts to the one single object"
+msgstr "Juntar todas las piezas en un único objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+msgid "Merge objects to the one multipart object"
+msgstr "Juntar objeto en un objeto multipieza"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+msgid "Merge objects to the one single object"
+msgstr "Juntar objetos en uno solo objeto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2576
+msgid "Merged"
+msgstr "Juntar"
+
+#: src/libslic3r/PrintConfig.cpp:2847
 msgid "Merging bridges or pillars into another pillars can increase the radius. Zero means no increase, one means full increase."
 msgstr "La fusión de puentes o pilares en otros pilares puede aumentar el radio. Cero significa que no hay aumento, uno significa aumento total."
 
-#: src/libslic3r/SLAPrintSteps.cpp:64
+#: src/libslic3r/SLAPrintSteps.cpp:65
 msgid "Merging slices and calculating statistics"
 msgstr "Mezclando rebanadas y calculando estadísticas"
 
@@ -4374,15 +5058,15 @@ msgstr "Mezclando rebanadas y calculando estadísticas"
 msgid "Mesh repair failed."
 msgstr "Reparación de la malla fallida."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1635
+#: src/slic3r/GUI/DoubleSlider.cpp:1831
 msgid "Message for pause print on current layer (%1% mm)."
 msgstr "Mensaje para pausa de impresión en la capa actual (%1% mm)."
 
-#: src/libslic3r/PrintConfig.cpp:1280 src/libslic3r/PrintConfig.cpp:1289
+#: src/libslic3r/PrintConfig.cpp:1388 src/libslic3r/PrintConfig.cpp:1397
 msgid "Min"
 msgstr "Min"
 
-#: src/libslic3r/PrintConfig.cpp:1298
+#: src/libslic3r/PrintConfig.cpp:1406
 msgid "Min print speed"
 msgstr "Velocidad de impresión mínima"
 
@@ -4390,232 +5074,237 @@ msgstr "Velocidad de impresión mínima"
 msgid "min PrusaSlicer version"
 msgstr "mínima versión PrusaSlicer"
 
-#: src/libslic3r/PrintConfig.cpp:2772
+#: src/libslic3r/PrintConfig.cpp:2936
 msgid "Minimal distance of the support points"
 msgstr "Distancia mínima de los puntos de apoyo"
 
-#: src/libslic3r/PrintConfig.cpp:1306
+#: src/libslic3r/PrintConfig.cpp:1414
 msgid "Minimal filament extrusion length"
 msgstr "Longitud mínima de filamento extruido"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
 msgid "Minimal points distance"
 msgstr "Distancia mínima de puntos"
 
-#: src/libslic3r/PrintConfig.cpp:667
+#: src/libslic3r/PrintConfig.cpp:703
 msgid "Minimal purge on wipe tower"
 msgstr "Purga mínima en la torre de limpieza"
 
-#: src/libslic3r/PrintConfig.cpp:187
+#: src/libslic3r/PrintConfig.cpp:221
 msgid "Minimum bottom shell thickness"
 msgstr "Espesor mínimo de la tapa inferior"
 
-#: src/slic3r/GUI/PresetHints.cpp:339
+#: src/slic3r/GUI/PresetHints.cpp:337
 msgid "Minimum bottom shell thickness is %1% mm."
 msgstr "El espesor mínimo de la carcasa inferior es %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1512
+#: src/libslic3r/PrintConfig.cpp:1620
 msgid "Minimum detail resolution, used to simplify the input file for speeding up the slicing job and reducing memory usage. High-resolution models often carry more detail than printers can render. Set to zero to disable any simplification and use full resolution from input."
 msgstr "Resolución mínima de detalles, utilizada para simplificar el archivo de entrada para acelerar el trabajo de laminado y reducir el uso de memoria. Los modelos de alta resolución suelen llevar más detalles de los que las impresoras pueden ofrecer. Establézcalo en cero para desactivar cualquier simplificación y usar la resolución completa de la entrada."
 
-#: src/libslic3r/PrintConfig.cpp:2525 src/libslic3r/PrintConfig.cpp:2526
+#: src/libslic3r/PrintConfig.cpp:2668 src/libslic3r/PrintConfig.cpp:2669
 msgid "Minimum exposure time"
 msgstr "Tiempo de exposición mínimo"
 
-#: src/libslic3r/PrintConfig.cpp:1178
+#: src/libslic3r/PrintConfig.cpp:1286
 msgid "Minimum feedrate when extruding"
 msgstr "Avance mínimo al extruir"
 
-#: src/libslic3r/PrintConfig.cpp:1180
+#: src/libslic3r/PrintConfig.cpp:1288
 msgid "Minimum feedrate when extruding (M205 S)"
 msgstr "Avance mínimo al extruir (M205 S)"
 
-#: src/slic3r/GUI/Tab.cpp:2234
+#: src/slic3r/GUI/Tab.cpp:2403
 msgid "Minimum feedrates"
 msgstr "Avances míninos"
 
-#: src/libslic3r/PrintConfig.cpp:2548 src/libslic3r/PrintConfig.cpp:2549
+#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2692
 msgid "Minimum initial exposure time"
 msgstr "Tiempo de exposición inicial mínimo"
 
-#: src/slic3r/GUI/Tab.cpp:1069
+#: src/slic3r/GUI/Tab.cpp:1391
 msgid "Minimum shell thickness"
 msgstr "Espesor mínimo de pared"
 
-#: src/libslic3r/PrintConfig.cpp:1787 src/libslic3r/PrintConfig.cpp:1788
+#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1903
 msgid "Minimum thickness of a top / bottom shell"
 msgstr "Espesor mínimo de una carcasa superior / inferior"
 
-#: src/libslic3r/PrintConfig.cpp:2146
+#: src/libslic3r/PrintConfig.cpp:2289
 msgid "Minimum top shell thickness"
 msgstr "Espesor mínimo de la carcasa superior"
 
-#: src/slic3r/GUI/PresetHints.cpp:320
+#: src/slic3r/GUI/PresetHints.cpp:318
 msgid "Minimum top shell thickness is %1% mm."
 msgstr "El espesor mínimo de la carcasa superior es %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1522
+#: src/libslic3r/PrintConfig.cpp:1630
 msgid "Minimum travel after retraction"
 msgstr "Distancia mínima después de la retracción"
 
-#: src/libslic3r/PrintConfig.cpp:1188
+#: src/libslic3r/PrintConfig.cpp:1296
 msgid "Minimum travel feedrate"
 msgstr "Avance mínimo de movimiento"
 
-#: src/libslic3r/PrintConfig.cpp:1190
+#: src/libslic3r/PrintConfig.cpp:1298
 msgid "Minimum travel feedrate (M205 T)"
 msgstr "Velocidad mínima sin extrusión (M205 T)"
 
-#: src/libslic3r/PrintConfig.cpp:2917
+#: src/libslic3r/PrintConfig.cpp:3081
 msgid "Minimum wall thickness of a hollowed model."
 msgstr "Mínimo de espesor de la pared de un modelo vaciado."
 
-#: src/libslic3r/PrintConfig.cpp:2449
+#: src/libslic3r/PrintConfig.cpp:2592
 msgid "Minimum width of features to maintain when doing elephant foot compensation."
 msgstr "Ancho mínimo característico para mantener al realizar la compensación de pie de elefante."
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror"
 msgstr "Reflejar"
 
-#: src/libslic3r/PrintConfig.cpp:2379
+#: src/libslic3r/PrintConfig.cpp:2522
 msgid "Mirror horizontally"
 msgstr "Reflejar horizontalmente"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2053
+#: src/slic3r/GUI/GLCanvas3D.cpp:2226
 msgid "Mirror Object"
 msgstr "Reflejar objeto"
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror the selected object"
 msgstr "Duplicar el objeto seleccionado"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Mirror the selected object along the X axis"
 msgstr "Duplicar el objeto seleccionado a lo largo del eje X"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Mirror the selected object along the Y axis"
 msgstr "Duplicar el objeto seleccionado a lo largo del eje Y"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Mirror the selected object along the Z axis"
 msgstr "Duplicar el objeto seleccionado a lo largo del eje Z"
 
-#: src/libslic3r/PrintConfig.cpp:2386
+#: src/libslic3r/PrintConfig.cpp:2529
 msgid "Mirror vertically"
 msgstr "Reflejar verticalmente"
 
-#: src/slic3r/Utils/AstroBox.cpp:68 src/slic3r/Utils/OctoPrint.cpp:68
+#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:68
 #, c-format
 msgid "Mismatched type of print host: %s"
 msgstr "Tipo de host de impresión no coincidente: %s"
 
-#: src/libslic3r/ExtrusionEntity.cpp:323
+#: src/libslic3r/ExtrusionEntity.cpp:328 src/libslic3r/ExtrusionEntity.cpp:364
 msgid "Mixed"
 msgstr "Mezclado"
 
-#: src/libslic3r/PrintConfig.cpp:2491
+#: src/libslic3r/PrintConfig.cpp:2634
 msgid "ml"
 msgstr "ml"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:92 src/slic3r/GUI/ConfigWizard.cpp:218
-#: src/slic3r/GUI/ConfigWizard.cpp:970 src/slic3r/GUI/ConfigWizard.cpp:984
+#: src/slic3r/GUI/BedShapeDialog.cpp:129 src/slic3r/GUI/ConfigWizard.cpp:236
+#: src/slic3r/GUI/ConfigWizard.cpp:1336 src/slic3r/GUI/ConfigWizard.cpp:1350
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:135
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:333
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/GCodeViewer.cpp:2183 src/slic3r/GUI/GCodeViewer.cpp:2189
+#: src/slic3r/GUI/GCodeViewer.cpp:2197 src/slic3r/GUI/GUI_ObjectLayers.cpp:145
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 #: src/slic3r/GUI/WipeTowerDialog.cpp:85 src/libslic3r/PrintConfig.cpp:75
-#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:91
-#: src/libslic3r/PrintConfig.cpp:122 src/libslic3r/PrintConfig.cpp:188
-#: src/libslic3r/PrintConfig.cpp:246 src/libslic3r/PrintConfig.cpp:321
-#: src/libslic3r/PrintConfig.cpp:329 src/libslic3r/PrintConfig.cpp:379
-#: src/libslic3r/PrintConfig.cpp:505 src/libslic3r/PrintConfig.cpp:516
-#: src/libslic3r/PrintConfig.cpp:534 src/libslic3r/PrintConfig.cpp:712
-#: src/libslic3r/PrintConfig.cpp:1231 src/libslic3r/PrintConfig.cpp:1292
-#: src/libslic3r/PrintConfig.cpp:1310 src/libslic3r/PrintConfig.cpp:1328
-#: src/libslic3r/PrintConfig.cpp:1384 src/libslic3r/PrintConfig.cpp:1394
-#: src/libslic3r/PrintConfig.cpp:1516 src/libslic3r/PrintConfig.cpp:1524
-#: src/libslic3r/PrintConfig.cpp:1565 src/libslic3r/PrintConfig.cpp:1573
-#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1591
-#: src/libslic3r/PrintConfig.cpp:1599 src/libslic3r/PrintConfig.cpp:1682
-#: src/libslic3r/PrintConfig.cpp:1914 src/libslic3r/PrintConfig.cpp:1985
-#: src/libslic3r/PrintConfig.cpp:2019 src/libslic3r/PrintConfig.cpp:2147
-#: src/libslic3r/PrintConfig.cpp:2226 src/libslic3r/PrintConfig.cpp:2233
-#: src/libslic3r/PrintConfig.cpp:2240 src/libslic3r/PrintConfig.cpp:2270
-#: src/libslic3r/PrintConfig.cpp:2280 src/libslic3r/PrintConfig.cpp:2290
-#: src/libslic3r/PrintConfig.cpp:2450 src/libslic3r/PrintConfig.cpp:2484
-#: src/libslic3r/PrintConfig.cpp:2623 src/libslic3r/PrintConfig.cpp:2632
-#: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2651
-#: src/libslic3r/PrintConfig.cpp:2695 src/libslic3r/PrintConfig.cpp:2705
-#: src/libslic3r/PrintConfig.cpp:2717 src/libslic3r/PrintConfig.cpp:2737
-#: src/libslic3r/PrintConfig.cpp:2747 src/libslic3r/PrintConfig.cpp:2757
-#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2790
-#: src/libslic3r/PrintConfig.cpp:2804 src/libslic3r/PrintConfig.cpp:2815
-#: src/libslic3r/PrintConfig.cpp:2828 src/libslic3r/PrintConfig.cpp:2873
-#: src/libslic3r/PrintConfig.cpp:2883 src/libslic3r/PrintConfig.cpp:2892
-#: src/libslic3r/PrintConfig.cpp:2902 src/libslic3r/PrintConfig.cpp:2918
-#: src/libslic3r/PrintConfig.cpp:2942
+#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:93
+#: src/libslic3r/PrintConfig.cpp:124 src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:280 src/libslic3r/PrintConfig.cpp:355
+#: src/libslic3r/PrintConfig.cpp:363 src/libslic3r/PrintConfig.cpp:413
+#: src/libslic3r/PrintConfig.cpp:541 src/libslic3r/PrintConfig.cpp:552
+#: src/libslic3r/PrintConfig.cpp:570 src/libslic3r/PrintConfig.cpp:748
+#: src/libslic3r/PrintConfig.cpp:1158 src/libslic3r/PrintConfig.cpp:1339
+#: src/libslic3r/PrintConfig.cpp:1400 src/libslic3r/PrintConfig.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:1436 src/libslic3r/PrintConfig.cpp:1492
+#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1624
+#: src/libslic3r/PrintConfig.cpp:1632 src/libslic3r/PrintConfig.cpp:1673
+#: src/libslic3r/PrintConfig.cpp:1681 src/libslic3r/PrintConfig.cpp:1691
+#: src/libslic3r/PrintConfig.cpp:1699 src/libslic3r/PrintConfig.cpp:1707
+#: src/libslic3r/PrintConfig.cpp:1790 src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2127 src/libslic3r/PrintConfig.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:2290 src/libslic3r/PrintConfig.cpp:2369
+#: src/libslic3r/PrintConfig.cpp:2376 src/libslic3r/PrintConfig.cpp:2383
+#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2433 src/libslic3r/PrintConfig.cpp:2593
+#: src/libslic3r/PrintConfig.cpp:2627 src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2784
+#: src/libslic3r/PrintConfig.cpp:2794 src/libslic3r/PrintConfig.cpp:2859
+#: src/libslic3r/PrintConfig.cpp:2869 src/libslic3r/PrintConfig.cpp:2881
+#: src/libslic3r/PrintConfig.cpp:2901 src/libslic3r/PrintConfig.cpp:2911
+#: src/libslic3r/PrintConfig.cpp:2921 src/libslic3r/PrintConfig.cpp:2939
+#: src/libslic3r/PrintConfig.cpp:2954 src/libslic3r/PrintConfig.cpp:2968
+#: src/libslic3r/PrintConfig.cpp:2979 src/libslic3r/PrintConfig.cpp:2992
+#: src/libslic3r/PrintConfig.cpp:3037 src/libslic3r/PrintConfig.cpp:3047
+#: src/libslic3r/PrintConfig.cpp:3056 src/libslic3r/PrintConfig.cpp:3066
+#: src/libslic3r/PrintConfig.cpp:3082 src/libslic3r/PrintConfig.cpp:3106
 msgid "mm"
 msgstr "mm"
 
-#: src/libslic3r/PrintConfig.cpp:1547 src/libslic3r/PrintConfig.cpp:1556
+#: src/libslic3r/PrintConfig.cpp:1655 src/libslic3r/PrintConfig.cpp:1664
 msgid "mm (zero to disable)"
 msgstr "mm (cero para deshabilitar)"
 
-#: src/libslic3r/PrintConfig.cpp:451 src/libslic3r/PrintConfig.cpp:560
-#: src/libslic3r/PrintConfig.cpp:882 src/libslic3r/PrintConfig.cpp:895
-#: src/libslic3r/PrintConfig.cpp:1015 src/libslic3r/PrintConfig.cpp:1041
-#: src/libslic3r/PrintConfig.cpp:1423 src/libslic3r/PrintConfig.cpp:1761
-#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:1951
-#: src/libslic3r/PrintConfig.cpp:2111
+#: src/libslic3r/PrintConfig.cpp:487 src/libslic3r/PrintConfig.cpp:596
+#: src/libslic3r/PrintConfig.cpp:924 src/libslic3r/PrintConfig.cpp:937
+#: src/libslic3r/PrintConfig.cpp:1059 src/libslic3r/PrintConfig.cpp:1085
+#: src/libslic3r/PrintConfig.cpp:1531 src/libslic3r/PrintConfig.cpp:1876
+#: src/libslic3r/PrintConfig.cpp:2025 src/libslic3r/PrintConfig.cpp:2093
+#: src/libslic3r/PrintConfig.cpp:2254
 msgid "mm or %"
 msgstr "mm o %"
 
-#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:609
-#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:626
-#: src/libslic3r/PrintConfig.cpp:634 src/libslic3r/PrintConfig.cpp:661
-#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:922
-#: src/libslic3r/PrintConfig.cpp:1050 src/libslic3r/PrintConfig.cpp:1135
-#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1181
-#: src/libslic3r/PrintConfig.cpp:1191 src/libslic3r/PrintConfig.cpp:1241
-#: src/libslic3r/PrintConfig.cpp:1300 src/libslic3r/PrintConfig.cpp:1433
-#: src/libslic3r/PrintConfig.cpp:1607 src/libslic3r/PrintConfig.cpp:1616
-#: src/libslic3r/PrintConfig.cpp:2028 src/libslic3r/PrintConfig.cpp:2154
+#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
+#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
+#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
+#: src/libslic3r/PrintConfig.cpp:716 src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1094 src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1243 src/libslic3r/PrintConfig.cpp:1277
+#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1349 src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1541 src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1724 src/libslic3r/PrintConfig.cpp:2170
+#: src/libslic3r/PrintConfig.cpp:2297
 msgid "mm/s"
 msgstr "mm/s"
 
-#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:904
-#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1772
-#: src/libslic3r/PrintConfig.cpp:1995 src/libslic3r/PrintConfig.cpp:2124
+#: src/libslic3r/PrintConfig.cpp:498 src/libslic3r/PrintConfig.cpp:946
+#: src/libslic3r/PrintConfig.cpp:1835 src/libslic3r/PrintConfig.cpp:1887
+#: src/libslic3r/PrintConfig.cpp:2137 src/libslic3r/PrintConfig.cpp:2267
 msgid "mm/s or %"
 msgstr "mm/s o %"
 
-#: src/libslic3r/PrintConfig.cpp:196 src/libslic3r/PrintConfig.cpp:339
-#: src/libslic3r/PrintConfig.cpp:862 src/libslic3r/PrintConfig.cpp:984
-#: src/libslic3r/PrintConfig.cpp:1152 src/libslic3r/PrintConfig.cpp:1201
-#: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1403
+#: src/libslic3r/PrintConfig.cpp:230 src/libslic3r/PrintConfig.cpp:373
+#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:1028
+#: src/libslic3r/PrintConfig.cpp:1260 src/libslic3r/PrintConfig.cpp:1309
+#: src/libslic3r/PrintConfig.cpp:1319 src/libslic3r/PrintConfig.cpp:1511
 msgid "mm/s²"
 msgstr "mm/s²"
 
-#: src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:1845
 msgid "mm²"
 msgstr "mm²"
 
-#: src/libslic3r/PrintConfig.cpp:672
+#: src/libslic3r/PrintConfig.cpp:708
 msgid "mm³"
 msgstr "mm³"
 
-#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:601
-#: src/libslic3r/PrintConfig.cpp:1250
+#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1358
 msgid "mm³/s"
 msgstr "mm³/s"
 
-#: src/libslic3r/PrintConfig.cpp:1262 src/libslic3r/PrintConfig.cpp:1273
+#: src/libslic3r/PrintConfig.cpp:1370 src/libslic3r/PrintConfig.cpp:1381
 msgid "mm³/s²"
 msgstr "mm³/s²"
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:1512
 msgid "Mode"
 msgstr "&Modo"
 
@@ -4623,7 +5312,7 @@ msgstr "&Modo"
 msgid "model"
 msgstr "modelo"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:251
+#: src/slic3r/GUI/BedShapeDialog.cpp:395
 msgid "Model"
 msgstr "Modelo"
 
@@ -4652,99 +5341,125 @@ msgstr "Reparación del modelo terminada"
 msgid "Model repaired successfully"
 msgstr "Modelo reparado exitosamente"
 
-#: src/slic3r/GUI/Tab.cpp:979
+#: src/slic3r/GUI/GUI_App.cpp:1506 src/slic3r/GUI/wxExtensions.cpp:675
+msgctxt "Mode"
+msgid "Advanced"
+msgstr "Advanzado"
+
+#: src/slic3r/GUI/Tab.cpp:1241
 msgid "Modifications to the current profile will be saved."
 msgstr "Se guardarán las modificaciones al perfil actual."
 
-#: src/slic3r/GUI/Preset.cpp:247
+#: src/slic3r/GUI/GUI_App.cpp:1425
 msgid "modified"
 msgstr "modificado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Modifier"
 msgstr "Modificador"
 
-#: src/slic3r/GUI/Tab.cpp:1161
+#: src/slic3r/GUI/Tab.cpp:1491
 msgid "Modifiers"
 msgstr "Modificadores"
 
-#: src/libslic3r/PrintConfig.cpp:2512
+#: src/libslic3r/PrintConfig.cpp:2655
 msgid "money/bottle"
 msgstr "dinero/botella"
 
-#: src/libslic3r/PrintConfig.cpp:762
+#: src/libslic3r/PrintConfig.cpp:798
 msgid "money/kg"
 msgstr "dinero/kg"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/libslic3r/PrintConfig.cpp:461
+msgid "Monotonic"
+msgstr "Monotónico"
+
+#: src/slic3r/GUI/NotificationManager.cpp:305
+#: src/slic3r/GUI/NotificationManager.cpp:315
+msgid "More"
+msgstr "Más"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Mouse wheel"
 msgstr "Rueda del ratón"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:261
+#: src/slic3r/GUI/GLCanvas3D.cpp:249
 msgid "Mouse wheel:"
 msgstr "Rueda del ratón:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:64
 msgid "Move"
 msgstr "Mover"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Move clipping plane"
 msgstr "Mover plano de recorte"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Move current slider thumb Down"
 msgstr "Mover el control deslizante actual hacia abajo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
+msgid "Move current slider thumb Left"
+msgstr "Mover el control deslizante actual hacia la izquierda"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
+msgid "Move current slider thumb Right"
+msgstr "Mover el control deslizante actual hacia la derecha"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Move current slider thumb Up"
 msgstr "Mover el control deslizante actual hacia arriba"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:1059
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:835
 msgid "Move drainage hole"
 msgstr "Mover orificio de drenaje"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3505
+#: src/slic3r/GUI/GLCanvas3D.cpp:3810
 msgid "Move Object"
 msgstr "Mover Objeto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
 msgid "Move point"
 msgstr "Mover punto"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
 msgid "Move selection 10 mm in negative X direction"
 msgstr "Mover la selección 10 mm en dirección X negativa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
 msgid "Move selection 10 mm in negative Y direction"
 msgstr "Mover la selección 10 mm en dirección Y negativa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
 msgid "Move selection 10 mm in positive X direction"
 msgstr "Mover la selección 10 mm en dirección X positiva"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
 msgid "Move selection 10 mm in positive Y direction"
 msgstr "Mover la selección 10 mm en dirección Y positiva"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1097
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:955
 msgid "Move support point"
 msgstr "Mover punto de soporte"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/GCodeViewer.cpp:2492
+msgid "Movement"
+msgstr "Movimiento"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Movement in camera space"
 msgstr "Movimiento en el espacio de la cámara"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
 msgid "Movement step set to 1 mm"
 msgstr "Paso de movimiento configurado a 1 mm"
 
-#: src/libslic3r/PrintConfig.cpp:2201
+#: src/libslic3r/PrintConfig.cpp:2344
 msgid "Multi material printers may need to prime or purge extruders on tool changes. Extrude the excess material into the wipe tower."
 msgstr "Las impresoras de varios materiales pueden necesitar cebar o purgar extrusoras en los cambios de herramientas. Extruya el exceso de material en la torre de limpieza."
 
-#: src/slic3r/GUI/Plater.cpp:2360 src/slic3r/GUI/Plater.cpp:2413
+#: src/slic3r/GUI/Plater.cpp:2322 src/slic3r/GUI/Plater.cpp:2375
 msgid "Multi-part object detected"
 msgstr "Objeto de piezas múltiples detectado"
 
@@ -4753,11 +5468,11 @@ msgstr "Objeto de piezas múltiples detectado"
 msgid "Multiple %s devices found. Please only connect one at a time for flashing."
 msgstr "Se encontraron múltiples dispositivos %s. Por favor, conecta solo uno a la vez para flashear."
 
-#: src/slic3r/GUI/Tab.cpp:1179
+#: src/slic3r/GUI/Tab.cpp:1509
 msgid "Multiple Extruders"
 msgstr "Múltiples Extrusores"
 
-#: src/slic3r/GUI/Plater.cpp:2410
+#: src/slic3r/GUI/Plater.cpp:2372
 msgid ""
 "Multiple objects were loaded for a multi-material printer.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -4767,36 +5482,41 @@ msgstr ""
 "En lugar de considerarlos como objetos múltiples, ¿debería considerar\n"
 "estos archivos para formar un solo objeto que tiene varias partes?"
 
-#: src/libslic3r/PrintConfig.cpp:3439
+#: src/libslic3r/PrintConfig.cpp:3638
 msgid "Multiply copies by creating a grid."
 msgstr "Multiplicar copias creando una rejilla."
 
-#: src/libslic3r/PrintConfig.cpp:3434
+#: src/libslic3r/PrintConfig.cpp:3633
 msgid "Multiply copies by this factor."
 msgstr "Multiplicar las copias por este factor."
 
-#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:580
+#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:715
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:874
 msgid "N/A"
 msgstr "N/A"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:270
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:153
+#: src/slic3r/GUI/GUI_ObjectList.cpp:284
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:161
 msgid "Name"
 msgstr "Nombre"
 
-#: src/libslic3r/PrintConfig.cpp:1488
+#: src/libslic3r/PrintConfig.cpp:114
+msgid "Name of the printer"
+msgstr "Nombre de la impresora"
+
+#: src/libslic3r/PrintConfig.cpp:1596
 msgid "Name of the printer variant. For example, the printer variants may be differentiated by a nozzle diameter."
 msgstr "Nombre de la variante de impresora. Por ejemplo, las variantes pueden distinguir diferentes diámetros de boquilla."
 
-#: src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1590
 msgid "Name of the printer vendor."
 msgstr "Nombre del fabricante de la impresora."
 
-#: src/libslic3r/PrintConfig.cpp:1058
+#: src/libslic3r/PrintConfig.cpp:1102
 msgid "Name of the profile, from which this profile inherits."
 msgstr "Nombre del perfil desde que éste hereda."
 
-#: src/libslic3r/PrintConfig.cpp:1630
+#: src/libslic3r/PrintConfig.cpp:1738
 msgid "Nearest"
 msgstr "Más cercano"
 
@@ -4804,14 +5524,30 @@ msgstr "Más cercano"
 msgid "Network lookup"
 msgstr "Búsqueda en la red"
 
-#: src/slic3r/GUI/Plater.cpp:2151
+#: src/slic3r/GUI/Preferences.cpp:430
+msgid "New layout, access via settings button in the top menu"
+msgstr "Nuevo diseño, acceso a través del botón de configuración en el menú superior"
+
+#: src/slic3r/GUI/Plater.cpp:2056
 msgid "New Project"
 msgstr "Nuevo proyecto"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:105
 msgid "New project, clear plater"
 msgstr "Nuevo proyecto, limpiar plataforma"
 
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:609
+msgid "New Value"
+msgstr "Nuevo Valor"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1178
+msgid "New value"
+msgstr "Nuevo valor"
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "New version is available."
+msgstr "Una nueva versión está disponible."
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:38
 #, c-format
 msgid "New version of %s is available"
@@ -4821,23 +5557,23 @@ msgstr "Nueva versión de %s disponible"
 msgid "New version:"
 msgstr "Nueva versión:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4673
+#: src/slic3r/GUI/GLCanvas3D.cpp:5089
 msgid "Next Redo action: %1%"
 msgstr "Siguiente acción de Rehacer: %1%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4641
+#: src/slic3r/GUI/GLCanvas3D.cpp:5051
 msgid "Next Undo action: %1%"
 msgstr "Siguiente acción de Deshacer: %1%"
 
-#: src/libslic3r/PrintConfig.cpp:960
+#: src/libslic3r/PrintConfig.cpp:1004
 msgid "No extrusion"
 msgstr "Sin extrusión"
 
-#: src/libslic3r/SLAPrintSteps.cpp:453
+#: src/libslic3r/SLAPrintSteps.cpp:451
 msgid "No pad can be generated for this model with the current configuration"
 msgstr "No se puede generar el pad para este modelo con la configuración actual"
 
-#: src/slic3r/GUI/MainFrame.cpp:784
+#: src/slic3r/GUI/MainFrame.cpp:1485
 msgid "No previously sliced file."
 msgstr "Ningún archivo previamente laminado."
 
@@ -4845,175 +5581,221 @@ msgstr "Ningún archivo previamente laminado."
 msgid "NO RAMMING AT ALL"
 msgstr "NO EMPUJAR EN ABSOLUTO"
 
-#: src/libslic3r/PrintConfig.cpp:1857
+#: src/libslic3r/PrintConfig.cpp:1999
 msgid "No sparse layers (EXPERIMENTAL)"
 msgstr "Sin capas dispersas (EXPERIMENTAL)"
 
-#: src/libslic3r/PrintConfig.cpp:2774
+#: src/libslic3r/PrintConfig.cpp:2938
 msgid "No support points will be placed closer than this threshold."
 msgstr "Ningún punto de soporte se colocará más cerca de este umbral."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "No updates available"
 msgstr "No hay actualizaciones disponibles"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:291 src/slic3r/GUI/ConfigWizard.cpp:574
-#: src/slic3r/GUI/Plater.cpp:499 src/slic3r/GUI/Plater.cpp:639
-#: src/libslic3r/ExtrusionEntity.cpp:309
+#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/ConfigWizard.cpp:599
+#: src/slic3r/GUI/Plater.cpp:365 src/slic3r/GUI/Plater.cpp:505
+#: src/libslic3r/ExtrusionEntity.cpp:312
 msgid "None"
 msgstr "Ninguno"
 
-#: src/slic3r/GUI/Tab.cpp:2203
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2372
 msgid "Normal"
 msgstr "Normal"
 
-#: src/slic3r/GUI/Plater.cpp:1286
+#: src/slic3r/GUI/Plater.cpp:1177 src/slic3r/GUI/Plater.cpp:1224
 msgid "normal mode"
 msgstr "modo normal"
 
-#: src/libslic3r/Zipper.cpp:46
+#: src/slic3r/GUI/GCodeViewer.cpp:2552
+msgid "Normal mode"
+msgstr "Modo normal"
+
+#: src/libslic3r/miniz_extension.cpp:105
 msgid "not a ZIP archive"
 msgstr "no es un archivo ZIP"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:223 src/slic3r/GUI/BedShapeDialog.cpp:302
+#: src/slic3r/GUI/BedShapeDialog.cpp:366 src/slic3r/GUI/BedShapeDialog.cpp:446
 msgid "Not found:"
 msgstr "No encontrado:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1019
+#: src/slic3r/GUI/DoubleSlider.cpp:1144
 msgid "Note"
 msgstr "Nota"
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/GUI/Tab.cpp:3408
+msgid "Note, that selected preset will be deleted from this/those printer(s) too."
+msgstr "Tenga en cuenta que ese ajuste preestablecido seleccionado también se eliminará de esta/esas impresoras."
+
+#: src/slic3r/GUI/Tab.cpp:3416
+msgid "Note, that this/those printer(s) will be deleted after deleting of the selected preset."
+msgstr "Tenga en cuenta que esta(s) impresora(s) se eliminarán después de eliminar el ajuste preestablecido seleccionado."
+
+#: src/slic3r/GUI/Tab.cpp:2039
+msgid ""
+"Note: All parameters from this group are moved to the Physical Printer settings (see changelog).\n"
+"\n"
+"A new Physical Printer profile is created by clicking on the \"cog\" icon right of the Printer profiles combo box, by selecting the \"Add physical printer\" item in the Printer combo box. The Physical Printer profile editor opens also when clicking on the \"cog\" icon in the Printer settings tab. The Physical Printer profiles are being stored into PrusaSlicer/physical_printer directory."
+msgstr ""
+"Nota: Todos los parámetros de este grupo se han desplazado a la configuración de Impresora física (consulte el registro de cambios).\n"
+"\n"
+"Se crea un nuevo perfil de impresora física haciendo clic en el icono de \"engranaje\" a la derecha del cuadro combinado de perfiles de impresora, seleccionando el elemento \"Agregar impresora física\" en el cuadro combinado de impresora. El editor de perfil de Impresora física también se abre al hacer clic en el icono \"engranaje\" en la pestaña Configuración de impresora. Los perfiles de la impresora física se almacenan en el directorio PrusaSlicer/physical_printer."
+
+#: src/slic3r/Utils/AstroBox.cpp:92
 msgid "Note: AstroBox version at least 1.1.0 is required."
 msgstr "Aviso: Se necesita la versión 1.1.0 o superior de AstroBox."
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:76
 msgid "Note: FlashAir with firmware 2.00.02 or newer and activated upload function is required."
 msgstr "Nota: Requiere FlashAir con firmware 2.00.02 o posterior y la función de carga activada."
 
-#: src/slic3r/Utils/OctoPrint.cpp:89
+#: src/slic3r/Utils/OctoPrint.cpp:91
 msgid "Note: OctoPrint version at least 1.1.0 is required."
 msgstr "Nota: Se necesita al menos la versión 1.1.0 de OctoPrint."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1345
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1192
 msgid "Note: some shortcuts work in (non)editing mode only."
 msgstr "Nota: algunos accesos directos funcionan solo en modo de (no)edición."
 
-#: src/slic3r/GUI/Tab.cpp:1251 src/slic3r/GUI/Tab.cpp:1252
-#: src/slic3r/GUI/Tab.cpp:1540 src/slic3r/GUI/Tab.cpp:1541
-#: src/slic3r/GUI/Tab.cpp:2012 src/slic3r/GUI/Tab.cpp:2013
-#: src/slic3r/GUI/Tab.cpp:2128 src/slic3r/GUI/Tab.cpp:2129
-#: src/slic3r/GUI/Tab.cpp:3535 src/slic3r/GUI/Tab.cpp:3536
+#: src/slic3r/GUI/SavePresetDialog.cpp:151
+msgid "Note: This preset will be replaced after saving"
+msgstr "Nota: Este ajuste se reemplazará tras guardar"
+
+#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582
+#: src/slic3r/GUI/Tab.cpp:1887 src/slic3r/GUI/Tab.cpp:1888
+#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2297 src/slic3r/GUI/Tab.cpp:2298
+#: src/slic3r/GUI/Tab.cpp:3951 src/slic3r/GUI/Tab.cpp:3952
 msgid "Notes"
 msgstr "Notas"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1751 src/slic3r/GUI/DoubleSlider.cpp:1905
-#: src/slic3r/GUI/DoubleSlider.cpp:1926 src/slic3r/GUI/GUI.cpp:245
+#: src/slic3r/GUI/ConfigWizard.cpp:2237 src/slic3r/GUI/DoubleSlider.cpp:2124
+#: src/slic3r/GUI/DoubleSlider.cpp:2144 src/slic3r/GUI/GUI.cpp:244
 msgid "Notice"
 msgstr "Date cuenta"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:218
+#: src/slic3r/GUI/ConfigWizard.cpp:236
 msgid "nozzle"
 msgstr "boquilla"
 
-#: src/slic3r/GUI/Tab.cpp:1870 src/slic3r/GUI/Tab.cpp:2340
-#: src/libslic3r/PrintConfig.cpp:1326
+#: src/slic3r/GUI/Tab.cpp:1790
+msgid "Nozzle"
+msgstr "Boquilla"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1392
+msgid "Nozzle and Bed Temperatures"
+msgstr "Temperaturas de la Base y la Boquilla"
+
+#: src/slic3r/GUI/Tab.cpp:2104 src/slic3r/GUI/Tab.cpp:2509
+#: src/libslic3r/PrintConfig.cpp:1434
 msgid "Nozzle diameter"
 msgstr "Diámetro de la boquilla"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:969
+#: src/slic3r/GUI/ConfigWizard.cpp:1335
 msgid "Nozzle Diameter:"
 msgstr "Diámetro de la boquilla:"
 
-#: src/libslic3r/PrintConfig.cpp:650
+#: src/libslic3r/PrintConfig.cpp:2201
+msgid "Nozzle temperature"
+msgstr "Temperatura de la boquilla"
+
+#: src/libslic3r/PrintConfig.cpp:2198
+msgid "Nozzle temperature for layers after the first one. Set this to zero to disable temperature control commands in the output G-code."
+msgstr "Temperatura de la boquilla para las capas después de la primera. Ajusta esto a cero para deshabilitar los comandos de control de temperatura en el código G de salida."
+
+#: src/libslic3r/PrintConfig.cpp:961
+msgid "Nozzle temperature for the first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output G-code."
+msgstr "Temperatura de la boquilla para la primera capa. Si deseas controlar la temperatura manualmente durante la impresión, configúralo a cero para deshabilitar las órdenes de control de temperatura en el código G de salida."
+
+#: src/libslic3r/PrintConfig.cpp:686
 msgid "Number of cooling moves"
 msgstr "Número de movimientos de enfriamiento"
 
-#: src/slic3r/GUI/Tab.cpp:1839
+#: src/slic3r/GUI/Tab.cpp:2073
 msgid "Number of extruders of the printer."
 msgstr "Número de extrusores de la impresora."
 
-#: src/libslic3r/PrintConfig.cpp:1975
+#: src/libslic3r/PrintConfig.cpp:2117
 msgid "Number of interface layers to insert between the object(s) and support material."
 msgstr "Número de capas de interfaz para insertar entre el (los) objeto(s) y el material de soporte."
 
-#: src/libslic3r/PrintConfig.cpp:1697
+#: src/libslic3r/PrintConfig.cpp:1812
 msgid "Number of loops for the skirt. If the Minimum Extrusion Length option is set, the number of loops might be greater than the one configured here. Set this to zero to disable skirt completely."
 msgstr "Número de vueltas para la falda Si se establece la opción Longitud Mínima de Extrusión, el número de bucles puede ser mayor que el configurado aquí. Ajuste esto a cero para deshabilitar la falda por completo."
 
-#: src/libslic3r/PrintConfig.cpp:2365
+#: src/libslic3r/PrintConfig.cpp:2508
 msgid "Number of pixels in"
 msgstr "Número de píxeles en"
 
-#: src/libslic3r/PrintConfig.cpp:2367
+#: src/libslic3r/PrintConfig.cpp:2510
 msgid "Number of pixels in X"
 msgstr "Número de píxeles en X"
 
-#: src/libslic3r/PrintConfig.cpp:2373
+#: src/libslic3r/PrintConfig.cpp:2516
 msgid "Number of pixels in Y"
 msgstr "Número de píxeles en Y"
 
-#: src/libslic3r/PrintConfig.cpp:176
+#: src/libslic3r/PrintConfig.cpp:210
 msgid "Number of solid layers to generate on bottom surfaces."
 msgstr "Número de capas sólidas para generar en las superficies inferiores."
 
-#: src/libslic3r/PrintConfig.cpp:1781
+#: src/libslic3r/PrintConfig.cpp:1896
 msgid "Number of solid layers to generate on top and bottom surfaces."
 msgstr "Número de capas sólidas para generar en las superficies superior e inferior."
 
-#: src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2277
 msgid "Number of solid layers to generate on top surfaces."
 msgstr "Número de capas sólidas para generar en las superficies superiores."
 
-#: src/libslic3r/PrintConfig.cpp:2518
+#: src/libslic3r/PrintConfig.cpp:2661
 msgid "Number of the layers needed for the exposure time fade from initial exposure time to the exposure time"
 msgstr "El número de capas necesarias para el tiempo de exposición cambie desde el tiempo de exposición inicial hasta el tiempo de exposición"
 
-#: src/slic3r/GUI/Plater.cpp:241
+#: src/slic3r/GUI/Plater.cpp:247
 msgid "Number of tool changes"
 msgstr "Número de cambios de herramienta"
 
-#: src/libslic3r/PrintConfig.cpp:2753
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:2917
 msgid "Object elevation"
 msgstr "Elevación del objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2466
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2858
 msgid "Object manipulation"
 msgstr "Manipulación de objetos"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:155 src/libslic3r/GCode.cpp:638
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:163 src/libslic3r/GCode.cpp:623
 msgid "Object name"
 msgstr "Nombre del objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3417
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3880
 msgid "Object or Instance"
 msgstr "Objeto o instancia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Object reordered"
 msgstr "Objetos reordenados"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2479
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2871
 msgid "Object Settings to modify"
 msgstr "Configuraciones de objetos para modificar"
 
-#: src/slic3r/GUI/Plater.cpp:2529
+#: src/slic3r/GUI/Plater.cpp:2491
 msgid "Object too large?"
 msgstr "Objeto demasiado grande?"
 
-#: src/libslic3r/PrintConfig.cpp:2262
+#: src/libslic3r/PrintConfig.cpp:2405
 msgid "Object will be used to purge the nozzle after a toolchange to save material that would otherwise end up in the wipe tower and decrease print time. Colours of the objects will be mixed as a result."
 msgstr "El objeto se utilizará para purgar el nozzle después de un cambio de herramienta para guardar el material que de lo contrario terminaría en la torre de limpieza y disminuir el tiempo de impresión. Los colores de los objetos se mezclarán como resultado."
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "object(s)"
 msgstr "objeto(s)"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "objects"
 msgstr "objetos"
 
-#: src/libslic3r/PrintConfig.cpp:429 src/libslic3r/PrintConfig.cpp:855
+#: src/libslic3r/PrintConfig.cpp:465 src/libslic3r/PrintConfig.cpp:893
 msgid "Octagram Spiral"
 msgstr "Octagram Spiral"
 
@@ -5021,64 +5803,101 @@ msgstr "Octagram Spiral"
 msgid "OctoPrint version"
 msgstr "Versión de OctoPrint"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3425
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3888
 msgid "of a current Object"
 msgstr "del Objeto actual"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
 msgid "Offset"
 msgstr "Desplazamiento"
 
-#: src/slic3r/GUI/Tab.cpp:1755
+#: src/slic3r/GUI/Preferences.cpp:422
+msgid "Old regular layout with the tab bar"
+msgstr "Diseño regular antiguo con la barra de pestañas"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:608
+msgid "Old Value"
+msgstr "Valor Antiguo"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1177
+msgid "Old value"
+msgstr "Valor antiguo"
+
+#: src/slic3r/GUI/Preferences.cpp:123
+msgid "On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances of same app from the command line. In such case this settings will allow only one instance."
+msgstr "En OSX, siempre hay una sola instancia de aplicación que se ejecuta de forma predeterminada. Sin embargo, está permitido ejecutar varias instancias de la misma aplicación desde la línea de comandos. En tal caso, esta configuración permitirá solo una instancia."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:359
 #, c-format
 msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain."
 msgstr "En este sistema,%s usa certificados HTTPS del almacén de certificados o llavero."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:950
+#: src/slic3r/GUI/DoubleSlider.cpp:1064
 msgid "One layer mode"
 msgstr "Modo de capa única"
 
-#: src/libslic3r/Print.cpp:1365
+#: src/libslic3r/Print.cpp:1391
 msgid "One or more object were assigned an extruder that the printer does not have."
 msgstr "Uno o más objetos fueron asignados a un extrusor no existente."
 
-#: src/libslic3r/PrintConfig.cpp:1903 src/libslic3r/PrintConfig.cpp:2676
+#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
 msgid "Only create support if it lies on a build plate. Don't create support on a print."
 msgstr "Solo crear soportes si está en contacto con la plataforma. No crea soporte en la impresión."
 
-#: src/libslic3r/PrintConfig.cpp:1027
+#: src/libslic3r/PrintConfig.cpp:1071
 msgid "Only infill where needed"
 msgstr "Solo rellenar cuando sea necesario"
 
-#: src/slic3r/GUI/Tab.cpp:2373
+#: src/slic3r/GUI/Tab.cpp:2542
 msgid "Only lift Z"
 msgstr "Solo levantar Z"
 
-#: src/libslic3r/PrintConfig.cpp:1570
+#: src/libslic3r/PrintConfig.cpp:1678
 msgid "Only lift Z above"
 msgstr "Solo levantar Z mayor que"
 
-#: src/libslic3r/PrintConfig.cpp:1579
+#: src/libslic3r/PrintConfig.cpp:1687
 msgid "Only lift Z below"
 msgstr "Solo levantar Z menor que"
 
-#: src/libslic3r/PrintConfig.cpp:1348
+#: src/libslic3r/PrintConfig.cpp:1456
 msgid "Only retract when crossing perimeters"
 msgstr "Solo retraer al cruzar perímetros"
 
-#: src/slic3r/GUI/Tab.cpp:1187
+#: src/slic3r/GUI/ConfigWizard.cpp:714
+msgid "Only the following installed printers are compatible with the selected filament:"
+msgstr "Solo las siguientes impresoras instaladas son compatibles con el filamento seleccionado:"
+
+#: src/slic3r/GUI/Tab.cpp:1517
 msgid "Ooze prevention"
 msgstr "Prevención de goteo"
 
-#: src/libslic3r/Print.cpp:1266
+#: src/libslic3r/Print.cpp:1292
 msgid "Ooze prevention is currently not supported with the wipe tower enabled."
 msgstr "La prevención de goteo actualmente no es compatible con la torre de limpieza activa."
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open &PrusaSlicer"
+msgstr "Abrir &PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "Open a G-code file"
+msgstr "Abrir un archivo código G"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:77
+#: src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open a new PrusaSlicer instance"
+msgstr "Abrir instancia nueva de PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "Open a project file"
 msgstr "Abrir un archivo de proyecto"
 
-#: src/slic3r/GUI/Tab.cpp:1729
+#: src/slic3r/GUI/Plater.cpp:1417
+msgid "Open as project"
+msgstr "Abrir como proyecto"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:330
 msgid "Open CA certificate file"
 msgstr "Abrir archivo de certificado CA"
 
@@ -5091,116 +5910,150 @@ msgstr "Abrir la página del registro de cambios"
 msgid "Open download page"
 msgstr "Abrir página de descarga"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
+#: src/slic3r/GUI/NotificationManager.cpp:742
+msgid "Open Folder."
+msgstr "Abrir carpeta."
+
+#: src/slic3r/Utils/Process.cpp:151
+msgid "Open G-code file:"
+msgstr "Abrir archivo código G:"
+
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:1141
+msgid "Open G-code viewer"
+msgstr "Abrir visor código G"
+
+#: src/slic3r/GUI/MainFrame.cpp:79
+msgid "Open new G-code viewer"
+msgstr "Abrir visor código G nuevo"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open new instance"
+msgstr "Abrir instancia nueva"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:106
 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater"
 msgstr "Abrir proyecto STL/OBJ/AMF/3MF con configuración, limpiar plataforma"
 
-#: src/slic3r/GUI/MainFrame.cpp:693
+#: src/slic3r/GUI/MainFrame.cpp:77 src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open PrusaSlicer"
+msgstr "Abrir PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:918 src/slic3r/GUI/MainFrame.cpp:1317
 #, c-format
 msgid "Open the %s website in your browser"
 msgstr "Abrir el sitio web de %s en su navegador"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Open the Prusa3D drivers download page in your browser"
 msgstr "Abrir la página de descarga de los controladores Prusa3D en su navegador"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Open the software releases page in your browser"
 msgstr "Abre la página de lanzamientos de software en tu navegador"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:220 src/slic3r/GUI/Plater.cpp:3961
 msgid "Optimize orientation"
 msgstr "Optimizar la orientación"
 
-#: src/slic3r/GUI/Plater.cpp:2767
+#: src/slic3r/GUI/Plater.cpp:1555
 msgid "Optimize Rotation"
 msgstr "Optimizar Rotación"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Plater.cpp:3962
 msgid "Optimize the rotation of the object for better print results."
 msgstr "Optimizar la rotación del objeto para obtener mejores resultados de impresión."
 
-#: src/libslic3r/PrintConfig.cpp:137
+#: src/libslic3r/PrintConfig.cpp:170
 msgid "Optimize travel moves in order to minimize the crossing of perimeters. This is mostly useful with Bowden extruders which suffer from oozing. This feature slows down both the print and the G-code generation."
 msgstr "Optimiza los movimientos de desplazamiento para minimizar el cruce de perímetros. Esto es principalmente útil con extrusores Bowden que sufren goteo. Esta característica ralentiza tanto la impresión como la generación de código G."
 
-#: src/slic3r/GUI/Tab.cpp:1131
+#: src/slic3r/GUI/GCodeViewer.cpp:2525 src/slic3r/GUI/GUI_Preview.cpp:320
+#: src/slic3r/GUI/GUI_Preview.cpp:333
+msgid "Options"
+msgstr "Opciones"
+
+#: src/slic3r/GUI/Tab.cpp:1460
 msgid "Options for support material and raft"
 msgstr "Opciones de material de soporte y balsa"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:989
+#: src/slic3r/GUI/Mouse3DController.cpp:315
+msgid "Options:"
+msgstr "Opciones:"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1112
 msgid "or press \"+\" key"
 msgstr "o presiona la tecla \"+\""
 
-#: src/slic3r/GUI/Plater.cpp:2892
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:74
 msgid "Orientation found."
 msgstr "Orientación encontrada."
 
-#: src/slic3r/GUI/Plater.cpp:2891
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:73
 msgid "Orientation search canceled."
 msgstr "Búsqueda de orientación cancelada."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:84
+#: src/slic3r/GUI/BedShapeDialog.cpp:94
 msgid "Origin"
 msgstr "Origen"
 
-#: src/slic3r/GUI/Tab.cpp:1227
+#: src/slic3r/GUI/Tab.cpp:1557
 msgid "Other"
 msgstr "Otro"
 
-#: src/libslic3r/PrintConfig.cpp:144 src/libslic3r/PrintConfig.cpp:2064
+#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:2206
 msgid "Other layers"
 msgstr "Otras capas"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:856
+#: src/slic3r/GUI/ConfigWizard.cpp:1222
 msgid "Other Vendors"
 msgstr "Otras Marcas"
 
-#: src/slic3r/GUI/Tab.cpp:1238 src/slic3r/GUI/Tab.cpp:3666
+#: src/slic3r/GUI/Tab.cpp:1568 src/slic3r/GUI/Tab.cpp:4085
 msgid "Output file"
 msgstr "Archivo de salida"
 
-#: src/libslic3r/PrintConfig.cpp:3493
+#: src/libslic3r/PrintConfig.cpp:3692
 msgid "Output File"
 msgstr "Archivo de salida"
 
-#: src/libslic3r/PrintConfig.cpp:1363
+#: src/libslic3r/PrintConfig.cpp:1471
 msgid "Output filename format"
 msgstr "Formato de nombre de salida"
 
-#: src/libslic3r/PrintConfig.cpp:3381
+#: src/libslic3r/PrintConfig.cpp:3580
 msgid "Output Model Info"
 msgstr "Información del modelo de salida"
 
-#: src/slic3r/GUI/Tab.cpp:1230 src/slic3r/GUI/Tab.cpp:3665
+#: src/slic3r/GUI/Tab.cpp:1560 src/slic3r/GUI/Tab.cpp:4084
 msgid "Output options"
 msgstr "Opciones de salida"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/ExtrusionEntity.cpp:312
+#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/libslic3r/ExtrusionEntity.cpp:340
 msgid "Overhang perimeter"
 msgstr "Perímetro de voladizos"
 
-#: src/libslic3r/PrintConfig.cpp:2042
+#: src/libslic3r/PrintConfig.cpp:2184
 msgid "Overhang threshold"
 msgstr "Umbral de voladizos"
 
-#: src/slic3r/GUI/Tab.cpp:1215
+#: src/slic3r/GUI/Tab.cpp:1545
 msgid "Overlap"
 msgstr "Superposición"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "P&rint Settings Tab"
 msgstr "Configu&ración de Impresión"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:625
-#: src/slic3r/GUI/Plater.cpp:635 src/slic3r/GUI/Tab.cpp:3636
-#: src/slic3r/GUI/Tab.cpp:3637 src/libslic3r/PrintConfig.cpp:2781
-#: src/libslic3r/PrintConfig.cpp:2788 src/libslic3r/PrintConfig.cpp:2802
-#: src/libslic3r/PrintConfig.cpp:2813 src/libslic3r/PrintConfig.cpp:2823
-#: src/libslic3r/PrintConfig.cpp:2845 src/libslic3r/PrintConfig.cpp:2856
-#: src/libslic3r/PrintConfig.cpp:2863 src/libslic3r/PrintConfig.cpp:2870
-#: src/libslic3r/PrintConfig.cpp:2881 src/libslic3r/PrintConfig.cpp:2890
-#: src/libslic3r/PrintConfig.cpp:2899
+#: src/slic3r/GUI/GUI_ObjectList.cpp:105 src/slic3r/GUI/GUI_ObjectList.cpp:664
+#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Tab.cpp:4055
+#: src/slic3r/GUI/Tab.cpp:4056 src/slic3r/GUI/Tab.cpp:4127
+#: src/libslic3r/PrintConfig.cpp:2945 src/libslic3r/PrintConfig.cpp:2952
+#: src/libslic3r/PrintConfig.cpp:2966 src/libslic3r/PrintConfig.cpp:2977
+#: src/libslic3r/PrintConfig.cpp:2987 src/libslic3r/PrintConfig.cpp:3009
+#: src/libslic3r/PrintConfig.cpp:3020 src/libslic3r/PrintConfig.cpp:3027
+#: src/libslic3r/PrintConfig.cpp:3034 src/libslic3r/PrintConfig.cpp:3045
+#: src/libslic3r/PrintConfig.cpp:3054 src/libslic3r/PrintConfig.cpp:3063
 msgid "Pad"
 msgstr "Pad"
 
@@ -5208,150 +6061,186 @@ msgstr "Pad"
 msgid "Pad and Support"
 msgstr "Pad y soportes"
 
-#: src/libslic3r/PrintConfig.cpp:2855
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:3019
 msgid "Pad around object"
 msgstr "Pad alrededor del objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2862
+#: src/libslic3r/PrintConfig.cpp:3026
 msgid "Pad around object everywhere"
 msgstr "Pad alrededor del objeto en todos lados"
 
-#: src/libslic3r/PrintConfig.cpp:2811
+#: src/libslic3r/PrintConfig.cpp:2975
 msgid "Pad brim size"
 msgstr "Tamaño del borde del pad"
 
-#: src/libslic3r/SLA/Pad.cpp:691
+#: src/libslic3r/SLA/Pad.cpp:532
 msgid "Pad brim size is too small for the current configuration."
 msgstr "El tamaño del borde del pad es demasiado pequeño para la configuración actual."
 
-#: src/libslic3r/PrintConfig.cpp:2898
+#: src/libslic3r/PrintConfig.cpp:3062
 msgid "Pad object connector penetration"
 msgstr "Penetración del conector del objeto al Pad"
 
-#: src/libslic3r/PrintConfig.cpp:2880
+#: src/libslic3r/PrintConfig.cpp:3044
 msgid "Pad object connector stride"
 msgstr "Paso del conector del objeto al Pad"
 
-#: src/libslic3r/PrintConfig.cpp:2889
+#: src/libslic3r/PrintConfig.cpp:3053
 msgid "Pad object connector width"
 msgstr "Anchura del conector del pad al objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2869
+#: src/libslic3r/PrintConfig.cpp:3033
 msgid "Pad object gap"
 msgstr "Espacio del pad con el objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2797
+#: src/libslic3r/PrintConfig.cpp:2961
 msgid "Pad wall height"
 msgstr "Altura de la pared del pad"
 
-#: src/libslic3r/PrintConfig.cpp:2844
+#: src/libslic3r/PrintConfig.cpp:3008
 msgid "Pad wall slope"
 msgstr "Pendiente de la pared del pad"
 
-#: src/libslic3r/PrintConfig.cpp:2787
+#: src/libslic3r/PrintConfig.cpp:2951
 msgid "Pad wall thickness"
 msgstr "Espesor de la pared del pad"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Page Down"
 msgstr "Page Down"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Page Up"
 msgstr "Page Up"
 
-#: src/slic3r/GUI/Field.cpp:139
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33
+msgid "Paint-on supports"
+msgstr "Soportes que se pintan"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:178
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:159
+msgid "Paints all facets inside, regardless of their orientation."
+msgstr "Pinta todas las caras del interior, independientemente de su orientación."
+
+#: src/slic3r/GUI/Field.cpp:187
 msgid "parameter name"
 msgstr "nombre del parámetro"
 
-#: src/slic3r/GUI/Field.cpp:243
+#: src/slic3r/GUI/Field.cpp:291
 msgid "Parameter validation"
 msgstr "Validación de parámetros"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Part"
 msgstr "Pieza"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2494
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2886
 msgid "Part manipulation"
 msgstr "Manipulación de piezas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2483
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2875
 msgid "Part Settings to modify"
 msgstr "Configuraciones de piezas para modificar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4514
+#: src/libslic3r/PrintConfig.cpp:138
+msgid "Password"
+msgstr "Contraseña"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4880
 msgid "Paste"
 msgstr "Pegar"
 
-#: src/slic3r/GUI/MainFrame.cpp:592
+#: src/slic3r/GUI/MainFrame.cpp:1198
 msgid "Paste clipboard"
 msgstr "Pegar portapapeles"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
 msgid "Paste from clipboard"
 msgstr "Pegar desde el portapapeles"
 
-#: src/slic3r/GUI/Plater.cpp:5606
+#: src/slic3r/GUI/Plater.cpp:5803
 msgid "Paste From Clipboard"
 msgstr "Pegar Desde Portapapeles"
 
-#: src/libslic3r/PrintConfig.cpp:2002
+#: src/libslic3r/PrintConfig.cpp:2144
 msgid "Pattern"
 msgstr "Patrón"
 
-#: src/libslic3r/PrintConfig.cpp:1891
+#: src/libslic3r/PrintConfig.cpp:2033
 msgid "Pattern angle"
 msgstr "Ángulo del patrón"
 
-#: src/libslic3r/PrintConfig.cpp:2016
+#: src/libslic3r/PrintConfig.cpp:2158
 msgid "Pattern spacing"
 msgstr "Espaciado entre patrones"
 
-#: src/libslic3r/PrintConfig.cpp:2004
+#: src/libslic3r/PrintConfig.cpp:2146
 msgid "Pattern used to generate support material."
 msgstr "Patrón utilizado para generar material de soporte."
 
-#: src/slic3r/GUI/Plater.cpp:1261
+#: src/slic3r/GUI/GCodeViewer.cpp:2437 src/slic3r/GUI/GCodeViewer.cpp:2460
+#: src/slic3r/GUI/Plater.cpp:1199
 msgid "Pause"
 msgstr "Pausa"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1009
+#: src/slic3r/GUI/DoubleSlider.cpp:1133
 msgid "Pause print (\"%1%\")"
 msgstr "Pausar impresión (\"%1%\")"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:934 src/slic3r/GUI/GLCanvas3D.cpp:943
-#: src/slic3r/GUI/GLCanvas3D.cpp:982
+#: src/slic3r/GUI/Tab.cpp:2209 src/libslic3r/PrintConfig.cpp:1969
+msgid "Pause Print G-code"
+msgstr "Pausar Código G de Impresión"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
+#: src/slic3r/GUI/GLCanvas3D.cpp:988
 msgid "Pause print or custom G-code"
 msgstr "Pausar impresión o código G personalizado"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:175
+#: src/libslic3r/PrintConfig.cpp:1147
+msgid "Percent of a flow rate relative to object's normal layer height."
+msgstr "Porcentaje de caudal relativo a la altura normal de la capa del objeto."
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2233
+msgid "Percentage"
+msgstr "Porcentaje"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:177
 msgid "Perform cut"
 msgstr "Realizar corte"
 
-#: src/libslic3r/PrintConfig.cpp:2927
+#: src/libslic3r/PrintConfig.cpp:3091
 msgid "Performance vs accuracy of calculation. Lower values may produce unwanted artifacts."
 msgstr "Rendimiento vs precisión de cálculo. Los valores más bajos pueden producir artefactos no deseados."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:237 src/libslic3r/ExtrusionEntity.cpp:310
+#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:336
 msgid "Perimeter"
 msgstr "Perímetro"
 
-#: src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1516
 msgid "Perimeter extruder"
 msgstr "Extrusor para perímetros"
 
-#: src/slic3r/GUI/PresetHints.cpp:165
+#: src/slic3r/GUI/PresetHints.cpp:164
 msgid "perimeters"
 msgstr "perímetros"
 
-#: src/libslic3r/PrintConfig.cpp:1399 src/libslic3r/PrintConfig.cpp:1417
-#: src/libslic3r/PrintConfig.cpp:1430 src/libslic3r/PrintConfig.cpp:1440
+#: src/libslic3r/PrintConfig.cpp:1507 src/libslic3r/PrintConfig.cpp:1525
+#: src/libslic3r/PrintConfig.cpp:1538 src/libslic3r/PrintConfig.cpp:1548
 msgid "Perimeters"
 msgstr "Perímetros"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:860
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:159
+msgid "Physical Printer"
+msgstr "Impresora Física"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:789
+#: src/slic3r/GUI/PresetComboBoxes.cpp:948
+msgid "Physical printers"
+msgstr "Impresoras físicas"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1226
 #, c-format
 msgid "Pick another vendor supported by %s"
 msgstr "Elije otro proveedor compatible con% s"
@@ -5360,126 +6249,148 @@ msgstr "Elije otro proveedor compatible con% s"
 msgid "Picture sizes to be stored into a .gcode and .sl1 files"
 msgstr "Tamaños de imagen para almacenar en un archivo .gcode y .sl1"
 
-#: src/libslic3r/PrintConfig.cpp:2681
+#: src/libslic3r/PrintConfig.cpp:2822
+msgid "Pillar connection mode"
+msgstr "Modo de conexión del pilar"
+
+#: src/libslic3r/PrintConfig.cpp:2791
+msgid "Pillar diameter"
+msgstr "Diámetro del pilar"
+
+#: src/libslic3r/PrintConfig.cpp:2845
 msgid "Pillar widening factor"
 msgstr "Factor de ensanchamiento del pilar"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:330
+#: src/slic3r/GUI/ConfigManipulation.cpp:335
 msgid "Pinhead diameter should be smaller than the pillar diameter."
 msgstr "El diámetro de la cabeza del pin debe ser menor que el diámetro del pilar."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:79
+#: src/libslic3r/PrintConfig.cpp:2763
+msgid "Pinhead front diameter"
+msgstr "Diámetro frontal de la cabeza"
+
+#: src/libslic3r/PrintConfig.cpp:2781
+msgid "Pinhead width"
+msgstr "Ancho de la cabeza"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:110
 msgid "Place bearings in slots and resume printing"
 msgstr "Coloca los rodamientos en las ranuras y sigue imprimiendo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41
 msgid "Place on face"
 msgstr "Colocar en la cara"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:192 src/slic3r/GUI/MainFrame.cpp:204
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:190 src/slic3r/GUI/MainFrame.cpp:340
+#: src/slic3r/GUI/MainFrame.cpp:352
 msgid "Plater"
 msgstr "Plataforma"
 
-#: src/slic3r/GUI/GUI_App.cpp:1085
+#: src/slic3r/GUI/GUI_App.cpp:1877
 msgid "Please check and fix your object list."
 msgstr "Por favor comprueba y soluciona tu lista de objetos."
 
-#: src/slic3r/GUI/Plater.cpp:2312 src/slic3r/GUI/Tab.cpp:2959
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2255
+#: src/slic3r/GUI/Tab.cpp:3188
 msgid "Please check your object list before preset changing."
 msgstr "Por favor comprueba tu lista de objetos antes de cambiar los ajustes iniciales."
 
-#: src/slic3r/GUI/Plater.cpp:3286
+#: src/slic3r/GUI/Plater.cpp:3089
 msgid "Please select the file to reload"
 msgstr "Por favor selecciona el archivo a volver a cargar"
 
-#: src/slic3r/GUI/AboutDialog.cpp:39 src/slic3r/GUI/AboutDialog.cpp:291
+#: src/slic3r/GUI/AboutDialog.cpp:43 src/slic3r/GUI/AboutDialog.cpp:48
+#: src/slic3r/GUI/AboutDialog.cpp:317
 msgid "Portions copyright"
 msgstr "Porciones del copyright"
 
-#: src/libslic3r/PrintConfig.cpp:2400
+#: src/libslic3r/PrintConfig.cpp:2543
 msgid "Portrait"
 msgstr "Retrato"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:215
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:457
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:223
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:505
 msgid "Position"
 msgstr "Posición"
 
-#: src/slic3r/GUI/Tab.cpp:2367
+#: src/slic3r/GUI/Tab.cpp:2536
 msgid "Position (for multi-extruder printers)"
 msgstr "Posición (para impresoras con múltiples extrusores )"
 
-#: src/libslic3r/PrintConfig.cpp:1623
+#: src/libslic3r/PrintConfig.cpp:1731
 msgid "Position of perimeters starting points."
 msgstr "Posición de los puntos de inicio del perímetro."
 
-#: src/libslic3r/PrintConfig.cpp:2224
+#: src/libslic3r/PrintConfig.cpp:2367
 msgid "Position X"
 msgstr "Posición X"
 
-#: src/libslic3r/PrintConfig.cpp:2231
+#: src/libslic3r/PrintConfig.cpp:2374
 msgid "Position Y"
 msgstr "Posición Y"
 
-#: src/slic3r/GUI/Tab.cpp:1245 src/libslic3r/PrintConfig.cpp:1453
+#: src/slic3r/GUI/Tab.cpp:1575 src/libslic3r/PrintConfig.cpp:1561
 msgid "Post-processing scripts"
 msgstr "Scripts de postprocesamiento"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Pre&view"
 msgstr "Pre&visualizar"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:149 src/slic3r/GUI/Preferences.cpp:10
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 src/slic3r/GUI/Preferences.cpp:12
 msgid "Preferences"
 msgstr "Preferencias"
 
-#: src/libslic3r/PrintConfig.cpp:1641
+#: src/libslic3r/PrintConfig.cpp:1749
 msgid "Preferred direction of the seam"
 msgstr "Dirección preferida de la costura"
 
-#: src/libslic3r/PrintConfig.cpp:1652
+#: src/libslic3r/PrintConfig.cpp:1760
 msgid "Preferred direction of the seam - jitter"
 msgstr "Dirección preferida de la unión - jitter"
 
-#: src/libslic3r/PrintObject.cpp:255
+#: src/libslic3r/PrintObject.cpp:261
 msgid "Preparing infill"
 msgstr "Preparando relleno"
 
-#: src/slic3r/GUI/Tab.cpp:2920
-#, c-format
-msgid "Preset (%s)"
-msgstr "Ajuste inicial (%s)"
+#: src/slic3r/GUI/GUI_App.cpp:855
+msgid "Preparing settings tabs"
+msgstr "Preparando pestañas de configuración"
 
-#: src/slic3r/GUI/Tab.cpp:3082
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1009
+msgid "Preset \"%1%\" has the following unsaved changes:"
+msgstr "El ajuste preestablecido \"%1%\" tiene los siguientes cambios sin guardar:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1014
+msgid "Preset \"%1%\" is not compatible with the new print profile and it has the following unsaved changes:"
+msgstr "El ajuste preestablecido \"%1%\" no es compatible con el nuevo perfil de impresión y tiene los siguientes cambios sin guardar:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1013
+msgid "Preset \"%1%\" is not compatible with the new printer profile and it has the following unsaved changes:"
+msgstr "El ajuste preestablecido \"%1%\" no es compatible con el nuevo perfil de impresora y tiene los siguientes cambios sin guardar:"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:136
+msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
+msgstr "El ajuste predeterminado con el nombre \"%1%\" ya existe y no es compatible con la impresora seleccionada."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:148
 msgid "Preset with name \"%1%\" already exists."
 msgstr "Ya existe un preset con el nombre \"% 1%\"."
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/SavePresetDialog.cpp:219
 msgctxt "PresetName"
 msgid "Copy"
 msgstr "Copiar"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
 msgid "Press to activate deselection rectangle"
 msgstr "Presionar para activar el rectángulo de deselección"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
-msgid "Press to activate one direction scaling in Gizmo scale"
-msgstr "Presiona para activar la escala de una dirección en la escala Gizmo"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:156
 msgid "Press to activate selection rectangle"
 msgstr "Presionar para activar el rectángulo de selección"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
-msgid ""
-"Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\n"
-"selected objects around their own center"
-msgstr ""
-"Presionar para escalar (en escalar Gizmo) o rotar(en rotar Gizmo)\n"
-"objetos seleccionados alrededor de su propio centro"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:155
 msgid ""
 "Press to select multiple objects\n"
 "or move multiple objects with mouse"
@@ -5487,164 +6398,189 @@ msgstr ""
 "Presiona para seleccionar objetos múltiples\n"
 "o mover objetos múltiples con el ratón"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
-#, no-c-format
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
 msgid ""
-"Press to snap by 5% in Gizmo scale\n"
-"or to snap by 1mm in Gizmo move"
+"Press to speed up 5 times while moving thumb\n"
+"with arrow keys or mouse wheel"
 msgstr ""
-"Presiona para ajustar un 5% en escala Gizmo\n"
-"o para ajustar cada 1mm en mover Gizmo"
+"Presiona para acelerar 5 veces mientras mueves el pulgar\n"
+"con teclas de flecha o rueda del ratón"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4105
-#: src/slic3r/GUI/Tab.cpp:2390
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 src/slic3r/GUI/Plater.cpp:4052
+#: src/slic3r/GUI/Tab.cpp:2559
 msgid "Preview"
 msgstr "Previsualización"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
 msgid "Preview hollowed and drilled model"
 msgstr "Vista preliminar del modelo con su interior vaciado y taladrado"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid "Previously sliced file ("
 msgstr "Archivo anterior laminado ("
 
-#: src/libslic3r/PrintConfig.cpp:1851
+#: src/libslic3r/PrintConfig.cpp:1993
 msgid "Prime all printing extruders"
 msgstr "Cebar todos los extrusores de impresión"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1521
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/libslic3r/Preset.cpp:1300
 msgid "print"
 msgstr "imprimir"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/GCodeViewer.cpp:2436 src/slic3r/GUI/GCodeViewer.cpp:2451
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Print &Host Upload Queue"
 msgstr "Cola de subida al &host de impresión"
 
-#: src/libslic3r/PrintConfig.cpp:471
+#: src/libslic3r/PrintConfig.cpp:507
 msgid "Print contour perimeters from the outermost one to the innermost one instead of the default inverse order."
 msgstr "Imprimir perímetros de contorno desde el más externo hasta el más interno en lugar del orden inverso predeterminado."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Print Diameters"
 msgstr "Diámetros de impresión"
 
-#: src/slic3r/GUI/Tab.cpp:1944 src/slic3r/GUI/Tab.cpp:2123
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:209 src/slic3r/GUI/Tab.cpp:2024
 msgid "Print Host upload"
 msgstr "Subida al host de impresión"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:142
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
 #: src/slic3r/GUI/PrintHostDialogs.cpp:136
 msgid "Print host upload queue"
 msgstr "Cola de subida al host de impresión"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:970
+#: src/slic3r/GUI/DoubleSlider.cpp:1093
 msgid "Print mode"
 msgstr "Modo de impresión"
 
-#: src/slic3r/GUI/Tab.hpp:328 src/slic3r/GUI/Tab.hpp:431
+#: src/slic3r/GUI/GCodeViewer.cpp:2579 src/slic3r/GUI/GUI_Preview.cpp:1476
+msgid "Print pauses"
+msgstr "Pausas de impresión"
+
+#: src/slic3r/GUI/Tab.hpp:378 src/slic3r/GUI/Tab.hpp:502
 msgid "Print Settings"
 msgstr "Configuración de Impresión"
 
-#: src/slic3r/GUI/Plater.cpp:815
+#: src/slic3r/GUI/Plater.cpp:690
 msgid "Print settings"
 msgstr "Configuración de impresión"
 
-#: src/slic3r/GUI/Tab.cpp:1478
+#: src/slic3r/GUI/GLCanvas3D.cpp:4303 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Print Settings Tab"
+msgstr "Pestaña Ajustes Impresión"
+
+#: src/slic3r/GUI/Tab.cpp:1824
 msgid "Print speed override"
 msgstr "Anular la velocidad de impresión"
 
-#: src/libslic3r/GCode.cpp:638
+#: src/libslic3r/GCode.cpp:623
 msgid "Print z"
 msgstr "Imprimir z"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Print&er Settings Tab"
 msgstr "Configuración de Impr&esión"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1621
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1750
 msgid "Printable"
 msgstr "Imprimible"
 
-#: src/slic3r/GUI/Plater.cpp:819
+#: src/slic3r/GUI/Plater.cpp:694
 msgid "Printer"
 msgstr "Impresora"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1525
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/libslic3r/Preset.cpp:1304
 msgid "printer"
 msgstr "impresora"
 
-#: src/libslic3r/PrintConfig.cpp:2439 src/libslic3r/PrintConfig.cpp:2440
+#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2583
 msgid "Printer absolute correction"
 msgstr "Corrección absoluta de la impresora"
 
-#: src/libslic3r/PrintConfig.cpp:2456 src/libslic3r/PrintConfig.cpp:2457
+#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2600
 msgid "Printer gamma correction"
 msgstr "Corrección gamma de la impresora"
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1294
 msgid "printer model"
 msgstr "modelo de impresora"
 
-#: src/libslic3r/PrintConfig.cpp:1472
+#: src/libslic3r/PrintConfig.cpp:1580
 msgid "Printer notes"
 msgstr "Notas de la impresora"
 
-#: src/libslic3r/PrintConfig.cpp:2431 src/libslic3r/PrintConfig.cpp:2432
-#: src/libslic3r/PrintConfig.cpp:2433
+#: src/libslic3r/PrintConfig.cpp:144
+msgid "Printer preset name"
+msgstr "Nombre predeterminado de la impresora"
+
+#: src/libslic3r/PrintConfig.cpp:2574 src/libslic3r/PrintConfig.cpp:2575
+#: src/libslic3r/PrintConfig.cpp:2576
 msgid "Printer scaling correction"
 msgstr "Corrección de escala de la impresora"
 
-#: src/slic3r/GUI/Tab.hpp:391
+#: src/slic3r/GUI/Tab.hpp:453
 msgid "Printer Settings"
 msgstr "Configuración de la Impresora"
 
+#: src/slic3r/GUI/GLCanvas3D.cpp:4305 src/slic3r/GUI/GLCanvas3D.cpp:4941
+msgid "Printer Settings Tab"
+msgstr "Pestaña Ajustes Impresora"
+
 #: src/libslic3r/PrintConfig.cpp:43 src/libslic3r/PrintConfig.cpp:44
 msgid "Printer technology"
 msgstr "Tecnología de la impresora"
 
-#: src/libslic3r/PrintConfig.cpp:1466
+#: src/libslic3r/PrintConfig.cpp:1574
 msgid "Printer type"
 msgstr "Tipo de impresora"
 
-#: src/libslic3r/PrintConfig.cpp:1487
+#: src/libslic3r/PrintConfig.cpp:1595
 msgid "Printer variant"
 msgstr "Modelo de impresora"
 
-#: src/libslic3r/PrintConfig.cpp:1481
+#: src/libslic3r/PrintConfig.cpp:1589
 msgid "Printer vendor"
 msgstr "Fabricante de la impresora"
 
-#: src/libslic3r/Print.cpp:1388
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:476
+msgid "Printer with name \"%1%\" already exists."
+msgstr "La impresora con nombre \"%1%\" ya existe."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:587
+msgid "Printer:"
+msgstr "Impresora:"
+
+#: src/libslic3r/Print.cpp:1414
 msgid "Printing with multiple extruders of differing nozzle diameters. If support is to be printed with the current extruder (support_material_extruder == 0 or support_material_interface_extruder == 0), all nozzles have to be of the same diameter."
 msgstr "Imprimir con múltiples extrusoras de diferentes diámetros de boquilla. Si el soporte debe imprimirse con la extrusora actual (support_material_extruder == 0 o support_material_interface_extruder == 0), todas las boquillas deben ser del mismo diámetro."
 
 #. TRN "Processing input_file_basename"
-#: src/slic3r/GUI/MainFrame.cpp:849
+#: src/slic3r/GUI/MainFrame.cpp:1550
 #, c-format
 msgid "Processing %s"
 msgstr "Procesando %s"
 
-#: src/slic3r/GUI/Plater.cpp:2283
-#, c-format
-msgid "Processing input file %s"
-msgstr "Procesando el archivo de entrada %s"
-
-#: src/libslic3r/PrintObject.cpp:108
+#: src/libslic3r/PrintObject.cpp:114
 msgid "Processing triangulated mesh"
 msgstr "Procesando malla triangulada"
 
-#: src/slic3r/GUI/Tab.cpp:1259 src/slic3r/GUI/Tab.cpp:1549
-#: src/slic3r/GUI/Tab.cpp:2020 src/slic3r/GUI/Tab.cpp:2136
-#: src/slic3r/GUI/Tab.cpp:3544 src/slic3r/GUI/Tab.cpp:3672
+#: src/slic3r/GUI/Tab.cpp:1589 src/slic3r/GUI/Tab.cpp:1896
+#: src/slic3r/GUI/Tab.cpp:2229 src/slic3r/GUI/Tab.cpp:2305
+#: src/slic3r/GUI/Tab.cpp:3960 src/slic3r/GUI/Tab.cpp:4091
 msgid "Profile dependencies"
 msgstr "Dependencias de perfil"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:566
+#: src/slic3r/GUI/ConfigWizard.cpp:590
 msgid "Profile:"
 msgstr "Perfil:"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:150
+#: src/slic3r/GUI/PrintHostDialogs.cpp:148
 msgid "Progress"
 msgstr "Progreso"
 
@@ -5652,23 +6588,35 @@ msgstr "Progreso"
 msgid "Progress:"
 msgstr "Progreso:"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Prusa 3D &Drivers"
 msgstr "Controladores de Prusa 3&D"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1995
+#: src/slic3r/GUI/ConfigWizard.cpp:2506
 msgid "Prusa FFF Technology Printers"
 msgstr "Impresoras Prusa de tecnología FFF"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1998
+#: src/slic3r/GUI/ConfigWizard.cpp:2509
 msgid "Prusa MSLA Technology Printers"
 msgstr "Impresoras Prusa de tecnología MSLA"
 
-#: src/slic3r/GUI/AboutDialog.cpp:260
+#: src/slic3r/Utils/Http.cpp:78
+msgid "PrusaSlicer detected system SSL certificate store in: %1%"
+msgstr "PrusaSlicer detectó el almacenamiento de certificados SSL del sistema en: %1%"
+
+#: src/slic3r/GUI/GUI_Init.cpp:85 src/slic3r/GUI/GUI_Init.cpp:88
+msgid "PrusaSlicer GUI initialization failed"
+msgstr "Hubo un error al abrir el GUI de PrusaSlicer"
+
+#: src/slic3r/GUI/AboutDialog.cpp:285
 msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
 msgstr "PrusaSlicer está basado en Slic3r de Alessandro Ranellucci y la comunidad RepRap."
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:284
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:525
+msgid "PrusaSlicer is closing: Unsaved Changes"
+msgstr "PrusaSlicer se está cerrando: Cambios no guardados"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:259
 #, c-format
 msgid ""
 "PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n"
@@ -5681,7 +6629,11 @@ msgstr ""
 msgid "PrusaSlicer version"
 msgstr "Versión PrusaSlicer"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:815
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:662
+msgid "PrusaSlicer will remember your action."
+msgstr "PrusaSlicer recordará tu acción."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1174
 msgid ""
 "PrusaSlicer's user interfaces comes in three variants:\n"
 "Simple, Advanced, and Expert.\n"
@@ -5691,64 +6643,80 @@ msgstr ""
 "Simple, avanzado y experto.\n"
 "El modo Simple muestra solo las configuraciones usadas con más frecuencia relevantes para la impresión 3D normal. Los otros dos ofrecen ajustes progresivamente más sofisticados, son adecuados para usuarios avanzados y expertos, respectivamente."
 
-#: src/libslic3r/PrintConfig.cpp:2254
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:668
+msgid "PrusaSlicer: Don't ask me again"
+msgstr "PrusaSlicer: No me vuelvas a preguntar"
+
+#: src/libslic3r/PrintConfig.cpp:2397
 msgid "Purging after toolchange will done inside this object's infills. This lowers the amount of waste but may result in longer print time  due to additional travel moves."
 msgstr "La purga después del cambio de herramientas se realizará dentro de los rellenos de este objeto. Esto reduce la cantidad de desperdicio, pero puede resultar en un tiempo de impresión más largo debido a movimientos de viaje adicionales."
 
-#: src/slic3r/GUI/Plater.cpp:544
+#: src/slic3r/GUI/Plater.cpp:410
 msgid "Purging volumes"
 msgstr "Volúmenes de purga"
 
-#: src/libslic3r/PrintConfig.cpp:2207
+#: src/libslic3r/PrintConfig.cpp:2350
 msgid "Purging volumes - load/unload volumes"
 msgstr "Volumen de purga - volumen de carga/descarga"
 
-#: src/libslic3r/PrintConfig.cpp:2214
+#: src/libslic3r/PrintConfig.cpp:2357
 msgid "Purging volumes - matrix"
 msgstr "Volúmenes de purga - matriz"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:1201
+msgid "Purpose of Machine Limits"
+msgstr "Propósito de los Límites Máquina"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
 msgid "Quality"
 msgstr "Calidad"
 
-#: src/slic3r/GUI/Tab.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:1402
 msgid "Quality (slower slicing)"
 msgstr "Calidad (laminado más lento)"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:273
+#: src/slic3r/GUI/GLCanvas3D.cpp:260
 msgid "Quality / Speed"
 msgstr "Calidad / Velocidad"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1182
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1530
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1536
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1849
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:61
+msgid "Quick"
+msgstr "Rápido"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1306
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1661
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1667
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2008
 #, c-format
 msgid "Quick Add Settings (%s)"
 msgstr "Añadir ajustes rápidos (%s)"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Quick Slice"
 msgstr "Laminado rápido"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Quick Slice and Save As"
 msgstr "Laminado rápido y Guardar como"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
 #, c-format
 msgid "Quit %s"
 msgstr "Cerrar %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:294 src/libslic3r/PrintConfig.cpp:511
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Quit, I will move my data now"
+msgstr "Termino, moveré mis datos ahora"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:280 src/libslic3r/PrintConfig.cpp:547
 msgid "Radius"
 msgstr "Radio"
 
-#: src/slic3r/GUI/Tab.cpp:1127
+#: src/slic3r/GUI/Tab.cpp:1456
 msgid "Raft"
 msgstr "Balsa"
 
-#: src/libslic3r/PrintConfig.cpp:1501
+#: src/libslic3r/PrintConfig.cpp:1609
 msgid "Raft layers"
 msgstr "Capas de balsa"
 
@@ -5774,27 +6742,27 @@ msgstr "Espaciado de la linea de empuje"
 msgid "Ramming line width"
 msgstr "Ancho de la linea de empuje"
 
-#: src/libslic3r/PrintConfig.cpp:694
+#: src/libslic3r/PrintConfig.cpp:730
 msgid "Ramming parameters"
 msgstr "Parámetros de empuje"
 
-#: src/slic3r/GUI/Tab.cpp:1505
+#: src/slic3r/GUI/Tab.cpp:1850
 msgid "Ramming settings"
 msgstr "Ajustes de empuje"
 
-#: src/libslic3r/PrintConfig.cpp:1629
+#: src/libslic3r/PrintConfig.cpp:1737
 msgid "Random"
 msgstr "Aleatorio"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 msgid "Range"
 msgstr "Rango"
 
-#: src/libslic3r/SLAPrintSteps.cpp:65
+#: src/libslic3r/SLAPrintSteps.cpp:66
 msgid "Rasterizing layers"
 msgstr "Rastrerizando capas"
 
-#: src/slic3r/GUI/MainFrame.cpp:596
+#: src/slic3r/GUI/MainFrame.cpp:1202
 msgid "Re&load from disk"
 msgstr "Recargar desde e&l disco"
 
@@ -5806,210 +6774,243 @@ msgstr "Reconfigurar"
 msgid "Ready"
 msgstr "Listo"
 
-#: src/slic3r/GUI/Plater.cpp:3115
+#: src/slic3r/GUI/Plater.cpp:2915
 msgid "Ready to slice"
 msgstr "Preparado para laminar"
 
-#: src/slic3r/GUI/MainFrame.cpp:669 src/libslic3r/PrintConfig.cpp:1632
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
+#: src/libslic3r/PrintConfig.cpp:1740
 msgid "Rear"
 msgstr "Trasera"
 
-#: src/slic3r/GUI/MainFrame.cpp:669
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
 msgid "Rear View"
 msgstr "Vista trasera"
 
-#: src/slic3r/GUI/MainFrame.cpp:413
+#: src/slic3r/GUI/MainFrame.cpp:994
 msgid "Recent projects"
 msgstr "Proy&ectos recientes"
 
-#: src/slic3r/GUI/PresetHints.cpp:263
+#: src/slic3r/GUI/PresetHints.cpp:262
 #, c-format
 msgid "Recommended object thin wall thickness for layer height %.2f and"
 msgstr "Espesor de pared delgada del objeto recomendado para una altura de capa %.2f y"
 
-#: src/slic3r/GUI/PresetHints.cpp:274
+#: src/slic3r/GUI/PresetHints.cpp:273
 msgid "Recommended object thin wall thickness: Not available due to excessively small extrusion width."
 msgstr "Espesor de pared delgada del objeto recomendada: No disponible debido al ancho de extrusión excesivamente pequeño."
 
-#: src/slic3r/GUI/PresetHints.cpp:247
+#: src/slic3r/GUI/PresetHints.cpp:246
 msgid "Recommended object thin wall thickness: Not available due to invalid layer height."
 msgstr "Grosor recomendado de la pared del objeto recomendado: no disponible debido a la altura de capa no válida."
 
-#: src/slic3r/GUI/GUI_App.cpp:450 src/slic3r/GUI/GUI_App.cpp:459
+#: src/slic3r/GUI/GUI_App.cpp:1102 src/slic3r/GUI/GUI_App.cpp:1115
 msgid "Recreating"
 msgstr "Recreando"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:73
+#: src/slic3r/GUI/BedShapeDialog.cpp:141
 msgid "Rectangular"
 msgstr "Rectangular"
 
-#: src/libslic3r/PrintConfig.cpp:425 src/libslic3r/PrintConfig.cpp:843
-#: src/libslic3r/PrintConfig.cpp:2009
+#: src/libslic3r/PrintConfig.cpp:460 src/libslic3r/PrintConfig.cpp:881
+#: src/libslic3r/PrintConfig.cpp:2151
 msgid "Rectilinear"
 msgstr "Rectilíneo"
 
-#: src/libslic3r/PrintConfig.cpp:2010
+#: src/libslic3r/PrintConfig.cpp:2152
 msgid "Rectilinear grid"
 msgstr "Rejilla rectilínea"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4657 src/slic3r/GUI/KBShortcutsDialog.cpp:131
-#: src/slic3r/GUI/MainFrame.cpp:584
+#: src/slic3r/GUI/GLCanvas3D.cpp:5067 src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/MainFrame.cpp:1190
 msgid "Redo"
 msgstr "Rehacer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Redo %1$d Action"
 msgid_plural "Redo %1$d Actions"
 msgstr[0] "Rehacer %1$d Acción"
 msgstr[1] "Rehacer %1$d Acciones"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Redo History"
 msgstr "Rehacer Historia"
 
-#: src/slic3r/GUI/Tab.cpp:1098
+#: src/slic3r/GUI/Tab.cpp:1426
 msgid "Reducing printing time"
 msgstr "Reduciendo el tiempo de impresión"
 
-#: src/slic3r/GUI/Plater.cpp:3452
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
+msgid "Refresh Printers"
+msgstr "Actualizar lista de impresoras"
+
+#: src/libslic3r/PrintConfig.cpp:145
+msgid "Related printer preset name"
+msgstr "Nombre predeterminado de la impresora relacionada"
+
+#: src/slic3r/GUI/Plater.cpp:3257
 msgid "Reload all from disk"
 msgstr "Recargar todo desde el disco"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:798 src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3225
-#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/ConfigWizard.cpp:1157 src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3028
+#: src/slic3r/GUI/Plater.cpp:3852 src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload from disk"
 msgstr "Recargar desde el disco"
 
-#: src/slic3r/GUI/Plater.cpp:3339
+#: src/slic3r/GUI/Plater.cpp:3142
 msgid "Reload from:"
 msgstr "Recargar desde:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:129
 msgid "Reload plater from disk"
 msgstr "Recargar la base desde el disco"
 
-#: src/slic3r/GUI/MainFrame.cpp:597
+#: src/slic3r/GUI/MainFrame.cpp:1203
 msgid "Reload the plater from disk"
 msgstr "Cargar la base del disco"
 
-#: src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload the selected object from disk"
 msgstr "Recargar el objeto seleccionado del disco"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3934
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3852
 msgid "Reload the selected volumes from disk"
 msgstr "Vuelve a cargar los volúmenes seleccionados desde el disco"
 
-#: src/slic3r/GUI/Preferences.cpp:39
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Remaining time"
+msgstr "Tiempo restante"
+
+#: src/slic3r/GUI/GUI_App.cpp:720 src/slic3r/GUI/UnsavedChangesDialog.cpp:653
+msgid "Remember my choice"
+msgstr "Recordar mi elección"
+
+#: src/slic3r/GUI/Preferences.cpp:52
 msgid "Remember output directory"
 msgstr "Recordar el directorio de salida"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/MainFrame.cpp:166
+msgid "Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases"
+msgstr "Recuerda buscar actualizaciones en https://github.com/prusa3d/PrusaSlicer/releases"
+
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "remove"
 msgstr "eliminar"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:190 src/slic3r/GUI/BedShapeDialog.cpp:269
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/BedShapeDialog.cpp:413
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Remove"
 msgstr "Eliminar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
 msgid "Remove all holes"
 msgstr "Elimina todos los huecos"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
 msgid "Remove all points"
 msgstr "Eliminar todos los puntos"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:246
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:35
+msgid "Remove all selection"
+msgstr "Eliminar toda la selección"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:239
 msgid "Remove detail"
 msgstr "Retirar detalle"
 
-#: src/slic3r/GUI/Plater.cpp:879
-msgid "Remove device"
-msgstr "Eliminar dispositivo"
-
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:182
 msgid "Remove extruder from sequence"
 msgstr "Retirar extrusor de la secuencia"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4537 src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/GLCanvas3D.cpp:4903 src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove instance"
 msgstr "Retirar una copia"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
 msgid "Remove Instance of the selected object"
 msgstr "Retirar instancia del objeto seleccionado"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:153
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:161
 msgid "Remove layer range"
 msgstr "Retirar rango de capas"
 
-#: src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove one instance of the selected object"
 msgstr "Eliminar una instancia del objeto seleccionado"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:95
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:98
 msgid "Remove parameter"
 msgstr "Eliminar parámetro"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Remove point"
 msgstr "Retirar punto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Remove point from selection"
 msgstr "Retirar punto de selección"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
 msgid "Remove selected holes"
 msgstr "Elimina huecos seleccionados"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1371
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218
 msgid "Remove selected points"
 msgstr "Eliminar puntos seleccionados"
 
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:34
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:368
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:378
+msgid "Remove selection"
+msgstr "Eliminar selección"
+
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
 msgid "Remove the selected object"
 msgstr "Eliminar el objeto seleccionado"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:453
+#: src/slic3r/GUI/ConfigWizard.cpp:456
 msgid "Remove user profiles (a snapshot will be taken beforehand)"
 msgstr "Eliminar perfiles de usuario (se tomará una instantánea de antemano)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1765
 msgid "Rename"
 msgstr "Renombrar"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Object"
 msgstr "Renombrar Objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Sub-object"
 msgstr "Renombrar Sub-Objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Renaming"
 msgstr "Renombrar"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:115
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:150
 msgid "Renaming of the G-code after copying to the selected destination folder has failed. Current path is %1%.tmp. Please try exporting again."
 msgstr "El cambio de nombre del código G después de copiar en la carpeta de destino seleccionada ha fallado. La ruta actual es %1%.tmp. Intenta exportar de nuevo."
 
-#: src/libslic3r/PrintConfig.cpp:3515
+#: src/slic3r/GUI/Preferences.cpp:255
+msgid "Render"
+msgstr "Renderizar"
+
+#: src/libslic3r/PrintConfig.cpp:3720
 msgid "Render with a software renderer"
 msgstr "Renderizar con un software renderizador"
 
-#: src/libslic3r/PrintConfig.cpp:3516
+#: src/libslic3r/PrintConfig.cpp:3721
 msgid "Render with a software renderer. The bundled MESA software renderer is loaded instead of the default OpenGL driver."
 msgstr "Render con un software de renderizado. El procesador de software MESA incluido se carga en lugar del controlador OpenGL predeterminado."
 
-#: src/slic3r/GUI/MainFrame.cpp:911 src/libslic3r/PrintConfig.cpp:3447
+#: src/slic3r/GUI/MainFrame.cpp:1612 src/libslic3r/PrintConfig.cpp:3646
 msgid "Repair"
 msgstr "Reparar"
 
@@ -6033,38 +7034,38 @@ msgstr "El archivo 3MF reparado no contiene ningún volumen"
 msgid "Repairing model by the Netfabb service"
 msgstr "Reparar el modelo mediante el servicio de Netfabb"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat last quick slice"
 msgstr "Repetir el último laminado rápido"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat Last Quick Slice"
 msgstr "Repetir el último laminado rápido"
 
-#: src/slic3r/GUI/Tab.cpp:3083
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:477
 msgid "Replace?"
 msgstr "¿Reemplazar?"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
 msgid "Report an I&ssue"
 msgstr "Informar de un &problema"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
 #, c-format
 msgid "Report an issue on %s"
 msgstr "Reportar un problema a %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:713
+#: src/slic3r/Utils/PresetUpdater.cpp:733
 #, c-format
 msgid "requires max. %s"
 msgstr "requiere max. %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:710
+#: src/slic3r/Utils/PresetUpdater.cpp:730
 #, c-format
 msgid "requires min. %s"
 msgstr "requiere min. %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:705
+#: src/slic3r/Utils/PresetUpdater.cpp:726
 #, c-format
 msgid "requires min. %s and max. %s"
 msgstr "requiere un min. %s y un max. %s"
@@ -6073,270 +7074,300 @@ msgstr "requiere un min. %s y un max. %s"
 msgid "Rescan"
 msgstr "Rescanear"
 
-#: src/slic3r/GUI/Tab.cpp:1906
-msgid "Rescan serial ports"
-msgstr "Vuelver a examinar los puertos serie"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:313
+#: src/slic3r/GUI/GLCanvas3D.cpp:299
 msgid "Reset"
 msgstr "Reset"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1373
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220
 msgid "Reset clipping plane"
 msgstr "Restablecer plano de recorte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:59
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:26
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
 msgid "Reset direction"
 msgstr "Restablecer dirección"
 
-#: src/slic3r/GUI/Plater.cpp:2723
+#: src/slic3r/GUI/Plater.cpp:2684
 msgid "Reset Project"
 msgstr "Reiniciar Proyecto"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:372
 msgid "Reset rotation"
 msgstr "Reiniciar rotación"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:394
 msgid "Reset Rotation"
 msgstr "Reiniciar rotación"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:397
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:399
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:407
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409
 msgid "Reset scale"
 msgstr "Reiniciar escala"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:252
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:136
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:118
+msgid "Reset selection"
+msgstr "Reiniciar selección"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:243
 msgid "Reset to base"
 msgstr "Reiniciar a la base"
 
-#: src/slic3r/GUI/Tab.cpp:2394
+#: src/slic3r/GUI/Tab.cpp:2564
 msgid "Reset to Filament Color"
 msgstr "Reiniciar Filament Color"
 
-#: src/libslic3r/PrintConfig.cpp:1511
+#: src/libslic3r/PrintConfig.cpp:1619
 msgid "Resolution"
 msgstr "Resolución"
 
-#: src/libslic3r/PrintConfig.cpp:1529
+#: src/libslic3r/PrintConfig.cpp:1637
 msgid "Retract amount before wipe"
 msgstr "Retracta cantidad antes de limpiar"
 
-#: src/libslic3r/PrintConfig.cpp:1537
+#: src/libslic3r/PrintConfig.cpp:1645
 msgid "Retract on layer change"
 msgstr "Retraer en el cambio de capa"
 
-#: src/slic3r/GUI/Tab.cpp:1324 src/slic3r/GUI/Tab.cpp:1383
-#: src/slic3r/GUI/Tab.cpp:2370
+#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/Tab.cpp:1670
+#: src/slic3r/GUI/Tab.cpp:2539
 msgid "Retraction"
 msgstr "Retracción"
 
-#: src/libslic3r/PrintConfig.cpp:1523
+#: src/libslic3r/PrintConfig.cpp:1631
 msgid "Retraction is not triggered when travel moves are shorter than this length."
 msgstr "La retracción no se activa cuando los movimientos de desplazamiento son más cortos que esta longitud."
 
-#: src/libslic3r/PrintConfig.cpp:1544
+#: src/libslic3r/PrintConfig.cpp:1652
 msgid "Retraction Length"
 msgstr "Longitud de retracción"
 
-#: src/libslic3r/PrintConfig.cpp:1552
+#: src/libslic3r/PrintConfig.cpp:1660
 msgid "Retraction Length (Toolchange)"
 msgstr "Longitud de retracción (cambio de herramienta)"
 
-#: src/libslic3r/PrintConfig.cpp:1604 src/libslic3r/PrintConfig.cpp:1605
+#: src/libslic3r/PrintConfig.cpp:1712 src/libslic3r/PrintConfig.cpp:1713
 msgid "Retraction Speed"
 msgstr "Velocidad de retracción"
 
-#: src/slic3r/GUI/Tab.cpp:2386
+#: src/slic3r/GUI/Tab.cpp:2555
 msgid "Retraction when tool is disabled (advanced settings for multi-extruder setups)"
 msgstr "Retracción cuando la herramienta está desactivada (configuraciones avanzadas para configuraciones de extrusores múltiples )"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:254
+#: src/slic3r/GUI/GCodeViewer.cpp:2528 src/slic3r/GUI/GUI_Preview.cpp:336
+#: src/slic3r/GUI/GUI_Preview.cpp:1472
 msgid "Retractions"
 msgstr "Retracciones"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/Preferences.cpp:198
+msgid "Reverse direction of zoom with mouse wheel"
+msgstr "Revertir zoom con la rueda del ratón"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4886
+msgid "Revert conversion from imperial units"
+msgstr "Revertir la conversión de unidades imperiales"
+
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right"
 msgstr "Derecha"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:402
+#: src/slic3r/GUI/GUI_ObjectList.cpp:449
 msgid "Right button click the icon to change the object printable property"
 msgstr "Clic con el botón derecho en el icono para cambiar la propiedad imprimible del objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:396
+#: src/slic3r/GUI/GUI_ObjectList.cpp:443
 msgid "Right button click the icon to change the object settings"
 msgstr "Clic del botón derecho en el ícono para cambiar los ajustes del objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:359
+#: src/slic3r/GUI/GUI_ObjectList.cpp:406
 msgid "Right button click the icon to fix STL through Netfabb"
 msgstr "Clic del botón derecho en el ícono para arreglar el STL a través de Netfabb"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Right click"
 msgstr "Click derecho"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:243
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:31
+msgid "Right mouse button"
+msgstr "Botón derecho del ratón"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:237
 msgid "Right mouse button:"
 msgstr "Botón derecho del ratón:"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right View"
 msgstr "Vista derecha"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:480
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:499
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:517
-#: src/libslic3r/PrintConfig.cpp:3451
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:513
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:527
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:546
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562
+#: src/libslic3r/PrintConfig.cpp:3650
 msgid "Rotate"
 msgstr "Girar"
 
-#: src/libslic3r/PrintConfig.cpp:3456
+#: src/libslic3r/PrintConfig.cpp:3655
 msgid "Rotate around X"
 msgstr "Rotar alrededor del eje X"
 
-#: src/libslic3r/PrintConfig.cpp:3461
+#: src/libslic3r/PrintConfig.cpp:3660
 msgid "Rotate around Y"
 msgstr "Rotar alrededor del eje Y"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:172
 msgid "Rotate lower part upwards"
 msgstr "Poner patas arriba"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Rotate selection 45 degrees CCW"
 msgstr "Gira la selección 45 grados en sentido antihorario"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Rotate selection 45 degrees CW"
 msgstr "Gira la selección 45 grados en sentido horario"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458
-#: src/slic3r/GUI/Mouse3DController.cpp:304
-#: src/slic3r/GUI/Mouse3DController.cpp:321
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:210
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:224
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:506
+#: src/slic3r/GUI/Mouse3DController.cpp:288
+#: src/slic3r/GUI/Mouse3DController.cpp:309
 msgid "Rotation"
 msgstr "Rotación"
 
-#: src/libslic3r/PrintConfig.cpp:3457
+#: src/libslic3r/PrintConfig.cpp:3656
 msgid "Rotation angle around the X axis in degrees."
 msgstr "Ángulo de rotación alrededor del eje X en grados."
 
-#: src/libslic3r/PrintConfig.cpp:3462
+#: src/libslic3r/PrintConfig.cpp:3661
 msgid "Rotation angle around the Y axis in degrees."
 msgstr "Ángulo de rotación alrededor del eje Y en grados."
 
-#: src/libslic3r/PrintConfig.cpp:3452
+#: src/libslic3r/PrintConfig.cpp:3651
 msgid "Rotation angle around the Z axis in degrees."
 msgstr "Ángulo de rotación alrededor del eje Z en grados."
 
-#: src/slic3r/GUI/GUI_App.cpp:797
+#: src/slic3r/GUI/GUI_App.cpp:1474
 #, c-format
 msgid "Run %s"
 msgstr "Ejecutar %s"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:128
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:478
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:520
 msgid "Running post-processing scripts"
 msgstr "Ejecutando scripts de post-procesamiento"
 
 #: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:83
-#: src/libslic3r/PrintConfig.cpp:644 src/libslic3r/PrintConfig.cpp:688
-#: src/libslic3r/PrintConfig.cpp:703 src/libslic3r/PrintConfig.cpp:2408
-#: src/libslic3r/PrintConfig.cpp:2417 src/libslic3r/PrintConfig.cpp:2527
-#: src/libslic3r/PrintConfig.cpp:2535 src/libslic3r/PrintConfig.cpp:2543
-#: src/libslic3r/PrintConfig.cpp:2550 src/libslic3r/PrintConfig.cpp:2558
-#: src/libslic3r/PrintConfig.cpp:2566
+#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:724
+#: src/libslic3r/PrintConfig.cpp:739 src/libslic3r/PrintConfig.cpp:2551
+#: src/libslic3r/PrintConfig.cpp:2560 src/libslic3r/PrintConfig.cpp:2670
+#: src/libslic3r/PrintConfig.cpp:2678 src/libslic3r/PrintConfig.cpp:2686
+#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2701
+#: src/libslic3r/PrintConfig.cpp:2709
 msgid "s"
 msgstr "$"
 
-#: src/slic3r/GUI/MainFrame.cpp:481 src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1072 src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end G-code"
 msgstr "&Enviar código G"
 
-#: src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end to print"
 msgstr "E&nviar para imprimir"
 
-#. TRN Preset
-#: src/slic3r/GUI/Tab.cpp:3417
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:642
+msgid "Save"
+msgstr "Guardar"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:72
 #, c-format
 msgid "Save %s as:"
 msgstr "Guardar %s como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 #, c-format
 msgid "Save %s file as:"
 msgstr "Guardar archivo %s como:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1046
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:912
 msgid "Save changes?"
 msgstr "¿Guardar cambios?"
 
-#: src/libslic3r/PrintConfig.cpp:3386
+#: src/libslic3r/PrintConfig.cpp:3585
 msgid "Save config file"
 msgstr "Guardar archivo de configuración"
 
-#: src/slic3r/GUI/MainFrame.cpp:925
+#: src/slic3r/GUI/MainFrame.cpp:1626
 msgid "Save configuration as:"
 msgstr "Guardar la configuración como:"
 
-#: src/libslic3r/PrintConfig.cpp:3387
+#: src/libslic3r/PrintConfig.cpp:3586
 msgid "Save configuration to the specified file."
 msgstr "Guarda la configuración al archivo especificado."
 
 #. TRN "Save current Settings"
-#: src/slic3r/GUI/Tab.cpp:133
+#: src/slic3r/GUI/Tab.cpp:203
 #, c-format
 msgid "Save current %s"
 msgstr "Guardar lo actual %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "Save current project file"
 msgstr "Guardar el proyecto actual como"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save current project file as"
 msgstr "Guardar archivo de proyecto actual como"
 
-#: src/slic3r/GUI/Plater.cpp:2604
+#: src/slic3r/GUI/Plater.cpp:2566
 msgid "Save file as:"
 msgstr "Guardar archivo como:"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save G-code file as:"
 msgstr "Guardar archivo Código G como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:899
+#: src/slic3r/GUI/MainFrame.cpp:1600
 msgid "Save OBJ file (less prone to coordinate errors than STL) as:"
 msgstr "Guardar archivo OBJ (menos propenso a errores de coordinación que STL) como:"
 
-#: src/slic3r/GUI/Tab.hpp:443
+#: src/slic3r/GUI/SavePresetDialog.cpp:190
+#: src/slic3r/GUI/SavePresetDialog.cpp:196
 msgid "Save preset"
 msgstr "Guardar ajuste inicial"
 
-#: src/slic3r/GUI/MainFrame.cpp:980
+#: src/slic3r/GUI/MainFrame.cpp:1681
 msgid "Save presets bundle as:"
 msgstr "Guarde el conjunto de ajustes iniciales como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save Project &as"
 msgstr "Gu&ardar proyecto como"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:114
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:107
 msgid "Save project (3mf)"
 msgstr "Guardar proyecto (3mf)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:115
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:108
 msgid "Save project as (3mf)"
 msgstr "Guarda el proyecto como (3mf)"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save SL1 file as:"
 msgstr "Guardar archivo SL1 como:"
 
-#: src/slic3r/GUI/MainFrame.cpp:838
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:744
+msgid "Save the selected options to preset \"%1%\"."
+msgstr "Guardar las opciones seleccionadas al ajuste \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Save the selected options."
+msgstr "Guardar las opciones seleccionadas."
+
+#: src/slic3r/GUI/MainFrame.cpp:1539
 msgid "Save zip file as:"
 msgstr "Guardar archivo zip como:"
 
@@ -6346,159 +7377,188 @@ msgstr "Guardar archivo zip como:"
 msgid "Saving mesh into the 3MF container failed."
 msgstr "Error al guardar la malla en el contenedor 3MF."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:47
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:230
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:500
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:518
-#: src/libslic3r/PrintConfig.cpp:3466
+#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:78
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:238
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:547
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:563
+#: src/libslic3r/PrintConfig.cpp:3665
 msgid "Scale"
 msgstr "Escalar"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:459
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:507
 msgid "Scale factors"
 msgstr "Factores de escala"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
-msgid ""
-"Scale selection to fit print volume\n"
-"in Gizmo scale"
-msgstr ""
-"Redimensiona para ajustar el volumen de impresión\n"
-"en escala Gizmo"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale the selected object to fit the print volume"
 msgstr "Escala los objetos seleccionados para ajustarse al volumen de impresión"
 
-#: src/libslic3r/PrintConfig.cpp:3475
+#: src/libslic3r/PrintConfig.cpp:3674
 msgid "Scale to Fit"
 msgstr "Escalar para Adaptarse"
 
-#: src/slic3r/GUI/Selection.cpp:939
+#: src/slic3r/GUI/Selection.cpp:988
 msgid "Scale To Fit"
 msgstr "Escalar para Adaptarse"
 
-#: src/libslic3r/PrintConfig.cpp:3476
+#: src/libslic3r/PrintConfig.cpp:3675
 msgid "Scale to fit the given volume."
 msgstr "Escalar para ajustarse al volumen dado."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale to print volume"
 msgstr "Escalar al volumen de impresión"
 
-#: src/libslic3r/PrintConfig.cpp:3467
+#: src/libslic3r/PrintConfig.cpp:3666
 msgid "Scaling factor or percentage."
 msgstr "Factor de escalado o porcentaje."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:505
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:545
 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
 msgstr "Subida planificada a `%1%`. Mira Ventana -> Sube a la cola del gestor de impresión"
 
-#: src/libslic3r/PrintConfig.cpp:1621
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:46
+msgid "Seam painting"
+msgstr "Pintado de la costura"
+
+#: src/libslic3r/PrintConfig.cpp:1729
 msgid "Seam position"
 msgstr "Posición de la costura"
 
-#: src/libslic3r/PrintConfig.cpp:1642
+#: src/libslic3r/PrintConfig.cpp:1750
 msgid "Seam preferred direction"
 msgstr "Dirección de la costura"
 
-#: src/libslic3r/PrintConfig.cpp:1651
+#: src/libslic3r/PrintConfig.cpp:1759
 msgid "Seam preferred direction jitter"
 msgstr "Dirección preferida de unión jitter"
 
+#: src/slic3r/GUI/MainFrame.cpp:1207
+msgid "Searc&h"
+msgstr "Busca&r"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4957
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 src/slic3r/GUI/Search.cpp:426
+msgid "Search"
+msgstr "Buscar"
+
+#: src/slic3r/GUI/ImGuiWrapper.cpp:803 src/slic3r/GUI/Search.cpp:460
+msgid "Search in English"
+msgstr "Buscar en Inglés"
+
+#: src/slic3r/GUI/MainFrame.cpp:1216
+msgid "Search in settings"
+msgstr "Buscar en los ajustes"
+
+#: src/slic3r/GUI/Tab.cpp:222
+msgid "Search in settings [%1%]"
+msgstr "Buscar en ajustes [%1%]"
+
 #: src/slic3r/GUI/BonjourDialog.cpp:218
 msgid "Searching for devices"
 msgstr "Buscando dispositivos"
 
-#: src/slic3r/GUI/Plater.cpp:2858
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:41
 msgid "Searching for optimal orientation"
 msgstr "Buscando la orientación óptima"
 
-#: src/slic3r/GUI/GUI_App.cpp:1103
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "See more."
+msgstr "Ver más."
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "See Releases page."
+msgstr "Consultar página de lanzamientos."
+
+#: src/slic3r/GUI/GUI_App.cpp:1895
 msgid "Select a gcode file:"
 msgstr "Seleccione un archivo gcode:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:121
 msgid "Select all objects"
 msgstr "Seleccionar todos los objetos"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1370
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217
 msgid "Select all points"
 msgstr "Seleccionar todos los puntos"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1976
+#: src/slic3r/GUI/ConfigWizard.cpp:2487
 msgid "Select all standard printers"
 msgstr "Selecciona todas las impresoras estándar"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
+#: src/slic3r/GUI/Plater.cpp:1422
+msgid "Select an action to apply to the file"
+msgstr "Selecciona una acción para aplicar al archivo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
 msgid "Select by rectangle"
 msgstr "Seleccionar mediante rectángulo"
 
-#: src/slic3r/GUI/MainFrame.cpp:944 src/slic3r/GUI/MainFrame.cpp:1006
+#: src/slic3r/GUI/MainFrame.cpp:1645 src/slic3r/GUI/MainFrame.cpp:1707
 msgid "Select configuration to load:"
 msgstr "Seleccione la configuración para cargar:"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:82
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:88
 msgid "Select coordinate space, in which the transformation will be performed."
 msgstr "Escoge el espacio de coordenadas en el que se realizará la transformación."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3971
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4458
 msgid "Select extruder number:"
 msgstr "Selecciona el número de extrusores:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
 msgid "Select Filament Settings Tab"
 msgstr "Seleccionar pestaña de configuración de filamento"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
 msgid "Select Plater Tab"
 msgstr "Seleccionar pestaña de la Base de impresión"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
 msgid "Select Print Settings Tab"
 msgstr "Seleccione la pestaña Configuración de impresión"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:139
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:135
 msgid "Select Printer Settings Tab"
 msgstr "Selecciona pestaña de ajustes de impresora"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1265
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1396
 msgid "Select showing settings"
 msgstr "Seleccionar los ajustes mostrados"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Select the language"
 msgstr "Seleccione el idioma"
 
-#: src/slic3r/GUI/Tab.cpp:57
+#: src/slic3r/GUI/Tab.cpp:108
 msgid "Select the print profiles this profile is compatible with."
 msgstr "Seleccione los perfiles de impresión con las que este perfil es compatible."
 
-#: src/slic3r/GUI/Tab.cpp:51
+#: src/slic3r/GUI/Tab.cpp:102
 msgid "Select the printers this profile is compatible with."
 msgstr "Seleccione las impresoras con las que este perfil es compatible."
 
-#: src/slic3r/GUI/MainFrame.cpp:889
+#: src/slic3r/GUI/MainFrame.cpp:1590
 msgid "Select the STL file to repair:"
 msgstr "Seleccione el archivo STL para reparar:"
 
-#: src/slic3r/GUI/Preferences.cpp:237
+#: src/slic3r/GUI/Preferences.cpp:391
 msgid "Select toolbar icon size in respect to the default one."
 msgstr "Selecciona el tamaño del icono de la barra de herramientas con respecto al predeterminado."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Select type of part"
 msgstr "Selecciona el tipo de pieza"
 
-#: src/slic3r/GUI/Plater.cpp:638
+#: src/slic3r/GUI/Plater.cpp:504
 msgid "Select what kind of pad do you need"
 msgstr "Selecciona que tipo de pad necesitas"
 
-#: src/slic3r/GUI/Plater.cpp:498
+#: src/slic3r/GUI/Plater.cpp:364
 msgid "Select what kind of support do you need"
 msgstr "Selecciona qué clase de soporte necesitas"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1917
+#: src/slic3r/GUI/DoubleSlider.cpp:2135
 msgid ""
 "Select YES if you want to delete all saved tool changes, \n"
 "NO if you want all tool changes switch to color changes, \n"
@@ -6508,59 +7568,59 @@ msgstr ""
 "NO si deseas que los cambios de herramienta sean cambios de color,\n"
 "o CANCELAR para no hacer cambios."
 
-#: src/slic3r/GUI/Selection.cpp:146
+#: src/slic3r/GUI/Selection.cpp:191
 msgid "Selection-Add"
 msgstr "Selección-Añadir"
 
-#: src/slic3r/GUI/Selection.cpp:376
+#: src/slic3r/GUI/Selection.cpp:421
 msgid "Selection-Add All"
 msgstr "Selección-Añadir todos"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3299
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3762
 msgid "Selection-Add from list"
 msgstr "Selección-Añadir de la lista"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6598
+#: src/slic3r/GUI/GLCanvas3D.cpp:7193
 msgid "Selection-Add from rectangle"
 msgstr "Selección-Añadir del rectángulo"
 
-#: src/slic3r/GUI/Selection.cpp:256
+#: src/slic3r/GUI/Selection.cpp:301
 msgid "Selection-Add Instance"
 msgstr "Selección-Añadir Instancia"
 
-#: src/slic3r/GUI/Selection.cpp:219
+#: src/slic3r/GUI/Selection.cpp:264
 msgid "Selection-Add Object"
 msgstr "Selección-Añadir Objeto"
 
-#: src/slic3r/GUI/Selection.cpp:187
+#: src/slic3r/GUI/Selection.cpp:232
 msgid "Selection-Remove"
 msgstr "Selección-Retirar"
 
-#: src/slic3r/GUI/Selection.cpp:402
+#: src/slic3r/GUI/Selection.cpp:447
 msgid "Selection-Remove All"
 msgstr "Selección-Retirar todo"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3291
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3754
 msgid "Selection-Remove from list"
 msgstr "Selección-Retirar de la lista"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6617
+#: src/slic3r/GUI/GLCanvas3D.cpp:7212
 msgid "Selection-Remove from rectangle"
 msgstr "Selección-Retirar del rectángulo"
 
-#: src/slic3r/GUI/Selection.cpp:275
+#: src/slic3r/GUI/Selection.cpp:320
 msgid "Selection-Remove Instance"
 msgstr "Selección-Retirar Instancia"
 
-#: src/slic3r/GUI/Selection.cpp:238
+#: src/slic3r/GUI/Selection.cpp:283
 msgid "Selection-Remove Object"
 msgstr "Selección-Retirar Objeto"
 
-#: src/slic3r/GUI/MainFrame.cpp:566
+#: src/slic3r/GUI/MainFrame.cpp:1172
 msgid "Selects all objects"
 msgstr "Seleccionar todos los objetos"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send G-code"
 msgstr "Enviar código G"
 
@@ -6568,29 +7628,29 @@ msgstr "Enviar código G"
 msgid "Send G-Code to printer host"
 msgstr "Enviar el código G al host de impresión"
 
-#: src/slic3r/GUI/MainFrame.cpp:481
+#: src/slic3r/GUI/MainFrame.cpp:1072
 msgid "Send to print current plate as G-code"
 msgstr "Enviar para imprimir la plataforma actual como código G"
 
-#: src/slic3r/GUI/Plater.cpp:878 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/Plater.cpp:753 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send to printer"
 msgstr "Enviar a la impresora"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1305
+#: src/slic3r/GUI/GLCanvas3D.cpp:1312
 msgid "Seq."
 msgstr "Sec."
 
-#: src/slic3r/GUI/Tab.cpp:1231
+#: src/slic3r/GUI/Tab.cpp:1561
 msgid "Sequential printing"
 msgstr "Impresión secuencial"
 
-#: src/slic3r/GUI/Tab.cpp:1901 src/libslic3r/PrintConfig.cpp:1661
-msgid "Serial port"
-msgstr "Puerto serial"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
+msgid "Sequential Slider"
+msgstr "Deslizador secuencial"
 
-#: src/libslic3r/PrintConfig.cpp:1669
-msgid "Serial port speed"
-msgstr "Velocidad del puerto serial"
+#: src/slic3r/GUI/Preferences.cpp:230
+msgid "Sequential slider applied only to top layer"
+msgstr "Deslizador secuencial aplicado solo a la capa superior"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:807
 msgid "Serial port:"
@@ -6600,17 +7660,16 @@ msgstr "Puerto serie:"
 msgid "Service name"
 msgstr "Nombre del servicio"
 
-#: src/slic3r/GUI/Tab.cpp:1802 src/slic3r/GUI/Tab.cpp:2046
-#: src/slic3r/GUI/Tab.cpp:3176
+#: src/slic3r/GUI/Tab.cpp:3509 src/slic3r/GUI/Tab.cpp:3588
 msgid "Set"
 msgstr "Ajuste"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1728
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Object"
 msgstr "Establecer como Objeto Separado"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Objects"
 msgstr "Establecer como Objetos Separados"
 
@@ -6618,7 +7677,7 @@ msgstr "Establecer como Objetos Separados"
 msgid "Set extruder change for every"
 msgstr "Establecer cambio de extrusor para cada"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Set extruder for selected items"
 msgstr "Establecer el extrusor para elementos seleccionados"
 
@@ -6626,7 +7685,7 @@ msgstr "Establecer el extrusor para elementos seleccionados"
 msgid "Set extruder sequence"
 msgstr "Establecer secuencia extrusor"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1532
+#: src/slic3r/GUI/DoubleSlider.cpp:1728
 msgid "Set extruder sequence for the entire print"
 msgstr "Fija la secuencia del extrusor para toda la impresión"
 
@@ -6634,84 +7693,84 @@ msgstr "Fija la secuencia del extrusor para toda la impresión"
 msgid "Set extruder(tool) sequence"
 msgstr "Establecer secuencia extrusor(herramienta)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
 msgid "Set lower thumb to current slider thumb"
 msgstr "Coloca el pulgar inferior en el control deslizante actual"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:297
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305
 msgid "Set Mirror"
 msgstr "Establecer Reflejo"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Set number of instances"
 msgstr "Establecer número de instancias"
 
-#: src/slic3r/GUI/Plater.cpp:4756
+#: src/slic3r/GUI/Plater.cpp:4860
 #, c-format
 msgid "Set numbers of copies to %d"
 msgstr "Establecer el número de copias a %d"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:781
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:828
 msgid "Set Orientation"
 msgstr "Establecer Orientación"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:750
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:797
 msgid "Set Position"
 msgstr "Establecer Posición"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Printable"
 msgstr "Establecer Imprimible"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Printable Instance"
 msgstr "Establecer Instancia imprimible"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:846
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:893
 msgid "Set Scale"
 msgstr "Establecer Escala"
 
-#: src/libslic3r/PrintConfig.cpp:2393
+#: src/libslic3r/PrintConfig.cpp:2536
 msgid "Set the actual LCD display orientation inside the SLA printer. Portrait mode will flip the meaning of display width and height parameters and the output images will be rotated by 90 degrees."
 msgstr "Establece la orientación real de la pantalla LCD dentro de la impresora SLA. El modo retrato cambiará el significado de los parámetros de ancho y alto de la pantalla y las imágenes de salida girarán 90 grados."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:932
+#: src/slic3r/GUI/ConfigWizard.cpp:1298
 msgid "Set the shape of your printer's bed."
 msgstr "Define la forma de la base de impresión de tu impresora."
 
-#: src/libslic3r/PrintConfig.cpp:556
+#: src/libslic3r/PrintConfig.cpp:592
 msgid "Set this to a non-zero value to allow a manual extrusion width. If left to zero, Slic3r derives extrusion widths from the nozzle diameter (see the tooltips for perimeter extrusion width, infill extrusion width etc). If expressed as percentage (for example: 230%), it will be computed over layer height."
 msgstr "Ajuste este valor distinto de cero para permitir un ancho de extrusión manual. Si se deja a cero, Slic3r obtiene anchuras de extrusión del diámetro de la boquilla (consulte la información sobre herramientas para conocer el ancho de extrusión, el ancho de extrusión de relleno, etc.). Si se expresa como porcentaje (por ejemplo: 230%), se computará sobre la altura de la capa."
 
-#: src/libslic3r/PrintConfig.cpp:448
+#: src/libslic3r/PrintConfig.cpp:484
 msgid "Set this to a non-zero value to set a manual extrusion width for external perimeters. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%), it will be computed over layer height."
 msgstr "Ajuste este valor distinto de cero para establecer un ancho de extrusión manual para perímetros externos. Si se deja en cero, se usará el ancho de extrusión por defecto si se establece, de lo contrario se usará 1.125 x diámetro de la boquilla. Si se expresa como porcentaje (por ejemplo, 200%), se computará sobre la altura de la capa."
 
-#: src/libslic3r/PrintConfig.cpp:878
+#: src/libslic3r/PrintConfig.cpp:920
 msgid "Set this to a non-zero value to set a manual extrusion width for first layer. You can use this to force fatter extrudates for better adhesion. If expressed as percentage (for example 120%) it will be computed over first layer height. If set to zero, it will use the default extrusion width."
 msgstr "Ajuste este valor distinto de cero para establecer un ancho de extrusión manual para la primera capa. Puede usar esto para forzar extrusiones más gordas para una mejor adhesión. Si se expresa como porcentaje (por ejemplo, 120%), se calculará sobre la altura de la primera capa. Si se establece en cero, usará el ancho de extrusión predeterminado."
 
-#: src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:1873
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Ajuste este valor distinto de cero para establecer un ancho de extrusión manual para el relleno de superficies sólidas. Si se deja en cero, se usará el ancho de extrusión por defecto si se establece, de lo contrario se usará 1.125 x diámetro de la boquilla. Si se expresa como porcentaje (por ejemplo, 90%), se calculará sobre la altura de la capa."
 
-#: src/libslic3r/PrintConfig.cpp:2107
+#: src/libslic3r/PrintConfig.cpp:2250
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Ajuste este valor distinto de cero para establecer un ancho de extrusión manual para el relleno de las superficies superiores. Es posible que desee utilizar extrusiones más delgadas para llenar todas las regiones estrechas y obtener un acabado más suave. Si se deja en cero, se usará el ancho de extrusión por defecto si se establece, de lo contrario se usará el diámetro de la boquilla. Si se expresa como porcentaje (por ejemplo, 90%), se calculará sobre la altura de la capa."
 
-#: src/libslic3r/PrintConfig.cpp:1011
+#: src/libslic3r/PrintConfig.cpp:1055
 msgid "Set this to a non-zero value to set a manual extrusion width for infill. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. You may want to use fatter extrudates to speed up the infill and make your parts stronger. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Ajuste este valor distinto de cero para establecer un ancho de extrusión manual para relleno. Si se deja en cero, se usará el ancho de extrusión por defecto si se establece, de lo contrario se usará 1.125 x diámetro de la boquilla. Es posible que desee extrusiones más gordas para acelerar el relleno y fortalecer sus partes. Si se expresa como porcentaje (por ejemplo, 90%), se calculará sobre la altura de la capa."
 
-#: src/libslic3r/PrintConfig.cpp:1419
+#: src/libslic3r/PrintConfig.cpp:1527
 msgid "Set this to a non-zero value to set a manual extrusion width for perimeters. You may want to use thinner extrudates to get more accurate surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%) it will be computed over layer height."
 msgstr "Ajuste este valor distinto de cero para establecer un ancho de extrusión manual para los perímetros. Es posible que desee utilizar extrusiones más delgadas para obtener superficies más precisas. Si se deja en cero, se usará el ancho de extrusión por defecto si se establece, de lo contrario se usará 1.125 x diámetro de la boquilla. Si se expresa como porcentaje (por ejemplo, 200%), se calculará sobre la altura de la capa."
 
-#: src/libslic3r/PrintConfig.cpp:1948
+#: src/libslic3r/PrintConfig.cpp:2090
 msgid "Set this to a non-zero value to set a manual extrusion width for support material. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Ajuste este valor distinto de cero para establecer un ancho de extrusión manual para el material de soporte. Si se deja en cero, se usará el ancho de extrusión por defecto si se establece, de lo contrario se usará el diámetro de la boquilla. Si se expresa como porcentaje (por ejemplo, 90%), se calculará sobre la altura de la capa."
 
-#: src/libslic3r/PrintConfig.cpp:512
+#: src/libslic3r/PrintConfig.cpp:548
 msgid "Set this to the clearance radius around your extruder. If the extruder is not centered, choose the largest value for safety. This setting is used to check for collisions and to display the graphical preview in the plater."
 msgstr "Ajuste este parámetro según el radio de espacio libre alrededor de su extrusor. Si el extrusor no está centrado, elija el valor más grande para seguridad. Esta configuración se utiliza para verificar colisiones y mostrar la vista previa gráfica en la bandeja."
 
@@ -6719,23 +7778,23 @@ msgstr "Ajuste este parámetro según el radio de espacio libre alrededor de su
 msgid "Set this to the maximum height that can be reached by your extruder while printing."
 msgstr "Ajusta este valor a la altura máxima que puede alcanzar el extrusor mientras imprime."
 
-#: src/libslic3r/PrintConfig.cpp:501
+#: src/libslic3r/PrintConfig.cpp:537
 msgid "Set this to the vertical distance between your nozzle tip and (usually) the X carriage rods. In other words, this is the height of the clearance cylinder around your extruder, and it represents the maximum depth the extruder can peek before colliding with other printed objects."
 msgstr "Ajuste este valor según la distancia vertical entre la punta de la boquilla y (generalmente) las barras X del carro. En otras palabras, esta es la altura del cilindro de holgura alrededor de su extrusor, y representa la profundidad máxima que el extrusor puede asomar antes de colisionar con otros objetos impresos."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Unprintable"
 msgstr "Establecer No imprimible"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Unprintable Instance"
 msgstr "Establecer Instancia No Imprimible"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
 msgid "Set upper thumb to current slider thumb"
 msgstr "Coloca el pulgar superior en el control deslizante actual"
 
-#: src/libslic3r/PrintConfig.cpp:3509
+#: src/libslic3r/PrintConfig.cpp:3714
 msgid ""
 "Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:trace\n"
 "For example. loglevel=2 logs fatal, error and warning level messages."
@@ -6743,63 +7802,74 @@ msgstr ""
 "Ajusta el nivel de avisos: 0:fallo, 1:error, 2:peligro, 3:info, 4:depuración, 5:traza\n"
 "Por ejemplo. loglevel=2 registrará mensajes de fallo, error y peligro."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:155
+#: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/MainFrame.cpp:1969
 msgid "Settings"
 msgstr "Ajustes"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Settings for height range"
 msgstr "Ajustes para rango de alturas"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:162
+#: src/slic3r/GUI/Preferences.cpp:431
+msgid "Settings in non-modal window"
+msgstr "Configuración en ventana no modal"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:161
 msgid "Shall I adjust those settings for supports?"
 msgstr "¿Debo ajustar esa configuración para los soportes?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:89
+#: src/slic3r/GUI/ConfigManipulation.cpp:88
 msgid "Shall I adjust those settings in order to enable Spiral Vase?"
 msgstr "¿Debo ajustar esa configuración para habilitar el modo Vaso Espiral?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:118
 msgid "Shall I adjust those settings in order to enable the Wipe Tower?"
 msgstr "¿Debo ajustar esa configuración para habilitar la Torre de Limpieza?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/ConfigManipulation.cpp:209
 msgid "Shall I switch to rectilinear fill pattern?"
 msgstr "¿Debo cambiar al patrón de relleno rectilíneo?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:139
+#: src/slic3r/GUI/ConfigManipulation.cpp:138
 msgid "Shall I synchronize support layers in order to enable the Wipe Tower?"
 msgstr "¿Debo sincronizar las capas de soporte para habilitar la Torre de Limpieza?"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2059
+#: src/slic3r/GUI/BedShapeDialog.cpp:156 src/slic3r/GUI/BedShapeDialog.cpp:222
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2215
 msgid "Shape"
 msgstr "Aspecto"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:256
+#: src/slic3r/GUI/GUI_Preview.cpp:338 src/slic3r/GUI/GUI_Preview.cpp:1478
 msgid "Shells"
 msgstr "Carcasas"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:249
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:33
+msgid "Shift + Left mouse button"
+msgstr "Mayús + botón izquierdo del ratón"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:241
 msgid "Shift + Left mouse button:"
 msgstr "Mayús + botón izquierdo del ratón:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:255
+#: src/slic3r/GUI/GLCanvas3D.cpp:245
 msgid "Shift + Right mouse button:"
 msgstr "Mayús + botón derecho del ratón:"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:231
+#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:288
 msgid "Show"
 msgstr "Mostrar"
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show &Configuration Folder"
 msgstr "Mostrar carpeta &Configuración"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show &labels"
 msgstr "Muestra &etiquetas"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
 msgid "Show about dialog"
 msgstr "Mostrar Acerca de"
 
@@ -6807,111 +7877,131 @@ msgstr "Mostrar Acerca de"
 msgid "Show advanced settings"
 msgstr "Mostrar ajustes avanzados"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:159
+#: src/slic3r/GUI/Preferences.cpp:120
+msgid "Show drop project dialog"
+msgstr "Mostrar cuadro de diálogo al soltar proyecto"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:157
 msgid "Show error message"
 msgstr "Muestra mensaje de error"
 
-#: src/slic3r/GUI/Preferences.cpp:95
+#: src/slic3r/GUI/Preferences.cpp:112
 msgid "Show incompatible print and filament presets"
 msgstr "Mostrar impresiones incompatibles y ajustes iniciales de filamentos"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:145
 msgid "Show keyboard shortcuts list"
 msgstr "Muestra lista de atajos de teclado"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/GCodeViewer.cpp:2591
+msgid "Show normal mode"
+msgstr "Mostrar modo normal"
+
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show object/instance labels in 3D scene"
 msgstr "Muestra etiquetas de pieza/repetición en vista 3D"
 
+#: src/slic3r/GUI/Preferences.cpp:213
+msgid "Show sidebar collapse/expand button"
+msgstr "Mostrar botón ocultar/expandir barra lateral"
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:377
 msgid "Show simplified settings"
 msgstr "Muestra los ajustes simplificados"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:52
+#: src/slic3r/GUI/Preferences.cpp:169 src/slic3r/GUI/Preferences.cpp:171
+msgid "Show splash screen"
+msgstr "Mostrar pantalla splash"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2586
+msgid "Show stealth mode"
+msgstr "Mostrar modo silencioso"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
 msgid "Show supports"
 msgstr "Muestra soportes"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "Show system information"
 msgstr "Mostrar la información del sistema"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "Show the 3D editing view"
 msgstr "Muestra la vista de edición 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Show the 3D slices preview"
 msgstr "Muestra la vista 3D preliminar de las rebanadas"
 
-#: src/slic3r/GUI/MainFrame.cpp:617
+#: src/slic3r/GUI/MainFrame.cpp:1224
 msgid "Show the filament settings"
 msgstr "Mostrar los ajustes de filamento"
 
-#: src/libslic3r/PrintConfig.cpp:3372
+#: src/libslic3r/PrintConfig.cpp:3571
 msgid "Show the full list of print/G-code configuration options."
 msgstr "Muestra la lista completa de opciones de configuración de impresión/G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3377
+#: src/libslic3r/PrintConfig.cpp:3576
 msgid "Show the full list of SLA print configuration options."
 msgstr "Muestra la lista completa de opciones de configuración de impresión SLA."
 
-#: src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/MainFrame.cpp:941 src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Show the list of the keyboard shortcuts"
 msgstr "Mostrar la lista de los atajos de teclado"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "Show the plater"
 msgstr "Mostrar la base"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "Show the print settings"
 msgstr "Mostrar los ajustes de impresión"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Show the printer settings"
 msgstr "Mostrar la configuración de la impresora"
 
-#: src/libslic3r/PrintConfig.cpp:3366
+#: src/libslic3r/PrintConfig.cpp:3565
 msgid "Show this help."
 msgstr "Mostrar esta ayuda."
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show user configuration folder (datadir)"
 msgstr "Mostrar carpeta de configuración de usuario (datadir)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:185
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
 msgid "Show/Hide 3Dconnexion devices settings dialog"
 msgstr "Mostrar/Ocultar cuadro de ajustes dispositivos 3Dconnexion"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
-msgid "Show/Hide Legend"
-msgstr "Muestra/Oculta Leyenda"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+msgid "Show/Hide Legend & Estimated printing time"
+msgstr "Mostrar / Ocultar leyenda y tiempo de impresión estimado"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:146
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
 msgid "Show/Hide object/instance labels"
 msgstr "Muestra/Oculta etiquetas de pieza/repetición"
 
-#: src/slic3r/GUI/GUI_App.cpp:813 src/slic3r/GUI/wxExtensions.cpp:753
+#: src/slic3r/GUI/GUI_App.cpp:1504 src/slic3r/GUI/wxExtensions.cpp:673
 msgid "Simple"
 msgstr "Sencillo"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:820
+#: src/slic3r/GUI/ConfigWizard.cpp:1179
 msgid "Simple mode"
 msgstr "Modo Simple"
 
-#: src/slic3r/GUI/GUI_App.cpp:813
+#: src/slic3r/GUI/GUI_App.cpp:1504
 msgid "Simple View Mode"
 msgstr "Modo de visualización sencillo"
 
-#: src/slic3r/GUI/Tab.cpp:2298 src/slic3r/GUI/Tab.cpp:2306
+#: src/slic3r/GUI/Tab.cpp:2467 src/slic3r/GUI/Tab.cpp:2475
 msgid "Single extruder MM setup"
 msgstr "Ajuste para MM con un solo extrusor"
 
-#: src/libslic3r/PrintConfig.cpp:1845
+#: src/libslic3r/PrintConfig.cpp:1987
 msgid "Single Extruder Multi Material"
 msgstr "Extrusor único de múltiples materiales"
 
-#: src/slic3r/GUI/Tab.cpp:1867
+#: src/slic3r/GUI/Tab.cpp:2101
 msgid ""
 "Single Extruder Multi Material is selected, \n"
 "and all extruders must have the same diameter.\n"
@@ -6921,435 +8011,463 @@ msgstr ""
 "y todos los extrusores deben tener el mismo diámetro.\n"
 "¿Deseas cambiar el diámetro de todos los extrusores al valor del diámetro del nozzle del primer extrusor?"
 
-#: src/slic3r/GUI/Tab.cpp:2307
+#: src/slic3r/GUI/Tab.cpp:2476
 msgid "Single extruder multimaterial parameters"
 msgstr "Parámetros multimaterial para un sólo extrusor"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:77
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:160
-#: src/slic3r/GUI/Tab.cpp:2324
+#: src/slic3r/GUI/Preferences.cpp:120 src/libslic3r/PrintConfig.cpp:3689
+msgid "Single instance mode"
+msgstr "Modo de instancia única"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:93
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:240 src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:2493
 msgid "Size"
 msgstr "Tamaño"
 
-#: src/slic3r/GUI/Tab.cpp:1797 src/slic3r/GUI/Tab.cpp:2041
+#: src/slic3r/GUI/Tab.cpp:2059 src/slic3r/GUI/Tab.cpp:2241
 msgid "Size and coordinates"
 msgstr "Tamaño y coordenadas"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:78
+#: src/slic3r/GUI/BedShapeDialog.cpp:110
 msgid "Size in X and Y of the rectangular plate."
 msgstr "Tamaño en X e Y de la placa rectangular."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:245 src/slic3r/GUI/Tab.cpp:1111
-#: src/libslic3r/ExtrusionEntity.cpp:318
+#: src/slic3r/GUI/GUI_Preview.cpp:310 src/slic3r/GUI/Tab.cpp:1439
+#: src/libslic3r/ExtrusionEntity.cpp:323 src/libslic3r/ExtrusionEntity.cpp:354
 msgid "Skirt"
 msgstr "Falda"
 
-#: src/slic3r/GUI/Tab.cpp:1110
+#: src/slic3r/GUI/Tab.cpp:1438
 msgid "Skirt and brim"
 msgstr "Falda y balsa"
 
-#: src/libslic3r/PrintConfig.cpp:1687
+#: src/libslic3r/PrintConfig.cpp:1795
 msgid "Skirt height"
 msgstr "Altura de la falda"
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/libslic3r/PrintConfig.cpp:1811
 msgid "Skirt Loops"
 msgstr "Vueltas de la falda"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1334
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1181
 msgid "SLA gizmo keyboard shortcuts"
 msgstr "SLA gizmo atajos de teclado"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1058
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:924
 msgid "SLA gizmo turned off"
 msgstr "Gizmo SLA apagado"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1017
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:897
 msgid "SLA gizmo turned on"
 msgstr "Gizmo SLA encendido"
 
-#: src/slic3r/GUI/Plater.cpp:818 src/slic3r/GUI/Preset.cpp:1524
+#: src/slic3r/GUI/Plater.cpp:693 src/libslic3r/Preset.cpp:1303
 msgid "SLA material"
 msgstr "Material SLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Material Profiles Selection"
 msgstr "Selección Perfiles de Material SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2470 src/libslic3r/PrintConfig.cpp:2471
+#: src/libslic3r/PrintConfig.cpp:2613 src/libslic3r/PrintConfig.cpp:2614
 msgid "SLA material type"
 msgstr "Tipo Material SLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Materials"
 msgstr "Materiales SLA"
 
-#: src/slic3r/GUI/Preset.cpp:1523
+#: src/libslic3r/Preset.cpp:1302
 msgid "SLA print"
 msgstr "Impresión SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2578
+#: src/libslic3r/PrintConfig.cpp:2721
 msgid "SLA print material notes"
 msgstr "Notas del material de impresión de SLA"
 
-#: src/slic3r/GUI/Plater.cpp:817
+#: src/slic3r/GUI/Plater.cpp:692
 msgid "SLA print settings"
 msgstr "Ajustes de impresión SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:996
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:869
 msgid "SLA Support Points"
 msgstr "Puntos de soporte SLA"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:687
-msgid "SLA supports outside the print area were detected"
-msgstr "Se detectaron soportes SLA fuera del área de impresión"
+#: src/slic3r/GUI/GLCanvas3D.cpp:635
+msgid "SLA supports outside the print area were detected."
+msgstr "Se detectaron soportes SLA fuera del área de impresión."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1530
+#: src/slic3r/GUI/ConfigWizard.cpp:1931
 msgid "SLA Technology Printers"
 msgstr "Impresoras de tecnología SLA"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Slab"
 msgstr "Rebanada"
 
-#: src/libslic3r/PrintConfig.cpp:1333
+#: src/libslic3r/PrintConfig.cpp:1441
 msgid "Slic3r can upload G-code files to a printer host. This field must contain the kind of the host."
 msgstr "Slic3r puede subir archivos de código G a un host de impresión. Este campo debe contener el tipo de host."
 
-#: src/libslic3r/PrintConfig.cpp:105
+#: src/libslic3r/PrintConfig.cpp:107
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
 msgstr "Slic3r puede subir archivos de código G a un host de impresión. Este campo debe contener la clave API o la contraseña requerida para la autenticación."
 
-#: src/libslic3r/PrintConfig.cpp:98
+#: src/libslic3r/PrintConfig.cpp:100
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
 msgstr "Slic3r puede subir archivos G-code a un host de impresión. Este campo debería contener el nombre de equipo, dirección IP o el URL de la instancia del host."
 
-#: src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1407
 msgid "Slic3r will not scale speed down below this speed."
 msgstr "Slic3r no escalará la velocidad por debajo de esta velocidad."
 
-#: src/libslic3r/PrintConfig.cpp:3359
+#: src/libslic3r/PrintConfig.cpp:3558
 msgid "Slice"
 msgstr "Laminar"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Slice a file into a G-code"
 msgstr "Laminar un archivo en un código G"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Slice a file into a G-code, save as"
 msgstr "Laminar un archivo en un código G, guárdar como"
 
-#: src/libslic3r/PrintConfig.cpp:87
+#: src/libslic3r/PrintConfig.cpp:89
 msgid "Slice gap closing radius"
 msgstr "Radio de cierre de los huecos al laminar"
 
-#: src/slic3r/GUI/Plater.cpp:892 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5110
+#: src/slic3r/GUI/Plater.cpp:767 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5237
 msgid "Slice now"
 msgstr "Laminar ahora"
 
-#: src/libslic3r/PrintConfig.cpp:3333
+#: src/libslic3r/PrintConfig.cpp:3526
 msgid "Slice the model and export SLA printing layers as PNG."
 msgstr "Laminar el modelo y exportar las capas de impresión de SLA como PNG."
 
-#: src/libslic3r/PrintConfig.cpp:3354
+#: src/libslic3r/PrintConfig.cpp:3547
 msgid "Slice the model and export toolpaths as G-code."
 msgstr "Laminar el modelo y exportar las trayectorias como código G."
 
-#: src/libslic3r/PrintConfig.cpp:3360
+#: src/libslic3r/PrintConfig.cpp:3559
 msgid "Slice the model as FFF or SLA based on the printer_technology configuration value."
 msgstr "Laminar el modelo como FFF o SLA basado en el valor de configuración de printer_technology."
 
-#: src/slic3r/GUI/Plater.cpp:216
+#: src/slic3r/GUI/Plater.cpp:222
 msgid "Sliced Info"
 msgstr "Información del laminado"
 
-#: src/slic3r/GUI/MainFrame.cpp:847 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5107 src/slic3r/GUI/Tab.cpp:1221
-#: src/slic3r/GUI/Tab.cpp:3662
+#: src/slic3r/GUI/MainFrame.cpp:1548 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5234 src/slic3r/GUI/Tab.cpp:1551
+#: src/slic3r/GUI/Tab.cpp:4081
 msgid "Slicing"
 msgstr "Rebanando"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:134
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:184
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:170
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:219
 msgid "Slicing complete"
 msgstr "Laminado terminado"
 
-#: src/libslic3r/SLAPrint.cpp:760
+#: src/libslic3r/SLAPrint.cpp:780
 msgid "Slicing done"
 msgstr "Laminado terminado"
 
-#: src/slic3r/GUI/MainFrame.cpp:874
+#: src/slic3r/GUI/MainFrame.cpp:1575
 msgid "Slicing Done!"
 msgstr "¡Laminado realizado!"
 
-#: src/libslic3r/SLAPrintSteps.cpp:245
+#: src/slic3r/GUI/NotificationManager.cpp:751
+msgid "Slicing finished."
+msgstr "Laminado finalizado."
+
+#: src/libslic3r/SLAPrintSteps.cpp:247
 msgid "Slicing had to be stopped due to an internal error: Inconsistent slice index."
 msgstr "El laminado se ha tenido que parar debido a un error interno: Índice de laminado inconsistente."
 
-#: src/libslic3r/SLAPrintSteps.cpp:45
+#: src/libslic3r/SLAPrintSteps.cpp:46
 msgid "Slicing model"
 msgstr "Rebanando modelo"
 
-#: src/libslic3r/SLAPrintSteps.cpp:49
+#: src/libslic3r/SLAPrintSteps.cpp:50
 msgid "Slicing supports"
 msgstr "Soportes para el laminado"
 
-#: src/libslic3r/PrintConfig.cpp:2414
+#: src/libslic3r/PrintConfig.cpp:2557
 msgid "Slow"
 msgstr "Lenta"
 
-#: src/libslic3r/PrintConfig.cpp:1705
+#: src/libslic3r/PrintConfig.cpp:1820
 msgid "Slow down if layer print time is below"
 msgstr "Disminuya la velocidad si el tiempo de impresión de la capa está por debajo"
 
-#: src/libslic3r/PrintConfig.cpp:2415
+#: src/libslic3r/PrintConfig.cpp:2558
 msgid "Slow tilt"
 msgstr "Inclinación lenta"
 
-#: src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1830
 msgid "Small perimeters"
 msgstr "Perímetros pequeños"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:288
+#: src/libslic3r/PrintConfig.cpp:2801
+msgid "Small pillar diameter percent"
+msgstr "Porcentaje de diámetro de pilar pequeño"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:274
 msgid "Smooth"
 msgstr "Suave"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:258
+#: src/slic3r/GUI/GLCanvas3D.cpp:247
 msgid "Smoothing"
 msgstr "Suavizado"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Snapshot name"
 msgstr "Nombre de la instantánea"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Software &Releases"
 msgstr "Lanzamientos de Softwa&re"
 
-#: src/slic3r/GUI/PresetHints.cpp:184
+#: src/slic3r/GUI/PresetHints.cpp:183
 msgid "solid infill"
 msgstr "relleno sólido"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/ExtrusionEntity.cpp:314
-#: src/libslic3r/PrintConfig.cpp:1756 src/libslic3r/PrintConfig.cpp:1767
+#: src/slic3r/GUI/GUI_Preview.cpp:305 src/libslic3r/ExtrusionEntity.cpp:318
+#: src/libslic3r/ExtrusionEntity.cpp:344 src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:1882
 msgid "Solid infill"
 msgstr "Relleno sólido"
 
-#: src/libslic3r/PrintConfig.cpp:1744
+#: src/libslic3r/PrintConfig.cpp:1859
 msgid "Solid infill every"
 msgstr "Relleno sólido cada"
 
-#: src/libslic3r/PrintConfig.cpp:1736
+#: src/libslic3r/PrintConfig.cpp:1851
 msgid "Solid infill extruder"
 msgstr "Extrusor para el relleno sólido"
 
-#: src/libslic3r/PrintConfig.cpp:1727
+#: src/libslic3r/PrintConfig.cpp:1842
 msgid "Solid infill threshold area"
 msgstr "Área del umbral de relleno sólido"
 
-#: src/slic3r/GUI/Tab.cpp:1065 src/libslic3r/PrintConfig.cpp:1780
+#: src/slic3r/GUI/Tab.cpp:1387 src/libslic3r/PrintConfig.cpp:1895
 msgid "Solid layers"
 msgstr "Capas sólidas"
 
-#: src/libslic3r/PrintConfig.cpp:754
+#: src/libslic3r/PrintConfig.cpp:790
 msgid "Soluble material"
 msgstr "Material soluble"
 
-#: src/libslic3r/PrintConfig.cpp:755
+#: src/libslic3r/PrintConfig.cpp:791
 msgid "Soluble material is most likely used for a soluble support."
 msgstr "El material soluble se usa muy probablemente para un soporte soluble."
 
-#: src/libslic3r/PrintConfig.cpp:937
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:735
+msgid "Some fields are too long to fit. Right mouse click reveals the full text."
+msgstr "Algunos campos son demasiado largos para caber. El clic derecho del mouse muestra el texto completo."
+
+#: src/libslic3r/PrintConfig.cpp:981
 msgid "Some G/M-code commands, including temperature control and others, are not universal. Set this option to your printer's firmware to get a compatible output. The \"No extrusion\" flavor prevents PrusaSlicer from exporting any extrusion value at all."
 msgstr "Algunos comandos de códigos G/M, incluidos el control de temperatura y otros, no son universales. Configura esta opción en el firmware de tu impresora para obtener una salida compatible. El tipo \"Sin extrusión\" evita que PrusaSlicer exporte ningún valor de extrusión."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:688
-msgid "Some objects are not visible"
-msgstr "Algunas piezas no son visibles"
+#: src/slic3r/GUI/Plater.cpp:2309
+#, c-format
+msgid ""
+"Some object(s) in file %s looks like saved in inches.\n"
+"Should I consider them as a saved in inches and convert them?"
+msgstr ""
+"Alguno(s) objetos del archivo %s parecen estar guardados en pulgadas.\n"
+"¿Debería considerarlos como guardados en pulgadas y convertirlos?"
 
-#: src/libslic3r/Print.cpp:1226
+#: src/slic3r/GUI/GLCanvas3D.cpp:636
+msgid "Some objects are not visible."
+msgstr "Algunos objetos no son visibles."
+
+#: src/libslic3r/Print.cpp:1252
 msgid "Some objects are too close; your extruder will collide with them."
 msgstr "Algunos objetos están demasiado cerca; el extrusor colisionará con ellos."
 
-#: src/libslic3r/Print.cpp:1228
+#: src/libslic3r/Print.cpp:1254
 msgid "Some objects are too tall and cannot be printed without extruder collisions."
 msgstr "Algunos objetos son demasiado altos y no se pueden imprimir sin que colisione el extrusor."
 
-#: src/libslic3r/PrintConfig.cpp:2824
+#: src/libslic3r/PrintConfig.cpp:2988
 msgid "Some objects can get along with a few smaller pads instead of a single big one. This parameter defines how far the center of two smaller pads should be. If theyare closer, they will get merged into one pad."
 msgstr "Algunos objetos pueden llevarse bien con unas pocas pads más pequeñas en lugar de una sola grande. Este parámetro define a qué distancia debe estar el centro de dos pads más pequeñas. Si están más cerca, se fusionarán en una sola pad."
 
-#: src/libslic3r/PrintConfig.cpp:2187
+#: src/libslic3r/PrintConfig.cpp:2330
 msgid "Some printers or printer setups may have difficulties printing with a variable layer height. Enabled by default."
 msgstr "Algunas impresoras o configuraciones de impresora pueden tener dificultades para imprimir con una altura de capa variable. Habilitado por defecto."
 
-#: src/libslic3r/PrintConfig.cpp:1984
+#: src/libslic3r/PrintConfig.cpp:2126
 msgid "Spacing between interface lines. Set zero to get a solid interface."
 msgstr "Espaciado entre líneas de interfaz. Establezca cero para obtener una interfaz sólida."
 
-#: src/libslic3r/PrintConfig.cpp:2018
+#: src/libslic3r/PrintConfig.cpp:1155
+msgid "Spacing between ironing passes"
+msgstr "Separación entre pasadas de alisado"
+
+#: src/libslic3r/PrintConfig.cpp:2160
 msgid "Spacing between support material lines."
 msgstr "Espaciado entre las líneas de material de soporte."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:616
-#: src/slic3r/GUI/GUI_Preview.cpp:224 src/slic3r/GUI/Tab.cpp:1145
-#: src/libslic3r/PrintConfig.cpp:235 src/libslic3r/PrintConfig.cpp:458
-#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1048
-#: src/libslic3r/PrintConfig.cpp:1431 src/libslic3r/PrintConfig.cpp:1668
-#: src/libslic3r/PrintConfig.cpp:1716 src/libslic3r/PrintConfig.cpp:1768
-#: src/libslic3r/PrintConfig.cpp:2118
+#: src/slic3r/GUI/GUI_ObjectList.cpp:96 src/slic3r/GUI/GUI_ObjectList.cpp:655
+#: src/slic3r/GUI/GUI_Preview.cpp:278 src/slic3r/GUI/Tab.cpp:1474
+#: src/libslic3r/PrintConfig.cpp:269 src/libslic3r/PrintConfig.cpp:494
+#: src/libslic3r/PrintConfig.cpp:963 src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1165 src/libslic3r/PrintConfig.cpp:1539
+#: src/libslic3r/PrintConfig.cpp:1776 src/libslic3r/PrintConfig.cpp:1831
+#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:2261
 msgid "Speed"
 msgstr "Velocidad"
 
-#: src/libslic3r/PrintConfig.cpp:1670
-msgid "Speed (baud) of USB/serial port for printer connection."
-msgstr "Velocidad (baudios) del puerto USB / serie para la conexión de la impresora."
-
-#: src/libslic3r/GCode/PreviewData.cpp:351
+#: src/slic3r/GUI/GCodeViewer.cpp:2238 src/libslic3r/GCode/PreviewData.cpp:356
 msgid "Speed (mm/s)"
 msgstr "Velocidad (mm/s)"
 
-#: src/libslic3r/PrintConfig.cpp:920
+#: src/libslic3r/PrintConfig.cpp:964
 msgid "Speed for filling small gaps using short zigzag moves. Keep this reasonably low to avoid too much shaking and resonance issues. Set zero to disable gaps filling."
 msgstr "Velocidad para llenar pequeños espacios usando movimientos cortos de zigzag. Mantenga esto razonablemente bajo para evitar demasiados problemas de vibración y sacudidas. Establezca cero para desactivar el llenado de huecos."
 
-#: src/slic3r/GUI/Tab.cpp:1158
+#: src/slic3r/GUI/Tab.cpp:1488
 msgid "Speed for non-print moves"
 msgstr "Velocidad para movimientos sin impresión"
 
-#: src/libslic3r/PrintConfig.cpp:1432
+#: src/libslic3r/PrintConfig.cpp:1540
 msgid "Speed for perimeters (contours, aka vertical shells). Set to zero for auto."
 msgstr "Velocidad para perímetros (contornos, también conocidos como conchas verticales). Establecer a cero para auto."
 
-#: src/slic3r/GUI/Tab.cpp:1146
+#: src/slic3r/GUI/Tab.cpp:1475
 msgid "Speed for print moves"
 msgstr "Velocidad para movimientos de impresión"
 
-#: src/libslic3r/PrintConfig.cpp:236
+#: src/libslic3r/PrintConfig.cpp:270
 msgid "Speed for printing bridges."
 msgstr "Velocidad para imprimir puentes."
 
-#: src/libslic3r/PrintConfig.cpp:1769
+#: src/libslic3r/PrintConfig.cpp:1884
 msgid "Speed for printing solid regions (top/bottom/internal horizontal shells). This can be expressed as a percentage (for example: 80%) over the default infill speed above. Set to zero for auto."
 msgstr "Velocidad para imprimir regiones sólidas (superior / inferior / conchas horizontales internas). Esto se puede expresar como un porcentaje (por ejemplo: 80%) sobre la velocidad de relleno predeterminada anterior. Establecer a cero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1993
+#: src/libslic3r/PrintConfig.cpp:2135
 msgid "Speed for printing support material interface layers. If expressed as percentage (for example 50%) it will be calculated over support material speed."
 msgstr "Velocidad para imprimir capas de interfaz de material de soporte. Si se expresa como porcentaje (por ejemplo, 50%), se calculará sobre la velocidad del material de soporte."
 
-#: src/libslic3r/PrintConfig.cpp:2027
+#: src/libslic3r/PrintConfig.cpp:2169
 msgid "Speed for printing support material."
 msgstr "Velocidad para imprimir material de soporte."
 
-#: src/libslic3r/PrintConfig.cpp:1049
+#: src/libslic3r/PrintConfig.cpp:1093
 msgid "Speed for printing the internal fill. Set to zero for auto."
 msgstr "Velocidad para imprimir el relleno interno. Establecer a cero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:2119
+#: src/libslic3r/PrintConfig.cpp:2262
 msgid "Speed for printing top solid layers (it only applies to the uppermost external layers and not to their internal solid layers). You may want to slow down this to get a nicer surface finish. This can be expressed as a percentage (for example: 80%) over the solid infill speed above. Set to zero for auto."
 msgstr "Velocidad para imprimir capas sólidas superiores (solo se aplica a las capas externas superiores y no a sus capas sólidas internas). Es posible que desee reducir la velocidad para obtener un acabado de superficie más agradable. Esto se puede expresar como un porcentaje (por ejemplo: 80%) sobre la velocidad de relleno sólido anterior. Establecer a cero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:2153
+#: src/libslic3r/PrintConfig.cpp:2296
 msgid "Speed for travel moves (jumps between distant extrusion points)."
 msgstr "Velocidad para movimientos (saltos entre puntos de extrusión distantes)."
 
-#: src/libslic3r/PrintConfig.cpp:659
+#: src/libslic3r/PrintConfig.cpp:695
 msgid "Speed of the first cooling move"
 msgstr "Velocidad del primer movimiento de enfriamiento"
 
-#: src/libslic3r/PrintConfig.cpp:678
+#: src/libslic3r/PrintConfig.cpp:714
 msgid "Speed of the last cooling move"
 msgstr "Velocidad del último movimiento de enfriamiento"
 
-#: src/libslic3r/PrintConfig.cpp:616
+#: src/libslic3r/PrintConfig.cpp:652
 msgid "Speed used at the very beginning of loading phase."
 msgstr "Velocidad utilizada al inicio de la fase de carga."
 
-#: src/libslic3r/PrintConfig.cpp:608
+#: src/libslic3r/PrintConfig.cpp:644
 msgid "Speed used for loading the filament on the wipe tower."
 msgstr "Velocidad empleada para cargar el filamento en la torre de limpieza."
 
-#: src/libslic3r/PrintConfig.cpp:624
+#: src/libslic3r/PrintConfig.cpp:660
 msgid "Speed used for unloading the filament on the wipe tower (does not affect  initial part of unloading just after ramming)."
 msgstr "Velocidad empleada para descargar el filamento en la torre de limpieza (no afecta a la fase inicial de la descarga, sólo después de empujar)."
 
-#: src/libslic3r/PrintConfig.cpp:633
+#: src/libslic3r/PrintConfig.cpp:669
 msgid "Speed used for unloading the tip of the filament immediately after ramming."
 msgstr "Velocidad utilizada para descargar la punta del filamento inmediatamente después del ramming."
 
-#: src/slic3r/GUI/Mouse3DController.cpp:296
+#: src/slic3r/GUI/Mouse3DController.cpp:279
 msgid "Speed:"
 msgstr "Velocidad:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:37
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Sphere"
 msgstr "Esfera"
 
-#: src/libslic3r/PrintConfig.cpp:1794
+#: src/libslic3r/PrintConfig.cpp:1909
 msgid "Spiral vase"
 msgstr "Modo vaso"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:90
+#: src/slic3r/GUI/ConfigManipulation.cpp:89
 msgid "Spiral Vase"
 msgstr "Modo Vaso Espiral"
 
-#: src/slic3r/GUI/Plater.cpp:4019 src/slic3r/GUI/Plater.cpp:4034
-#: src/slic3r/GUI/Plater.cpp:4048 src/libslic3r/PrintConfig.cpp:3471
+#: src/slic3r/GUI/Plater.cpp:3939 src/slic3r/GUI/Plater.cpp:3954
+#: src/slic3r/GUI/Plater.cpp:3972 src/libslic3r/PrintConfig.cpp:3670
 msgid "Split"
 msgstr "Dividir"
 
-#: src/slic3r/GUI/Plater.cpp:4019
+#: src/slic3r/GUI/Plater.cpp:3939
 msgid "Split the selected object"
 msgstr "Dividir el objeto seleccionado"
 
-#: src/slic3r/GUI/Plater.cpp:4014 src/slic3r/GUI/Plater.cpp:4034
+#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3954
 msgid "Split the selected object into individual objects"
 msgstr "Dividir el objeto seleccionado en objetos individuales"
 
-#: src/slic3r/GUI/Plater.cpp:4016 src/slic3r/GUI/Plater.cpp:4048
+#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3972
 msgid "Split the selected object into individual sub-parts"
 msgstr "Dividir el objeto seleccionado en subpartes individuales"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4550
+#: src/slic3r/GUI/GLCanvas3D.cpp:4916
 msgid "Split to objects"
 msgstr "Partir en varias piezas"
 
-#: src/slic3r/GUI/Plater.cpp:2981
+#: src/slic3r/GUI/Plater.cpp:2774
 msgid "Split to Objects"
 msgstr "Partir en Varias Piezas"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4560 src/slic3r/GUI/GUI_ObjectList.cpp:1487
+#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/GUI_ObjectList.cpp:1618
 msgid "Split to parts"
 msgstr "Separar en piezas"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2274
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2440
 msgid "Split to Parts"
 msgstr "Separar en Piezas"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "Standard"
 msgstr "Estándar"
 
-#: src/libslic3r/PrintConfig.cpp:846
+#: src/libslic3r/PrintConfig.cpp:884
 msgid "Stars"
 msgstr "Estrellas"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "Start a new project"
 msgstr "Empezar un nuevo proyecto"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Start at height"
 msgstr "Comenzar en altura"
 
-#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1976
-#: src/libslic3r/PrintConfig.cpp:1813 src/libslic3r/PrintConfig.cpp:1828
+#: src/slic3r/GUI/Tab.cpp:1873 src/slic3r/GUI/Tab.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:1928 src/libslic3r/PrintConfig.cpp:1943
 msgid "Start G-code"
 msgstr "Comenzar el código G"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "Start new slicing process"
 msgstr "Comenzar un nuevo proceso de laminado"
 
@@ -7357,7 +8475,37 @@ msgstr "Comenzar un nuevo proceso de laminado"
 msgid "Start printing after upload"
 msgstr "Empezar a imprimir después de subir"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:151
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Start the application"
+msgstr "Inicia el programa"
+
+#: src/slic3r/GUI/GUI_App.cpp:386
+msgid ""
+"Starting with %1% 2.3, configuration directory on Linux has changed (according to XDG Base Directory Specification) to \n"
+"%2%.\n"
+"\n"
+"This directory did not exist yet (maybe you run the new version for the first time).\n"
+"However, an old %1% configuration directory was detected in \n"
+"%3%.\n"
+"\n"
+"Consider moving the contents of the old directory to the new location in order to access your profiles, etc.\n"
+"Note that if you decide to downgrade %1% in future, it will use the old location again.\n"
+"\n"
+"What do you want to do now?"
+msgstr ""
+"Comenzando con %1% 2.3, el directorio de configuración en Linux ha cambiado (de acuerdo con la Especificación de directorio base de XDG) a\n"
+"%2%.\n"
+"\n"
+"Este directorio aún no existía (tal vez ejecutes la nueva versión por primera vez).\n"
+"Sin embargo, se detectó un directorio de configuración antiguo %1% en\n"
+"%3%.\n"
+"\n"
+"Puedes mover el contenido del directorio antiguo a la nueva ubicación para acceder a tus perfiles, etc.\n"
+"Ten en cuenta que si decides retroceder de versión %1% en el futuro, volverás a utilizar la ubicación anterior.\n"
+"\n"
+"¿Qué quieres hacer ahora?"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:149
 msgid "Status"
 msgstr "Estado"
 
@@ -7365,166 +8513,160 @@ msgstr "Estado"
 msgid "Status:"
 msgstr "Estado:"
 
-#: src/slic3r/GUI/Tab.cpp:2209
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2378
 msgid "Stealth"
 msgstr "Silencio"
 
-#: src/slic3r/GUI/Plater.cpp:1291
+#: src/slic3r/GUI/Plater.cpp:1187 src/slic3r/GUI/Plater.cpp:1235
 msgid "stealth mode"
 msgstr "modo silencioso"
 
-#: src/slic3r/GUI/Plater.cpp:4985
+#: src/slic3r/GUI/GCodeViewer.cpp:2557
+msgid "Stealth mode"
+msgstr "Modo silencioso"
+
+#: src/slic3r/GUI/Plater.cpp:5118
 #, c-format
 msgid "STL file exported to %s"
 msgstr "Archivo STL exportado a %s"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Stop at height"
 msgstr "Parar en altura"
 
-#: src/slic3r/GUI/Tab.cpp:1693 src/slic3r/GUI/Tab.cpp:1928
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
 msgid "Success!"
 msgstr "¡Éxito!"
 
-#: src/slic3r/GUI/PresetHints.cpp:203
+#: src/slic3r/GUI/Plater.cpp:2047
+#, c-format
+msgid "Successfully unmounted. The device %s(%s) can now be safely removed from the computer."
+msgstr "Desmontado con éxito. El dispositivo %s (%s) ahora se puede retirar de forma segura del ordenador."
+
+#: src/slic3r/GUI/PresetHints.cpp:202
 msgid "support"
 msgstr "soporte"
 
-#: src/libslic3r/PrintConfig.cpp:2692
+#: src/libslic3r/PrintConfig.cpp:2856
 msgid "Support base diameter"
 msgstr "Diámetro de la base del soporte"
 
-#: src/libslic3r/PrintConfig.cpp:2702
+#: src/libslic3r/PrintConfig.cpp:2866
 msgid "Support base height"
 msgstr "Altura de la base del soporte"
 
-#: src/libslic3r/PrintConfig.cpp:2711
+#: src/libslic3r/PrintConfig.cpp:2875
 msgid "Support base safety distance"
 msgstr "Distancia de seguridad de la base de soportes"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Blocker"
 msgstr "Bloqueo de soporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/libslic3r/PrintConfig.cpp:895
+msgid "Support Cubic"
+msgstr "Soporte Cúbico"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Enforcer"
 msgstr "Refuerzo de soporte"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:163
+#: src/slic3r/GUI/ConfigManipulation.cpp:162
 msgid "Support Generator"
 msgstr "Generador de Soportes"
 
-#: src/slic3r/GUI/Tab.cpp:3608
+#: src/slic3r/GUI/Tab.cpp:4018
 msgid "Support head"
 msgstr "Cabeza del soporte"
 
-#: src/libslic3r/PrintConfig.cpp:2620
-msgid "Support head front diameter"
-msgstr "Diámetro del frontal de la cabeza del soporte"
-
-#: src/libslic3r/PrintConfig.cpp:2629
-msgid "Support head penetration"
-msgstr "Penetración de la cabeza del soporte"
-
-#: src/libslic3r/PrintConfig.cpp:2638
-msgid "Support head width"
-msgstr "Ancho de la cabeza del soporte"
-
-#: src/slic3r/GUI/PresetHints.cpp:213
+#: src/slic3r/GUI/PresetHints.cpp:212
 msgid "support interface"
 msgstr "interfaz de soporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:97
-#: src/slic3r/GUI/GUI_ObjectList.cpp:615 src/slic3r/GUI/GUI_Preview.cpp:246
-#: src/slic3r/GUI/Tab.cpp:1120 src/slic3r/GUI/Tab.cpp:1121
-#: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370
-#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1866
-#: src/libslic3r/PrintConfig.cpp:1872 src/libslic3r/PrintConfig.cpp:1880
-#: src/libslic3r/PrintConfig.cpp:1892 src/libslic3r/PrintConfig.cpp:1902
-#: src/libslic3r/PrintConfig.cpp:1910 src/libslic3r/PrintConfig.cpp:1925
-#: src/libslic3r/PrintConfig.cpp:1946 src/libslic3r/PrintConfig.cpp:1958
-#: src/libslic3r/PrintConfig.cpp:1974 src/libslic3r/PrintConfig.cpp:1983
-#: src/libslic3r/PrintConfig.cpp:1992 src/libslic3r/PrintConfig.cpp:2003
-#: src/libslic3r/PrintConfig.cpp:2017 src/libslic3r/PrintConfig.cpp:2025
-#: src/libslic3r/PrintConfig.cpp:2026 src/libslic3r/PrintConfig.cpp:2035
-#: src/libslic3r/PrintConfig.cpp:2043 src/libslic3r/PrintConfig.cpp:2057
+#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:95
+#: src/slic3r/GUI/GUI_ObjectList.cpp:654 src/slic3r/GUI/GUI_Preview.cpp:311
+#: src/slic3r/GUI/Tab.cpp:1449 src/slic3r/GUI/Tab.cpp:1450
+#: src/libslic3r/ExtrusionEntity.cpp:324 src/libslic3r/ExtrusionEntity.cpp:356
+#: src/libslic3r/PrintConfig.cpp:404 src/libslic3r/PrintConfig.cpp:1610
+#: src/libslic3r/PrintConfig.cpp:2008 src/libslic3r/PrintConfig.cpp:2014
+#: src/libslic3r/PrintConfig.cpp:2022 src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2044 src/libslic3r/PrintConfig.cpp:2052
+#: src/libslic3r/PrintConfig.cpp:2067 src/libslic3r/PrintConfig.cpp:2088
+#: src/libslic3r/PrintConfig.cpp:2100 src/libslic3r/PrintConfig.cpp:2116
+#: src/libslic3r/PrintConfig.cpp:2125 src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2145 src/libslic3r/PrintConfig.cpp:2159
+#: src/libslic3r/PrintConfig.cpp:2167 src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2177 src/libslic3r/PrintConfig.cpp:2185
+#: src/libslic3r/PrintConfig.cpp:2199
 msgid "Support material"
 msgstr "Material de soporte"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:247 src/libslic3r/ExtrusionEntity.cpp:320
-#: src/libslic3r/PrintConfig.cpp:1991
+#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/ExtrusionEntity.cpp:325
+#: src/libslic3r/ExtrusionEntity.cpp:358 src/libslic3r/PrintConfig.cpp:2133
 msgid "Support material interface"
 msgstr "Interfaz del material de soporte"
 
-#: src/libslic3r/PrintConfig.cpp:2044
+#: src/libslic3r/PrintConfig.cpp:2186
 msgid "Support material will not be generated for overhangs whose slope angle (90° = vertical) is above the given threshold. In other words, this value represent the most horizontal slope (measured from the horizontal plane) that you can print without support material. Set to zero for automatic detection (recommended)."
 msgstr "El material de soporte no se generará para voladizos cuyo ángulo de inclinación (90 ° = vertical) esté por encima del umbral dado. En otras palabras, este valor representa la pendiente más horizontal (medida desde el plano horizontal) que puede imprimir sin material de soporte. Ajuste a cero para la detección automática (recomendado)."
 
-#: src/libslic3r/PrintConfig.cpp:1964
+#: src/libslic3r/PrintConfig.cpp:2106
 msgid "Support material/raft interface extruder"
 msgstr "Extrusor para el material de soporte o balsa"
 
-#: src/libslic3r/PrintConfig.cpp:1937
+#: src/libslic3r/PrintConfig.cpp:2079
 msgid "Support material/raft/skirt extruder"
 msgstr "Extrusor para el material de soporte/falda/balsa"
 
-#: src/slic3r/GUI/Plater.cpp:500 src/libslic3r/PrintConfig.cpp:1901
-#: src/libslic3r/PrintConfig.cpp:2674
+#: src/slic3r/GUI/Plater.cpp:366 src/libslic3r/PrintConfig.cpp:2043
+#: src/libslic3r/PrintConfig.cpp:2838
 msgid "Support on build plate only"
 msgstr "Soporte en la base solamente"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:888
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:762
 msgid "Support parameter change"
 msgstr "Cambio de parámetros de soporte"
 
-#: src/slic3r/GUI/Tab.cpp:3613
+#: src/slic3r/GUI/Tab.cpp:4023
 msgid "Support pillar"
 msgstr "Pilares de soporte"
 
-#: src/libslic3r/PrintConfig.cpp:2658
-msgid "Support pillar connection mode"
-msgstr "Modo de conexión de los pilares de soporte"
-
-#: src/libslic3r/PrintConfig.cpp:2648
-msgid "Support pillar diameter"
-msgstr "Diámetro de los puntos de soporte"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
-#: src/libslic3r/PrintConfig.cpp:2764
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/libslic3r/PrintConfig.cpp:2928
 msgid "Support points density"
 msgstr "Densidad de los puntos de soporte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1196
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048
 msgid "Support points edit"
 msgstr "Edición de puntos de soporte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:624
-#: src/slic3r/GUI/Plater.cpp:495 src/slic3r/GUI/Tab.cpp:3604
-#: src/slic3r/GUI/Tab.cpp:3605 src/libslic3r/PrintConfig.cpp:2614
-#: src/libslic3r/PrintConfig.cpp:2621 src/libslic3r/PrintConfig.cpp:2630
-#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2649
-#: src/libslic3r/PrintConfig.cpp:2675 src/libslic3r/PrintConfig.cpp:2682
-#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2703
-#: src/libslic3r/PrintConfig.cpp:2712 src/libslic3r/PrintConfig.cpp:2725
-#: src/libslic3r/PrintConfig.cpp:2735 src/libslic3r/PrintConfig.cpp:2744
-#: src/libslic3r/PrintConfig.cpp:2754 src/libslic3r/PrintConfig.cpp:2765
-#: src/libslic3r/PrintConfig.cpp:2773
+#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:663
+#: src/slic3r/GUI/Plater.cpp:361 src/slic3r/GUI/Tab.cpp:4014
+#: src/slic3r/GUI/Tab.cpp:4015 src/libslic3r/PrintConfig.cpp:2757
+#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2773
+#: src/libslic3r/PrintConfig.cpp:2782 src/libslic3r/PrintConfig.cpp:2792
+#: src/libslic3r/PrintConfig.cpp:2802 src/libslic3r/PrintConfig.cpp:2839
+#: src/libslic3r/PrintConfig.cpp:2846 src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:2867 src/libslic3r/PrintConfig.cpp:2876
+#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899
+#: src/libslic3r/PrintConfig.cpp:2908 src/libslic3r/PrintConfig.cpp:2918
+#: src/libslic3r/PrintConfig.cpp:2929 src/libslic3r/PrintConfig.cpp:2937
 msgid "Supports"
 msgstr "Soportes"
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "supports and pad"
 msgstr "soportes y pad"
 
-#: src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1185
 msgid "Supports remaining times"
 msgstr "Compatible con tiempos restantes"
 
-#: src/libslic3r/PrintConfig.cpp:1101
+#: src/libslic3r/PrintConfig.cpp:1194
 msgid "Supports stealth mode"
 msgstr "Soporta modo silencioso"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:159
+#: src/slic3r/GUI/ConfigManipulation.cpp:158
 msgid ""
 "Supports work better, if the following feature is enabled:\n"
 "- Detect bridging perimeters"
@@ -7532,44 +8674,60 @@ msgstr ""
 "Los soportes funcionan mejor si la siguiente característica está habilitada:\n"
 "- Detectar perímetros con puentes"
 
-#: src/slic3r/GUI/Preferences.cpp:87
+#: src/slic3r/GUI/Preferences.cpp:104
 msgid "Suppress \" - default - \" presets"
 msgstr "Suprima los ajustes iniciales \"- predeterminado -\""
 
-#: src/slic3r/GUI/Preferences.cpp:89
+#: src/slic3r/GUI/Preferences.cpp:106
 msgid "Suppress \" - default - \" presets in the Print / Filament / Printer selections once there are any other valid presets available."
 msgstr "Suprima los ajustes iniciales \"- predeterminado -\" en las selecciones Imprimir / Filamento / Impresora una vez que haya otros ajustes preestablecidos disponibles."
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "SVG"
 msgstr "SVG"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144
+#: src/slic3r/GUI/Mouse3DController.cpp:318
+msgid "Swap Y/Z axes"
+msgstr "Alternar ejes Y/Z"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+msgid "Switch between Editor/Preview"
+msgstr "Cambiar entre Editor/Previsualización"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1273
 msgid "Switch code to Change extruder"
 msgstr "Cambiar código para cambiar extrusor"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1179
+#: src/slic3r/GUI/DoubleSlider.cpp:1306
 msgid "Switch code to Color change (%1%) for:"
 msgstr "Código para cambiar de color (%1%) para:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
 msgid "Switch to 3D"
 msgstr "Cambiar a 3D"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1376
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1223
 msgid "Switch to editing mode"
 msgstr "Cambiar al modo edición"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
 msgid "Switch to Preview"
 msgstr "Cambiar a Previsualización"
 
-#: src/slic3r/GUI/wxExtensions.cpp:703
+#: src/slic3r/GUI/GLCanvas3D.cpp:4302 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Switch to Settings"
+msgstr "Cambiar a Ajustes"
+
+#: src/slic3r/GUI/wxExtensions.cpp:623
 #, c-format
 msgid "Switch to the %s mode"
 msgstr "Cambiar al modo %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:882
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:542
+msgid "Switching Presets: Unsaved Changes"
+msgstr "Cambio de ajustes preestablecidos: Cambios No guardados"
+
+#: src/slic3r/GUI/GUI_App.cpp:1608
 msgid ""
 "Switching the language will trigger application restart.\n"
 "You will lose content of the plater."
@@ -7587,65 +8745,72 @@ msgstr ""
 "\n"
 "¿Quiere continuar?"
 
-#: src/slic3r/GUI/Tab.cpp:1014
+#: src/slic3r/GUI/Tab.cpp:1332
 msgid "symbolic profile name"
 msgstr "nombre perfil simbólico"
 
-#: src/libslic3r/PrintConfig.cpp:2036
+#: src/libslic3r/PrintConfig.cpp:2178
 msgid "Synchronize support layers with the object print layers. This is useful with multi-material printers, where the extruder switch is expensive."
 msgstr "Sincronizar las capas de soporte con las capas de impresión del objeto. Esto es útil con impresoras de múltiples materiales, donde el cambio de el extrusor es costoso."
 
-#: src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2176
 msgid "Synchronize with object layers"
 msgstr "Sincronizar con capas las del objeto"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "System &Info"
 msgstr "&Información del Sistema"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:78
+#: src/slic3r/GUI/SysInfoDialog.cpp:90 src/slic3r/GUI/SysInfoDialog.cpp:92
 msgid "System Information"
 msgstr "Información del sistema"
 
-#: src/slic3r/GUI/Preset.cpp:1109 src/slic3r/GUI/Preset.cpp:1164
-#: src/slic3r/GUI/Preset.cpp:1242 src/slic3r/GUI/Preset.cpp:1284
-#: src/slic3r/GUI/PresetBundle.cpp:1583 src/slic3r/GUI/PresetBundle.cpp:1672
+#: src/slic3r/GUI/PresetComboBoxes.cpp:188
+#: src/slic3r/GUI/PresetComboBoxes.cpp:226
+#: src/slic3r/GUI/PresetComboBoxes.cpp:724
+#: src/slic3r/GUI/PresetComboBoxes.cpp:774
+#: src/slic3r/GUI/PresetComboBoxes.cpp:886
+#: src/slic3r/GUI/PresetComboBoxes.cpp:930
 msgid "System presets"
 msgstr "Ajustes del sistema"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Take Configuration &Snapshot"
 msgstr "&Tomar una Captura de la configuración"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Taking configuration snapshot"
 msgstr "Haciendo una instantánea de la configuración"
 
-#: src/slic3r/GUI/Tab.cpp:1433 src/libslic3r/PrintConfig.cpp:2067
+#: src/slic3r/GUI/Tab.cpp:1779
 msgid "Temperature"
 msgstr "Temperatura"
 
-#: src/libslic3r/PrintConfig.cpp:1804
+#: src/libslic3r/PrintConfig.cpp:1919
 msgid "Temperature difference to be applied when an extruder is not active. Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped."
 msgstr "Diferencia de temperatura que se aplicará cuando un extrusor no esté activo. ACtiva una falda \"de sacrificio\" de altura completa en la que las boquillas se limpian periódicamente."
 
-#: src/libslic3r/PrintConfig.cpp:1803
+#: src/libslic3r/PrintConfig.cpp:1918
 msgid "Temperature variation"
 msgstr "Variación de temperatura"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
+#: src/slic3r/GUI/ConfigWizard.cpp:1383
 msgid "Temperatures"
 msgstr "Temperaturas"
 
-#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:1915
+#: src/slic3r/GUI/Tab.cpp:2215
+msgid "Template Custom G-code"
+msgstr "Plantilla Código G Personalizado"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:284
 msgid "Test"
 msgstr "Test"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:172
+#: src/slic3r/GUI/BedShapeDialog.cpp:315
 msgid "Texture"
 msgstr "Textura"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:208
+#: src/slic3r/GUI/ConfigManipulation.cpp:207
 msgid "The %1% infill pattern is not supposed to work at 100%% density."
 msgstr "Se supone que el patrón de relleno %1% no funciona a una densidad del 100%%."
 
@@ -7663,131 +8828,148 @@ msgstr ""
 "No se encontró el dispositivo %s. \n"
 "Si el dispositivo está conectado, presione el botón Reset al lado del conector USB ..."
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1238
 msgid "The current custom preset will be detached from the parent system preset."
 msgstr "El preajuste personalizado actual se separará del preajuste del sistema principal."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:925
 msgid ""
 "The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
 "Non-uniform scaling of tilted objects is only possible in the World coordinate system,\n"
 "once the rotation is embedded into the object coordinates."
 msgstr "El objeto que está manipulando está inclinado (los ángulos de rotación no son múltiplos de 90º). El escalado no uniforme de objetos inclinados sólo es posible en sistema de coordenadas Mundo, una vez que la rotación se ha aplicado a las coordenadas del objeto."
 
-#: src/libslic3r/PrintConfig.cpp:2726
+#: src/libslic3r/PrintConfig.cpp:2890
 msgid "The default angle for connecting support sticks and junctions."
 msgstr "El ángulo por defecto para la conexión de sticks y uniones de soporte."
 
-#: src/libslic3r/SLAPrint.cpp:631
+#: src/libslic3r/SLAPrint.cpp:645
 msgid "The endings of the support pillars will be deployed on the gap between the object and the pad. 'Support base safety distance' has to be greater than the 'Pad object gap' parameter to avoid this."
 msgstr "Las terminaciones de los pilares de soporte se desplegarán en el espacio entre el objeto y el pad. La 'distancia de seguridad de la base de soporte' debe ser mayor que el parámetro 'Distancia entre objetos de relleno' para evitar esto."
 
-#: src/libslic3r/PrintConfig.cpp:489
+#: src/libslic3r/PrintConfig.cpp:525
 msgid "The extruder to use (unless more specific extruder settings are specified). This value overrides perimeter and infill extruders, but not the support extruders."
 msgstr "La extrusora que se usa (a menos que se especifiquen configuraciones de extrusión más específicas). Este valor anula los extrusores de perímetro y relleno, pero no los extrusores de soporte."
 
-#: src/libslic3r/PrintConfig.cpp:1003
+#: src/libslic3r/PrintConfig.cpp:1047
 msgid "The extruder to use when printing infill."
 msgstr "El extrusor que se usa cuando se imprime relleno."
 
-#: src/libslic3r/PrintConfig.cpp:1410
+#: src/libslic3r/PrintConfig.cpp:1518
 msgid "The extruder to use when printing perimeters and brim. First extruder is 1."
 msgstr "El extrusor que se usa al imprimir perímetros y borde. El primer extrusor es 1."
 
-#: src/libslic3r/PrintConfig.cpp:1738
+#: src/libslic3r/PrintConfig.cpp:1853
 msgid "The extruder to use when printing solid infill."
 msgstr "El extrusor que se usa al imprimir relleno sólido."
 
-#: src/libslic3r/PrintConfig.cpp:1966
+#: src/libslic3r/PrintConfig.cpp:2108
 msgid "The extruder to use when printing support material interface (1+, 0 to use the current extruder to minimize tool changes). This affects raft too."
 msgstr "La extrusora que se usa al imprimir la interfaz de material de soporte (1+, 0 para usar la extrusora actual para minimizar los cambios de herramientas). Esto también afecta a la balsa."
 
-#: src/libslic3r/PrintConfig.cpp:1939
+#: src/libslic3r/PrintConfig.cpp:2081
 msgid "The extruder to use when printing support material, raft and skirt (1+, 0 to use the current extruder to minimize tool changes)."
 msgstr "El extrusor que se usa al imprimir material de soporte, balsa y falda (1+, 0 para usar la extrusora actual para minimizar los cambios de herramientas)."
 
-#: src/libslic3r/PrintConfig.cpp:727
+#: src/libslic3r/PrintConfig.cpp:763
 msgid "The filament material type for use in custom G-codes."
 msgstr "El tipo de material de filamento para uso en códigos G personalizados."
 
-#: src/libslic3r/PrintConfig.cpp:3494
+#: src/libslic3r/PrintConfig.cpp:3693
 msgid "The file where the output will be written (if not specified, it will be based on the input file)."
 msgstr "El archivo donde se escribirá el resultado (si no se especifica, se basará en en archivo de entrada)."
 
-#: src/libslic3r/PrintConfig.cpp:1102
+#: src/libslic3r/PrintConfig.cpp:1195
 msgid "The firmware supports stealth mode"
 msgstr "El firmware soporta el modo silencioso"
 
-#: src/libslic3r/PrintConfig.cpp:120
+#: src/libslic3r/PrintConfig.cpp:122
 msgid "The first layer will be shrunk in the XY plane by the configured value to compensate for the 1st layer squish aka an Elephant Foot effect."
 msgstr "La primera capa se contraerá en el plano XY por el valor configurado para compensar el aplatamiento de la 1ª capa, también conocido como efecto Pie de Elefante."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3820
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3927 src/slic3r/GUI/Tab.cpp:3457
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4283
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4410
+#: src/slic3r/GUI/SavePresetDialog.cpp:117
 msgid "the following characters are not allowed:"
 msgstr "los siguientes caracteres no están permitidos:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1830
+#: src/slic3r/GUI/ConfigWizard.cpp:2257
 msgid "The following FFF printer models have no filament selected:"
 msgstr "Los siguientes modelos de impresoras FFF no tienen filamento seleccionado:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1848
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1004
+msgid "The following presets were modified:"
+msgstr "Los siguientes ajustes fueron modificados:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:2275
 msgid "The following SLA printer models have no materials selected:"
 msgstr "Los siguientes modelos de impresoras SLA no tienen filamento seleccionado:"
 
-#: src/slic3r/GUI/Tab.cpp:3461
+#: src/slic3r/GUI/SavePresetDialog.cpp:125
 msgid "the following suffix is not allowed:"
 msgstr "el siguiente sufijo no está permitido:"
 
-#: src/libslic3r/PrintConfig.cpp:2871
+#: src/libslic3r/PrintConfig.cpp:3035
 msgid "The gap between the object bottom and the generated pad in zero elevation mode."
 msgstr "El espacio entre la parte de debajo del objeto y el pad generado en el modo de cero elevación."
 
-#: src/libslic3r/PrintConfig.cpp:2704
+#: src/libslic3r/PrintConfig.cpp:2868
 msgid "The height of the pillar base cone"
 msgstr "La altura del cono de la base de un pilar"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1922
+#: src/slic3r/GUI/DoubleSlider.cpp:2140
 msgid "The last color change data was saved for a multi extruder printing with tool changes for whole print."
 msgstr "La información del último cambio de color  se guardó para impresión con múltiples extrusores mediante cambios de herramienta para toda la impresión."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1900 src/slic3r/GUI/DoubleSlider.cpp:1916
+#: src/slic3r/GUI/DoubleSlider.cpp:2119 src/slic3r/GUI/DoubleSlider.cpp:2134
 msgid "The last color change data was saved for a multi extruder printing."
 msgstr "La información del último cambio de color se guardó para la impresión multi-extrusor."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1899
+#: src/slic3r/GUI/DoubleSlider.cpp:2118
 msgid "The last color change data was saved for a single extruder printing."
 msgstr "La información del último cambio de color se ha guardado para impresión con un solo extrusor."
 
-#: src/libslic3r/PrintConfig.cpp:2745
+#: src/libslic3r/PrintConfig.cpp:2909
 msgid "The max distance of two pillars to get linked with each other. A zero value will prohibit pillar cascading."
 msgstr "La distancia máxima entre dos pilares par que se unan entre si. Un valor cero prohibirá el encadenamiento de pilares."
 
-#: src/libslic3r/PrintConfig.cpp:2736
+#: src/libslic3r/PrintConfig.cpp:2900
 msgid "The max length of a bridge"
 msgstr "La longitud máxima de un puente"
 
-#: src/libslic3r/PrintConfig.cpp:2714
+#: src/libslic3r/PrintConfig.cpp:2878
 msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
 msgstr "La distancia mínima del modelo a la base de pilares en mm. Tiene sentido en el modo de cero elevación donde hay un hueco de acuerdo a cuando este parámetro se introduce entre el modelo y el pad."
 
-#: src/libslic3r/PrintConfig.cpp:185
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
+msgid "The name cannot be empty."
+msgstr "El nombre no puede estar vacío."
+
+#: src/libslic3r/PrintConfig.cpp:219
 msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
 msgstr "El número de capas sólidas en la base se incrementa por encima de bottom_solid_layers si es necesario para asegurar un espesor mínimo en la pared de inferior."
 
-#: src/libslic3r/PrintConfig.cpp:2143
+#: src/libslic3r/PrintConfig.cpp:2286
 msgid "The number of top solid layers is increased above top_solid_layers if necessary to satisfy minimum thickness of top shell. This is useful to prevent pillowing effect when printing with variable layer height."
 msgstr "El número de capas sólidas en la parte superior se incrementa sobre top_solid_layers si es necesario para satisfacer la altura mínima de la tapa superior. Esto es útil para prevenir el efecto de achatado cuando se imprime con altura de capa variable."
 
-#: src/libslic3r/PrintConfig.cpp:2277
+#: src/slic3r/GUI/Plater.cpp:2326
+msgid "The object appears to be saved in inches"
+msgstr "La pieza parece que se guardó en pulgadas"
+
+#: src/libslic3r/PrintConfig.cpp:2420
 msgid "The object will be grown/shrunk in the XY plane by the configured value (negative = inwards, positive = outwards). This might be useful for fine-tuning hole sizes."
 msgstr "El objeto se crecerá / reducirá en el plano XY por el valor configurado (negativo = hacia adentro, positivo = hacia afuera). Esto podría ser útil para ajustar el tamaño de los orificios."
 
-#: src/libslic3r/PrintConfig.cpp:1503
+#: src/libslic3r/PrintConfig.cpp:1611
 msgid "The object will be raised by this number of layers, and support material will be generated under it."
 msgstr "El objeto será elevado por este número de capas y se generará material de soporte debajo de él."
 
-#: src/libslic3r/PrintConfig.cpp:2424
+#: src/libslic3r/PrintConfig.cpp:2803
+msgid "The percentage of smaller pillars compared to the normal pillar diameter which are used in problematic areas where a normal pilla cannot fit."
+msgstr "El porcentaje de pilares más pequeños en comparación con el diámetro de pilar normal que se utilizan en áreas problemáticas donde no cabe un pilar normal."
+
+#: src/libslic3r/PrintConfig.cpp:2567
 msgid ""
 "The percentage of the bed area. \n"
 "If the print area exceeds the specified value, \n"
@@ -7797,39 +8979,51 @@ msgstr ""
 "Si el área de impresión excede el valor especificado, \n"
 "entonces se utilizará una inclinación lenta, de lo contrario - una inclinación rápida"
 
-#: src/slic3r/GUI/GUI_App.cpp:932
-msgid "The presets on the following tabs were modified"
-msgstr "Los presets en las siguientes pestañas fueron modificados"
+#: src/slic3r/GUI/Tab.cpp:3430
+msgid "The physical printer(s) below is based on the preset, you are going to delete."
+msgstr "Las siguientes impresoras físicas se basan en el ajuste preestablecido que va a eliminar."
 
-#: src/libslic3r/PrintConfig.cpp:1846
+#: src/slic3r/GUI/Tab.cpp:3438
+msgid "The physical printer(s) below is based only on the preset, you are going to delete."
+msgstr "Las siguientes impresoras están basadas en el mismo ajuste que vas a borrar."
+
+#: src/slic3r/GUI/GUI_App.cpp:1676
+msgid "The preset(s) modifications are successfully saved"
+msgstr "Las modificaciones de los ajustes preestablecidos se guardaron correctamente"
+
+#: src/libslic3r/PrintConfig.cpp:1988
 msgid "The printer multiplexes filaments into a single hot end."
 msgstr "La impresora multiplexa los filamentos en un solo fusor."
 
-#: src/libslic3r/Format/3mf.cpp:1630
+#: src/libslic3r/Format/3mf.cpp:1667
 msgid "The selected 3mf file has been saved with a newer version of %1% and is not compatible."
 msgstr "El archivo 3mf seleccionado se ha guardado con una versión más reciente de %1% y no es compatible."
 
-#: src/libslic3r/Format/AMF.cpp:934
+#: src/libslic3r/Format/AMF.cpp:955
 msgid "The selected amf file has been saved with a newer version of %1% and is not compatible."
 msgstr "El archivo amf seleccionado se ha guardado con una versión más reciente de %1% y no es compatible."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:513
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "The selected file"
+msgstr "El archivo seleccionado"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:589
 msgid "The selected file contains no geometry."
 msgstr "El archivo seleccionado no contiene geometría."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:517
+#: src/slic3r/GUI/BedShapeDialog.cpp:593
 msgid "The selected file contains several disjoint areas. This is not supported."
 msgstr "El archivo seleccionado contiene varias áreas disjuntas. Esto no es compatible."
 
-#: src/slic3r/GUI/Plater.cpp:2970
+#: src/slic3r/GUI/Plater.cpp:2763
 msgid "The selected object can't be split because it contains more than one volume/material."
 msgstr "El objeto seleccionado no se puede dividir porque contiene más de un volumen / material."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2270 src/slic3r/GUI/Plater.cpp:2978
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2771
 msgid "The selected object couldn't be split because it contains only one part."
 msgstr "El objeto seleccionado no se pudo dividir porque contiene solo una parte."
 
-#: src/slic3r/GUI/MainFrame.cpp:461
+#: src/slic3r/GUI/MainFrame.cpp:1003
 msgid ""
 "The selected project is no longer available.\n"
 "Do you want to remove it from the recent projects list?"
@@ -7837,7 +9031,7 @@ msgstr ""
 "El proyecto seleccionado no está disponible.\n"
 "¿Desea eliminarlo de la lista de proyectos recientes?"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:998
+#: src/slic3r/GUI/DoubleSlider.cpp:1121
 msgid ""
 "The sequential print is on.\n"
 "It's impossible to apply any custom G-code for objects printing sequentually.\n"
@@ -7847,20 +9041,24 @@ msgstr ""
 "Es imposible incluir G-code personalizado para piezas que se imprimen secuencialmente.\n"
 "Este código no se procesará durante la generación del G-code."
 
-#: src/libslic3r/PrintConfig.cpp:2846
+#: src/slic3r/GUI/ConfigWizard.cpp:1187
+msgid "The size of the object can be specified in inches"
+msgstr "El tamaño del objeto puede ser especificado en pulgadas"
+
+#: src/libslic3r/PrintConfig.cpp:3010
 msgid "The slope of the pad wall relative to the bed plane. 90 degrees means straight walls."
 msgstr "La pendiente de la pared del pad en relación con el plano de la cama. 90 grados significa paredes rectas."
 
-#: src/libslic3r/PrintConfig.cpp:1614
+#: src/libslic3r/PrintConfig.cpp:1722
 msgid "The speed for loading of a filament into extruder after retraction (it only applies to the extruder motor). If left to zero, the retraction speed is used."
 msgstr "La velocidad de carga de un filamento en la extrusora después de la retracción (solo se aplica al motor del extrusor). Si se deja a cero, se usa la velocidad de retracción."
 
-#: src/libslic3r/PrintConfig.cpp:1606
+#: src/libslic3r/PrintConfig.cpp:1714
 msgid "The speed for retractions (it only applies to the extruder motor)."
 msgstr "La velocidad para las retracciones (solo se aplica al motor del extrusor)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:81
-#, no-c-format
+#: src/slic3r/GUI/ConfigManipulation.cpp:80
+#, c-format
 msgid ""
 "The Spiral Vase mode requires:\n"
 "- one perimeter\n"
@@ -7878,52 +9076,53 @@ msgstr ""
 "-Comprueba que está activado el espesor de pared vertical\n"
 "-Desactiva la detección de paredes finas"
 
-#: src/libslic3r/Print.cpp:1237
+#: src/libslic3r/Print.cpp:1263
 msgid "The Spiral Vase option can only be used when printing a single object."
 msgstr "La opción Vaso en espiral solo puede ser usada cuando se imprime un solo objeto."
 
-#: src/libslic3r/Print.cpp:1244
+#: src/libslic3r/Print.cpp:1270
 msgid "The Spiral Vase option can only be used when printing single material objects."
 msgstr "La opción Vaso en espiral solo puede ser usada al imprimir objetos de un solo material."
 
-#: src/slic3r/GUI/Tab.cpp:3068
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:464
 msgid "The supplied name is empty. It can't be saved."
 msgstr "El nombre proporcionado está vacío. No se puede guardar."
 
-#: src/slic3r/GUI/Tab.cpp:3465
+#: src/slic3r/GUI/SavePresetDialog.cpp:131
 msgid "The supplied name is not available."
 msgstr "El nombre proporcionado no está disponible."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3819
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3926 src/slic3r/GUI/Tab.cpp:3456
-#: src/slic3r/GUI/Tab.cpp:3460
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4282
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4409
+#: src/slic3r/GUI/SavePresetDialog.cpp:116
+#: src/slic3r/GUI/SavePresetDialog.cpp:124
 msgid "The supplied name is not valid;"
 msgstr "El nombre proporcionado no es válido;"
 
-#: src/libslic3r/Print.cpp:1222
+#: src/libslic3r/Print.cpp:1248
 msgid "The supplied settings will cause an empty print."
 msgstr "Los ajustes proporcionados causarán una impresión vacía."
 
-#: src/libslic3r/PrintConfig.cpp:2789
+#: src/libslic3r/PrintConfig.cpp:2953
 msgid "The thickness of the pad and its optional cavity walls."
 msgstr "El grosor de las pads y sus paredes de cavidad opcionales."
 
-#: src/libslic3r/PrintConfig.cpp:1911
+#: src/libslic3r/PrintConfig.cpp:2053
 msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
 msgstr "La distancia vertical entre el objeto y la interfaz del material de soporte. Establecer esto en 0 también evitará que Slic3r use el flujo y la velocidad del puente para la primera capa de los objetos."
 
-#: src/slic3r/GUI/Tab.cpp:2575
+#: src/slic3r/GUI/Tab.cpp:2731
 msgid ""
 "The Wipe option is not available when using the Firmware Retraction mode.\n"
 "\n"
 "Shall I disable it in order to enable Firmware Retraction?"
 msgstr "La opción Limpiar no está disponible cuando se usa el modo Retracción de firmware. ¿Lo inhabilito para habilitar la Retracción de firmware?"
 
-#: src/libslic3r/Print.cpp:1268
+#: src/libslic3r/Print.cpp:1294
 msgid "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)."
 msgstr "La Torre de Limpieza actualmente no es compatible con E volumétrico (use_volumetric_e=0)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:115
+#: src/slic3r/GUI/ConfigManipulation.cpp:114
 msgid ""
 "The Wipe Tower currently supports the non-soluble supports only\n"
 "if they are printed with the current extruder without triggering a tool change.\n"
@@ -7932,51 +9131,55 @@ msgstr ""
 "La Torre de Limpieza actualmente admite los soportes no solubles solo si están impresos con el extrusor actual sin activar un cambio de herramienta. \n"
 "(tanto support_material_extruder como support_material_interface_extruder deben configurarse en 0)."
 
-#: src/libslic3r/Print.cpp:1400
+#: src/libslic3r/Print.cpp:1426
 msgid "The Wipe Tower currently supports the non-soluble supports only if they are printed with the current extruder without triggering a tool change. (both support_material_extruder and support_material_interface_extruder need to be set to 0)."
 msgstr "La Torre de Limpieza actualmente admite los soportes no solubles solo si están impresos con el extrusor actual sin activar un cambio de herramienta. (Tanto support_material_extruder como support_material_interface_extruder deben configurarse en 0)."
 
-#: src/libslic3r/Print.cpp:1270
+#: src/libslic3r/Print.cpp:1296
 msgid "The Wipe Tower is currently not supported for multimaterial sequential prints."
 msgstr "La Torre de Limpieza no se permite ahora para impresiones secuenciales multimaterial."
 
-#: src/libslic3r/Print.cpp:1262
-msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors."
-msgstr "Actualmente, La Torre de Limpieza solo es compatible con los tipos de código G de Marlin, RepRap/Sprinter y Repetier."
+#: src/libslic3r/Print.cpp:1290
+msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors."
+msgstr "La Torre de Limpieza solo es compatible con las variantes de código G usadas por Marlin, RepRap/Sprinter, RepRapFirmware y Repetier."
 
-#: src/libslic3r/Print.cpp:1264
+#: src/libslic3r/Print.cpp:1290
 msgid "The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."
 msgstr "En la actualidad, Wipe Tower solo es compatible con el direccionamiento relativo del extrusor (use_relative_e_distances=1)."
 
-#: src/libslic3r/Print.cpp:1293
+#: src/libslic3r/Print.cpp:1319
 msgid "The Wipe Tower is only supported for multiple objects if they are printed over an equal number of raft layers"
 msgstr "La torre de limpieza sólo se permite para varios objetos si se imprimen sobre un número igual de capas de balsa"
 
-#: src/libslic3r/Print.cpp:1295
+#: src/libslic3r/Print.cpp:1321
 msgid "The Wipe Tower is only supported for multiple objects if they are printed with the same support_material_contact_distance"
 msgstr "La torre de limpieza sólo es compatible con varios objetos si se imprimen con la misma support_material_contact_distance"
 
-#: src/libslic3r/Print.cpp:1297
+#: src/libslic3r/Print.cpp:1323
 msgid "The Wipe Tower is only supported for multiple objects if they are sliced equally."
 msgstr "La torre de limpieza sólo es compatible con varios objetos si se cortan por igual."
 
-#: src/libslic3r/Print.cpp:1291
+#: src/libslic3r/Print.cpp:1317
 msgid "The Wipe Tower is only supported for multiple objects if they have equal layer heights"
 msgstr "La torre de limpieza sólo es compatible con varios objetos si tienen alturas de capas iguales"
 
-#: src/libslic3r/Print.cpp:1257
+#: src/libslic3r/Print.cpp:1283
 msgid "The wipe tower is only supported if all extruders have the same nozzle diameter and use filaments of the same diameter."
 msgstr "La torre de limpieza solo es compatible si todos los extrusores tienen el mismo diámetro del nozzle y usan filamento del mismo diámetro."
 
-#: src/libslic3r/Print.cpp:1339
+#: src/libslic3r/Print.cpp:1365
 msgid "The Wipe tower is only supported if all objects have the same variable layer height"
 msgstr "La Torre de Limpieza solo es compatible si todos los objetos tienen la misma altura de capa variable"
 
-#: src/libslic3r/SLAPrintSteps.cpp:621
+#: src/slic3r/GUI/Plater.cpp:3563
+msgid "There are active warnings concerning sliced models:"
+msgstr "Hay avisos activos respecto a los modelos laminados:"
+
+#: src/libslic3r/SLAPrintSteps.cpp:619
 msgid "There are unprintable objects. Try to adjust support settings to make the objects printable."
 msgstr "Hay objetos no imprimibles. Intenta ajustar la configuración de soportes para que los objetos se puedan imprimir."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1030
+#: src/slic3r/GUI/DoubleSlider.cpp:1155
 msgid ""
 "There is a color change for extruder that has not been used before.\n"
 "Check your settings to avoid redundant color changes."
@@ -7984,13 +9187,13 @@ msgstr ""
 "Hay un cambio de color para el extrusor que no se ha usado antes. \n"
 "Comprueba tus ajustes para evitar cambios de color innecesarios."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1024
+#: src/slic3r/GUI/DoubleSlider.cpp:1149
 msgid ""
 "There is a color change for extruder that won't be used till the end of print job.\n"
 "This code won't be processed during G-code generation."
 msgstr "Hay un cambio de color para el extrusor que no será usado hasta el final del trabajo de impresión. Este código no será procesado durante la generación del G-code."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1027
+#: src/slic3r/GUI/DoubleSlider.cpp:1152
 msgid ""
 "There is an extruder change set to the same extruder.\n"
 "This code won't be processed during G-code generation."
@@ -7998,12 +9201,16 @@ msgstr ""
 "Hay un cambio de extrusor establecido en el mismo extrusor.\n"
 "Este código no se procesará durante la generación del código G."
 
+#: src/libslic3r/GCode.cpp:604
+msgid "There is an object with no extrusions on the first layer."
+msgstr "Hay un objeto sin extrusiones en la primera capa."
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:225
 #, c-format
 msgid "This %s version: %s"
 msgstr "Esta %s versión: %s"
 
-#: src/slic3r/GUI/Tab.cpp:982
+#: src/slic3r/GUI/Tab.cpp:1244
 msgid ""
 "This action is not revertable.\n"
 "Do you want to proceed?"
@@ -8011,79 +9218,79 @@ msgstr ""
 "Esta acción no es reversible.\n"
 "¿Deseas continuar?"
 
-#: src/libslic3r/PrintConfig.cpp:165
+#: src/libslic3r/PrintConfig.cpp:199
 msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Este código se inserta entre los objetos cuando se utiliza la impresión secuencial. Por defecto, el extrusor y la temperatura de la cama se reinician utilizando un comando de no espera; sin embargo, si se detectan M104, M109, M140 o M190 en este código personalizado, Slic3r no agregará comandos de temperatura. Tenga en cuenta que puede usar variables de marcador de posición para todas las configuraciones de Slic3r, por lo que puede poner un comando \"M109 S [first_layer_temperature]\" donde lo desee."
 
-#: src/libslic3r/PrintConfig.cpp:1081
+#: src/libslic3r/PrintConfig.cpp:1174
 msgid "This custom code is inserted at every layer change, right after the Z move and before the extruder moves to the first layer point. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Este código personalizado se inserta en cada cambio de capa, justo después del movimiento Z y antes de que el extrusor se mueva al primer punto de capa. Tenga en cuenta que puede usar variables de marcador de posición para todos los ajustes de Slic3r, así como [layer_num] y [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:154
+#: src/libslic3r/PrintConfig.cpp:188
 msgid "This custom code is inserted at every layer change, right before the Z move. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Este código personalizado se inserta en cada cambio de capa, justo antes del movimiento Z. Tenga en cuenta que puede usar variables de marcador de posición para todos los ajustes de Slic3r, así como [layer_num] y [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:2094
+#: src/libslic3r/PrintConfig.cpp:2237
 msgid "This custom code is inserted before every toolchange. Placeholder variables for all PrusaSlicer settings as well as {previous_extruder} and {next_extruder} can be used. When a tool-changing command which changes to the correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit no other such command. It is therefore possible to script custom behaviour both before and after the toolchange."
 msgstr "Este código personalizado se inserta antes de cada cambio de herramienta. Se pueden utilizar variables de marcador de posición para todas las configuraciones de PrusaSlicer, así como {previous_extruder} y {next_extruder}. Cuando se incluye un comando de cambio de herramienta que cambia al extrusor correcto (como T{next_extruder}), PrusaSlicer no emitirá ningún otro comando. Por lo tanto, es posible escribir un comportamiento personalizado antes y después del cambio de herramienta."
 
-#: src/libslic3r/PrintConfig.cpp:396
+#: src/libslic3r/PrintConfig.cpp:430
 msgid "This end procedure is inserted at the end of the output file, before the printer end gcode (and before any toolchange from this filament in case of multimaterial printers). Note that you can use placeholder variables for all PrusaSlicer settings. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Este procedimiento final se inserta al final del archivo de salida, antes del código G final de la impresora (y antes de cualquier cambio de herramienta desde este filamento en el caso de impresoras multimateriales). Ten en cuenta que puede usar variables de marcador de posición para todas las configuraciones de PrusaSlicer. Si tienes varios extrusores, el código G se procesa en orden de extrusor."
 
-#: src/libslic3r/PrintConfig.cpp:386
+#: src/libslic3r/PrintConfig.cpp:420
 msgid "This end procedure is inserted at the end of the output file. Note that you can use placeholder variables for all PrusaSlicer settings."
 msgstr "Este procedimiento final se inserta al final del archivo de salida. Ten en cuenta que puedes usar variables de marcador de posición para todas las configuraciones de PrusaSlicer."
 
-#: src/libslic3r/PrintConfig.cpp:1258 src/libslic3r/PrintConfig.cpp:1269
+#: src/libslic3r/PrintConfig.cpp:1366 src/libslic3r/PrintConfig.cpp:1377
 msgid "This experimental setting is used to limit the speed of change in extrusion rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."
 msgstr "Esta configuración experimental se usa para limitar la velocidad de cambio en la velocidad de extrusión. Un valor de 1,8 mm³ / s² asegura que se cambia la velocidad de extrusión de 1,8 mm³ / s (ancho de extrusión de 0,45 mm, altura de extrusión de 0,2 mm, avance de 20 mm / s) a 5,4 mm³ / s (avance de 60 mm / s) durará al menos 2 segundos."
 
-#: src/libslic3r/PrintConfig.cpp:1248
+#: src/libslic3r/PrintConfig.cpp:1356
 msgid "This experimental setting is used to set the maximum volumetric speed your extruder supports."
 msgstr "Esta configuración experimental se usa para establecer la velocidad volumétrica máxima que admite el extrusor."
 
-#: src/libslic3r/PrintConfig.cpp:2162
+#: src/libslic3r/PrintConfig.cpp:2305
 msgid "This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin."
 msgstr "Esta configuración experimental utiliza comandos G10 y G11 para que el firmware maneje la retracción. Esto solo se admite en Marlin reciente."
 
-#: src/libslic3r/PrintConfig.cpp:2176
+#: src/libslic3r/PrintConfig.cpp:2319
 msgid "This experimental setting uses outputs the E values in cubic millimeters instead of linear millimeters. If your firmware doesn't already know filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' in your start G-code in order to turn volumetric mode on and use the filament diameter associated to the filament selected in Slic3r. This is only supported in recent Marlin."
 msgstr "Este ajuste experimental utiliza como salida del E valores en milímetros cúbicos en lugar de milímetros lineales. Si su firmware aún no conoce el (los) diámetro (s) del filamento, puede poner comandos como 'M200 D [filament_diameter_0] T0' en su código G inicial para activar el modo volumétrico y usar el diámetro del filamento asociado al filamento seleccionado. en Slic3r. Esto solo se admite en Marlin reciente."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3972
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4459
 msgid "This extruder will be set for selected items"
 msgstr "Este extrusor se aplicará a los objetos seleccionados"
 
-#: src/libslic3r/PrintConfig.cpp:224
+#: src/libslic3r/PrintConfig.cpp:258
 msgid "This factor affects the amount of plastic for bridging. You can decrease it slightly to pull the extrudates and prevent sagging, although default settings are usually good and you should experiment with cooling (use a fan) before tweaking this."
 msgstr "Este factor afecta la cantidad de plástico para formar puentes. Puede disminuirlo ligeramente para extraer los extruidos y evitar el combado, aunque la configuración predeterminada suele ser buena y debe experimentar con la refrigeración (usar un ventilador) antes de ajustar esto."
 
-#: src/libslic3r/PrintConfig.cpp:546
+#: src/libslic3r/PrintConfig.cpp:582
 msgid "This factor changes the amount of flow proportionally. You may need to tweak this setting to get nice surface finish and correct single wall widths. Usual values are between 0.9 and 1.1. If you think you need to change this more, check filament diameter and your firmware E steps."
 msgstr "Este factor cambia la cantidad de flujo proporcionalmente. Es posible que necesite ajustar esta configuración para obtener un buen acabado superficial y corregir el ancho de una sola pared. Los valores usuales están entre 0.9 y 1.1. Si cree que necesita cambiar esto más, verifique el diámetro del filamento y los pasos del E en el firmware."
 
-#: src/libslic3r/PrintConfig.cpp:214
+#: src/libslic3r/PrintConfig.cpp:248
 msgid "This fan speed is enforced during all bridges and overhangs."
 msgstr "La velocidad de este ventilador se aplica durante todos los puentes y voladizos."
 
-#: src/libslic3r/PrintConfig.cpp:992
+#: src/libslic3r/PrintConfig.cpp:1036
 msgid "This feature allows to combine infill and speed up your print by extruding thicker infill layers while preserving thin perimeters, thus accuracy."
 msgstr "Esta característica permite combinar el relleno y acelerar la impresión mediante la extrusión de capas de relleno más gruesas a la vez que se preservan los finos perímetros y, por lo tanto, la precisión."
 
-#: src/libslic3r/PrintConfig.cpp:1746
+#: src/libslic3r/PrintConfig.cpp:1861
 msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
 msgstr "Esta característica permite forzar una capa sólida en cada número de capas. Cero para deshabilitar. Puede establecer esto en cualquier valor (por ejemplo, 9999); Slic3r seleccionará automáticamente la cantidad máxima posible de capas para combinar según el diámetro de la boquilla y la altura de la capa."
 
-#: src/libslic3r/PrintConfig.cpp:1795
+#: src/libslic3r/PrintConfig.cpp:1910
 msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
 msgstr "Esta función aumentará Z gradualmente mientras imprime un objeto de pared simple para eliminar cualquier costura visible. Esta opción requiere un perímetro único, sin relleno, sin capas sólidas superiores y sin material de soporte. Todavía puede establecer cualquier cantidad de capas sólidas inferiores, así como bucles de falda / balsa. No funcionará al imprimir más de un objeto."
 
-#: src/slic3r/GUI/Plater.cpp:2367
+#: src/slic3r/GUI/Plater.cpp:2329
 msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
 msgstr "Este archivo no puede ser cargado en un modo sencillo. ¿Quieres cambiar al modo experto?"
 
-#: src/slic3r/GUI/Plater.cpp:2357
+#: src/slic3r/GUI/Plater.cpp:2319
 msgid ""
 "This file contains several objects positioned at multiple heights.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -8108,84 +9315,96 @@ msgstr ""
 "¿Quieres continuar y grabar este archivo hex de todos modos?\n"
 "Por favor continúa solo si estás seguro de que es lo correcto."
 
-#: src/libslic3r/PrintConfig.cpp:314
+#: src/libslic3r/PrintConfig.cpp:348
 msgid "This flag enables the automatic cooling logic that adjusts print speed and fan speed according to layer printing time."
 msgstr "Este indicador habilita la lógica de enfriamiento automático que ajusta la velocidad de impresión y la velocidad del ventilador según el tiempo de impresión de la capa."
 
-#: src/slic3r/GUI/Plater.cpp:536
+#: src/slic3r/GUI/Plater.cpp:402
 msgid "This flag enables the brim that will be printed around each object on the first layer."
 msgstr "Esta opción activa la balsa que se imprimirá alrededor del objeto en la primera capa."
 
-#: src/libslic3r/PrintConfig.cpp:1538
+#: src/libslic3r/PrintConfig.cpp:1646
 msgid "This flag enforces a retraction whenever a Z move is done."
 msgstr "Esta bandera impone una retractación cada vez que se realiza un movimiento Z."
 
-#: src/libslic3r/PrintConfig.cpp:2194
+#: src/libslic3r/PrintConfig.cpp:2337
 msgid "This flag will move the nozzle while retracting to minimize the possible blob on leaky extruders."
 msgstr "Esta bandera moverá la boquilla mientras se retrae para minimizar la posible mancha en los extrusores con fugas."
 
-#: src/slic3r/GUI/Tab.cpp:953
+#: src/libslic3r/PrintConfig.cpp:1961
+msgid "This G-code will be used as a code for the color change"
+msgstr "Este código G se utilizará como código para el cambio de color"
+
+#: src/libslic3r/PrintConfig.cpp:1970
+msgid "This G-code will be used as a code for the pause print"
+msgstr "Este código G se utilizará como código para la pausa de impresión"
+
+#: src/libslic3r/PrintConfig.cpp:1979
+msgid "This G-code will be used as a custom code"
+msgstr "Este código G se utilizará como código personalizado"
+
+#: src/slic3r/GUI/Tab.cpp:1272
 msgid "This is a default preset."
 msgstr "Este es un preajuste preestablecido."
 
-#: src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2930
 msgid "This is a relative measure of support points density."
 msgstr "Esta es una medida relativa de la densidad de los puntos de soporte."
 
-#: src/slic3r/GUI/Tab.cpp:2338
+#: src/slic3r/GUI/Tab.cpp:2507
 msgid "This is a single extruder multimaterial printer, diameters of all extruders will be set to the new value. Do you want to proceed?"
 msgstr "Esta es una impresora multimaterial de extrusor único, los diámetros de todas los extrusores se establecerán según el nuevo valor. ¿Quieres proceder?"
 
-#: src/slic3r/GUI/Tab.cpp:955
+#: src/slic3r/GUI/Tab.cpp:1274
 msgid "This is a system preset."
 msgstr "Este es un preajuste del sistema."
 
-#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:583
+#: src/libslic3r/PrintConfig.cpp:559 src/libslic3r/PrintConfig.cpp:619
 msgid "This is only used in the Slic3r interface as a visual help."
 msgstr "Esto solo se usa en la interfaz de Slic3r como ayuda visual."
 
-#: src/libslic3r/PrintConfig.cpp:336
+#: src/libslic3r/PrintConfig.cpp:370
 msgid "This is the acceleration your printer will be reset to after the role-specific acceleration values are used (perimeter/infill). Set zero to prevent resetting acceleration at all."
 msgstr "Esta es la aceleración después de que se usen los valores de aceleración específicos de cada función (perímetro / relleno). Establezca cero para evitar restablecer la aceleración."
 
-#: src/libslic3r/PrintConfig.cpp:194
+#: src/libslic3r/PrintConfig.cpp:228
 msgid "This is the acceleration your printer will use for bridges. Set zero to disable acceleration control for bridges."
 msgstr "Esta es la aceleración que su impresora usará para los puentes. Establezca cero para deshabilitar el control de aceleración para puentes."
 
-#: src/libslic3r/PrintConfig.cpp:860
+#: src/libslic3r/PrintConfig.cpp:900
 msgid "This is the acceleration your printer will use for first layer. Set zero to disable acceleration control for first layer."
 msgstr "Esta es la aceleración que su impresora usará para la primera capa. Establezca cero para deshabilitar el control de aceleración para la primera capa."
 
-#: src/libslic3r/PrintConfig.cpp:982
+#: src/libslic3r/PrintConfig.cpp:1026
 msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
 msgstr "Esta es la aceleración que su impresora usará para el relleno. Establezca cero para deshabilitar el control de aceleración para el relleno."
 
-#: src/libslic3r/PrintConfig.cpp:1400
+#: src/libslic3r/PrintConfig.cpp:1508
 msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
 msgstr "Esta es la aceleración que su impresora usará para los perímetros. Un valor alto como 9000 generalmente da buenos resultados si su hardware está a la altura del trabajo. Establezca cero para deshabilitar el control de aceleración para los perímetros."
 
-#: src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1435
 msgid "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"
 msgstr "Este es el diámetro de la boquilla de su extrusor (por ejemplo: 0.5, 0.35, etc.)"
 
-#: src/libslic3r/PrintConfig.cpp:1227
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:1335
+#, c-format
 msgid "This is the highest printable layer height for this extruder, used to cap the variable layer height and support layer height. Maximum recommended layer height is 75% of the extrusion width to achieve reasonable inter-layer adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter."
 msgstr "Esta es la altura más alta imprimible de capa para este extrusor, que se utiliza para cubrir la altura de la capa variable y la altura de la capa de soporte. La altura máxima recomendada de la capa es del 75% del ancho de extrusión para lograr una adhesión razonable entre capas. Si se establece en 0, la altura de la capa se limita al 75% del diámetro de la boquilla."
 
-#: src/libslic3r/PrintConfig.cpp:1290
+#: src/libslic3r/PrintConfig.cpp:1398
 msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
 msgstr "Esta es la altura más baja de la capa imprimible para este extrusor y limita la resolución para la altura de la capa variable. Los valores típicos están entre 0.05 mm y 0.1 mm."
 
-#: src/libslic3r/GCode.cpp:639
+#: src/libslic3r/GCode.cpp:624
 msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
 msgstr "Esto generalmente es causado por extrusiones insignificantemente pequeñas o por un modelo defectuoso. Intenta reparar el modelo o cambia su orientación en la cama."
 
-#: src/libslic3r/PrintConfig.cpp:2215
+#: src/libslic3r/PrintConfig.cpp:2358
 msgid "This matrix describes volumes (in cubic milimetres) required to purge the new filament on the wipe tower for any given pair of tools."
 msgstr "Esta matriz detalla los volúmenes (en milímetros cúbicos) necesarios para purgar el nuevo filamento en la torre de limpieza para cualquier par de filamentos."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:928
 msgid ""
 "This operation is irreversible.\n"
 "Do you want to proceed?"
@@ -8193,31 +9412,35 @@ msgstr ""
 "Esta operación es irreversible. \n"
 "¿Deseas continuar?"
 
-#: src/libslic3r/PrintConfig.cpp:1442
+#: src/libslic3r/PrintConfig.cpp:1550
 msgid "This option sets the number of perimeters to generate for each layer. Note that Slic3r may increase this number automatically when it detects sloping surfaces which benefit from a higher number of perimeters if the Extra Perimeters option is enabled."
 msgstr "Esta opción establece la cantidad de perímetros que se generarán para cada capa. Tenga en cuenta que Slic3r puede aumentar este número automáticamente cuando detecta superficies inclinadas que se benefician de un mayor número de perímetros si la opción Perímetros adicionales está habilitada."
 
-#: src/libslic3r/PrintConfig.cpp:1356
+#: src/libslic3r/PrintConfig.cpp:1464
 msgid "This option will drop the temperature of the inactive extruders to prevent oozing. It will enable a tall skirt automatically and move extruders outside such skirt when changing temperatures."
 msgstr "Esta opción reducirá la temperatura de las extrusoras inactivas para evitar el goteo. Permitirá una falda alta automáticamente y moverá los extrusores fuera de dicha falda cuando cambie la temperatura."
 
-#: src/libslic3r/PrintConfig.cpp:1029
+#: src/libslic3r/PrintConfig.cpp:1073
 msgid "This option will limit infill to the areas actually needed for supporting ceilings (it will act as internal support material). If enabled, slows down the G-code generation due to the multiple checks involved."
 msgstr "Esta opción limitará el relleno a las áreas realmente necesarias para soportar techos (actuará como material de soporte interno). Si está habilitado, ralentiza la generación del código G debido a las múltiples comprobaciones involucradas."
 
-#: src/libslic3r/PrintConfig.cpp:1022
+#: src/libslic3r/PrintConfig.cpp:1066
 msgid "This option will switch the print order of perimeters and infill, making the latter first."
 msgstr "Esta opción cambiará el orden de impresión de los perímetros y el relleno, haciendo que el último sea el primero."
 
-#: src/libslic3r/PrintConfig.cpp:459
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:85
+msgid "This printer will be shown in the presets list as"
+msgstr "Esta impresora se mostrará en la lista de ajustes preestablecidos como"
+
+#: src/libslic3r/PrintConfig.cpp:495
 msgid "This separate setting will affect the speed of external perimeters (the visible ones). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
 msgstr "Esta configuración independiente afectará la velocidad de los perímetros externos (los visibles). Si se expresa como porcentaje (por ejemplo: 80%), se calculará en la configuración de velocidad de perímetros anterior. Establecer a cero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1717
+#: src/libslic3r/PrintConfig.cpp:1832
 msgid "This separate setting will affect the speed of perimeters having radius <= 6.5mm (usually holes). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
 msgstr "Esta configuración por separado afectará la velocidad de los perímetros con un radio <= 6,5 mm (generalmente agujeros). Si se expresa como porcentaje (por ejemplo: 80%), se calculará en la configuración de velocidad de perímetros anterior. Establecer a cero para auto."
 
-#: src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1082
 msgid "This setting applies an additional overlap between infill and perimeters for better bonding. Theoretically this shouldn't be needed, but backlash might cause gaps. If expressed as percentage (example: 15%) it is calculated over perimeter extrusion width."
 msgstr "Esta configuración aplica una superposición adicional entre relleno y perímetros para una mejor unión. Teóricamente, esto no debería ser necesario, pero la reacción puede causar huecos. Si se expresa como porcentaje (ejemplo: 15%), se calcula sobre el ancho de extrusión del perímetro."
 
@@ -8225,31 +9448,31 @@ msgstr "Esta configuración aplica una superposición adicional entre relleno y
 msgid "This setting controls the height (and thus the total number) of the slices/layers. Thinner layers give better accuracy but take more time to print."
 msgstr "Esta configuración controla la altura (y, por tanto, el número total) de las láminas / capas. Las capas más delgadas brindan una mayor precisión pero requieren más tiempo para imprimir."
 
-#: src/libslic3r/PrintConfig.cpp:1218
+#: src/libslic3r/PrintConfig.cpp:1326
 msgid "This setting represents the maximum speed of your fan."
 msgstr "Esta configuración representa la velocidad máxima de su ventilador."
 
-#: src/libslic3r/PrintConfig.cpp:1281
+#: src/libslic3r/PrintConfig.cpp:1389
 msgid "This setting represents the minimum PWM your fan needs to work."
 msgstr "Este ajuste representa el PWM mínimo que el ventilador necesita para funcionar."
 
-#: src/libslic3r/PrintConfig.cpp:1829
+#: src/libslic3r/PrintConfig.cpp:1944
 msgid "This start procedure is inserted at the beginning, after any printer start gcode (and after any toolchange to this filament in case of multi-material printers). This is used to override settings for a specific filament. If PrusaSlicer detects M104, M109, M140 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Este procedimiento de inicio se inserta al principio, después de que cualquier impresora inicie un código G(y después de cualquier cambio de herramienta a este filamento en el caso de impresoras de materiales múltiples). Esto se utiliza para anular la configuración de un filamento específico. Si PrusaSlicer detecta un M104, M109, M140 o M190 en tus códigos personalizados, dichos comandos no se agregarán automáticamente, por lo que puede personalizar el orden de los comandos de calentamiento y otras acciones personalizadas. Ten en cuenta que puedes usar variables de marcador de posición para todas las configuraciones de PrusaSlicer, por lo que puedes colocar un comando \"M109 S [first_layer_temperature]\" donde lo desees. Si tienes varias extrusorrs, el código G se procesa en el orden del extrusor."
 
-#: src/libslic3r/PrintConfig.cpp:1814
+#: src/libslic3r/PrintConfig.cpp:1929
 msgid "This start procedure is inserted at the beginning, after bed has reached the target temperature and extruder just started heating, and before extruder has finished heating. If PrusaSlicer detects M104 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Este procedimiento de inicio se inserta al principio, después de que la bse ha alcanzado la temperatura objetivo y el extrusor acaba de comenzar a calentar, y antes de que el extrusor haya terminado de calentar. Si PrusaSlicer detecta un M104 o M190 en tus códigos personalizados, dichos comandos no se agregarán automáticamente, por lo que se puede personalizar el orden de los comandos de calentamiento y otras acciones personalizadas. Ten en cuenta que puedes usar variables de marcador de posición para todas las configuraciones de PrusaSlicer, por lo que puedes colocar un comando \"M109 S [first_layer_temperature]\" donde lo desees."
 
-#: src/libslic3r/PrintConfig.cpp:695
+#: src/libslic3r/PrintConfig.cpp:731
 msgid "This string is edited by RammingDialog and contains ramming specific parameters."
 msgstr "Esta cadena se modifica con el Diálogo de Empuje y contiene parámetros específicos de empuje."
 
-#: src/libslic3r/PrintConfig.cpp:2286
+#: src/libslic3r/PrintConfig.cpp:2429
 msgid "This value will be added (or subtracted) from all the Z coordinates in the output G-code. It is used to compensate for bad Z endstop position: for example, if your endstop zero actually leaves the nozzle 0.3mm far from the print bed, set this to -0.3 (or fix your endstop)."
 msgstr "Este valor será añadido (o eliminado) de todas las coordenadas Z en el G-code de salida. Se usa para compensar una mala posición del final de carrera Z: por ejemplo, si tu interruptor deja la boquilla a 0.3mm de la base de impresión, ajustalo a -0.3 (o arregla tu interruptor)."
 
-#: src/libslic3r/PrintConfig.cpp:2208
+#: src/libslic3r/PrintConfig.cpp:2351
 msgid "This vector saves required volumes to change from/to each tool used on the wipe tower. These values are used to simplify creation of the full purging volumes below."
 msgstr "Este vector guarda los volúmenes necesarios para cambiar  desde/hasta cada herramienta usada en la torre de limpieza. Estos valores se emplean para simplificar la creación de los volúmenes totales de purga más abajo."
 
@@ -8265,82 +9488,96 @@ msgstr ""
 "\n"
 "Puedes salir de %s e intentarlo de nuevo con una versión más reciente, o puedes volver a ejecutar la configuración inicial. Al hacerlo se creará una copia de respaldo de la configuración existente antes de instalar la nueva compatible con esta versión de %s."
 
-#: src/libslic3r/PrintConfig.cpp:2458
+#: src/libslic3r/PrintConfig.cpp:2601
 msgid "This will apply a gamma correction to the rasterized 2D polygons. A gamma value of zero means thresholding with the threshold in the middle. This behaviour eliminates antialiasing without losing holes in polygons."
 msgstr "Esto aplicará una corrección gamma a los polígonos 2D rasterizados. Un valor gamma de cero significa que el umbral se encuentra en el medio. Este comportamiento elimina el antialiasing sin perder agujeros en los polígonos."
 
-#: src/libslic3r/PrintConfig.cpp:2081
+#: src/libslic3r/PrintConfig.cpp:2224
 msgid "Threads"
 msgstr "Núcleos"
 
-#: src/libslic3r/PrintConfig.cpp:2082
+#: src/libslic3r/PrintConfig.cpp:2225
 msgid "Threads are used to parallelize long-running tasks. Optimal threads number is slightly above the number of available cores/processors."
 msgstr "Núcleos usados para tareas multi-recurso. Número óptimo de núcleos es ligeramente sobre el numero de núcleos/procesadores disponibles."
 
-#: src/slic3r/GUI/Tab.cpp:2093
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235
+msgid "Threshold:"
+msgstr "Umbral:"
+
+#: src/slic3r/GUI/Tab.cpp:2263
 msgid "Tilt"
 msgstr "Inclinación"
 
-#: src/slic3r/GUI/Tab.cpp:2094
+#: src/slic3r/GUI/Tab.cpp:2264
 msgid "Tilt time"
 msgstr "Tiempo de inclinación"
 
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
 #: src/slic3r/GUI/RammingChart.cpp:76
 msgid "Time"
 msgstr "Tiempo"
 
-#: src/libslic3r/PrintConfig.cpp:687
+#: src/libslic3r/PrintConfig.cpp:723
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Tiempo para que el firmware de la impresora (o la Unidad Multi Material 2.0) cargue un filamento durante un cambio de herramienta (al ejecutar el código T). Este tiempo se añade al tiempo total de impresión mediante el estimador de tiempo del código G."
 
-#: src/libslic3r/PrintConfig.cpp:702
+#: src/libslic3r/PrintConfig.cpp:738
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Tiempo para que el firmware de la impresora (o la Unidad Multi Material 2.0) descargue un filamento durante un cambio de herramienta (al ejecutar el código T). Este tiempo se añade al tiempo total de impresión mediante el estimador de tiempo del código G."
 
-#: src/libslic3r/PrintConfig.cpp:2407
+#: src/libslic3r/PrintConfig.cpp:2550
 msgid "Time of the fast tilt"
 msgstr "Tiempo de la inclinación rápida"
 
-#: src/libslic3r/PrintConfig.cpp:2416
+#: src/libslic3r/PrintConfig.cpp:2559
 msgid "Time of the slow tilt"
 msgstr "Tiempo de la inclinación lenta"
 
-#: src/libslic3r/PrintConfig.cpp:641
+#: src/libslic3r/PrintConfig.cpp:677
 msgid "Time to wait after the filament is unloaded. May help to get reliable toolchanges with flexible materials that may need more time to shrink to original dimensions."
 msgstr "Tiempo de espera después de que se ha descargado el filamento. Puede ayudar para conseguir cambios de herramienta fiables con materiales flexibles que pueden necesitar más tiempo para encogerse a su tamaño original."
 
-#: src/slic3r/GUI/Tab.cpp:966
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "to"
+msgstr "a"
+
+#: src/slic3r/GUI/Tab.cpp:1284
 msgid "To do that please specify a new name for the preset."
 msgstr "Para hacerlo por favor especifique un nuevo nombre para esos ajustes."
 
-#: src/slic3r/GUI/Plater.cpp:4014
+#: src/slic3r/GUI/Plater.cpp:3934
 msgid "To objects"
 msgstr "A los objetos"
 
-#: src/slic3r/GUI/Plater.cpp:4016
+#: src/slic3r/GUI/Plater.cpp:3936
 msgid "To parts"
 msgstr "A las piezas"
 
-#: src/slic3r/GUI/Tab.cpp:1756
+#: src/slic3r/Utils/Http.cpp:82
+msgid "To specify the system certificate store manually, please set the %1% environment variable to the correct CA bundle and restart the application."
+msgstr "Para especificar el almacén de certificados del sistema manualmente, configure la variable de entorno %1% en el paquete CA correcto y reinicia la aplicación."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:360
 msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain."
 msgstr "Para usar un archivo CA personalizado, importa tu archivo CA al Almacén de Certificados/Llavero."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:271
 #, c-format
 msgid "Toggle %c axis mirroring"
 msgstr "Activar reflejo del eje %c"
 
-#: src/libslic3r/Zipper.cpp:34
+#: src/libslic3r/miniz_extension.cpp:93
 msgid "too many files"
 msgstr "demasiados archivos"
 
-#: src/libslic3r/SLAPrintSteps.cpp:190
-msgid "Too much overlapping holes."
+#: src/libslic3r/SLAPrintSteps.cpp:192
+msgid "Too many overlapping holes."
 msgstr "Demasiados agujeros superpuestos."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:227 src/slic3r/GUI/GUI_Preview.cpp:335
-#: src/slic3r/GUI/GUI_Preview.cpp:519 src/slic3r/GUI/GUI_Preview.cpp:574
-#: src/slic3r/GUI/GUI_Preview.cpp:835 src/libslic3r/GCode/PreviewData.cpp:357
+#: src/slic3r/GUI/GCodeViewer.cpp:2241 src/slic3r/GUI/GUI_Preview.cpp:281
+#: src/slic3r/GUI/GUI_Preview.cpp:453 src/slic3r/GUI/GUI_Preview.cpp:693
+#: src/slic3r/GUI/GUI_Preview.cpp:786 src/slic3r/GUI/GUI_Preview.cpp:1270
+#: src/libslic3r/GCode/PreviewData.cpp:362
 msgid "Tool"
 msgstr "Herramienta"
 
@@ -8348,51 +9585,64 @@ msgstr "Herramienta"
 msgid "Tool #"
 msgstr "Herramienta nº"
 
-#: src/slic3r/GUI/Tab.cpp:2000 src/libslic3r/PrintConfig.cpp:2093
+#: src/slic3r/GUI/Tab.cpp:2189 src/libslic3r/PrintConfig.cpp:2236
 msgid "Tool change G-code"
 msgstr "Código G de cambio de herramienta"
 
-#: src/slic3r/GUI/Tab.cpp:1491
+#: src/slic3r/GUI/GCodeViewer.cpp:2530 src/slic3r/GUI/GUI_Preview.cpp:1474
+msgid "Tool changes"
+msgstr "Cambios de herramienta"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:1479
+msgid "Tool marker"
+msgstr "Marcador de herramienta"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:223
+msgid "Tool position"
+msgstr "Posición de herramienta"
+
+#: src/slic3r/GUI/Tab.cpp:1837
 msgid "Toolchange parameters with single extruder MM printers"
 msgstr "Parámetros del cambio de herramienta para impresoras de un único extrusor MM"
 
 #. TRN To be shown in the main menu View->Top
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:662 src/libslic3r/PrintConfig.cpp:2132
-#: src/libslic3r/PrintConfig.cpp:2141
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
+#: src/libslic3r/PrintConfig.cpp:2275 src/libslic3r/PrintConfig.cpp:2284
 msgid "Top"
 msgstr "Superior"
 
-#: src/slic3r/GUI/PresetHints.cpp:304
+#: src/slic3r/GUI/PresetHints.cpp:302
 msgid "Top / bottom shell thickness hint: Not available due to invalid layer height."
 msgstr "Sugerencia de grosor de la carcasa superior / inferior: no disponible debido a una altura de capa inválida."
 
-#: src/libslic3r/PrintConfig.cpp:415
+#: src/libslic3r/PrintConfig.cpp:449
 msgid "Top fill pattern"
 msgstr "Patrón de relleno superior"
 
-#: src/slic3r/GUI/PresetHints.cpp:323
+#: src/slic3r/GUI/PresetHints.cpp:321
 msgid "Top is open."
 msgstr "La parte superior está abierta."
 
-#: src/slic3r/GUI/PresetHints.cpp:317
+#: src/slic3r/GUI/PresetHints.cpp:315
 msgid "Top shell is %1% mm thick for layer height %2% mm."
 msgstr "La tapa superior es de %1% mm de espesor con una altura de capa de %2% mm."
 
-#: src/slic3r/GUI/PresetHints.cpp:192
+#: src/slic3r/GUI/PresetHints.cpp:191
 msgid "top solid infill"
 msgstr "relleno  sólido superior"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:242 src/libslic3r/ExtrusionEntity.cpp:315
-#: src/libslic3r/PrintConfig.cpp:2105 src/libslic3r/PrintConfig.cpp:2117
+#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:319
+#: src/libslic3r/ExtrusionEntity.cpp:346 src/libslic3r/PrintConfig.cpp:2248
+#: src/libslic3r/PrintConfig.cpp:2260
 msgid "Top solid infill"
 msgstr "Relleno sólido superior"
 
-#: src/libslic3r/PrintConfig.cpp:2135
+#: src/libslic3r/PrintConfig.cpp:2278
 msgid "Top solid layers"
 msgstr "Capas solidas superiores"
 
-#: src/slic3r/GUI/MainFrame.cpp:662
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
 msgid "Top View"
 msgstr "Vista superior"
 
@@ -8408,90 +9658,128 @@ msgstr "Volumen total empujado"
 msgid "Total ramming time"
 msgstr "Tiempo de empuje total"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:516
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:640
+msgid "Transfer"
+msgstr "Transferir"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:745
+msgid "Transfer the selected options to the newly selected preset \"%1%\"."
+msgstr "Transferir las opciones seleccionadas al nuevo ajuste seleccionado \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Transfer the selected settings to the newly selected preset."
+msgstr "Transfiera los ajustes seleccionados al preajuste recién seleccionado."
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:561
 msgid "Translate"
 msgstr "Traducir"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:300
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:282
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Translation"
 msgstr "Translación"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:253 src/libslic3r/PrintConfig.cpp:2152
+#: src/slic3r/GUI/GCodeViewer.cpp:2489 src/slic3r/GUI/GUI_Preview.cpp:335
+#: src/slic3r/GUI/GUI_Preview.cpp:1471 src/libslic3r/PrintConfig.cpp:2295
 msgid "Travel"
 msgstr "Recorrido"
 
-#: src/libslic3r/PrintConfig.cpp:845
+#: src/libslic3r/PrintConfig.cpp:883
 msgid "Triangles"
 msgstr "Triángulos"
 
-#: src/libslic3r/PrintConfig.cpp:3448
+#: src/libslic3r/PrintConfig.cpp:3647
 msgid "Try to repair any non-manifold meshes (this option is implicitly added whenever we need to slice the model to perform the requested action)."
 msgstr "Intenta reparar cualquier malla no múltiple (esta opción se agrega implícitamente cada vez que necesitamos laminar el modelo para realizar la acción solicitada)."
 
-#: src/libslic3r/PrintConfig.cpp:1467
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:165
+msgid "Type here the name of your printer device"
+msgstr "Escribe aquí el nombre de tu dispositivo de impresión"
+
+#: src/libslic3r/PrintConfig.cpp:1575
 msgid "Type of the printer."
 msgstr "Tipo de impresora."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013 src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/ConfigWizard.cpp:2524 src/slic3r/GUI/ConfigWizard.cpp:2526
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Type:"
 msgstr "Tipo:"
 
-#: src/slic3r/GUI/Plater.cpp:3428
+#: src/slic3r/GUI/OpenGLManager.cpp:275
+#, c-format
+msgid ""
+"Unable to load the following shaders:\n"
+"%s"
+msgstr ""
+"No se pueden cargar las siguientes sombras:\n"
+"%s"
+
+#: src/slic3r/GUI/Plater.cpp:3233
 msgid "Unable to reload:"
 msgstr "Incapaz de recargar:"
 
-#: src/libslic3r/Zipper.cpp:32
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:137
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:146
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:845
+msgid "Undef"
+msgstr "Undef"
+
+#: src/libslic3r/miniz_extension.cpp:91
 msgid "undefined error"
 msgstr "error no definido"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/KBShortcutsDialog.cpp:130
-#: src/slic3r/GUI/MainFrame.cpp:581
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/KBShortcutsDialog.cpp:125
+#: src/slic3r/GUI/MainFrame.cpp:1187
 msgid "Undo"
 msgstr "Deshacer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Undo %1$d Action"
 msgid_plural "Undo %1$d Actions"
 msgstr[0] "Deshacer %1$d Acción"
 msgstr[1] "Deshacer %1$d Acciones"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Undo History"
 msgstr "Deshacer Historia"
 
-#: src/libslic3r/Zipper.cpp:56
+#: src/libslic3r/miniz_extension.cpp:115
 msgid "unexpected decompressed size"
 msgstr "tamaño de descompresión inesperado"
 
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27
+#: src/slic3r/GUI/GUI_Preview.cpp:299 src/libslic3r/ExtrusionEntity.cpp:310
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: src/slic3r/Utils/Duet.cpp:82 src/slic3r/Utils/Duet.cpp:137
-#: src/slic3r/Utils/FlashAir.cpp:119 src/slic3r/Utils/FlashAir.cpp:140
-#: src/slic3r/Utils/FlashAir.cpp:156
+#: src/slic3r/Utils/Duet.cpp:84 src/slic3r/Utils/Duet.cpp:139
+#: src/slic3r/Utils/FlashAir.cpp:122 src/slic3r/Utils/FlashAir.cpp:143
+#: src/slic3r/Utils/FlashAir.cpp:159
 msgid "Unknown error occured"
 msgstr "Ha ocurrido un error desconocido"
 
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:178
+msgid "Unknown error occured during exporting G-code."
+msgstr "Se produjo un error desconocido durante la exportación del código G."
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:263
 msgid "unloaded"
 msgstr "descargado"
 
-#: src/libslic3r/PrintConfig.cpp:623
+#: src/libslic3r/PrintConfig.cpp:659
 msgid "Unloading speed"
 msgstr "Velocidad de descarga"
 
-#: src/libslic3r/PrintConfig.cpp:632
+#: src/libslic3r/PrintConfig.cpp:668
 msgid "Unloading speed at the start"
 msgstr "Velocidad de descarga al inicio"
 
-#: src/slic3r/GUI/Tab.cpp:3256
+#: src/slic3r/GUI/Tab.cpp:3693
 msgid "UNLOCKED LOCK"
 msgstr "CANDADO ABIERTO"
 
-#: src/slic3r/GUI/Tab.cpp:3282
+#: src/slic3r/GUI/Tab.cpp:3719
 msgid ""
 "UNLOCKED LOCK icon indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
 "Click to reset all settings for current option group to the system (or default) values."
@@ -8499,7 +9787,7 @@ msgstr ""
 "El icono de CANDADO DESBLOQUEADO indica que se cambiaron algunas configuraciones y no son iguales a los valores del sistema (o predeterminados) para el grupo de opciones actual.\n"
 "Haz clic para restablecer todas las configuraciones para el grupo de opciones actual a los valores del sistema (o predeterminados)."
 
-#: src/slic3r/GUI/Tab.cpp:3297
+#: src/slic3r/GUI/Tab.cpp:3734
 msgid ""
 "UNLOCKED LOCK icon indicates that the value was changed and is not equal to the system (or default) value.\n"
 "Click to reset current value to the system (or default) value."
@@ -8507,56 +9795,43 @@ msgstr ""
 "El icono de CANDADO DESBLOQUEADO indica que se cambiaron algunas configuraciones y no son iguales a los valores del sistema (o predeterminados).\n"
 "Haz clic para reiniciar el valor actual a los del sistema (o predeterminados)"
 
-#: src/slic3r/GUI/Plater.cpp:5203
-#, c-format
-msgid "Unmounting successful. The device %s(%s) can now be safely removed from the computer."
-msgstr "Expulsión exitosa. El dispositivo %s (%s) puede desconectarse del ordenador de forma segura."
-
-#: src/slic3r/GUI/GUI_Preview.cpp:255
-msgid "Unretractions"
-msgstr "Desretracciones"
-
-#: src/slic3r/GUI/Tab.cpp:2947
-msgid "Unsaved Changes"
-msgstr "Cambios no guardados"
-
-#: src/slic3r/GUI/GUI_App.cpp:935
-msgid "Unsaved Presets"
-msgstr "Ajustes iniciales no guardados"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
 msgid "Unselect gizmo or clear selection"
 msgstr "Deseleccionar gizmo o borrar selección"
 
-#: src/libslic3r/Zipper.cpp:60
+#: src/libslic3r/miniz_extension.cpp:119
 msgid "unsupported central directory size"
 msgstr "tamaño del directorio central no compatible"
 
-#: src/libslic3r/Zipper.cpp:40
+#: src/libslic3r/miniz_extension.cpp:99
 msgid "unsupported encryption"
 msgstr "encriptación no compatible"
 
-#: src/libslic3r/Zipper.cpp:42
+#: src/libslic3r/miniz_extension.cpp:101
 msgid "unsupported feature"
 msgstr "característica no compatible"
 
-#: src/libslic3r/Zipper.cpp:38
+#: src/libslic3r/miniz_extension.cpp:97
 msgid "unsupported method"
 msgstr "método no compatible"
 
-#: src/libslic3r/Zipper.cpp:50
+#: src/libslic3r/miniz_extension.cpp:109
 msgid "unsupported multidisk archive"
 msgstr "archivo multidisk no compatible"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:292
+#: src/slic3r/GUI/OpenGLManager.cpp:267
 msgid "Unsupported OpenGL version"
 msgstr "Versión de OpenGL no soportada"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3420
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3883
 msgid "Unsupported selection"
 msgstr "Selección no soportada"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:955
+#: src/slic3r/GUI/GCodeViewer.cpp:2183
+msgid "up to"
+msgstr "hasta"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:961
 #, c-format
 msgid "up to %.2f mm"
 msgstr "hasta %.2f mm"
@@ -8565,15 +9840,15 @@ msgstr "hasta %.2f mm"
 msgid "Update available"
 msgstr "Actualización disponible"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:779 src/slic3r/GUI/Preferences.cpp:80
+#: src/slic3r/GUI/ConfigWizard.cpp:1138 src/slic3r/GUI/Preferences.cpp:97
 msgid "Update built-in Presets automatically"
 msgstr "Actualiza los ajustes de fábrica automáticamente"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Updates"
 msgstr "Actualizaciones"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:786
+#: src/slic3r/GUI/ConfigWizard.cpp:1145
 msgid "Updates are never applied without user's consent and never overwrite user's customized settings."
 msgstr "Las actualizaciones nunca se realizan sin el consentimiento del usuario y nunca sobre-escriben ajustes personalizados del usuario."
 
@@ -8581,7 +9856,7 @@ msgstr "Las actualizaciones nunca se realizan sin el consentimiento del usuario
 msgid "Upgrade"
 msgstr "Actualización"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Upload a firmware image into an Arduino based printer"
 msgstr "Cargar una imagen de firmware a una impresora basada en Arduino"
 
@@ -8597,101 +9872,118 @@ msgstr "Cargar el host de impresión con el siguiente nombre de archivo:"
 msgid "Uploading"
 msgstr "Subiendo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
 msgid "Upper Layer"
 msgstr "Capa superior"
 
-#: src/slic3r/GUI/Tab.cpp:1900
-msgid "USB/Serial connection"
-msgstr "Conexión USB/Serial"
-
-#: src/libslic3r/PrintConfig.cpp:1662
-msgid "USB/serial port for printer connection."
-msgstr "Puerto USB/serial para la conexión con la impresora."
-
-#: src/slic3r/GUI/DoubleSlider.cpp:1147
+#: src/slic3r/GUI/DoubleSlider.cpp:1276
 msgid "Use another extruder"
 msgstr "Usar otro extrusor"
 
-#: src/slic3r/GUI/Preferences.cpp:143
+#: src/slic3r/GUI/Preferences.cpp:220
 msgid "Use custom size for toolbar icons"
 msgstr "Usar tamaño personalizado para los iconos de la barra de herramientas"
 
-#: src/libslic3r/PrintConfig.cpp:2161
+#: src/slic3r/GUI/Preferences.cpp:268
+msgid "Use environment map"
+msgstr "Usar mapa ambiental"
+
+#: src/libslic3r/PrintConfig.cpp:2304
 msgid "Use firmware retraction"
 msgstr "Usar la retracción del firmware"
 
+#: src/slic3r/GUI/ImGuiWrapper.cpp:800 src/slic3r/GUI/Search.cpp:464
+msgid "Use for search"
+msgstr "Usar para buscar"
+
+#: src/libslic3r/PrintConfig.cpp:1218
+msgid "Use for time estimate"
+msgstr "Usar para la estimación de tiempo"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:42
 msgid "Use forward slashes ( / ) as a directory separator if needed."
 msgstr "Use barras diagonales ( / ) como separadores de directorios si fuese necesario."
 
-#: src/slic3r/GUI/Preferences.cpp:126
+#: src/slic3r/GUI/Preferences.cpp:191
 msgid "Use free camera"
 msgstr "Usar la cámara libre"
 
-#: src/libslic3r/PrintConfig.cpp:2780
+#: src/slic3r/GUI/ConfigWizard.cpp:1188
+msgid "Use inches"
+msgstr "Usar pulgadas"
+
+#: src/libslic3r/PrintConfig.cpp:2944
 msgid "Use pad"
 msgstr "Usar pad"
 
-#: src/slic3r/GUI/Preferences.cpp:119
+#: src/slic3r/GUI/Preferences.cpp:184
 msgid "Use perspective camera"
 msgstr "Usar cámara en perspectiva"
 
-#: src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2311
 msgid "Use relative E distances"
 msgstr "Usar las distancias relativas en E"
 
-#: src/slic3r/GUI/Preferences.cpp:104
+#: src/slic3r/GUI/Preferences.cpp:135
 msgid "Use Retina resolution for the 3D scene"
 msgstr "Usa la resolución de Retina para la escena 3D"
 
-#: src/libslic3r/PrintConfig.cpp:540
+#: src/libslic3r/PrintConfig.cpp:576
 msgid "Use this option to set the axis letter associated to your printer's extruder (usually E but some printers use A)."
 msgstr "Utiliza esta opción para ajustar la letra asociada al extrusor de tu impresora (normalmente se usa E pero otras usan A)."
 
-#: src/libslic3r/PrintConfig.cpp:1893
+#: src/libslic3r/PrintConfig.cpp:2035
 msgid "Use this setting to rotate the support material pattern on the horizontal plane."
 msgstr "Use esta configuración para rotar el patrón de material de soporte en el plano horizontal."
 
-#: src/libslic3r/PrintConfig.cpp:2175
+#: src/libslic3r/PrintConfig.cpp:2318
 msgid "Use volumetric E"
 msgstr "Usar E volumétrico"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1171
+#: src/slic3r/GUI/DoubleSlider.cpp:1298
 msgid "used"
 msgstr "usado"
 
-#: src/slic3r/GUI/Plater.cpp:237
+#: src/slic3r/GUI/Plater.cpp:243
 msgid "Used Filament (g)"
-msgstr "Filamento usado (g)"
+msgstr "Filamento Usado (g)"
 
-#: src/slic3r/GUI/Plater.cpp:235 src/slic3r/GUI/Plater.cpp:1229
+#: src/slic3r/GUI/Plater.cpp:1141
+msgid "Used Filament (in)"
+msgstr "Filamento Usado (in)"
+
+#: src/slic3r/GUI/Plater.cpp:1153
+msgid "Used Filament (in³)"
+msgstr "Filamento Usado (in³)"
+
+#: src/slic3r/GUI/Plater.cpp:241 src/slic3r/GUI/Plater.cpp:1141
 msgid "Used Filament (m)"
-msgstr "Filamento usado (m)"
+msgstr "Filamento Usado (m)"
 
-#: src/slic3r/GUI/Plater.cpp:236
+#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1153
 msgid "Used Filament (mm³)"
-msgstr "Filamento usado (mm³)"
+msgstr "Filamento Usado (mm³)"
 
-#: src/slic3r/GUI/Plater.cpp:1191
+#: src/slic3r/GUI/Plater.cpp:1100
 msgid "Used Material (ml)"
 msgstr "Material usado (ml)"
 
-#: src/slic3r/GUI/Plater.cpp:238
+#: src/slic3r/GUI/Plater.cpp:244
 msgid "Used Material (unit)"
 msgstr "Material usado (unidades)"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 src/libslic3r/PrintConfig.cpp:132
 msgid "User"
 msgstr "Usuario"
 
-#: src/slic3r/GUI/Preset.cpp:1168 src/slic3r/GUI/Preset.cpp:1288
-#: src/slic3r/GUI/PresetBundle.cpp:1677
+#: src/slic3r/GUI/PresetComboBoxes.cpp:230
+#: src/slic3r/GUI/PresetComboBoxes.cpp:778
+#: src/slic3r/GUI/PresetComboBoxes.cpp:934
 msgid "User presets"
 msgstr "Ajustes de usuario"
 
-#: src/libslic3r/Zipper.cpp:90
+#: src/libslic3r/miniz_extension.cpp:149
 msgid "validation failed"
 msgstr "validación fallida"
 
@@ -8703,31 +9995,31 @@ msgstr "El valor es el mismo que el del sistema"
 msgid "Value was changed and is not equal to the system value or the last saved preset"
 msgstr "El valor ha cambiado y ya no es igual al valor del sistema o al último valor guardado"
 
-#: src/slic3r/GUI/Tab.cpp:2202
+#: src/slic3r/GUI/Tab.cpp:2371
 msgid "Values in this column are for Normal mode"
 msgstr "Los valores en esta columna son para el modo Normal"
 
-#: src/slic3r/GUI/Tab.cpp:2208
+#: src/slic3r/GUI/Tab.cpp:2377
 msgid "Values in this column are for Stealth mode"
 msgstr "Los valores en esta columna son para el modo Silencioso"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:234 src/slic3r/GUI/GLCanvas3D.cpp:4573
+#: src/slic3r/GUI/GLCanvas3D.cpp:231 src/slic3r/GUI/GLCanvas3D.cpp:4978
 msgid "Variable layer height"
 msgstr "Altura de capa variable"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1709
+#: src/slic3r/GUI/GLCanvas3D.cpp:1786
 msgid "Variable layer height - Adaptive"
 msgstr "Altura de capa variable - Adaptativa"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:599
+#: src/slic3r/GUI/GLCanvas3D.cpp:565
 msgid "Variable layer height - Manual edit"
 msgstr "Altura de capa variable - Edicción manual"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1701
+#: src/slic3r/GUI/GLCanvas3D.cpp:1778
 msgid "Variable layer height - Reset"
 msgstr "Altura de capa variable - Reiniciar"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1717
+#: src/slic3r/GUI/GLCanvas3D.cpp:1794
 msgid "Variable layer height - Smooth all"
 msgstr "Altura de capa variable - Suavizar todo"
 
@@ -8735,19 +10027,20 @@ msgstr "Altura de capa variable - Suavizar todo"
 msgid "variants"
 msgstr "variantes"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:971
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1289
 msgid "vendor"
 msgstr "fabricante"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:565
+#: src/slic3r/GUI/ConfigWizard.cpp:589
 msgid "Vendor:"
 msgstr "Vendedor:"
 
-#: src/libslic3r/PrintConfig.cpp:928
+#: src/libslic3r/PrintConfig.cpp:972
 msgid "Verbose G-code"
 msgstr "Código G detallado"
 
-#: src/slic3r/GUI/AboutDialog.cpp:231 src/slic3r/GUI/MainFrame.cpp:64
+#: src/slic3r/GUI/AboutDialog.cpp:256 src/slic3r/GUI/GUI_App.cpp:239
+#: src/slic3r/GUI/MainFrame.cpp:164
 msgid "Version"
 msgstr "Versión"
 
@@ -8755,24 +10048,36 @@ msgstr "Versión"
 msgid "version"
 msgstr "versión"
 
-#: src/slic3r/GUI/Tab.cpp:1053
+#: src/slic3r/GUI/Tab.cpp:1375
 msgid "Vertical shells"
 msgstr "Carcasas verticales"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:218
+#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
 msgid "View"
 msgstr "Vista"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:813
+#: src/slic3r/GUI/ConfigWizard.cpp:1172
 msgid "View mode"
 msgstr "Modo de vista"
 
-#: src/libslic3r/SLAPrintSteps.cpp:413 src/libslic3r/SLAPrintSteps.cpp:422
-#: src/libslic3r/SLAPrintSteps.cpp:461
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:666
+msgid ""
+"Visit \"Preferences\" and check \"%1%\"\n"
+"to be asked about unsaved changes again."
+msgstr ""
+"Visita \"Preferencias\" y marca\"%1%\"\n"
+"para que se le pregunte sobre los cambios no guardados nuevamente."
+
+#: src/libslic3r/PrintConfig.cpp:3553
+msgid "Visualize an already sliced and saved G-code"
+msgstr "Visualizar un código G ya laminado y guardado"
+
+#: src/libslic3r/SLAPrintSteps.cpp:411 src/libslic3r/SLAPrintSteps.cpp:420
+#: src/libslic3r/SLAPrintSteps.cpp:459
 msgid "Visualizing supports"
 msgstr "Visualizar soportes"
 
-#: src/slic3r/GUI/Plater.cpp:161
+#: src/slic3r/GUI/Plater.cpp:167
 msgid "Volume"
 msgstr "Volumen"
 
@@ -8780,23 +10085,23 @@ msgstr "Volumen"
 msgid "Volume to purge (mm³) when the filament is being"
 msgstr "Volumen a purgar (mm³) cuando el filamento está siendo"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Volumes in Object reordered"
 msgstr "Volúmenes en Objetos reordenados"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Volumetric"
 msgstr "Volumétrico"
 
-#: src/slic3r/GUI/Tab.cpp:1591
+#: src/slic3r/GUI/Tab.cpp:1930
 msgid "Volumetric flow hints not available"
 msgstr "Sugerencias de flujo volumétrico no disponibles"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:226
+#: src/slic3r/GUI/GUI_Preview.cpp:280
 msgid "Volumetric flow rate"
 msgstr "Tasa de caudal volumétrico"
 
-#: src/libslic3r/GCode/PreviewData.cpp:355
+#: src/slic3r/GUI/GCodeViewer.cpp:2240 src/libslic3r/GCode/PreviewData.cpp:360
 msgid "Volumetric flow rate (mm³/s)"
 msgstr "Tasa de flujo volumétrico (mm³/seg)"
 
@@ -8804,151 +10109,170 @@ msgstr "Tasa de flujo volumétrico (mm³/seg)"
 msgid "Volumetric speed"
 msgstr "Velocidad volumétrica"
 
-#: src/libslic3r/PrintConfig.cpp:2915
+#: src/libslic3r/PrintConfig.cpp:3079
 msgid "Wall thickness"
 msgstr "Espesor de pared"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1270 src/slic3r/GUI/GUI.cpp:251
-#: src/slic3r/GUI/Tab.cpp:3084 src/slic3r/GUI/WipeTowerDialog.cpp:45
-#: src/slic3r/GUI/WipeTowerDialog.cpp:366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1129 src/slic3r/GUI/GUI.cpp:256
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:478
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:502
+#: src/slic3r/GUI/WipeTowerDialog.cpp:45 src/slic3r/GUI/WipeTowerDialog.cpp:366
 msgid "Warning"
 msgstr "Peligro"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:431
+#: src/slic3r/GUI/NotificationManager.cpp:672
+#: src/slic3r/GUI/NotificationManager.cpp:687
+#: src/slic3r/GUI/NotificationManager.cpp:702
+msgid "WARNING:"
+msgstr "AVISO:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:449
 msgid "Welcome"
 msgstr "Bienvenido"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:427
+#: src/slic3r/GUI/ConfigWizard.cpp:445
 #, c-format
 msgid "Welcome to the %s Configuration Assistant"
 msgstr "Bienvenido al %s Asistente de Configuración"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:429
+#: src/slic3r/GUI/ConfigWizard.cpp:447
 #, c-format
 msgid "Welcome to the %s Configuration Wizard"
 msgstr "Bienvenido al %s Ayudante de Configuración"
 
-#: src/slic3r/GUI/Preferences.cpp:97
+#: src/slic3r/GUI/SavePresetDialog.cpp:310
+msgid "What would you like to do with \"%1%\" preset after saving?"
+msgstr "¿Qué te gustaría hacer con el ajuste preestablecido \"%1%\" después de guardar?"
+
+#: src/slic3r/GUI/Preferences.cpp:114
 msgid "When checked, the print and filament presets are shown in the preset editor even if they are marked as incompatible with the active printer"
 msgstr "Cuando está marcada, los ajustes preestablecidos de impresión y filamento se muestran en el editor de ajustes preestablecidos, incluso si están marcados como incompatibles con la impresora activa"
 
-#: src/slic3r/GUI/PresetHints.cpp:224
+#: src/slic3r/GUI/Preferences.cpp:122
+msgid "When checked, whenever dragging and dropping a project file on the application, shows a dialog asking to select the action to take on the file to load."
+msgstr "Cuando está marcada, cada vez que se arrastra y suelta un archivo de proyecto en la aplicación, muestra un cuadro de diálogo que solicita seleccionar la acción a realizar en el archivo a cargar."
+
+#: src/slic3r/GUI/Preferences.cpp:156
+msgid "When closing the application, always ask for unsaved changes"
+msgstr "Al cerrar la aplicación, siempre preguntar por los cambios no guardados"
+
+#: src/slic3r/GUI/PresetHints.cpp:223
 msgid "when printing"
 msgstr "al imprimir"
 
-#: src/libslic3r/PrintConfig.cpp:253
+#: src/libslic3r/PrintConfig.cpp:287
 msgid "When printing multi-material objects, this settings will make Slic3r to clip the overlapping object parts one by the other (2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc)."
 msgstr "Al imprimir objetos multi-material, esta configuración hará que slic3r recorte las partes del objeto superpuestas una por la otra (la 2da parte será recortada por la 1ra, la 3ra parte será recortada por la 1ra y 2da, etc.)."
 
-#: src/libslic3r/PrintConfig.cpp:305
+#: src/libslic3r/PrintConfig.cpp:339
 msgid "When printing multiple objects or copies, this feature will complete each object before moving onto next one (and starting it from its bottom layer). This feature is useful to avoid the risk of ruined prints. Slic3r should warn and prevent you from extruder collisions, but beware."
 msgstr "Al imprimir múltiples objetos o copias, esta característica completará cada objeto antes de pasar al siguiente (y comenzará desde la capa inferior). Esta función es útil para evitar el riesgo de impresiones arruinadas. Slic3r debería advertirte y evitar las colisiones del extrusor, pero ten cuidado."
 
-#: src/libslic3r/PrintConfig.cpp:891
+#: src/libslic3r/PrintConfig.cpp:933
 msgid "When printing with very low layer heights, you might still want to print a thicker bottom layer to improve adhesion and tolerance for non perfect build plates. This can be expressed as an absolute value or as a percentage (for example: 150%) over the default layer height."
 msgstr "Al imprimir con alturas de capa muy bajas, es posible que desee imprimir una capa inferior más gruesa para mejorar la adhesión y la tolerancia de las placas de construcción no perfectas. Esto se puede expresar como un valor absoluto o como un porcentaje (por ejemplo: 150%) sobre la altura de capa predeterminada."
 
-#: src/libslic3r/PrintConfig.cpp:1553
+#: src/libslic3r/PrintConfig.cpp:1661
 msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Cuando se desencadena la retracción antes de cambiar la herramienta, el filamento se retira en la cantidad especificada (la longitud se mide en el filamento sin procesar, antes de que entre en el extrusor)."
 
-#: src/libslic3r/PrintConfig.cpp:1545
+#: src/libslic3r/PrintConfig.cpp:1653
 msgid "When retraction is triggered, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Cuando se activa la retracción, el filamento se retira en la cantidad especificada (la longitud se mide en el filamento sin procesar, antes de que entre en el extrusor)."
 
-#: src/libslic3r/PrintConfig.cpp:1391
+#: src/libslic3r/PrintConfig.cpp:1499
 msgid "When set to zero, the distance the filament is moved from parking position during load is exactly the same as it was moved back during unload. When positive, it is loaded further,  if negative, the loading move is shorter than unloading."
 msgstr "Cuando se establece en cero, la distancia que el filamento se mueve desde la posición de estacionamiento durante la carga es exactamente la misma que se usó durante la descarga. Cuando es positivo, se carga más lejos, si es negativo, el movimiento de carga es más corto que el de descarga."
 
-#: src/libslic3r/PrintConfig.cpp:1238
+#: src/libslic3r/PrintConfig.cpp:1346
 msgid "When setting other speed settings to 0 Slic3r will autocalculate the optimal speed in order to keep constant extruder pressure. This experimental setting is used to set the highest print speed you want to allow."
 msgstr "Al establecer otras configuraciones de velocidad en 0, Slic3r calculará automáticamente la velocidad óptima para mantener constante la presión en el extrusor. Esta configuración experimental se utiliza para establecer la velocidad de impresión más alta que desea permitir."
 
-#: src/libslic3r/PrintConfig.cpp:1597
+#: src/libslic3r/PrintConfig.cpp:1705
 msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament."
 msgstr "Cuando la retracción se compensa después de cambiar la herramienta, el extrusor empujará esta cantidad adicional de filamento."
 
-#: src/libslic3r/PrintConfig.cpp:1589
+#: src/libslic3r/PrintConfig.cpp:1697
 msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed."
 msgstr "Cuando la retracción se compensa después de un movimiento, el extrusor necesitará introducir más filamento. Este ajuste raramente se necesita."
 
-#: src/slic3r/GUI/Tab.cpp:3263
+#: src/slic3r/GUI/Tab.cpp:3700
 msgid "WHITE BULLET"
 msgstr "VIÑETA BLANCA"
 
-#: src/slic3r/GUI/Tab.cpp:3285
+#: src/slic3r/GUI/Tab.cpp:3722
 msgid "WHITE BULLET icon indicates a non system (or non default) preset."
 msgstr "El icono de VIÑETA BLANCA un ajuste no del sistema (o no por defecto)"
 
-#: src/slic3r/GUI/Tab.cpp:3288
+#: src/slic3r/GUI/Tab.cpp:3725
 msgid "WHITE BULLET icon indicates that the settings are the same as in the last saved preset for the current option group."
 msgstr "El símbolo de VIÑETA BLANCA indica que los ajustes son los mismos que los de la última vez que salvaste los ajustes para el grupo de opciones actual."
 
-#: src/slic3r/GUI/Tab.cpp:3303
+#: src/slic3r/GUI/Tab.cpp:3740
 msgid "WHITE BULLET icon indicates that the value is the same as in the last saved preset."
 msgstr "El símbolo de VIÑETA BLANCA indica que los valores son los mismos que los de los ajustes guardados la última vez."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:223 src/libslic3r/PrintConfig.cpp:2238
+#: src/slic3r/GUI/GUI_Preview.cpp:277 src/libslic3r/PrintConfig.cpp:2381
 msgid "Width"
 msgstr "Ancho"
 
-#: src/libslic3r/GCode/PreviewData.cpp:349
+#: src/slic3r/GUI/GCodeViewer.cpp:2237 src/libslic3r/GCode/PreviewData.cpp:354
 msgid "Width (mm)"
 msgstr "Ancho (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:2640
+#: src/libslic3r/PrintConfig.cpp:2783
 msgid "Width from the back sphere center to the front sphere center"
 msgstr "Ancho desde el centro de la esfera trasera al centro de la esfera delantera"
 
-#: src/libslic3r/PrintConfig.cpp:2239
+#: src/libslic3r/PrintConfig.cpp:2382
 msgid "Width of a wipe tower"
 msgstr "Ancho de la torre de limpieza"
 
-#: src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3055
 msgid "Width of the connector sticks which connect the object and the generated pad."
 msgstr "Ancho de los palitos de apoyo que conectan la pieza y la base generada."
 
-#: src/libslic3r/PrintConfig.cpp:2354
+#: src/libslic3r/PrintConfig.cpp:2497
 msgid "Width of the display"
 msgstr "Ancho de la pantalla"
 
-#: src/slic3r/GUI/PresetHints.cpp:48
+#: src/slic3r/GUI/PresetHints.cpp:47
 msgid "will always run at %1%%%"
 msgstr "siempre funcionará al %1%%%"
 
-#: src/slic3r/GUI/PresetHints.cpp:55
+#: src/slic3r/GUI/PresetHints.cpp:54
 msgid "will be turned off."
 msgstr "será apagada."
 
-#: src/libslic3r/PrintConfig.cpp:2441
+#: src/libslic3r/PrintConfig.cpp:2584
 msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
 msgstr "Aumentará o reducirá los polígonos 2D laminados de acuerdo con el signo de la corrección."
 
-#: src/libslic3r/PrintConfig.cpp:2261
+#: src/libslic3r/PrintConfig.cpp:2404
 msgid "Wipe into this object"
 msgstr "Limpiar en el objeto"
 
-#: src/libslic3r/PrintConfig.cpp:2253
+#: src/libslic3r/PrintConfig.cpp:2396
 msgid "Wipe into this object's infill"
 msgstr "Limpiar en el relleno del objeto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101
-#: src/slic3r/GUI/GUI_ObjectList.cpp:619 src/libslic3r/PrintConfig.cpp:2252
-#: src/libslic3r/PrintConfig.cpp:2260
+#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:99
+#: src/slic3r/GUI/GUI_ObjectList.cpp:658 src/libslic3r/PrintConfig.cpp:2395
+#: src/libslic3r/PrintConfig.cpp:2403
 msgid "Wipe options"
 msgstr "Opciones de limpieza"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:248 src/slic3r/GUI/Tab.cpp:1191
-#: src/libslic3r/ExtrusionEntity.cpp:321
+#: src/slic3r/GUI/GUI_Preview.cpp:313 src/slic3r/GUI/Tab.cpp:1521
+#: src/libslic3r/ExtrusionEntity.cpp:326 src/libslic3r/ExtrusionEntity.cpp:360
 msgid "Wipe tower"
 msgstr "Torre de limpieza"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "wipe tower"
 msgstr "torre de limpieza"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:120
-#: src/slic3r/GUI/ConfigManipulation.cpp:140
+#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:139
 msgid "Wipe Tower"
 msgstr "Torre de limpieza"
 
@@ -8956,36 +10280,36 @@ msgstr "Torre de limpieza"
 msgid "Wipe tower - Purging volume adjustment"
 msgstr "Torre de limpieza - Ajuste del volumen de purga"
 
-#: src/slic3r/GUI/Tab.cpp:1488
+#: src/slic3r/GUI/Tab.cpp:1834
 msgid "Wipe tower parameters"
 msgstr "Parámetros de la torre de limpieza"
 
-#: src/libslic3r/PrintConfig.cpp:2245
+#: src/libslic3r/PrintConfig.cpp:2388
 msgid "Wipe tower rotation angle"
 msgstr "Ángulo de rotación de la torre de limpieza"
 
-#: src/libslic3r/PrintConfig.cpp:2246
+#: src/libslic3r/PrintConfig.cpp:2389
 msgid "Wipe tower rotation angle with respect to x-axis."
 msgstr "Ángulo de rotación de la torre de limpieza con respecto al eje X."
 
-#: src/libslic3r/PrintConfig.cpp:2193
+#: src/libslic3r/PrintConfig.cpp:2336
 msgid "Wipe while retracting"
 msgstr "Limpiar mientras se retrae"
 
-#: src/slic3r/GUI/PresetHints.cpp:225
+#: src/slic3r/GUI/PresetHints.cpp:224
 msgid "with a volumetric rate"
 msgstr "con una tasa volumétrica"
 
-#: src/libslic3r/PrintConfig.cpp:1530
+#: src/libslic3r/PrintConfig.cpp:1638
 msgid "With bowden extruders, it may be wise to do some amount of quick retract before doing the wipe movement."
 msgstr "Con extrusores bowden, puede ser recomendable realizar una retracción rápida antes de realizar el movimiento de limpiar."
 
-#: src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2198
 msgid "With sheath around the support"
 msgstr "Con protección alrededor del soporte"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:62
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:105
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:68
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:111
 msgid "World coordinates"
 msgstr "Coordenadas mundiales"
 
@@ -9002,84 +10326,100 @@ msgstr ""
 "Ten en cuenta que primero se creará una instantánea de la configuración. Así que se puede recuperar en cualquier momento en caso de que hubiera algún problema con la nueva versión.\n"
 "Updated configuration bundles:"
 
-#: src/libslic3r/Zipper.cpp:92
+#: src/libslic3r/miniz_extension.cpp:151
 msgid "write calledback failed"
 msgstr "fallo write calledback"
 
-#: src/libslic3r/PrintConfig.cpp:3382
+#: src/libslic3r/PrintConfig.cpp:3581
 msgid "Write information about the model to the console."
 msgstr "Escribir información sobre el modelo en la consola."
 
-#: src/slic3r/Utils/Duet.cpp:131
+#: src/slic3r/Utils/Duet.cpp:133
 msgid "Wrong password"
 msgstr "Contraseña incorrecta"
 
-#: src/libslic3r/PrintConfig.cpp:2225
+#: src/libslic3r/PrintConfig.cpp:2368
 msgid "X coordinate of the left front corner of a wipe tower"
 msgstr "Coordenada X de la esquina frontal izquierda de la torre de limpieza"
 
-#: src/libslic3r/PrintConfig.cpp:1879
+#: src/libslic3r/PrintConfig.cpp:2021
 msgid "XY separation between an object and its support"
 msgstr "Separación XY entre un objeto y su soporte"
 
-#: src/libslic3r/PrintConfig.cpp:1881
+#: src/libslic3r/PrintConfig.cpp:2023
 msgid "XY separation between an object and its support. If expressed as percentage (for example 50%), it will be calculated over external perimeter width."
 msgstr "Separación XY entre un objeto y su soporte. Si se expresa como porcentaje (por ejemplo 50%), se calculará sobre el ancho del perímetro externo."
 
-#: src/libslic3r/PrintConfig.cpp:2275
+#: src/libslic3r/PrintConfig.cpp:2418
 msgid "XY Size Compensation"
 msgstr "Compensación de tamaño XY"
 
-#: src/libslic3r/PrintConfig.cpp:2232
+#: src/libslic3r/PrintConfig.cpp:2375
 msgid "Y coordinate of the left front corner of a wipe tower"
 msgstr "Coordenada Y de la esquina delantera izquierda de la torre de limpieza"
 
-#: src/slic3r/GUI/Plater.cpp:1170
+#: src/slic3r/GUI/Plater.cpp:1079
 msgid "Yes"
 msgstr "Sí"
 
-#: src/libslic3r/PrintConfig.cpp:1317
+#: src/slic3r/GUI/Plater.cpp:1405
+msgid "You can open only one .gcode file at a time."
+msgstr "Solo puedes abrir un archivo .gcode a la vez."
+
+#: src/libslic3r/PrintConfig.cpp:1425
 msgid "You can put here your personal notes. This text will be added to the G-code header comments."
 msgstr "Puede poner sus notas personales aquí. Este texto se añadirá al código G como comentarios."
 
-#: src/libslic3r/PrintConfig.cpp:589
+#: src/libslic3r/PrintConfig.cpp:625
 msgid "You can put your notes regarding the filament here."
 msgstr "Puede poner sus notas con respecto al filamento aquí."
 
-#: src/libslic3r/PrintConfig.cpp:1473
+#: src/libslic3r/PrintConfig.cpp:1581
 msgid "You can put your notes regarding the printer here."
 msgstr "Puede poner sus notas con respecto a la impresora aquí."
 
-#: src/libslic3r/PrintConfig.cpp:2579
+#: src/libslic3r/PrintConfig.cpp:2722
 msgid "You can put your notes regarding the SLA print material here."
 msgstr "Puede poner tus notas sobre el material de impresión de SLA aquí."
 
-#: src/libslic3r/PrintConfig.cpp:360
+#: src/libslic3r/PrintConfig.cpp:394
 msgid "You can set this to a positive value to disable fan at all during the first layers, so that it does not make adhesion worse."
 msgstr "Puedes configurarlo como un valor positivo para desactivar el ventilador durante todas las capas iniciales, de manera que no empeora la adhesión."
 
-#: src/libslic3r/PrintConfig.cpp:1364
+#: src/libslic3r/PrintConfig.cpp:1472
 msgid "You can use all configuration options as variables inside this template. For example: [layer_height], [fill_density] etc. You can also use [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename], [input_filename_base]."
 msgstr "Puedes usar todas las opciones de configuración como las variables dentro de esta muestra. Por ejemplo [layer_height], [fill_density] etc.También puedes usar [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename], [input_filename_base]."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3546
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4009
 msgid "You can't change a type of the last solid part of the object."
 msgstr "No puede cambiar un tipo de la última parte sólida del objeto."
 
-#: src/slic3r/GUI/Plater.cpp:2390
+#: src/slic3r/GUI/Plater.cpp:2352
 #, c-format
 msgid "You can't to add the object(s) from %s because of one or some of them is(are) multi-part"
 msgstr "No puede agregar el(los) objeto(s) desde % s porque uno o algunos de ellos son de varias piezas"
 
-#: src/slic3r/GUI/Plater.cpp:2311
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2254
 msgid "You cannot load SLA project with a multi-part object on the bed"
 msgstr "No puedes cargar un proyecto SLA con varias piezas en la base"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:578
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:625
 msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
 msgstr "No puedes usar el modo de escala no uniforme para la selección de múltiples objetos/partes"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
+#: src/slic3r/GUI/SavePresetDialog.cpp:277
+msgid ""
+"You have selected physical printer \"%1%\" \n"
+"with related printer preset \"%2%\""
+msgstr ""
+"Ha seleccionado una impresora física \"%1%\" \n"
+"con preajuste de impresora relacionado \"%2%\""
+
+#: src/slic3r/GUI/GUI_App.cpp:1078
+msgid "You have the following presets with saved options for \"Print Host upload\""
+msgstr "Tiene los siguientes ajustes preestablecidos con opciones guardadas para \"Subida del host de impresión\""
+
+#: src/slic3r/GUI/OpenGLManager.cpp:262
 msgid "You may need to update your graphics card driver."
 msgstr "Puede que necesites actualizar tu tarjeta de gráficos."
 
@@ -9087,37 +10427,49 @@ msgstr "Puede que necesites actualizar tu tarjeta de gráficos."
 msgid "You must install a configuration update."
 msgstr "Es necesario instalar una actualización de la configuración."
 
-#: src/slic3r/GUI/Preferences.cpp:172
+#: src/slic3r/GUI/Preferences.cpp:299
 #, c-format
 msgid "You need to restart %s to make the changes effective."
 msgstr "Es necesario reiniciar %s para hacer los cambios efectivos."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3421
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
+msgid "You should to change a name of your printer device. It can't be saved."
+msgstr "Debería cambiar el nombre de su dispositivo de impresión. No se puede guardar."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
 #, c-format
 msgid "You started your selection with %s Item."
 msgstr "Has empezado la selección con %s Items."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1902
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:664
+msgid "You will not be asked about the unsaved changes the next time you close PrusaSlicer."
+msgstr "No se le preguntará acerca de los cambios no guardados la próxima vez que cierre PrusaSlicer."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:665
+msgid "You will not be asked about the unsaved changes the next time you switch a preset."
+msgstr "No se le preguntará acerca de los cambios no guardados la próxima vez que cambie un ajuste preestablecido."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:2121
 msgid "Your current changes will delete all saved color changes."
 msgstr "Tus nuevos cambios borrarán todos los cambios de color."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1923
+#: src/slic3r/GUI/DoubleSlider.cpp:2141
 msgid "Your current changes will delete all saved extruder (tool) changes."
 msgstr "Tus cambios actuales eliminarán todos los cambios guardados del extrusor (herramienta)."
 
-#: src/slic3r/GUI/MainFrame.cpp:911
+#: src/slic3r/GUI/MainFrame.cpp:1612
 msgid "Your file was repaired."
 msgstr "Tu fichero fue reparado."
 
-#: src/slic3r/GUI/Plater.cpp:2528
+#: src/slic3r/GUI/Plater.cpp:2490
 msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
 msgstr "Tu pieza parece demasiado grande, así que se ha escalado automáticamente para que pueda caber en la base de impresión."
 
-#: src/libslic3r/PrintConfig.cpp:2285
+#: src/libslic3r/PrintConfig.cpp:2428
 msgid "Z offset"
 msgstr "Ajuste en altura Z"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:60
+#: src/slic3r/GUI/ConfigManipulation.cpp:59
 msgid ""
 "Zero first layer height is not valid.\n"
 "\n"
@@ -9127,7 +10479,7 @@ msgstr ""
 "\n"
 "La altura de la primera capa se restablecerá a 0.01."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/ConfigManipulation.cpp:47
 msgid ""
 "Zero layer height is not valid.\n"
 "\n"
@@ -9137,28 +10489,28 @@ msgstr ""
 "\n"
 "La altura de capa se restablecerá a 0.01."
 
-#: src/libslic3r/PrintConfig.cpp:2667
+#: src/libslic3r/PrintConfig.cpp:2831
 msgid "Zig-Zag"
 msgstr "Zig-Zag"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:308
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:294
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Zoom"
 msgstr "Zoom"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:183
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
 msgid "Zoom in"
 msgstr "Aumentar zoom"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:184
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
 msgid "Zoom out"
 msgstr "Reducir zoom"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
 msgid "Zoom to Bed"
 msgstr "Zoom a la Cama"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
 msgid ""
 "Zoom to selected object\n"
 "or all objects in scene, if none selected"
@@ -9166,14 +10518,16 @@ msgstr ""
 "Zoom a objetos seleccionados\n"
 "o a todos los objetos en escena, si no se seleccionó ninguno"
 
-#: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780
-#: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650
-#: src/libslic3r/PrintConfig.cpp:1894 src/libslic3r/PrintConfig.cpp:2049
-#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2727
-#: src/libslic3r/PrintConfig.cpp:2848
+#: src/libslic3r/PrintConfig.cpp:241 src/libslic3r/PrintConfig.cpp:816
+#: src/libslic3r/PrintConfig.cpp:1748 src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:2036 src/libslic3r/PrintConfig.cpp:2191
+#: src/libslic3r/PrintConfig.cpp:2390 src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3012
 msgid "°"
 msgstr "°"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1038 src/slic3r/GUI/ConfigWizard.cpp:1052
+#: src/slic3r/GUI/ConfigWizard.cpp:1404 src/slic3r/GUI/ConfigWizard.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:180 src/libslic3r/PrintConfig.cpp:912
+#: src/libslic3r/PrintConfig.cpp:956 src/libslic3r/PrintConfig.cpp:2209
 msgid "°C"
 msgstr "°C"
diff --git a/resources/localization/fr/PrusaSlicer.mo b/resources/localization/fr/PrusaSlicer.mo
index 5a4620fca19efe78e33258c4c1efb857ad1b9cab..0f66ed22647d7ad9595a6036577979f9f74f21c4 100644
GIT binary patch
delta 81042
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%0AkKF_XFsMyJ@_)}!Ov~|Z`4j2f0l_v3e;3&!-H59
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

delta 51796
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

diff --git a/resources/localization/fr/PrusaSlicer_fr.po b/resources/localization/fr/PrusaSlicer_fr.po
index e6b8515f3..1f5cdc29c 100644
--- a/resources/localization/fr/PrusaSlicer_fr.po
+++ b/resources/localization/fr/PrusaSlicer_fr.po
@@ -5,82 +5,101 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Poedit 2.4.2\n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
 "PO-Revision-Date: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
 
-#: src/slic3r/GUI/MainFrame.cpp:66
-msgid " - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/releases"
-msgstr " - Pensez à vérifier les mises à jour sur http://github.com/prusa3d/PrusaSlicer/releases"
+#: src/slic3r/GUI/Tab.cpp:4124
+msgid ""
+"\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n"
+"To enable \"%1%\", please switch off \"%2%\""
+msgstr ""
+"\"%1%\" est désactivé car \"%2%\" est activé dans la catégorie \"%3%\".\n"
+"Pour activer \"%1%\", veuillez désactiver \"%2%\""
 
-#: src/slic3r/GUI/MainFrame.cpp:872
-msgid " was successfully sliced."
-msgstr " a été découpé avec succès."
-
-#: src/libslic3r/PrintConfig.cpp:215 src/libslic3r/PrintConfig.cpp:792
-#: src/libslic3r/PrintConfig.cpp:1219 src/libslic3r/PrintConfig.cpp:1282
-#: src/libslic3r/PrintConfig.cpp:1532 src/libslic3r/PrintConfig.cpp:2425
-#: src/libslic3r/PrintConfig.cpp:2767
+#: src/libslic3r/PrintConfig.cpp:249 src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1390 src/libslic3r/PrintConfig.cpp:1640
+#: src/libslic3r/PrintConfig.cpp:2568 src/libslic3r/PrintConfig.cpp:2805
+#: src/libslic3r/PrintConfig.cpp:2931
 msgid "%"
 msgstr "%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:963
+#: src/slic3r/GUI/GLCanvas3D.cpp:969
 #, c-format
 msgid "%.2f - %.2f mm"
 msgstr "%.2f - %.2f mm"
 
 #. TRN  Remove/Delete
-#: src/slic3r/GUI/Tab.cpp:3126
+#: src/slic3r/GUI/Tab.cpp:3425
 msgid "%1% Preset"
 msgstr "%1% Préréglage"
 
-#: src/slic3r/GUI/Plater.cpp:4400
+#: src/slic3r/GUI/Plater.cpp:4423
 msgid "%1% printer was active at the time the target Undo / Redo snapshot was taken. Switching to %1% printer requires reloading of %1% presets."
 msgstr "L'imprimante %1% était active au moment où l'instantané cible Annuler / Refaire a été pris. Basculer vers l'imprimante %1% requiert de recharger les préréglages de %1%."
 
-#: src/libslic3r/Print.cpp:1374
+#: src/slic3r/GUI/MainFrame.cpp:1585
+msgid "%1% was successfully sliced."
+msgstr "%1% a été découpé avec succès."
+
+#: src/libslic3r/Print.cpp:1400
 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm"
 msgstr "%1%=%2% mm est trop bas pour être imprimable avec une hauteur de couche de %3% mm"
 
-#: src/slic3r/GUI/PresetHints.cpp:229
+#: src/slic3r/GUI/PresetHints.cpp:228
 #, c-format
 msgid "%3.2f mm³/s at filament speed %3.2f mm/s."
 msgstr "%3.2f mm³/s à une vitesse de filament de %3.2f mm/s."
 
-#: src/slic3r/GUI/Plater.cpp:1152
+#: src/slic3r/GUI/Plater.cpp:1061
 #, c-format
 msgid "%d (%d shells)"
 msgstr "%d (%d coques)"
 
-#: src/slic3r/GUI/Plater.cpp:1160
+#: src/slic3r/GUI/Plater.cpp:1069
 #, c-format
 msgid "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d facets reversed, %d backwards edges"
 msgstr "%d faces invalides, %d arrêtes corrigées, %d faces retirées, %d faces ajoutées, %d faces inversées, %d arrêtes à l'envers"
 
-#: src/slic3r/GUI/PresetHints.cpp:270
+#: src/slic3r/GUI/PresetHints.cpp:269
 #, c-format
 msgid "%d lines: %.2f mm"
 msgstr "%d lignes : %.2f mm"
 
-#: src/slic3r/GUI/MainFrame.cpp:1027
+#: src/slic3r/GUI/MainFrame.cpp:1728
 #, c-format
 msgid "%d presets successfully imported."
 msgstr "%d préréglages importés avec succès."
 
-#: src/slic3r/GUI/MainFrame.cpp:692
+#: src/slic3r/GUI/GUI_App.cpp:718
+#, c-format
+msgid ""
+"%s\n"
+"Do you want to continue?"
+msgstr ""
+"%s\n"
+"Voulez-vous continuer ?"
+
+#: src/slic3r/GUI/MainFrame.cpp:917 src/slic3r/GUI/MainFrame.cpp:1316
 #, c-format
 msgid "%s &Website"
 msgstr "Site &Web de %s"
 
+#: src/slic3r/GUI/GUI_App.cpp:394
+#, c-format
+msgid "%s - BREAKING CHANGE"
+msgstr "%s - MODIFICATION IMPACTANTE"
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:211
 #, c-format
 msgid "%s configuration is incompatible"
 msgstr "La configuration de %s n'est pas compatible"
 
-#: src/slic3r/GUI/Field.cpp:175
+#: src/slic3r/GUI/Field.cpp:223
 #, c-format
 msgid "%s doesn't support percentage"
 msgstr "%s ne supporte pas un pourcentage"
@@ -90,7 +109,7 @@ msgstr "%s ne supporte pas un pourcentage"
 msgid "%s error"
 msgstr "Erreur %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:481
+#: src/slic3r/GUI/ConfigWizard.cpp:499
 #, c-format
 msgid "%s Family"
 msgstr "%s Famille"
@@ -100,7 +119,7 @@ msgstr "%s Famille"
 msgid "%s has encountered an error"
 msgstr "%s a rencontré une erreur"
 
-#: src/slic3r/GUI/GUI_App.cpp:138
+#: src/slic3r/GUI/GUI_App.cpp:528
 #, c-format
 msgid ""
 "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it.\n"
@@ -111,12 +130,12 @@ msgstr ""
 "\n"
 "L'application va maintenant fermer."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:222
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:62
 #, c-format
 msgid "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it."
 msgstr "%s a rencontré une erreur. Elle a apparemment été provoquée par un manque de mémoire. Si vous êtes certain d'avoir assez de RAM sur votre système, cela peut également être un bug et nous aimerions que vous le signaliez."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:308
+#: src/slic3r/GUI/UpdateDialogs.cpp:309
 #, c-format
 msgid "%s has no configuration updates available."
 msgstr "%s n'a aucunes mises à jour de configuration disponibles."
@@ -143,7 +162,7 @@ msgstr ""
 "\n"
 "Veuillez utiliser les %s qui suivent pour paramétrer les nouveaux réglages et éventuellement accepter les mises à jour de réglage automatiques."
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:1512
 #, c-format
 msgid "%s View Mode"
 msgstr "Mode de Vue de %s"
@@ -163,218 +182,248 @@ msgstr ""
 "\n"
 "Lots de configuration mis à jour :"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
 #, c-format
 msgid "&About %s"
 msgstr "&Au sujet de %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:908
+#: src/slic3r/GUI/MainFrame.cpp:1297
+msgid "&Collapse sidebar"
+msgstr "&Réduire la barre latérale"
+
+#: src/slic3r/GUI/GUI_App.cpp:1645
 msgid "&Configuration"
 msgstr "&Configuration"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "&Configuration Snapshots"
 msgstr "Instantanés de &Configuration"
 
-#: src/slic3r/GUI/MainFrame.cpp:588
+#: src/slic3r/GUI/MainFrame.cpp:1194
 msgid "&Copy"
 msgstr "&Copier"
 
-#: src/slic3r/GUI/MainFrame.cpp:572
+#: src/slic3r/GUI/MainFrame.cpp:1178
 msgid "&Delete selected"
 msgstr "Suppri&mer la sélection"
 
-#: src/slic3r/GUI/MainFrame.cpp:722
+#: src/slic3r/GUI/MainFrame.cpp:1348 src/slic3r/GUI/MainFrame.cpp:1358
 msgid "&Edit"
 msgstr "&Editer"
 
-#: src/slic3r/GUI/MainFrame.cpp:506
+#: src/slic3r/GUI/MainFrame.cpp:1103
 msgid "&Export"
 msgstr "&Exporter"
 
-#: src/slic3r/GUI/MainFrame.cpp:617 src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1224 src/slic3r/GUI/MainFrame.cpp:1451
 msgid "&Filament Settings Tab"
 msgstr "Onglet des Réglages du &Filament"
 
-#: src/slic3r/GUI/MainFrame.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:1347 src/slic3r/GUI/MainFrame.cpp:1357
+#: src/slic3r/GUI/MainFrame.cpp:1417
 msgid "&File"
 msgstr "&Fichier"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1981
+#: src/slic3r/GUI/ConfigWizard.cpp:2492
 msgid "&Finish"
 msgstr "&Fin"
 
-#: src/slic3r/GUI/MainFrame.cpp:727
+#: src/slic3r/GUI/MainFrame.cpp:1141
+msgid "&G-code preview"
+msgstr "&Aperçu du G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1353 src/slic3r/GUI/MainFrame.cpp:1363
+#: src/slic3r/GUI/MainFrame.cpp:1423
 msgid "&Help"
 msgstr "&Aide"
 
-#: src/slic3r/GUI/MainFrame.cpp:474
+#: src/slic3r/GUI/MainFrame.cpp:1065
 msgid "&Import"
 msgstr "&Importer"
 
-#: src/slic3r/GUI/GUI_App.cpp:822
+#: src/slic3r/GUI/GUI_App.cpp:1517
 msgid "&Language"
 msgstr "&Langue"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "&New Project"
 msgstr "&Nouveau Projet"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1980
+#: src/slic3r/GUI/ConfigWizard.cpp:2491
 msgid "&Next >"
 msgstr "&Suivant >"
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "&Open G-code"
+msgstr "&Ouvrir le G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "&Open Project"
 msgstr "&Ouvrir Projet"
 
-#: src/slic3r/GUI/MainFrame.cpp:591
+#: src/slic3r/GUI/MainFrame.cpp:1197
 msgid "&Paste"
 msgstr "C&oller"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "&Plater Tab"
 msgstr "Onglet du &Plateau"
 
-#: src/slic3r/GUI/GUI_App.cpp:804
+#: src/slic3r/GUI/GUI_App.cpp:1487
 msgid "&Preferences"
 msgstr "&Préférences"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
 msgid "&Quit"
 msgstr "&Quitter"
 
-#: src/slic3r/GUI/MainFrame.cpp:583
+#: src/slic3r/GUI/MainFrame.cpp:1189
 msgid "&Redo"
 msgstr "&Refaire"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "&Repair STL file"
 msgstr "&Réparer le fichier STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "&Save Project"
 msgstr "&Sauvegarder Projet"
 
-#: src/slic3r/GUI/MainFrame.cpp:565
+#: src/slic3r/GUI/MainFrame.cpp:1171
 msgid "&Select all"
 msgstr "Tout &Sélectionner"
 
-#: src/slic3r/GUI/MainFrame.cpp:580
+#: src/slic3r/GUI/MainFrame.cpp:1186
 msgid "&Undo"
 msgstr "Ann&uler"
 
-#: src/slic3r/GUI/MainFrame.cpp:724
+#: src/slic3r/GUI/MainFrame.cpp:1350 src/slic3r/GUI/MainFrame.cpp:1360
+#: src/slic3r/GUI/MainFrame.cpp:1418
 msgid "&View"
 msgstr "&Vue"
 
-#: src/slic3r/GUI/MainFrame.cpp:723
+#: src/slic3r/GUI/MainFrame.cpp:1349 src/slic3r/GUI/MainFrame.cpp:1359
 msgid "&Window"
 msgstr "Fenê&tre"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:603 src/slic3r/GUI/ConfigWizard.cpp:631
+#: src/slic3r/GUI/ConfigWizard.cpp:662 src/slic3r/GUI/ConfigWizard.cpp:812
+#: src/slic3r/GUI/ConfigWizard.cpp:873 src/slic3r/GUI/ConfigWizard.cpp:1007
 msgid "(All)"
 msgstr "(Tout)"
 
-#: src/libslic3r/PrintConfig.cpp:1446
+#: src/libslic3r/PrintConfig.cpp:1554
 msgid "(minimum)"
 msgstr "(minimum)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:116
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:109
 msgid "(Re)slice"
 msgstr "(Re)découper"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "(Re)Slice No&w"
 msgstr "(Re)Découper Main&tenant"
 
-#: src/libslic3r/PrintConfig.cpp:771 src/libslic3r/PrintConfig.cpp:2587
+#: src/libslic3r/PrintConfig.cpp:807 src/libslic3r/PrintConfig.cpp:2730
 msgid "(Unknown)"
 msgstr "(Inconnu)"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid ") not found."
 msgstr ") non trouvé."
 
-#: src/libslic3r/PrintConfig.cpp:1918
+#: src/libslic3r/PrintConfig.cpp:2060
 msgid "0 (soluble)"
 msgstr "0 (soluble)"
 
-#: src/libslic3r/PrintConfig.cpp:1919
+#: src/libslic3r/PrintConfig.cpp:2061
 msgid "0.2 (detachable)"
 msgstr "0.2 (détachable)"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "3&D"
 msgstr "3&D"
 
-#: src/slic3r/GUI/Plater.cpp:4097
+#: src/slic3r/GUI/Plater.cpp:4044
 msgid "3D editor view"
 msgstr "Vue d'éditeur 3D"
 
-#: src/libslic3r/PrintConfig.cpp:851
+#: src/libslic3r/PrintConfig.cpp:889
 msgid "3D Honeycomb"
 msgstr "Nid d'abeille 3D"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:274
+#: src/slic3r/GUI/NotificationManager.hpp:318
+msgid "3D Mouse disconnected."
+msgstr "Souris 3D déconnectée."
+
+#: src/slic3r/GUI/Mouse3DController.cpp:263
 msgid "3Dconnexion settings"
 msgstr "Paramètres 3Dconnexion"
 
-#: src/slic3r/GUI/Plater.cpp:5038
+#: src/slic3r/GUI/Plater.cpp:5167
 #, c-format
 msgid "3MF file exported to %s"
 msgstr "Fichier 3MF exporté vers %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1979
+#: src/slic3r/GUI/ConfigWizard.cpp:2490
 msgid "< &Back"
 msgstr "< &Précédent"
 
-#: src/libslic3r/PrintConfig.cpp:287
+#: src/libslic3r/PrintConfig.cpp:321
 msgid "A boolean expression using the configuration values of an active print profile. If this expression evaluates to true, this profile is considered compatible with the active print profile."
 msgstr "Une expression booléenne utilisant les valeurs de configuration d'un profil d'imprimante actif. Si cette expression est évaluée comme vraie, ce profil est considéré comme compatible avec le profil d'imprimante actif."
 
-#: src/libslic3r/PrintConfig.cpp:272
+#: src/libslic3r/PrintConfig.cpp:306
 msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
 msgstr "Une expression booléenne utilisant les valeurs de configuration d'un profil d'imprimante actif. Si cette expression est évaluée comme vraie, ce profil est considéré comme compatible avec le profil d'imprimante actif."
 
-#: src/slic3r/GUI/Tab.cpp:975
+#: src/slic3r/GUI/Tab.cpp:1237
 msgid "A copy of the current system preset will be created, which will be detached from the system preset."
 msgstr "Une copie du préréglage système actuel sera créé, et il sera détaché du préréglage système."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1034
+#: src/slic3r/GUI/ConfigWizard.cpp:1400
 msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
 msgstr "La règle générale est 160 à 230 °C pour le PLA et 215 à 250 °C pour l'ABS."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1048
+#: src/slic3r/GUI/ConfigWizard.cpp:1414
 msgid "A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have no heated bed."
 msgstr "La règle générale est 60 °C pour le PLA et 110 °C pour l'ABS. Laissez à zéro si vous n'avez pas de lit chauffant."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:686
-msgid "A toolpath outside the print area was detected"
-msgstr "Parcours détecté en dehors de la zone d'impression"
+#: src/slic3r/GUI/GLCanvas3D.cpp:634
+msgid "A toolpath outside the print area was detected."
+msgstr "Un parcours d'outil en dehors de la zone d'impression a été détecté."
 
-#: src/slic3r/GUI/AboutDialog.cpp:199
+#: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215
 #, c-format
 msgid "About %s"
 msgstr "Au sujet de %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:959
+#: src/slic3r/GUI/GCodeViewer.cpp:2189
+msgid "above"
+msgstr "au-dessus"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:965
 #, c-format
 msgid "above %.2f mm"
 msgstr "au dessus de %.2f mm"
 
-#: src/libslic3r/PrintConfig.cpp:1569
+#: src/libslic3r/PrintConfig.cpp:1677
 msgid "Above Z"
 msgstr "Au-delà de Z"
 
-#: src/slic3r/GUI/Tab.cpp:1164
+#: src/slic3r/GUI/Tab.cpp:1494
 msgid "Acceleration control (advanced)"
 msgstr "Contrôle de l'accélération (avancé)"
 
-#: src/libslic3r/PrintConfig.cpp:2925
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:221
+#: src/libslic3r/PrintConfig.cpp:3089
 msgid "Accuracy"
 msgstr "Précision"
 
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:59
+msgid "Accurate"
+msgstr "Précis"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78
 msgid "Activate"
 msgstr "Activer"
@@ -383,67 +432,75 @@ msgstr "Activer"
 msgid "Active"
 msgstr "Actif"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1135 src/slic3r/GUI/GUI_ObjectList.cpp:1705
+#: src/slic3r/GUI/DoubleSlider.cpp:1264 src/slic3r/GUI/GUI_ObjectList.cpp:1833
 msgid "active"
 msgstr "actif"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:267
+#: src/slic3r/GUI/GLCanvas3D.cpp:254
 msgid "Adaptive"
 msgstr "Adaptatif"
 
-#: src/slic3r/GUI/Tab.cpp:241
-msgid "Add a new printer"
-msgstr "Ajouter une nouvelle imprimante"
+#: src/libslic3r/PrintConfig.cpp:894
+msgid "Adaptive Cubic"
+msgstr "Cubique adaptatif"
 
-#: src/libslic3r/PrintConfig.cpp:2782
+#: src/slic3r/GUI/SavePresetDialog.cpp:314
+msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\""
+msgstr "Ajouter \"%1%\" comme préréglage suivant pour l'imprimante physique \"%2%\""
+
+#: src/libslic3r/PrintConfig.cpp:2946
 msgid "Add a pad underneath the supported model"
 msgstr "Ajouter une base sous le modèle supporté"
 
-#: src/libslic3r/PrintConfig.cpp:2058
+#: src/libslic3r/PrintConfig.cpp:2200
 msgid "Add a sheath (a single perimeter line) around the base support. This makes the support more reliable, but also more difficult to remove."
 msgstr "Ajouter une enveloppe (une ligne unique de périmètre) autour de la base du support. Ceci rend le support plus fiable, mais aussi plus difficile à retirer."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:991
+#: src/slic3r/GUI/DoubleSlider.cpp:1114
 msgid "Add another code - Ctrl + Left click"
 msgstr "Ajouter un autre code - Ctr + Clic gauche"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:992
+#: src/slic3r/GUI/DoubleSlider.cpp:1115
 msgid "Add another code - Right click"
 msgstr "Ajouter un autre code - Clic droit"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1477
+#: src/slic3r/GUI/DoubleSlider.cpp:1665
 msgid "Add color change"
 msgstr "Ajouter un changement de couleur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1180
+#: src/slic3r/GUI/DoubleSlider.cpp:1307
 msgid "Add color change (%1%) for:"
 msgstr "Ajouter le changement de couleur (%1%) pour :"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:988
+#: src/slic3r/GUI/DoubleSlider.cpp:1111
 msgid "Add color change - Left click"
 msgstr "Ajouter un changement de couleur - Clic gauche"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:986
+#: src/slic3r/GUI/DoubleSlider.cpp:1109
 msgid "Add color change - Left click for predefined color or Shift + Left click for custom color selection"
 msgstr "Ajouter un changement de couleur - Clic gauche pour la couleur prédéfinie ou Maj + Clic gauche pour la sélection d'une couleur personnalisée"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
 msgid "Add color change marker for current layer"
 msgstr "Ajouter un repère de changement de couleur pour la couche en cours"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1490
+#: src/slic3r/GUI/DoubleSlider.cpp:1682
 msgid "Add custom G-code"
 msgstr "Ajouter un G-code personnalisé"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:240
+#: src/slic3r/GUI/DoubleSlider.cpp:1679
+msgid "Add custom template"
+msgstr "Ajouter un modèle personnalisé"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:235
 msgid "Add detail"
 msgstr "Ajouter des détails"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:421
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:308
 msgid "Add drainage hole"
 msgstr "Ajouter un trou de drainage"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:984
+#: src/slic3r/GUI/DoubleSlider.cpp:1107
 msgid "Add extruder change - Left click"
 msgstr "Ajouter un changement d'extrudeur - Clic gauche"
 
@@ -451,30 +508,30 @@ msgstr "Ajouter un changement d'extrudeur - Clic gauche"
 msgid "Add extruder to sequence"
 msgstr "Ajouter l'extrudeur à la séquence"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1993
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
 msgid "Add Generic Subobject"
 msgstr "Ajouter un Sous-objet Générique"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2896
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2925
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2943
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3297
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3325
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3345
 msgid "Add Height Range"
 msgstr "Ajouter une Zone de Hauteur"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4526 src/slic3r/GUI/Plater.cpp:3788
-#: src/slic3r/GUI/Plater.cpp:3800 src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/GLCanvas3D.cpp:4892 src/slic3r/GUI/Plater.cpp:3708
+#: src/slic3r/GUI/Plater.cpp:3720 src/slic3r/GUI/Plater.cpp:3858
 msgid "Add instance"
 msgstr "Ajouter l'instance"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:153
 msgid "Add Instance of the selected object"
 msgstr "Ajouter une Instance à l'objet sélectionné"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:162
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:165
 msgid "Add layer range"
 msgstr "Ajouter une zone de couche"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2328
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2692
 msgid "Add Layers"
 msgstr "Ajouter des couches"
 
@@ -482,12 +539,12 @@ msgstr "Ajouter des couches"
 msgid "Add modifier"
 msgstr "Ajouter un modificateur"
 
-#: src/libslic3r/PrintConfig.cpp:479
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:515
+#, c-format
 msgid "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r keeps adding perimeters, until more than 70% of the loop immediately above is supported."
 msgstr "Ajouter plus de périmètres si nécessaire pour éviter des trous dans les parois inclinées. Slic3r ajoute des périmètres, jusqu'à ce que plus de 70% de la boucle immédiatement au-dessus soit supportée."
 
-#: src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/Plater.cpp:3858
 msgid "Add one more instance of the selected object"
 msgstr "Ajouter une instance supplémentaire de l'objet sélectionné"
 
@@ -495,52 +552,61 @@ msgstr "Ajouter une instance supplémentaire de l'objet sélectionné"
 msgid "Add part"
 msgstr "Ajouter une pièce"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1487
+#: src/slic3r/GUI/DoubleSlider.cpp:1675
 msgid "Add pause print"
 msgstr "Ajouter une pause d'impression"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
+#: src/slic3r/GUI/PresetComboBoxes.cpp:627
+#: src/slic3r/GUI/PresetComboBoxes.cpp:674
+msgid "Add physical printer"
+msgstr "Ajouter une imprimante physique"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
 msgid "Add point"
 msgstr "Ajouter un point"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
 msgid "Add point to selection"
 msgstr "Ajouter un point à la sélection"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1509
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:180
+msgid "Add preset for this printer device"
+msgstr "Ajouter un préréglage pour cette imprimante"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1640
 msgid "Add settings"
 msgstr "Ajouter des réglages"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1386
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1517
 msgid "Add Settings Bundle for Height range"
 msgstr "Ajouter une Combinaison de Réglages pour la zone de Hauteur"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1388
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1519
 msgid "Add Settings Bundle for Object"
 msgstr "Ajouter une Combinaison de Réglages pour l'Objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1387
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1518
 msgid "Add Settings Bundle for Sub-object"
 msgstr "Ajouter une Combinaison de Réglages pour le Sous-objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1314
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1445
 msgid "Add Settings for Layers"
 msgstr "Ajouter des Réglages pour les Couches"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1316
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1447
 msgid "Add Settings for Object"
 msgstr "Ajouter des Réglages pour un Objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1315
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1446
 msgid "Add Settings for Sub-object"
 msgstr "Ajouter des Réglages pour un Sous-objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2051
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1953
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2210
 msgid "Add Shape"
 msgstr "Ajouter une Forme"
 
-#: src/libslic3r/PrintConfig.cpp:409
+#: src/libslic3r/PrintConfig.cpp:443
 msgid "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)."
 msgstr "Ajouter un remplissage plein à proximité des surfaces inclinées pour garantir une épaisseur de coque verticale (couches solides supérieures+inférieures)."
 
@@ -552,11 +618,19 @@ msgstr "Ajouter un bloqueur de support"
 msgid "Add support enforcer"
 msgstr "Ajouter un générateur de supports"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:494
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:374
 msgid "Add support point"
 msgstr "Ajouter un point de support"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4467
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:371
+msgid "Add supports"
+msgstr "Ajouter des supports"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:293
+msgid "Add supports by angle"
+msgstr "Ajouter des supports par angle"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4833
 msgid "Add..."
 msgstr "Ajouter..."
 
@@ -564,23 +638,29 @@ msgstr "Ajouter..."
 msgid "Add/Remove filaments"
 msgstr "Ajouter/Enlever des filaments"
 
-#: src/slic3r/GUI/Preset.cpp:1201
+#: src/slic3r/GUI/PresetComboBoxes.cpp:813
 msgid "Add/Remove materials"
 msgstr "Ajouter/Enlever des matériaux"
 
-#: src/slic3r/GUI/Preset.cpp:1203
+#: src/slic3r/GUI/PresetComboBoxes.cpp:622
+#: src/slic3r/GUI/PresetComboBoxes.cpp:669
+msgid "Add/Remove presets"
+msgstr "Ajouter/Supprimer des préréglages"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:815
+#: src/slic3r/GUI/PresetComboBoxes.cpp:972
 msgid "Add/Remove printers"
 msgstr "Ajouter/Supprimer des imprimantes"
 
-#: src/slic3r/GUI/Tab.cpp:970
+#: src/slic3r/GUI/Tab.cpp:1288
 msgid "Additional information:"
 msgstr "Informations complémentaires :"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:59
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:62
 msgid "Additional Settings"
 msgstr "Réglages Additionnels"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:791
+#: src/slic3r/GUI/ConfigWizard.cpp:1150
 msgid "Additionally a backup snapshot of the whole configuration is created before an update is applied."
 msgstr "De plus, un instantané de sauvegarde de l'ensemble de la configuration est créé avant qu'une mise à jour ne soit appliquée."
 
@@ -588,23 +668,22 @@ msgstr "De plus, un instantané de sauvegarde de l'ensemble de la configuration
 msgid "Address"
 msgstr "Adresse"
 
-#: src/slic3r/GUI/GUI_App.cpp:814 src/slic3r/GUI/GUI_ObjectList.cpp:104
-#: src/slic3r/GUI/GUI_ObjectList.cpp:622 src/slic3r/GUI/Tab.cpp:1087
-#: src/slic3r/GUI/Tab.cpp:1102 src/slic3r/GUI/Tab.cpp:1201
-#: src/slic3r/GUI/Tab.cpp:1204 src/slic3r/GUI/Tab.cpp:1470
-#: src/slic3r/GUI/Tab.cpp:1967 src/slic3r/GUI/Tab.cpp:3661
-#: src/slic3r/GUI/wxExtensions.cpp:754 src/libslic3r/PrintConfig.cpp:88
-#: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223
-#: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2276
-#: src/libslic3r/PrintConfig.cpp:2448
+#: src/slic3r/GUI/GUI_ObjectList.cpp:102 src/slic3r/GUI/GUI_ObjectList.cpp:661
+#: src/slic3r/GUI/Tab.cpp:1409 src/slic3r/GUI/Tab.cpp:1430
+#: src/slic3r/GUI/Tab.cpp:1531 src/slic3r/GUI/Tab.cpp:1534
+#: src/slic3r/GUI/Tab.cpp:1816 src/slic3r/GUI/Tab.cpp:2152
+#: src/slic3r/GUI/Tab.cpp:4080 src/libslic3r/PrintConfig.cpp:90
+#: src/libslic3r/PrintConfig.cpp:121 src/libslic3r/PrintConfig.cpp:257
+#: src/libslic3r/PrintConfig.cpp:1081 src/libslic3r/PrintConfig.cpp:2419
+#: src/libslic3r/PrintConfig.cpp:2591
 msgid "Advanced"
 msgstr "Avancé"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:821
+#: src/slic3r/GUI/ConfigWizard.cpp:1180
 msgid "Advanced mode"
 msgstr "Mode avancé"
 
-#: src/slic3r/GUI/GUI_App.cpp:814
+#: src/slic3r/GUI/GUI_App.cpp:1506
 msgid "Advanced View Mode"
 msgstr "Vue en Mode Avancé"
 
@@ -612,124 +691,140 @@ msgstr "Vue en Mode Avancé"
 msgid "Advanced: Output log"
 msgstr "Avancé : journal de Sortie"
 
-#: src/libslic3r/PrintConfig.cpp:668
+#: src/libslic3r/PrintConfig.cpp:704
 msgid "After a tool change, the exact position of the newly loaded filament inside the nozzle may not be known, and the filament pressure is likely not yet stable. Before purging the print head into an infill or a sacrificial object, Slic3r will always prime this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."
 msgstr "Après un changement d'outil, la position exacte dans la buse du filament qui vient d'être chargé peut ne pas être connue, et la pression du filament n'est probablement pas encore stable. Avant de purger la tête d'impression dans un remplissage ou un objet sacrificiel, Slic3r va toujours utiliser cette quantité de matériau dans la tour de nettoyage pour produire un remplissage successif ou des extrusions d'objet sacrificiel de façon fiable."
 
-#: src/slic3r/GUI/Tab.cpp:1994 src/libslic3r/PrintConfig.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:2182 src/libslic3r/PrintConfig.cpp:1173
 msgid "After layer change G-code"
 msgstr "G-Code après changement de couche"
 
-#: src/libslic3r/PrintConfig.cpp:3398
+#: src/libslic3r/PrintConfig.cpp:3597
 msgid "Align the model to the given point."
 msgstr "Aligner le modèle sur le point défini."
 
-#: src/libslic3r/PrintConfig.cpp:3397
+#: src/libslic3r/PrintConfig.cpp:3596
 msgid "Align XY"
 msgstr "Aligner XY"
 
-#: src/libslic3r/PrintConfig.cpp:1631
+#: src/libslic3r/PrintConfig.cpp:1739
 msgid "Aligned"
 msgstr "Aligné"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:290 src/slic3r/GUI/ConfigWizard.cpp:573
-#: src/slic3r/GUI/Tab.cpp:3174
+#: src/slic3r/GUI/ConfigWizard.cpp:308 src/slic3r/GUI/ConfigWizard.cpp:598
+#: src/slic3r/GUI/Tab.cpp:3507 src/slic3r/GUI/UnsavedChangesDialog.cpp:921
 msgid "All"
 msgstr "Tous"
 
-#: src/libslic3r/Print.cpp:1219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
+msgid "All gizmos: Rotate - left mouse button; Pan - right mouse button"
+msgstr "Tous les gizmos : Rotation - bouton gauche de la souris ; Panoramique - bouton droit de la souris"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:694
+msgid "All installed printers are compatible with the selected filament."
+msgstr "Toutes les imprimantes installées sont compatibles avec le filament sélectionné."
+
+#: src/libslic3r/Print.cpp:1245
 msgid "All objects are outside of the print volume."
 msgstr "Tous les objets sont en dehors du volume d'impression."
 
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "All objects will be removed, continue?"
 msgstr "Tous les objets seront supprimés, continuer ?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737
+msgid "All settings changes will be discarded."
+msgstr "Tous les changements de réglages seront perdus."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "All standard"
 msgstr "Tout en standard"
 
-#: src/libslic3r/Zipper.cpp:62
+#: src/libslic3r/miniz_extension.cpp:121
 msgid "allocation failed"
 msgstr "échec de l'allocation"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Along X axis"
 msgstr "Le long de l'axe X"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Along Y axis"
 msgstr "Le long de l'axe Y"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Along Z axis"
 msgstr "Le long de l'axe Z"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:222
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:160
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:141
+msgid "Alt + Mouse wheel"
+msgstr "Alt + molette de la souris"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:240
 msgid "Alternate nozzles:"
 msgstr "Buses alternatives :"
 
-#: src/slic3r/GUI/Plater.cpp:5002
+#: src/slic3r/GUI/Preferences.cpp:163
+msgid "Always ask for unsaved changes when selecting new preset"
+msgstr "Toujours demander pour les modifications non enregistrées lors de la sélection d'un nouveau préréglage"
+
+#: src/slic3r/GUI/Plater.cpp:5135
 #, c-format
 msgid "AMF file exported to %s"
 msgstr "Fichier AMF exporté vers %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:690
+#: src/slic3r/GUI/GLCanvas3D.cpp:638
 msgid ""
-"An object outside the print area was detected\n"
-"Resolve the current problem to continue slicing"
+"An object outside the print area was detected.\n"
+"Resolve the current problem to continue slicing."
 msgstr ""
-"Objet détecté en dehors de la zone d'impression\n"
-"Résolvez ce problème pour poursuivre le processus de découpage"
+"Un objet en dehors de la zone d'impression a été détecté.\n"
+"Résolvez le problème actuel pour continuer le découpage."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:685
-msgid "An object outside the print area was detected"
-msgstr "Objet détecté en dehors de la zone d'impression"
+#: src/slic3r/GUI/GLCanvas3D.cpp:633
+msgid "An object outside the print area was detected."
+msgstr "Un objet en dehors de la zone d'impression a été détecté."
 
-#: src/slic3r/GUI/Tab.cpp:2943
-msgid "and it has the following unsaved changes:"
-msgstr "et il y a les changements non sauvegardés suivants :"
-
-#: src/slic3r/GUI/Plater.cpp:3170
+#: src/slic3r/GUI/Plater.cpp:2972
 msgid "Another export job is currently running."
 msgstr "Une autre tâche d'export est actuellement en cours."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Any arrow"
 msgstr "N'importe quelle flèche"
 
-#: src/slic3r/GUI/Tab.cpp:965
+#: src/slic3r/GUI/Tab.cpp:1283
 msgid "Any modifications should be saved as a new preset inherited from this one."
 msgstr "Toute modification doit être enregistrée comme un nouveau préréglage hérité de celui-ci."
 
-#: src/libslic3r/PrintConfig.cpp:104
+#: src/libslic3r/PrintConfig.cpp:106
 msgid "API Key / Password"
 msgstr "Clé API / Mot de Passe"
 
-#: src/slic3r/GUI/GUI_App.cpp:810
+#: src/slic3r/GUI/GUI_App.cpp:1493
 msgid "Application preferences"
 msgstr "Préférences de l'application"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1374
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221
 msgid "Apply changes"
 msgstr "Appliquer les modifications"
 
-#: src/libslic3r/PrintConfig.cpp:575 src/libslic3r/PrintConfig.cpp:1708
+#: src/libslic3r/PrintConfig.cpp:611 src/libslic3r/PrintConfig.cpp:1823
 msgid "approximate seconds"
 msgstr "secondes approximatives"
 
-#: src/libslic3r/PrintConfig.cpp:428 src/libslic3r/PrintConfig.cpp:854
+#: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:892
 msgid "Archimedean Chords"
 msgstr "Accords archimédiens"
 
-#: src/libslic3r/Zipper.cpp:88
+#: src/libslic3r/miniz_extension.cpp:147
 msgid "archive is too large"
 msgstr "l'archive est trop volumineuse"
 
-#. TRN  remove/delete
-#: src/slic3r/GUI/Tab.cpp:3123
+#: src/slic3r/GUI/Tab.cpp:3420
 msgid "Are you sure you want to %1% the selected preset?"
 msgstr "Êtes-vous sûr de vouloir %1% le préréglage sélectionné ?"
 
@@ -741,97 +836,125 @@ msgstr ""
 "Êtes-vous certain de vouloir annuler le processus de flash du firmware ?\n"
 "Cela pourrait rendre votre imprimante inutilisable !"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1903 src/slic3r/GUI/DoubleSlider.cpp:1924
+#: src/slic3r/GUI/DoubleSlider.cpp:2122 src/slic3r/GUI/DoubleSlider.cpp:2142
 msgid "Are you sure you want to continue?"
 msgstr "Êtes-vous sûr de vouloir continuer ?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1269
+#: src/slic3r/GUI/Tab.cpp:3392
+msgid "Are you sure you want to delete \"%1%\" preset from the physical printer \"%2%\"?"
+msgstr "Voulez-vous vraiment supprimer le préréglage \"%1%\" de l'imprimante physique \"%2%\" ?"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:658
+msgid "Are you sure you want to delete \"%1%\" printer?"
+msgstr "Voulez-vous vraiment supprimer l'imprimante \"%1%\" ?"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1128
 msgid "Are you sure you want to do it?"
 msgstr "Êtes-vous certain de vouloir le faire ?"
 
-#: src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2566
 msgid "Area fill"
 msgstr "Remplissage de zone"
 
-#: src/slic3r/GUI/Plater.cpp:641
+#: src/slic3r/GUI/Plater.cpp:507
 msgid "Around object"
 msgstr "Autour de l'objet"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:157
-#: src/slic3r/GUI/Plater.cpp:2754
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/Plater.cpp:1549
 msgid "Arrange"
 msgstr "Agencer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:152
 msgid "Arrange selection"
 msgstr "Agencer la sélection"
 
-#: src/libslic3r/PrintConfig.cpp:3443
+#: src/libslic3r/PrintConfig.cpp:3642
 msgid "Arrange the supplied models in a plate and merge them in a single model in order to perform actions once."
 msgstr "Agencer les modèles fournis sur un plateau et les fusionner en un seul modèle afin de ne réaliser les actions qu'une seule fois."
 
-#: src/slic3r/GUI/Plater.cpp:2813
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:149
 msgid "Arranging"
 msgstr "Agencement en cours"
 
-#: src/slic3r/GUI/Plater.cpp:2841
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:182
 msgid "Arranging canceled."
 msgstr "Agencement annulé."
 
-#: src/slic3r/GUI/Plater.cpp:2842
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:183
 msgid "Arranging done."
 msgstr "Agencement terminé."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Arrow Down"
 msgstr "Flèche Bas"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
 msgid "Arrow Left"
 msgstr "Flèche Gauche"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
 msgid "Arrow Right"
 msgstr "Flèche Droite"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Arrow Up"
 msgstr "Flèche Haut"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:290
+#: src/slic3r/GUI/GUI_App.cpp:246
+msgid "Artwork model by Nora Al-Badri and Jan Nikolai Nelles"
+msgstr "Modèle d'illustration par Nora Al-Badri et Jan Nikolai Nelles"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:265
 msgid "As a workaround, you may run PrusaSlicer with a software rendered 3D graphics by running prusa-slicer.exe with the --sw_renderer parameter."
 msgstr "Une solution consiste à lancer PrusaSlicer avec des graphismes 3D rendus par un logiciel en lançant  prusa-slicer.exe avec le paramètre --sw_renderer."
 
-#: src/slic3r/GUI/GUI_App.cpp:1086 src/slic3r/GUI/Plater.cpp:2313
-#: src/slic3r/GUI/Tab.cpp:2960
+#: src/slic3r/GUI/Preferences.cpp:154
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:659
+msgid "Ask for unsaved changes when closing application"
+msgstr "Demander pour les modifications non enregistrées lors de la fermeture de l'application"
+
+#: src/slic3r/GUI/Preferences.cpp:161
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:660
+msgid "Ask for unsaved changes when selecting new preset"
+msgstr "Demander pour les modifications non enregistrées lors de la sélection d'un nouveau préréglage"
+
+#: src/slic3r/GUI/GUI_App.cpp:1878 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210
+#: src/slic3r/GUI/Plater.cpp:2256 src/slic3r/GUI/Tab.cpp:3189
 msgid "Attention!"
 msgstr "Attention !"
 
-#: src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:150
+msgid "Authorization Type"
+msgstr "Type d'autorisation"
+
+#: src/libslic3r/PrintConfig.cpp:2013
 msgid "Auto generated supports"
 msgstr "Supports générés automatiquement"
 
-#: src/slic3r/GUI/Preferences.cpp:47
+#: src/slic3r/GUI/Preferences.cpp:64
 msgid "Auto-center parts"
 msgstr "Centrer automatiquement les pièces"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1377
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1224
 msgid "Auto-generate points"
 msgstr "Générer automatiquement les points"
 
-#: src/slic3r/GUI/Plater.cpp:1157
+#: src/slic3r/GUI/Plater.cpp:1066
 #, c-format
 msgid "Auto-repaired (%d errors)"
 msgstr "Réparé automatiquement (%d erreurs)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:339
+#: src/slic3r/GUI/GUI_ObjectList.cpp:386
 #, c-format
 msgid "Auto-repaired (%d errors):"
 msgstr "Réparé automatiquement (%d erreurs):"
@@ -840,39 +963,47 @@ msgstr "Réparé automatiquement (%d erreurs):"
 msgid "Autodetected"
 msgstr "Autodétecté"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1273
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1134
 msgid "Autogenerate support points"
 msgstr "Autogénérer les points de support"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1268
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127
 msgid "Autogeneration will erase all manually edited points."
 msgstr "L'autogénération va effacer tous les points édités manuellement."
 
-#: src/slic3r/GUI/Tab.cpp:3632
+#: src/slic3r/GUI/Tab.cpp:4051
 msgid "Automatic generation"
 msgstr "Génération automatique"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Automatic updates"
 msgstr "Mises à jour automatiques"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "Automatically repair an STL file"
 msgstr "Réparer automatiquement un fichier STL"
 
-#: src/slic3r/GUI/Tab.cpp:1171
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:129
+msgid "Autoset by angle"
+msgstr "Autoset par angle"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:233
+msgid "Autoset custom supports"
+msgstr "Supports personnalisés Autoset"
+
+#: src/slic3r/GUI/Tab.cpp:1501
 msgid "Autospeed (advanced)"
 msgstr "Vitesse automatique (avancé)"
 
-#: src/libslic3r/PrintConfig.cpp:136
+#: src/libslic3r/PrintConfig.cpp:169
 msgid "Avoid crossing perimeters"
 msgstr "Éviter de traverser les périmètres"
 
-#: src/slic3r/GUI/Tab.cpp:3268
+#: src/slic3r/GUI/Tab.cpp:3705
 msgid "BACK ARROW"
 msgstr "FLÈCHE ARRIÈRE"
 
-#: src/slic3r/GUI/Tab.cpp:3290
+#: src/slic3r/GUI/Tab.cpp:3727
 msgid ""
 "BACK ARROW icon indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
 "Click to reset all settings for the current option group to the last saved preset."
@@ -880,7 +1011,7 @@ msgstr ""
 "L'icône FLÈCHE ARRIÈRE indique que les paramètres ont été changés et qu'ils ne sont pas identiques au dernier préréglage enregistré du groupe d'options en cours.\n"
 "Cliquez pour restaurer tous les paramètres du groupe d'options en cours avec les valeurs du dernier préréglage enregistré."
 
-#: src/slic3r/GUI/Tab.cpp:3304
+#: src/slic3r/GUI/Tab.cpp:3741
 msgid ""
 "BACK ARROW icon indicates that the value was changed and is not equal to the last saved preset.\n"
 "Click to reset current value to the last saved preset."
@@ -888,19 +1019,23 @@ msgstr ""
 "L'icône FLÈCHE ARRIÈRE indique que la valeur a été changée et qu'elle n'est pas identique au dernier préréglage enregistré.\n"
 "Cliquez pour restaurer la valeur à celle du dernier préréglage enregistré."
 
-#: src/slic3r/GUI/Preferences.cpp:55
+#: src/slic3r/GUI/Preferences.cpp:72
 msgid "Background processing"
 msgstr "Tâche en arrière plan"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:351
+#: src/slic3r/GUI/GUI_ObjectList.cpp:398
 msgid "backwards edges"
 msgstr "arrêtes à l'envers"
 
-#: src/slic3r/GUI/MainFrame.cpp:174
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:60
+msgid "Balanced"
+msgstr "Équilibré"
+
+#: src/slic3r/GUI/MainFrame.cpp:535 src/slic3r/GUI/MainFrame.cpp:537
 msgid "based on Slic3r"
 msgstr "basé sur Slic3r"
 
-#: src/slic3r/GUI/Tab.cpp:1439
+#: src/slic3r/GUI/Tab.cpp:1785
 msgid "Bed"
 msgstr "Plateau"
 
@@ -912,7 +1047,7 @@ msgstr "Modèle personnalisé de lit"
 msgid "Bed custom texture"
 msgstr "Texture du plateau personnalisée"
 
-#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/BedShapeDialog.hpp:98 src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape"
 msgstr "Forme du plateau"
 
@@ -920,23 +1055,23 @@ msgstr "Forme du plateau"
 msgid "Bed shape"
 msgstr "Forme du plateau"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape and Size"
 msgstr "Forme du Plateau et Taille"
 
-#: src/libslic3r/PrintConfig.cpp:147
+#: src/libslic3r/PrintConfig.cpp:181
 msgid "Bed temperature"
 msgstr "Température du plateau"
 
-#: src/libslic3r/PrintConfig.cpp:145
+#: src/libslic3r/PrintConfig.cpp:178
 msgid "Bed temperature for layers after the first one. Set this to zero to disable bed temperature control commands in the output."
 msgstr "Température du plateau pour les couches après la première. Mettez ceci à zéro pour désactiver les commandes de contrôle de température du plateau dans la sortie."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1051
+#: src/slic3r/GUI/ConfigWizard.cpp:1417
 msgid "Bed Temperature:"
 msgstr "Température du Plateau :"
 
-#: src/slic3r/GUI/Tab.cpp:1988 src/libslic3r/PrintConfig.cpp:153
+#: src/slic3r/GUI/Tab.cpp:2175 src/libslic3r/PrintConfig.cpp:187
 msgid "Before layer change G-code"
 msgstr "G-Code avant changement de couche"
 
@@ -944,143 +1079,191 @@ msgstr "G-Code avant changement de couche"
 msgid "Before roll back"
 msgstr "Avant le retour en arrière"
 
-#: src/slic3r/GUI/Plater.cpp:640
+#: src/slic3r/GUI/Plater.cpp:506
 msgid "Below object"
 msgstr "Sous l'objet"
 
-#: src/libslic3r/PrintConfig.cpp:1578
+#: src/libslic3r/PrintConfig.cpp:1686
 msgid "Below Z"
 msgstr "En-deçà de Z"
 
-#: src/libslic3r/PrintConfig.cpp:164
+#: src/libslic3r/PrintConfig.cpp:198
 msgid "Between objects G-code"
 msgstr "Entre le G-code des objets"
 
-#: src/slic3r/GUI/Tab.cpp:2006
+#: src/slic3r/GUI/Tab.cpp:2196
 msgid "Between objects G-code (for sequential printing)"
 msgstr "Entre le G-code des objets (pour une impression séquentielle)"
 
-#: src/libslic3r/PrintConfig.cpp:2489 src/libslic3r/PrintConfig.cpp:2490
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:242
+msgid "Block"
+msgstr "Bloquer"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:32
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:383
+msgid "Block seam"
+msgstr "Bloquer la jointure"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:373
+msgid "Block supports"
+msgstr "Bloquer les supports"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:292
+msgid "Block supports by angle"
+msgstr "Bloquer les supports par angle"
+
+#: src/libslic3r/PrintConfig.cpp:2632 src/libslic3r/PrintConfig.cpp:2633
 msgid "Bottle volume"
 msgstr "Volume de la bouteille"
 
-#: src/libslic3r/PrintConfig.cpp:2496 src/libslic3r/PrintConfig.cpp:2497
+#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2640
 msgid "Bottle weight"
 msgstr "Poids de la bouteille"
 
 #. TRN To be shown in the main menu View->Bottom
 #. TRN To be shown in Print Settings "Bottom solid layers"
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:665 src/libslic3r/PrintConfig.cpp:174
-#: src/libslic3r/PrintConfig.cpp:183
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
+#: src/libslic3r/PrintConfig.cpp:208 src/libslic3r/PrintConfig.cpp:217
 msgid "Bottom"
 msgstr "Dessous"
 
-#: src/libslic3r/PrintConfig.cpp:435
+#: src/libslic3r/PrintConfig.cpp:471
 msgid "Bottom fill pattern"
 msgstr "Motif de remplissage du dessous"
 
-#: src/slic3r/GUI/PresetHints.cpp:342
+#: src/slic3r/GUI/PresetHints.cpp:340
 msgid "Bottom is open."
 msgstr "Le fond est ouvert."
 
-#: src/slic3r/GUI/PresetHints.cpp:336
+#: src/slic3r/GUI/PresetHints.cpp:334
 msgid "Bottom shell is %1% mm thick for layer height %2% mm."
 msgstr "La coque inférieure a une épaisseur de %1% mm pour une hauteur de couche %2% mm."
 
-#: src/libslic3r/PrintConfig.cpp:177
+#: src/libslic3r/PrintConfig.cpp:211
 msgid "Bottom solid layers"
 msgstr "Couches solides inférieures"
 
-#: src/slic3r/GUI/MainFrame.cpp:665
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
 msgid "Bottom View"
 msgstr "Vue du Dessous"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1464
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1468
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1595
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
 msgid "Box"
 msgstr "Case"
 
-#: src/libslic3r/PrintConfig.cpp:193
+#: src/libslic3r/PrintConfig.cpp:227
 msgid "Bridge"
 msgstr "Pont"
 
-#: src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:256
 msgid "Bridge flow ratio"
 msgstr "Ratio de flux pour les ponts"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/slic3r/GUI/GUI_Preview.cpp:308 src/libslic3r/ExtrusionEntity.cpp:321
+#: src/libslic3r/ExtrusionEntity.cpp:350
 msgid "Bridge infill"
 msgstr "Remplissage du pont"
 
-#: src/libslic3r/PrintConfig.cpp:234
+#: src/libslic3r/PrintConfig.cpp:268
 msgid "Bridges"
 msgstr "Ponts"
 
-#: src/libslic3r/PrintConfig.cpp:213
+#: src/libslic3r/PrintConfig.cpp:247
 msgid "Bridges fan speed"
 msgstr "Vitesse du ventilateur pour les ponts"
 
-#: src/libslic3r/PrintConfig.cpp:202
+#: src/libslic3r/PrintConfig.cpp:236
 msgid "Bridging angle"
 msgstr "Angle du pont"
 
-#: src/libslic3r/PrintConfig.cpp:204
+#: src/libslic3r/PrintConfig.cpp:238
 msgid "Bridging angle override. If left to zero, the bridging angle will be calculated automatically. Otherwise the provided angle will be used for all bridges. Use 180° for zero angle."
 msgstr "Contournement de l'angle du pont. Si laissé à zéro, l'angle du pont sera calculé automatiquement. Sinon, l'angle fourni sera utilisé pour tous les ponts. Utilisez 180° pour un angle nul."
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Bridging volumetric"
 msgstr "Volumétrie des ponts"
 
-#: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1117
+#: src/slic3r/GUI/Plater.cpp:400 src/slic3r/GUI/Tab.cpp:1446
 msgid "Brim"
 msgstr "Bordure"
 
-#: src/libslic3r/PrintConfig.cpp:244
+#: src/libslic3r/PrintConfig.cpp:278
 msgid "Brim width"
 msgstr "Largeur de la bordure"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1658
-#: src/slic3r/GUI/Tab.cpp:1721
+#: src/slic3r/GUI/FirmwareDialog.cpp:805
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:271
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
 msgid "Browse"
 msgstr "Parcourir"
 
-#: src/libslic3r/Zipper.cpp:82
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:28
+msgid "Brush shape"
+msgstr "Forme du pinceau"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:44
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:27
+msgid "Brush size"
+msgstr "Taille du pinceau"
+
+#: src/libslic3r/miniz_extension.cpp:141
 msgid "buffer too small"
 msgstr "buffer trop petit"
 
+#: src/slic3r/GUI/GUI_App.cpp:1152
+msgid ""
+"But since this version of PrusaSlicer we don't show this information in Printer Settings anymore.\n"
+"Settings will be available in physical printers settings."
+msgstr ""
+"Mais depuis cette version de PrusaSlicer, nous ne montrons plus ces informations dans les Réglages de l'imprimante.\n"
+"Les réglages seront disponibles dans les réglages des imprimantes physiques."
+
 #: src/slic3r/GUI/ButtonsDescription.cpp:16
 msgid "Buttons And Text Colors Description"
 msgstr "Description des Boutons et des Couleurs de Texte"
 
-#: src/slic3r/GUI/PresetHints.cpp:223
+#: src/slic3r/GUI/GUI_App.cpp:1084
+msgid ""
+"By default new Printer devices will be named as \"Printer N\" during its creation.\n"
+"Note: This name can be changed later from the physical printers settings"
+msgstr ""
+"Par défaut, les nouvelles imprimantes seront nommées \"Imprimante N\" lors de leur création.\n"
+"Remarque : ce nom peut être modifié ultérieurement dans les réglages des imprimantes physiques"
+
+#: src/slic3r/GUI/PresetHints.cpp:222
 msgid "by the print profile maximum"
 msgstr "par le maximum du profil de l'imprimante"
 
-#: src/slic3r/GUI/Preferences.cpp:113
+#: src/slic3r/GUI/Preferences.cpp:178
 msgid "Camera"
 msgstr "Caméra"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:144
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
 msgid "Camera view"
 msgstr "Vue caméra"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1982 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/ConfigWizard.cpp:2493 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:245
 #: src/slic3r/GUI/ProgressStatusBar.cpp:26
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:644
 msgid "Cancel"
 msgstr "Annuler"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:157
+#: src/slic3r/GUI/PrintHostDialogs.cpp:155
 msgid "Cancel selected"
 msgstr "Annuler la sélection"
 
-#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/PrintHostDialogs.cpp:233
+#: src/slic3r/GUI/Plater.cpp:3589 src/slic3r/GUI/PrintHostDialogs.cpp:233
 msgid "Cancelled"
 msgstr "Annulé"
 
-#: src/slic3r/GUI/Plater.cpp:3153 src/slic3r/GUI/PrintHostDialogs.cpp:232
+#: src/slic3r/GUI/Plater.cpp:2953 src/slic3r/GUI/PrintHostDialogs.cpp:232
 msgid "Cancelling"
 msgstr "Annulation"
 
@@ -1092,7 +1275,7 @@ msgstr "Annulation..."
 msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
 msgstr "Impossible de calculer la largeur d'extrusion pour %1% : la variable \"%2%\" n'est pas accessible."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3400
 msgid ""
 "Cannot insert a new layer range after the current layer range.\n"
 "Current layer range overlaps with the next layer range."
@@ -1100,7 +1283,7 @@ msgstr ""
 "Impossible d'insérer une nouvelle zone de couche après la zone de couche actuelle.\n"
 "La zone de couche actuelle chevauche la prochaine zone de couche."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3391
 msgid ""
 "Cannot insert a new layer range after the current layer range.\n"
 "The next layer range is too thin to be split to two\n"
@@ -1109,7 +1292,7 @@ msgstr ""
 "Impossible d'insérer une nouvelle zone de couche après la zone de couche actuelle.\n"
 "La zone de couche suivante est trop fine pour être séparée en deux sans enfreindre la hauteur de couche minimum."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3395
 msgid ""
 "Cannot insert a new layer range between the current and the next layer range.\n"
 "The gap between the current layer range and the next layer range\n"
@@ -1118,80 +1301,88 @@ msgstr ""
 "Impossible d'insérer une nouvelle zone de couche entre l'actuelle et la prochaine.\n"
 "L'espace entre la zone de couche actuelle et la prochaine est inférieur à la hauteur de couche minimum autorisée."
 
-#: src/slic3r/GUI/Tab.cpp:3073
+#: src/slic3r/GUI/SavePresetDialog.cpp:137
 msgid "Cannot overwrite a system profile."
 msgstr "Impossible d'écraser un profil système."
 
-#: src/slic3r/GUI/Tab.cpp:3077
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
 msgid "Cannot overwrite an external profile."
 msgstr "Impossible d'écraser un profil externe."
 
-#: src/libslic3r/SLAPrint.cpp:613
+#: src/libslic3r/SLAPrint.cpp:627
 msgid "Cannot proceed without support points! Add support points or disable support generation."
 msgstr "Il n'est pas possible de continuer sans ajouter des points de support ! Ajoutez des points de support ou désactivez la génération de support."
 
-#: src/slic3r/GUI/Tab.cpp:1834
+#: src/slic3r/GUI/Tab.cpp:2068 src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "Capabilities"
 msgstr "Fonctionnalités"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Capture a configuration snapshot"
 msgstr "Capturer un instantané de la configuration"
 
-#: src/libslic3r/PrintConfig.cpp:3424
+#: src/slic3r/GUI/ImGuiWrapper.cpp:801 src/slic3r/GUI/Search.cpp:458
+msgid "Category"
+msgstr "Catégorie"
+
+#: src/libslic3r/PrintConfig.cpp:3623
 msgid "Center"
 msgstr "Centrer"
 
-#: src/libslic3r/PrintConfig.cpp:3425
+#: src/libslic3r/PrintConfig.cpp:3624
 msgid "Center the print around the given center."
 msgstr "Centrer l'impression autour d'un point donné."
 
-#: src/slic3r/GUI/Tab.cpp:1728
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:329
 msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
 msgstr "Fichiers de certificat (*.crt, *.pem)|*.crt;*.pem|Tous les fichiers|*.*"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+#: src/slic3r/GUI/SavePresetDialog.cpp:313
+msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\""
+msgstr "Changer \"%1%\" par \"%2%\" pour cette imprimante physique \"%3%\""
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
 msgid "Change camera type (perspective, orthographic)"
 msgstr "Changer le type d'appareil photo (perspective, orthographique)"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:885
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:693
 msgid "Change drainage hole diameter"
 msgstr "Changer le diamètre du trou de drainage"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144 src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/DoubleSlider.cpp:1273 src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Change extruder"
 msgstr "Changer l'extrudeur"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:536
+#: src/slic3r/GUI/GUI_ObjectList.cpp:574
 msgid "Change Extruder"
 msgstr "Changer d'Extrudeur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1145
+#: src/slic3r/GUI/DoubleSlider.cpp:1274
 msgid "Change extruder (N/A)"
 msgstr "Changer l'extrudeur (N/A)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3997
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4484
 msgid "Change Extruders"
 msgstr "Changer les Extrudeurs"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:157
 #, c-format
 msgid "Change Option %s"
 msgstr "Modifier l'Option %s"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3558
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4021
 msgid "Change Part Type"
 msgstr "Changer le Type de Partie"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:820
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:694
 msgid "Change point head diameter"
 msgstr "Changer le diamètre de la tête de la pointe"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Change the number of instances of the selected object"
 msgstr "Modifie le nombre d'instances de l'objet sélectionné"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1589
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1718
 msgid "Change type"
 msgstr "Changer le type"
 
@@ -1199,125 +1390,172 @@ msgstr "Changer le type"
 msgid "Changelog && Download"
 msgstr "Téléchargement du Journal des Modifications"
 
-#: src/slic3r/GUI/GUI_App.cpp:442
+#: src/slic3r/GUI/GUI_App.cpp:1245
 msgid "Changing of an application language"
 msgstr "Changer la langue d'une application"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:769 src/slic3r/GUI/Preferences.cpp:64
+#: src/slic3r/GUI/ConfigWizard.cpp:1128 src/slic3r/GUI/Preferences.cpp:81
 msgid "Check for application updates"
 msgstr "Vérifier les mises à jour de l'application"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for configuration updates"
 msgstr "Vérifier les mises à jour de configuration"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for updates"
 msgstr "Vérifier les mises à jo&ur"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:532
+#: src/slic3r/GUI/BedShapeDialog.cpp:608
 msgid "Choose a file to import bed texture from (PNG/SVG):"
 msgstr "Choisir un fichier à partir duquel importer la texture du plateau (PNG/SVG) :"
 
-#: src/slic3r/GUI/MainFrame.cpp:773
+#: src/slic3r/GUI/MainFrame.cpp:1474
 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Choisir un fichier à découper (STL/OBJ/AMF/3MF/PRUSA) :"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:555
+#: src/slic3r/GUI/BedShapeDialog.cpp:631
 msgid "Choose an STL file to import bed model from:"
 msgstr "Choisissez un fichier STL à partir duquel importer le modèle de lit :"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:487
+#: src/slic3r/GUI/BedShapeDialog.cpp:563
 msgid "Choose an STL file to import bed shape from:"
 msgstr "Choisissez un fichier STL à partir duquel importer la forme du plateau :"
 
-#: src/slic3r/GUI/GUI_App.cpp:555
+#: src/slic3r/GUI/GUI_App.cpp:1208
 msgid "Choose one file (3MF/AMF):"
 msgstr "Choisir un fichier (3MF/AMF) :"
 
-#: src/slic3r/GUI/GUI_App.cpp:567
+#: src/slic3r/GUI/GUI_App.cpp:1233
+msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):"
+msgstr "Choisir un fichier (GCODE/.GCO/.G/.ngc/NGC) :"
+
+#: src/slic3r/GUI/GUI_App.cpp:1220
 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Choisir un ou plusieurs fichiers (STL/OBJ/AMF/3MF/PRUSA) :"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:895
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:35
+msgid "Choose SLA archive:"
+msgstr "Choisir l'archive SLA :"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1261
 msgid "Choose the type of firmware used by your printer."
 msgstr "Choisissez le type de firmware utilisé par votre imprimante."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:89
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:53
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:36
+msgid "Circle"
+msgstr "Cercle"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:142
 msgid "Circular"
 msgstr "Circulaire"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/GLCanvas3D.cpp:4657
-msgid "Click right mouse button to open History"
-msgstr "Faites un clic droit sur la souris pour ouvrir l'Historique"
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
+msgid "Click right mouse button to open/close History"
+msgstr "Cliquez avec le bouton droit de la souris pour ouvrir/fermer l'historique"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:404
+#: src/slic3r/GUI/GUI_ObjectList.cpp:451
 msgid "Click the icon to change the object printable property"
 msgstr "Cliquez sur l'icône pour changer les propriétés imprimables de l'objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:398
+#: src/slic3r/GUI/GUI_ObjectList.cpp:445
 msgid "Click the icon to change the object settings"
 msgstr "Cliquez sur l'icône pour modifier les réglages de l'objet"
 
-#: src/slic3r/GUI/Plater.cpp:343
+#: src/slic3r/GUI/PresetComboBoxes.cpp:566
 msgid "Click to edit preset"
 msgstr "Cliquez pour éditer le préréglage"
 
-#: src/libslic3r/PrintConfig.cpp:252
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to hide"
+msgstr "Cliquez pour cacher"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to show"
+msgstr "Cliquez pour afficher"
+
+#: src/libslic3r/PrintConfig.cpp:286
 msgid "Clip multi-part objects"
 msgstr "Dissocier les objets multi-pièces"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:25
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
 msgid "Clipping of view"
 msgstr "Le plan de découpage"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:852
-#: src/slic3r/GUI/Mouse3DController.cpp:364
-#: src/slic3r/GUI/PrintHostDialogs.cpp:161
+#: src/slic3r/GUI/Mouse3DController.cpp:353
+#: src/slic3r/GUI/PrintHostDialogs.cpp:159
 msgid "Close"
 msgstr "Fermer"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
-#: src/libslic3r/PrintConfig.cpp:2934
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:3098
 msgid "Closing distance"
-msgstr "Distance de fermeture"
+msgstr "Intervalle d'espacement"
 
-#: src/slic3r/GUI/Plater.cpp:1260 src/libslic3r/PrintConfig.cpp:582
+#: src/slic3r/GUI/MainFrame.cpp:1297 src/slic3r/GUI/Plater.cpp:2144
+msgid "Collapse sidebar"
+msgstr "Réduire la barre latérale"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+msgid "Collapse/Expand the sidebar"
+msgstr "Réduire/développer la barre latérale"
+
+#: src/slic3r/GUI/Plater.cpp:1198 src/libslic3r/PrintConfig.cpp:618
 msgid "Color"
 msgstr "Couleur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1005
+#: src/slic3r/GUI/GCodeViewer.cpp:2410 src/slic3r/GUI/GCodeViewer.cpp:2438
+msgid "Color change"
+msgstr "Changement de couleur"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1130
 msgid "Color change (\"%1%\")"
 msgstr "Changement de couleur (\"%1%\")"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1006
+#: src/slic3r/GUI/DoubleSlider.cpp:1131
 msgid "Color change (\"%1%\") for Extruder %2%"
 msgstr "Changement de couleur (\"%1%\") pour l'extrudeur %2%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:995
+#: src/slic3r/GUI/GLCanvas3D.cpp:1001
 #, c-format
 msgid "Color change for Extruder %d at %.2f mm"
 msgstr "Changement de couleur pour l'Extrudeur %d à %.2f mm"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:228 src/slic3r/GUI/GUI_Preview.cpp:572
-#: src/libslic3r/GCode/PreviewData.cpp:359
+#: src/slic3r/GUI/Tab.cpp:2203
+msgid "Color Change G-code"
+msgstr "G-code de changement de couleur"
+
+#: src/libslic3r/PrintConfig.cpp:1960
+msgid "Color change G-code"
+msgstr "G-code de changement de couleur"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2531 src/slic3r/GUI/GUI_Preview.cpp:1475
+msgid "Color changes"
+msgstr "Changements de couleur"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2242 src/slic3r/GUI/GUI_Preview.cpp:282
+#: src/slic3r/GUI/GUI_Preview.cpp:784 src/libslic3r/GCode/PreviewData.cpp:364
 msgid "Color Print"
 msgstr "Couleur d'Impression"
 
-#: src/libslic3r/PrintConfig.cpp:260
+#: src/libslic3r/PrintConfig.cpp:294
 msgid "Colorprint height"
 msgstr "Hauteur du Colorprint"
 
-#: src/libslic3r/PrintConfig.cpp:990
+#: src/libslic3r/PrintConfig.cpp:1034
 msgid "Combine infill every"
 msgstr "Combiner le remplissage toutes les"
 
-#: src/libslic3r/PrintConfig.cpp:995
+#: src/libslic3r/PrintConfig.cpp:1039
 msgid "Combine infill every n layers"
 msgstr "Combiner le remplissage toutes les n couches"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:148
 msgid "Commands"
 msgstr "Commandes"
 
@@ -1325,23 +1563,23 @@ msgstr "Commandes"
 msgid "Comment:"
 msgstr "Commentaire :"
 
-#: src/slic3r/GUI/Tab.cpp:56 src/libslic3r/PrintConfig.cpp:280
+#: src/slic3r/GUI/Tab.cpp:107 src/libslic3r/PrintConfig.cpp:314
 msgid "Compatible print profiles"
 msgstr "Profils d'impression compatibles"
 
-#: src/libslic3r/PrintConfig.cpp:286
+#: src/libslic3r/PrintConfig.cpp:320
 msgid "Compatible print profiles condition"
 msgstr "Condition des profils d'impression compatibles"
 
-#: src/slic3r/GUI/Tab.cpp:50 src/libslic3r/PrintConfig.cpp:265
+#: src/slic3r/GUI/Tab.cpp:101 src/libslic3r/PrintConfig.cpp:299
 msgid "Compatible printers"
 msgstr "Imprimantes compatibles"
 
-#: src/libslic3r/PrintConfig.cpp:271
+#: src/libslic3r/PrintConfig.cpp:305
 msgid "Compatible printers condition"
 msgstr "Condition de compatibilité des imprimantes"
 
-#: src/libslic3r/PrintConfig.cpp:304
+#: src/libslic3r/PrintConfig.cpp:338
 msgid "Complete individual objects"
 msgstr "Compléter les objets individuels"
 
@@ -1349,27 +1587,27 @@ msgstr "Compléter les objets individuels"
 msgid "Completed"
 msgstr "Terminé"
 
-#: src/libslic3r/Zipper.cpp:54
+#: src/libslic3r/miniz_extension.cpp:113
 msgid "compression failed"
 msgstr "échec de la compression"
 
-#: src/libslic3r/PrintConfig.cpp:426 src/libslic3r/PrintConfig.cpp:849
+#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:887
 msgid "Concentric"
 msgstr "Concentrique"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2110
+#: src/slic3r/GUI/ConfigWizard.cpp:2625
 msgid "Configuration &Assistant"
 msgstr "&Assistant de Configuration"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2113
+#: src/slic3r/GUI/ConfigWizard.cpp:2628
 msgid "Configuration &Wizard"
 msgstr "Assistant de Co&nfiguration"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2109
+#: src/slic3r/GUI/ConfigWizard.cpp:2624
 msgid "Configuration Assistant"
 msgstr "Assistant de Configuration"
 
-#: src/libslic3r/PrintConfig.cpp:1316
+#: src/libslic3r/PrintConfig.cpp:1424
 msgid "Configuration notes"
 msgstr "Notes de configuration"
 
@@ -1385,11 +1623,15 @@ msgstr "Mise à jour de la configuration"
 msgid "Configuration update is available"
 msgstr "Une mise à jour de la configuration est disponible"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "Configuration update is available."
+msgstr "Une mise à jour de la configuration est disponible."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "Configuration updates"
 msgstr "Mises à jour de la configuration"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2112
+#: src/slic3r/GUI/ConfigWizard.cpp:2627
 msgid "Configuration Wizard"
 msgstr "Assistant de Configuration"
 
@@ -1397,15 +1639,11 @@ msgstr "Assistant de Configuration"
 msgid "Confirmation"
 msgstr "Confirmation"
 
-#: src/slic3r/GUI/Tab.cpp:1931
-msgid "Connection failed."
-msgstr "La connexion a échoué."
-
-#: src/slic3r/GUI/Tab.cpp:3627
+#: src/slic3r/GUI/Tab.cpp:4046
 msgid "Connection of the support sticks and junctions"
 msgstr "Connexion des tiges de support et jonctions"
 
-#: src/slic3r/Utils/AstroBox.cpp:83
+#: src/slic3r/Utils/AstroBox.cpp:84
 msgid "Connection to AstroBox works correctly."
 msgstr "La connexion à AstroBox fonctionne correctement."
 
@@ -1421,124 +1659,136 @@ msgstr "La connexion à FlashAir fonctionne correctement et le téléchargement
 msgid "Connection to OctoPrint works correctly."
 msgstr "La connexion avec OctoPrint fonctionne correctement."
 
-#: src/slic3r/GUI/Tab.cpp:1928
-msgid "Connection to printer works correctly."
-msgstr "La connexion avec l'imprimante fonctionne correctement."
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:260
+msgid "Connection to printers connected via the print host failed."
+msgstr "La connexion aux imprimantes connectées via l'hôte d'impression a échoué."
 
-#: src/slic3r/Utils/OctoPrint.cpp:176
+#: src/slic3r/Utils/OctoPrint.cpp:185
 msgid "Connection to Prusa SL1 works correctly."
 msgstr "La connexion avec Prusa SL1 fonctionne correctement."
 
-#: src/libslic3r/PrintConfig.cpp:1909
+#: src/libslic3r/PrintConfig.cpp:2051
 msgid "Contact Z distance"
 msgstr "Distance de contact Z"
 
-#: src/slic3r/GUI/AboutDialog.cpp:261
+#: src/slic3r/GUI/AboutDialog.cpp:286
 msgid "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and numerous others."
 msgstr "Contributions par Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik et de nombreux autres personnes."
 
-#: src/libslic3r/PrintConfig.cpp:2659
+#: src/slic3r/GUI/GUI_App.cpp:245
+msgid "Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others."
+msgstr "Contributions de Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik et bien d'autres."
+
+#: src/libslic3r/PrintConfig.cpp:2823
 msgid "Controls the bridge type between two neighboring pillars. Can be zig-zag, cross (double zig-zag) or dynamic which will automatically switch between the first two depending on the distance of the two pillars."
 msgstr "Contrôle le type de pont entre deux piliers voisins. Peut-être en zig-zag, en croisement (double zig-zag) ou dynamique auquel cas il alternera automatiquement entre les deux premiers en fonction de la distance entre les deux piliers."
 
-#: src/slic3r/GUI/Tab.cpp:1444
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4886
+msgid "Convert from imperial units"
+msgstr "Convertir à partir des unités impériales"
+
+#: src/slic3r/GUI/Tab.cpp:1790
 msgid "Cooling"
 msgstr "Refroidissement"
 
-#: src/libslic3r/PrintConfig.cpp:660
+#: src/libslic3r/PrintConfig.cpp:696
 msgid "Cooling moves are gradually accelerating beginning at this speed."
 msgstr "Les mouvements de refroidissement accélèrent progressivement à partir de cette vitesse."
 
-#: src/libslic3r/PrintConfig.cpp:679
+#: src/libslic3r/PrintConfig.cpp:715
 msgid "Cooling moves are gradually accelerating towards this speed."
 msgstr "Les mouvements de refroidissement accélèrent progressivement jusqu'à cette vitesse."
 
-#: src/slic3r/GUI/Tab.cpp:1465
+#: src/slic3r/GUI/Tab.cpp:1811
 msgid "Cooling thresholds"
 msgstr "Seuils de refroidissement"
 
-#: src/libslic3r/PrintConfig.cpp:327
+#: src/libslic3r/PrintConfig.cpp:361
 msgid "Cooling tube length"
 msgstr "Longueur du tube de refroidissement"
 
-#: src/libslic3r/PrintConfig.cpp:319
+#: src/libslic3r/PrintConfig.cpp:353
 msgid "Cooling tube position"
 msgstr "Position du tube de refroidissement"
 
-#: src/slic3r/GUI/Plater.cpp:4752
+#: src/slic3r/GUI/Plater.cpp:4856
 msgid "Copies of the selected object"
 msgstr "Copies de l'objet sélectionné"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4505
+#: src/slic3r/GUI/GLCanvas3D.cpp:4871
 msgid "Copy"
 msgstr "Copier"
 
-#: src/slic3r/GUI/MainFrame.cpp:589
+#: src/slic3r/GUI/MainFrame.cpp:1195
 msgid "Copy selection to clipboard"
 msgstr "Copier la sélection dans le presse-papier"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
 msgid "Copy to clipboard"
 msgstr "Copier dans le presse-papier"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:154
+#: src/slic3r/GUI/SysInfoDialog.cpp:177
 msgid "Copy to Clipboard"
 msgstr "Copier dans le Presse-Papier"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:121
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
 msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
 msgstr "La copie du G-code temporaire est terminée mais le code exporté n'a pas pu être ouvert au cours de la vérification de copie. Le G-code de sortie se trouve en %1%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:118
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:153
 msgid "Copying of the temporary G-code has finished but the original code at %1% couldn't be opened during copy check. The output G-code is at %2%.tmp."
 msgstr "La copie du G-code temporaire est terminée mais le code localisé en %1% n'a pas pu être ouvert au cours de la vérification de copie. Le G-code de sortie se trouve en %2%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:480
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:522
 msgid "Copying of the temporary G-code to the output G-code failed"
 msgstr "La copie du G-code provisoire dans le G-code final a échoué"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:109
-msgid "Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?"
-msgstr "La copie du G-code provisoire dans le G-code final a échoué. Peut-être que la carte SD est protégée en écriture ?"
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+msgid ""
+"Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\n"
+"Error message: %1%"
+msgstr ""
+"La copie du G-code temporaire vers le G-code de sortie a échoué. Peut-être que la carte SD est verrouillée en écriture ?\n"
+"Message d'erreur : %1%"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:112
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:147
 msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
 msgstr "La copie du G-code temporaire vers le G-code de sortie a échoué. Il est possible qu'il y ait un problème avec le matériel cible, veuillez tenter à nouveau l'export ou utilisez un matériel différent. Le G-code de sortie corrompu se trouve en %1%.tmp."
 
-#: src/slic3r/GUI/AboutDialog.cpp:127 src/slic3r/GUI/AboutDialog.cpp:256
+#: src/slic3r/GUI/AboutDialog.cpp:139 src/slic3r/GUI/AboutDialog.cpp:281
 msgid "Copyright"
 msgstr "Droits d'auteur"
 
-#: src/libslic3r/PrintConfig.cpp:2571 src/libslic3r/PrintConfig.cpp:2572
+#: src/libslic3r/PrintConfig.cpp:2714 src/libslic3r/PrintConfig.cpp:2715
 msgid "Correction for expansion"
 msgstr "Correction avant expansion"
 
-#: src/slic3r/GUI/Tab.cpp:2100 src/slic3r/GUI/Tab.cpp:3519
+#: src/slic3r/GUI/Tab.cpp:2270 src/slic3r/GUI/Tab.cpp:3935
 msgid "Corrections"
 msgstr "Corrections"
 
-#: src/slic3r/GUI/Plater.cpp:1243 src/libslic3r/PrintConfig.cpp:760
-#: src/libslic3r/PrintConfig.cpp:2510 src/libslic3r/PrintConfig.cpp:2511
+#: src/slic3r/GUI/Plater.cpp:1158 src/libslic3r/PrintConfig.cpp:796
+#: src/libslic3r/PrintConfig.cpp:2653 src/libslic3r/PrintConfig.cpp:2654
 msgid "Cost"
 msgstr "Coût"
 
-#: src/slic3r/GUI/Plater.cpp:239
+#: src/slic3r/GUI/Plater.cpp:245
 msgid "Cost (money)"
 msgstr "Coût (argent)"
 
-#: src/slic3r/GUI/Plater.cpp:2835
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:176
 msgid "Could not arrange model objects! Some geometries may be invalid."
 msgstr "Impossible d'agencer les objets du modèle ! Certaines géométries sont peut-être non-valides."
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/Utils/AstroBox.cpp:90
 msgid "Could not connect to AstroBox"
 msgstr "Impossible de se connecter à AstroBox"
 
-#: src/slic3r/Utils/Duet.cpp:54
+#: src/slic3r/Utils/Duet.cpp:55
 msgid "Could not connect to Duet"
 msgstr "Impossible de se connecter à Duet"
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:74
 msgid "Could not connect to FlashAir"
 msgstr "Impossible de se connecter à FlashAir"
 
@@ -1546,56 +1796,69 @@ msgstr "Impossible de se connecter à FlashAir"
 msgid "Could not connect to OctoPrint"
 msgstr "Impossible de se connecter à OctoPrint"
 
-#: src/slic3r/Utils/OctoPrint.cpp:181
+#: src/slic3r/Utils/OctoPrint.cpp:191
 msgid "Could not connect to Prusa SLA"
 msgstr "Impossible de se connecter à Prusa SLA"
 
-#: src/slic3r/GUI/Tab.cpp:1687
+#: src/slic3r/Utils/Http.cpp:73
+msgid "Could not detect system SSL certificate store. PrusaSlicer will be unable to establish secure network connections."
+msgstr "Impossible de détecter le stockage de certificats SSL du système. PrusaSlicer ne pourra pas établir de connexions réseau sécurisées."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:289
 msgid "Could not get a valid Printer Host reference"
 msgstr "Impossible d'obtenir une référence d'Hôte d'Imprimante valide"
 
-#: src/slic3r/Utils/Duet.cpp:134
+#: src/slic3r/Utils/Duet.cpp:136
 msgid "Could not get resources to create a new connection"
 msgstr "Impossible d'obtenir les ressources pour créer une nouvelle connexion"
 
-#: src/libslic3r/PrintConfig.cpp:1959
+#: src/libslic3r/PrintConfig.cpp:2101
 msgid "Cover the top contact layer of the supports with loops. Disabled by default."
 msgstr "Recouvrir la couche de contact supérieure des supports avec des boucles. Désactivé par défaut."
 
-#: src/libslic3r/PrintConfig.cpp:89
+#: src/libslic3r/PrintConfig.cpp:91
 msgid "Cracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low."
-msgstr "Les fentes d'une taille inférieure à 2x le rayon de fermeture de l'espacement sont remplies au cours du tranchage par maillage triangulaire. L'opération de fermeture de l'espacement peut réduire la résolution de l'impression finale, aussi est-il conseillé de conserver une valeur relativement basse."
+msgstr "Les fentes d'une taille inférieure à 2x le rayon de l'espacement sont remplies au cours du tranchage par maillage triangulaire. L'opération de fermeture de l'espacement peut réduire la résolution de l'impression finale, aussi est-il conseillé de conserver une valeur relativement basse."
 
-#: src/libslic3r/Zipper.cpp:58
+#: src/libslic3r/miniz_extension.cpp:117
 msgid "CRC-32 check failed"
 msgstr "Échec du test CRC-32"
 
-#: src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:3021
 msgid "Create pad around object and ignore the support elevation"
 msgstr "Créer un socle autour de l'objet et ignorer l'élévation du support"
 
-#: src/libslic3r/PrintConfig.cpp:2724
+#: src/libslic3r/PrintConfig.cpp:2888
 msgid "Critical angle"
 msgstr "Angle critique"
 
-#: src/libslic3r/PrintConfig.cpp:2668
+#: src/libslic3r/PrintConfig.cpp:2832
 msgid "Cross"
 msgstr "Croiser"
 
-#: src/libslic3r/PrintConfig.cpp:847
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:225
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:203
+msgid "Ctrl + Mouse wheel"
+msgstr "Ctrl + molette de la souris"
+
+#: src/libslic3r/PrintConfig.cpp:885
 msgid "Cubic"
 msgstr "Cubique"
 
-#: src/slic3r/GUI/wxExtensions.cpp:704
+#: src/slic3r/Utils/Http.cpp:91
+msgid "CURL init has failed. PrusaSlicer will be unable to establish network connections. See logs for additional details."
+msgstr "L'initialisation de CURL a échoué. PrusaSlicer ne pourra pas établir de connexions réseau. Voir les journaux pour plus de détails."
+
+#: src/slic3r/GUI/wxExtensions.cpp:624
 #, c-format
 msgid "Current mode is %s"
 msgstr "Le mode actuel est %s"
 
-#: src/slic3r/GUI/Tab.cpp:959
+#: src/slic3r/GUI/Tab.cpp:1278
 msgid "Current preset is inherited from"
 msgstr "Le préréglage actuel est hérité de"
 
-#: src/slic3r/GUI/Tab.cpp:957
+#: src/slic3r/GUI/Tab.cpp:1276
 msgid "Current preset is inherited from the default preset."
 msgstr "Le préréglage actuel est hérité du préréglage par défaut."
 
@@ -1603,451 +1866,488 @@ msgstr "Le préréglage actuel est hérité du préréglage par défaut."
 msgid "Current version:"
 msgstr "Version actuelle :"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:98 src/slic3r/GUI/GUI_Preview.cpp:249
-#: src/libslic3r/ExtrusionEntity.cpp:322
+#: src/slic3r/GUI/BedShapeDialog.cpp:143 src/slic3r/GUI/GUI_Preview.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:327 src/libslic3r/ExtrusionEntity.cpp:362
 msgid "Custom"
 msgstr "Personnalisé"
 
-#: src/libslic3r/PrintConfig.cpp:112
+#: src/libslic3r/PrintConfig.cpp:114
 msgid "Custom CA certificate file can be specified for HTTPS OctoPrint connections, in crt/pem format. If left blank, the default OS CA certificate repository is used."
 msgstr "Un fichier de certificat CA personnalisé peut être spécifié pour les connexions HTTPS OctoPrint, au format crt / pem. Si ce champ est vide, le certificat par défaut OS CA certificate repository est utilisé."
 
-#: src/slic3r/GUI/Tab.cpp:1527 src/slic3r/GUI/Tab.cpp:1975
+#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2160
+#: src/libslic3r/PrintConfig.cpp:1978
 msgid "Custom G-code"
 msgstr "G-code personnalisé"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1619
+#: src/slic3r/GUI/DoubleSlider.cpp:1815
 msgid "Custom G-code on current layer (%1% mm)."
 msgstr "G-code personnalisé sur la couche actuelle actuel (%1% mm)."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/GCodeViewer.cpp:2580 src/slic3r/GUI/GUI_Preview.cpp:1477
+msgid "Custom G-codes"
+msgstr "G-codes personnalisés"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer"
 msgstr "Imprimante Personnalisée"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer Setup"
 msgstr "Configuration d'une Imprimante Personnalisée"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:736
+#: src/slic3r/GUI/ConfigWizard.cpp:1095
 msgid "Custom profile name:"
 msgstr "Nom de profil personnalisé :"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:42
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:144 src/libslic3r/PrintConfig.cpp:3402
+#: src/slic3r/GUI/DoubleSlider.cpp:1135
+msgid "Custom template (\"%1%\")"
+msgstr "Modèle personnalisé (\"%1%\")"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:146 src/libslic3r/PrintConfig.cpp:3601
 msgid "Cut"
 msgstr "Couper"
 
-#: src/slic3r/GUI/Plater.cpp:4786
+#: src/slic3r/GUI/Plater.cpp:4921
 msgid "Cut by Plane"
 msgstr "Couper selon un Plan"
 
-#: src/libslic3r/PrintConfig.cpp:3403
+#: src/libslic3r/PrintConfig.cpp:3602
 msgid "Cut model at the given Z."
 msgstr "Couper le modèle au Z donné."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Cylinder"
 msgstr "Cylindre"
 
-#: src/slic3r/GUI/MainFrame.cpp:568
+#: src/slic3r/GUI/MainFrame.cpp:1174
 msgid "D&eselect all"
 msgstr "Tout désél&ectionner"
 
-#: src/libslic3r/PrintConfig.cpp:3504
+#: src/libslic3r/PrintConfig.cpp:3709
 msgid "Data directory"
 msgstr "Répertoire de données"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:313
+#: src/slic3r/GUI/Mouse3DController.cpp:300
 msgid "Deadzone:"
 msgstr "Zone morte :"
 
-#: src/libslic3r/Zipper.cpp:52
+#: src/libslic3r/miniz_extension.cpp:111
 msgid "decompression failed or archive is corrupted"
 msgstr "la décompression a échoué ou l'archive est corrompue"
 
-#: src/slic3r/GUI/Plater.cpp:4720
+#: src/slic3r/GUI/Plater.cpp:4824
 msgid "Decrease Instances"
 msgstr "Diminuer les Instances"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1704 src/libslic3r/PrintConfig.cpp:335
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1832 src/libslic3r/PrintConfig.cpp:369
 msgid "Default"
 msgstr "Défaut"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:457 src/slic3r/GUI/GUI_ObjectList.cpp:469
-#: src/slic3r/GUI/GUI_ObjectList.cpp:917 src/slic3r/GUI/GUI_ObjectList.cpp:3967
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3977
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4012
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:200
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:257
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:282
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:490
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:1753
+#: src/slic3r/GUI/ExtraRenderers.cpp:297 src/slic3r/GUI/GUI_ObjectList.cpp:496
+#: src/slic3r/GUI/GUI_ObjectList.cpp:508 src/slic3r/GUI/GUI_ObjectList.cpp:1015
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4454
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4464
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4499
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:202
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:259
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:284
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:492
 msgid "default"
 msgstr "défaut"
 
-#: src/libslic3r/PrintConfig.cpp:777
+#: src/libslic3r/PrintConfig.cpp:813
 msgid "Default base angle for infill orientation. Cross-hatching will be applied to this. Bridges will be infilled using the best direction Slic3r can detect, so this setting does not affect them."
-msgstr "Angle de base par défaut pour l'orientation du remplissage. Des croisements seront appliqués à cette valeur. Les ponts seront remplis avec la meilleure direction que Slic3r peut détecter, ce réglage ne les affecteront donc pas."
+msgstr "Angle de base par défaut pour l'orientation du remplissage. Des croisements seront appliqués à cette valeur. Les ponts seront remplis avec la meilleure direction que Slic3r peut détecter,ce réglage de les affectera donc pas."
 
-#: src/libslic3r/PrintConfig.cpp:554
+#: src/slic3r/GUI/GCodeViewer.cpp:2289
+msgid "Default color"
+msgstr "Couleur par défaut"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2313
+msgid "default color"
+msgstr "couleur par défaut"
+
+#: src/libslic3r/PrintConfig.cpp:590
 msgid "Default extrusion width"
 msgstr "Largeur d'extrusion par défaut"
 
-#: src/slic3r/GUI/Tab.cpp:987
+#: src/slic3r/GUI/Tab.cpp:1305
 msgid "default filament profile"
 msgstr "profil du filament par défaut"
 
-#: src/libslic3r/PrintConfig.cpp:345
+#: src/libslic3r/PrintConfig.cpp:379
 msgid "Default filament profile"
 msgstr "Profil de filament par défaut"
 
-#: src/libslic3r/PrintConfig.cpp:346
+#: src/libslic3r/PrintConfig.cpp:380
 msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
 msgstr "Profil de filament par défaut associé au profil d'imprimante courant. En sélectionnant le profil d'imprimante courant, ce profil de filament sera activé."
 
-#: src/slic3r/GUI/Tab.cpp:2919
-#, c-format
-msgid "Default preset (%s)"
-msgstr "Préréglage par défaut (%s)"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:904 src/slic3r/GUI/GLCanvas3D.cpp:933
+#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
 msgid "Default print color"
 msgstr "Couleur d'impression par défaut"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1302
 msgid "default print profile"
 msgstr "profil d'impression par défaut"
 
-#: src/libslic3r/PrintConfig.cpp:352
+#: src/libslic3r/PrintConfig.cpp:386
 msgid "Default print profile"
 msgstr "Profil de filament par défaut"
 
-#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:2592
-#: src/libslic3r/PrintConfig.cpp:2603
+#: src/libslic3r/PrintConfig.cpp:387 src/libslic3r/PrintConfig.cpp:2735
+#: src/libslic3r/PrintConfig.cpp:2746
 msgid "Default print profile associated with the current printer profile. On selection of the current printer profile, this print profile will be activated."
 msgstr "Profil de filament par défaut associé au profil d'imprimante courant. En sélectionnant le profil d'imprimante courant, ce profil de filament sera activé."
 
-#: src/slic3r/GUI/Tab.cpp:1001
+#: src/slic3r/GUI/Tab.cpp:1319
 msgid "default SLA material profile"
 msgstr "profil par défaut du matériau SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2591 src/libslic3r/PrintConfig.cpp:2602
+#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2745
 msgid "Default SLA material profile"
 msgstr "Profil par défaut du matériau SLA"
 
-#: src/slic3r/GUI/Tab.cpp:1005
+#: src/slic3r/GUI/Tab.cpp:1323
 msgid "default SLA print profile"
 msgstr "profil d'impression SLA par défaut"
 
-#: src/slic3r/GUI/Field.cpp:136
+#: src/slic3r/GUI/Field.cpp:184
 msgid "default value"
 msgstr "valeur par défaut"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:734
+#: src/slic3r/GUI/ConfigWizard.cpp:1093
 msgid "Define a custom printer profile"
 msgstr "Définissez un profil d'imprimante personnalisée"
 
-#: src/libslic3r/PrintConfig.cpp:2798
+#: src/libslic3r/PrintConfig.cpp:2962
 msgid "Defines the pad cavity depth. Set to zero to disable the cavity. Be careful when enabling this feature, as some resins may produce an extreme suction effect inside the cavity, which makes peeling the print off the vat foil difficult."
 msgstr "Définit la profondeur de la cavité du socle. Réglez sur zéro pour désactiver la cavité. Faites bien attention lorsque vous activez cette fonctionnalité, car certaines résines génèrent un effet de succion extrême dans la cavité, et il est alors difficile de retirer l'impression de la feuille de la cuve."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:346
+#: src/slic3r/GUI/GUI_ObjectList.cpp:393
 msgid "degenerate facets"
 msgstr "faces défectueuses"
 
-#: src/libslic3r/PrintConfig.cpp:640
+#: src/libslic3r/PrintConfig.cpp:676
 msgid "Delay after unloading"
 msgstr "Délai après le déchargement"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "delete"
 msgstr "supprimer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4475 src/slic3r/GUI/GUI_ObjectList.cpp:1718
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/GLCanvas3D.cpp:4841 src/slic3r/GUI/GUI_ObjectList.cpp:1846
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Delete"
 msgstr "Supprimer"
 
-#: src/slic3r/GUI/MainFrame.cpp:575
+#: src/slic3r/GUI/MainFrame.cpp:1181
 msgid "Delete &all"
 msgstr "Tout eff&acer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4484 src/slic3r/GUI/KBShortcutsDialog.cpp:129
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/GLCanvas3D.cpp:4850 src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "Delete all"
 msgstr "Tout Supprimer"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2176
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2341
 msgid "Delete All Instances from Object"
 msgstr "Supprimer Toutes les Instances depuis l'Objet"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1516
+#: src/slic3r/GUI/DoubleSlider.cpp:1708
 msgid "Delete color change"
 msgstr "Supprimer le changement de couleur"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
 msgid "Delete color change marker for current layer"
 msgstr "Retirer le repère de changement de couleur pour la couche en cours"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1519
+#: src/slic3r/GUI/DoubleSlider.cpp:1711
 msgid "Delete custom G-code"
 msgstr "Supprimer le G-code personnalisé"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:539
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:424
 msgid "Delete drainage hole"
 msgstr "Supprimer le trou de drainage"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2192
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2357
 msgid "Delete Height Range"
 msgstr "Supprimer la Zone de Hauteur"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2246
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
 msgid "Delete Instance"
 msgstr "Supprimer l'Instance"
 
-#: src/slic3r/GUI/Plater.cpp:2712
+#: src/slic3r/GUI/Plater.cpp:2673
 msgid "Delete Object"
 msgstr "Supprimer l'Objet"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:101
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:104
 #, c-format
 msgid "Delete Option %s"
 msgstr "Supprimer l'Option %s"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1518
+#: src/slic3r/GUI/DoubleSlider.cpp:1710
 msgid "Delete pause print"
 msgstr "Supprimer la pause d'impression"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
+#: src/slic3r/GUI/PresetComboBoxes.cpp:652
+msgid "Delete physical printer"
+msgstr "Supprimer l'imprimante physique"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:659
+msgid "Delete Physical Printer"
+msgstr "Supprimer l'imprimante physique"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:123
 msgid "Delete selected"
 msgstr "Supprimer la sélection"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2830
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3221
 msgid "Delete Selected"
 msgstr "Supprimer la Sélection"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2693
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3083
 msgid "Delete Selected Item"
 msgstr "Supprimer l'Item Sélectionné"
 
-#: src/slic3r/GUI/Plater.cpp:4677
+#: src/slic3r/GUI/Plater.cpp:4782
 msgid "Delete Selected Objects"
 msgstr "Supprimer les Objets Sélectionnés"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2319
 msgid "Delete Settings"
 msgstr "Supprimer les Réglages"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2227
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2393
 msgid "Delete Subobject"
 msgstr "Supprimer le sous-objet"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:631
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:514
 msgid "Delete support point"
 msgstr "Supprimer un point de support"
 
-#: src/slic3r/GUI/Tab.cpp:134
+#: src/slic3r/GUI/Tab.cpp:204
 msgid "Delete this preset"
 msgstr "Supprimer ce préréglage"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1035
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:55
+msgid "Delete this preset from this printer device"
+msgstr "Supprimer ce préréglage de cette imprimante"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1160
 msgid "Delete tick mark - Left click or press \"-\" key"
 msgstr "Supprimer la coche - Faites un clic gauche ou appuyez sur la touche \"-\""
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1517
+#: src/slic3r/GUI/DoubleSlider.cpp:1709
 msgid "Delete tool change"
 msgstr "Supprimer le changement d'outil"
 
-#: src/slic3r/GUI/MainFrame.cpp:576
+#: src/slic3r/GUI/MainFrame.cpp:1182
 msgid "Deletes all objects"
 msgstr "Supprimer tous les objets"
 
-#: src/slic3r/GUI/MainFrame.cpp:573
+#: src/slic3r/GUI/MainFrame.cpp:1179
 msgid "Deletes the current selection"
 msgstr "Supprime la sélection en cours"
 
-#: src/libslic3r/PrintConfig.cpp:717 src/libslic3r/PrintConfig.cpp:2503
-#: src/libslic3r/PrintConfig.cpp:2504
+#: src/libslic3r/PrintConfig.cpp:753 src/libslic3r/PrintConfig.cpp:2646
+#: src/libslic3r/PrintConfig.cpp:2647
 msgid "Density"
 msgstr "Densité"
 
-#: src/libslic3r/PrintConfig.cpp:791
+#: src/libslic3r/PrintConfig.cpp:827
 msgid "Density of internal infill, expressed in the range 0% - 100%."
 msgstr "Densité du remplissage interne, exprimée en pourcentage de 0% à 100%."
 
-#: src/slic3r/GUI/Tab.cpp:1258 src/slic3r/GUI/Tab.cpp:1548
-#: src/slic3r/GUI/Tab.cpp:2019 src/slic3r/GUI/Tab.cpp:2135
-#: src/slic3r/GUI/Tab.cpp:3543 src/slic3r/GUI/Tab.cpp:3671
+#: src/slic3r/GUI/Tab.cpp:1588 src/slic3r/GUI/Tab.cpp:1895
+#: src/slic3r/GUI/Tab.cpp:2228 src/slic3r/GUI/Tab.cpp:2304
+#: src/slic3r/GUI/Tab.cpp:3959 src/slic3r/GUI/Tab.cpp:4090
 msgid "Dependencies"
 msgstr "Dépendances"
 
-#: src/libslic3r/PrintConfig.cpp:1612 src/libslic3r/PrintConfig.cpp:1613
+#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1721
 msgid "Deretraction Speed"
 msgstr "Vitesse de réinsertion"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
+#: src/slic3r/GUI/GCodeViewer.cpp:2529 src/slic3r/GUI/GUI_Preview.cpp:337
+#: src/slic3r/GUI/GUI_Preview.cpp:1473
+msgid "Deretractions"
+msgstr "Réinsertions"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:172
+msgid "Descriptive name for the printer"
+msgstr "Nom descriptif de l'imprimante"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:122
 msgid "Deselect all"
 msgstr "Désélectionner tout"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Deselect by rectangle"
 msgstr "Désélectionner par rectangle"
 
-#: src/slic3r/GUI/MainFrame.cpp:569
+#: src/slic3r/GUI/MainFrame.cpp:1175
 msgid "Deselects all objects"
 msgstr "Désélectionner tous les objets"
 
-#: src/slic3r/GUI/Tab.cpp:963
+#: src/slic3r/GUI/Tab.cpp:1224
 msgid "Detach from system preset"
 msgstr "Détacher du préréglage système"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1246
 msgid "Detach preset"
 msgstr "Détacher le préréglage"
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/Tab.cpp:3323
 msgid "Detached"
 msgstr "Détaché"
 
-#: src/libslic3r/PrintConfig.cpp:1373
+#: src/libslic3r/PrintConfig.cpp:1481
 msgid "Detect bridging perimeters"
 msgstr "Détecter les périmètres faisant des ponts"
 
-#: src/libslic3r/PrintConfig.cpp:2075
+#: src/libslic3r/PrintConfig.cpp:2218
 msgid "Detect single-width walls (parts where two extrusions don't fit and we need to collapse them into a single trace)."
 msgstr "Détecter les parois de largeur unique (où deux extrusions côte à côte ne rentrent pas et doivent êtres fusionnées en un seul trait)."
 
-#: src/libslic3r/PrintConfig.cpp:2073
+#: src/libslic3r/PrintConfig.cpp:2216
 msgid "Detect thin walls"
 msgstr "Détecter les parois fines"
 
-#: src/libslic3r/PrintConfig.cpp:3472
+#: src/libslic3r/PrintConfig.cpp:3671
 msgid "Detect unconnected parts in the given model(s) and split them into separate objects."
-msgstr "Détecter les parties non-connectées sur un modèle donné (ou plusieurs) et les scinder en objets séparés."
+msgstr "Détecter les pièces non-connectées sur un modèle donné (ou plusieurs) et les scinder en objets séparés."
 
-#: src/slic3r/GUI/Plater.cpp:2368
+#: src/slic3r/GUI/Plater.cpp:2330
 msgid "Detected advanced data"
 msgstr "Données avancées détectées"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:289
+#: src/slic3r/GUI/Mouse3DController.cpp:274
 msgid "Device:"
 msgstr "Appareil :"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:93 src/libslic3r/PrintConfig.cpp:709
+#: src/slic3r/GUI/BedShapeDialog.cpp:95 src/libslic3r/PrintConfig.cpp:745
 msgid "Diameter"
 msgstr "Diamètre"
 
-#: src/libslic3r/PrintConfig.cpp:2694
+#: src/libslic3r/PrintConfig.cpp:2858
 msgid "Diameter in mm of the pillar base"
 msgstr "Diamètre en mm de la base du pilier"
 
-#: src/libslic3r/PrintConfig.cpp:2650
+#: src/libslic3r/PrintConfig.cpp:2793
 msgid "Diameter in mm of the support pillars"
 msgstr "Diamètre en mm des piliers de support"
 
-#: src/libslic3r/PrintConfig.cpp:2622
+#: src/libslic3r/PrintConfig.cpp:2765
 msgid "Diameter of the pointing side of the head"
 msgstr "Diamètre du côté de pointage de la tête"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:94
+#: src/slic3r/GUI/BedShapeDialog.cpp:131
 msgid "Diameter of the print bed. It is assumed that origin (0,0) is located in the center."
 msgstr "Diamètre du plateau d'impression. Il est supposé que l'origine (0,0) est située au centre."
 
-#: src/libslic3r/PrintConfig.cpp:1639
+#: src/libslic3r/PrintConfig.cpp:1747
 msgid "Direction"
 msgstr "Direction"
 
-#: src/libslic3r/PrintConfig.cpp:359
+#: src/libslic3r/PrintConfig.cpp:393
 msgid "Disable fan for the first"
 msgstr "Désactiver le ventilateur pour le(s) première(s)"
 
-#: src/libslic3r/PrintConfig.cpp:1349
+#: src/libslic3r/PrintConfig.cpp:1457
 msgid "Disables retraction when the travel path does not exceed the upper layer's perimeters (and thus any ooze will be probably invisible)."
 msgstr "Désactiver la rétraction lorsque le chemin de déplacement ne franchit pas les périmètres des couches supérieures (et donc les coulures seront probablement invisibles)."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:952
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:641
+msgid "Discard"
+msgstr "Ignorer"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1066
 msgid "Discard all custom changes"
 msgstr "Éliminer toutes les modifications personnalisées"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1375
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222
 msgid "Discard changes"
 msgstr "Annuler les modifications"
 
-#: src/slic3r/GUI/GUI_App.cpp:932 src/slic3r/GUI/Tab.cpp:2946
-msgid "Discard changes and continue anyway?"
-msgstr "Annuler les changements et continuer malgré tout ?"
-
-#: src/slic3r/GUI/Tab.cpp:2078
+#: src/slic3r/GUI/Tab.cpp:2248
 msgid "Display"
 msgstr "Afficher"
 
-#: src/libslic3r/PrintConfig.cpp:2359
+#: src/libslic3r/PrintConfig.cpp:2502
 msgid "Display height"
 msgstr "Hauteur de l'affichage"
 
-#: src/libslic3r/PrintConfig.cpp:2378
+#: src/libslic3r/PrintConfig.cpp:2521
 msgid "Display horizontal mirroring"
 msgstr "Afficher la symétrie horizontale"
 
-#: src/libslic3r/PrintConfig.cpp:2392
+#: src/libslic3r/PrintConfig.cpp:2535
 msgid "Display orientation"
 msgstr "Orientation de l'affichage"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Display the Print Host Upload Queue window"
 msgstr "Afficher la fenêtre de la File d'Attente de Téléchargement de l'Hôte d'Impression"
 
-#: src/libslic3r/PrintConfig.cpp:2385
+#: src/libslic3r/PrintConfig.cpp:2528
 msgid "Display vertical mirroring"
 msgstr "Afficher la symétrie verticale"
 
-#: src/libslic3r/PrintConfig.cpp:2353
+#: src/libslic3r/PrintConfig.cpp:2496
 msgid "Display width"
 msgstr "Largeur de l'affichage"
 
-#: src/libslic3r/PrintConfig.cpp:377
+#: src/libslic3r/PrintConfig.cpp:411
 msgid "Distance between copies"
 msgstr "Distance entre les copies"
 
-#: src/libslic3r/PrintConfig.cpp:1680
+#: src/libslic3r/PrintConfig.cpp:1157
+msgid "Distance between ironing lines"
+msgstr "Distance entre les lignes de lissage"
+
+#: src/libslic3r/PrintConfig.cpp:1788
 msgid "Distance between skirt and object(s). Set this to zero to attach the skirt to the object(s) and get a brim for better adhesion."
 msgstr "Distance entre le ou les objet(s) et la jupe. Mettez zéro pour attacher la jupe a(ux) objet(s) et obtenir une bordure pour une meilleure adhésion."
 
-#: src/libslic3r/PrintConfig.cpp:2882
+#: src/libslic3r/PrintConfig.cpp:3046
 msgid "Distance between two connector sticks which connect the object and the generated pad."
 msgstr "La distance entre deux bâtonnets de connexion qui connectent l'objet et le socle généré."
 
-#: src/libslic3r/PrintConfig.cpp:1679
+#: src/libslic3r/PrintConfig.cpp:1787
 msgid "Distance from object"
 msgstr "Distance de l'objet"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:85
+#: src/slic3r/GUI/BedShapeDialog.cpp:121
 msgid "Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."
 msgstr "Distance des coordonnées 0,0 du G-code depuis le coin avant gauche du rectangle."
 
-#: src/libslic3r/PrintConfig.cpp:320
+#: src/libslic3r/PrintConfig.cpp:354
 msgid "Distance of the center-point of the cooling tube from the extruder tip."
 msgstr "Distance entre le point central du tube de refroidissement et la pointe de l'extrudeur."
 
-#: src/libslic3r/PrintConfig.cpp:1382
+#: src/libslic3r/PrintConfig.cpp:1490
 msgid "Distance of the extruder tip from the position where the filament is parked when unloaded. This should match the value in printer firmware."
 msgstr "Distance entre la pointe de l'extrudeur et la position où le filament est positionné en attente lorsqu'il est déchargé. Cela doit correspondre à la valeur dans le firmware de l'imprimante."
 
-#: src/libslic3r/PrintConfig.cpp:378
+#: src/libslic3r/PrintConfig.cpp:412
 msgid "Distance used for the auto-arrange feature of the plater."
 msgstr "Distance utilisée par la fonction d'agencement automatique du plateau."
 
-#: src/libslic3r/PrintConfig.cpp:3486
+#: src/libslic3r/PrintConfig.cpp:3685
 msgid "Do not fail if a file supplied to --load does not exist."
 msgstr "Ne pas obtenir d'échec si un fichier fourni pour --télécharger n'existe pas."
 
-#: src/libslic3r/PrintConfig.cpp:3430
+#: src/libslic3r/PrintConfig.cpp:3629
 msgid "Do not rearrange the given models before merging and keep their original XY coordinates."
 msgstr "Ne pas ré-agencer les modèles donnés avant la fusion et conserver leurs coordonnées XY originales."
 
-#: src/slic3r/GUI/Field.cpp:240
+#: src/slic3r/GUI/Field.cpp:288
 #, c-format
 msgid ""
 "Do you mean %s%% instead of %s %s?\n"
@@ -2058,31 +2358,35 @@ msgstr ""
 "Sélectionnez OUI si vous voulez changer cette valeur pour %s%%,\n"
 "ou NON si vous êtes certain que %s%s est une valeur correcte."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1920
+#: src/slic3r/GUI/DoubleSlider.cpp:2138
 msgid "Do you want to delete all saved tool changes?"
 msgstr "Voulez-vous supprimer tous les changements d'outils enregistrés ?"
 
-#: src/slic3r/GUI/GUI_App.cpp:884
+#: src/slic3r/GUI/GUI_App.cpp:1610
 msgid "Do you want to proceed?"
 msgstr "Voulez-vous poursuivre?"
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "Do you want to retry"
 msgstr "Voulez-vous réessayer"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1045
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:911
 msgid "Do you want to save your manually edited support points?"
 msgstr "Voulez-vous sauvegarder vos points de support édités manuellement ?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1834
+#: src/slic3r/GUI/ConfigWizard.cpp:2261
 msgid "Do you want to select default filaments for these FFF printer models?"
 msgstr "Voulez-vous sélectionner les filaments par défaut pour ces modèles d'imprimantes FFF ?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1852
+#: src/slic3r/GUI/ConfigWizard.cpp:2279
 msgid "Do you want to select default SLA materials for these printer models?"
 msgstr "Voulez-vous sélectionner les matériaux SLA par défaut pour ces modèles d'imprimantes ?"
 
-#: src/libslic3r/PrintConfig.cpp:3429
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "does not contain valid gcode."
+msgstr "ne contient pas de gcode valide."
+
+#: src/libslic3r/PrintConfig.cpp:3628
 msgid "Don't arrange"
 msgstr "Ne pas agencer"
 
@@ -2090,7 +2394,7 @@ msgstr "Ne pas agencer"
 msgid "Don't notify about new releases any more"
 msgstr "Ne plus me notifier au sujet des nouvelles publications"
 
-#: src/libslic3r/PrintConfig.cpp:369
+#: src/libslic3r/PrintConfig.cpp:403
 msgid "Don't support bridges"
 msgstr "Ne pas supporter les ponts"
 
@@ -2098,234 +2402,296 @@ msgstr "Ne pas supporter les ponts"
 msgid "Downgrade"
 msgstr "Rétrograder"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1803
 msgid "Draft shield"
 msgstr "Bouclier contre les flux d'air"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Drag"
 msgstr "Faites glisser"
 
-#: src/libslic3r/SLAPrintSteps.cpp:44
+#: src/slic3r/GUI/Plater.cpp:1406
+msgid "Drag and drop G-code file"
+msgstr "Glisser et déposer un fichier G-code"
+
+#: src/libslic3r/SLAPrintSteps.cpp:45
 msgid "Drilling holes into model."
 msgstr "Perçage de trous dans le modèle."
 
-#: src/libslic3r/SLAPrintSteps.cpp:199
+#: src/libslic3r/SLAPrintSteps.cpp:201
 msgid "Drilling holes into the mesh failed. This is usually caused by broken model. Try to fix it first."
 msgstr "Le perçage des trous dans le maillage a échoué. Cela est généralement dû à un modèle cassé. Essayez de le réparer en premier."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:337
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:349
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:345
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357
 msgid "Drop to bed"
 msgstr "Déposer sur le lit"
 
-#: src/libslic3r/PrintConfig.cpp:3433
+#: src/libslic3r/PrintConfig.cpp:3632
 msgid "Duplicate"
 msgstr "Dupliquer"
 
-#: src/libslic3r/PrintConfig.cpp:3438
+#: src/libslic3r/PrintConfig.cpp:3637
 msgid "Duplicate by grid"
 msgstr "Dupliquer par grille"
 
-#: src/slic3r/GUI/PresetHints.cpp:40
+#: src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Duration"
+msgstr "Durée"
+
+#: src/slic3r/GUI/PresetHints.cpp:39
 msgid "During the other layers, fan"
 msgstr "Pendant les autres couches, le ventilateur"
 
-#: src/libslic3r/PrintConfig.cpp:2669
+#: src/libslic3r/PrintConfig.cpp:2833
 msgid "Dynamic"
 msgstr "Dynamique"
 
-#: src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1448
 msgid "E&xport"
 msgstr "E&xporter"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:347
+#: src/slic3r/GUI/GUI_ObjectList.cpp:394
 msgid "edges fixed"
 msgstr "arrêtes corrigées"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1508
+#: src/slic3r/GUI/DoubleSlider.cpp:1700
 msgid "Edit color"
 msgstr "Éditer la couleur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:960
+#: src/slic3r/GUI/DoubleSlider.cpp:1083
 msgid "Edit current color - Right click the colored slider segment"
 msgstr "Modifier la couleur actuelle - Cliquez avec le bouton droit sur le segment de curseur de couleur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1510
+#: src/slic3r/GUI/DoubleSlider.cpp:1702
 msgid "Edit custom G-code"
 msgstr "Éditer un G-code personnalisé"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3003
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3459
 msgid "Edit Height Range"
 msgstr "Éditer la Zone de Hauteur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1509
+#: src/slic3r/GUI/DoubleSlider.cpp:1701
 msgid "Edit pause print message"
 msgstr "Modifier le message de pause d'impression"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1037
+#: src/slic3r/GUI/PresetComboBoxes.cpp:645
+msgid "Edit physical printer"
+msgstr "Modifier l'imprimante physique"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:641
+msgid "Edit preset"
+msgstr "Modifier le préréglage"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1162
 msgid "Edit tick mark - Ctrl + Left click"
 msgstr "Modifier la coche - Ctrl + Clic gauche"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1038
+#: src/slic3r/GUI/DoubleSlider.cpp:1163
 msgid "Edit tick mark - Right click"
 msgstr "Modifier la coche - Clic droit"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:282 src/slic3r/GUI/GUI_ObjectList.cpp:394
+#: src/slic3r/GUI/GUI_ObjectList.cpp:300 src/slic3r/GUI/GUI_ObjectList.cpp:441
 msgid "Editing"
 msgstr "Édition"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Ejec&t SD card / Flash drive"
 msgstr "Éjec&ter la carte SD / la clef USB"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/NotificationManager.cpp:780
+msgid "Eject drive"
+msgstr "Éjecter le lecteur"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
 msgid "Eject SD card / Flash drive"
 msgstr "Éjecter la carte SD / la clef USB"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Eject SD card / Flash drive after the G-code was exported to it."
 msgstr "Éjecter la carte SD / la clef USB une fois que la G-code y a été exporté."
 
-#: src/slic3r/GUI/Plater.cpp:2202
+#: src/slic3r/GUI/Plater.cpp:2034
 #, c-format
 msgid "Ejecting of device %s(%s) has failed."
 msgstr "L'éjection de l'appareil %s(%s) a échoué."
 
-#: src/libslic3r/PrintConfig.cpp:118
+#: src/libslic3r/PrintConfig.cpp:120
 msgid "Elephant foot compensation"
 msgstr "Compensation de l'effet patte d'éléphant"
 
-#: src/libslic3r/PrintConfig.cpp:2447
+#: src/libslic3r/PrintConfig.cpp:2590
 msgid "Elephant foot minimum width"
 msgstr "Largeur minimum du pied d'éléphant"
 
-#: src/libslic3r/SLAPrint.cpp:625
+#: src/libslic3r/SLAPrint.cpp:639
 msgid "Elevation is too low for object. Use the \"Pad around object\" feature to print the object without elevation."
 msgstr "L'Élévation est trop basse pour cet objet. utilisez la fonction \"Socle autour de l'objet\" pour imprimer l'objet sans élévation."
 
-#: src/libslic3r/PrintConfig.cpp:1093
+#: src/libslic3r/PrintConfig.cpp:1186
 msgid "Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute intervals into the G-code to let the firmware show accurate remaining time. As of now only the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 firmware supports M73 Qxx Sxx for the silent mode."
 msgstr "Émet M73 P[pourcentage imprimé] R[temps restant en minutes] à 1 minute d'intervalle dans le G-code afin que le firmware puisse indiquer précisément le temps restant. Jusqu'à présent seul le firmware Prusa i3 MK3 reconnait M73. Par ailleurs le firmware i3 MK3 supporte M73 Qxx Sxx pour le mode silencieux."
 
-#: src/libslic3r/GCode.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1217
+msgid "Emit to G-code"
+msgstr "Émettre en G-code"
+
+#: src/libslic3r/GCode.cpp:622
 msgid "Empty layers detected, the output would not be printable."
 msgstr "Couches vides détectées, la sortie ne serait pas imprimable."
 
-#: src/slic3r/GUI/Tab.cpp:1445 src/libslic3r/PrintConfig.cpp:1355
-#: src/libslic3r/PrintConfig.cpp:2200
+#: src/slic3r/GUI/Tab.cpp:1791 src/libslic3r/PrintConfig.cpp:1463
+#: src/libslic3r/PrintConfig.cpp:2343
 msgid "Enable"
 msgstr "Activer"
 
-#: src/libslic3r/PrintConfig.cpp:313
+#: src/libslic3r/PrintConfig.cpp:347
 msgid "Enable auto cooling"
 msgstr "Activer le refroidissement automatique"
 
-#: src/libslic3r/PrintConfig.cpp:572
+#: src/libslic3r/PrintConfig.cpp:608
 msgid "Enable fan if layer print time is below"
 msgstr "Activer le ventilateur si le temps d'impression de la couche est inférieur à"
 
-#: src/libslic3r/PrintConfig.cpp:2908
+#: src/libslic3r/PrintConfig.cpp:3072
 msgid "Enable hollowing"
 msgstr "Activer l'évidement"
 
-#: src/libslic3r/PrintConfig.cpp:2380
+#: src/libslic3r/PrintConfig.cpp:2523
 msgid "Enable horizontal mirroring of output images"
 msgstr "Active la symétrie horizontale des images de sortie"
 
-#: src/libslic3r/PrintConfig.cpp:1867
+#: src/libslic3r/PrintConfig.cpp:1124
+msgid "Enable ironing"
+msgstr "Activer le lissage"
+
+#: src/libslic3r/PrintConfig.cpp:1125
+msgid "Enable ironing of the top layers with the hot print head for smooth surface"
+msgstr "Activer le lissage des couches supérieures avec la tête d'impression chaude pour une surface lisse"
+
+#: src/libslic3r/PrintConfig.cpp:2009
 msgid "Enable support material generation."
 msgstr "Activer la génération des supports."
 
-#: src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1010
 msgid "Enable this to add comments into the G-Code labeling print moves with what object they belong to, which is useful for the Octoprint CancelObject plugin. This settings is NOT compatible with Single Extruder Multi Material setup and Wipe into Object / Wipe into Infill."
 msgstr "Activez cette option pour ajouter des commentaires dans le G-code afin d'identifier les mouvements d'impression avec l'objet concerné. Cela est utile pour le plugin Octoprint CancelObject. Ce paramètre n'est PAS compatible avec la configuration mono-extrudeur multi-matériaux ni avec la configuration Nettoyer dans l'objet ou Nettoyer dans le remplissage."
 
-#: src/libslic3r/PrintConfig.cpp:929
+#: src/libslic3r/PrintConfig.cpp:973
 msgid "Enable this to get a commented G-code file, with each line explained by a descriptive text. If you print from SD card, the additional weight of the file could make your firmware slow down."
 msgstr "Activez ceci pour obtenir un fichier G-code commenté, avec chaque ligne expliquée par un texte descriptif. Si vous imprimez depuis une carte SD, le poids supplémentaire du fichier pourrait ralentir le firmware de votre imprimante."
 
-#: src/libslic3r/PrintConfig.cpp:2186
+#: src/libslic3r/PrintConfig.cpp:2329
 msgid "Enable variable layer height feature"
 msgstr "Activer la fonction de hauteur de couche variable"
 
-#: src/libslic3r/PrintConfig.cpp:2387
+#: src/libslic3r/PrintConfig.cpp:2530
 msgid "Enable vertical mirroring of output images"
 msgstr "Activer la symétrie verticale des images de sortie"
 
-#: src/slic3r/GUI/Tab.cpp:1534 src/slic3r/GUI/Tab.cpp:1982
-#: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395
+#: src/slic3r/GUI/Tab.cpp:1880 src/slic3r/GUI/Tab.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:419 src/libslic3r/PrintConfig.cpp:429
 msgid "End G-code"
 msgstr "G-code de fin"
 
-#: src/libslic3r/PrintConfig.cpp:1924
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:239
+msgid "Enforce"
+msgstr "Forcer"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:30
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:381
+msgid "Enforce seam"
+msgstr "Forcer la jointure"
+
+#: src/libslic3r/PrintConfig.cpp:2066
 msgid "Enforce support for the first"
 msgstr "Générer des supports sur le(s) première(s)"
 
-#: src/libslic3r/PrintConfig.cpp:1931
+#: src/libslic3r/PrintConfig.cpp:2073
 msgid "Enforce support for the first n layers"
 msgstr "Générer des supports sur les n premières couches"
 
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:47
+msgid "Enforce supports"
+msgstr "Forcer les supports"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:198
 #: src/slic3r/GUI/PrintHostDialogs.cpp:229
 msgid "Enqueued"
 msgstr "Placé dans la file d'attente"
 
-#: src/libslic3r/PrintConfig.cpp:407
+#: src/libslic3r/PrintConfig.cpp:441
 msgid "Ensure vertical shell thickness"
 msgstr "S'assurer de l'épaisseur de la coque verticale"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1618
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4410
+#: src/slic3r/GUI/Search.cpp:433
+msgid "Enter a search term"
+msgstr "Entrer un terme de recherche"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1814
 msgid "Enter custom G-code used on current layer"
 msgstr "Entrez le G-code personnalisé utilisé sur la couche actuelle"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Enter new name"
 msgstr "Entrer de nouveaux noms"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1634
+#: src/slic3r/GUI/DoubleSlider.cpp:1830
 msgid "Enter short message shown on Printer display when a print is paused"
 msgstr "Entrez un court message affiché sur l'écran de l'imprimante lorsqu'une impression est mise en pause"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1047
+#: src/slic3r/GUI/ConfigWizard.cpp:1413
 msgid "Enter the bed temperature needed for getting your filament to stick to your heated bed."
 msgstr "Entrez la température du lit nécessaire pour que votre filament colle à votre lit chauffant."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:979
+#: src/slic3r/GUI/ConfigWizard.cpp:1345
 msgid "Enter the diameter of your filament."
 msgstr "Entrez le diamètre de votre filament."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:966
+#: src/slic3r/GUI/ConfigWizard.cpp:1332
 msgid "Enter the diameter of your printer's hot end nozzle."
 msgstr "Entrez le diamètre de la buse de la tête d'impression de votre imprimante."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1650
+#: src/slic3r/GUI/DoubleSlider.cpp:1851 src/slic3r/GUI/DoubleSlider.cpp:1855
 msgid "Enter the height you want to jump to"
 msgstr "Entrez la hauteur à laquelle vous souhaitez sauter"
 
-#: src/slic3r/GUI/Plater.cpp:4751
+#: src/slic3r/GUI/DoubleSlider.cpp:1851
+msgid "Enter the move you want to jump to"
+msgstr "Entrez le mouvement auquel vous souhaitez accéder"
+
+#: src/slic3r/GUI/Plater.cpp:4855
 msgid "Enter the number of copies:"
 msgstr "Saisissez le nombre de copies :"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1033
+#: src/slic3r/GUI/ConfigWizard.cpp:1399
 msgid "Enter the temperature needed for extruding your filament."
 msgstr "Entrez la température nécessaire pour extruder votre filament."
 
-#: src/libslic3r/PrintConfig.cpp:761
+#: src/libslic3r/PrintConfig.cpp:797
 msgid "Enter your filament cost per kg here. This is only for statistical information."
 msgstr "Entrez le coût par Kg de votre filament. Ceci est uniquement pour l'information statistique."
 
-#: src/libslic3r/PrintConfig.cpp:718
+#: src/libslic3r/PrintConfig.cpp:754
 msgid "Enter your filament density here. This is only for statistical information. A decent way is to weigh a known length of filament and compute the ratio of the length to volume. Better is to calculate the volume directly through displacement."
 msgstr "Entrez ici la densité de votre filament. Ceci est uniquement pour des informations statistiques. Un bon moyen d'obtenir cette valeur est de peser un morceau de filament d'une longueur connue et de calculer le rapport de sa longueur par son poids. Le mieux est de calculer le volume directement par déplacement."
 
-#: src/libslic3r/PrintConfig.cpp:710
+#: src/libslic3r/PrintConfig.cpp:746
 msgid "Enter your filament diameter here. Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
 msgstr "Entrez le diamètre de votre filament ici. Une bonne précision est requise, utilisez un pied à coulisse et calculez la moyenne de plusieurs mesures le long du filament."
 
-#: src/slic3r/GUI/MainFrame.cpp:422 src/slic3r/GUI/MainFrame.cpp:785
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:39
+msgid "Entering Paint-on supports"
+msgstr "Accès aux Supports peints"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:40
+msgid "Entering Seam painting"
+msgstr "Accès à la peinture de jointure"
+
+#: src/slic3r/GUI/MainFrame.cpp:1003 src/slic3r/GUI/MainFrame.cpp:1486
 #: src/slic3r/GUI/PrintHostDialogs.cpp:231
 msgid "Error"
 msgstr "Erreur"
@@ -2335,25 +2701,33 @@ msgstr "Erreur"
 msgid "Error accessing port at %s: %s"
 msgstr "Erreur d'accès au port sur %s : %s"
 
-#: src/slic3r/GUI/Plater.cpp:3433
+#: src/slic3r/GUI/Plater.cpp:3238
 msgid "Error during reload"
 msgstr "Erreur lors du rechargement"
 
-#: src/slic3r/GUI/Plater.cpp:5043
+#: src/slic3r/GUI/Plater.cpp:5172
 #, c-format
 msgid "Error exporting 3MF file %s"
 msgstr "Erreur d'export du fichier 3MF %s"
 
-#: src/slic3r/GUI/Plater.cpp:5005
+#: src/slic3r/GUI/Plater.cpp:5138
 #, c-format
 msgid "Error exporting AMF file %s"
 msgstr "Erreur d'export du fichier AMF %s"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:154
+#: src/slic3r/GUI/OpenGLManager.cpp:276
+msgid "Error loading shaders"
+msgstr "Erreur lors du chargement des shaders"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:152
 msgid "Error Message"
 msgstr "Message d'erreur"
 
-#: src/slic3r/GUI/AppConfig.cpp:114
+#: src/slic3r/GUI/GUI_App.cpp:661
+msgid "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to manually delete the file to recover from the error."
+msgstr "Erreur lors de l'analyse du fichier de configuration de PrusaGCodeViewer, il est probablement corrompu. Essayez de supprimer manuellement le fichier pour corriger l'erreur."
+
+#: src/slic3r/GUI/GUI_App.cpp:655 src/slic3r/GUI/GUI_App.cpp:670
 msgid "Error parsing PrusaSlicer config file, it is probably corrupted. Try to manually delete the file to recover from the error. Your user profiles will not be affected."
 msgstr "Erreur d'analyse du fichier config PrusaSlicer, il est probablement corrompu. Essayez de supprimer manuellement le fichier pour récupérer après cette erreur. Vos profils d'utilisateurs ne seront pas affectés."
 
@@ -2361,45 +2735,60 @@ msgstr "Erreur d'analyse du fichier config PrusaSlicer, il est probablement corr
 msgid "Error uploading to print host:"
 msgstr "Erreur lors du téléchargement vers l'hôte d'impression :"
 
-#: src/libslic3r/Zipper.cpp:102
+#: src/slic3r/GUI/Plater.cpp:4752
+msgid "Error while loading .gcode file"
+msgstr "Erreur lors du chargement du fichier .gcode"
+
+#: src/libslic3r/Zipper.cpp:27
 msgid "Error with zip archive"
 msgstr "Erreur liée à l'archive zip"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1918
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2077
 msgid "Error!"
 msgstr "Erreur!"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:505
+#: src/slic3r/GUI/BedShapeDialog.cpp:581
 msgid "Error! Invalid model"
 msgstr "Erreur ! Modèle invalide"
 
+#: src/slic3r/GUI/NotificationManager.cpp:667
+#: src/slic3r/GUI/NotificationManager.cpp:683
+#: src/slic3r/GUI/NotificationManager.cpp:694
+msgid "ERROR:"
+msgstr "ERREUR :"
+
 #: src/slic3r/GUI/FirmwareDialog.cpp:647
 #, c-format
 msgid "Error: %s"
 msgstr "Erreur : %s"
 
-#: src/slic3r/GUI/Job.hpp:123
+#: src/slic3r/GUI/Jobs/Job.cpp:74
 msgid "ERROR: not enough resources to execute a new job."
 msgstr "ERREUR : il n'y a pas assez de ressources pour exécuter une nouvelle tâche."
 
-#: src/slic3r/GUI/Plater.cpp:240 src/slic3r/GUI/Plater.cpp:1216
-#: src/slic3r/GUI/Plater.cpp:1258
+#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
+#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
+#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
 msgid "Estimated printing time"
 msgstr "Temps d'impression estimé"
 
-#: src/slic3r/GUI/Plater.cpp:502
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Event"
+msgstr "Événement"
+
+#: src/slic3r/GUI/Plater.cpp:368
 msgid "Everywhere"
 msgstr "Partout"
 
-#: src/slic3r/GUI/PresetHints.cpp:51
+#: src/slic3r/GUI/PresetHints.cpp:50
 msgid "except for the first %1% layers."
 msgstr "sauf pour les %1% première couches."
 
-#: src/slic3r/GUI/PresetHints.cpp:53
+#: src/slic3r/GUI/PresetHints.cpp:52
 msgid "except for the first layer."
 msgstr "sauf pour la première couche."
 
-#: src/libslic3r/Print.cpp:1377
+#: src/libslic3r/Print.cpp:1403
 msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm"
 msgstr "Dépasse de %1%=%2% mm pour être imprimable avec une buse de diamètre %3% mm"
 
@@ -2408,116 +2797,129 @@ msgstr "Dépasse de %1%=%2% mm pour être imprimable avec une buse de diamètre
 msgid "Exit %s"
 msgstr "Sortir de %s"
 
-#: src/libslic3r/PrintConfig.cpp:371
+#: src/slic3r/GUI/Plater.cpp:2143
+msgid "Expand sidebar"
+msgstr "Développer la barre latérale"
+
+#: src/libslic3r/PrintConfig.cpp:405
 msgid "Experimental option for preventing support material from being generated under bridged areas."
 msgstr "Option expérimentale pour empêcher la génération de support sous les ponts."
 
-#: src/libslic3r/PrintConfig.cpp:1375
+#: src/libslic3r/PrintConfig.cpp:1483
 msgid "Experimental option to adjust flow for overhangs (bridge flow will be used), to apply bridge speed to them and enable fan."
 msgstr "Option expérimentale qui ajuste le flux pour les surplombs (le flux pour les ponts sera utilisé), leur applique la vitesse pour les ponts et active le ventilateur."
 
-#: src/slic3r/GUI/GUI_App.cpp:815 src/slic3r/GUI/wxExtensions.cpp:755
+#: src/slic3r/GUI/GUI_App.cpp:1507 src/slic3r/GUI/wxExtensions.cpp:676
 msgid "Expert"
 msgstr "Expert"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:822
+#: src/slic3r/GUI/ConfigWizard.cpp:1181
 msgid "Expert mode"
 msgstr "Mode expert"
 
-#: src/slic3r/GUI/GUI_App.cpp:815
+#: src/slic3r/GUI/GUI_App.cpp:1507
 msgid "Expert View Mode"
 msgstr "Mode de Vue Expert"
 
-#: src/slic3r/GUI/Plater.cpp:5521
+#: src/slic3r/GUI/Plater.cpp:5706
 msgid "Export"
 msgstr "Exporter"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export &Config"
 msgstr "Exporter la &Configuration"
 
-#: src/slic3r/GUI/MainFrame.cpp:477 src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1068 src/slic3r/GUI/MainFrame.cpp:1448
 msgid "Export &G-code"
 msgstr "Exporter le &G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export &toolpaths as OBJ"
 msgstr "Exporter les parcours en &tant que OBJ"
 
-#: src/libslic3r/PrintConfig.cpp:3338
+#: src/libslic3r/PrintConfig.cpp:3531
 msgid "Export 3MF"
 msgstr "Exporter 3MF"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export all presets including physical printers to file"
+msgstr "Exporter tous les préréglage y compris les imprimantes physiques vers un fichier"
+
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export all presets to file"
 msgstr "Exporter tous les préréglage vers un fichier"
 
-#: src/libslic3r/PrintConfig.cpp:3343
+#: src/libslic3r/PrintConfig.cpp:3536
 msgid "Export AMF"
 msgstr "Exporter AMF"
 
-#: src/slic3r/GUI/Plater.cpp:2598
+#: src/slic3r/GUI/Plater.cpp:2560
 msgid "Export AMF file:"
 msgstr "Exporter le fichier AMF :"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1657 src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3884
 msgid "Export as STL"
 msgstr "Exporter en tant que STL"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:117
 msgid "Export config"
 msgstr "Exporter la configuration"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export Config &Bundle"
 msgstr "Exporter le &Lot de Configuration"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export Config Bundle With Physical Printers"
+msgstr "Exporter le Lot de Configurations Avec les Imprimantes Physiques"
+
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export current configuration to file"
 msgstr "Exporter la configuration actuelle vers un fichier"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export current plate as AMF"
 msgstr "Exporter le plateau courant en AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:477
+#: src/slic3r/GUI/MainFrame.cpp:1068
 msgid "Export current plate as G-code"
 msgstr "Exporter le plateau courant en G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export current plate as G-code to SD card / Flash drive"
 msgstr "Exporter le plateau actuel en tant que G-code vers la carte SD / la clef USB"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export current plate as STL"
 msgstr "Exporter le plateau courant en STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export current plate as STL including supports"
 msgstr "Exporter le contenu du plateau en STL, supports inclus"
 
-#: src/slic3r/GUI/Plater.cpp:3664
-msgid "Export failed"
-msgstr "L'export a échoué"
-
-#: src/slic3r/GUI/ConfigWizard.cpp:801
+#: src/slic3r/GUI/ConfigWizard.cpp:1160
 msgid "Export full pathnames of models and parts sources into 3mf and amf files"
 msgstr "Exportez les chemins d'accès complets des modèles et des sources de pièces dans des fichiers 3mf et amf"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:891
-#: src/slic3r/GUI/Plater.cpp:5521 src/libslic3r/PrintConfig.cpp:3353
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 src/slic3r/GUI/Plater.cpp:766
+#: src/slic3r/GUI/Plater.cpp:5706 src/libslic3r/PrintConfig.cpp:3546
 msgid "Export G-code"
 msgstr "Exporter le G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export G-code to SD card / Flash drive"
 msgstr "Exporter le G-code vers la carte SD / la clef USB"
 
-#: src/libslic3r/PrintConfig.cpp:3320
+#: src/slic3r/GUI/NotificationManager.cpp:631
+#: src/slic3r/GUI/NotificationManager.cpp:748
+msgid "Export G-Code."
+msgstr "Exporter le G-code."
+
+#: src/libslic3r/PrintConfig.cpp:3513
 msgid "Export OBJ"
 msgstr "Exporter OBJ"
 
-#: src/slic3r/GUI/Plater.cpp:2610
+#: src/slic3r/GUI/Plater.cpp:2572
 msgid "Export OBJ file:"
 msgstr "Exporter le fichier OBJ :"
 
@@ -2525,212 +2927,215 @@ msgstr "Exporter le fichier OBJ :"
 msgid "Export of a temporary 3mf file failed"
 msgstr "Exporter un fichier temporaire 3mf qui a échoué"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export plate as &AMF"
 msgstr "Exporter le plateau en tant que &AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export plate as &STL"
-msgstr "Exporter le plateau en tant que &STL"
+msgstr "Exporter le plateau au format &STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export plate as STL &including supports"
 msgstr "Exporter le plateau en STL en &incluant les supports"
 
-#: src/libslic3r/PrintConfig.cpp:3332
+#: src/libslic3r/PrintConfig.cpp:3525
 msgid "Export SLA"
 msgstr "Exporter SLA"
 
-#: src/slic3r/GUI/Preferences.cpp:72
+#: src/slic3r/GUI/Preferences.cpp:89
 msgid "Export sources full pathnames to 3mf and amf"
 msgstr "Exporter les noms de chemins complets des sources vers 3mf et amf"
 
-#: src/libslic3r/PrintConfig.cpp:3348
+#: src/libslic3r/PrintConfig.cpp:3541
 msgid "Export STL"
 msgstr "Exporter STL"
 
-#: src/slic3r/GUI/Plater.cpp:2591
+#: src/slic3r/GUI/Plater.cpp:2553
 msgid "Export STL file:"
 msgstr "Exporter le fichier STL :"
 
-#: src/libslic3r/PrintConfig.cpp:3339
+#: src/libslic3r/PrintConfig.cpp:3532
 msgid "Export the model(s) as 3MF."
 msgstr "Exporter le(s) modèle(s) en tant que 3MF."
 
-#: src/libslic3r/PrintConfig.cpp:3344
+#: src/libslic3r/PrintConfig.cpp:3537
 msgid "Export the model(s) as AMF."
 msgstr "Exporter le(s) modèle(s) en tant que AMF."
 
-#: src/libslic3r/PrintConfig.cpp:3321
+#: src/libslic3r/PrintConfig.cpp:3514
 msgid "Export the model(s) as OBJ."
 msgstr "Exporter le(s) modèle(s) en tant que OBJ."
 
-#: src/libslic3r/PrintConfig.cpp:3349
+#: src/libslic3r/PrintConfig.cpp:3542
 msgid "Export the model(s) as STL."
 msgstr "Exporter le(s) modèle(s) en tant que STL."
 
-#: src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/Plater.cpp:3884
 msgid "Export the selected object as STL file"
 msgstr "Exporter l'objet sélectionné en tant que fichier STL"
 
-#: src/slic3r/GUI/Plater.cpp:880
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 src/slic3r/GUI/Plater.cpp:755
 msgid "Export to SD card / Flash drive"
 msgstr "Exporter vers une carte SD / une clé USB"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export toolpaths as OBJ"
 msgstr "Exporter le parcours en tant que OBJ"
 
-#: src/libslic3r/Print.cpp:1638
+#: src/slic3r/GUI/NotificationManager.hpp:317
+msgid "Exporting finished."
+msgstr "Exportation terminée."
+
+#: src/libslic3r/Print.cpp:1676
 msgid "Exporting G-code"
 msgstr "Exportation du G-code"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:341
-msgid "Exporting model..."
-msgstr "Exportation du modèle ..."
+msgid "Exporting model"
+msgstr "Exportation du modèle"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:219
 #: src/slic3r/Utils/FixModelByWin10.cpp:359
 msgid "Exporting source model"
 msgstr "Exportation du modèle source"
 
-#: src/libslic3r/SLAPrint.cpp:646
+#: src/libslic3r/SLAPrint.cpp:660
 msgid "Exposition time is out of printer profile bounds."
 msgstr "Le temps d'exposition dépasse les limites du profil d'imprimante."
 
-#: src/slic3r/GUI/Tab.cpp:2117 src/slic3r/GUI/Tab.cpp:3515
+#: src/slic3r/GUI/Tab.cpp:2287 src/slic3r/GUI/Tab.cpp:3931
 msgid "Exposure"
 msgstr "Exposition"
 
-#: src/libslic3r/PrintConfig.cpp:2541 src/libslic3r/PrintConfig.cpp:2542
+#: src/libslic3r/PrintConfig.cpp:2684 src/libslic3r/PrintConfig.cpp:2685
 msgid "Exposure time"
 msgstr "Temps d'exposition"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:311
+#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:315
+#: src/libslic3r/ExtrusionEntity.cpp:338
 msgid "External perimeter"
 msgstr "Périmètre externe"
 
-#: src/slic3r/GUI/PresetHints.cpp:156
+#: src/slic3r/GUI/PresetHints.cpp:155
 msgid "external perimeters"
 msgstr "périmètres externes"
 
-#: src/libslic3r/PrintConfig.cpp:446 src/libslic3r/PrintConfig.cpp:457
+#: src/libslic3r/PrintConfig.cpp:482 src/libslic3r/PrintConfig.cpp:493
 msgid "External perimeters"
 msgstr "Périmètres externes"
 
-#: src/libslic3r/PrintConfig.cpp:469
+#: src/libslic3r/PrintConfig.cpp:505
 msgid "External perimeters first"
 msgstr "Périmètres externes en premier"
 
-#: src/libslic3r/PrintConfig.cpp:1588 src/libslic3r/PrintConfig.cpp:1596
+#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1704
 msgid "Extra length on restart"
 msgstr "Longueur supplémentaire à la reprise"
 
-#: src/libslic3r/PrintConfig.cpp:1390
+#: src/libslic3r/PrintConfig.cpp:1498
 msgid "Extra loading distance"
 msgstr "Distance de chargement supplémentaire"
 
-#: src/libslic3r/PrintConfig.cpp:477
+#: src/libslic3r/PrintConfig.cpp:513
 msgid "Extra perimeters if needed"
 msgstr "Périmètres supplémentaires si nécessaire"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:278 src/slic3r/GUI/Tab.cpp:1434
-#: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487
+#: src/slic3r/GUI/GCodeViewer.cpp:2277 src/slic3r/GUI/GCodeViewer.cpp:2313
+#: src/slic3r/GUI/GCodeViewer.cpp:2318 src/slic3r/GUI/GUI_ObjectList.cpp:296
+#: src/slic3r/GUI/Tab.cpp:1780 src/slic3r/GUI/wxExtensions.cpp:515
+#: src/libslic3r/PrintConfig.cpp:523
 msgid "Extruder"
 msgstr "Extrudeur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1134 src/slic3r/GUI/DoubleSlider.cpp:1170
-#: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1704
-#: src/slic3r/GUI/Tab.cpp:2320 src/libslic3r/GCode/PreviewData.cpp:445
+#: src/slic3r/GUI/DoubleSlider.cpp:1263 src/slic3r/GUI/DoubleSlider.cpp:1297
+#: src/slic3r/GUI/GLCanvas3D.cpp:983 src/slic3r/GUI/GUI_ObjectList.cpp:1832
+#: src/slic3r/GUI/Tab.cpp:2489 src/libslic3r/GCode/PreviewData.cpp:450
 #, c-format
 msgid "Extruder %d"
 msgstr "Extrudeur %d"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1011
+#: src/slic3r/GUI/DoubleSlider.cpp:1137
 msgid "Extruder (tool) is changed to Extruder \"%1%\""
 msgstr "L'extrudeur (outil) est remplacée par l'extrudeur \"%1%\""
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
-msgid "Extruder and Bed Temperatures"
-msgstr "Températures de l'Extrudeur et du Lit"
-
 #: src/slic3r/GUI/WipeTowerDialog.cpp:255
 msgid "Extruder changed to"
 msgstr "Extrudeur changé à"
 
-#: src/slic3r/GUI/Tab.cpp:1233
+#: src/slic3r/GUI/Tab.cpp:1563
 msgid "Extruder clearance (mm)"
 msgstr "Dégagement de l'extrudeur (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:522
+#: src/libslic3r/PrintConfig.cpp:558
 msgid "Extruder Color"
 msgstr "Couleur de l'extrudeur"
 
-#: src/libslic3r/PrintConfig.cpp:529
+#: src/libslic3r/PrintConfig.cpp:565
 msgid "Extruder offset"
 msgstr "Décalage de l'extrudeur"
 
-#: src/libslic3r/PrintConfig.cpp:911
-msgid "Extruder temperature for first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output file."
-msgstr "Température de l’extrudeur pour la première couche. Si vous voulez contrôler manuellement la température au cours de l’impression, mettez à zéro pour désactiver les commandes de contrôle de température dans le fichier de sortie."
-
-#: src/libslic3r/PrintConfig.cpp:2065
-msgid "Extruder temperature for layers after the first one. Set this to zero to disable temperature control commands in the output."
-msgstr "Température de l'extrudeur pour les couches après la première. Mettez zéro pour désactiver les commandes de contrôle de la température dans le fichier de sortie."
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:617
-#: src/slic3r/GUI/Tab.cpp:1180 src/slic3r/GUI/Tab.cpp:1838
-#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002
-#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1737
-#: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1965
+#: src/slic3r/GUI/GUI_ObjectList.cpp:97 src/slic3r/GUI/GUI_ObjectList.cpp:656
+#: src/slic3r/GUI/Tab.cpp:1510 src/slic3r/GUI/Tab.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:524 src/libslic3r/PrintConfig.cpp:1046
+#: src/libslic3r/PrintConfig.cpp:1517 src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:2080 src/libslic3r/PrintConfig.cpp:2107
 msgid "Extruders"
 msgstr "Extrudeurs"
 
-#: src/libslic3r/PrintConfig.cpp:539
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1061
+msgid "Extruders count"
+msgstr "Nombre d'extrudeurs"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2493
+msgid "Extrusion"
+msgstr "Extrusion"
+
+#: src/libslic3r/PrintConfig.cpp:575
 msgid "Extrusion axis"
 msgstr "Axe d'extrusion"
 
-#: src/libslic3r/PrintConfig.cpp:545
+#: src/libslic3r/PrintConfig.cpp:581
 msgid "Extrusion multiplier"
 msgstr "Multiplicateur d'extrusion"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1037
+#: src/slic3r/GUI/ConfigWizard.cpp:1403
 msgid "Extrusion Temperature:"
 msgstr "Température d'Extrusion :"
 
-#: src/slic3r/GUI/Tab.cpp:1205
+#: src/slic3r/GUI/Tab.cpp:1535
 msgid "Extrusion width"
 msgstr "Largeur d'extrusion"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:618
-#: src/libslic3r/PrintConfig.cpp:447 src/libslic3r/PrintConfig.cpp:555
-#: src/libslic3r/PrintConfig.cpp:877 src/libslic3r/PrintConfig.cpp:1010
-#: src/libslic3r/PrintConfig.cpp:1418 src/libslic3r/PrintConfig.cpp:1757
-#: src/libslic3r/PrintConfig.cpp:1947 src/libslic3r/PrintConfig.cpp:2106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:657
+#: src/libslic3r/PrintConfig.cpp:483 src/libslic3r/PrintConfig.cpp:591
+#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1054
+#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1872
+#: src/libslic3r/PrintConfig.cpp:2089 src/libslic3r/PrintConfig.cpp:2249
 msgid "Extrusion Width"
 msgstr "Largeur d'Extrusion"
 
-#: src/slic3r/GUI/Plater.cpp:162
+#: src/slic3r/GUI/Plater.cpp:168
 msgid "Facets"
 msgstr "Faces"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:349
+#: src/slic3r/GUI/GUI_ObjectList.cpp:396
 msgid "facets added"
 msgstr "faces ajoutées"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:348
+#: src/slic3r/GUI/GUI_ObjectList.cpp:395
 msgid "facets removed"
 msgstr "faces supprimées"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:350
+#: src/slic3r/GUI/GUI_ObjectList.cpp:397
 msgid "facets reversed"
 msgstr "faces inversées"
 
-#: src/libslic3r/PrintConfig.cpp:2517
+#: src/libslic3r/PrintConfig.cpp:2660
 msgid "Faded layers"
 msgstr "Couches estompées"
 
-#: src/libslic3r/Zipper.cpp:44
+#: src/libslic3r/miniz_extension.cpp:103
 msgid "failed finding central directory"
 msgstr "impossible de trouver le répertoire central"
 
@@ -2738,105 +3143,115 @@ msgstr "impossible de trouver le répertoire central"
 msgid "Failed loading the input model."
 msgstr "Échec du chargement du modèle d'entrée."
 
-#: src/libslic3r/PrintBase.cpp:71
+#: src/libslic3r/PrintBase.cpp:72
 msgid "Failed processing of the output_filename_format template."
 msgstr "Échec du traitement du modèle output_filename_format."
 
-#: src/slic3r/GUI/PresetHints.cpp:42
+#: src/slic3r/GUI/PresetHints.cpp:41
 msgid "Fan"
 msgstr "Ventilateur"
 
-#: src/slic3r/GUI/Tab.cpp:1456
+#: src/slic3r/GUI/Tab.cpp:1802
 msgid "Fan settings"
 msgstr "Réglages du ventilateur"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/Tab.cpp:1457
+#: src/slic3r/GUI/GUI_Preview.cpp:279 src/slic3r/GUI/Tab.cpp:1803
 msgid "Fan speed"
 msgstr "Vitesse du ventilateur"
 
-#: src/libslic3r/GCode/PreviewData.cpp:353
+#: src/slic3r/GUI/GCodeViewer.cpp:2239 src/libslic3r/GCode/PreviewData.cpp:358
 msgid "Fan Speed (%)"
 msgstr "Vitesse du ventilateur (%)"
 
-#: src/libslic3r/PrintConfig.cpp:2405
+#: src/libslic3r/PrintConfig.cpp:2548
 msgid "Fast"
 msgstr "Rapide"
 
-#: src/libslic3r/PrintConfig.cpp:2406
+#: src/libslic3r/PrintConfig.cpp:2549
 msgid "Fast tilt"
 msgstr "Inclinaison rapide"
 
-#: src/slic3r/GUI/GUI_App.cpp:141
+#: src/slic3r/GUI/GUI_App.cpp:531
 msgid "Fatal error"
 msgstr "Erreur fatale"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:221 src/slic3r/GUI/GUI_Preview.cpp:575
-#: src/libslic3r/GCode/PreviewData.cpp:345
+#: src/slic3r/GUI/GUI_Init.cpp:88
+msgid "Fatal error, exception catched: %1%"
+msgstr "Erreur fatale, exception interceptée : %1%"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
+#: src/slic3r/GUI/GUI_Preview.cpp:275 src/slic3r/GUI/GUI_Preview.cpp:787
+#: src/libslic3r/GCode/PreviewData.cpp:350
 msgid "Feature type"
 msgstr "Type de fonctionnalité"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:234 src/slic3r/GUI/GUI_Preview.cpp:235
+#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:295
+#: src/slic3r/GUI/GUI_Preview.cpp:316
 msgid "Feature types"
 msgstr "Types de fonctionnalité"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1525
+#: src/slic3r/GUI/ConfigWizard.cpp:1926
 msgid "FFF Technology Printers"
 msgstr "Imprimantes Technologie FFF"
 
-#: src/slic3r/GUI/Plater.cpp:816 src/slic3r/GUI/Tab.cpp:1425
-#: src/slic3r/GUI/Tab.cpp:1426
+#: src/slic3r/GUI/Plater.cpp:691 src/slic3r/GUI/Tab.cpp:1770
+#: src/slic3r/GUI/Tab.cpp:1771
 msgid "Filament"
 msgstr "Filament"
 
-#: src/slic3r/GUI/Preset.cpp:1522
+#: src/libslic3r/Preset.cpp:1301
 msgid "filament"
 msgstr "filament"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Filament and Nozzle Diameters"
 msgstr "Diamètres du Filament et de la Buse"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:983
+#: src/slic3r/GUI/ConfigWizard.cpp:1349
 msgid "Filament Diameter:"
 msgstr "Diamètre du Filament :"
 
-#: src/libslic3r/PrintConfig.cpp:651
+#: src/libslic3r/PrintConfig.cpp:687
 msgid "Filament is cooled by being moved back and forth in the cooling tubes. Specify desired number of these moves."
 msgstr "Le filament est refroidi en étant déplacé d'avant en arrière dans les tubes de refroidissement. Spécifiez le nombre souhaité de ces mouvements."
 
-#: src/libslic3r/PrintConfig.cpp:686
+#: src/libslic3r/PrintConfig.cpp:722
 msgid "Filament load time"
 msgstr "Temps de chargement du filament"
 
-#: src/libslic3r/PrintConfig.cpp:588
+#: src/libslic3r/PrintConfig.cpp:624
 msgid "Filament notes"
 msgstr "Notes du filament"
 
-#: src/slic3r/GUI/Tab.cpp:1323 src/slic3r/GUI/Tab.cpp:1378
+#: src/slic3r/GUI/Tab.cpp:1669
 msgid "Filament Overrides"
 msgstr "Annulations de Filament"
 
-#: src/libslic3r/PrintConfig.cpp:1381
+#: src/libslic3r/PrintConfig.cpp:1489
 msgid "Filament parking position"
 msgstr "Position d'attente du filament"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filament Profiles Selection"
 msgstr "Sélection des Profils de Filament"
 
-#: src/slic3r/GUI/Tab.cpp:1471
+#: src/slic3r/GUI/Tab.cpp:1817
 msgid "Filament properties"
 msgstr "Propriétés du filament"
 
-#: src/slic3r/GUI/Tab.hpp:355
+#: src/slic3r/GUI/Tab.hpp:409
 msgid "Filament Settings"
 msgstr "Réglages du filament"
 
-#: src/libslic3r/PrintConfig.cpp:726
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Filament Settings Tab"
+msgstr "Onglet de réglages du filament"
+
+#: src/libslic3r/PrintConfig.cpp:762
 msgid "Filament type"
 msgstr "Type de filament"
 
-#: src/libslic3r/PrintConfig.cpp:701
+#: src/libslic3r/PrintConfig.cpp:737
 msgid "Filament unload time"
 msgstr "Temps de déchargement du filament"
 
@@ -2844,75 +3259,79 @@ msgstr "Temps de déchargement du filament"
 msgid "filaments"
 msgstr "filaments"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filaments"
 msgstr "Filaments"
 
-#: src/libslic3r/Zipper.cpp:72
+#: src/slic3r/GUI/ConfigWizard.cpp:691
+msgid "Filaments marked with <b>*</b> are <b>not</b> compatible with some installed printers."
+msgstr "Les filaments marqués d'une <b>*</b> <b>ne</b> sont <b>pas</b> compatibles avec certaines imprimantes installées."
+
+#: src/libslic3r/miniz_extension.cpp:131
 msgid "file close failed"
 msgstr "échec de la fermeture du fichier"
 
-#: src/libslic3r/Zipper.cpp:66
+#: src/libslic3r/miniz_extension.cpp:125
 msgid "file create failed"
 msgstr "échec de création du fichier"
 
-#: src/slic3r/GUI/MainFrame.cpp:791
+#: src/slic3r/GUI/MainFrame.cpp:1492
 msgid "File Not Found"
 msgstr "Fichier non trouvé"
 
-#: src/libslic3r/Zipper.cpp:86
+#: src/libslic3r/miniz_extension.cpp:145
 msgid "file not found"
 msgstr "fichier non trouvé"
 
-#: src/libslic3r/Zipper.cpp:64
+#: src/libslic3r/miniz_extension.cpp:123
 msgid "file open failed"
 msgstr "échec de l'ouverture du fichier"
 
-#: src/libslic3r/Zipper.cpp:70
+#: src/libslic3r/miniz_extension.cpp:129
 msgid "file read failed"
 msgstr "échec de lecture du fichier"
 
-#: src/libslic3r/Zipper.cpp:74
+#: src/libslic3r/miniz_extension.cpp:133
 msgid "file seek failed"
 msgstr "impossible de trouver le fichier"
 
-#: src/libslic3r/Zipper.cpp:76
+#: src/libslic3r/miniz_extension.cpp:135
 msgid "file stat failed"
 msgstr "impossible d'établir des statistiques pour ce fichier"
 
-#: src/libslic3r/Zipper.cpp:36
+#: src/libslic3r/miniz_extension.cpp:95
 msgid "file too large"
 msgstr "fichier trop volumineux"
 
-#: src/libslic3r/Zipper.cpp:68
+#: src/libslic3r/miniz_extension.cpp:127
 msgid "file write failed"
 msgstr "échec d'écriture du fichier"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:153
+#: src/slic3r/GUI/PrintHostDialogs.cpp:151
 msgid "Filename"
 msgstr "Nom de fichier"
 
-#: src/libslic3r/PrintConfig.cpp:775
+#: src/libslic3r/PrintConfig.cpp:811
 msgid "Fill angle"
 msgstr "Angle du remplissage"
 
-#: src/libslic3r/PrintConfig.cpp:789
+#: src/libslic3r/PrintConfig.cpp:825
 msgid "Fill density"
 msgstr "Densité de remplissage"
 
-#: src/libslic3r/PrintConfig.cpp:826
+#: src/libslic3r/PrintConfig.cpp:862
 msgid "Fill pattern"
 msgstr "Motif de remplissage"
 
-#: src/libslic3r/PrintConfig.cpp:437
+#: src/libslic3r/PrintConfig.cpp:473
 msgid "Fill pattern for bottom infill. This only affects the bottom external visible layer, and not its adjacent solid shells."
 msgstr "Motif pour les remplissages pour le remplissage du bas. Ceci affecte seulement la couche externe visible en bas, et non les coques solides adjacentes."
 
-#: src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:864
 msgid "Fill pattern for general low-density infill."
 msgstr "Motif pour les remplissages de faible densité."
 
-#: src/libslic3r/PrintConfig.cpp:417
+#: src/libslic3r/PrintConfig.cpp:451
 msgid "Fill pattern for top infill. This only affects the top visible layer, and not its adjacent solid shells."
 msgstr "Motif pour les remplissages pour le remplissage du haut. Ceci affecte seulement la couche externe visible en haut, et non les coques solides adjacentes."
 
@@ -2920,7 +3339,7 @@ msgstr "Motif pour les remplissages pour le remplissage du haut. Ceci affecte se
 msgid "Finished"
 msgstr "Terminé"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891 src/slic3r/GUI/Tab.cpp:1947
+#: src/slic3r/GUI/ConfigWizard.cpp:1257 src/slic3r/GUI/Tab.cpp:2132
 msgid "Firmware"
 msgstr "Firmware"
 
@@ -2932,50 +3351,58 @@ msgstr "Outil de flash du firmware"
 msgid "Firmware image:"
 msgstr "Image du firmware :"
 
-#: src/slic3r/GUI/Tab.cpp:2577
+#: src/slic3r/GUI/Tab.cpp:2733
 msgid "Firmware Retraction"
 msgstr "Rétraction du Firmware"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891
+#: src/slic3r/GUI/ConfigWizard.cpp:1257
 msgid "Firmware Type"
 msgstr "Type de Firmware"
 
-#: src/libslic3r/PrintConfig.cpp:859 src/libslic3r/PrintConfig.cpp:868
-#: src/libslic3r/PrintConfig.cpp:876 src/libslic3r/PrintConfig.cpp:910
+#: src/libslic3r/PrintConfig.cpp:899 src/libslic3r/PrintConfig.cpp:908
+#: src/libslic3r/PrintConfig.cpp:918 src/libslic3r/PrintConfig.cpp:952
 msgid "First layer"
 msgstr "Première couche"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:61 src/libslic3r/PrintConfig.cpp:889
+#: src/libslic3r/PrintConfig.cpp:909
+msgid "First layer bed temperature"
+msgstr "Température du plateau de la première couche"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:60 src/libslic3r/PrintConfig.cpp:931
 msgid "First layer height"
 msgstr "Hauteur de la première couche"
 
-#: src/libslic3r/Print.cpp:1422
+#: src/libslic3r/Print.cpp:1448
 msgid "First layer height can't be greater than nozzle diameter"
 msgstr "La hauteur de la première couche ne peut pas être supérieure au diamètre de la buse"
 
-#: src/libslic3r/PrintConfig.cpp:900
+#: src/libslic3r/PrintConfig.cpp:960
+msgid "First layer nozzle temperature"
+msgstr "Température de la buse de la première couche"
+
+#: src/libslic3r/PrintConfig.cpp:942
 msgid "First layer speed"
 msgstr "Vitesse de la première couche"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "First layer volumetric"
 msgstr "Volume de la première couche"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1647
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
 msgid "Fix through the Netfabb"
 msgstr "Corriger avec Netfabb"
 
-#: src/slic3r/GUI/Plater.cpp:3473
+#: src/slic3r/GUI/Plater.cpp:3278
 msgid "Fix Throught NetFabb"
 msgstr "Corriger Avec NetFabb"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Flash printer &firmware"
 msgstr "Flasher le &firmware de l'imprimante"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:150
 msgid "Flash!"
-msgstr "Flash !"
+msgstr "Flasher !"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:284
 msgid "Flashing cancelled."
@@ -2997,24 +3424,32 @@ msgstr "Processus de flash en cours. Veuillez ne pas déconnecter l'imprimante !
 msgid "Flashing succeeded!"
 msgstr "Flash effectué avec succès !"
 
-#: src/slic3r/GUI/Tab.cpp:1218
+#: src/slic3r/GUI/Tab.cpp:1548
 msgid "Flow"
 msgstr "Flux"
 
-#: src/slic3r/GUI/PresetHints.cpp:220
+#: src/libslic3r/PrintConfig.cpp:1145
+msgid "Flow rate"
+msgstr "Débit"
+
+#: src/slic3r/GUI/PresetHints.cpp:219
 msgid "flow rate is maximized"
 msgstr "le débit est maximisé"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:286
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:555
+msgid "Following printer preset(s) is duplicated:%1%The above preset for printer \"%2%\" will be used just once."
+msgstr "Le ou les préréglages d'imprimante suivants sont dupliqués :%1% Le préréglage ci-dessus pour l'imprimante \"%2%\" sera utilisé une seule fois."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:287
 msgid "For more information please visit our wiki page:"
 msgstr "Pour plus d'informations, merci de visiter notre page wiki :"
 
-#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Plater.cpp:624
+#: src/slic3r/GUI/Plater.cpp:367 src/slic3r/GUI/Plater.cpp:490
 msgid "For support enforcers only"
 msgstr "Seulement pour les générateur de supports"
 
 #. TRN Description for "WHITE BULLET"
-#: src/slic3r/GUI/Tab.cpp:3267
+#: src/slic3r/GUI/Tab.cpp:3702
 msgid ""
 "for the left button: indicates a non-system (or non-default) preset,\n"
 "for the right button: indicates that the settings hasn't been modified."
@@ -3022,7 +3457,7 @@ msgstr ""
 "pour le bouton gauche : indique un préréglage non-système (ou non par défaut),\n"
 "pour le bouton droit : indique que le réglage n'a pas été modifié."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:136
+#: src/slic3r/GUI/ConfigManipulation.cpp:135
 msgid ""
 "For the Wipe Tower to work with the soluble supports, the support layers\n"
 "need to be synchronized with the object layers."
@@ -3030,21 +3465,21 @@ msgstr ""
 "Pour que la tour de nettoyage fonctionne avec les supports solubles, les couches du support\n"
 "doivent être synchronisées avec les couches d'objets."
 
-#: src/libslic3r/Print.cpp:1396
+#: src/libslic3r/Print.cpp:1422
 msgid "For the Wipe Tower to work with the soluble supports, the support layers need to be synchronized with the object layers."
 msgstr ""
 "Pour que la Tour de Nettoyage fonctionne avec des supports solubles, les couches de support\n"
 "doivent être synchronisées avec les couches de l'objet."
 
-#: src/libslic3r/PrintConfig.cpp:2864
+#: src/libslic3r/PrintConfig.cpp:3028
 msgid "Force pad around object everywhere"
 msgstr "Forcer le socle partout autour de l'objet"
 
-#: src/libslic3r/PrintConfig.cpp:1729
+#: src/libslic3r/PrintConfig.cpp:1844
 msgid "Force solid infill for regions having a smaller area than the specified threshold."
 msgstr "Forcer un remplissage solide pour les zones ayant une surface plus petite que la valeur indiquée."
 
-#: src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1116
 msgid "Force the generation of solid shells between adjacent materials/volumes. Useful for multi-extruder prints with translucent materials or manual soluble support material."
 msgstr "Force la génération de coques solides entre des volumes/matériaux adjacents. Utile pour des impressions multi-extrudeurs avec des matériaux translucides ou avec un support manuel soluble."
 
@@ -3052,27 +3487,31 @@ msgstr "Force la génération de coques solides entre des volumes/matériaux adj
 msgid "From"
 msgstr "De"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2223
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "from"
+msgstr "de"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2389
 msgid "From Object List You can't delete the last solid part from object."
 msgstr "Depuis la Liste d'Objet Vous ne pouvez pas supprimer la dernière partie solide de l'objet."
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front"
 msgstr "Avant"
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front View"
 msgstr "Vue Avant"
 
-#: src/slic3r/GUI/Tab.cpp:1013
+#: src/slic3r/GUI/Tab.cpp:1331
 msgid "full profile name"
 msgstr "nom de profil complet"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "G-code"
 msgstr "G-code"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1021
+#: src/slic3r/GUI/DoubleSlider.cpp:1146
 msgid ""
 "G-code associated to this tick mark is in a conflict with print mode.\n"
 "Editing it will cause changes of Slider data."
@@ -3080,220 +3519,273 @@ msgstr ""
 "Le G-code associé à cette coche est en conflit avec le mode d'impression.\n"
 "Le modifier entraînera des modifications des données du curseur."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:130
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:165
 msgid "G-code file exported to %1%"
 msgstr "Fichier G-code exporté vers %1%"
 
-#: src/libslic3r/PrintConfig.cpp:936
+#: src/libslic3r/PrintConfig.cpp:980
 msgid "G-code flavor"
 msgstr "Version du G-code"
 
-#: src/libslic3r/PrintConfig.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:79
+msgid "G-code preview"
+msgstr "Aperçu du G-code"
+
+#: src/libslic3r/PrintConfig.cpp:3552
+msgid "G-code viewer"
+msgstr "Visionneuse de G-code"
+
+#: src/libslic3r/PrintConfig.cpp:757
 msgid "g/cm³"
 msgstr "g/cm³"
 
-#: src/libslic3r/PrintConfig.cpp:2505
+#: src/libslic3r/PrintConfig.cpp:2648
 msgid "g/ml"
 msgstr "g/ml"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:317
-#: src/libslic3r/PrintConfig.cpp:918
+#: src/slic3r/GUI/GUI_Preview.cpp:309 src/libslic3r/ExtrusionEntity.cpp:322
+#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:962
 msgid "Gap fill"
 msgstr "Remplissage des trous"
 
-#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1796
-#: src/slic3r/GUI/Tab.cpp:2040
+#: src/slic3r/GUI/Preferences.cpp:24 src/slic3r/GUI/Tab.cpp:2058
+#: src/slic3r/GUI/Tab.cpp:2240 src/slic3r/GUI/Tab.cpp:2348
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "General"
 msgstr "Général"
 
-#: src/libslic3r/PrintConfig.cpp:1307
+#: src/libslic3r/PrintConfig.cpp:1415
 msgid "Generate no less than the number of skirt loops required to consume the specified amount of filament on the bottom layer. For multi-extruder machines, this minimum applies to each extruder."
 msgstr "Nombre minimum de contours à générer afin de consommer la quantité de filament spécifiée sur la couche inférieure. Pour les machines multi-extrudeurs, ce minimum s'applique à chaque extrudeur."
 
-#: src/libslic3r/PrintConfig.cpp:1865
+#: src/libslic3r/PrintConfig.cpp:2007
 msgid "Generate support material"
 msgstr "Générer des supports"
 
-#: src/libslic3r/PrintConfig.cpp:1926
+#: src/libslic3r/PrintConfig.cpp:2068
 msgid "Generate support material for the specified number of layers counting from bottom, regardless of whether normal support material is enabled or not and regardless of any angle threshold. This is useful for getting more adhesion of objects having a very thin or poor footprint on the build plate."
 msgstr "Générer des supports pour le nombre de couches spécifié à partir du bas, que les supports normaux soient activés ou non et sans tenir compte des seuils d'inclinaison. Ceci est utile pour obtenir une meilleure adhérence pour des objets ayant une surface de contact très fine ou limitée sur le plateau."
 
-#: src/libslic3r/PrintConfig.cpp:2613
+#: src/libslic3r/PrintConfig.cpp:2756
 msgid "Generate supports"
 msgstr "Générer des supports"
 
-#: src/libslic3r/PrintConfig.cpp:2615
+#: src/libslic3r/PrintConfig.cpp:2758
 msgid "Generate supports for the models"
 msgstr "Générer des supports pour les modèles"
 
-#: src/libslic3r/Print.cpp:1614
+#: src/slic3r/GUI/Plater.cpp:3554
+msgid "generated warnings"
+msgstr "avertissements générés"
+
+#: src/libslic3r/Print.cpp:1645
 msgid "Generating brim"
 msgstr "Génération de la bordure"
 
-#: src/libslic3r/Print.cpp:1642
+#: src/libslic3r/Print.cpp:1680
 msgid "Generating G-code"
 msgstr "Génération du G-code"
 
-#: src/libslic3r/SLAPrintSteps.cpp:48
+#: src/slic3r/GUI/GCodeViewer.cpp:1392
+msgid "Generating index buffers"
+msgstr "Génération des tampons d'index"
+
+#: src/libslic3r/SLAPrintSteps.cpp:49
 msgid "Generating pad"
 msgstr "Génération du socle"
 
-#: src/libslic3r/PrintObject.cpp:152
+#: src/libslic3r/PrintObject.cpp:158
 msgid "Generating perimeters"
 msgstr "Génération des périmètres"
 
-#: src/libslic3r/Print.cpp:1606
+#: src/libslic3r/Print.cpp:1636
 msgid "Generating skirt"
 msgstr "Génération de la jupe"
 
-#: src/libslic3r/PrintObject.cpp:395
+#: src/libslic3r/PrintObject.cpp:422
 msgid "Generating support material"
 msgstr "Génération des supports"
 
-#: src/libslic3r/SLAPrintSteps.cpp:46 src/libslic3r/SLAPrintSteps.cpp:356
+#: src/libslic3r/SLAPrintSteps.cpp:47 src/libslic3r/SLAPrintSteps.cpp:359
 msgid "Generating support points"
 msgstr "Génération des points de support"
 
-#: src/libslic3r/SLAPrintSteps.cpp:47
+#: src/libslic3r/SLAPrintSteps.cpp:48
 msgid "Generating support tree"
 msgstr "Génération de l'arbre de support"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2022
+#: src/slic3r/GUI/GCodeViewer.cpp:933
+msgid "Generating toolpaths"
+msgstr "Génération des parcours d'outils"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:1318
+msgid "Generating vertex buffer"
+msgstr "Génération du tampon de vertex"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2181
 msgid "Generic"
 msgstr "Générique"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
 msgid "Gizmo cut"
 msgstr "Couper le Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
 msgid "Gizmo move"
 msgstr "Déplacer le Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
+msgid "Gizmo move: Press to snap by 1mm"
+msgstr "Déplacement du gizmo : appuyez pour des pas de 1 mm"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
 msgid "Gizmo Place face on bed"
 msgstr "Emplacement du Gizmo face au lit"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
 msgid "Gizmo rotate"
 msgstr "Pivoter le Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:203
+msgid "Gizmo rotate: Press to rotate selected objects around their own center"
+msgstr "Rotation du gizmo : appuyez pour faire pivoter les objets sélectionnés autour de leur propre centre"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
 msgid "Gizmo scale"
 msgstr "Échelle du Gizmo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+msgid "Gizmo scale: Press to activate one direction scaling"
+msgstr "Redimensionnement du gizmo : appuyez pour activer le redimensionnement dans une direction"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:202
+msgid "Gizmo scale: Press to scale selected objects around their own center"
+msgstr "Redimensionnement du gizmo : appuyez pour mettre redimensionner les objets sélectionnés autour de leur propre centre"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
+msgid "Gizmo scale: Press to snap by 5%"
+msgstr "Redimensionnement du gizmo : appuyez pour des pas de 5%"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:200
+msgid "Gizmo scale: Scale selection to fit print volume"
+msgstr "Redimensionnement du gizmo : redimensionner la sélection pour remplir le volume d'impression"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
 msgid "Gizmo SLA hollow"
 msgstr "Gizmo SLA évidé"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
 msgid "Gizmo SLA support points"
 msgstr "Points de support SLA du Gizmo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2921
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:562
+#: src/slic3r/GUI/GLCanvas3D.cpp:3165
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520
 msgid "Gizmo-Move"
 msgstr "Gizmo-Déplacement"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:489
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:639
 msgid "Gizmo-Place on Face"
 msgstr "Gizmo-Positionner sur la surface"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3001
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:564
+#: src/slic3r/GUI/GLCanvas3D.cpp:3249
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:522
 msgid "Gizmo-Rotate"
 msgstr "Gizmo-Rotation"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:563
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521
 msgid "Gizmo-Scale"
 msgstr "Gizmo-Échelle"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
 msgid "Gizmos"
 msgstr "Gizmos"
 
-#: src/slic3r/GUI/AboutDialog.cpp:259
+#: src/slic3r/GUI/AboutDialog.cpp:284 src/slic3r/GUI/GUI_App.cpp:244
 msgid "GNU Affero General Public License, version 3"
 msgstr "GNU Affero Licence Publique Générale, version 3"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:980
+#: src/slic3r/GUI/ConfigWizard.cpp:1346
 msgid "Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
 msgstr "Une bonne précision est requise, utilisez un pied à coulisse et calculez la moyenne de plusieurs mesures le long du filament."
 
-#: src/libslic3r/PrintConfig.cpp:844
+#: src/libslic3r/PrintConfig.cpp:882
 msgid "Grid"
 msgstr "Grille"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2454
+#: src/slic3r/GUI/PrintHostDialogs.cpp:57
+msgid "Group"
+msgstr "Grouper"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2846
 msgid "Group manipulation"
 msgstr "Manipulation d'un groupe"
 
-#: src/slic3r/GUI/Preferences.cpp:133
+#: src/slic3r/GUI/Preferences.cpp:200
 msgid "GUI"
 msgstr "GUI"
 
-#: src/libslic3r/PrintConfig.cpp:852
+#: src/libslic3r/PrintConfig.cpp:890
 msgid "Gyroid"
 msgstr "Gyroïde"
 
-#: src/slic3r/GUI/Tab.cpp:2937
-msgid "has the following unsaved changes:"
-msgstr "a les changements suivants non-enregistrés :"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47
 msgid "Head diameter"
 msgstr "Diamètre de la tête"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:317
+#: src/libslic3r/PrintConfig.cpp:2772
+msgid "Head penetration"
+msgstr "Pénétration de la tête"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:322
 msgid "Head penetration should not be greater than the head width."
 msgstr "La pénétration de la tête ne doit pas être supérieure à la largeur de la tête."
 
-#: src/libslic3r/PrintConfig.cpp:869
+#: src/libslic3r/PrintConfig.cpp:910
 msgid "Heated build plate temperature for the first layer. Set this to zero to disable bed temperature control commands in the output."
 msgstr "Température du plateau chauffant pour la première couche. Mettez ceci à zéro pour désactiver les commandes de contrôle de température du plateau dans la sortie."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:222 src/libslic3r/PrintConfig.cpp:500
+#: src/slic3r/GUI/GUI_Preview.cpp:276 src/libslic3r/PrintConfig.cpp:536
 msgid "Height"
 msgstr "Hauteur"
 
-#: src/libslic3r/GCode/PreviewData.cpp:347
+#: src/slic3r/GUI/GCodeViewer.cpp:2236 src/libslic3r/GCode/PreviewData.cpp:352
 msgid "Height (mm)"
 msgstr "Hauteur (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:1688
+#: src/libslic3r/PrintConfig.cpp:1796
 msgid "Height of skirt expressed in layers. Set this to a tall value to use skirt as a shield against drafts."
 msgstr "Hauteur de la jupe exprimée en couches. Mettez une valeur élevée pour utiliser la jupe comme un bouclier contre les flux d'airs."
 
-#: src/libslic3r/PrintConfig.cpp:2360
+#: src/libslic3r/PrintConfig.cpp:2503
 msgid "Height of the display"
 msgstr "Hauteur de l'affichage"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1631
 msgid "Height range Modifier"
-msgstr "Modificateur de la zone de hauteur"
+msgstr "Modificateur de plage de hauteur"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Height ranges"
-msgstr "Zones de hauteur"
+msgstr "Plages de hauteur"
 
-#: src/libslic3r/PrintConfig.cpp:261
+#: src/libslic3r/PrintConfig.cpp:295
 msgid "Heights at which a filament change is to occur."
 msgstr "Hauteurs auxquelles le changement de filament doit se produire."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:433
+#: src/slic3r/GUI/ConfigWizard.cpp:451
 #, c-format
 msgid "Hello, welcome to %s! This %s helps you with the initial configuration; just a few settings and you will be ready to print."
 msgstr "Bonjour, bienvenu dans %s ! Ce %s vous aide à la configuration initiale ; juste quelques paramètres et vous serez prêt à imprimer."
 
-#: src/libslic3r/PrintConfig.cpp:3365
+#: src/libslic3r/PrintConfig.cpp:3564
 msgid "Help"
 msgstr "Aide"
 
-#: src/libslic3r/PrintConfig.cpp:3371
+#: src/libslic3r/PrintConfig.cpp:3570
 msgid "Help (FFF options)"
 msgstr "Aide (options FFF)"
 
-#: src/libslic3r/PrintConfig.cpp:3376
+#: src/libslic3r/PrintConfig.cpp:3575
 msgid "Help (SLA options)"
 msgstr "Aide (options SLA)"
 
@@ -3301,96 +3793,80 @@ msgstr "Aide (options SLA)"
 msgid "Here you can adjust required purging volume (mm³) for any given pair of tools."
 msgstr "Ici vous pouvez ajuster le volume de purge nécessaire (mm³) pour une paire d'outils donnée."
 
-#: src/libslic3r/PrintConfig.cpp:973
+#: src/libslic3r/PrintConfig.cpp:1017
 msgid "High extruder current on filament swap"
 msgstr "Courant de l'extrudeur élevé lors du changement de filament"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:277
+#: src/slic3r/GUI/GLCanvas3D.cpp:263
 msgid "Higher print quality versus higher print speed."
 msgstr "Meilleure qualité d'impression par rapport à une vitesse d'impression plus élevée."
 
-#: src/libslic3r/PrintConfig.cpp:427 src/libslic3r/PrintConfig.cpp:853
+#: src/libslic3r/PrintConfig.cpp:463 src/libslic3r/PrintConfig.cpp:891
 msgid "Hilbert Curve"
 msgstr "Courbe de Hilbert"
 
-#: src/slic3r/GUI/Plater.cpp:1042
+#: src/slic3r/GUI/Plater.cpp:916
 msgid "Hold Shift to Slice & Export G-code"
 msgstr "Maintenez la touche Majuscule pour Trancher et Exporter le G-code"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
 msgid "Hole depth"
 msgstr "Profondeur du trou"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
 msgid "Hole diameter"
 msgstr "Diamètre du trou"
 
-#: src/slic3r/GUI/Plater.cpp:2760
-msgid "Hollow"
-msgstr "Évider"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:977
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:785
 msgid "Hollow and drill"
 msgstr "Évider et percer"
 
-#: src/libslic3r/PrintConfig.cpp:2910
+#: src/libslic3r/PrintConfig.cpp:3074
 msgid "Hollow out a model to have an empty interior"
 msgstr "Évider un modèle pour avoir un intérieur vide"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40
 msgid "Hollow this object"
 msgstr "Évider cet objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3654
-#: src/slic3r/GUI/Tab.cpp:3655 src/libslic3r/SLA/Hollowing.cpp:46
-#: src/libslic3r/SLA/Hollowing.cpp:58 src/libslic3r/SLA/Hollowing.cpp:67
-#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2909
-#: src/libslic3r/PrintConfig.cpp:2916 src/libslic3r/PrintConfig.cpp:2926
-#: src/libslic3r/PrintConfig.cpp:2935
+#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4073
+#: src/slic3r/GUI/Tab.cpp:4074 src/libslic3r/SLA/Hollowing.cpp:45
+#: src/libslic3r/SLA/Hollowing.cpp:57 src/libslic3r/SLA/Hollowing.cpp:66
+#: src/libslic3r/SLA/Hollowing.cpp:75 src/libslic3r/PrintConfig.cpp:3073
+#: src/libslic3r/PrintConfig.cpp:3080 src/libslic3r/PrintConfig.cpp:3090
+#: src/libslic3r/PrintConfig.cpp:3099
 msgid "Hollowing"
 msgstr "Évidement"
 
-#: src/slic3r/GUI/Plater.cpp:2926
-msgid "Hollowing cancelled."
-msgstr "Évidement annulé."
-
-#: src/slic3r/GUI/Plater.cpp:2927
-msgid "Hollowing done."
-msgstr "Évidement terminé."
-
-#: src/slic3r/GUI/Plater.cpp:2929
-msgid "Hollowing failed."
-msgstr "L'évidement a échoué."
-
-#: src/libslic3r/PrintConfig.cpp:2937
+#: src/libslic3r/PrintConfig.cpp:3101
 msgid "Hollowing is done in two steps: first, an imaginary interior is calculated deeper (offset plus the closing distance) in the object and then it's inflated back to the specified offset. A greater closing distance makes the interior more rounded. At zero, the interior will resemble the exterior the most."
-msgstr "L'Évidement se fait en deux temps : tout d'abord, un intérieur fictif est calculé plus profondément (décalage plus distance de fermeture) dans l'objet puis il est ré-augmenté jusqu'au décalage spécifié. Une distance de fermeture plus importante rend l'intérieur plus rond. À zéro, l'intérieur sera très semblable à l'extérieur."
+msgstr "L'Évidement se fait en deux temps : tout d'abord, un intérieur fictif est calculé plus profondément (décalage plus intervalle d'espacement) dans l'objet puis il est ré-augmenté jusqu'au décalage spécifié. Une distance de fermeture plus importante rend l'intérieur plus rond. À zéro, l'intérieur sera très semblable à l'extérieur."
 
-#: src/libslic3r/SLAPrintSteps.cpp:43
+#: src/libslic3r/SLAPrintSteps.cpp:44
 msgid "Hollowing model"
 msgstr "Évidement du modèle"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:813
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:624
 msgid "Hollowing parameter change"
 msgstr "Modification des paramètres d'évidement"
 
-#: src/libslic3r/PrintConfig.cpp:850 src/libslic3r/PrintConfig.cpp:2011
+#: src/libslic3r/PrintConfig.cpp:888 src/libslic3r/PrintConfig.cpp:2153
 msgid "Honeycomb"
 msgstr "Nid d'abeille"
 
-#: src/slic3r/GUI/Tab.cpp:1064
+#: src/slic3r/GUI/Tab.cpp:1386
 msgid "Horizontal shells"
 msgstr "Coques horizontales"
 
-#: src/libslic3r/PrintConfig.cpp:245
+#: src/libslic3r/PrintConfig.cpp:279
 msgid "Horizontal width of the brim that will be printed around each object on the first layer."
 msgstr "Largeur horizontale de la bordure qui sera imprimée autour de chaque objet sur la première couche."
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:152
+#: src/slic3r/GUI/PrintHostDialogs.cpp:150
 msgid "Host"
 msgstr "L'Hôte"
 
-#: src/libslic3r/PrintConfig.cpp:1332
+#: src/libslic3r/PrintConfig.cpp:1440
 msgid "Host Type"
 msgstr "Type d'hôte"
 
@@ -3398,11 +3874,11 @@ msgstr "Type d'hôte"
 msgid "Hostname"
 msgstr "Nom d'hôte"
 
-#: src/libslic3r/PrintConfig.cpp:97
+#: src/libslic3r/PrintConfig.cpp:99
 msgid "Hostname, IP or URL"
 msgstr "Nom d'hôte, IP ou URL"
 
-#: src/slic3r/GUI/Tab.cpp:139
+#: src/slic3r/GUI/Tab.cpp:210
 msgid ""
 "Hover the cursor over buttons to find more information \n"
 "or click this button."
@@ -3410,57 +3886,66 @@ msgstr ""
 "Passez le curseur au dessus des boutons pour obtenir plus d'informations\n"
 "ou cliquez sur ce bouton."
 
-#: src/libslic3r/PrintConfig.cpp:2812
+#: src/libslic3r/PrintConfig.cpp:2976
 msgid "How far should the pad extend around the contained geometry"
 msgstr "Jusqu'où le socle doit-il s'étendre autour de la géométrie contenue"
 
-#: src/libslic3r/PrintConfig.cpp:2901
+#: src/libslic3r/PrintConfig.cpp:3065
 msgid "How much should the tiny connectors penetrate into the model body."
 msgstr "À quelle profondeur les petits connecteurs doivent-ils pénétrer dans le corps du modèle."
 
-#: src/libslic3r/PrintConfig.cpp:2631
+#: src/libslic3r/PrintConfig.cpp:2774
 msgid "How much the pinhead has to penetrate the model surface"
 msgstr "Niveau de pénétration de l'épingle dans la surface du modèle"
 
-#: src/libslic3r/PrintConfig.cpp:2755
+#: src/libslic3r/PrintConfig.cpp:2919
 msgid "How much the supports should lift up the supported object. If \"Pad around object\" is enabled, this value is ignored."
 msgstr "A quel point les supports devraient soutenir l'objet supporté. Si la fonction \"Socle autour de l'objet\" est activée, cette valeur est ignorée."
 
-#: src/libslic3r/PrintConfig.cpp:111
+#: src/libslic3r/PrintConfig.cpp:1209
+msgid "How to apply limits"
+msgstr "Comment appliquer des limites"
+
+#: src/libslic3r/PrintConfig.cpp:1203
+msgid "How to apply the Machine Limits"
+msgstr "Comment appliquer les limites de la machine"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:358
+#: src/libslic3r/PrintConfig.cpp:113
 msgid "HTTPS CA File"
 msgstr "HTTPS CA Fichier"
 
-#: src/slic3r/GUI/Tab.cpp:1713
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:319
 msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
 msgstr "Le fichier HTTPS CA est optionnel. Il est uniquement requis si vous utilisez le HTTPS avec un certificat auto-signé."
 
-#: src/slic3r/GUI/Preferences.cpp:222
+#: src/slic3r/GUI/Preferences.cpp:376
 msgid "Icon size in a respect to the default size"
 msgstr "Taille de l'icône par rapport à la taille par défaut"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:149
+#: src/slic3r/GUI/PrintHostDialogs.cpp:147
 msgid "ID"
 msgstr "ID"
 
-#: src/libslic3r/PrintConfig.cpp:1873
+#: src/libslic3r/PrintConfig.cpp:2015
 msgid "If checked, supports will be generated automatically based on the overhang threshold value. If unchecked, supports will be generated inside the \"Support Enforcer\" volumes only."
 msgstr "Si cette case est cochée, les supports seront générés automatiquement en fonction de la valeur seuil de surplomb. Si cette case n'est pas cochée, les supports seront générés uniquement dans les volumes \"Générateur de supports\"."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:773
+#: src/slic3r/GUI/ConfigWizard.cpp:1132
 #, c-format
 msgid "If enabled, %s checks for new application versions online. When a new version becomes available, a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "Si activé, %s vérifie en ligne l'existence de nouvelles versions de Slic3r PE. Lorsqu'une nouvelle version est disponible, une notification est affichée au démarrage suivant de l'application (jamais pendant l'utilisation du programme). Ceci est uniquement un mécanisme de notification, aucune installation automatique n'est faite."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:783
+#: src/slic3r/GUI/ConfigWizard.cpp:1142
 #, c-format
 msgid "If enabled, %s downloads updates of built-in system presets in the background.These updates are downloaded into a separate temporary location.When a new preset version becomes available it is offered at application startup."
 msgstr "Si activé, %s télécharge les mises à jours des préréglages système intégrés en arrière-plan. Ces mises à jour sont téléchargées dans un répertoire temporaire séparé. Lorsqu'une nouvelle version de préréglages est disponible, elle est proposée au démarrage de l'application."
 
-#: src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:1994
 msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
 msgstr "Si ceci est activé, tous les extrudeurs qui impriment seront positionnés sur la bordure avant du lit d'impression au début de l'impression."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:805
+#: src/slic3r/GUI/ConfigWizard.cpp:1164
 msgid ""
 "If enabled, allows the Reload from disk command to automatically find and load the files when invoked.\n"
 "If not enabled, the Reload from disk command will ask to select each file using an open file dialog."
@@ -3468,127 +3953,172 @@ msgstr ""
 "Si activé, permet à la commande Recharger à partir du disque de rechercher et de charger automatiquement les fichiers lorsqu'elle est invoquée.\n"
 "Si non activée, la commande Recharger à partir du disque demandera de sélectionner chaque fichier à l'aide d'une boîte de dialogue d'ouverture de fichier."
 
-#: src/slic3r/GUI/Preferences.cpp:74
+#: src/slic3r/GUI/Preferences.cpp:91
 msgid "If enabled, allows the Reload from disk command to automatically find and load the files when invoked."
 msgstr "Si activé, permet à la commande Recharger à partir du disque de rechercher et de charger automatiquement les fichiers lorsqu'elle est invoquée."
 
-#: src/slic3r/GUI/Preferences.cpp:66
+#: src/slic3r/GUI/Preferences.cpp:238
+msgid "If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer. If disabled, changes made using the sequential slider, in preview, apply to the whole gcode."
+msgstr "Si activé, les modifications apportées à l'aide du curseur séquentiel, dans l'aperçu, s'appliquent uniquement à la couche supérieure du gcode. Si désactivé, les modifications effectuées à l'aide du curseur séquentiel, dans l'aperçu, s'appliquent à l'ensemble du gcode."
+
+#: src/slic3r/GUI/Preferences.cpp:83
 msgid "If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "Si activé, PrusaSlicer vérifie l'existence de ses nouvelles versions en ligne . Lorsqu'une nouvelle version est disponible, une notification est affichée au prochain démarrage de l'application (jamais pendant l'utilisation du programme). Ceci est uniquement un mécanisme de notification, aucune installation automatique n'est faite."
 
-#: src/slic3r/GUI/Preferences.cpp:82
+#: src/slic3r/GUI/Preferences.cpp:270
+msgid "If enabled, renders object using the environment map."
+msgstr "Si activé, rend l'objet à l'aide de la carte d'environnement."
+
+#: src/slic3r/GUI/Preferences.cpp:200
+msgid "If enabled, reverses the direction of zoom with mouse wheel"
+msgstr "Si activé, inverse la direction du zoom avec la molette de la souris"
+
+#: src/slic3r/GUI/Preferences.cpp:99
 msgid "If enabled, Slic3r downloads updates of built-in system presets in the background. These updates are downloaded into a separate temporary location. When a new preset version becomes available it is offered at application startup."
 msgstr "Si activé, Slic3r télécharge les mises à jours des préréglages système intégrés en arrière-plan. Ces mises à jour sont téléchargées dans un répertoire temporaire séparé. Lorsqu'une nouvelle version de préréglages est disponible, elle est proposée au démarrage de l'application."
 
-#: src/slic3r/GUI/Preferences.cpp:106
+#: src/slic3r/GUI/Preferences.cpp:137
 msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
 msgstr "Si ceci est activé, la scène 3D sera affichée avec la résolution Retina. Si vous rencontrez des problèmes de performance 3D, le fait de désactiver cette option vous aidera peut-être."
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/slic3r/GUI/Preferences.cpp:215
+msgid "If enabled, the button for the collapse sidebar will be appeared in top right corner of the 3D Scene"
+msgstr "Si activé, le bouton de réduction de la barre latérale apparaîtra dans le coin supérieur droit de la scène 3D"
+
+#: src/libslic3r/PrintConfig.cpp:3698
+msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
+msgstr "Si activé, les arguments de ligne de commande sont envoyés à une instance existante de la GUI de PrusaSlicer, ou une fenêtre existante de PrusaSlicer est activée. Remplace la valeur de configuration \"single_instance\" des préférences de l'application."
+
+#: src/libslic3r/PrintConfig.cpp:1804
 msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
 msgstr "Si elle est activée, la jupe sera aussi haute que l'objet imprimé le plus haut. Cela sert à protéger les impressions ABS ou ASA des phénomènes de déformation ou de décollement du plateau d'impression liés au flux d'air."
 
-#: src/libslic3r/PrintConfig.cpp:1858
+#: src/libslic3r/PrintConfig.cpp:2000
 msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
 msgstr "Si elle est activée, la tour de nettoyage ne sera pas imprimée sur des couches sans changement d'outil. Sur les couches avec un changement d'outil, l'extrudeur se déplacera vers le bas pour imprimer la tour de nettoyage. C'est à l'utilisateur de s'assurer qu'il n'y a pas de collision avec l'impression."
 
-#: src/slic3r/GUI/Preferences.cpp:128
+#: src/slic3r/GUI/Preferences.cpp:193
 msgid "If enabled, use free camera. If not enabled, use constrained camera."
 msgstr "Si activé, utilise la caméra libre. Si non activé, utilise la caméra contrainte."
 
-#: src/slic3r/GUI/Preferences.cpp:121
+#: src/slic3r/GUI/Preferences.cpp:186
 msgid "If enabled, use perspective camera. If not enabled, use orthographic camera."
 msgstr "Si activé, utilise la l'appareil photo en perspective. Si n'est pas activé, utilise l'appareil photo en vue orthographique."
 
-#: src/slic3r/GUI/Preferences.cpp:145
+#: src/slic3r/GUI/Preferences.cpp:222
 msgid "If enabled, you can change size of toolbar icons manually."
 msgstr "Si activé, vous pouvez changer la taille des icônes de la barre d'outils manuellement."
 
-#: src/slic3r/GUI/PresetHints.cpp:29
+#: src/slic3r/GUI/PresetHints.cpp:28
 msgid "If estimated layer time is below ~%1%s, fan will run at %2%%% and print speed will be reduced so that no less than %3%s are spent on that layer (however, speed will never be reduced below %4%mm/s)."
 msgstr "Si le temps de couche estimé est inférieur à ~%1%s, le ventilateur tournera à %2%%% et la vitesse d'impression sera réduite pour qu'au moins %3%s soient passées sur cette couche (cependant, la vitesse ne sera jamais réduite en-dessous de %4%mm/s)."
 
-#: src/slic3r/GUI/PresetHints.cpp:36
+#: src/slic3r/GUI/PresetHints.cpp:35
 msgid "If estimated layer time is greater, but still below ~%1%s, fan will run at a proportionally decreasing speed between %2%%% and %3%%%."
 msgstr "Si le temps estimé pour la couche est supérieur, mais cependant inférieur à ~%1%s, le ventilateur tournera à une vitesse proportionnellement décroissante entre %2%%% et %3%%%."
 
-#: src/libslic3r/PrintConfig.cpp:901
+#: src/libslic3r/PrintConfig.cpp:943
 msgid "If expressed as absolute value in mm/s, this speed will be applied to all the print moves of the first layer, regardless of their type. If expressed as a percentage (for example: 40%) it will scale the default speeds."
 msgstr "Si exprimée avec une valeur absolue en mm/s, cette vitesse sera appliquée à tous les déplacements d'impression de la première couche, quel que soit leur type. Si exprimée comme un pourcentage (par exemple 40%), cela modulera la vitesse par défaut."
 
-#: src/libslic3r/PrintConfig.cpp:573
+#: src/libslic3r/PrintConfig.cpp:609
 msgid "If layer print time is estimated below this number of seconds, fan will be enabled and its speed will be calculated by interpolating the minimum and maximum speeds."
 msgstr "Si le temps d'impression estimé de la couche est inférieur à ce nombre de secondes, le ventilateur sera activé et sa vitesse calculée par interpolation des vitesses minimum et maximum."
 
-#: src/libslic3r/PrintConfig.cpp:1706
+#: src/libslic3r/PrintConfig.cpp:1821
 msgid "If layer print time is estimated below this number of seconds, print moves speed will be scaled down to extend duration to this value."
 msgstr "Si le temps d'impression estimé de la couche est inférieur à ce nombre de secondes, la vitesse des déplacements d'impression sera réduite afin d'atteindre cette valeur."
 
-#: src/libslic3r/PrintConfig.cpp:567
+#: src/libslic3r/PrintConfig.cpp:603
 msgid "If this is enabled, fan will never be disabled and will be kept running at least at its minimum speed. Useful for PLA, harmful for ABS."
 msgstr "Si ceci est activé, le ventilateur ne sera jamais désactivé et sera maintenu au moins à sa vitesse minimum. Utile pour le PLA, mais risqué pour l'ABS."
 
-#: src/slic3r/GUI/Preferences.cpp:49
+#: src/slic3r/GUI/Preferences.cpp:66
 msgid "If this is enabled, Slic3r will auto-center objects around the print bed center."
 msgstr "Si ceci est activé, Slic3r centrera automatique les objets autour du centre du plateau d'impression."
 
-#: src/slic3r/GUI/Preferences.cpp:57
+#: src/slic3r/GUI/Preferences.cpp:74
 msgid "If this is enabled, Slic3r will pre-process objects as soon as they're loaded in order to save time when exporting G-code."
 msgstr "Si ceci est activé, Slic3r va pré-calculer les objets dès qu'ils sont chargés pour gagner du temps lors de l'export du G-code."
 
-#: src/slic3r/GUI/Preferences.cpp:41
+#: src/slic3r/GUI/Preferences.cpp:54
 msgid "If this is enabled, Slic3r will prompt the last output directory instead of the one containing the input files."
 msgstr "Si ceci est activé, Slic3r affichera le dernier répertoire de sortie au lieu de celui contenant les fichiers d'entrée."
 
-#: src/libslic3r/PrintConfig.cpp:1562
+#: src/slic3r/GUI/Preferences.cpp:125
+msgid "If this is enabled, when starting PrusaSlicer and another instance of the same PrusaSlicer is already running, that instance will be reactivated instead."
+msgstr "Si cela est activé, lors du démarrage de PrusaSlicer et si une autre instance du même PrusaSlicer est déjà en cours d'exécution, cette instance sera réactivée à la place."
+
+#: src/libslic3r/PrintConfig.cpp:1670
 msgid "If you set this to a positive value, Z is quickly raised every time a retraction is triggered. When using multiple extruders, only the setting for the first extruder will be considered."
 msgstr "Si vous indiquez une valeur positive, l'axe Z est rapidement élevé à chaque rétraction. Lorsque vous utilisez plusieurs extrudeurs, seul le réglage du premier extrudeur sera pris en compte."
 
-#: src/libslic3r/PrintConfig.cpp:1571
+#: src/libslic3r/PrintConfig.cpp:1679
 msgid "If you set this to a positive value, Z lift will only take place above the specified absolute Z. You can tune this setting for skipping lift on the first layers."
 msgstr "Si vous indiquez une valeur positive, le levage de l'axe Z ne sera déclenché qu'à partir de la valeur absolue indiquée pour l'axe Z. Vous pouvez modifier ce réglage pour éviter le levage de l'axe Z sur les premières couches."
 
-#: src/libslic3r/PrintConfig.cpp:1580
+#: src/libslic3r/PrintConfig.cpp:1688
 msgid "If you set this to a positive value, Z lift will only take place below the specified absolute Z. You can tune this setting for limiting lift to the first layers."
 msgstr "Si vous indiquez une valeur positive, le levage de l'axe Z ne sera déclenché que jusqu'à la valeur absolue indiquée pour l'axe Z. Vous pouvez modifier ce réglage pour limiter le levage de l'axe Z aux premières couches."
 
-#: src/libslic3r/PrintConfig.cpp:1454
+#: src/libslic3r/PrintConfig.cpp:1562
 msgid "If you want to process the output G-code through custom scripts, just list their absolute paths here. Separate multiple scripts with a semicolon. Scripts will be passed the absolute path to the G-code file as the first argument, and they can access the Slic3r config settings by reading environment variables."
 msgstr "Si vous voulez traiter le G-code de sortie à l'aide de scripts personnalisés, listez simplement leurs chemins absolus ici. Séparez les divers scripts avec un point virgule. Les scripts vont recevoir en premier argument le chemin absolu du fichier G-code, et ils peuvent accéder aux réglages de configuration de Slic3r en lisant des variables d'environnement."
 
-#: src/libslic3r/PrintConfig.cpp:530
+#: src/libslic3r/PrintConfig.cpp:566
 msgid "If your firmware doesn't handle the extruder displacement you need the G-code to take it into account. This option lets you specify the displacement of each extruder with respect to the first one. It expects positive coordinates (they will be subtracted from the XY coordinate)."
 msgstr "Si le firmware de votre imprimante ne gère pas le décalage de l'extrudeur, c'est au G-code d'en tenir compte. Cette option vous permet de spécifier le décalage de chaque extrudeur par rapport au premier. Des valeurs positives sont attendues (elles seront soustraites des coordonnées XY)."
 
-#: src/libslic3r/PrintConfig.cpp:2169
+#: src/libslic3r/PrintConfig.cpp:2312
 msgid "If your firmware requires relative E values, check this, otherwise leave it unchecked. Most firmwares use absolute values."
 msgstr "Si votre firmware requiert des valeurs relatives pour E, cochez cette case, sinon laissez-la décochée. La plupart des firmwares utilisent des valeurs absolues."
 
-#: src/libslic3r/PrintConfig.cpp:3485
+#: src/libslic3r/PrintConfig.cpp:1219
+msgid "Ignore"
+msgstr "Ignorer"
+
+#: src/libslic3r/PrintConfig.cpp:3684
 msgid "Ignore non-existent config files"
 msgstr "Ignorer les fichiers de configuration non-existants"
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:192
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:173
+msgid "Ignores facets facing away from the camera."
+msgstr "Ignore les facettes opposées à la caméra."
+
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Import &Config"
 msgstr "Importer la &Configuration"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Import Config &Bundle"
 msgstr "Importer le &Lot de Configuration"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Import Config from &project"
 msgstr "Importer la Configuration depuis le &projet"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
 msgid "Import Config from ini/amf/3mf/gcode"
 msgstr "Importer une Configuration depuis ini/amf/3mf/gcode"
 
-#: src/slic3r/GUI/Plater.cpp:4603
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39
+msgid "Import file"
+msgstr "Importer le fichier"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46
+msgid "Import model and profile"
+msgstr "Importer le modèle et le profil"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48
+msgid "Import model only"
+msgstr "Importer le modèle uniquement"
+
+#: src/slic3r/GUI/Plater.cpp:4655
 msgid "Import Object"
 msgstr "Importer l'Objet"
 
-#: src/slic3r/GUI/Plater.cpp:4607
+#: src/slic3r/GUI/Plater.cpp:4659
 msgid "Import Objects"
 msgstr "Importer les Objets"
 
@@ -3596,15 +4126,50 @@ msgstr "Importer les Objets"
 msgid "Import of the repaired 3mf file failed"
 msgstr "Échec de l'import du fichier 3mf réparé"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47
+msgid "Import profile only"
+msgstr "Importer le profil uniquement"
+
+#: src/slic3r/GUI/MainFrame.cpp:1050
+msgid "Import SL1 archive"
+msgstr "Importer l'archive SL1"
+
+#: src/slic3r/GUI/Plater.cpp:1561
+msgid "Import SLA archive"
+msgstr "Importer l'archive SLA"
+
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Import STL (imperial units)"
+msgstr "Importer le STL (unités impériales)"
+
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Import STL/OBJ/AM&F/3MF"
 msgstr "Importer STL/OBJ/AM&F/3MF"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:118
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:111
 msgid "Import STL/OBJ/AMF/3MF without config, keep plater"
 msgstr "Importer un STL/OBJ/AMF/3MF sans configuration, conserver le plateau"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3422
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:159
+msgid "Importing canceled."
+msgstr "Importation annulée."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:160
+msgid "Importing done."
+msgstr "Importation terminée."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:135
+msgid "Importing SLA archive"
+msgstr "Importation de l'archive SLA"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+msgid "in"
+msgstr "in"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3885
 #, c-format
 msgid "In this mode you can select only other %s Items%s"
 msgstr "Dans ce mode vous ne pouvez sélectionner que d'autres %s Items %s"
@@ -3613,25 +4178,25 @@ msgstr "Dans ce mode vous ne pouvez sélectionner que d'autres %s Items %s"
 msgid "Incompatible bundles:"
 msgstr "Lots incompatibles :"
 
+#: src/slic3r/GUI/PresetComboBoxes.cpp:241
+msgid "Incompatible presets"
+msgstr "Préréglages incompatibles"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75
 #, c-format
 msgid "Incompatible with this %s"
 msgstr "Incompatible avec ce %s"
 
-#: src/slic3r/GUI/Plater.cpp:4685
+#: src/slic3r/GUI/Plater.cpp:4790
 msgid "Increase Instances"
 msgstr "Augmenter les Instances"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:264
+#: src/slic3r/GUI/GLCanvas3D.cpp:251
 msgid "Increase/decrease edit area"
 msgstr "Augmenter/diminuer la zone d'édition"
 
-#: src/slic3r/GUI/Plater.cpp:2922
-msgid "Indexing hollowed object"
-msgstr "Indexation de l'objet évidé"
-
 #. TRN Description for "UNLOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3258
+#: src/slic3r/GUI/Tab.cpp:3695
 msgid ""
 "indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
 "Click the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values."
@@ -3640,12 +4205,12 @@ msgstr ""
 "Cliquez sur l'icône CADENAS OUVERT pour régler tous les paramètres pour le groupe d'options actuel sur les valeurs du système (ou par défaut)."
 
 #. TRN Description for "LOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3254
+#: src/slic3r/GUI/Tab.cpp:3691
 msgid "indicates that the settings are the same as the system (or default) values for the current option group"
 msgstr "indique que les paramètres sont les mêmes que les valeurs système (ou par défaut) pour le groupe d'options en cours"
 
 #. TRN Description for "BACK ARROW"
-#: src/slic3r/GUI/Tab.cpp:3270
+#: src/slic3r/GUI/Tab.cpp:3707
 msgid ""
 "indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
 "Click the BACK ARROW icon to reset all settings for the current option group to the last saved preset."
@@ -3653,419 +4218,475 @@ msgstr ""
 "indique que les paramètres ont été changés et qu'ils ne sont pas identiques au dernier préréglage enregistré du groupe d'options en cours.\n"
 "Cliquez sur l'icône FLÈCHE ARRIÈRE pour restaurer tous les paramètres du groupe d'options en cours avec les valeurs du dernier préréglage enregistré."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:211
-#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96
-#: src/slic3r/GUI/GUI_ObjectList.cpp:614 src/slic3r/GUI/Plater.cpp:527
-#: src/slic3r/GUI/Tab.cpp:1091 src/slic3r/GUI/Tab.cpp:1092
-#: src/libslic3r/PrintConfig.cpp:203 src/libslic3r/PrintConfig.cpp:416
-#: src/libslic3r/PrintConfig.cpp:436 src/libslic3r/PrintConfig.cpp:776
-#: src/libslic3r/PrintConfig.cpp:790 src/libslic3r/PrintConfig.cpp:827
-#: src/libslic3r/PrintConfig.cpp:981 src/libslic3r/PrintConfig.cpp:991
-#: src/libslic3r/PrintConfig.cpp:1009 src/libslic3r/PrintConfig.cpp:1028
-#: src/libslic3r/PrintConfig.cpp:1047 src/libslic3r/PrintConfig.cpp:1728
-#: src/libslic3r/PrintConfig.cpp:1745
+#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:93
+#: src/slic3r/GUI/GUI_ObjectList.cpp:652 src/slic3r/GUI/Plater.cpp:393
+#: src/slic3r/GUI/Tab.cpp:1413 src/slic3r/GUI/Tab.cpp:1414
+#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:450
+#: src/libslic3r/PrintConfig.cpp:472 src/libslic3r/PrintConfig.cpp:812
+#: src/libslic3r/PrintConfig.cpp:826 src/libslic3r/PrintConfig.cpp:863
+#: src/libslic3r/PrintConfig.cpp:1025 src/libslic3r/PrintConfig.cpp:1035
+#: src/libslic3r/PrintConfig.cpp:1053 src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1091 src/libslic3r/PrintConfig.cpp:1843
+#: src/libslic3r/PrintConfig.cpp:1860
 msgid "Infill"
 msgstr "Remplissage"
 
-#: src/slic3r/GUI/PresetHints.cpp:174
+#: src/slic3r/GUI/PresetHints.cpp:173
 msgid "infill"
 msgstr "remplissage"
 
-#: src/libslic3r/PrintConfig.cpp:1021
+#: src/libslic3r/PrintConfig.cpp:1065
 msgid "Infill before perimeters"
 msgstr "Remplissage avant les périmètres"
 
-#: src/libslic3r/PrintConfig.cpp:1001
+#: src/libslic3r/PrintConfig.cpp:1045
 msgid "Infill extruder"
 msgstr "Extrudeur pour le remplissage"
 
-#: src/libslic3r/PrintConfig.cpp:1036
+#: src/libslic3r/PrintConfig.cpp:1080
 msgid "Infill/perimeters overlap"
 msgstr "Chevauchement remplissage/périmètres"
 
-#: src/libslic3r/Print.cpp:1584
+#: src/libslic3r/Print.cpp:1610
 msgid "Infilling layers"
 msgstr "Remplissage des couches"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3430
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3505 src/slic3r/GUI/Plater.cpp:141
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3893
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3968 src/slic3r/GUI/Plater.cpp:147
 msgid "Info"
 msgstr "Info"
 
-#: src/libslic3r/PrintConfig.cpp:1057
+#: src/slic3r/GUI/GUI_App.cpp:1087 src/slic3r/GUI/Tab.cpp:3435
+msgid "Information"
+msgstr "Information"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
+msgid "Infornation"
+msgstr "Information"
+
+#: src/libslic3r/PrintConfig.cpp:1101
 msgid "Inherits profile"
 msgstr "Hérite du profil"
 
-#: src/libslic3r/SLAPrint.cpp:653
+#: src/libslic3r/SLAPrint.cpp:667
 msgid "Initial exposition time is out of printer profile bounds."
 msgstr "Le temps d'exposition initial est en dehors des limites du profil d'imprimante."
 
-#: src/libslic3r/PrintConfig.cpp:2564 src/libslic3r/PrintConfig.cpp:2565
+#: src/libslic3r/PrintConfig.cpp:2707 src/libslic3r/PrintConfig.cpp:2708
 msgid "Initial exposure time"
 msgstr "Temps d'exposition initial"
 
-#: src/libslic3r/PrintConfig.cpp:2482 src/libslic3r/PrintConfig.cpp:2483
+#: src/libslic3r/PrintConfig.cpp:2625 src/libslic3r/PrintConfig.cpp:2626
 msgid "Initial layer height"
 msgstr "Hauteur de couche initiale"
 
-#: src/slic3r/GUI/Field.cpp:204
+#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
 msgid "Input value is out of range"
 msgstr "La valeur entrée est hors plage"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "Inspect / activate configuration snapshots"
 msgstr "Inspecter / activer les instantanés de configuration"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:60
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:216
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
 #, c-format
 msgid "Instance %d"
 msgstr "Instance %d"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2892
 msgid "Instance manipulation"
 msgstr "Manipulation d'instance"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:56
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:58
 msgid "Instances"
 msgstr "Instances"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1091
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3781
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1215
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4244
 msgid "Instances to Separated Objects"
 msgstr "Instances vers les Objets Séparés"
 
-#: src/libslic3r/PrintConfig.cpp:1973
+#: src/libslic3r/PrintConfig.cpp:2115
 msgid "Interface layers"
 msgstr "Couches d'interface"
 
-#: src/libslic3r/PrintConfig.cpp:1957
+#: src/libslic3r/PrintConfig.cpp:2099
 msgid "Interface loops"
 msgstr "Boucles d'interface"
 
-#: src/libslic3r/PrintConfig.cpp:1982
+#: src/libslic3r/PrintConfig.cpp:2124
 msgid "Interface pattern spacing"
 msgstr "Espacement du motif d'interface"
 
-#: src/libslic3r/PrintConfig.cpp:1071
+#: src/libslic3r/PrintConfig.cpp:1115
 msgid "Interface shells"
 msgstr "Coques d'interface"
 
-#: src/libslic3r/Zipper.cpp:84
+#: src/libslic3r/miniz_extension.cpp:143
 msgid "internal error"
 msgstr "erreur interne"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:240 src/libslic3r/ExtrusionEntity.cpp:313
+#: src/slic3r/GUI/GUI_Preview.cpp:304 src/libslic3r/ExtrusionEntity.cpp:317
+#: src/libslic3r/ExtrusionEntity.cpp:342
 msgid "Internal infill"
 msgstr "Remplissage interne"
 
-#: src/slic3r/GUI/Plater.cpp:3106
+#: src/slic3r/GUI/BedShapeDialog.cpp:145
+msgid "Invalid"
+msgstr "Invalide"
+
+#: src/slic3r/GUI/Plater.cpp:2906 src/slic3r/GUI/Plater.cpp:3583
 msgid "Invalid data"
 msgstr "Donnée non valide"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:494 src/slic3r/GUI/BedShapeDialog.cpp:543
-#: src/slic3r/GUI/BedShapeDialog.cpp:566
+#: src/slic3r/GUI/BedShapeDialog.cpp:570 src/slic3r/GUI/BedShapeDialog.cpp:619
+#: src/slic3r/GUI/BedShapeDialog.cpp:642
 msgid "Invalid file format."
 msgstr "Format de fichier non valide."
 
-#: src/libslic3r/Zipper.cpp:80
+#: src/libslic3r/miniz_extension.cpp:139
 msgid "invalid filename"
 msgstr "nom de fichier non valide"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:319
+#: src/slic3r/GUI/ConfigManipulation.cpp:324
 msgid "Invalid Head penetration"
 msgstr "Pénétration de Tête invalide"
 
-#: src/libslic3r/Zipper.cpp:48
+#: src/libslic3r/miniz_extension.cpp:107
 msgid "invalid header or archive is corrupted"
 msgstr "entête non valide ou archive corrompue"
 
-#: src/slic3r/GUI/Field.cpp:195 src/slic3r/GUI/Field.cpp:226
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:376
+#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
+#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
 msgid "Invalid numeric input."
 msgstr "Entrée numérique non valide."
 
-#: src/libslic3r/Zipper.cpp:78
+#: src/libslic3r/miniz_extension.cpp:137
 msgid "invalid parameter"
 msgstr "paramètre non valide"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:332
+#: src/slic3r/GUI/ConfigManipulation.cpp:337
 msgid "Invalid pinhead diameter"
 msgstr "Diamètre de tête d'épingle non valide"
 
+#: src/slic3r/GUI/GUI_ObjectList.cpp:94 src/slic3r/GUI/GUI_ObjectList.cpp:653
+#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1420
+#: src/libslic3r/ExtrusionEntity.cpp:320 src/libslic3r/ExtrusionEntity.cpp:348
+#: src/libslic3r/PrintConfig.cpp:1126 src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1146 src/libslic3r/PrintConfig.cpp:1156
+msgid "Ironing"
+msgstr "Lissage"
+
+#: src/libslic3r/PrintConfig.cpp:1131 src/libslic3r/PrintConfig.cpp:1133
+msgid "Ironing Type"
+msgstr "Type de lissage"
+
+#: src/slic3r/GUI/GUI_App.cpp:243
+msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community."
+msgstr "est basé sur Slic3r par Alessandro Ranellucci et la communauté RepRap."
+
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:258
+#: src/slic3r/GUI/AboutDialog.cpp:283 src/slic3r/GUI/GUI_App.cpp:244
 msgid "is licensed under the"
 msgstr "est sous licence"
 
-#: src/slic3r/GUI/Tab.cpp:2941
-msgid "is not compatible with print profile"
-msgstr "n'est pas compatible avec le profil d'impression"
-
-#: src/slic3r/GUI/Tab.cpp:2940
-msgid "is not compatible with printer"
-msgstr "n'est pas compatible avec l'imprimante"
-
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso"
 msgstr "Isométrique"
 
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso View"
 msgstr "Vue Isométrique"
 
-#: src/slic3r/GUI/Tab.cpp:964
+#: src/slic3r/GUI/Tab.cpp:1282
 msgid "It can't be deleted or modified."
 msgstr "Il ne peut être supprimé ou modifié."
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "It is not allowed to change the file to reload"
 msgstr "Il n'est pas autorisé de modifier le fichier à recharger"
 
-#: src/libslic3r/PrintConfig.cpp:974
+#: src/libslic3r/PrintConfig.cpp:1018
 msgid "It may be beneficial to increase the extruder motor current during the filament exchange sequence to allow for rapid ramming feed rates and to overcome resistance when loading a filament with an ugly shaped tip."
 msgstr "Il peut être intéressant d'augmenter le courant du moteur de l'extrudeur pendant la séquence d'échange de filament pour permettre un débit d'expulsion rapide et pour compenser la résistance lors du chargement d'un filament avec une pointe mal taillée."
 
-#: src/slic3r/GUI/GUI_App.cpp:1084 src/slic3r/GUI/Tab.cpp:2958
+#: src/slic3r/GUI/Tab.cpp:3413
+msgid "It's a last preset for this physical printer."
+msgstr "C'est le dernier préréglage pour cette imprimante physique."
+
+#: src/slic3r/GUI/GUI_App.cpp:1876 src/slic3r/GUI/Tab.cpp:3187
 msgid "It's impossible to print multi-part object(s) with SLA technology."
 msgstr "Il est impossible d'imprimer un (des) objet(s) en plusieurs parties avec la technologie SLA."
 
-#: src/slic3r/GUI/Tab.cpp:2229
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:601
+msgid "It's not possible to delete the last related preset for the printer."
+msgstr "Il n'est pas possible de supprimer le dernier préréglage associé pour l'imprimante."
+
+#: src/slic3r/GUI/Tab.cpp:2398
 msgid "Jerk limits"
 msgstr "Limites de mouvements brusques"
 
-#: src/libslic3r/PrintConfig.cpp:1649
+#: src/libslic3r/PrintConfig.cpp:1757
 msgid "Jitter"
 msgstr "Gigue"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:957 src/slic3r/GUI/DoubleSlider.cpp:1529
-#: src/slic3r/GUI/DoubleSlider.cpp:1651
+#: src/slic3r/GUI/DoubleSlider.cpp:1077 src/slic3r/GUI/DoubleSlider.cpp:1721
+#: src/slic3r/GUI/DoubleSlider.cpp:1852 src/slic3r/GUI/DoubleSlider.cpp:1856
 msgid "Jump to height"
 msgstr "Sauter à la hauteur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:955
+#: src/slic3r/GUI/DoubleSlider.cpp:1075
 #, c-format
 msgid "Jump to height %s or Set extruder sequence for the entire print"
 msgstr "Sauter à la hauteur %s ou Définir la séquence d'extrusion pour toute l'impression"
 
-#: src/libslic3r/PrintConfig.cpp:566
+#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
+msgid "Jump to move"
+msgstr "Sauter pour bouger"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:315
+msgid "Just switch to \"%1%\" preset"
+msgstr "Passez simplement au préréglage \"%1%\""
+
+#: src/libslic3r/PrintConfig.cpp:602
 msgid "Keep fan always on"
 msgstr "Garder le ventilateur toujours actif"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:169
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171
 msgid "Keep lower part"
 msgstr "Garder la partie du bas"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:304
+#: src/slic3r/GUI/GLCanvas3D.cpp:290
 msgid "Keep min"
-msgstr "Garder au minimum"
+msgstr "Conserver min"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:168
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
 msgid "Keep upper part"
 msgstr "Garder la partie du haut"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:37
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:39 src/slic3r/GUI/MainFrame.cpp:941
+#: src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Keyboard Shortcuts"
 msgstr "Raccourcis Clavier"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:245
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:259
 msgid "Keyboard shortcuts"
 msgstr "Raccourcis clavier"
 
-#: src/libslic3r/PrintConfig.cpp:2498
+#: src/libslic3r/PrintConfig.cpp:2641
 msgid "kg"
 msgstr "kg"
 
-#: src/libslic3r/PrintConfig.cpp:965
+#: src/libslic3r/PrintConfig.cpp:1009
 msgid "Label objects"
 msgstr "Marquer les objets"
 
-#: src/libslic3r/PrintConfig.cpp:2399
+#: src/libslic3r/PrintConfig.cpp:2542
 msgid "Landscape"
 msgstr "Paysage"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Language"
 msgstr "Langue"
 
-#: src/slic3r/GUI/GUI_App.cpp:885
+#: src/slic3r/GUI/GUI_App.cpp:1605 src/slic3r/GUI/GUI_App.cpp:1614
 msgid "Language selection"
 msgstr "Sélection de la langue"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2140
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2242
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2307
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2408
 msgid "Last instance of an object cannot be deleted."
 msgstr "La dernière instance d'un objet ne peut être supprimée."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
 msgid "Layer"
 msgstr "Couche"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:49
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1049
+#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 src/slic3r/GUI/Tab.cpp:1371
 #: src/libslic3r/PrintConfig.cpp:71
 msgid "Layer height"
 msgstr "Hauteur de couche"
 
-#: src/libslic3r/Print.cpp:1427
+#: src/libslic3r/Print.cpp:1453
 msgid "Layer height can't be greater than nozzle diameter"
 msgstr "La hauteur de couche ne peut pas être supérieure au diamètre de la buse"
 
-#: src/slic3r/GUI/Tab.cpp:2362
+#: src/slic3r/GUI/Tab.cpp:2531
 msgid "Layer height limits"
 msgstr "Limites de hauteur de couche"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
-msgid "Layer height:"
-msgstr "Hauteur de couche :"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2488
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2880
 msgid "Layer range Settings to modify"
 msgstr "Réglages de zone de Couche à modifier"
 
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52
-#: src/libslic3r/PrintConfig.cpp:362 src/libslic3r/PrintConfig.cpp:994
-#: src/libslic3r/PrintConfig.cpp:1505 src/libslic3r/PrintConfig.cpp:1690
-#: src/libslic3r/PrintConfig.cpp:1750 src/libslic3r/PrintConfig.cpp:1930
-#: src/libslic3r/PrintConfig.cpp:1976
+#: src/libslic3r/PrintConfig.cpp:396 src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1613 src/libslic3r/PrintConfig.cpp:1798
+#: src/libslic3r/PrintConfig.cpp:1865 src/libslic3r/PrintConfig.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:2118
 msgid "layers"
 msgstr "couches"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:67 src/slic3r/GUI/Tab.cpp:3512
-#: src/slic3r/GUI/Tab.cpp:3600
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3928
+#: src/slic3r/GUI/Tab.cpp:4010
 msgid "Layers"
 msgstr "Couches"
 
-#: src/slic3r/GUI/Tab.cpp:1048 src/slic3r/GUI/Tab.cpp:3598
+#: src/slic3r/GUI/Tab.cpp:1370 src/slic3r/GUI/Tab.cpp:4008
 msgid "Layers and perimeters"
 msgstr "Couches et périmètres"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:95
-#: src/slic3r/GUI/GUI_ObjectList.cpp:613 src/libslic3r/PrintConfig.cpp:72
-#: src/libslic3r/PrintConfig.cpp:175 src/libslic3r/PrintConfig.cpp:184
-#: src/libslic3r/PrintConfig.cpp:408 src/libslic3r/PrintConfig.cpp:470
-#: src/libslic3r/PrintConfig.cpp:478 src/libslic3r/PrintConfig.cpp:890
-#: src/libslic3r/PrintConfig.cpp:1075 src/libslic3r/PrintConfig.cpp:1374
-#: src/libslic3r/PrintConfig.cpp:1441 src/libslic3r/PrintConfig.cpp:1622
-#: src/libslic3r/PrintConfig.cpp:2074 src/libslic3r/PrintConfig.cpp:2133
-#: src/libslic3r/PrintConfig.cpp:2142
+#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:92
+#: src/slic3r/GUI/GUI_ObjectList.cpp:651 src/libslic3r/PrintConfig.cpp:72
+#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:218
+#: src/libslic3r/PrintConfig.cpp:442 src/libslic3r/PrintConfig.cpp:506
+#: src/libslic3r/PrintConfig.cpp:514 src/libslic3r/PrintConfig.cpp:932
+#: src/libslic3r/PrintConfig.cpp:1119 src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1549 src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:2217 src/libslic3r/PrintConfig.cpp:2276
+#: src/libslic3r/PrintConfig.cpp:2285
 msgid "Layers and Perimeters"
 msgstr "Couches et Périmètres"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
 msgid "Layers Slider"
 msgstr "Barre de défilement des couches"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Bottom"
 msgstr "Du bas"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Top"
 msgstr "Du haut"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/Preferences.cpp:440
+msgid "Layout Options"
+msgstr "Options de disposition"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:48
+msgid "Leaving Paint-on supports"
+msgstr "Laisser les Supports peints"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:47
+msgid "Leaving Seam painting"
+msgstr "Laisser la Peinture de jointure"
+
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left"
 msgstr "Gauche"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Left click"
 msgstr "Clic gauche"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:237
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:29
+msgid "Left mouse button"
+msgstr "Bouton gauche de la souris"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:233
 msgid "Left mouse button:"
 msgstr "Bouton gauche de souris :"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left View"
 msgstr "Vue Gauche"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:257
+#: src/slic3r/GUI/GUI_Preview.cpp:339
 msgid "Legend"
 msgstr "Légende"
 
-#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1551
+#: src/slic3r/GUI/GUI_Preview.cpp:1480
+msgid "Legend/Estimated printing time"
+msgstr "Légende/Temps d'impression estimé"
+
+#: src/libslic3r/PrintConfig.cpp:1651 src/libslic3r/PrintConfig.cpp:1659
 msgid "Length"
 msgstr "Longueur"
 
-#: src/libslic3r/PrintConfig.cpp:328
+#: src/libslic3r/PrintConfig.cpp:362
 msgid "Length of the cooling tube to limit space for cooling moves inside it."
 msgstr "Longueur du tube de refroidissement pour limiter l'espace pour les déplacements de refroidissement à l'intérieur de celui-ci."
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:129
+#: src/slic3r/GUI/AboutDialog.cpp:141
 msgid "License agreements of all following programs (libraries) are part of application license agreement"
 msgstr "Les contrats de licence de tous les programmes suivants (bibliothèques) font partie de la mise en oeuvre du contrat de licence"
 
-#: src/libslic3r/PrintConfig.cpp:1561
+#: src/libslic3r/PrintConfig.cpp:1669
 msgid "Lift Z"
 msgstr "Levage de l'axe Z"
 
-#: src/libslic3r/PrintConfig.cpp:848
+#: src/libslic3r/PrintConfig.cpp:886
 msgid "Line"
 msgstr "Ligne"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1427
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1558
 msgid "Load"
 msgstr "Charger"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Load a model"
 msgstr "Charger un modèle"
 
-#: src/libslic3r/PrintConfig.cpp:3505
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Load an model saved with imperial units"
+msgstr "Charger un modèle enregistré avec des unités impériales"
+
+#: src/slic3r/GUI/MainFrame.cpp:1058
+msgid "Load an SL1 archive"
+msgstr "Charger une archive SL1"
+
+#: src/libslic3r/PrintConfig.cpp:3710
 msgid "Load and store settings at the given directory. This is useful for maintaining different profiles or including configurations from a network storage."
 msgstr "Charger et stocker les réglages dans le répertoire donné. Ceci est utile pour conserver différents profils ou inclure des configurations depuis un stockage réseau."
 
-#: src/libslic3r/PrintConfig.cpp:3489
+#: src/libslic3r/PrintConfig.cpp:3688
 msgid "Load config file"
 msgstr "Charger le fichier de configuration"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:120
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
 msgid "Load Config from ini/amf/3mf/gcode and merge"
 msgstr "Charger une configuration à partir d'un ini/amf/3mf/gcode et fusionner"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Load configuration from project file"
 msgstr "Charger la configuration depuis le fichier du projet"
 
-#: src/libslic3r/PrintConfig.cpp:3490
+#: src/libslic3r/PrintConfig.cpp:3689
 msgid "Load configuration from the specified file. It can be used more than once to load options from multiple files."
 msgstr "Charger la configuration depuis le fichier spécifié. Ceci peut être utilisé plusieurs fois afin de charger des options depuis plusieurs fichiers."
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Load exported configuration file"
 msgstr "Charger le fichier de configuration exporté"
 
-#: src/slic3r/GUI/Plater.cpp:1395
-msgid "Load File"
-msgstr "Charger le Fichier"
-
-#: src/slic3r/GUI/Plater.cpp:1399
-msgid "Load Files"
-msgstr "Charger les Fichiers"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1879
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2038
 msgid "Load Part"
 msgstr "Charger une Partie"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Load presets from a bundle"
 msgstr "Charger les préréglages à partir d'un lot"
 
-#: src/slic3r/GUI/Plater.cpp:4575
+#: src/slic3r/GUI/Plater.cpp:4627
 msgid "Load Project"
 msgstr "Charger le Projet"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:102
+#: src/slic3r/GUI/BedShapeDialog.cpp:243
 msgid "Load shape from STL..."
 msgstr "Charger une forme depuis un STL..."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:182 src/slic3r/GUI/BedShapeDialog.cpp:261
+#: src/slic3r/GUI/BedShapeDialog.cpp:325 src/slic3r/GUI/BedShapeDialog.cpp:405
 msgid "Load..."
 msgstr "Charger..."
 
@@ -4073,19 +4694,27 @@ msgstr "Charger..."
 msgid "loaded"
 msgstr "chargé"
 
-#: src/slic3r/GUI/Plater.cpp:2426
+#: src/slic3r/GUI/Plater.cpp:2388
 msgid "Loaded"
 msgstr "Chargé"
 
-#: src/slic3r/GUI/Plater.cpp:2273
+#: src/slic3r/GUI/Plater.cpp:2216
 msgid "Loading"
 msgstr "Chargement"
 
-#: src/slic3r/GUI/GUI_App.cpp:474
+#: src/slic3r/GUI/GUI_App.cpp:797
+msgid "Loading configuration"
+msgstr "Chargement de la configuration"
+
+#: src/slic3r/GUI/Plater.cpp:2226
+msgid "Loading file"
+msgstr "Chargement du fichier"
+
+#: src/slic3r/GUI/GUI_App.cpp:1125
 msgid "Loading of a mode view"
 msgstr "Chargement d'un mode de vue"
 
-#: src/slic3r/GUI/GUI_App.cpp:466
+#: src/slic3r/GUI/GUI_App.cpp:1120
 msgid "Loading of current presets"
 msgstr "Chargement de préréglages actuels"
 
@@ -4094,101 +4723,117 @@ msgstr "Chargement de préréglages actuels"
 msgid "Loading repaired model"
 msgstr "Chargement du modèle réparé"
 
-#: src/libslic3r/PrintConfig.cpp:607
+#: src/libslic3r/PrintConfig.cpp:643
 msgid "Loading speed"
 msgstr "Vitesse de chargement"
 
-#: src/libslic3r/PrintConfig.cpp:615
+#: src/libslic3r/PrintConfig.cpp:651
 msgid "Loading speed at the start"
 msgstr "Vitesse de chargement au départ"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:63
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:106
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:69
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:112
 msgid "Local coordinates"
 msgstr "Coordonnées locaux"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
 msgid "Lock supports under new islands"
 msgstr "Verrouiller les supports sous de nouveaux îlots"
 
-#: src/slic3r/GUI/Tab.cpp:3252
+#: src/slic3r/GUI/Tab.cpp:3689
 msgid "LOCKED LOCK"
 msgstr "CADENAS FERMÉ"
 
-#: src/slic3r/GUI/Tab.cpp:3280
+#: src/slic3r/GUI/Tab.cpp:3717
 msgid "LOCKED LOCK icon indicates that the settings are the same as the system (or default) values for the current option group"
 msgstr "L'icône CADENAS FERMÉ indique que les réglages sont les mêmes que les valeurs système (ou par défaut) pour le groupe d'options actuel"
 
-#: src/slic3r/GUI/Tab.cpp:3296
+#: src/slic3r/GUI/Tab.cpp:3733
 msgid "LOCKED LOCK icon indicates that the value is the same as the system (or default) value."
 msgstr "L'icône CADENAS FERMÉ indique que la valeur est la même que la valeur système (ou par défaut)."
 
-#: src/libslic3r/PrintConfig.cpp:3508
+#: src/libslic3r/PrintConfig.cpp:3713
 msgid "Logging level"
 msgstr "Niveau d'enregistrement"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1810
 msgid "Loops (minimum)"
 msgstr "Boucles (minimum)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
 msgid "Lower Layer"
 msgstr "Couche Inférieure"
 
-#: src/slic3r/GUI/Tab.cpp:2188 src/slic3r/GUI/Tab.cpp:2273
-#: src/libslic3r/PrintConfig.cpp:1129 src/libslic3r/PrintConfig.cpp:1146
-#: src/libslic3r/PrintConfig.cpp:1163 src/libslic3r/PrintConfig.cpp:1179
-#: src/libslic3r/PrintConfig.cpp:1189 src/libslic3r/PrintConfig.cpp:1199
-#: src/libslic3r/PrintConfig.cpp:1209
+#: src/slic3r/GUI/Tab.cpp:2346 src/slic3r/GUI/Tab.cpp:2442
+#: src/libslic3r/PrintConfig.cpp:1202 src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1254 src/libslic3r/PrintConfig.cpp:1271
+#: src/libslic3r/PrintConfig.cpp:1287 src/libslic3r/PrintConfig.cpp:1297
+#: src/libslic3r/PrintConfig.cpp:1307 src/libslic3r/PrintConfig.cpp:1317
 msgid "Machine limits"
 msgstr "Limites de la machine"
 
-#: src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:3667
+msgid "Machine limits are not set, therefore the print time estimate may not be accurate."
+msgstr "Les limites de la machine ne sont pas définies, par conséquent l'estimation du temps d'impression peut ne pas être précise."
+
+#: src/slic3r/GUI/Tab.cpp:3660
+msgid "Machine limits will be emitted to G-code and used to estimate print time."
+msgstr "Les limites de la machine seront émises dans le G-code et utilisées pour estimer le temps d'impression."
+
+#: src/slic3r/GUI/Tab.cpp:3663
+msgid "Machine limits will NOT be emitted to G-code, however they will be used to estimate print time, which may therefore not be accurate as the printer may apply a different set of machine limits."
+msgstr "Les limites de la machine NE seront PAS émises dans le G-code, mais elles seront utilisées pour estimer le temps d'impression, ce qui peut donc ne pas être précis car l'imprimante peut appliquer un ensemble différent de limites de la machine."
+
+#: src/slic3r/GUI/Plater.cpp:172
 msgid "Manifold"
 msgstr "Variété"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
 msgid "Manual editing"
 msgstr "Édition manuelle"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:180
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:214
 msgid "Masked SLA file exported to %1%"
 msgstr "Fichier SLA masqué exporté vers %1%"
 
-#: src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1451
 msgid "Mate&rial Settings Tab"
 msgstr "Onglet Réglage&s Matériau"
 
-#: src/slic3r/GUI/Tab.cpp:3478 src/slic3r/GUI/Tab.cpp:3480
+#: src/slic3r/GUI/Tab.cpp:3894 src/slic3r/GUI/Tab.cpp:3896
 msgid "Material"
 msgstr "Matériau"
 
-#: src/slic3r/GUI/Tab.hpp:416
+#: src/slic3r/GUI/Tab.hpp:486
 msgid "Material Settings"
 msgstr "Réglages Matériau"
 
-#: src/slic3r/GUI/Plater.cpp:163
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Material Settings Tab"
+msgstr "Onglet de réglages du matériau"
+
+#: src/slic3r/GUI/Plater.cpp:169
 msgid "Materials"
 msgstr "Matériaux"
 
-#: src/libslic3r/PrintConfig.cpp:1217 src/libslic3r/PrintConfig.cpp:1226
+#: src/libslic3r/PrintConfig.cpp:1325 src/libslic3r/PrintConfig.cpp:1334
 msgid "Max"
 msgstr "Maximum"
 
-#: src/libslic3r/PrintConfig.cpp:2734
+#: src/libslic3r/PrintConfig.cpp:2898
 msgid "Max bridge length"
 msgstr "Longueur maximum de pont"
 
-#: src/libslic3r/PrintConfig.cpp:2658
+#: src/libslic3r/PrintConfig.cpp:2812
 msgid "Max bridges on a pillar"
 msgstr "Nombre de ponts maximum par pilier"
 
-#: src/libslic3r/PrintConfig.cpp:2822
+#: src/libslic3r/PrintConfig.cpp:2986
 msgid "Max merge distance"
 msgstr "Distance maximum de fusion"
 
-#: src/libslic3r/PrintConfig.cpp:2743
+#: src/libslic3r/PrintConfig.cpp:2907
 msgid "Max pillar linking distance"
 msgstr "Distance maximum de jonction de pilier"
 
@@ -4196,7 +4841,7 @@ msgstr "Distance maximum de jonction de pilier"
 msgid "Max print height"
 msgstr "Hauteur maximale d'impression"
 
-#: src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1345
 msgid "Max print speed"
 msgstr "Vitesse d'impression maximale"
 
@@ -4204,171 +4849,189 @@ msgstr "Vitesse d'impression maximale"
 msgid "max PrusaSlicer version"
 msgstr "Version maximum de PrusaSlicer"
 
-#: src/libslic3r/PrintConfig.cpp:1268
+#: src/libslic3r/PrintConfig.cpp:1376
 msgid "Max volumetric slope negative"
 msgstr "Pente volumétrique négative maximum"
 
-#: src/libslic3r/PrintConfig.cpp:1257
+#: src/libslic3r/PrintConfig.cpp:1365
 msgid "Max volumetric slope positive"
 msgstr "Pente volumétrique positive maximum"
 
-#: src/libslic3r/PrintConfig.cpp:597 src/libslic3r/PrintConfig.cpp:1247
+#: src/libslic3r/PrintConfig.cpp:633 src/libslic3r/PrintConfig.cpp:1355
 msgid "Max volumetric speed"
 msgstr "Vitesse volumétrique maximale"
 
-#: src/libslic3r/PrintConfig.cpp:2268
+#: src/libslic3r/PrintConfig.cpp:2411
 msgid "Maximal bridging distance"
 msgstr "Distance maximale de pont"
 
-#: src/libslic3r/PrintConfig.cpp:2269
+#: src/libslic3r/PrintConfig.cpp:2412
 msgid "Maximal distance between supports on sparse infill sections."
 msgstr "Distance maximale entre les supports sur les sections de remplissage épars."
 
-#: src/libslic3r/PrintConfig.cpp:1145
+#: src/libslic3r/PrintConfig.cpp:1253
 msgid "Maximum acceleration E"
 msgstr "Accélérations maximum E"
 
-#: src/libslic3r/PrintConfig.cpp:1151
+#: src/libslic3r/PrintConfig.cpp:1259
 msgid "Maximum acceleration of the E axis"
 msgstr "Accélération maximum de l'axe E"
 
-#: src/libslic3r/PrintConfig.cpp:1148
+#: src/libslic3r/PrintConfig.cpp:1256
 msgid "Maximum acceleration of the X axis"
 msgstr "Accélération maximum de l'axe X"
 
-#: src/libslic3r/PrintConfig.cpp:1149
+#: src/libslic3r/PrintConfig.cpp:1257
 msgid "Maximum acceleration of the Y axis"
 msgstr "Accélération maximum de l'axe Y"
 
-#: src/libslic3r/PrintConfig.cpp:1150
+#: src/libslic3r/PrintConfig.cpp:1258
 msgid "Maximum acceleration of the Z axis"
 msgstr "Accélération maximum de l'axe Z"
 
-#: src/libslic3r/PrintConfig.cpp:1198
+#: src/libslic3r/PrintConfig.cpp:1306
 msgid "Maximum acceleration when extruding"
 msgstr "Accélération maximum lors de l'extrusion"
 
-#: src/libslic3r/PrintConfig.cpp:1200
+#: src/libslic3r/PrintConfig.cpp:1308
 msgid "Maximum acceleration when extruding (M204 S)"
 msgstr "Accélération maximum lors de l'extrusion (M204 S)"
 
-#: src/libslic3r/PrintConfig.cpp:1208
+#: src/libslic3r/PrintConfig.cpp:1316
 msgid "Maximum acceleration when retracting"
 msgstr "Accélération maximum lors de la rétraction"
 
-#: src/libslic3r/PrintConfig.cpp:1210
+#: src/libslic3r/PrintConfig.cpp:1318
 msgid "Maximum acceleration when retracting (M204 T)"
 msgstr "Accélération maximum lors de la rétraction (M204 T)"
 
-#: src/libslic3r/PrintConfig.cpp:1142
+#: src/libslic3r/PrintConfig.cpp:1250
 msgid "Maximum acceleration X"
 msgstr "Accélérations maximum X"
 
-#: src/libslic3r/PrintConfig.cpp:1143
+#: src/libslic3r/PrintConfig.cpp:1251
 msgid "Maximum acceleration Y"
 msgstr "Accélérations maximum Y"
 
-#: src/libslic3r/PrintConfig.cpp:1144
+#: src/libslic3r/PrintConfig.cpp:1252
 msgid "Maximum acceleration Z"
 msgstr "Accélérations maximum Z"
 
-#: src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2391
 msgid "Maximum accelerations"
 msgstr "Accélérations maximum"
 
-#: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2534
+#: src/libslic3r/PrintConfig.cpp:2676 src/libslic3r/PrintConfig.cpp:2677
 msgid "Maximum exposure time"
 msgstr "Temps d'exposition maximum"
 
-#: src/libslic3r/PrintConfig.cpp:1128
+#: src/libslic3r/PrintConfig.cpp:1236
 msgid "Maximum feedrate E"
 msgstr "Vitesse d'avance maximum en E"
 
-#: src/libslic3r/PrintConfig.cpp:1134
+#: src/libslic3r/PrintConfig.cpp:1242
 msgid "Maximum feedrate of the E axis"
 msgstr "Vitesse d'avance maximum de l'axe E"
 
-#: src/libslic3r/PrintConfig.cpp:1131
+#: src/libslic3r/PrintConfig.cpp:1239
 msgid "Maximum feedrate of the X axis"
 msgstr "Vitesse d'avance maximum de l'axe X"
 
-#: src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1240
 msgid "Maximum feedrate of the Y axis"
 msgstr "Vitesse d'avance maximum de l'axe Y"
 
-#: src/libslic3r/PrintConfig.cpp:1133
+#: src/libslic3r/PrintConfig.cpp:1241
 msgid "Maximum feedrate of the Z axis"
 msgstr "Vitesse d'avance maximum de l'axe Z"
 
-#: src/libslic3r/PrintConfig.cpp:1125
+#: src/libslic3r/PrintConfig.cpp:1233
 msgid "Maximum feedrate X"
 msgstr "Vitesse d'avance maximum en X"
 
-#: src/libslic3r/PrintConfig.cpp:1126
+#: src/libslic3r/PrintConfig.cpp:1234
 msgid "Maximum feedrate Y"
 msgstr "Vitesse d'avance maximum en Y"
 
-#: src/libslic3r/PrintConfig.cpp:1127
+#: src/libslic3r/PrintConfig.cpp:1235
 msgid "Maximum feedrate Z"
 msgstr "Vitesse d'avance maximum en Z"
 
-#: src/slic3r/GUI/Tab.cpp:2217
+#: src/slic3r/GUI/Tab.cpp:2386
 msgid "Maximum feedrates"
 msgstr "Vitesses d'avance maximum"
 
-#: src/libslic3r/PrintConfig.cpp:2556 src/libslic3r/PrintConfig.cpp:2557
+#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2700
 msgid "Maximum initial exposure time"
 msgstr "Temps d'exposition initiale Maximum"
 
-#: src/libslic3r/PrintConfig.cpp:1162
+#: src/libslic3r/PrintConfig.cpp:1270
 msgid "Maximum jerk E"
 msgstr "Mouvement brusque maximum E"
 
-#: src/libslic3r/PrintConfig.cpp:1168
+#: src/libslic3r/PrintConfig.cpp:1276
 msgid "Maximum jerk of the E axis"
 msgstr "Mouvement brusque maximum de l'axe E"
 
-#: src/libslic3r/PrintConfig.cpp:1165
+#: src/libslic3r/PrintConfig.cpp:1273
 msgid "Maximum jerk of the X axis"
 msgstr "Mouvement brusque maximum de l'axe X"
 
-#: src/libslic3r/PrintConfig.cpp:1166
+#: src/libslic3r/PrintConfig.cpp:1274
 msgid "Maximum jerk of the Y axis"
 msgstr "Mouvement brusque maximum de l'axe Y"
 
-#: src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1275
 msgid "Maximum jerk of the Z axis"
 msgstr "Mouvement brusque maximum de l'axe Z"
 
-#: src/libslic3r/PrintConfig.cpp:1159
+#: src/libslic3r/PrintConfig.cpp:1267
 msgid "Maximum jerk X"
 msgstr "Mouvement brusque maximum X"
 
-#: src/libslic3r/PrintConfig.cpp:1160
+#: src/libslic3r/PrintConfig.cpp:1268
 msgid "Maximum jerk Y"
 msgstr "Mouvement brusque maximum Y"
 
-#: src/libslic3r/PrintConfig.cpp:1161
+#: src/libslic3r/PrintConfig.cpp:1269
 msgid "Maximum jerk Z"
 msgstr "Mouvement brusque maximum Z"
 
-#: src/libslic3r/PrintConfig.cpp:2660
+#: src/libslic3r/PrintConfig.cpp:2814
 msgid "Maximum number of bridges that can be placed on a pillar. Bridges hold support point pinheads and connect to pillars as small branches."
 msgstr "Le nombre de ponts maximum pouvant être placés sur un pilier. Les ponts soutiennent les têtes des points de support et sont connectés aux piliers comme de petites branches."
 
-#: src/libslic3r/PrintConfig.cpp:598
+#: src/libslic3r/PrintConfig.cpp:634
 msgid "Maximum volumetric speed allowed for this filament. Limits the maximum volumetric speed of a print to the minimum of print and filament volumetric speed. Set to zero for no limit."
 msgstr "Vitesse volumétrique maximale autorisée pour ce filament. Limite la vitesse volumétrique d'une impression au minimum des vitesses volumétriques d'impression et de filament. Mettez à zéro pour enlever la limite."
 
-#: src/libslic3r/PrintConfig.cpp:3442
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2569 src/libslic3r/PrintConfig.cpp:3641
 msgid "Merge"
 msgstr "Fusionner"
 
-#: src/libslic3r/PrintConfig.cpp:2683
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2660
+msgid "Merge all parts to the one single object"
+msgstr "Fusionner toutes les pièces en un seul objet"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+msgid "Merge objects to the one multipart object"
+msgstr "Fusionner des objets en un seul objet multi-pièces"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+msgid "Merge objects to the one single object"
+msgstr "Fusionner des objets en un seul objet"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2576
+msgid "Merged"
+msgstr "Fusionné"
+
+#: src/libslic3r/PrintConfig.cpp:2847
 msgid "Merging bridges or pillars into another pillars can increase the radius. Zero means no increase, one means full increase."
 msgstr "Le fait de fusionner des ponts ou des piliers avec d'autres piliers peut augmenter le rayon. Zéro signifie aucune augmentation, un signifie augmentation totale."
 
-#: src/libslic3r/SLAPrintSteps.cpp:64
+#: src/libslic3r/SLAPrintSteps.cpp:65
 msgid "Merging slices and calculating statistics"
 msgstr "Fusion des tranches et calcul des statistiques"
 
@@ -4376,15 +5039,15 @@ msgstr "Fusion des tranches et calcul des statistiques"
 msgid "Mesh repair failed."
 msgstr "Échec de la réparation du maillage."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1635
+#: src/slic3r/GUI/DoubleSlider.cpp:1831
 msgid "Message for pause print on current layer (%1% mm)."
 msgstr "Message pour mettre en pause l'impression sur la couche en cours (%1% mm)."
 
-#: src/libslic3r/PrintConfig.cpp:1280 src/libslic3r/PrintConfig.cpp:1289
+#: src/libslic3r/PrintConfig.cpp:1388 src/libslic3r/PrintConfig.cpp:1397
 msgid "Min"
 msgstr "Minimum"
 
-#: src/libslic3r/PrintConfig.cpp:1298
+#: src/libslic3r/PrintConfig.cpp:1406
 msgid "Min print speed"
 msgstr "Vitesse d'impression minimale"
 
@@ -4392,232 +5055,237 @@ msgstr "Vitesse d'impression minimale"
 msgid "min PrusaSlicer version"
 msgstr "Version minimum de PrusaSlicer"
 
-#: src/libslic3r/PrintConfig.cpp:2772
+#: src/libslic3r/PrintConfig.cpp:2936
 msgid "Minimal distance of the support points"
 msgstr "Distance minimale des points de support"
 
-#: src/libslic3r/PrintConfig.cpp:1306
+#: src/libslic3r/PrintConfig.cpp:1414
 msgid "Minimal filament extrusion length"
 msgstr "Longueur minimale d'extrusion de filament"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
 msgid "Minimal points distance"
 msgstr "Distance minimale des points"
 
-#: src/libslic3r/PrintConfig.cpp:667
+#: src/libslic3r/PrintConfig.cpp:703
 msgid "Minimal purge on wipe tower"
 msgstr "Purge minimale sur la tour de nettoyage"
 
-#: src/libslic3r/PrintConfig.cpp:187
+#: src/libslic3r/PrintConfig.cpp:221
 msgid "Minimum bottom shell thickness"
 msgstr "Épaisseur minimale de la coque inférieure"
 
-#: src/slic3r/GUI/PresetHints.cpp:339
+#: src/slic3r/GUI/PresetHints.cpp:337
 msgid "Minimum bottom shell thickness is %1% mm."
 msgstr "L'épaisseur minimale de la coque inférieure est de %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1512
+#: src/libslic3r/PrintConfig.cpp:1620
 msgid "Minimum detail resolution, used to simplify the input file for speeding up the slicing job and reducing memory usage. High-resolution models often carry more detail than printers can render. Set to zero to disable any simplification and use full resolution from input."
 msgstr "Résolution minimale pour les détails, utilisée pour simplifier le fichier d'entrée afin d'accélérer le découpage et de réduire l'utilisation de la mémoire. Les modèles haute-résolution possèdent souvent plus de détails que ce que les imprimantes peuvent produire. Mettez à zéro pour désactiver toute simplification et utiliser la résolution complète de l'entrée."
 
-#: src/libslic3r/PrintConfig.cpp:2525 src/libslic3r/PrintConfig.cpp:2526
+#: src/libslic3r/PrintConfig.cpp:2668 src/libslic3r/PrintConfig.cpp:2669
 msgid "Minimum exposure time"
 msgstr "Temps d'exposition minimum"
 
-#: src/libslic3r/PrintConfig.cpp:1178
+#: src/libslic3r/PrintConfig.cpp:1286
 msgid "Minimum feedrate when extruding"
 msgstr "Vitesse d'avance minimum lors de l'extrusion"
 
-#: src/libslic3r/PrintConfig.cpp:1180
+#: src/libslic3r/PrintConfig.cpp:1288
 msgid "Minimum feedrate when extruding (M205 S)"
 msgstr "Vitesse d'avance minimum lors de l'extrusion (M205 S)"
 
-#: src/slic3r/GUI/Tab.cpp:2234
+#: src/slic3r/GUI/Tab.cpp:2403
 msgid "Minimum feedrates"
 msgstr "Vitesses d'avance minimum"
 
-#: src/libslic3r/PrintConfig.cpp:2548 src/libslic3r/PrintConfig.cpp:2549
+#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2692
 msgid "Minimum initial exposure time"
 msgstr "Temps d'exposition initiale minimum"
 
-#: src/slic3r/GUI/Tab.cpp:1069
+#: src/slic3r/GUI/Tab.cpp:1391
 msgid "Minimum shell thickness"
 msgstr "Épaisseur de coque minimale"
 
-#: src/libslic3r/PrintConfig.cpp:1787 src/libslic3r/PrintConfig.cpp:1788
+#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1903
 msgid "Minimum thickness of a top / bottom shell"
 msgstr "Épaisseur minimale d'une coque supérieure/inférieure"
 
-#: src/libslic3r/PrintConfig.cpp:2146
+#: src/libslic3r/PrintConfig.cpp:2289
 msgid "Minimum top shell thickness"
 msgstr "Épaisseur minimale de la coque supérieure"
 
-#: src/slic3r/GUI/PresetHints.cpp:320
+#: src/slic3r/GUI/PresetHints.cpp:318
 msgid "Minimum top shell thickness is %1% mm."
 msgstr "L'épaisseur minimale de la coque supérieure est de %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1522
+#: src/libslic3r/PrintConfig.cpp:1630
 msgid "Minimum travel after retraction"
 msgstr "Trajet minimal après une rétraction"
 
-#: src/libslic3r/PrintConfig.cpp:1188
+#: src/libslic3r/PrintConfig.cpp:1296
 msgid "Minimum travel feedrate"
 msgstr "Vitesse d'avance minimum en déplacement"
 
-#: src/libslic3r/PrintConfig.cpp:1190
+#: src/libslic3r/PrintConfig.cpp:1298
 msgid "Minimum travel feedrate (M205 T)"
 msgstr "Vitesse d'avance minimum en déplacement (M205 T)"
 
-#: src/libslic3r/PrintConfig.cpp:2917
+#: src/libslic3r/PrintConfig.cpp:3081
 msgid "Minimum wall thickness of a hollowed model."
 msgstr "Épaisseur de paroi minimale d'un modèle évidé."
 
-#: src/libslic3r/PrintConfig.cpp:2449
+#: src/libslic3r/PrintConfig.cpp:2592
 msgid "Minimum width of features to maintain when doing elephant foot compensation."
 msgstr "Largeur minimum des caractéristiques à maintenir lorsque vous pratiquez une compensation de pied d'éléphant."
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror"
 msgstr "Symétrie"
 
-#: src/libslic3r/PrintConfig.cpp:2379
+#: src/libslic3r/PrintConfig.cpp:2522
 msgid "Mirror horizontally"
 msgstr "Symétriser horizontalement"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2053
+#: src/slic3r/GUI/GLCanvas3D.cpp:2226
 msgid "Mirror Object"
 msgstr "Symétriser l'Objet"
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror the selected object"
 msgstr "Symétriser l'objet sélectionné"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Mirror the selected object along the X axis"
 msgstr "Symétriser l'objet sélectionné selon l'axe X"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Mirror the selected object along the Y axis"
 msgstr "Symétriser l'objet sélectionné selon l'axe Y"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Mirror the selected object along the Z axis"
 msgstr "Symétriser l'objet sélectionné selon l'axe Z"
 
-#: src/libslic3r/PrintConfig.cpp:2386
+#: src/libslic3r/PrintConfig.cpp:2529
 msgid "Mirror vertically"
 msgstr "Symétriser verticalement"
 
-#: src/slic3r/Utils/AstroBox.cpp:68 src/slic3r/Utils/OctoPrint.cpp:68
+#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:68
 #, c-format
 msgid "Mismatched type of print host: %s"
 msgstr "Mauvais appariement de l'hôte d'impression : %s"
 
-#: src/libslic3r/ExtrusionEntity.cpp:323
+#: src/libslic3r/ExtrusionEntity.cpp:328 src/libslic3r/ExtrusionEntity.cpp:364
 msgid "Mixed"
 msgstr "Mélangé"
 
-#: src/libslic3r/PrintConfig.cpp:2491
+#: src/libslic3r/PrintConfig.cpp:2634
 msgid "ml"
 msgstr "ml"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:92 src/slic3r/GUI/ConfigWizard.cpp:218
-#: src/slic3r/GUI/ConfigWizard.cpp:970 src/slic3r/GUI/ConfigWizard.cpp:984
+#: src/slic3r/GUI/BedShapeDialog.cpp:129 src/slic3r/GUI/ConfigWizard.cpp:236
+#: src/slic3r/GUI/ConfigWizard.cpp:1336 src/slic3r/GUI/ConfigWizard.cpp:1350
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:135
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:333
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/GCodeViewer.cpp:2183 src/slic3r/GUI/GCodeViewer.cpp:2189
+#: src/slic3r/GUI/GCodeViewer.cpp:2197 src/slic3r/GUI/GUI_ObjectLayers.cpp:145
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 #: src/slic3r/GUI/WipeTowerDialog.cpp:85 src/libslic3r/PrintConfig.cpp:75
-#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:91
-#: src/libslic3r/PrintConfig.cpp:122 src/libslic3r/PrintConfig.cpp:188
-#: src/libslic3r/PrintConfig.cpp:246 src/libslic3r/PrintConfig.cpp:321
-#: src/libslic3r/PrintConfig.cpp:329 src/libslic3r/PrintConfig.cpp:379
-#: src/libslic3r/PrintConfig.cpp:505 src/libslic3r/PrintConfig.cpp:516
-#: src/libslic3r/PrintConfig.cpp:534 src/libslic3r/PrintConfig.cpp:712
-#: src/libslic3r/PrintConfig.cpp:1231 src/libslic3r/PrintConfig.cpp:1292
-#: src/libslic3r/PrintConfig.cpp:1310 src/libslic3r/PrintConfig.cpp:1328
-#: src/libslic3r/PrintConfig.cpp:1384 src/libslic3r/PrintConfig.cpp:1394
-#: src/libslic3r/PrintConfig.cpp:1516 src/libslic3r/PrintConfig.cpp:1524
-#: src/libslic3r/PrintConfig.cpp:1565 src/libslic3r/PrintConfig.cpp:1573
-#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1591
-#: src/libslic3r/PrintConfig.cpp:1599 src/libslic3r/PrintConfig.cpp:1682
-#: src/libslic3r/PrintConfig.cpp:1914 src/libslic3r/PrintConfig.cpp:1985
-#: src/libslic3r/PrintConfig.cpp:2019 src/libslic3r/PrintConfig.cpp:2147
-#: src/libslic3r/PrintConfig.cpp:2226 src/libslic3r/PrintConfig.cpp:2233
-#: src/libslic3r/PrintConfig.cpp:2240 src/libslic3r/PrintConfig.cpp:2270
-#: src/libslic3r/PrintConfig.cpp:2280 src/libslic3r/PrintConfig.cpp:2290
-#: src/libslic3r/PrintConfig.cpp:2450 src/libslic3r/PrintConfig.cpp:2484
-#: src/libslic3r/PrintConfig.cpp:2623 src/libslic3r/PrintConfig.cpp:2632
-#: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2651
-#: src/libslic3r/PrintConfig.cpp:2695 src/libslic3r/PrintConfig.cpp:2705
-#: src/libslic3r/PrintConfig.cpp:2717 src/libslic3r/PrintConfig.cpp:2737
-#: src/libslic3r/PrintConfig.cpp:2747 src/libslic3r/PrintConfig.cpp:2757
-#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2790
-#: src/libslic3r/PrintConfig.cpp:2804 src/libslic3r/PrintConfig.cpp:2815
-#: src/libslic3r/PrintConfig.cpp:2828 src/libslic3r/PrintConfig.cpp:2873
-#: src/libslic3r/PrintConfig.cpp:2883 src/libslic3r/PrintConfig.cpp:2892
-#: src/libslic3r/PrintConfig.cpp:2902 src/libslic3r/PrintConfig.cpp:2918
-#: src/libslic3r/PrintConfig.cpp:2942
+#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:93
+#: src/libslic3r/PrintConfig.cpp:124 src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:280 src/libslic3r/PrintConfig.cpp:355
+#: src/libslic3r/PrintConfig.cpp:363 src/libslic3r/PrintConfig.cpp:413
+#: src/libslic3r/PrintConfig.cpp:541 src/libslic3r/PrintConfig.cpp:552
+#: src/libslic3r/PrintConfig.cpp:570 src/libslic3r/PrintConfig.cpp:748
+#: src/libslic3r/PrintConfig.cpp:1158 src/libslic3r/PrintConfig.cpp:1339
+#: src/libslic3r/PrintConfig.cpp:1400 src/libslic3r/PrintConfig.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:1436 src/libslic3r/PrintConfig.cpp:1492
+#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1624
+#: src/libslic3r/PrintConfig.cpp:1632 src/libslic3r/PrintConfig.cpp:1673
+#: src/libslic3r/PrintConfig.cpp:1681 src/libslic3r/PrintConfig.cpp:1691
+#: src/libslic3r/PrintConfig.cpp:1699 src/libslic3r/PrintConfig.cpp:1707
+#: src/libslic3r/PrintConfig.cpp:1790 src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2127 src/libslic3r/PrintConfig.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:2290 src/libslic3r/PrintConfig.cpp:2369
+#: src/libslic3r/PrintConfig.cpp:2376 src/libslic3r/PrintConfig.cpp:2383
+#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2433 src/libslic3r/PrintConfig.cpp:2593
+#: src/libslic3r/PrintConfig.cpp:2627 src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2784
+#: src/libslic3r/PrintConfig.cpp:2794 src/libslic3r/PrintConfig.cpp:2859
+#: src/libslic3r/PrintConfig.cpp:2869 src/libslic3r/PrintConfig.cpp:2881
+#: src/libslic3r/PrintConfig.cpp:2901 src/libslic3r/PrintConfig.cpp:2911
+#: src/libslic3r/PrintConfig.cpp:2921 src/libslic3r/PrintConfig.cpp:2939
+#: src/libslic3r/PrintConfig.cpp:2954 src/libslic3r/PrintConfig.cpp:2968
+#: src/libslic3r/PrintConfig.cpp:2979 src/libslic3r/PrintConfig.cpp:2992
+#: src/libslic3r/PrintConfig.cpp:3037 src/libslic3r/PrintConfig.cpp:3047
+#: src/libslic3r/PrintConfig.cpp:3056 src/libslic3r/PrintConfig.cpp:3066
+#: src/libslic3r/PrintConfig.cpp:3082 src/libslic3r/PrintConfig.cpp:3106
 msgid "mm"
 msgstr "mm"
 
-#: src/libslic3r/PrintConfig.cpp:1547 src/libslic3r/PrintConfig.cpp:1556
+#: src/libslic3r/PrintConfig.cpp:1655 src/libslic3r/PrintConfig.cpp:1664
 msgid "mm (zero to disable)"
 msgstr "mm (zéro pour désactiver)"
 
-#: src/libslic3r/PrintConfig.cpp:451 src/libslic3r/PrintConfig.cpp:560
-#: src/libslic3r/PrintConfig.cpp:882 src/libslic3r/PrintConfig.cpp:895
-#: src/libslic3r/PrintConfig.cpp:1015 src/libslic3r/PrintConfig.cpp:1041
-#: src/libslic3r/PrintConfig.cpp:1423 src/libslic3r/PrintConfig.cpp:1761
-#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:1951
-#: src/libslic3r/PrintConfig.cpp:2111
+#: src/libslic3r/PrintConfig.cpp:487 src/libslic3r/PrintConfig.cpp:596
+#: src/libslic3r/PrintConfig.cpp:924 src/libslic3r/PrintConfig.cpp:937
+#: src/libslic3r/PrintConfig.cpp:1059 src/libslic3r/PrintConfig.cpp:1085
+#: src/libslic3r/PrintConfig.cpp:1531 src/libslic3r/PrintConfig.cpp:1876
+#: src/libslic3r/PrintConfig.cpp:2025 src/libslic3r/PrintConfig.cpp:2093
+#: src/libslic3r/PrintConfig.cpp:2254
 msgid "mm or %"
 msgstr "mm ou %"
 
-#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:609
-#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:626
-#: src/libslic3r/PrintConfig.cpp:634 src/libslic3r/PrintConfig.cpp:661
-#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:922
-#: src/libslic3r/PrintConfig.cpp:1050 src/libslic3r/PrintConfig.cpp:1135
-#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1181
-#: src/libslic3r/PrintConfig.cpp:1191 src/libslic3r/PrintConfig.cpp:1241
-#: src/libslic3r/PrintConfig.cpp:1300 src/libslic3r/PrintConfig.cpp:1433
-#: src/libslic3r/PrintConfig.cpp:1607 src/libslic3r/PrintConfig.cpp:1616
-#: src/libslic3r/PrintConfig.cpp:2028 src/libslic3r/PrintConfig.cpp:2154
+#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
+#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
+#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
+#: src/libslic3r/PrintConfig.cpp:716 src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1094 src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1243 src/libslic3r/PrintConfig.cpp:1277
+#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1349 src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1541 src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1724 src/libslic3r/PrintConfig.cpp:2170
+#: src/libslic3r/PrintConfig.cpp:2297
 msgid "mm/s"
 msgstr "mm/s"
 
-#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:904
-#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1772
-#: src/libslic3r/PrintConfig.cpp:1995 src/libslic3r/PrintConfig.cpp:2124
+#: src/libslic3r/PrintConfig.cpp:498 src/libslic3r/PrintConfig.cpp:946
+#: src/libslic3r/PrintConfig.cpp:1835 src/libslic3r/PrintConfig.cpp:1887
+#: src/libslic3r/PrintConfig.cpp:2137 src/libslic3r/PrintConfig.cpp:2267
 msgid "mm/s or %"
 msgstr "mm/s ou %"
 
-#: src/libslic3r/PrintConfig.cpp:196 src/libslic3r/PrintConfig.cpp:339
-#: src/libslic3r/PrintConfig.cpp:862 src/libslic3r/PrintConfig.cpp:984
-#: src/libslic3r/PrintConfig.cpp:1152 src/libslic3r/PrintConfig.cpp:1201
-#: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1403
+#: src/libslic3r/PrintConfig.cpp:230 src/libslic3r/PrintConfig.cpp:373
+#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:1028
+#: src/libslic3r/PrintConfig.cpp:1260 src/libslic3r/PrintConfig.cpp:1309
+#: src/libslic3r/PrintConfig.cpp:1319 src/libslic3r/PrintConfig.cpp:1511
 msgid "mm/s²"
 msgstr "mm/s²"
 
-#: src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:1845
 msgid "mm²"
 msgstr "mm²"
 
-#: src/libslic3r/PrintConfig.cpp:672
+#: src/libslic3r/PrintConfig.cpp:708
 msgid "mm³"
 msgstr "mm³"
 
-#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:601
-#: src/libslic3r/PrintConfig.cpp:1250
+#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1358
 msgid "mm³/s"
 msgstr "mm³/s"
 
-#: src/libslic3r/PrintConfig.cpp:1262 src/libslic3r/PrintConfig.cpp:1273
+#: src/libslic3r/PrintConfig.cpp:1370 src/libslic3r/PrintConfig.cpp:1381
 msgid "mm³/s²"
 msgstr "mm³/s²"
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:1512
 msgid "Mode"
 msgstr "&Mode"
 
@@ -4625,7 +5293,7 @@ msgstr "&Mode"
 msgid "model"
 msgstr "modèle"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:251
+#: src/slic3r/GUI/BedShapeDialog.cpp:395
 msgid "Model"
 msgstr "Modèle"
 
@@ -4654,99 +5322,125 @@ msgstr "Réparation du modèle terminée"
 msgid "Model repaired successfully"
 msgstr "Réparation du modèle réussie"
 
-#: src/slic3r/GUI/Tab.cpp:979
+#: src/slic3r/GUI/GUI_App.cpp:1506 src/slic3r/GUI/wxExtensions.cpp:675
+msgctxt "Mode"
+msgid "Advanced"
+msgstr "Avancé"
+
+#: src/slic3r/GUI/Tab.cpp:1241
 msgid "Modifications to the current profile will be saved."
 msgstr "Les modifications du profil actuel vont être sauvegardées."
 
-#: src/slic3r/GUI/Preset.cpp:247
+#: src/slic3r/GUI/GUI_App.cpp:1425
 msgid "modified"
 msgstr "modifié"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Modifier"
 msgstr "Modificateur"
 
-#: src/slic3r/GUI/Tab.cpp:1161
+#: src/slic3r/GUI/Tab.cpp:1491
 msgid "Modifiers"
 msgstr "Modificateurs"
 
-#: src/libslic3r/PrintConfig.cpp:2512
+#: src/libslic3r/PrintConfig.cpp:2655
 msgid "money/bottle"
 msgstr "prix/bouteille"
 
-#: src/libslic3r/PrintConfig.cpp:762
+#: src/libslic3r/PrintConfig.cpp:798
 msgid "money/kg"
 msgstr "€/kg"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/libslic3r/PrintConfig.cpp:461
+msgid "Monotonic"
+msgstr "Monotone"
+
+#: src/slic3r/GUI/NotificationManager.cpp:305
+#: src/slic3r/GUI/NotificationManager.cpp:315
+msgid "More"
+msgstr "Plus"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Mouse wheel"
 msgstr "Roulette de la souris"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:261
+#: src/slic3r/GUI/GLCanvas3D.cpp:249
 msgid "Mouse wheel:"
 msgstr "Roulette de la souris:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:64
 msgid "Move"
 msgstr "Déplacer"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Move clipping plane"
 msgstr "Déplacer le plan de coupe"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Move current slider thumb Down"
 msgstr "Déplacer le curseur actuel vers le bas"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
+msgid "Move current slider thumb Left"
+msgstr "Déplacer le curseur actuel vers la gauche"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
+msgid "Move current slider thumb Right"
+msgstr "Déplacer le curseur actuel vers la droite"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Move current slider thumb Up"
 msgstr "Déplacer le curseur actuel vers le haut"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:1059
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:835
 msgid "Move drainage hole"
 msgstr "Déplacer le trou de drainage"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3505
+#: src/slic3r/GUI/GLCanvas3D.cpp:3810
 msgid "Move Object"
 msgstr "Déplacer l'Objet"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
 msgid "Move point"
 msgstr "Déplacer le point"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
 msgid "Move selection 10 mm in negative X direction"
 msgstr "Déplacer la sélection de 10 mm dans la direction négative X"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
 msgid "Move selection 10 mm in negative Y direction"
 msgstr "Déplacer la sélection de 10 mm dans la direction négative Y"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
 msgid "Move selection 10 mm in positive X direction"
 msgstr "Déplacer la sélection de 10 mm dans la direction positive X"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
 msgid "Move selection 10 mm in positive Y direction"
 msgstr "Déplacer la sélection de 10 mm dans la direction positive Y"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1097
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:955
 msgid "Move support point"
 msgstr "Déplacer un point de support"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/GCodeViewer.cpp:2492
+msgid "Movement"
+msgstr "Mouvement"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Movement in camera space"
 msgstr "Mouvement dans l'espace de la caméra"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
 msgid "Movement step set to 1 mm"
 msgstr "Pas du mouvement réglé sur 1 mm"
 
-#: src/libslic3r/PrintConfig.cpp:2201
+#: src/libslic3r/PrintConfig.cpp:2344
 msgid "Multi material printers may need to prime or purge extruders on tool changes. Extrude the excess material into the wipe tower."
 msgstr "Les imprimantes multi-matériaux peuvent avoir besoin de préparer ou de purger leurs extrudeurs lors d'un changement d'outil. Extruder le matériau en excès dans la tour de nettoyage."
 
-#: src/slic3r/GUI/Plater.cpp:2360 src/slic3r/GUI/Plater.cpp:2413
+#: src/slic3r/GUI/Plater.cpp:2322 src/slic3r/GUI/Plater.cpp:2375
 msgid "Multi-part object detected"
 msgstr "Objet multi-pièces détecté"
 
@@ -4755,11 +5449,11 @@ msgstr "Objet multi-pièces détecté"
 msgid "Multiple %s devices found. Please only connect one at a time for flashing."
 msgstr "Plusieurs %s équipements ont été détectés. Veuillez n'en connecter qu'un seul à la fois pour le processus de flash."
 
-#: src/slic3r/GUI/Tab.cpp:1179
+#: src/slic3r/GUI/Tab.cpp:1509
 msgid "Multiple Extruders"
 msgstr "Extrudeurs Multiples"
 
-#: src/slic3r/GUI/Plater.cpp:2410
+#: src/slic3r/GUI/Plater.cpp:2372
 msgid ""
 "Multiple objects were loaded for a multi-material printer.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -4769,36 +5463,41 @@ msgstr ""
 "Au lieu de les considérer en tant que plusieurs objets, dois-je considérer\n"
 "ces fichiers en tant que un seul objet ayant plusieurs pièces ?"
 
-#: src/libslic3r/PrintConfig.cpp:3439
+#: src/libslic3r/PrintConfig.cpp:3638
 msgid "Multiply copies by creating a grid."
 msgstr "Multiplier les copies en créant une grille."
 
-#: src/libslic3r/PrintConfig.cpp:3434
+#: src/libslic3r/PrintConfig.cpp:3633
 msgid "Multiply copies by this factor."
 msgstr "Multiplier les copies par ce facteur."
 
-#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:580
+#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:715
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:874
 msgid "N/A"
 msgstr "N/A"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:270
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:153
+#: src/slic3r/GUI/GUI_ObjectList.cpp:284
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:161
 msgid "Name"
 msgstr "Nom"
 
-#: src/libslic3r/PrintConfig.cpp:1488
+#: src/libslic3r/PrintConfig.cpp:114
+msgid "Name of the printer"
+msgstr "Nom de l'imprimante"
+
+#: src/libslic3r/PrintConfig.cpp:1596
 msgid "Name of the printer variant. For example, the printer variants may be differentiated by a nozzle diameter."
 msgstr "Nom de la variante d'imprimante. Par exemple, la variante d'imprimante peut être différenciée par un diamètre de buse."
 
-#: src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1590
 msgid "Name of the printer vendor."
 msgstr "Nom du fabriquant de l'imprimante."
 
-#: src/libslic3r/PrintConfig.cpp:1058
+#: src/libslic3r/PrintConfig.cpp:1102
 msgid "Name of the profile, from which this profile inherits."
 msgstr "Nom du profil, duquel hérite ce profil."
 
-#: src/libslic3r/PrintConfig.cpp:1630
+#: src/libslic3r/PrintConfig.cpp:1738
 msgid "Nearest"
 msgstr "Le plus proche"
 
@@ -4806,14 +5505,30 @@ msgstr "Le plus proche"
 msgid "Network lookup"
 msgstr "Recherche réseau"
 
-#: src/slic3r/GUI/Plater.cpp:2151
+#: src/slic3r/GUI/Preferences.cpp:430
+msgid "New layout, access via settings button in the top menu"
+msgstr "Nouvelle disposition, accès via le bouton des réglages dans le menu supérieur"
+
+#: src/slic3r/GUI/Plater.cpp:2056
 msgid "New Project"
 msgstr "Nouveau Projet"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:105
 msgid "New project, clear plater"
 msgstr "Nouveau projet, libérer le plateau"
 
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:609
+msgid "New Value"
+msgstr "Nouvelle Valeur"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1178
+msgid "New value"
+msgstr "Nouvelle valeur"
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "New version is available."
+msgstr "Une nouvelle version est disponible."
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:38
 #, c-format
 msgid "New version of %s is available"
@@ -4823,23 +5538,23 @@ msgstr "Une nouvelle version de %s est disponible"
 msgid "New version:"
 msgstr "Nouvelle version :"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4673
+#: src/slic3r/GUI/GLCanvas3D.cpp:5089
 msgid "Next Redo action: %1%"
 msgstr "Prochaine action Répéter : %1%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4641
+#: src/slic3r/GUI/GLCanvas3D.cpp:5051
 msgid "Next Undo action: %1%"
 msgstr "Prochaine action Annuler : %1%"
 
-#: src/libslic3r/PrintConfig.cpp:960
+#: src/libslic3r/PrintConfig.cpp:1004
 msgid "No extrusion"
 msgstr "Aucune extrusion"
 
-#: src/libslic3r/SLAPrintSteps.cpp:453
+#: src/libslic3r/SLAPrintSteps.cpp:451
 msgid "No pad can be generated for this model with the current configuration"
 msgstr "Aucun socle ne peut être généré pour ce modèle avec la configuration actuelle"
 
-#: src/slic3r/GUI/MainFrame.cpp:784
+#: src/slic3r/GUI/MainFrame.cpp:1485
 msgid "No previously sliced file."
 msgstr "Aucun fichier précédemment découpé."
 
@@ -4847,175 +5562,221 @@ msgstr "Aucun fichier précédemment découpé."
 msgid "NO RAMMING AT ALL"
 msgstr "PAS D'EXPULSION DU TOUT"
 
-#: src/libslic3r/PrintConfig.cpp:1857
+#: src/libslic3r/PrintConfig.cpp:1999
 msgid "No sparse layers (EXPERIMENTAL)"
 msgstr "Sans couches dispersées (EXPERIMENTAL)"
 
-#: src/libslic3r/PrintConfig.cpp:2774
+#: src/libslic3r/PrintConfig.cpp:2938
 msgid "No support points will be placed closer than this threshold."
 msgstr "Aucun point de support ne sera positionné plus près que ce seuil."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "No updates available"
 msgstr "Aucune mise à jour disponible"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:291 src/slic3r/GUI/ConfigWizard.cpp:574
-#: src/slic3r/GUI/Plater.cpp:499 src/slic3r/GUI/Plater.cpp:639
-#: src/libslic3r/ExtrusionEntity.cpp:309
+#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/ConfigWizard.cpp:599
+#: src/slic3r/GUI/Plater.cpp:365 src/slic3r/GUI/Plater.cpp:505
+#: src/libslic3r/ExtrusionEntity.cpp:312
 msgid "None"
 msgstr "Aucun"
 
-#: src/slic3r/GUI/Tab.cpp:2203
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2372
 msgid "Normal"
 msgstr "Normal"
 
-#: src/slic3r/GUI/Plater.cpp:1286
+#: src/slic3r/GUI/Plater.cpp:1177 src/slic3r/GUI/Plater.cpp:1224
 msgid "normal mode"
 msgstr "mode normal"
 
-#: src/libslic3r/Zipper.cpp:46
+#: src/slic3r/GUI/GCodeViewer.cpp:2552
+msgid "Normal mode"
+msgstr "Mode normal"
+
+#: src/libslic3r/miniz_extension.cpp:105
 msgid "not a ZIP archive"
 msgstr "n'est pas une archive ZIP"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:223 src/slic3r/GUI/BedShapeDialog.cpp:302
+#: src/slic3r/GUI/BedShapeDialog.cpp:366 src/slic3r/GUI/BedShapeDialog.cpp:446
 msgid "Not found:"
 msgstr "Introuvable:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1019
+#: src/slic3r/GUI/DoubleSlider.cpp:1144
 msgid "Note"
 msgstr "Remarque"
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/GUI/Tab.cpp:3408
+msgid "Note, that selected preset will be deleted from this/those printer(s) too."
+msgstr "Notez que ce préréglage sélectionné sera également supprimé pour cette/ces imprimante(s)."
+
+#: src/slic3r/GUI/Tab.cpp:3416
+msgid "Note, that this/those printer(s) will be deleted after deleting of the selected preset."
+msgstr "Notez que cette/ces imprimante(s) seront supprimées après la suppression du préréglage sélectionné."
+
+#: src/slic3r/GUI/Tab.cpp:2039
+msgid ""
+"Note: All parameters from this group are moved to the Physical Printer settings (see changelog).\n"
+"\n"
+"A new Physical Printer profile is created by clicking on the \"cog\" icon right of the Printer profiles combo box, by selecting the \"Add physical printer\" item in the Printer combo box. The Physical Printer profile editor opens also when clicking on the \"cog\" icon in the Printer settings tab. The Physical Printer profiles are being stored into PrusaSlicer/physical_printer directory."
+msgstr ""
+"Remarque : Tous les paramètres de ce groupe sont déplacés vers les paramètres de l'imprimante physique (voir le journal des modifications).\n"
+"\n"
+"Un nouveau profil d'imprimante physique est créé en cliquant sur l'icône \"rouage\" à droite de la zone de liste déroulante de Profils d'imprimante, en sélectionnant l'élément \"Ajouter une imprimante physique\" dans la zone de liste déroulante Imprimante. L'éditeur de profil d'imprimante physique s'ouvre également en cliquant sur l'icône \"rouage\" dans l'onglet Réglages de l'imprimante. Les profils d'imprimante physique sont stockés dans le répertoire PrusaSlicer/physical_printer."
+
+#: src/slic3r/Utils/AstroBox.cpp:92
 msgid "Note: AstroBox version at least 1.1.0 is required."
 msgstr "Remarque : AstroBox en version 1.1.0 minimum est requis."
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:76
 msgid "Note: FlashAir with firmware 2.00.02 or newer and activated upload function is required."
 msgstr "Remarque : FlashAir avec firmware 2.00.02 ou plus récent avec une fonction de téléchargement activée est nécessaire."
 
-#: src/slic3r/Utils/OctoPrint.cpp:89
+#: src/slic3r/Utils/OctoPrint.cpp:91
 msgid "Note: OctoPrint version at least 1.1.0 is required."
 msgstr "Note : une version d'Octoprint supérieure ou égale à 1.1.0 est requise."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1345
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1192
 msgid "Note: some shortcuts work in (non)editing mode only."
 msgstr "Remarque: certains raccourcis ne fonctionnent qu'en mode de (non-)édition."
 
-#: src/slic3r/GUI/Tab.cpp:1251 src/slic3r/GUI/Tab.cpp:1252
-#: src/slic3r/GUI/Tab.cpp:1540 src/slic3r/GUI/Tab.cpp:1541
-#: src/slic3r/GUI/Tab.cpp:2012 src/slic3r/GUI/Tab.cpp:2013
-#: src/slic3r/GUI/Tab.cpp:2128 src/slic3r/GUI/Tab.cpp:2129
-#: src/slic3r/GUI/Tab.cpp:3535 src/slic3r/GUI/Tab.cpp:3536
+#: src/slic3r/GUI/SavePresetDialog.cpp:151
+msgid "Note: This preset will be replaced after saving"
+msgstr "Remarque : ce préréglage sera remplacé après l'enregistrement"
+
+#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582
+#: src/slic3r/GUI/Tab.cpp:1887 src/slic3r/GUI/Tab.cpp:1888
+#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2297 src/slic3r/GUI/Tab.cpp:2298
+#: src/slic3r/GUI/Tab.cpp:3951 src/slic3r/GUI/Tab.cpp:3952
 msgid "Notes"
 msgstr "Notes"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1751 src/slic3r/GUI/DoubleSlider.cpp:1905
-#: src/slic3r/GUI/DoubleSlider.cpp:1926 src/slic3r/GUI/GUI.cpp:245
+#: src/slic3r/GUI/ConfigWizard.cpp:2237 src/slic3r/GUI/DoubleSlider.cpp:2124
+#: src/slic3r/GUI/DoubleSlider.cpp:2144 src/slic3r/GUI/GUI.cpp:244
 msgid "Notice"
 msgstr "Remarque"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:218
+#: src/slic3r/GUI/ConfigWizard.cpp:236
 msgid "nozzle"
 msgstr "buse"
 
-#: src/slic3r/GUI/Tab.cpp:1870 src/slic3r/GUI/Tab.cpp:2340
-#: src/libslic3r/PrintConfig.cpp:1326
+#: src/slic3r/GUI/Tab.cpp:1790
+msgid "Nozzle"
+msgstr "Buse"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1392
+msgid "Nozzle and Bed Temperatures"
+msgstr "Températures de la buse et du plateau"
+
+#: src/slic3r/GUI/Tab.cpp:2104 src/slic3r/GUI/Tab.cpp:2509
+#: src/libslic3r/PrintConfig.cpp:1434
 msgid "Nozzle diameter"
 msgstr "Diamètre de la buse"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:969
+#: src/slic3r/GUI/ConfigWizard.cpp:1335
 msgid "Nozzle Diameter:"
 msgstr "Diamètre de la Buse :"
 
-#: src/libslic3r/PrintConfig.cpp:650
+#: src/libslic3r/PrintConfig.cpp:2201
+msgid "Nozzle temperature"
+msgstr "Température de la buse"
+
+#: src/libslic3r/PrintConfig.cpp:2198
+msgid "Nozzle temperature for layers after the first one. Set this to zero to disable temperature control commands in the output G-code."
+msgstr "Température de la buse pour les couches après la première. Réglez ceci sur zéro pour désactiver les commandes de contrôle de température dans le G-code de sortie."
+
+#: src/libslic3r/PrintConfig.cpp:961
+msgid "Nozzle temperature for the first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output G-code."
+msgstr "Température de la buse pour la première couche. Si vous souhaitez contrôler la température manuellement pendant l'impression, réglez ce paramètre sur zéro pour désactiver les commandes de contrôle de la température dans le G-code de sortie."
+
+#: src/libslic3r/PrintConfig.cpp:686
 msgid "Number of cooling moves"
 msgstr "Nombres de mouvements de refroidissement"
 
-#: src/slic3r/GUI/Tab.cpp:1839
+#: src/slic3r/GUI/Tab.cpp:2073
 msgid "Number of extruders of the printer."
 msgstr "Nombre d'extrudeurs de l'imprimante."
 
-#: src/libslic3r/PrintConfig.cpp:1975
+#: src/libslic3r/PrintConfig.cpp:2117
 msgid "Number of interface layers to insert between the object(s) and support material."
 msgstr "Nombre de couches d'interface à insérer entre le(s) objet(s) et les supports."
 
-#: src/libslic3r/PrintConfig.cpp:1697
+#: src/libslic3r/PrintConfig.cpp:1812
 msgid "Number of loops for the skirt. If the Minimum Extrusion Length option is set, the number of loops might be greater than the one configured here. Set this to zero to disable skirt completely."
 msgstr "Nombre de boucles pour la jupe. Si la Longueur Minimale d'Extrusion est paramétrée, le nombre de boucles minimal sera plus grand que celui configuré ici. Mettez à zéro pour désactiver complètement la jupe."
 
-#: src/libslic3r/PrintConfig.cpp:2365
+#: src/libslic3r/PrintConfig.cpp:2508
 msgid "Number of pixels in"
 msgstr "Nombre de pixels présents"
 
-#: src/libslic3r/PrintConfig.cpp:2367
+#: src/libslic3r/PrintConfig.cpp:2510
 msgid "Number of pixels in X"
 msgstr "Nombre de pixels présents dans X"
 
-#: src/libslic3r/PrintConfig.cpp:2373
+#: src/libslic3r/PrintConfig.cpp:2516
 msgid "Number of pixels in Y"
 msgstr "Nombre de pixels présents dans Y"
 
-#: src/libslic3r/PrintConfig.cpp:176
+#: src/libslic3r/PrintConfig.cpp:210
 msgid "Number of solid layers to generate on bottom surfaces."
 msgstr "Nombre de couches solides à générer sur les surfaces inférieures."
 
-#: src/libslic3r/PrintConfig.cpp:1781
+#: src/libslic3r/PrintConfig.cpp:1896
 msgid "Number of solid layers to generate on top and bottom surfaces."
 msgstr "Nombre de couches solides à générer sur les surfaces supérieures et inférieures."
 
-#: src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2277
 msgid "Number of solid layers to generate on top surfaces."
 msgstr "Nombre de couches solides à générer sur les surfaces supérieures."
 
-#: src/libslic3r/PrintConfig.cpp:2518
+#: src/libslic3r/PrintConfig.cpp:2661
 msgid "Number of the layers needed for the exposure time fade from initial exposure time to the exposure time"
 msgstr "Nombre de couches nécessaires pour que le temps d'exposition passe du temps d'exposition initial au temps d'exposition normal"
 
-#: src/slic3r/GUI/Plater.cpp:241
+#: src/slic3r/GUI/Plater.cpp:247
 msgid "Number of tool changes"
 msgstr "Nombre de changements d'outil"
 
-#: src/libslic3r/PrintConfig.cpp:2753
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:2917
 msgid "Object elevation"
 msgstr "Élévation de l'objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2466
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2858
 msgid "Object manipulation"
 msgstr "Manipulation de l'Objet"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:155 src/libslic3r/GCode.cpp:638
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:163 src/libslic3r/GCode.cpp:623
 msgid "Object name"
 msgstr "Nom de l'objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3417
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3880
 msgid "Object or Instance"
 msgstr "Objet ou Instance"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Object reordered"
 msgstr "Objet réorganisé"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2479
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2871
 msgid "Object Settings to modify"
 msgstr "Réglages de l'Objet à modifier"
 
-#: src/slic3r/GUI/Plater.cpp:2529
+#: src/slic3r/GUI/Plater.cpp:2491
 msgid "Object too large?"
 msgstr "Objet trop grand ?"
 
-#: src/libslic3r/PrintConfig.cpp:2262
+#: src/libslic3r/PrintConfig.cpp:2405
 msgid "Object will be used to purge the nozzle after a toolchange to save material that would otherwise end up in the wipe tower and decrease print time. Colours of the objects will be mixed as a result."
 msgstr "L'objet sera utilisé pour purger la buse après un changement d'outil pour économiser du matériau qui finirait normalement dans la tour de nettoyage et raccourcirait le temps d'impression. Par conséquent, les couleurs de l'objet seront mélangées."
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "object(s)"
 msgstr "objet(s)"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "objects"
 msgstr "objets"
 
-#: src/libslic3r/PrintConfig.cpp:429 src/libslic3r/PrintConfig.cpp:855
+#: src/libslic3r/PrintConfig.cpp:465 src/libslic3r/PrintConfig.cpp:893
 msgid "Octagram Spiral"
 msgstr "Spirale Octagramme"
 
@@ -5023,64 +5784,97 @@ msgstr "Spirale Octagramme"
 msgid "OctoPrint version"
 msgstr "Version d'OctoPrint"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3425
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3888
 msgid "of a current Object"
 msgstr "d'un Objet en cours"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
 msgid "Offset"
 msgstr "Décalage"
 
-#: src/slic3r/GUI/Tab.cpp:1755
+#: src/slic3r/GUI/Preferences.cpp:422
+msgid "Old regular layout with the tab bar"
+msgstr "Ancienne disposition avec la barre d'onglets"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:608
+msgid "Old Value"
+msgstr "Ancienne valeur"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1177
+msgid "Old value"
+msgstr "Ancienne valeur"
+
+#: src/slic3r/GUI/Preferences.cpp:123
+msgid "On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances of same app from the command line. In such case this settings will allow only one instance."
+msgstr "Sur OSX, il n'y a toujours qu'une seule instance d'application en cours d'exécution par défaut. Cependant, il est permis d'exécuter plusieurs instances de la même application à partir de la ligne de commande. Dans ce cas, ces paramètres n'autoriseront qu'une seule instance."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:359
 #, c-format
 msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain."
 msgstr "Dans ce système, %s utilise des certificats HTTPS issus du système Magasin de Certificats ou Trousseau."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:950
+#: src/slic3r/GUI/DoubleSlider.cpp:1064
 msgid "One layer mode"
 msgstr "Mode couche unique"
 
-#: src/libslic3r/Print.cpp:1365
+#: src/libslic3r/Print.cpp:1391
 msgid "One or more object were assigned an extruder that the printer does not have."
 msgstr "Un ou plusieurs objets ont été affectés à un extrudeur que l'imprimante ne possède pas."
 
-#: src/libslic3r/PrintConfig.cpp:1903 src/libslic3r/PrintConfig.cpp:2676
+#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
 msgid "Only create support if it lies on a build plate. Don't create support on a print."
 msgstr "Créer uniquement des supports reposant sur le plateau. Ne pas créer pas de supports sur une impression."
 
-#: src/libslic3r/PrintConfig.cpp:1027
+#: src/libslic3r/PrintConfig.cpp:1071
 msgid "Only infill where needed"
 msgstr "Faire remplissage seulement où cela est nécessaire"
 
-#: src/slic3r/GUI/Tab.cpp:2373
+#: src/slic3r/GUI/Tab.cpp:2542
 msgid "Only lift Z"
 msgstr "Lever Z seulement"
 
-#: src/libslic3r/PrintConfig.cpp:1570
+#: src/libslic3r/PrintConfig.cpp:1678
 msgid "Only lift Z above"
 msgstr "Lever Z seulement au-dessus de"
 
-#: src/libslic3r/PrintConfig.cpp:1579
+#: src/libslic3r/PrintConfig.cpp:1687
 msgid "Only lift Z below"
 msgstr "Lever Z seulement en-dessous de"
 
-#: src/libslic3r/PrintConfig.cpp:1348
+#: src/libslic3r/PrintConfig.cpp:1456
 msgid "Only retract when crossing perimeters"
 msgstr "Rétracter uniquement lors du franchissement de périmètres"
 
-#: src/slic3r/GUI/Tab.cpp:1187
+#: src/slic3r/GUI/ConfigWizard.cpp:714
+msgid "Only the following installed printers are compatible with the selected filament:"
+msgstr "Seules les imprimantes installées suivantes sont compatibles avec le filament sélectionné :"
+
+#: src/slic3r/GUI/Tab.cpp:1517
 msgid "Ooze prevention"
 msgstr "Prévention des coulures"
 
-#: src/libslic3r/Print.cpp:1266
+#: src/libslic3r/Print.cpp:1292
 msgid "Ooze prevention is currently not supported with the wipe tower enabled."
 msgstr "La prévention des écoulements n'est actuellement pas supportée lorsque la tour de nettoyage est activée."
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open &PrusaSlicer"
+msgstr "Ouvrir &PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "Open a G-code file"
+msgstr "Ouvrir un fichier G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:77
+#: src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open a new PrusaSlicer instance"
+msgstr "Ouvrir une nouvelle instance de PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "Open a project file"
 msgstr "Ouvrir un fichier de projet"
 
-#: src/slic3r/GUI/Tab.cpp:1729
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:330
 msgid "Open CA certificate file"
 msgstr "Ouvrir le fichier de certificat CA"
 
@@ -5093,116 +5887,150 @@ msgstr "Ouvrir la page du journal des modifications"
 msgid "Open download page"
 msgstr "Ouvrir la page de téléchargement"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
+#: src/slic3r/GUI/NotificationManager.cpp:742
+msgid "Open Folder."
+msgstr "Ouvrir un répertoire."
+
+#: src/slic3r/Utils/Process.cpp:151
+msgid "Open G-code file:"
+msgstr "Ouvrir un fichier G-code :"
+
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:1141
+msgid "Open G-code viewer"
+msgstr "Ouvrir la visionneuse de G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:79
+msgid "Open new G-code viewer"
+msgstr "Ouvrir une nouvelle visionneuse de G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open new instance"
+msgstr "Ouvrir une nouvelle instance"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:106
 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater"
 msgstr "Ouvrir un projet STL/OBJ/AMF/3MF avec configuration, libérer le plateau"
 
-#: src/slic3r/GUI/MainFrame.cpp:693
+#: src/slic3r/GUI/MainFrame.cpp:77 src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open PrusaSlicer"
+msgstr "Ouvrir PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:918 src/slic3r/GUI/MainFrame.cpp:1317
 #, c-format
 msgid "Open the %s website in your browser"
 msgstr "Ouvrir le site web de %s dans votre navigateur"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Open the Prusa3D drivers download page in your browser"
 msgstr "Ouvrir la page de téléchargement des drivers Prusa3D dans votre navigateur"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Open the software releases page in your browser"
 msgstr "Ouvrir la page des publications du logiciel dans votre navigateur"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:220 src/slic3r/GUI/Plater.cpp:3961
 msgid "Optimize orientation"
 msgstr "Optimiser l'orientation"
 
-#: src/slic3r/GUI/Plater.cpp:2767
+#: src/slic3r/GUI/Plater.cpp:1555
 msgid "Optimize Rotation"
 msgstr "Optimiser la Rotation"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Plater.cpp:3962
 msgid "Optimize the rotation of the object for better print results."
 msgstr "Optimiser la rotation de l'objet pour un meilleur résultat d'impression."
 
-#: src/libslic3r/PrintConfig.cpp:137
+#: src/libslic3r/PrintConfig.cpp:170
 msgid "Optimize travel moves in order to minimize the crossing of perimeters. This is mostly useful with Bowden extruders which suffer from oozing. This feature slows down both the print and the G-code generation."
 msgstr "Optimiser les déplacements afin de minimiser le franchissement de périmètres. Ceci est surtout utile avec les extruder Bowden qui sont sujets aux coulures. Cette fonctionnalité ralentit l'impression et la génération du G-code."
 
-#: src/slic3r/GUI/Tab.cpp:1131
+#: src/slic3r/GUI/GCodeViewer.cpp:2525 src/slic3r/GUI/GUI_Preview.cpp:320
+#: src/slic3r/GUI/GUI_Preview.cpp:333
+msgid "Options"
+msgstr "Options"
+
+#: src/slic3r/GUI/Tab.cpp:1460
 msgid "Options for support material and raft"
 msgstr "Options pour le matériau de support et le radeau"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:989
+#: src/slic3r/GUI/Mouse3DController.cpp:315
+msgid "Options:"
+msgstr "Options :"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1112
 msgid "or press \"+\" key"
 msgstr "ou appuyez sur la touche \"+\""
 
-#: src/slic3r/GUI/Plater.cpp:2892
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:74
 msgid "Orientation found."
 msgstr "Orientation trouvée."
 
-#: src/slic3r/GUI/Plater.cpp:2891
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:73
 msgid "Orientation search canceled."
 msgstr "Recherche de l'orientation annulée."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:84
+#: src/slic3r/GUI/BedShapeDialog.cpp:94
 msgid "Origin"
 msgstr "Origine"
 
-#: src/slic3r/GUI/Tab.cpp:1227
+#: src/slic3r/GUI/Tab.cpp:1557
 msgid "Other"
 msgstr "Autre"
 
-#: src/libslic3r/PrintConfig.cpp:144 src/libslic3r/PrintConfig.cpp:2064
+#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:2206
 msgid "Other layers"
 msgstr "Autres couches"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:856
+#: src/slic3r/GUI/ConfigWizard.cpp:1222
 msgid "Other Vendors"
 msgstr "Autres Fabriquants"
 
-#: src/slic3r/GUI/Tab.cpp:1238 src/slic3r/GUI/Tab.cpp:3666
+#: src/slic3r/GUI/Tab.cpp:1568 src/slic3r/GUI/Tab.cpp:4085
 msgid "Output file"
 msgstr "Fichier de sortie"
 
-#: src/libslic3r/PrintConfig.cpp:3493
+#: src/libslic3r/PrintConfig.cpp:3692
 msgid "Output File"
 msgstr "Fichier de Sortie"
 
-#: src/libslic3r/PrintConfig.cpp:1363
+#: src/libslic3r/PrintConfig.cpp:1471
 msgid "Output filename format"
 msgstr "Format du nom de fichier de sortie"
 
-#: src/libslic3r/PrintConfig.cpp:3381
+#: src/libslic3r/PrintConfig.cpp:3580
 msgid "Output Model Info"
 msgstr "Information du Modèle de Sortie"
 
-#: src/slic3r/GUI/Tab.cpp:1230 src/slic3r/GUI/Tab.cpp:3665
+#: src/slic3r/GUI/Tab.cpp:1560 src/slic3r/GUI/Tab.cpp:4084
 msgid "Output options"
 msgstr "Options de sortie"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/ExtrusionEntity.cpp:312
+#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/libslic3r/ExtrusionEntity.cpp:340
 msgid "Overhang perimeter"
 msgstr "Périmètre en surplomb"
 
-#: src/libslic3r/PrintConfig.cpp:2042
+#: src/libslic3r/PrintConfig.cpp:2184
 msgid "Overhang threshold"
 msgstr "Seuil de surplomb"
 
-#: src/slic3r/GUI/Tab.cpp:1215
+#: src/slic3r/GUI/Tab.cpp:1545
 msgid "Overlap"
 msgstr "Chevauchement"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "P&rint Settings Tab"
 msgstr "Onglet des &Réglages d'Impression"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:625
-#: src/slic3r/GUI/Plater.cpp:635 src/slic3r/GUI/Tab.cpp:3636
-#: src/slic3r/GUI/Tab.cpp:3637 src/libslic3r/PrintConfig.cpp:2781
-#: src/libslic3r/PrintConfig.cpp:2788 src/libslic3r/PrintConfig.cpp:2802
-#: src/libslic3r/PrintConfig.cpp:2813 src/libslic3r/PrintConfig.cpp:2823
-#: src/libslic3r/PrintConfig.cpp:2845 src/libslic3r/PrintConfig.cpp:2856
-#: src/libslic3r/PrintConfig.cpp:2863 src/libslic3r/PrintConfig.cpp:2870
-#: src/libslic3r/PrintConfig.cpp:2881 src/libslic3r/PrintConfig.cpp:2890
-#: src/libslic3r/PrintConfig.cpp:2899
+#: src/slic3r/GUI/GUI_ObjectList.cpp:105 src/slic3r/GUI/GUI_ObjectList.cpp:664
+#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Tab.cpp:4055
+#: src/slic3r/GUI/Tab.cpp:4056 src/slic3r/GUI/Tab.cpp:4127
+#: src/libslic3r/PrintConfig.cpp:2945 src/libslic3r/PrintConfig.cpp:2952
+#: src/libslic3r/PrintConfig.cpp:2966 src/libslic3r/PrintConfig.cpp:2977
+#: src/libslic3r/PrintConfig.cpp:2987 src/libslic3r/PrintConfig.cpp:3009
+#: src/libslic3r/PrintConfig.cpp:3020 src/libslic3r/PrintConfig.cpp:3027
+#: src/libslic3r/PrintConfig.cpp:3034 src/libslic3r/PrintConfig.cpp:3045
+#: src/libslic3r/PrintConfig.cpp:3054 src/libslic3r/PrintConfig.cpp:3063
 msgid "Pad"
 msgstr "Socle"
 
@@ -5210,150 +6038,186 @@ msgstr "Socle"
 msgid "Pad and Support"
 msgstr "Socle et Support"
 
-#: src/libslic3r/PrintConfig.cpp:2855
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:3019
 msgid "Pad around object"
 msgstr "Socle autour de l'objet"
 
-#: src/libslic3r/PrintConfig.cpp:2862
+#: src/libslic3r/PrintConfig.cpp:3026
 msgid "Pad around object everywhere"
 msgstr "Socle partout autour de l'objet"
 
-#: src/libslic3r/PrintConfig.cpp:2811
+#: src/libslic3r/PrintConfig.cpp:2975
 msgid "Pad brim size"
 msgstr "Taille du bord de socle"
 
-#: src/libslic3r/SLA/Pad.cpp:691
+#: src/libslic3r/SLA/Pad.cpp:532
 msgid "Pad brim size is too small for the current configuration."
 msgstr "La taille du bord de socle est trop petite pour la configuration actuelle."
 
-#: src/libslic3r/PrintConfig.cpp:2898
+#: src/libslic3r/PrintConfig.cpp:3062
 msgid "Pad object connector penetration"
 msgstr "Pénétration du connecteur de l'objet socle"
 
-#: src/libslic3r/PrintConfig.cpp:2880
+#: src/libslic3r/PrintConfig.cpp:3044
 msgid "Pad object connector stride"
 msgstr "Pas du connecteur de l'objet socle"
 
-#: src/libslic3r/PrintConfig.cpp:2889
+#: src/libslic3r/PrintConfig.cpp:3053
 msgid "Pad object connector width"
 msgstr "Largeur du connecteur de l'objet socle"
 
-#: src/libslic3r/PrintConfig.cpp:2869
+#: src/libslic3r/PrintConfig.cpp:3033
 msgid "Pad object gap"
 msgstr "Espace entre l'objet et le socle"
 
-#: src/libslic3r/PrintConfig.cpp:2797
+#: src/libslic3r/PrintConfig.cpp:2961
 msgid "Pad wall height"
 msgstr "Hauteur de la paroi du socle"
 
-#: src/libslic3r/PrintConfig.cpp:2844
+#: src/libslic3r/PrintConfig.cpp:3008
 msgid "Pad wall slope"
 msgstr "Inclinaison de la paroi du socle"
 
-#: src/libslic3r/PrintConfig.cpp:2787
+#: src/libslic3r/PrintConfig.cpp:2951
 msgid "Pad wall thickness"
 msgstr "Épaisseur de la paroi du socle"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Page Down"
 msgstr "Page Down"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Page Up"
 msgstr "Page Up"
 
-#: src/slic3r/GUI/Field.cpp:139
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33
+msgid "Paint-on supports"
+msgstr "Supports peints"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:178
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:159
+msgid "Paints all facets inside, regardless of their orientation."
+msgstr "Peint toutes les facettes à l'intérieur, quelle que soit leur orientation."
+
+#: src/slic3r/GUI/Field.cpp:187
 msgid "parameter name"
 msgstr "nom du paramètre"
 
-#: src/slic3r/GUI/Field.cpp:243
+#: src/slic3r/GUI/Field.cpp:291
 msgid "Parameter validation"
 msgstr "Validation du paramètre"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Part"
 msgstr "Pièce"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2494
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2886
 msgid "Part manipulation"
 msgstr "Manipulation d'une pièce"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2483
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2875
 msgid "Part Settings to modify"
 msgstr "Réglages de la pièce à modifier"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4514
+#: src/libslic3r/PrintConfig.cpp:138
+msgid "Password"
+msgstr "Mot de passe"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4880
 msgid "Paste"
 msgstr "Coller"
 
-#: src/slic3r/GUI/MainFrame.cpp:592
+#: src/slic3r/GUI/MainFrame.cpp:1198
 msgid "Paste clipboard"
 msgstr "Coller le presse-papier"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
 msgid "Paste from clipboard"
 msgstr "Coller depuis le presse-papier"
 
-#: src/slic3r/GUI/Plater.cpp:5606
+#: src/slic3r/GUI/Plater.cpp:5803
 msgid "Paste From Clipboard"
 msgstr "Coller Depuis le Presse-Papier"
 
-#: src/libslic3r/PrintConfig.cpp:2002
+#: src/libslic3r/PrintConfig.cpp:2144
 msgid "Pattern"
 msgstr "Motif"
 
-#: src/libslic3r/PrintConfig.cpp:1891
+#: src/libslic3r/PrintConfig.cpp:2033
 msgid "Pattern angle"
 msgstr "Angle du motif"
 
-#: src/libslic3r/PrintConfig.cpp:2016
+#: src/libslic3r/PrintConfig.cpp:2158
 msgid "Pattern spacing"
 msgstr "Espacement du motif"
 
-#: src/libslic3r/PrintConfig.cpp:2004
+#: src/libslic3r/PrintConfig.cpp:2146
 msgid "Pattern used to generate support material."
 msgstr "Motif utilisé pour générer les supports."
 
-#: src/slic3r/GUI/Plater.cpp:1261
+#: src/slic3r/GUI/GCodeViewer.cpp:2437 src/slic3r/GUI/GCodeViewer.cpp:2460
+#: src/slic3r/GUI/Plater.cpp:1199
 msgid "Pause"
 msgstr "Pause"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1009
+#: src/slic3r/GUI/DoubleSlider.cpp:1133
 msgid "Pause print (\"%1%\")"
 msgstr "Mettre en pause l'impression (\"%1%\")"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:934 src/slic3r/GUI/GLCanvas3D.cpp:943
-#: src/slic3r/GUI/GLCanvas3D.cpp:982
+#: src/slic3r/GUI/Tab.cpp:2209 src/libslic3r/PrintConfig.cpp:1969
+msgid "Pause Print G-code"
+msgstr "G-code de pause de l'impression"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
+#: src/slic3r/GUI/GLCanvas3D.cpp:988
 msgid "Pause print or custom G-code"
 msgstr "Pause d'impression ou G-code personnalisé"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:175
+#: src/libslic3r/PrintConfig.cpp:1147
+msgid "Percent of a flow rate relative to object's normal layer height."
+msgstr "Pourcentage d'un débit par rapport à la hauteur de couche normale de l'objet."
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2233
+msgid "Percentage"
+msgstr "Pourcentage"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:177
 msgid "Perform cut"
 msgstr "Effectuer la coupe"
 
-#: src/libslic3r/PrintConfig.cpp:2927
+#: src/libslic3r/PrintConfig.cpp:3091
 msgid "Performance vs accuracy of calculation. Lower values may produce unwanted artifacts."
 msgstr "Performance vs précision du calcul. Des valeurs plus faibles peuvent produire des artefacts indésirables."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:237 src/libslic3r/ExtrusionEntity.cpp:310
+#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:336
 msgid "Perimeter"
 msgstr "Périmètre"
 
-#: src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1516
 msgid "Perimeter extruder"
 msgstr "Extrudeur pour les périmètres"
 
-#: src/slic3r/GUI/PresetHints.cpp:165
+#: src/slic3r/GUI/PresetHints.cpp:164
 msgid "perimeters"
 msgstr "périmètres"
 
-#: src/libslic3r/PrintConfig.cpp:1399 src/libslic3r/PrintConfig.cpp:1417
-#: src/libslic3r/PrintConfig.cpp:1430 src/libslic3r/PrintConfig.cpp:1440
+#: src/libslic3r/PrintConfig.cpp:1507 src/libslic3r/PrintConfig.cpp:1525
+#: src/libslic3r/PrintConfig.cpp:1538 src/libslic3r/PrintConfig.cpp:1548
 msgid "Perimeters"
 msgstr "Périmètres"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:860
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:159
+msgid "Physical Printer"
+msgstr "Imprimante physique"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:789
+#: src/slic3r/GUI/PresetComboBoxes.cpp:948
+msgid "Physical printers"
+msgstr "Imprimantes physiques"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1226
 #, c-format
 msgid "Pick another vendor supported by %s"
 msgstr "Choisissez un autre fournisseur pris en charge par %s"
@@ -5362,128 +6226,148 @@ msgstr "Choisissez un autre fournisseur pris en charge par %s"
 msgid "Picture sizes to be stored into a .gcode and .sl1 files"
 msgstr "Tailles d'image devant être stockées dans des fichiers .gcode et .sl1"
 
-#: src/libslic3r/PrintConfig.cpp:2681
+#: src/libslic3r/PrintConfig.cpp:2822
+msgid "Pillar connection mode"
+msgstr "Mode de connexion par pilier"
+
+#: src/libslic3r/PrintConfig.cpp:2791
+msgid "Pillar diameter"
+msgstr "Diamètre du pilier"
+
+#: src/libslic3r/PrintConfig.cpp:2845
 msgid "Pillar widening factor"
 msgstr "Facteur d'élargissement du pilier"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:330
+#: src/slic3r/GUI/ConfigManipulation.cpp:335
 msgid "Pinhead diameter should be smaller than the pillar diameter."
 msgstr "Le diamètre de la tête d'épingle doit être plus petit que le diamètre du pilier."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:79
+#: src/libslic3r/PrintConfig.cpp:2763
+msgid "Pinhead front diameter"
+msgstr "Diamètre avant de la tête d'épingle"
+
+#: src/libslic3r/PrintConfig.cpp:2781
+msgid "Pinhead width"
+msgstr "Largeur de la tête d'épingle"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:110
 msgid "Place bearings in slots and resume printing"
 msgstr "Placer les roulements dans les fentes et reprendre l'impression"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41
 msgid "Place on face"
 msgstr "Positionner sur la surface"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:192 src/slic3r/GUI/MainFrame.cpp:204
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:190 src/slic3r/GUI/MainFrame.cpp:340
+#: src/slic3r/GUI/MainFrame.cpp:352
 msgid "Plater"
 msgstr "Plateau"
 
-#: src/slic3r/GUI/GUI_App.cpp:1085
+#: src/slic3r/GUI/GUI_App.cpp:1877
 msgid "Please check and fix your object list."
 msgstr "Veuillez vérifier et réparer votre liste d'objet."
 
-#: src/slic3r/GUI/Plater.cpp:2312 src/slic3r/GUI/Tab.cpp:2959
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2255
+#: src/slic3r/GUI/Tab.cpp:3188
 msgid "Please check your object list before preset changing."
 msgstr "Veuillez vérifier votre liste d'objet avant le changement de préréglage."
 
-#: src/slic3r/GUI/Plater.cpp:3286
+#: src/slic3r/GUI/Plater.cpp:3089
 msgid "Please select the file to reload"
 msgstr "Veuillez sélectionner le fichier à recharger"
 
-#: src/slic3r/GUI/AboutDialog.cpp:39 src/slic3r/GUI/AboutDialog.cpp:291
+#: src/slic3r/GUI/AboutDialog.cpp:43 src/slic3r/GUI/AboutDialog.cpp:48
+#: src/slic3r/GUI/AboutDialog.cpp:317
 msgid "Portions copyright"
 msgstr "Copyright des sections"
 
-#: src/libslic3r/PrintConfig.cpp:2400
+#: src/libslic3r/PrintConfig.cpp:2543
 msgid "Portrait"
 msgstr "Portrait"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:215
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:457
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:223
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:505
 msgid "Position"
 msgstr "Position"
 
-#: src/slic3r/GUI/Tab.cpp:2367
+#: src/slic3r/GUI/Tab.cpp:2536
 msgid "Position (for multi-extruder printers)"
 msgstr "Position (pour les imprimantes multi-extrudeurs)"
 
-#: src/libslic3r/PrintConfig.cpp:1623
+#: src/libslic3r/PrintConfig.cpp:1731
 msgid "Position of perimeters starting points."
 msgstr "Position des points de départ des périmètres."
 
-#: src/libslic3r/PrintConfig.cpp:2224
+#: src/libslic3r/PrintConfig.cpp:2367
 msgid "Position X"
 msgstr "Position X"
 
-#: src/libslic3r/PrintConfig.cpp:2231
+#: src/libslic3r/PrintConfig.cpp:2374
 msgid "Position Y"
 msgstr "Position Y"
 
-#: src/slic3r/GUI/Tab.cpp:1245 src/libslic3r/PrintConfig.cpp:1453
+#: src/slic3r/GUI/Tab.cpp:1575 src/libslic3r/PrintConfig.cpp:1561
 msgid "Post-processing scripts"
 msgstr "Scripts de post-traitement"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Pre&view"
 msgstr "Pré&visualisation"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:149 src/slic3r/GUI/Preferences.cpp:10
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 src/slic3r/GUI/Preferences.cpp:12
 msgid "Preferences"
 msgstr "Préférences"
 
-#: src/libslic3r/PrintConfig.cpp:1641
+#: src/libslic3r/PrintConfig.cpp:1749
 msgid "Preferred direction of the seam"
 msgstr "Direction préférée de la jointure"
 
-#: src/libslic3r/PrintConfig.cpp:1652
+#: src/libslic3r/PrintConfig.cpp:1760
 msgid "Preferred direction of the seam - jitter"
 msgstr "Direction préférée de la jointure - gigue"
 
-#: src/libslic3r/PrintObject.cpp:255
+#: src/libslic3r/PrintObject.cpp:261
 msgid "Preparing infill"
 msgstr "Préparation du remplissage"
 
-#: src/slic3r/GUI/Tab.cpp:2920
-#, c-format
-msgid "Preset (%s)"
-msgstr "Préréglage (%s)"
+#: src/slic3r/GUI/GUI_App.cpp:855
+msgid "Preparing settings tabs"
+msgstr "Préparation des onglets de réglage"
 
-#: src/slic3r/GUI/Tab.cpp:3082
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1009
+msgid "Preset \"%1%\" has the following unsaved changes:"
+msgstr "Le préréglage \"%1%\" comporte les modifications non enregistrées suivantes :"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1014
+msgid "Preset \"%1%\" is not compatible with the new print profile and it has the following unsaved changes:"
+msgstr "Le préréglage \"%1%\" n’est pas compatible avec le nouveau profil d’impression et comporte les modifications non enregistrées suivantes :"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1013
+msgid "Preset \"%1%\" is not compatible with the new printer profile and it has the following unsaved changes:"
+msgstr "Le préréglage \"%1%\" n’est pas compatible avec le nouveau profil d’imprimante et comporte les modifications non enregistrées suivantes :"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:136
+msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
+msgstr "Le préréglage avec le nom \"%1%\" existe déjà et est incompatible avec l'imprimante sélectionnée."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:148
 msgid "Preset with name \"%1%\" already exists."
 msgstr "Un préréglage avec le nom \"%1%\" existe déjà."
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/SavePresetDialog.cpp:219
 msgctxt "PresetName"
 msgid "Copy"
 msgstr "Copie"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
 msgid "Press to activate deselection rectangle"
 msgstr "Appuyer pour activer le rectangle de déselection"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
-msgid "Press to activate one direction scaling in Gizmo scale"
-msgstr ""
-"Appuyez pour activer le redimensionnement\n"
-"dans une direction pour le Gizmo"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:156
 msgid "Press to activate selection rectangle"
 msgstr "Appuyer pour activer le rectangle de sélection"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
-msgid ""
-"Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\n"
-"selected objects around their own center"
-msgstr ""
-"Appuyer pour redimensionner (à l'échelle du Gizmo) ou faire pivoter (rotation du Gizmo)\n"
-"les objets sélectionnés autour de leur propre centre"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:155
 msgid ""
 "Press to select multiple objects\n"
 "or move multiple objects with mouse"
@@ -5491,164 +6375,189 @@ msgstr ""
 "Clicquez pour sélectionner plusieurs objets\n"
 "ou pour déplacer plusieurs objets avec la souris"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
-#, no-c-format
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
 msgid ""
-"Press to snap by 5% in Gizmo scale\n"
-"or to snap by 1mm in Gizmo move"
+"Press to speed up 5 times while moving thumb\n"
+"with arrow keys or mouse wheel"
 msgstr ""
-"Appuyer pour modifier de 5% à l'échelle du Gizmo\n"
-"ou pour modifier d'1 mm le mouvement du Gizmo"
+"Appuyez pour accélérer 5 fois tout en déplaçant le pouce\n"
+"avec les touches fléchées ou la molette de la souris"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4105
-#: src/slic3r/GUI/Tab.cpp:2390
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 src/slic3r/GUI/Plater.cpp:4052
+#: src/slic3r/GUI/Tab.cpp:2559
 msgid "Preview"
 msgstr "Aperçu"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
 msgid "Preview hollowed and drilled model"
 msgstr "Aperçu du modèle évidé et percé"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid "Previously sliced file ("
 msgstr "Fichier précédemment découpé ("
 
-#: src/libslic3r/PrintConfig.cpp:1851
+#: src/libslic3r/PrintConfig.cpp:1993
 msgid "Prime all printing extruders"
 msgstr "Préparer tous les extrudeurs d'impression"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1521
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/libslic3r/Preset.cpp:1300
 msgid "print"
 msgstr "imprimer"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/GCodeViewer.cpp:2436 src/slic3r/GUI/GCodeViewer.cpp:2451
+msgid "Print"
+msgstr "Imprimer"
+
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Print &Host Upload Queue"
 msgstr "File d'Attente de Téléchargement de l'&Hôte d'Impression"
 
-#: src/libslic3r/PrintConfig.cpp:471
+#: src/libslic3r/PrintConfig.cpp:507
 msgid "Print contour perimeters from the outermost one to the innermost one instead of the default inverse order."
 msgstr "Imprimer les périmètres de l'extérieur vers l'intérieur au lieu de l'ordre par défaut qui est inversé."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Print Diameters"
 msgstr "Diamètres d'Impression"
 
-#: src/slic3r/GUI/Tab.cpp:1944 src/slic3r/GUI/Tab.cpp:2123
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:209 src/slic3r/GUI/Tab.cpp:2024
 msgid "Print Host upload"
 msgstr "Téléchargement de l'Hôte d'Impression"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:142
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
 #: src/slic3r/GUI/PrintHostDialogs.cpp:136
 msgid "Print host upload queue"
 msgstr "File d'Attente de téléchargement de l'hôte d'impression"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:970
+#: src/slic3r/GUI/DoubleSlider.cpp:1093
 msgid "Print mode"
 msgstr "Mode d'impression"
 
-#: src/slic3r/GUI/Tab.hpp:328 src/slic3r/GUI/Tab.hpp:431
+#: src/slic3r/GUI/GCodeViewer.cpp:2579 src/slic3r/GUI/GUI_Preview.cpp:1476
+msgid "Print pauses"
+msgstr "Pauses d'impression"
+
+#: src/slic3r/GUI/Tab.hpp:378 src/slic3r/GUI/Tab.hpp:502
 msgid "Print Settings"
 msgstr "Réglages d'Impression"
 
-#: src/slic3r/GUI/Plater.cpp:815
+#: src/slic3r/GUI/Plater.cpp:690
 msgid "Print settings"
 msgstr "Réglages d'impression"
 
-#: src/slic3r/GUI/Tab.cpp:1478
+#: src/slic3r/GUI/GLCanvas3D.cpp:4303 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Print Settings Tab"
+msgstr "Onglet Réglages d'impression"
+
+#: src/slic3r/GUI/Tab.cpp:1824
 msgid "Print speed override"
 msgstr "Contournement de la vitesse d'impression"
 
-#: src/libslic3r/GCode.cpp:638
+#: src/libslic3r/GCode.cpp:623
 msgid "Print z"
 msgstr "Imprimer z"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Print&er Settings Tab"
 msgstr "Onglet des Réglages de l'Imprimant&e"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1621
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1750
 msgid "Printable"
 msgstr "Imprimable"
 
-#: src/slic3r/GUI/Plater.cpp:819
+#: src/slic3r/GUI/Plater.cpp:694
 msgid "Printer"
 msgstr "Imprimante"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1525
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/libslic3r/Preset.cpp:1304
 msgid "printer"
 msgstr "imprimer"
 
-#: src/libslic3r/PrintConfig.cpp:2439 src/libslic3r/PrintConfig.cpp:2440
+#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2583
 msgid "Printer absolute correction"
 msgstr "Correction absolue de l'imprimante"
 
-#: src/libslic3r/PrintConfig.cpp:2456 src/libslic3r/PrintConfig.cpp:2457
+#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2600
 msgid "Printer gamma correction"
 msgstr "Correction gamma de l'imprimante"
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1294
 msgid "printer model"
 msgstr "modèle de l'imprimante"
 
-#: src/libslic3r/PrintConfig.cpp:1472
+#: src/libslic3r/PrintConfig.cpp:1580
 msgid "Printer notes"
 msgstr "Notes de l'imprimante"
 
-#: src/libslic3r/PrintConfig.cpp:2431 src/libslic3r/PrintConfig.cpp:2432
-#: src/libslic3r/PrintConfig.cpp:2433
+#: src/libslic3r/PrintConfig.cpp:144
+msgid "Printer preset name"
+msgstr "Nom du préréglage de l'imprimante"
+
+#: src/libslic3r/PrintConfig.cpp:2574 src/libslic3r/PrintConfig.cpp:2575
+#: src/libslic3r/PrintConfig.cpp:2576
 msgid "Printer scaling correction"
 msgstr "Correction de redimensionnement de l'imprimante"
 
-#: src/slic3r/GUI/Tab.hpp:391
+#: src/slic3r/GUI/Tab.hpp:453
 msgid "Printer Settings"
 msgstr "Réglages de l'Imprimante"
 
+#: src/slic3r/GUI/GLCanvas3D.cpp:4305 src/slic3r/GUI/GLCanvas3D.cpp:4941
+msgid "Printer Settings Tab"
+msgstr "Onglet Réglages de l'imprimante"
+
 #: src/libslic3r/PrintConfig.cpp:43 src/libslic3r/PrintConfig.cpp:44
 msgid "Printer technology"
 msgstr "Technologie de l'imprimante"
 
-#: src/libslic3r/PrintConfig.cpp:1466
+#: src/libslic3r/PrintConfig.cpp:1574
 msgid "Printer type"
 msgstr "Type d'imprimante"
 
-#: src/libslic3r/PrintConfig.cpp:1487
+#: src/libslic3r/PrintConfig.cpp:1595
 msgid "Printer variant"
 msgstr "Variante d'imprimante"
 
-#: src/libslic3r/PrintConfig.cpp:1481
+#: src/libslic3r/PrintConfig.cpp:1589
 msgid "Printer vendor"
 msgstr "Fabriquant de l'imprimante"
 
-#: src/libslic3r/Print.cpp:1388
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:476
+msgid "Printer with name \"%1%\" already exists."
+msgstr "L'imprimante avec le nom \"%1%\" existe déjà."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:587
+msgid "Printer:"
+msgstr "Imprimante :"
+
+#: src/libslic3r/Print.cpp:1414
 msgid "Printing with multiple extruders of differing nozzle diameters. If support is to be printed with the current extruder (support_material_extruder == 0 or support_material_interface_extruder == 0), all nozzles have to be of the same diameter."
 msgstr "Impression avec plusieurs extrudeurs de différents diamètres de buse. Si le support doit être imprimé avec l'extrudeur courant (support_material_extruder == 0 ou support_material_interface_extruder == 0), toutes les buses doivent avoir le même diamètre."
 
 #. TRN "Processing input_file_basename"
-#: src/slic3r/GUI/MainFrame.cpp:849
+#: src/slic3r/GUI/MainFrame.cpp:1550
 #, c-format
 msgid "Processing %s"
 msgstr "Traitement %s"
 
-#: src/slic3r/GUI/Plater.cpp:2283
-#, c-format
-msgid "Processing input file %s"
-msgstr "Traitement du fichier d'entrée %s"
-
-#: src/libslic3r/PrintObject.cpp:108
+#: src/libslic3r/PrintObject.cpp:114
 msgid "Processing triangulated mesh"
 msgstr "Traitement de maillage triangulé"
 
-#: src/slic3r/GUI/Tab.cpp:1259 src/slic3r/GUI/Tab.cpp:1549
-#: src/slic3r/GUI/Tab.cpp:2020 src/slic3r/GUI/Tab.cpp:2136
-#: src/slic3r/GUI/Tab.cpp:3544 src/slic3r/GUI/Tab.cpp:3672
+#: src/slic3r/GUI/Tab.cpp:1589 src/slic3r/GUI/Tab.cpp:1896
+#: src/slic3r/GUI/Tab.cpp:2229 src/slic3r/GUI/Tab.cpp:2305
+#: src/slic3r/GUI/Tab.cpp:3960 src/slic3r/GUI/Tab.cpp:4091
 msgid "Profile dependencies"
 msgstr "Dépendances du profil"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:566
+#: src/slic3r/GUI/ConfigWizard.cpp:590
 msgid "Profile:"
 msgstr "Profil :"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:150
+#: src/slic3r/GUI/PrintHostDialogs.cpp:148
 msgid "Progress"
 msgstr "Progression"
 
@@ -5656,23 +6565,35 @@ msgstr "Progression"
 msgid "Progress:"
 msgstr "Progression :"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Prusa 3D &Drivers"
 msgstr "&Drivers Prusa 3D"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1995
+#: src/slic3r/GUI/ConfigWizard.cpp:2506
 msgid "Prusa FFF Technology Printers"
 msgstr "Imprimantes à Technologie FFF Prusa"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1998
+#: src/slic3r/GUI/ConfigWizard.cpp:2509
 msgid "Prusa MSLA Technology Printers"
 msgstr "Imprimantes à Technologie MSLA Prusa"
 
-#: src/slic3r/GUI/AboutDialog.cpp:260
+#: src/slic3r/Utils/Http.cpp:78
+msgid "PrusaSlicer detected system SSL certificate store in: %1%"
+msgstr "PrusaSlicer a détecté un stockage de certificats SSL système dans : %1%"
+
+#: src/slic3r/GUI/GUI_Init.cpp:85 src/slic3r/GUI/GUI_Init.cpp:88
+msgid "PrusaSlicer GUI initialization failed"
+msgstr "L'initialisation de la GUI de PrusaSlicer a échoué"
+
+#: src/slic3r/GUI/AboutDialog.cpp:285
 msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
 msgstr "PrusaSlicer est basé sur Slic3r par Alessandro Ranellucci et la communauté RepRap."
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:284
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:525
+msgid "PrusaSlicer is closing: Unsaved Changes"
+msgstr "PrusaSlicer se ferme : modifications non enregistrées"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:259
 #, c-format
 msgid ""
 "PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n"
@@ -5685,7 +6606,11 @@ msgstr ""
 msgid "PrusaSlicer version"
 msgstr "Version de PrusaSlicer"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:815
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:662
+msgid "PrusaSlicer will remember your action."
+msgstr "PrusaSlicer se souviendra de votre action."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1174
 msgid ""
 "PrusaSlicer's user interfaces comes in three variants:\n"
 "Simple, Advanced, and Expert.\n"
@@ -5695,64 +6620,80 @@ msgstr ""
 "Simple, Avancé et Expert.\n"
 "Le mode Simple affiche uniquement les paramètres les plus fréquemment utilisés pertinents pour l'impression 3D régulière. Les deux autres offrent des réglages fins de plus en plus sophistiqués, ils conviennent respectivement aux utilisateurs avancés et experts."
 
-#: src/libslic3r/PrintConfig.cpp:2254
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:668
+msgid "PrusaSlicer: Don't ask me again"
+msgstr "PrusaSlicer : Ne me demandez plus"
+
+#: src/libslic3r/PrintConfig.cpp:2397
 msgid "Purging after toolchange will done inside this object's infills. This lowers the amount of waste but may result in longer print time  due to additional travel moves."
 msgstr "La purge après le changement d'outil sera faite dans le remplissage de l'objet. Cela diminue le gaspillage mais peut rallonger le temps d'impression à cause des mouvements supplémentaires."
 
-#: src/slic3r/GUI/Plater.cpp:544
+#: src/slic3r/GUI/Plater.cpp:410
 msgid "Purging volumes"
 msgstr "Volumes de purge"
 
-#: src/libslic3r/PrintConfig.cpp:2207
+#: src/libslic3r/PrintConfig.cpp:2350
 msgid "Purging volumes - load/unload volumes"
 msgstr "Volumes de purge - volumes de chargement/déchargement"
 
-#: src/libslic3r/PrintConfig.cpp:2214
+#: src/libslic3r/PrintConfig.cpp:2357
 msgid "Purging volumes - matrix"
 msgstr "Volumes de purge - matrice"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:1201
+msgid "Purpose of Machine Limits"
+msgstr "Objectif des limites de la machine"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
 msgid "Quality"
 msgstr "Qualité"
 
-#: src/slic3r/GUI/Tab.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:1402
 msgid "Quality (slower slicing)"
 msgstr "Qualité (découpage plus lent)"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:273
+#: src/slic3r/GUI/GLCanvas3D.cpp:260
 msgid "Quality / Speed"
 msgstr "Qualité / Vitesse"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1182
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1530
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1536
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1849
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:61
+msgid "Quick"
+msgstr "Rapide"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1306
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1661
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1667
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2008
 #, c-format
 msgid "Quick Add Settings (%s)"
 msgstr "Ajout de Réglages Rapide (%s)"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Quick Slice"
 msgstr "Découpage Rapide"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Quick Slice and Save As"
 msgstr "Découpage Rapide et Enregistrer Sous"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
 #, c-format
 msgid "Quit %s"
 msgstr "Quitter %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:294 src/libslic3r/PrintConfig.cpp:511
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Quit, I will move my data now"
+msgstr "Quitter, je vais déplacer mes données maintenant"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:280 src/libslic3r/PrintConfig.cpp:547
 msgid "Radius"
 msgstr "Rayon"
 
-#: src/slic3r/GUI/Tab.cpp:1127
+#: src/slic3r/GUI/Tab.cpp:1456
 msgid "Raft"
 msgstr "Radeau"
 
-#: src/libslic3r/PrintConfig.cpp:1501
+#: src/libslic3r/PrintConfig.cpp:1609
 msgid "Raft layers"
 msgstr "Couches du radeau"
 
@@ -5778,27 +6719,27 @@ msgstr "Espacement de la ligne de ramming"
 msgid "Ramming line width"
 msgstr "Largeur de la ligne d'expulsion"
 
-#: src/libslic3r/PrintConfig.cpp:694
+#: src/libslic3r/PrintConfig.cpp:730
 msgid "Ramming parameters"
 msgstr "Paramètres de l'expulsion"
 
-#: src/slic3r/GUI/Tab.cpp:1505
+#: src/slic3r/GUI/Tab.cpp:1850
 msgid "Ramming settings"
 msgstr "Réglages de l'expulsion"
 
-#: src/libslic3r/PrintConfig.cpp:1629
+#: src/libslic3r/PrintConfig.cpp:1737
 msgid "Random"
 msgstr "Aléatoire"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 msgid "Range"
 msgstr "Zone"
 
-#: src/libslic3r/SLAPrintSteps.cpp:65
+#: src/libslic3r/SLAPrintSteps.cpp:66
 msgid "Rasterizing layers"
 msgstr "Tramage des couches"
 
-#: src/slic3r/GUI/MainFrame.cpp:596
+#: src/slic3r/GUI/MainFrame.cpp:1202
 msgid "Re&load from disk"
 msgstr "Recharger à partir du dis&que"
 
@@ -5810,210 +6751,243 @@ msgstr "Reconfigurer"
 msgid "Ready"
 msgstr "Prêt"
 
-#: src/slic3r/GUI/Plater.cpp:3115
+#: src/slic3r/GUI/Plater.cpp:2915
 msgid "Ready to slice"
 msgstr "Prêt à découper"
 
-#: src/slic3r/GUI/MainFrame.cpp:669 src/libslic3r/PrintConfig.cpp:1632
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
+#: src/libslic3r/PrintConfig.cpp:1740
 msgid "Rear"
 msgstr "Arrière"
 
-#: src/slic3r/GUI/MainFrame.cpp:669
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
 msgid "Rear View"
 msgstr "Vue Arrière"
 
-#: src/slic3r/GUI/MainFrame.cpp:413
+#: src/slic3r/GUI/MainFrame.cpp:994
 msgid "Recent projects"
 msgstr "Proj&ets récents"
 
-#: src/slic3r/GUI/PresetHints.cpp:263
+#: src/slic3r/GUI/PresetHints.cpp:262
 #, c-format
 msgid "Recommended object thin wall thickness for layer height %.2f and"
 msgstr "Épaisseur des parois fines de l'objet recommandée pour la hauteur de couche %.2f et"
 
-#: src/slic3r/GUI/PresetHints.cpp:274
+#: src/slic3r/GUI/PresetHints.cpp:273
 msgid "Recommended object thin wall thickness: Not available due to excessively small extrusion width."
 msgstr "Épaisseur recommandée pour la paroi mince de l'objet : Non disponible en raison de la largeur d'extrusion excessivement petite."
 
-#: src/slic3r/GUI/PresetHints.cpp:247
+#: src/slic3r/GUI/PresetHints.cpp:246
 msgid "Recommended object thin wall thickness: Not available due to invalid layer height."
 msgstr "Épaisseur des parois fines de l'objet recommandée : Non disponible car la hauteur de couche est invalide."
 
-#: src/slic3r/GUI/GUI_App.cpp:450 src/slic3r/GUI/GUI_App.cpp:459
+#: src/slic3r/GUI/GUI_App.cpp:1102 src/slic3r/GUI/GUI_App.cpp:1115
 msgid "Recreating"
 msgstr "Re-création"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:73
+#: src/slic3r/GUI/BedShapeDialog.cpp:141
 msgid "Rectangular"
 msgstr "Rectangle"
 
-#: src/libslic3r/PrintConfig.cpp:425 src/libslic3r/PrintConfig.cpp:843
-#: src/libslic3r/PrintConfig.cpp:2009
+#: src/libslic3r/PrintConfig.cpp:460 src/libslic3r/PrintConfig.cpp:881
+#: src/libslic3r/PrintConfig.cpp:2151
 msgid "Rectilinear"
 msgstr "Rectiligne"
 
-#: src/libslic3r/PrintConfig.cpp:2010
+#: src/libslic3r/PrintConfig.cpp:2152
 msgid "Rectilinear grid"
 msgstr "Grille rectiligne"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4657 src/slic3r/GUI/KBShortcutsDialog.cpp:131
-#: src/slic3r/GUI/MainFrame.cpp:584
+#: src/slic3r/GUI/GLCanvas3D.cpp:5067 src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/MainFrame.cpp:1190
 msgid "Redo"
 msgstr "Recommencer"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Redo %1$d Action"
 msgid_plural "Redo %1$d Actions"
 msgstr[0] "Répéter %1$d Action"
 msgstr[1] "Répéter %1$d Actions"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Redo History"
 msgstr "Répéter Historique"
 
-#: src/slic3r/GUI/Tab.cpp:1098
+#: src/slic3r/GUI/Tab.cpp:1426
 msgid "Reducing printing time"
 msgstr "Réduction du temps d'impression"
 
-#: src/slic3r/GUI/Plater.cpp:3452
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
+msgid "Refresh Printers"
+msgstr "Actualiser les imprimantes"
+
+#: src/libslic3r/PrintConfig.cpp:145
+msgid "Related printer preset name"
+msgstr "Nom du préréglage d'imprimante associé"
+
+#: src/slic3r/GUI/Plater.cpp:3257
 msgid "Reload all from disk"
 msgstr "Tout recharger à partir du disque"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:798 src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3225
-#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/ConfigWizard.cpp:1157 src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3028
+#: src/slic3r/GUI/Plater.cpp:3852 src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload from disk"
 msgstr "Recharger à partir du disque"
 
-#: src/slic3r/GUI/Plater.cpp:3339
+#: src/slic3r/GUI/Plater.cpp:3142
 msgid "Reload from:"
 msgstr "Recharger depuis :"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:129
 msgid "Reload plater from disk"
 msgstr "Recharger le plateau depuis le disque"
 
-#: src/slic3r/GUI/MainFrame.cpp:597
+#: src/slic3r/GUI/MainFrame.cpp:1203
 msgid "Reload the plater from disk"
 msgstr "Recharger le plateau à partir du disque"
 
-#: src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload the selected object from disk"
 msgstr "Recharger l'objet sélectionné à partir du disque"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3934
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3852
 msgid "Reload the selected volumes from disk"
 msgstr "Recharger les volumes sélectionnés à partir du disque"
 
-#: src/slic3r/GUI/Preferences.cpp:39
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Remaining time"
+msgstr "Temps restant"
+
+#: src/slic3r/GUI/GUI_App.cpp:720 src/slic3r/GUI/UnsavedChangesDialog.cpp:653
+msgid "Remember my choice"
+msgstr "Se souvenir de mon choix"
+
+#: src/slic3r/GUI/Preferences.cpp:52
 msgid "Remember output directory"
 msgstr "Se souvenir du répertoire de sortie"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/MainFrame.cpp:166
+msgid "Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases"
+msgstr "Pensez à vérifier les mises à jours sur https://github.com/prusa3d/PrusaSlicer/releases"
+
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "remove"
 msgstr "retirer"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:190 src/slic3r/GUI/BedShapeDialog.cpp:269
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/BedShapeDialog.cpp:413
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Remove"
 msgstr "Retirer"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
 msgid "Remove all holes"
 msgstr "Supprimer tous les trous"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
 msgid "Remove all points"
 msgstr "Retirer tous les points"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:246
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:35
+msgid "Remove all selection"
+msgstr "Supprimer toute la sélection"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:239
 msgid "Remove detail"
 msgstr "Supprimer les détails"
 
-#: src/slic3r/GUI/Plater.cpp:879
-msgid "Remove device"
-msgstr "Supprimer l'appareil"
-
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:182
 msgid "Remove extruder from sequence"
 msgstr "Supprimer l'extrudeur de la séquence"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4537 src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/GLCanvas3D.cpp:4903 src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove instance"
 msgstr "Supprimer l'instance"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
 msgid "Remove Instance of the selected object"
 msgstr "Supprimer l'instance de l'objet sélectionné"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:153
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:161
 msgid "Remove layer range"
 msgstr "Supprimer la zone de couche"
 
-#: src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove one instance of the selected object"
 msgstr "Supprime une instance de l'objet sélectionné"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:95
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:98
 msgid "Remove parameter"
 msgstr "Supprimer le paramètre"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Remove point"
 msgstr "Supprimer le point"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Remove point from selection"
 msgstr "Supprimer le point de la sélection"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
 msgid "Remove selected holes"
 msgstr "Supprimer les trous sélectionnés"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1371
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218
 msgid "Remove selected points"
 msgstr "Retirer les points sélectionnés"
 
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:34
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:368
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:378
+msgid "Remove selection"
+msgstr "Supprimer la sélection"
+
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
 msgid "Remove the selected object"
 msgstr "Retirer l'objet sélectionné"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:453
+#: src/slic3r/GUI/ConfigWizard.cpp:456
 msgid "Remove user profiles (a snapshot will be taken beforehand)"
 msgstr "Supprimer les profils utilisateurs (un instantané sera pris au préalable)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1765
 msgid "Rename"
 msgstr "Renommer"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Object"
 msgstr "Renommer l'Objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Sub-object"
 msgstr "Renommer le Sous-objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Renaming"
 msgstr "Renommage"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:115
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:150
 msgid "Renaming of the G-code after copying to the selected destination folder has failed. Current path is %1%.tmp. Please try exporting again."
 msgstr "La tentative pour renommer le G-code après l'avoir copié dans le dossier sélectionné a échoué. Le chemin actuel est %1%.tmp. Veuillez tenter à nouveau l'export."
 
-#: src/libslic3r/PrintConfig.cpp:3515
+#: src/slic3r/GUI/Preferences.cpp:255
+msgid "Render"
+msgstr "Rendre"
+
+#: src/libslic3r/PrintConfig.cpp:3720
 msgid "Render with a software renderer"
 msgstr "Rendu avec avec un logiciel de rendu"
 
-#: src/libslic3r/PrintConfig.cpp:3516
+#: src/libslic3r/PrintConfig.cpp:3721
 msgid "Render with a software renderer. The bundled MESA software renderer is loaded instead of the default OpenGL driver."
 msgstr "Appliquer un rendu avec un logiciel de rendu. Le logiciel de rendu MESA qui est fourni est chargé à la place du pilote OpenGL présent par défaut."
 
-#: src/slic3r/GUI/MainFrame.cpp:911 src/libslic3r/PrintConfig.cpp:3447
+#: src/slic3r/GUI/MainFrame.cpp:1612 src/libslic3r/PrintConfig.cpp:3646
 msgid "Repair"
 msgstr "Réparer"
 
@@ -6037,38 +7011,38 @@ msgstr "Le fichier 3MF réparé ne contient aucun volume"
 msgid "Repairing model by the Netfabb service"
 msgstr "Réparation d'un modèle par le service Netfabb"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat last quick slice"
 msgstr "Répéter le dernier découpage rapide"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat Last Quick Slice"
 msgstr "Répéter le Dernier Découpage Rapide"
 
-#: src/slic3r/GUI/Tab.cpp:3083
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:477
 msgid "Replace?"
 msgstr "Remplacer ?"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
 msgid "Report an I&ssue"
 msgstr "S&ignaler un Problème"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
 #, c-format
 msgid "Report an issue on %s"
 msgstr "Signaler un problème sur %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:713
+#: src/slic3r/Utils/PresetUpdater.cpp:733
 #, c-format
 msgid "requires max. %s"
 msgstr "nécessite max. %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:710
+#: src/slic3r/Utils/PresetUpdater.cpp:730
 #, c-format
 msgid "requires min. %s"
 msgstr "nécessite min. %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:705
+#: src/slic3r/Utils/PresetUpdater.cpp:726
 #, c-format
 msgid "requires min. %s and max. %s"
 msgstr "nécessite min. %s et max. %s"
@@ -6077,270 +7051,300 @@ msgstr "nécessite min. %s et max. %s"
 msgid "Rescan"
 msgstr "Scanner à nouveau"
 
-#: src/slic3r/GUI/Tab.cpp:1906
-msgid "Rescan serial ports"
-msgstr "Rescanner les ports série"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:313
+#: src/slic3r/GUI/GLCanvas3D.cpp:299
 msgid "Reset"
 msgstr "Réinitialiser"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1373
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220
 msgid "Reset clipping plane"
 msgstr "Réinitialiser le plan de coupe"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:59
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:26
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
 msgid "Reset direction"
 msgstr "Réinitialiser la direction"
 
-#: src/slic3r/GUI/Plater.cpp:2723
+#: src/slic3r/GUI/Plater.cpp:2684
 msgid "Reset Project"
 msgstr "Réinitialiser le Projet"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:372
 msgid "Reset rotation"
 msgstr "Réinitialiser la rotation"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:394
 msgid "Reset Rotation"
 msgstr "Réinitialiser la Rotation"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:397
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:399
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:407
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409
 msgid "Reset scale"
 msgstr "Réinitialiser l'échelle"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:252
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:136
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:118
+msgid "Reset selection"
+msgstr "Réinitialiser la sélection"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:243
 msgid "Reset to base"
 msgstr "Réinitialiser à la base"
 
-#: src/slic3r/GUI/Tab.cpp:2394
+#: src/slic3r/GUI/Tab.cpp:2564
 msgid "Reset to Filament Color"
 msgstr "Réinitialiser la Couleur du Filament"
 
-#: src/libslic3r/PrintConfig.cpp:1511
+#: src/libslic3r/PrintConfig.cpp:1619
 msgid "Resolution"
 msgstr "Résolution"
 
-#: src/libslic3r/PrintConfig.cpp:1529
+#: src/libslic3r/PrintConfig.cpp:1637
 msgid "Retract amount before wipe"
 msgstr "Quantité de rétractation avant essuyage"
 
-#: src/libslic3r/PrintConfig.cpp:1537
+#: src/libslic3r/PrintConfig.cpp:1645
 msgid "Retract on layer change"
 msgstr "Rétracter lors des changements de couche"
 
-#: src/slic3r/GUI/Tab.cpp:1324 src/slic3r/GUI/Tab.cpp:1383
-#: src/slic3r/GUI/Tab.cpp:2370
+#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/Tab.cpp:1670
+#: src/slic3r/GUI/Tab.cpp:2539
 msgid "Retraction"
 msgstr "Rétraction"
 
-#: src/libslic3r/PrintConfig.cpp:1523
+#: src/libslic3r/PrintConfig.cpp:1631
 msgid "Retraction is not triggered when travel moves are shorter than this length."
 msgstr "La rétraction n'est pas déclenchée lorsque les déplacements sont plus courts que cette distance."
 
-#: src/libslic3r/PrintConfig.cpp:1544
+#: src/libslic3r/PrintConfig.cpp:1652
 msgid "Retraction Length"
 msgstr "Longueur de Rétractation"
 
-#: src/libslic3r/PrintConfig.cpp:1552
+#: src/libslic3r/PrintConfig.cpp:1660
 msgid "Retraction Length (Toolchange)"
 msgstr "Longueur de Rétractation (changement d'outil)"
 
-#: src/libslic3r/PrintConfig.cpp:1604 src/libslic3r/PrintConfig.cpp:1605
+#: src/libslic3r/PrintConfig.cpp:1712 src/libslic3r/PrintConfig.cpp:1713
 msgid "Retraction Speed"
 msgstr "Vitesse de Rétractation"
 
-#: src/slic3r/GUI/Tab.cpp:2386
+#: src/slic3r/GUI/Tab.cpp:2555
 msgid "Retraction when tool is disabled (advanced settings for multi-extruder setups)"
 msgstr "Rétractation lorsque l'outil est désactivé (réglages avancés pour les configurations multi-extrudeurs)"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:254
+#: src/slic3r/GUI/GCodeViewer.cpp:2528 src/slic3r/GUI/GUI_Preview.cpp:336
+#: src/slic3r/GUI/GUI_Preview.cpp:1472
 msgid "Retractions"
 msgstr "Rétractions"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/Preferences.cpp:198
+msgid "Reverse direction of zoom with mouse wheel"
+msgstr "Inverser la direction du zoom avec la molette de la souris"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4886
+msgid "Revert conversion from imperial units"
+msgstr "Annuler la conversion des unités impériales"
+
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right"
 msgstr "Droite"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:402
+#: src/slic3r/GUI/GUI_ObjectList.cpp:449
 msgid "Right button click the icon to change the object printable property"
 msgstr "Clic droit sur l'icône pour changer les propriétés imprimables de l'objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:396
+#: src/slic3r/GUI/GUI_ObjectList.cpp:443
 msgid "Right button click the icon to change the object settings"
 msgstr "Clic droit sur l'icône pour changer les réglages de l'objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:359
+#: src/slic3r/GUI/GUI_ObjectList.cpp:406
 msgid "Right button click the icon to fix STL through Netfabb"
 msgstr "Clic droit sur l'icône pour réparer le STL avec Netfabb"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Right click"
 msgstr "Clic droit"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:243
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:31
+msgid "Right mouse button"
+msgstr "Bouton droit de la souris"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:237
 msgid "Right mouse button:"
 msgstr "Clic droit souris :"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right View"
 msgstr "Vue Droite"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:480
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:499
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:517
-#: src/libslic3r/PrintConfig.cpp:3451
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:513
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:527
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:546
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562
+#: src/libslic3r/PrintConfig.cpp:3650
 msgid "Rotate"
 msgstr "Pivoter"
 
-#: src/libslic3r/PrintConfig.cpp:3456
+#: src/libslic3r/PrintConfig.cpp:3655
 msgid "Rotate around X"
 msgstr "Pivoter autour de X"
 
-#: src/libslic3r/PrintConfig.cpp:3461
+#: src/libslic3r/PrintConfig.cpp:3660
 msgid "Rotate around Y"
 msgstr "Pivoter autour de Y"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:172
 msgid "Rotate lower part upwards"
 msgstr "Pivoter la partie basse vers le haut"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Rotate selection 45 degrees CCW"
 msgstr "Faire pivoter la sélection de 45 degrés dans le sens inverse des aiguilles d'une montre"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Rotate selection 45 degrees CW"
 msgstr "Faire pivoter la sélection de 45 degrés dans le sens des aiguilles d'une montre"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458
-#: src/slic3r/GUI/Mouse3DController.cpp:304
-#: src/slic3r/GUI/Mouse3DController.cpp:321
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:210
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:224
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:506
+#: src/slic3r/GUI/Mouse3DController.cpp:288
+#: src/slic3r/GUI/Mouse3DController.cpp:309
 msgid "Rotation"
 msgstr "Rotation"
 
-#: src/libslic3r/PrintConfig.cpp:3457
+#: src/libslic3r/PrintConfig.cpp:3656
 msgid "Rotation angle around the X axis in degrees."
 msgstr "Angle de rotation autour de l'axe X en degrés."
 
-#: src/libslic3r/PrintConfig.cpp:3462
+#: src/libslic3r/PrintConfig.cpp:3661
 msgid "Rotation angle around the Y axis in degrees."
 msgstr "Angle de rotation autour de l'axe Y en degrés."
 
-#: src/libslic3r/PrintConfig.cpp:3452
+#: src/libslic3r/PrintConfig.cpp:3651
 msgid "Rotation angle around the Z axis in degrees."
 msgstr "Angle de rotation autour de l'axe Z en degrés."
 
-#: src/slic3r/GUI/GUI_App.cpp:797
+#: src/slic3r/GUI/GUI_App.cpp:1474
 #, c-format
 msgid "Run %s"
 msgstr "Run %s"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:128
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:478
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:520
 msgid "Running post-processing scripts"
 msgstr "Exécuter des scripts de post-traitement"
 
 #: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:83
-#: src/libslic3r/PrintConfig.cpp:644 src/libslic3r/PrintConfig.cpp:688
-#: src/libslic3r/PrintConfig.cpp:703 src/libslic3r/PrintConfig.cpp:2408
-#: src/libslic3r/PrintConfig.cpp:2417 src/libslic3r/PrintConfig.cpp:2527
-#: src/libslic3r/PrintConfig.cpp:2535 src/libslic3r/PrintConfig.cpp:2543
-#: src/libslic3r/PrintConfig.cpp:2550 src/libslic3r/PrintConfig.cpp:2558
-#: src/libslic3r/PrintConfig.cpp:2566
+#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:724
+#: src/libslic3r/PrintConfig.cpp:739 src/libslic3r/PrintConfig.cpp:2551
+#: src/libslic3r/PrintConfig.cpp:2560 src/libslic3r/PrintConfig.cpp:2670
+#: src/libslic3r/PrintConfig.cpp:2678 src/libslic3r/PrintConfig.cpp:2686
+#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2701
+#: src/libslic3r/PrintConfig.cpp:2709
 msgid "s"
 msgstr "s"
 
-#: src/slic3r/GUI/MainFrame.cpp:481 src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1072 src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end G-code"
 msgstr "&Envoyer le G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end to print"
 msgstr "Envoyer pour imprimer"
 
-#. TRN Preset
-#: src/slic3r/GUI/Tab.cpp:3417
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:642
+msgid "Save"
+msgstr "Enregistrer"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:72
 #, c-format
 msgid "Save %s as:"
 msgstr "Enregistrer %s sous :"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 #, c-format
 msgid "Save %s file as:"
 msgstr "Enregistrer le fichier %s sous :"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1046
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:912
 msgid "Save changes?"
 msgstr "Enregistrer les modifications ?"
 
-#: src/libslic3r/PrintConfig.cpp:3386
+#: src/libslic3r/PrintConfig.cpp:3585
 msgid "Save config file"
 msgstr "Sauvegarder le fichier de configuration"
 
-#: src/slic3r/GUI/MainFrame.cpp:925
+#: src/slic3r/GUI/MainFrame.cpp:1626
 msgid "Save configuration as:"
 msgstr "Enregistrer la configuration sous :"
 
-#: src/libslic3r/PrintConfig.cpp:3387
+#: src/libslic3r/PrintConfig.cpp:3586
 msgid "Save configuration to the specified file."
 msgstr "Enregistrer la configuration dans le fichier spécifié."
 
 #. TRN "Save current Settings"
-#: src/slic3r/GUI/Tab.cpp:133
+#: src/slic3r/GUI/Tab.cpp:203
 #, c-format
 msgid "Save current %s"
 msgstr "Enregistrer l'état actuel %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "Save current project file"
 msgstr "Sauvegarder le fichier du projet en cours"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save current project file as"
 msgstr "Sauvegarder le fichier du projet en cours sous"
 
-#: src/slic3r/GUI/Plater.cpp:2604
+#: src/slic3r/GUI/Plater.cpp:2566
 msgid "Save file as:"
 msgstr "Enregistrer le fichier sous :"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save G-code file as:"
 msgstr "Sauvegarder le fichier G-code en tant que :"
 
-#: src/slic3r/GUI/MainFrame.cpp:899
+#: src/slic3r/GUI/MainFrame.cpp:1600
 msgid "Save OBJ file (less prone to coordinate errors than STL) as:"
 msgstr "Enregistrer le fichier OBJ (moins enclin aux erreurs de coordonnées que le STL) sous :"
 
-#: src/slic3r/GUI/Tab.hpp:443
+#: src/slic3r/GUI/SavePresetDialog.cpp:190
+#: src/slic3r/GUI/SavePresetDialog.cpp:196
 msgid "Save preset"
 msgstr "Enregistrer le préréglage"
 
-#: src/slic3r/GUI/MainFrame.cpp:980
+#: src/slic3r/GUI/MainFrame.cpp:1681
 msgid "Save presets bundle as:"
 msgstr "Enregistrer le lot de préréglages sous :"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save Project &as"
 msgstr "Sauveg&arder le Projet &sous"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:114
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:107
 msgid "Save project (3mf)"
 msgstr "Sauvegarder le projet (3mf)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:115
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:108
 msgid "Save project as (3mf)"
 msgstr "Sauvegarder le projet en tant que (3mf)"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save SL1 file as:"
 msgstr "Sauvegarder le fichier SL1 sous :"
 
-#: src/slic3r/GUI/MainFrame.cpp:838
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:744
+msgid "Save the selected options to preset \"%1%\"."
+msgstr "Enregistrer les options sélectionnées dans le préréglage \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Save the selected options."
+msgstr "Enregistrer les options sélectionnées."
+
+#: src/slic3r/GUI/MainFrame.cpp:1539
 msgid "Save zip file as:"
 msgstr "Sauvegarder le fichier zip sous :"
 
@@ -6350,159 +7354,184 @@ msgstr "Sauvegarder le fichier zip sous :"
 msgid "Saving mesh into the 3MF container failed."
 msgstr "Échec de la sauvegarde du maillage dans le contenant 3MF."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:47
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:230
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:500
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:518
-#: src/libslic3r/PrintConfig.cpp:3466
+#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:78
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:238
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:547
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:563
+#: src/libslic3r/PrintConfig.cpp:3665
 msgid "Scale"
 msgstr "Redimensionner"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:459
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:507
 msgid "Scale factors"
 msgstr "Échelle"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
-msgid ""
-"Scale selection to fit print volume\n"
-"in Gizmo scale"
-msgstr ""
-"Redimensionner la sélection pour l'adapter au volume d'impression\n"
-"à l'échelle du Gizmo"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale the selected object to fit the print volume"
 msgstr "Redimensionner l'objet sélectionné pour qu'il s'ajuste au volume d'impression"
 
-#: src/libslic3r/PrintConfig.cpp:3475
+#: src/libslic3r/PrintConfig.cpp:3674
 msgid "Scale to Fit"
 msgstr "Redimensionner pour Ajuster"
 
-#: src/slic3r/GUI/Selection.cpp:939
+#: src/slic3r/GUI/Selection.cpp:988
 msgid "Scale To Fit"
 msgstr "Redimensionner pour Ajuster"
 
-#: src/libslic3r/PrintConfig.cpp:3476
+#: src/libslic3r/PrintConfig.cpp:3675
 msgid "Scale to fit the given volume."
 msgstr "Redimensionner pour ajuster à un volume donné."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale to print volume"
 msgstr "Redimensionner pour ajuster au volume d'impression"
 
-#: src/libslic3r/PrintConfig.cpp:3467
+#: src/libslic3r/PrintConfig.cpp:3666
 msgid "Scaling factor or percentage."
 msgstr "Facteur ou pourcentage de redimensionnement."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:505
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:545
 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
 msgstr "Planification du téléchargement dans `%1%`. Voir : Imprimer la file d'attente de téléchargement de l'hôte"
 
-#: src/libslic3r/PrintConfig.cpp:1621
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:46
+msgid "Seam painting"
+msgstr "Peinture de jointure"
+
+#: src/libslic3r/PrintConfig.cpp:1729
 msgid "Seam position"
 msgstr "Position de la jointure"
 
-#: src/libslic3r/PrintConfig.cpp:1642
+#: src/libslic3r/PrintConfig.cpp:1750
 msgid "Seam preferred direction"
 msgstr "Direction préférée de la jointure"
 
-#: src/libslic3r/PrintConfig.cpp:1651
+#: src/libslic3r/PrintConfig.cpp:1759
 msgid "Seam preferred direction jitter"
 msgstr "Gigue de la direction préférée de la jointure"
 
+#: src/slic3r/GUI/MainFrame.cpp:1207
+msgid "Searc&h"
+msgstr "Recherc&her"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4957
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 src/slic3r/GUI/Search.cpp:426
+msgid "Search"
+msgstr "Rechercher"
+
+#: src/slic3r/GUI/ImGuiWrapper.cpp:803 src/slic3r/GUI/Search.cpp:460
+msgid "Search in English"
+msgstr "Rechercher en anglais"
+
+#: src/slic3r/GUI/MainFrame.cpp:1216
+msgid "Search in settings"
+msgstr "Rechercher dans les réglages"
+
+#: src/slic3r/GUI/Tab.cpp:222
+msgid "Search in settings [%1%]"
+msgstr "Rechercher dans les réglages [%1%]"
+
 #: src/slic3r/GUI/BonjourDialog.cpp:218
 msgid "Searching for devices"
 msgstr "Recherche des dispositifs"
 
-#: src/slic3r/GUI/Plater.cpp:2858
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:41
 msgid "Searching for optimal orientation"
 msgstr "Recherche de l'orientation optimale"
 
-#: src/slic3r/GUI/GUI_App.cpp:1103
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "See more."
+msgstr "Voir plus."
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "See Releases page."
+msgstr "Voir la page des versions."
+
+#: src/slic3r/GUI/GUI_App.cpp:1895
 msgid "Select a gcode file:"
 msgstr "Sélectionnez un fichier gcode :"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:121
 msgid "Select all objects"
 msgstr "Sélectionner tous les objets"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1370
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217
 msgid "Select all points"
 msgstr "Sélectionner tous les points"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1976
+#: src/slic3r/GUI/ConfigWizard.cpp:2487
 msgid "Select all standard printers"
 msgstr "Sélectionner toutes les imprimantes standard"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
 msgid "Select by rectangle"
 msgstr "Sélectionner par rectangle"
 
-#: src/slic3r/GUI/MainFrame.cpp:944 src/slic3r/GUI/MainFrame.cpp:1006
+#: src/slic3r/GUI/MainFrame.cpp:1645 src/slic3r/GUI/MainFrame.cpp:1707
 msgid "Select configuration to load:"
 msgstr "Sélectionner la configuration à charger :"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:82
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:88
 msgid "Select coordinate space, in which the transformation will be performed."
 msgstr "Sélectionnez un espace de coordonnées dans lequel la transformation sera effectuée."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3971
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4458
 msgid "Select extruder number:"
 msgstr "Sélectionner le numéro de l'extrudeur :"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
 msgid "Select Filament Settings Tab"
 msgstr "Sélectionner l'Onglet des Réglages du Filament"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
 msgid "Select Plater Tab"
 msgstr "Sélectionner l'Onglet du Plateau"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
 msgid "Select Print Settings Tab"
 msgstr "Sélectionner l'Onglet des Réglages d'Impression"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:139
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:135
 msgid "Select Printer Settings Tab"
 msgstr "Sélectionner l'Onglet des Réglages de l'Imprimante"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1265
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1396
 msgid "Select showing settings"
 msgstr "Sélectionner les réglages d'affichage"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Select the language"
 msgstr "Sélectionner la langue"
 
-#: src/slic3r/GUI/Tab.cpp:57
+#: src/slic3r/GUI/Tab.cpp:108
 msgid "Select the print profiles this profile is compatible with."
 msgstr "Sélectionner les profils d'impression avec lesquels ce profil est compatible."
 
-#: src/slic3r/GUI/Tab.cpp:51
+#: src/slic3r/GUI/Tab.cpp:102
 msgid "Select the printers this profile is compatible with."
 msgstr "Sélectionner les imprimantes avec lesquelles ce profil est compatible."
 
-#: src/slic3r/GUI/MainFrame.cpp:889
+#: src/slic3r/GUI/MainFrame.cpp:1590
 msgid "Select the STL file to repair:"
 msgstr "Sélectionner le fichier STL à réparer :"
 
-#: src/slic3r/GUI/Preferences.cpp:237
+#: src/slic3r/GUI/Preferences.cpp:391
 msgid "Select toolbar icon size in respect to the default one."
 msgstr "Sélectionner la taille de l'icône de la barre d'outil par rapport à la taille par défaut."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Select type of part"
 msgstr "Sélectionner le type de pièce"
 
-#: src/slic3r/GUI/Plater.cpp:638
+#: src/slic3r/GUI/Plater.cpp:504
 msgid "Select what kind of pad do you need"
 msgstr "Choisissez le type de socle dont vous avez besoin"
 
-#: src/slic3r/GUI/Plater.cpp:498
+#: src/slic3r/GUI/Plater.cpp:364
 msgid "Select what kind of support do you need"
 msgstr "Choisissez le type de support dont vous avez besoin"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1917
+#: src/slic3r/GUI/DoubleSlider.cpp:2135
 msgid ""
 "Select YES if you want to delete all saved tool changes, \n"
 "NO if you want all tool changes switch to color changes, \n"
@@ -6512,59 +7541,59 @@ msgstr ""
 "NON si vous souhaitez que tous les changements d'outil soient remplacés par des modifications de couleur, \n"
 "ou ANNULER pour ne pas les modifier."
 
-#: src/slic3r/GUI/Selection.cpp:146
+#: src/slic3r/GUI/Selection.cpp:191
 msgid "Selection-Add"
 msgstr "Sélection-Ajouter"
 
-#: src/slic3r/GUI/Selection.cpp:376
+#: src/slic3r/GUI/Selection.cpp:421
 msgid "Selection-Add All"
 msgstr "Sélection-Ajouter Tout"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3299
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3762
 msgid "Selection-Add from list"
 msgstr "Sélection-Ajouter depuis la liste"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6598
+#: src/slic3r/GUI/GLCanvas3D.cpp:7193
 msgid "Selection-Add from rectangle"
 msgstr "Sélection-Ajouter depuis le rectangle"
 
-#: src/slic3r/GUI/Selection.cpp:256
+#: src/slic3r/GUI/Selection.cpp:301
 msgid "Selection-Add Instance"
 msgstr "Sélection-Ajouter Instance"
 
-#: src/slic3r/GUI/Selection.cpp:219
+#: src/slic3r/GUI/Selection.cpp:264
 msgid "Selection-Add Object"
 msgstr "Sélection-Ajouter Objet"
 
-#: src/slic3r/GUI/Selection.cpp:187
+#: src/slic3r/GUI/Selection.cpp:232
 msgid "Selection-Remove"
 msgstr "Sélection-Retirer"
 
-#: src/slic3r/GUI/Selection.cpp:402
+#: src/slic3r/GUI/Selection.cpp:447
 msgid "Selection-Remove All"
 msgstr "Sélection-Retirer Tout"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3291
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3754
 msgid "Selection-Remove from list"
 msgstr "Sélection-Retirer de la liste"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6617
+#: src/slic3r/GUI/GLCanvas3D.cpp:7212
 msgid "Selection-Remove from rectangle"
 msgstr "Sélection-Retirer du rectangle"
 
-#: src/slic3r/GUI/Selection.cpp:275
+#: src/slic3r/GUI/Selection.cpp:320
 msgid "Selection-Remove Instance"
 msgstr "Sélection-Supprimer l'Instance"
 
-#: src/slic3r/GUI/Selection.cpp:238
+#: src/slic3r/GUI/Selection.cpp:283
 msgid "Selection-Remove Object"
 msgstr "Sélection-Supprimer l'Objet"
 
-#: src/slic3r/GUI/MainFrame.cpp:566
+#: src/slic3r/GUI/MainFrame.cpp:1172
 msgid "Selects all objects"
 msgstr "Sélectionner tous les objets"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send G-code"
 msgstr "Envoyer le G-code"
 
@@ -6572,29 +7601,29 @@ msgstr "Envoyer le G-code"
 msgid "Send G-Code to printer host"
 msgstr "Envoyer le G-Code à l'hôte d'imprimante"
 
-#: src/slic3r/GUI/MainFrame.cpp:481
+#: src/slic3r/GUI/MainFrame.cpp:1072
 msgid "Send to print current plate as G-code"
 msgstr "Envoyer pour imprimer le plateau actuel en tant que G-code"
 
-#: src/slic3r/GUI/Plater.cpp:878 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/Plater.cpp:753 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send to printer"
 msgstr "Envoyer à l'imprimante"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1305
+#: src/slic3r/GUI/GLCanvas3D.cpp:1312
 msgid "Seq."
 msgstr "Seq."
 
-#: src/slic3r/GUI/Tab.cpp:1231
+#: src/slic3r/GUI/Tab.cpp:1561
 msgid "Sequential printing"
 msgstr "Impression séquentielle"
 
-#: src/slic3r/GUI/Tab.cpp:1901 src/libslic3r/PrintConfig.cpp:1661
-msgid "Serial port"
-msgstr "Port série"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
+msgid "Sequential Slider"
+msgstr "Curseur séquentiel"
 
-#: src/libslic3r/PrintConfig.cpp:1669
-msgid "Serial port speed"
-msgstr "Vitesse du port série"
+#: src/slic3r/GUI/Preferences.cpp:230
+msgid "Sequential slider applied only to top layer"
+msgstr "Curseur séquentiel appliqué uniquement à la couche supérieur"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:807
 msgid "Serial port:"
@@ -6604,17 +7633,16 @@ msgstr "Port série :"
 msgid "Service name"
 msgstr "Nom du service"
 
-#: src/slic3r/GUI/Tab.cpp:1802 src/slic3r/GUI/Tab.cpp:2046
-#: src/slic3r/GUI/Tab.cpp:3176
+#: src/slic3r/GUI/Tab.cpp:3509 src/slic3r/GUI/Tab.cpp:3588
 msgid "Set"
 msgstr "Appliquer"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1728
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Object"
 msgstr "Définir comme Objet Séparé"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Objects"
 msgstr "Définir comme Objets Séparés"
 
@@ -6622,7 +7650,7 @@ msgstr "Définir comme Objets Séparés"
 msgid "Set extruder change for every"
 msgstr "Définir le changement d'extrudeur pour chaque"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Set extruder for selected items"
 msgstr "Définir l'extrudeur pour les items sélectionnés"
 
@@ -6630,7 +7658,7 @@ msgstr "Définir l'extrudeur pour les items sélectionnés"
 msgid "Set extruder sequence"
 msgstr "Définir la séquence d'extrudeur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1532
+#: src/slic3r/GUI/DoubleSlider.cpp:1728
 msgid "Set extruder sequence for the entire print"
 msgstr "Définir la séquence d'extrusion pour l'ensemble de l'impression"
 
@@ -6638,84 +7666,84 @@ msgstr "Définir la séquence d'extrusion pour l'ensemble de l'impression"
 msgid "Set extruder(tool) sequence"
 msgstr "Définir la séquence d'extrudeur (outil)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
 msgid "Set lower thumb to current slider thumb"
 msgstr "Définir le curseur inférieur sur le curseur actuel"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:297
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305
 msgid "Set Mirror"
 msgstr "Appliquer la Symétrie"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Set number of instances"
 msgstr "Définir le nombre d'instances"
 
-#: src/slic3r/GUI/Plater.cpp:4756
+#: src/slic3r/GUI/Plater.cpp:4860
 #, c-format
 msgid "Set numbers of copies to %d"
 msgstr "Régler le nombre de copies sur %d"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:781
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:828
 msgid "Set Orientation"
 msgstr "Définir l'Orientation"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:750
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:797
 msgid "Set Position"
 msgstr "Définir la Position"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Printable"
 msgstr "Définir Imprimable"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Printable Instance"
 msgstr "Définir une Instance Imprimable"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:846
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:893
 msgid "Set Scale"
 msgstr "Définir l'Échelle"
 
-#: src/libslic3r/PrintConfig.cpp:2393
+#: src/libslic3r/PrintConfig.cpp:2536
 msgid "Set the actual LCD display orientation inside the SLA printer. Portrait mode will flip the meaning of display width and height parameters and the output images will be rotated by 90 degrees."
 msgstr "Définit l'orientation de l'affichage LCD dans l'imprimante SLA. Le mode portrait échangera la signification des paramètres de hauteurs et de largeur et les images de sortie seront pivotées de 90 degrés."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:932
+#: src/slic3r/GUI/ConfigWizard.cpp:1298
 msgid "Set the shape of your printer's bed."
 msgstr "Réglez la forme du plateau de votre imprimante."
 
-#: src/libslic3r/PrintConfig.cpp:556
+#: src/libslic3r/PrintConfig.cpp:592
 msgid "Set this to a non-zero value to allow a manual extrusion width. If left to zero, Slic3r derives extrusion widths from the nozzle diameter (see the tooltips for perimeter extrusion width, infill extrusion width etc). If expressed as percentage (for example: 230%), it will be computed over layer height."
 msgstr "Réglez ce paramètre sur une valeur non-nulle pour définir manuellement la largeur d’extrusion. Si la valeur reste sur zéro, Slic3r calcule la largeur d’extrusion en se basant sur le diamètre de la buse (voir l’info-bulle concernant la largeur d’extrusion du périmètre, la largeur d’extrusion du remplissage, etc…). Si la valeur est exprimée en pourcentage (par exemple : 230%), elle sera calculée par rapport à la hauteur de couche."
 
-#: src/libslic3r/PrintConfig.cpp:448
+#: src/libslic3r/PrintConfig.cpp:484
 msgid "Set this to a non-zero value to set a manual extrusion width for external perimeters. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%), it will be computed over layer height."
 msgstr "Réglez ce paramètre sur une valeur non-nulle pour définir manuellement la largeur d’extrusion pour les périmètres extérieurs. Si la valeur reste sur zéro, la largeur d’extrusion par défaut sera utilisée si définie, sinon la valeur 1.125 x diamètre de la buse sera utilisée. Si la valeur est exprimée en pourcentage (par exemple : 200%), elle sera calculée par rapport à la hauteur de couche."
 
-#: src/libslic3r/PrintConfig.cpp:878
+#: src/libslic3r/PrintConfig.cpp:920
 msgid "Set this to a non-zero value to set a manual extrusion width for first layer. You can use this to force fatter extrudates for better adhesion. If expressed as percentage (for example 120%) it will be computed over first layer height. If set to zero, it will use the default extrusion width."
 msgstr "Réglez ce paramètre sur une valeur non-nulle pour définir manuellement la largeur d’extrusion pour la première couche. Vous pouvez procéder ainsi pour obtenir des extrudats plus épais afin d’avoir une meilleure adhérence. Si la valeur est exprimée en pourcentage (par exemple : 120%), elle sera calculée par rapport à la hauteur de la première couche. Si elle est réglée sur zéro, elle utilisera la largeur d’extrusion par défaut."
 
-#: src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:1873
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Réglez ce paramètre sur une valeur non-nulle pour définir manuellement la largeur d’extrusion pour le remplissage ou les surfaces solides. Si la valeur reste sur zéro, la largeur d’extrusion par défaut sera utilisée si définie, sinon la valeur 1.125 x diamètre de la buse sera utilisée. Si la valeur est exprimée en pourcentage (par exemple : 90%), elle sera calculée par rapport à la hauteur de couche."
 
-#: src/libslic3r/PrintConfig.cpp:2107
+#: src/libslic3r/PrintConfig.cpp:2250
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Réglez ce paramètre sur une valeur non-nulle pour définir manuellement la largeur d’extrusion pour le remplissage ou les surfaces supérieures. Vous voudrez peut-être utiliser des extrudats plus fins pour remplir les zones les plus étroites et obtenir des finitions plus lisses. Si la valeur reste sur zéro, la largeur d’extrusion par défaut sera utilisée si définie, sinon le diamètre de la buse sera utilisé. Si la valeur est exprimée en pourcentage (par exemple : 90%), elle sera calculée par rapport à la hauteur de couche."
 
-#: src/libslic3r/PrintConfig.cpp:1011
+#: src/libslic3r/PrintConfig.cpp:1055
 msgid "Set this to a non-zero value to set a manual extrusion width for infill. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. You may want to use fatter extrudates to speed up the infill and make your parts stronger. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Réglez ce paramètre sur une valeur non-nulle pour définir manuellement la largeur d’extrusion pour le remplissage. Si la valeur reste sur zéro, la largeur d’extrusion par défaut sera utilisée si définie, sinon la valeur 1.125 x diamètre de la buse sera utilisée. Vous voudrez peut-être utiliser des extrudats plus épais pour accélérer le remplissage et rendre vos pièces plus solides. Si la valeur est exprimée en pourcentage (par exemple : 90%), elle sera calculée par rapport à la hauteur de couche."
 
-#: src/libslic3r/PrintConfig.cpp:1419
+#: src/libslic3r/PrintConfig.cpp:1527
 msgid "Set this to a non-zero value to set a manual extrusion width for perimeters. You may want to use thinner extrudates to get more accurate surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%) it will be computed over layer height."
 msgstr "Réglez ce paramètre sur une valeur non-nulle pour définir manuellement une largeur d’extrusion pour les périmètres. Vous voudrez peut-être utiliser des extrudats plus fin pour obtenir des surfaces plus nettes. Si la valeur reste sur zéro, la largeur d’extrusion par défaut sera utilisée si définie, sinon la valeur 1.125 x diamètre de la buse sera utilisée. Si la valeur est exprimée en pourcentage (par exemple : 200%), elle sera calculée par rapport à la hauteur de couche."
 
-#: src/libslic3r/PrintConfig.cpp:1948
+#: src/libslic3r/PrintConfig.cpp:2090
 msgid "Set this to a non-zero value to set a manual extrusion width for support material. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Réglez ce paramètre sur une valeur non-nulle pour définir manuellement la largeur d’extrusion pour les supports. Si la valeur reste sur zéro, la largeur d’extrusion par défaut sera utilisée si définie, sinon le diamètre de la buse sera utilisée. Si la valeur est exprimée en pourcentage (par exemple : 90%), elle sera calculée par rapport à la hauteur de couche."
 
-#: src/libslic3r/PrintConfig.cpp:512
+#: src/libslic3r/PrintConfig.cpp:548
 msgid "Set this to the clearance radius around your extruder. If the extruder is not centered, choose the largest value for safety. This setting is used to check for collisions and to display the graphical preview in the plater."
 msgstr "Paramétrez ceci avec le rayon de dégagement autour de l'extrudeur. Si l'extrudeur n'est pas centré, choisissez la plus grande valeur par sécurité. Ce réglage est utilisé pour vérifier les collisions et afficher l'aperçu graphique sur le plateau."
 
@@ -6723,23 +7751,23 @@ msgstr "Paramétrez ceci avec le rayon de dégagement autour de l'extrudeur. Si
 msgid "Set this to the maximum height that can be reached by your extruder while printing."
 msgstr "Réglez cette valeur sur la hauteur maximum que peut atteindre votre extrudeur au cours de l'impression."
 
-#: src/libslic3r/PrintConfig.cpp:501
+#: src/libslic3r/PrintConfig.cpp:537
 msgid "Set this to the vertical distance between your nozzle tip and (usually) the X carriage rods. In other words, this is the height of the clearance cylinder around your extruder, and it represents the maximum depth the extruder can peek before colliding with other printed objects."
 msgstr "Paramétrez ceci avec la distance verticale entre la pointe de la buse et (habituellement) les tiges du chariot de l'axe X. En d'autres termes, il s'agit de la hauteur du cylindre de dégagement autour de l'extrudeur, et elle représente la profondeur maximum à laquelle peut descendre l'extrudeur avant d'entrer en collision avec d'autres objets imprimés."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Unprintable"
 msgstr "Définir non-Imprimable"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Unprintable Instance"
 msgstr "Définir une Instance non-Imprimable"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
 msgid "Set upper thumb to current slider thumb"
 msgstr "Définir le curseur supérieur sur le curseur actuel"
 
-#: src/libslic3r/PrintConfig.cpp:3509
+#: src/libslic3r/PrintConfig.cpp:3714
 msgid ""
 "Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:trace\n"
 "For example. loglevel=2 logs fatal, error and warning level messages."
@@ -6747,63 +7775,74 @@ msgstr ""
 "Définit la sensibilité de journalisation. 0 :  fatal, 1: erreur, 2 : avertissement, 3 : info, 4 : débogage, 5 : trace\n"
 "Par exemple. loglevel = 2 enregistre les messages d'erreur et d'avertissement de niveau fatal."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:155
+#: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/MainFrame.cpp:1969
 msgid "Settings"
 msgstr "Réglages"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Settings for height range"
 msgstr "Réglages pour la zone de hauteur"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:162
+#: src/slic3r/GUI/Preferences.cpp:431
+msgid "Settings in non-modal window"
+msgstr "Réglages dans une fenêtre non modale"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:161
 msgid "Shall I adjust those settings for supports?"
 msgstr "Dois-je ajuster ces paramètres pour les supports ?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:89
+#: src/slic3r/GUI/ConfigManipulation.cpp:88
 msgid "Shall I adjust those settings in order to enable Spiral Vase?"
 msgstr "Dois-je ajuster ces réglages afin d'activer le Vase Spirale ?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:118
 msgid "Shall I adjust those settings in order to enable the Wipe Tower?"
 msgstr "Dois-je ajuster ces réglages afin d'activer la tour de Nettoyage ?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/ConfigManipulation.cpp:209
 msgid "Shall I switch to rectilinear fill pattern?"
 msgstr "Dois-je passer au motif de remplissage rectiligne?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:139
+#: src/slic3r/GUI/ConfigManipulation.cpp:138
 msgid "Shall I synchronize support layers in order to enable the Wipe Tower?"
 msgstr "Dois-je synchroniser les couches de support afin d'activer la Tour de Nettoyage ?"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2059
+#: src/slic3r/GUI/BedShapeDialog.cpp:156 src/slic3r/GUI/BedShapeDialog.cpp:222
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2215
 msgid "Shape"
 msgstr "Forme"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:256
+#: src/slic3r/GUI/GUI_Preview.cpp:338 src/slic3r/GUI/GUI_Preview.cpp:1478
 msgid "Shells"
 msgstr "Coques"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:249
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:33
+msgid "Shift + Left mouse button"
+msgstr "Maj + bouton gauche de la souris"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:241
 msgid "Shift + Left mouse button:"
 msgstr "Maj + Clic gauche souris :"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:255
+#: src/slic3r/GUI/GLCanvas3D.cpp:245
 msgid "Shift + Right mouse button:"
 msgstr "Maj + Clic droit souris :"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:231
+#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:288
 msgid "Show"
 msgstr "Afficher"
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show &Configuration Folder"
 msgstr "Afficher le Répertoire de &Configuration"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show &labels"
 msgstr "Afficher les &labels"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
 msgid "Show about dialog"
 msgstr "Afficher la boîte de dialogue à propos"
 
@@ -6811,111 +7850,127 @@ msgstr "Afficher la boîte de dialogue à propos"
 msgid "Show advanced settings"
 msgstr "Afficher les réglages avancés"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:159
+#: src/slic3r/GUI/PrintHostDialogs.cpp:157
 msgid "Show error message"
 msgstr "Afficher le message d'erreur"
 
-#: src/slic3r/GUI/Preferences.cpp:95
+#: src/slic3r/GUI/Preferences.cpp:112
 msgid "Show incompatible print and filament presets"
 msgstr "Afficher les préréglages d'impression et de filament incompatibles"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:145
 msgid "Show keyboard shortcuts list"
 msgstr "Afficher la liste des raccourcis clavier"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/GCodeViewer.cpp:2591
+msgid "Show normal mode"
+msgstr "Afficher le mode normal"
+
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show object/instance labels in 3D scene"
 msgstr "Afficher les labels de l'objet /instance dans la scène 3D"
 
+#: src/slic3r/GUI/Preferences.cpp:213
+msgid "Show sidebar collapse/expand button"
+msgstr "Afficher le bouton Réduire/Développer de la barre latérale"
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:377
 msgid "Show simplified settings"
 msgstr "Afficher les réglages simplifiés"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:52
+#: src/slic3r/GUI/Preferences.cpp:169 src/slic3r/GUI/Preferences.cpp:171
+msgid "Show splash screen"
+msgstr "Afficher l'écran de démarrage"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2586
+msgid "Show stealth mode"
+msgstr "Afficher le mode furtif"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
 msgid "Show supports"
 msgstr "Afficher les supports"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "Show system information"
 msgstr "Afficher les informations système"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "Show the 3D editing view"
 msgstr "Afficher la vue d'édition 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Show the 3D slices preview"
 msgstr "Afficher la prévisualisation des tranches 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:617
+#: src/slic3r/GUI/MainFrame.cpp:1224
 msgid "Show the filament settings"
 msgstr "Afficher les réglages de filament"
 
-#: src/libslic3r/PrintConfig.cpp:3372
+#: src/libslic3r/PrintConfig.cpp:3571
 msgid "Show the full list of print/G-code configuration options."
 msgstr "Afficher la liste complète des options de configuration d'impression/G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3377
+#: src/libslic3r/PrintConfig.cpp:3576
 msgid "Show the full list of SLA print configuration options."
 msgstr "Afficher la liste complète des options de configuration d'impression SLA."
 
-#: src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/MainFrame.cpp:941 src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Show the list of the keyboard shortcuts"
 msgstr "Afficher la liste des raccourcis clavier"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "Show the plater"
 msgstr "Afficher le plateau"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "Show the print settings"
 msgstr "Afficher les réglages d'impression"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Show the printer settings"
 msgstr "Afficher les réglages de l'imprimante"
 
-#: src/libslic3r/PrintConfig.cpp:3366
+#: src/libslic3r/PrintConfig.cpp:3565
 msgid "Show this help."
 msgstr "Afficher cette aide."
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show user configuration folder (datadir)"
 msgstr "Afficher le répertoire de configuration utilisateur (datadir)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:185
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
 msgid "Show/Hide 3Dconnexion devices settings dialog"
 msgstr "Afficher/Masquer le dialogue des paramètres des périphériques 3Dconnexion"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
-msgid "Show/Hide Legend"
-msgstr "Afficher/Cacher la Légende"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+msgid "Show/Hide Legend & Estimated printing time"
+msgstr "Afficher/Masquer la légende et le temps d'impression estimé"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:146
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
 msgid "Show/Hide object/instance labels"
 msgstr "Afficher/Masquer les labels de l'objet/instance"
 
-#: src/slic3r/GUI/GUI_App.cpp:813 src/slic3r/GUI/wxExtensions.cpp:753
+#: src/slic3r/GUI/GUI_App.cpp:1504 src/slic3r/GUI/wxExtensions.cpp:673
 msgid "Simple"
 msgstr "Simple"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:820
+#: src/slic3r/GUI/ConfigWizard.cpp:1179
 msgid "Simple mode"
 msgstr "Mode simple"
 
-#: src/slic3r/GUI/GUI_App.cpp:813
+#: src/slic3r/GUI/GUI_App.cpp:1504
 msgid "Simple View Mode"
 msgstr "Mode de Vue Simple"
 
-#: src/slic3r/GUI/Tab.cpp:2298 src/slic3r/GUI/Tab.cpp:2306
+#: src/slic3r/GUI/Tab.cpp:2467 src/slic3r/GUI/Tab.cpp:2475
 msgid "Single extruder MM setup"
 msgstr "Réglage MM pour extrudeur unique"
 
-#: src/libslic3r/PrintConfig.cpp:1845
+#: src/libslic3r/PrintConfig.cpp:1987
 msgid "Single Extruder Multi Material"
 msgstr "Multi Material à extrudeur unique"
 
-#: src/slic3r/GUI/Tab.cpp:1867
+#: src/slic3r/GUI/Tab.cpp:2101
 msgid ""
 "Single Extruder Multi Material is selected, \n"
 "and all extruders must have the same diameter.\n"
@@ -6926,435 +7981,463 @@ msgstr ""
 "Voulez-vous modifier le diamètre pour tous les extrudeurs\n"
 "en utilisant la valeur du diamètre de la buse du premier extrudeur ?"
 
-#: src/slic3r/GUI/Tab.cpp:2307
+#: src/slic3r/GUI/Tab.cpp:2476
 msgid "Single extruder multimaterial parameters"
 msgstr "Paramètres multimatériaux pour extrudeur unique"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:77
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:160
-#: src/slic3r/GUI/Tab.cpp:2324
+#: src/slic3r/GUI/Preferences.cpp:120 src/libslic3r/PrintConfig.cpp:3689
+msgid "Single instance mode"
+msgstr "Mode d'instance unique"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:93
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:240 src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:2493
 msgid "Size"
 msgstr "Taille"
 
-#: src/slic3r/GUI/Tab.cpp:1797 src/slic3r/GUI/Tab.cpp:2041
+#: src/slic3r/GUI/Tab.cpp:2059 src/slic3r/GUI/Tab.cpp:2241
 msgid "Size and coordinates"
 msgstr "Taille et coordonnées"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:78
+#: src/slic3r/GUI/BedShapeDialog.cpp:110
 msgid "Size in X and Y of the rectangular plate."
 msgstr "Taille en X et Y du plateau rectangulaire."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:245 src/slic3r/GUI/Tab.cpp:1111
-#: src/libslic3r/ExtrusionEntity.cpp:318
+#: src/slic3r/GUI/GUI_Preview.cpp:310 src/slic3r/GUI/Tab.cpp:1439
+#: src/libslic3r/ExtrusionEntity.cpp:323 src/libslic3r/ExtrusionEntity.cpp:354
 msgid "Skirt"
 msgstr "Jupe"
 
-#: src/slic3r/GUI/Tab.cpp:1110
+#: src/slic3r/GUI/Tab.cpp:1438
 msgid "Skirt and brim"
 msgstr "Jupe et bordure"
 
-#: src/libslic3r/PrintConfig.cpp:1687
+#: src/libslic3r/PrintConfig.cpp:1795
 msgid "Skirt height"
 msgstr "Hauteur de la jupe"
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/libslic3r/PrintConfig.cpp:1811
 msgid "Skirt Loops"
 msgstr "Boucles de la Jupe"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1334
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1181
 msgid "SLA gizmo keyboard shortcuts"
 msgstr "Raccourcis clavier pour le gizmo SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1058
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:924
 msgid "SLA gizmo turned off"
 msgstr "Gizmo SLA désactivé"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1017
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:897
 msgid "SLA gizmo turned on"
 msgstr "Gizmo SLA activé"
 
-#: src/slic3r/GUI/Plater.cpp:818 src/slic3r/GUI/Preset.cpp:1524
+#: src/slic3r/GUI/Plater.cpp:693 src/libslic3r/Preset.cpp:1303
 msgid "SLA material"
 msgstr "Matériau SLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Material Profiles Selection"
 msgstr "Sélection des Profils Matériaux SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2470 src/libslic3r/PrintConfig.cpp:2471
+#: src/libslic3r/PrintConfig.cpp:2613 src/libslic3r/PrintConfig.cpp:2614
 msgid "SLA material type"
 msgstr "Type de matériau SLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Materials"
 msgstr "Matériaux SLA"
 
-#: src/slic3r/GUI/Preset.cpp:1523
+#: src/libslic3r/Preset.cpp:1302
 msgid "SLA print"
 msgstr "Impression SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2578
+#: src/libslic3r/PrintConfig.cpp:2721
 msgid "SLA print material notes"
 msgstr "Notes concernant le matériau d'impression SLA"
 
-#: src/slic3r/GUI/Plater.cpp:817
+#: src/slic3r/GUI/Plater.cpp:692
 msgid "SLA print settings"
 msgstr "Réglages d'impression SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:996
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:869
 msgid "SLA Support Points"
 msgstr "Points de Support SLA"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:687
-msgid "SLA supports outside the print area were detected"
-msgstr "SLA supports détectés en dehors de la zone d'impression"
+#: src/slic3r/GUI/GLCanvas3D.cpp:635
+msgid "SLA supports outside the print area were detected."
+msgstr "Des supports SLA en dehors de la zone d'impression ont été détectés."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1530
+#: src/slic3r/GUI/ConfigWizard.cpp:1931
 msgid "SLA Technology Printers"
 msgstr "Imprimantes Technologie SLA"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Slab"
-msgstr "Slab"
+msgstr "Pavé"
 
-#: src/libslic3r/PrintConfig.cpp:1333
+#: src/libslic3r/PrintConfig.cpp:1441
 msgid "Slic3r can upload G-code files to a printer host. This field must contain the kind of the host."
 msgstr "Slic3r peut envoyer des fichiers G-codes vers un hôte d'imprimante. Ce champ doit contenir le type d'hôte."
 
-#: src/libslic3r/PrintConfig.cpp:105
+#: src/libslic3r/PrintConfig.cpp:107
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
 msgstr "Slic3r peut envoyer des fichiers G-code à un hôte d'impression. Ce champ doit contenir la clé d'API ou le mot de passe requis pour l'authentification."
 
-#: src/libslic3r/PrintConfig.cpp:98
+#: src/libslic3r/PrintConfig.cpp:100
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
 msgstr "Slic3r peut télécharger des fichiers G-code vers un hôte d'impression. Ce champ doit contenir le nom d'hôte, l'adresse IP ou l'URL de l'instance hôte d'impression."
 
-#: src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1407
 msgid "Slic3r will not scale speed down below this speed."
 msgstr "Slic3r ne descendra pas en-dessous de cette vitesse."
 
-#: src/libslic3r/PrintConfig.cpp:3359
+#: src/libslic3r/PrintConfig.cpp:3558
 msgid "Slice"
 msgstr "Découper"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Slice a file into a G-code"
 msgstr "Découper un fichier en G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Slice a file into a G-code, save as"
 msgstr "Découper un fichier en G-code, enregistrer sous"
 
-#: src/libslic3r/PrintConfig.cpp:87
+#: src/libslic3r/PrintConfig.cpp:89
 msgid "Slice gap closing radius"
 msgstr "Découper le rayon de fermeture de l'espacement"
 
-#: src/slic3r/GUI/Plater.cpp:892 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5110
+#: src/slic3r/GUI/Plater.cpp:767 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5237
 msgid "Slice now"
 msgstr "Découper maintenant"
 
-#: src/libslic3r/PrintConfig.cpp:3333
+#: src/libslic3r/PrintConfig.cpp:3526
 msgid "Slice the model and export SLA printing layers as PNG."
 msgstr "Découper le modèle et exporter les couches d'impression SLA en tant que PNG."
 
-#: src/libslic3r/PrintConfig.cpp:3354
+#: src/libslic3r/PrintConfig.cpp:3547
 msgid "Slice the model and export toolpaths as G-code."
 msgstr "Découper le modèle et exporter les parcours en tant que G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3360
+#: src/libslic3r/PrintConfig.cpp:3559
 msgid "Slice the model as FFF or SLA based on the printer_technology configuration value."
 msgstr "Découper le modèle en tant que FFF ou SLA en fonction de la valeur de configuration de la printer_technology."
 
-#: src/slic3r/GUI/Plater.cpp:216
+#: src/slic3r/GUI/Plater.cpp:222
 msgid "Sliced Info"
 msgstr "Informations de découpage"
 
-#: src/slic3r/GUI/MainFrame.cpp:847 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5107 src/slic3r/GUI/Tab.cpp:1221
-#: src/slic3r/GUI/Tab.cpp:3662
+#: src/slic3r/GUI/MainFrame.cpp:1548 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5234 src/slic3r/GUI/Tab.cpp:1551
+#: src/slic3r/GUI/Tab.cpp:4081
 msgid "Slicing"
 msgstr "Découpe"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:134
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:184
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:170
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:219
 msgid "Slicing complete"
-msgstr "Découpe annulée"
+msgstr "Découpe terminée"
 
-#: src/libslic3r/SLAPrint.cpp:760
+#: src/libslic3r/SLAPrint.cpp:780
 msgid "Slicing done"
 msgstr "Découpe effectuée"
 
-#: src/slic3r/GUI/MainFrame.cpp:874
+#: src/slic3r/GUI/MainFrame.cpp:1575
 msgid "Slicing Done!"
 msgstr "Découpe Effectuée !"
 
-#: src/libslic3r/SLAPrintSteps.cpp:245
+#: src/slic3r/GUI/NotificationManager.cpp:751
+msgid "Slicing finished."
+msgstr "Découpage terminé."
+
+#: src/libslic3r/SLAPrintSteps.cpp:247
 msgid "Slicing had to be stopped due to an internal error: Inconsistent slice index."
 msgstr "La découpe a du être interrompue du fait d'une erreur interne : index de découpage inconsistant."
 
-#: src/libslic3r/SLAPrintSteps.cpp:45
+#: src/libslic3r/SLAPrintSteps.cpp:46
 msgid "Slicing model"
 msgstr "Découpe du modèle"
 
-#: src/libslic3r/SLAPrintSteps.cpp:49
+#: src/libslic3r/SLAPrintSteps.cpp:50
 msgid "Slicing supports"
 msgstr "Découpe des supports"
 
-#: src/libslic3r/PrintConfig.cpp:2414
+#: src/libslic3r/PrintConfig.cpp:2557
 msgid "Slow"
 msgstr "Lent"
 
-#: src/libslic3r/PrintConfig.cpp:1705
+#: src/libslic3r/PrintConfig.cpp:1820
 msgid "Slow down if layer print time is below"
 msgstr "Ralentir si le temps d'impression de la couche est inférieur à"
 
-#: src/libslic3r/PrintConfig.cpp:2415
+#: src/libslic3r/PrintConfig.cpp:2558
 msgid "Slow tilt"
 msgstr "Inclinaison lente"
 
-#: src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1830
 msgid "Small perimeters"
 msgstr "Périmètres courts"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:288
+#: src/libslic3r/PrintConfig.cpp:2801
+msgid "Small pillar diameter percent"
+msgstr "Pourcentage de pilier petit diamètre"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:274
 msgid "Smooth"
 msgstr "Lisse"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:258
+#: src/slic3r/GUI/GLCanvas3D.cpp:247
 msgid "Smoothing"
 msgstr "Lissage"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Snapshot name"
 msgstr "Nom de l'instantané"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Software &Releases"
 msgstr "Softwa&re Publications"
 
-#: src/slic3r/GUI/PresetHints.cpp:184
+#: src/slic3r/GUI/PresetHints.cpp:183
 msgid "solid infill"
 msgstr "remplissage solide"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/ExtrusionEntity.cpp:314
-#: src/libslic3r/PrintConfig.cpp:1756 src/libslic3r/PrintConfig.cpp:1767
+#: src/slic3r/GUI/GUI_Preview.cpp:305 src/libslic3r/ExtrusionEntity.cpp:318
+#: src/libslic3r/ExtrusionEntity.cpp:344 src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:1882
 msgid "Solid infill"
 msgstr "Remplissage solide"
 
-#: src/libslic3r/PrintConfig.cpp:1744
+#: src/libslic3r/PrintConfig.cpp:1859
 msgid "Solid infill every"
 msgstr "Remplissage solide toutes les"
 
-#: src/libslic3r/PrintConfig.cpp:1736
+#: src/libslic3r/PrintConfig.cpp:1851
 msgid "Solid infill extruder"
 msgstr "Extrudeur pour le remplissage solide"
 
-#: src/libslic3r/PrintConfig.cpp:1727
+#: src/libslic3r/PrintConfig.cpp:1842
 msgid "Solid infill threshold area"
 msgstr "Surface de seuil pour le remplissage solide"
 
-#: src/slic3r/GUI/Tab.cpp:1065 src/libslic3r/PrintConfig.cpp:1780
+#: src/slic3r/GUI/Tab.cpp:1387 src/libslic3r/PrintConfig.cpp:1895
 msgid "Solid layers"
 msgstr "Couches solides"
 
-#: src/libslic3r/PrintConfig.cpp:754
+#: src/libslic3r/PrintConfig.cpp:790
 msgid "Soluble material"
 msgstr "Matériau soluble"
 
-#: src/libslic3r/PrintConfig.cpp:755
+#: src/libslic3r/PrintConfig.cpp:791
 msgid "Soluble material is most likely used for a soluble support."
 msgstr "Il est probable qu'un matériau soluble soit utilisé pour un support soluble."
 
-#: src/libslic3r/PrintConfig.cpp:937
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:735
+msgid "Some fields are too long to fit. Right mouse click reveals the full text."
+msgstr "Certains champs sont trop longs pour s'afficher. Un clic droit de la souris révèle le texte intégral."
+
+#: src/libslic3r/PrintConfig.cpp:981
 msgid "Some G/M-code commands, including temperature control and others, are not universal. Set this option to your printer's firmware to get a compatible output. The \"No extrusion\" flavor prevents PrusaSlicer from exporting any extrusion value at all."
 msgstr "Certaines commandes G/M-code, y compris le contrôle de la température ainsi que d'autres, ne sont pas universelles. Paramétrez cette option dans le firmware de votre imprimante pour obtenir une sortie compatible. L'option \"Pas d'extrusion\" empêche complètement PrusaSlicer d'exporter toute valeur d'extrusion."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:688
-msgid "Some objects are not visible"
-msgstr "Certains objets ne sont pas visibles"
+#: src/slic3r/GUI/Plater.cpp:2309
+#, c-format
+msgid ""
+"Some object(s) in file %s looks like saved in inches.\n"
+"Should I consider them as a saved in inches and convert them?"
+msgstr ""
+"Certains objets du fichier %s semblent être enregistrés en pouces.\n"
+"Dois-je les considérer comme enregistrés en pouces et les convertir ?"
 
-#: src/libslic3r/Print.cpp:1226
+#: src/slic3r/GUI/GLCanvas3D.cpp:636
+msgid "Some objects are not visible."
+msgstr "Certains objets ne sont pas visibles."
+
+#: src/libslic3r/Print.cpp:1252
 msgid "Some objects are too close; your extruder will collide with them."
 msgstr "Certains objets sont trop proches ; votre extrudeur va entrer en collision avec eux."
 
-#: src/libslic3r/Print.cpp:1228
+#: src/libslic3r/Print.cpp:1254
 msgid "Some objects are too tall and cannot be printed without extruder collisions."
 msgstr "Certains objets sont trop grands et ne peuvent pas être imprimés sans collision avec l'extrudeur."
 
-#: src/libslic3r/PrintConfig.cpp:2824
+#: src/libslic3r/PrintConfig.cpp:2988
 msgid "Some objects can get along with a few smaller pads instead of a single big one. This parameter defines how far the center of two smaller pads should be. If theyare closer, they will get merged into one pad."
 msgstr "Certains objets peuvent s'accommoder de quelques petits socles au lieu d'un seul grand. Ce paramètre définit à quelle distance le centre de deux petits socles devrait se trouver. S'ils sont proches, ils seront fusionnés en un seul socle."
 
-#: src/libslic3r/PrintConfig.cpp:2187
+#: src/libslic3r/PrintConfig.cpp:2330
 msgid "Some printers or printer setups may have difficulties printing with a variable layer height. Enabled by default."
 msgstr "Certaines imprimantes ou certains réglages d'imprimante peuvent rencontrer des difficultés pour imprimer avec une hauteur de couche variable. Activé par défaut."
 
-#: src/libslic3r/PrintConfig.cpp:1984
+#: src/libslic3r/PrintConfig.cpp:2126
 msgid "Spacing between interface lines. Set zero to get a solid interface."
 msgstr "Espacement entre les lignes d'interface. Mettez à zéro pour obtenir une interface solide."
 
-#: src/libslic3r/PrintConfig.cpp:2018
+#: src/libslic3r/PrintConfig.cpp:1155
+msgid "Spacing between ironing passes"
+msgstr "Espacement entre les passes de lissage"
+
+#: src/libslic3r/PrintConfig.cpp:2160
 msgid "Spacing between support material lines."
 msgstr "Espacement entre les lignes des supports."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:616
-#: src/slic3r/GUI/GUI_Preview.cpp:224 src/slic3r/GUI/Tab.cpp:1145
-#: src/libslic3r/PrintConfig.cpp:235 src/libslic3r/PrintConfig.cpp:458
-#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1048
-#: src/libslic3r/PrintConfig.cpp:1431 src/libslic3r/PrintConfig.cpp:1668
-#: src/libslic3r/PrintConfig.cpp:1716 src/libslic3r/PrintConfig.cpp:1768
-#: src/libslic3r/PrintConfig.cpp:2118
+#: src/slic3r/GUI/GUI_ObjectList.cpp:96 src/slic3r/GUI/GUI_ObjectList.cpp:655
+#: src/slic3r/GUI/GUI_Preview.cpp:278 src/slic3r/GUI/Tab.cpp:1474
+#: src/libslic3r/PrintConfig.cpp:269 src/libslic3r/PrintConfig.cpp:494
+#: src/libslic3r/PrintConfig.cpp:963 src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1165 src/libslic3r/PrintConfig.cpp:1539
+#: src/libslic3r/PrintConfig.cpp:1776 src/libslic3r/PrintConfig.cpp:1831
+#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:2261
 msgid "Speed"
 msgstr "Vitesse"
 
-#: src/libslic3r/PrintConfig.cpp:1670
-msgid "Speed (baud) of USB/serial port for printer connection."
-msgstr "Vitesse (baud) du port USB/série pour la connexion à l'imprimante."
-
-#: src/libslic3r/GCode/PreviewData.cpp:351
+#: src/slic3r/GUI/GCodeViewer.cpp:2238 src/libslic3r/GCode/PreviewData.cpp:356
 msgid "Speed (mm/s)"
 msgstr "Vitesse (mm/s)"
 
-#: src/libslic3r/PrintConfig.cpp:920
+#: src/libslic3r/PrintConfig.cpp:964
 msgid "Speed for filling small gaps using short zigzag moves. Keep this reasonably low to avoid too much shaking and resonance issues. Set zero to disable gaps filling."
 msgstr "Vitesse pour combler de petits interstices avec de courts mouvements en zigzag. Gardez un réglage relativement lent afin d'éviter les problèmes de vibration et de résonance. Réglez sur zéro pour désactiver le remplissage d'interstices."
 
-#: src/slic3r/GUI/Tab.cpp:1158
+#: src/slic3r/GUI/Tab.cpp:1488
 msgid "Speed for non-print moves"
 msgstr "Vitesse pour les déplacements sans impression"
 
-#: src/libslic3r/PrintConfig.cpp:1432
+#: src/libslic3r/PrintConfig.cpp:1540
 msgid "Speed for perimeters (contours, aka vertical shells). Set to zero for auto."
 msgstr "Vitesse pour les périmètres (contours, parois verticales). Réglez sur zéro pour un ajustement automatique."
 
-#: src/slic3r/GUI/Tab.cpp:1146
+#: src/slic3r/GUI/Tab.cpp:1475
 msgid "Speed for print moves"
 msgstr "Vitesse pour les déplacements d'impression"
 
-#: src/libslic3r/PrintConfig.cpp:236
+#: src/libslic3r/PrintConfig.cpp:270
 msgid "Speed for printing bridges."
 msgstr "Vitesse d'impression des ponts."
 
-#: src/libslic3r/PrintConfig.cpp:1769
+#: src/libslic3r/PrintConfig.cpp:1884
 msgid "Speed for printing solid regions (top/bottom/internal horizontal shells). This can be expressed as a percentage (for example: 80%) over the default infill speed above. Set to zero for auto."
 msgstr "Vitesse pour imprimer des zones solides (supérieures/inférieures/parois horizontales internes). Peut être exprimée en pourcentage (par exemple: 80%) de la vitesse de remplissage par défaut susmentionnée. Réglez sur zéro pour un ajustement automatique."
 
-#: src/libslic3r/PrintConfig.cpp:1993
+#: src/libslic3r/PrintConfig.cpp:2135
 msgid "Speed for printing support material interface layers. If expressed as percentage (for example 50%) it will be calculated over support material speed."
 msgstr "Vitesse d'impression des couches d'interface des supports. Si exprimée en pourcentage (par exemple 50%), elle sera calculée à partir de la vitesse d'impression des supports."
 
-#: src/libslic3r/PrintConfig.cpp:2027
+#: src/libslic3r/PrintConfig.cpp:2169
 msgid "Speed for printing support material."
 msgstr "Vitesse d'impression du support."
 
-#: src/libslic3r/PrintConfig.cpp:1049
+#: src/libslic3r/PrintConfig.cpp:1093
 msgid "Speed for printing the internal fill. Set to zero for auto."
 msgstr "Vitesse pour imprimer le remplissage interne. Réglez sur zéro pour un ajustement automatique."
 
-#: src/libslic3r/PrintConfig.cpp:2119
+#: src/libslic3r/PrintConfig.cpp:2262
 msgid "Speed for printing top solid layers (it only applies to the uppermost external layers and not to their internal solid layers). You may want to slow down this to get a nicer surface finish. This can be expressed as a percentage (for example: 80%) over the solid infill speed above. Set to zero for auto."
 msgstr "Vitesse pour imprimer les couches solides supérieures (ne s'applique qu'aux couches externes les plus hautes et pas aux couches internes solides). Vous voudrez peut-être abaisser cette vitesse afin d'avoir une finition de surface plus nette. Peut être exprimé en pourcentage (par exemple: 80%) de la vitesse de remplissage solide susmentionnée. Réglez sur zéro pour un ajustement automatique."
 
-#: src/libslic3r/PrintConfig.cpp:2153
+#: src/libslic3r/PrintConfig.cpp:2296
 msgid "Speed for travel moves (jumps between distant extrusion points)."
 msgstr "Vitesse pour les déplacements (trajet entre deux points d'extrusion distants)."
 
-#: src/libslic3r/PrintConfig.cpp:659
+#: src/libslic3r/PrintConfig.cpp:695
 msgid "Speed of the first cooling move"
 msgstr "Vitesse du premier mouvement de refroidissement"
 
-#: src/libslic3r/PrintConfig.cpp:678
+#: src/libslic3r/PrintConfig.cpp:714
 msgid "Speed of the last cooling move"
 msgstr "Vitesse du dernier mouvement de refroidissement"
 
-#: src/libslic3r/PrintConfig.cpp:616
+#: src/libslic3r/PrintConfig.cpp:652
 msgid "Speed used at the very beginning of loading phase."
 msgstr "Vitesse utilisée au tout début de la phase de chargement."
 
-#: src/libslic3r/PrintConfig.cpp:608
+#: src/libslic3r/PrintConfig.cpp:644
 msgid "Speed used for loading the filament on the wipe tower."
 msgstr "Vitesse utilisée pour charger le filament sur la tour de nettoyage."
 
-#: src/libslic3r/PrintConfig.cpp:624
+#: src/libslic3r/PrintConfig.cpp:660
 msgid "Speed used for unloading the filament on the wipe tower (does not affect  initial part of unloading just after ramming)."
 msgstr "Vitesse utilisée pour décharger le filament sur la tour de nettoyage (n'affecte pas l'étape initiale de déchargement juste après l'expulsion)."
 
-#: src/libslic3r/PrintConfig.cpp:633
+#: src/libslic3r/PrintConfig.cpp:669
 msgid "Speed used for unloading the tip of the filament immediately after ramming."
 msgstr "Vitesse utilisée pour décharger l'extrémité du filament juste après l'expulsion."
 
-#: src/slic3r/GUI/Mouse3DController.cpp:296
+#: src/slic3r/GUI/Mouse3DController.cpp:279
 msgid "Speed:"
 msgstr "Vitesse:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:37
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Sphere"
 msgstr "Sphère"
 
-#: src/libslic3r/PrintConfig.cpp:1794
+#: src/libslic3r/PrintConfig.cpp:1909
 msgid "Spiral vase"
 msgstr "Mode de vase spirale"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:90
+#: src/slic3r/GUI/ConfigManipulation.cpp:89
 msgid "Spiral Vase"
 msgstr "Vase Spirale"
 
-#: src/slic3r/GUI/Plater.cpp:4019 src/slic3r/GUI/Plater.cpp:4034
-#: src/slic3r/GUI/Plater.cpp:4048 src/libslic3r/PrintConfig.cpp:3471
+#: src/slic3r/GUI/Plater.cpp:3939 src/slic3r/GUI/Plater.cpp:3954
+#: src/slic3r/GUI/Plater.cpp:3972 src/libslic3r/PrintConfig.cpp:3670
 msgid "Split"
 msgstr "Scinder"
 
-#: src/slic3r/GUI/Plater.cpp:4019
+#: src/slic3r/GUI/Plater.cpp:3939
 msgid "Split the selected object"
 msgstr "Scinder l'objet sélectionné"
 
-#: src/slic3r/GUI/Plater.cpp:4014 src/slic3r/GUI/Plater.cpp:4034
+#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3954
 msgid "Split the selected object into individual objects"
 msgstr "Scinder l'objet sélectionné en objets individuels"
 
-#: src/slic3r/GUI/Plater.cpp:4016 src/slic3r/GUI/Plater.cpp:4048
+#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3972
 msgid "Split the selected object into individual sub-parts"
-msgstr "Scinder l'objet sélectionné en sous-parties individuelles"
+msgstr "Scinder l'objet sélectionné en sous-pièces individuelles"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4550
+#: src/slic3r/GUI/GLCanvas3D.cpp:4916
 msgid "Split to objects"
 msgstr "Diviser en objets individuels"
 
-#: src/slic3r/GUI/Plater.cpp:2981
+#: src/slic3r/GUI/Plater.cpp:2774
 msgid "Split to Objects"
 msgstr "Diviser en Objets"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4560 src/slic3r/GUI/GUI_ObjectList.cpp:1487
+#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/GUI_ObjectList.cpp:1618
 msgid "Split to parts"
-msgstr "Scinder en parties"
+msgstr "Scinder en pièces"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2274
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2440
 msgid "Split to Parts"
-msgstr "Scinder en Parties"
+msgstr "Scinder en Pièces"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "Standard"
 msgstr "Standard"
 
-#: src/libslic3r/PrintConfig.cpp:846
+#: src/libslic3r/PrintConfig.cpp:884
 msgid "Stars"
 msgstr "Étoiles"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "Start a new project"
 msgstr "Démarrer un nouveau projet"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Start at height"
 msgstr "Hauteur de début"
 
-#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1976
-#: src/libslic3r/PrintConfig.cpp:1813 src/libslic3r/PrintConfig.cpp:1828
+#: src/slic3r/GUI/Tab.cpp:1873 src/slic3r/GUI/Tab.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:1928 src/libslic3r/PrintConfig.cpp:1943
 msgid "Start G-code"
 msgstr "G-code de début"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "Start new slicing process"
 msgstr "Démarrer un nouveau processus de découpe"
 
@@ -7362,7 +8445,35 @@ msgstr "Démarrer un nouveau processus de découpe"
 msgid "Start printing after upload"
 msgstr "Lancer l'impression après le téléchargement"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:151
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Start the application"
+msgstr "Démarrer l'application"
+
+#: src/slic3r/GUI/GUI_App.cpp:386
+msgid ""
+"Starting with %1% 2.3, configuration directory on Linux has changed (according to XDG Base Directory Specification) to \n"
+"%2%.\n"
+"\n"
+"This directory did not exist yet (maybe you run the new version for the first time).\n"
+"However, an old %1% configuration directory was detected in \n"
+"%3%.\n"
+"\n"
+"Consider moving the contents of the old directory to the new location in order to access your profiles, etc.\n"
+"Note that if you decide to downgrade %1% in future, it will use the old location again.\n"
+"\n"
+"What do you want to do now?"
+msgstr ""
+"À partir de %1% 2.3, le répertoire de configuration sous Linux a été modifié (selon la  XDG Base Directory Specification) en %2%.\n"
+"\n"
+"Ce répertoire n'existait pas encore (peut-être que vous exécutez la nouvelle version pour la première fois).\n"
+"Cependant, un ancien répertoire de configuration %1% a été détecté dans %3%.\n"
+"\n"
+"Envisagez de déplacer le contenu de l'ancien répertoire vers le nouvel emplacement afin d'accéder à vos profils, etc.\n"
+"Notez que si vous décidez de rétrograder %1% à l'avenir, il utilisera à nouveau l'ancien emplacement.\n"
+"\n"
+"Que voulez-vous faire maintenant ?"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:149
 msgid "Status"
 msgstr "État"
 
@@ -7370,166 +8481,160 @@ msgstr "État"
 msgid "Status:"
 msgstr "État :"
 
-#: src/slic3r/GUI/Tab.cpp:2209
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2378
 msgid "Stealth"
 msgstr "Mode silencieux"
 
-#: src/slic3r/GUI/Plater.cpp:1291
+#: src/slic3r/GUI/Plater.cpp:1187 src/slic3r/GUI/Plater.cpp:1235
 msgid "stealth mode"
 msgstr "mode silencieux"
 
-#: src/slic3r/GUI/Plater.cpp:4985
+#: src/slic3r/GUI/GCodeViewer.cpp:2557
+msgid "Stealth mode"
+msgstr "Mode furtif"
+
+#: src/slic3r/GUI/Plater.cpp:5118
 #, c-format
 msgid "STL file exported to %s"
 msgstr "Fichier STL exporté vers %s"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Stop at height"
 msgstr "Hauteur d'arrêt"
 
-#: src/slic3r/GUI/Tab.cpp:1693 src/slic3r/GUI/Tab.cpp:1928
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
 msgid "Success!"
 msgstr "Réussi !"
 
-#: src/slic3r/GUI/PresetHints.cpp:203
+#: src/slic3r/GUI/Plater.cpp:2047
+#, c-format
+msgid "Successfully unmounted. The device %s(%s) can now be safely removed from the computer."
+msgstr "Démonté avec succès. Le périphérique %s(% s) peut maintenant être retiré en toute sécurité de l'ordinateur."
+
+#: src/slic3r/GUI/PresetHints.cpp:202
 msgid "support"
 msgstr "support"
 
-#: src/libslic3r/PrintConfig.cpp:2692
+#: src/libslic3r/PrintConfig.cpp:2856
 msgid "Support base diameter"
 msgstr "Diamètre de la base du support"
 
-#: src/libslic3r/PrintConfig.cpp:2702
+#: src/libslic3r/PrintConfig.cpp:2866
 msgid "Support base height"
 msgstr "Hauteur de la base du support"
 
-#: src/libslic3r/PrintConfig.cpp:2711
+#: src/libslic3r/PrintConfig.cpp:2875
 msgid "Support base safety distance"
 msgstr "Distance de sécurité de la base du support"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Blocker"
 msgstr "Bloqueur de Support"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/libslic3r/PrintConfig.cpp:895
+msgid "Support Cubic"
+msgstr "Support Cubique"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Enforcer"
 msgstr "Générateur de Support"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:163
+#: src/slic3r/GUI/ConfigManipulation.cpp:162
 msgid "Support Generator"
 msgstr "Générateur de support"
 
-#: src/slic3r/GUI/Tab.cpp:3608
+#: src/slic3r/GUI/Tab.cpp:4018
 msgid "Support head"
 msgstr "Tête du support"
 
-#: src/libslic3r/PrintConfig.cpp:2620
-msgid "Support head front diameter"
-msgstr "Diamètre avant de la tête du support"
-
-#: src/libslic3r/PrintConfig.cpp:2629
-msgid "Support head penetration"
-msgstr "Pénétration de la tête du support"
-
-#: src/libslic3r/PrintConfig.cpp:2638
-msgid "Support head width"
-msgstr "Largeur de la tête du support"
-
-#: src/slic3r/GUI/PresetHints.cpp:213
+#: src/slic3r/GUI/PresetHints.cpp:212
 msgid "support interface"
 msgstr "interface du support"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:97
-#: src/slic3r/GUI/GUI_ObjectList.cpp:615 src/slic3r/GUI/GUI_Preview.cpp:246
-#: src/slic3r/GUI/Tab.cpp:1120 src/slic3r/GUI/Tab.cpp:1121
-#: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370
-#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1866
-#: src/libslic3r/PrintConfig.cpp:1872 src/libslic3r/PrintConfig.cpp:1880
-#: src/libslic3r/PrintConfig.cpp:1892 src/libslic3r/PrintConfig.cpp:1902
-#: src/libslic3r/PrintConfig.cpp:1910 src/libslic3r/PrintConfig.cpp:1925
-#: src/libslic3r/PrintConfig.cpp:1946 src/libslic3r/PrintConfig.cpp:1958
-#: src/libslic3r/PrintConfig.cpp:1974 src/libslic3r/PrintConfig.cpp:1983
-#: src/libslic3r/PrintConfig.cpp:1992 src/libslic3r/PrintConfig.cpp:2003
-#: src/libslic3r/PrintConfig.cpp:2017 src/libslic3r/PrintConfig.cpp:2025
-#: src/libslic3r/PrintConfig.cpp:2026 src/libslic3r/PrintConfig.cpp:2035
-#: src/libslic3r/PrintConfig.cpp:2043 src/libslic3r/PrintConfig.cpp:2057
+#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:95
+#: src/slic3r/GUI/GUI_ObjectList.cpp:654 src/slic3r/GUI/GUI_Preview.cpp:311
+#: src/slic3r/GUI/Tab.cpp:1449 src/slic3r/GUI/Tab.cpp:1450
+#: src/libslic3r/ExtrusionEntity.cpp:324 src/libslic3r/ExtrusionEntity.cpp:356
+#: src/libslic3r/PrintConfig.cpp:404 src/libslic3r/PrintConfig.cpp:1610
+#: src/libslic3r/PrintConfig.cpp:2008 src/libslic3r/PrintConfig.cpp:2014
+#: src/libslic3r/PrintConfig.cpp:2022 src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2044 src/libslic3r/PrintConfig.cpp:2052
+#: src/libslic3r/PrintConfig.cpp:2067 src/libslic3r/PrintConfig.cpp:2088
+#: src/libslic3r/PrintConfig.cpp:2100 src/libslic3r/PrintConfig.cpp:2116
+#: src/libslic3r/PrintConfig.cpp:2125 src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2145 src/libslic3r/PrintConfig.cpp:2159
+#: src/libslic3r/PrintConfig.cpp:2167 src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2177 src/libslic3r/PrintConfig.cpp:2185
+#: src/libslic3r/PrintConfig.cpp:2199
 msgid "Support material"
 msgstr "Supports"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:247 src/libslic3r/ExtrusionEntity.cpp:320
-#: src/libslic3r/PrintConfig.cpp:1991
+#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/ExtrusionEntity.cpp:325
+#: src/libslic3r/ExtrusionEntity.cpp:358 src/libslic3r/PrintConfig.cpp:2133
 msgid "Support material interface"
 msgstr "Interface des supports"
 
-#: src/libslic3r/PrintConfig.cpp:2044
+#: src/libslic3r/PrintConfig.cpp:2186
 msgid "Support material will not be generated for overhangs whose slope angle (90° = vertical) is above the given threshold. In other words, this value represent the most horizontal slope (measured from the horizontal plane) that you can print without support material. Set to zero for automatic detection (recommended)."
 msgstr "Le support ne sera pas généré pour les surplombs dont l'inclinaison (90° = vertical) dépasse le seuil défini. Autrement dit, cette valeur représente l'inclinaison horizontale maximum (mesurée à partir du plan horizontal) que vous pouvez imprimer sans support. Réglez sur zéro pour une détection automatique (recommandé)."
 
-#: src/libslic3r/PrintConfig.cpp:1964
+#: src/libslic3r/PrintConfig.cpp:2106
 msgid "Support material/raft interface extruder"
 msgstr "Extrudeur pour l'interface des supports/du radeau"
 
-#: src/libslic3r/PrintConfig.cpp:1937
+#: src/libslic3r/PrintConfig.cpp:2079
 msgid "Support material/raft/skirt extruder"
 msgstr "Extrudeur pour support/raft/jupe"
 
-#: src/slic3r/GUI/Plater.cpp:500 src/libslic3r/PrintConfig.cpp:1901
-#: src/libslic3r/PrintConfig.cpp:2674
+#: src/slic3r/GUI/Plater.cpp:366 src/libslic3r/PrintConfig.cpp:2043
+#: src/libslic3r/PrintConfig.cpp:2838
 msgid "Support on build plate only"
 msgstr "Support sur le plateau uniquement"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:888
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:762
 msgid "Support parameter change"
 msgstr "Changement des paramètres de support"
 
-#: src/slic3r/GUI/Tab.cpp:3613
+#: src/slic3r/GUI/Tab.cpp:4023
 msgid "Support pillar"
 msgstr "Pilier de support"
 
-#: src/libslic3r/PrintConfig.cpp:2658
-msgid "Support pillar connection mode"
-msgstr "Mode de connexion du pilier de support"
-
-#: src/libslic3r/PrintConfig.cpp:2648
-msgid "Support pillar diameter"
-msgstr "Diamètre du pilier de support"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
-#: src/libslic3r/PrintConfig.cpp:2764
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/libslic3r/PrintConfig.cpp:2928
 msgid "Support points density"
 msgstr "Densité des points de support"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1196
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048
 msgid "Support points edit"
 msgstr "Éditer les points de support"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:624
-#: src/slic3r/GUI/Plater.cpp:495 src/slic3r/GUI/Tab.cpp:3604
-#: src/slic3r/GUI/Tab.cpp:3605 src/libslic3r/PrintConfig.cpp:2614
-#: src/libslic3r/PrintConfig.cpp:2621 src/libslic3r/PrintConfig.cpp:2630
-#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2649
-#: src/libslic3r/PrintConfig.cpp:2675 src/libslic3r/PrintConfig.cpp:2682
-#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2703
-#: src/libslic3r/PrintConfig.cpp:2712 src/libslic3r/PrintConfig.cpp:2725
-#: src/libslic3r/PrintConfig.cpp:2735 src/libslic3r/PrintConfig.cpp:2744
-#: src/libslic3r/PrintConfig.cpp:2754 src/libslic3r/PrintConfig.cpp:2765
-#: src/libslic3r/PrintConfig.cpp:2773
+#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:663
+#: src/slic3r/GUI/Plater.cpp:361 src/slic3r/GUI/Tab.cpp:4014
+#: src/slic3r/GUI/Tab.cpp:4015 src/libslic3r/PrintConfig.cpp:2757
+#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2773
+#: src/libslic3r/PrintConfig.cpp:2782 src/libslic3r/PrintConfig.cpp:2792
+#: src/libslic3r/PrintConfig.cpp:2802 src/libslic3r/PrintConfig.cpp:2839
+#: src/libslic3r/PrintConfig.cpp:2846 src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:2867 src/libslic3r/PrintConfig.cpp:2876
+#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899
+#: src/libslic3r/PrintConfig.cpp:2908 src/libslic3r/PrintConfig.cpp:2918
+#: src/libslic3r/PrintConfig.cpp:2929 src/libslic3r/PrintConfig.cpp:2937
 msgid "Supports"
 msgstr "Supports"
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "supports and pad"
 msgstr "supports et socle"
 
-#: src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1185
 msgid "Supports remaining times"
 msgstr "Temps de support restant"
 
-#: src/libslic3r/PrintConfig.cpp:1101
+#: src/libslic3r/PrintConfig.cpp:1194
 msgid "Supports stealth mode"
 msgstr "Supporte le mode silencieux"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:159
+#: src/slic3r/GUI/ConfigManipulation.cpp:158
 msgid ""
 "Supports work better, if the following feature is enabled:\n"
 "- Detect bridging perimeters"
@@ -7537,44 +8642,60 @@ msgstr ""
 "Les supports fonctionnent mieux, si la fonctionnalité suivante est activée :\n"
 "- Détecter les périmètres de pontage"
 
-#: src/slic3r/GUI/Preferences.cpp:87
+#: src/slic3r/GUI/Preferences.cpp:104
 msgid "Suppress \" - default - \" presets"
 msgstr "Supprimer les préréglages \" - par défaut - \""
 
-#: src/slic3r/GUI/Preferences.cpp:89
+#: src/slic3r/GUI/Preferences.cpp:106
 msgid "Suppress \" - default - \" presets in the Print / Filament / Printer selections once there are any other valid presets available."
 msgstr "Supprimer les préréglages \" - par défaut - \" dans les choix Impression / Filament / Imprimante une fois qu'il y a d'autres préréglages valides disponibles."
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "SVG"
 msgstr "SVG"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144
+#: src/slic3r/GUI/Mouse3DController.cpp:318
+msgid "Swap Y/Z axes"
+msgstr "Permuter les axes Y/Z"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+msgid "Switch between Editor/Preview"
+msgstr "Basculer entre l'éditeur/l'aperçu"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1273
 msgid "Switch code to Change extruder"
 msgstr "Code de changement pour Changer l'extrudeur"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1179
+#: src/slic3r/GUI/DoubleSlider.cpp:1306
 msgid "Switch code to Color change (%1%) for:"
 msgstr "Code de changement pour Changer de couleur (%1%) pour :"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
 msgid "Switch to 3D"
 msgstr "Basculer vers la 3D"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1376
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1223
 msgid "Switch to editing mode"
 msgstr "Basculer vers le mode édition"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
 msgid "Switch to Preview"
 msgstr "Basculer vers la Prévisualisation"
 
-#: src/slic3r/GUI/wxExtensions.cpp:703
+#: src/slic3r/GUI/GLCanvas3D.cpp:4302 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Switch to Settings"
+msgstr "Basculer dans le Réglages"
+
+#: src/slic3r/GUI/wxExtensions.cpp:623
 #, c-format
 msgid "Switch to the %s mode"
 msgstr "Basculer vers le mode %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:882
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:542
+msgid "Switching Presets: Unsaved Changes"
+msgstr "Changement de préréglages : modifications non enregistrées"
+
+#: src/slic3r/GUI/GUI_App.cpp:1608
 msgid ""
 "Switching the language will trigger application restart.\n"
 "You will lose content of the plater."
@@ -7590,65 +8711,72 @@ msgstr ""
 "\n"
 "Voulez-vous continuer ?"
 
-#: src/slic3r/GUI/Tab.cpp:1014
+#: src/slic3r/GUI/Tab.cpp:1332
 msgid "symbolic profile name"
 msgstr "nom de profil symbolique"
 
-#: src/libslic3r/PrintConfig.cpp:2036
+#: src/libslic3r/PrintConfig.cpp:2178
 msgid "Synchronize support layers with the object print layers. This is useful with multi-material printers, where the extruder switch is expensive."
 msgstr "Synchroniser les couches du support avec les couches d'impression de l'objet. Cela est utile pour les imprimantes multi-matériaux, pour lesquelles le changement d'extrudeur est onéreux."
 
-#: src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2176
 msgid "Synchronize with object layers"
 msgstr "Synchroniser avec les couches de l'objet"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "System &Info"
 msgstr "&Informations sur le Système"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:78
+#: src/slic3r/GUI/SysInfoDialog.cpp:90 src/slic3r/GUI/SysInfoDialog.cpp:92
 msgid "System Information"
 msgstr "Informations sur le Système"
 
-#: src/slic3r/GUI/Preset.cpp:1109 src/slic3r/GUI/Preset.cpp:1164
-#: src/slic3r/GUI/Preset.cpp:1242 src/slic3r/GUI/Preset.cpp:1284
-#: src/slic3r/GUI/PresetBundle.cpp:1583 src/slic3r/GUI/PresetBundle.cpp:1672
+#: src/slic3r/GUI/PresetComboBoxes.cpp:188
+#: src/slic3r/GUI/PresetComboBoxes.cpp:226
+#: src/slic3r/GUI/PresetComboBoxes.cpp:724
+#: src/slic3r/GUI/PresetComboBoxes.cpp:774
+#: src/slic3r/GUI/PresetComboBoxes.cpp:886
+#: src/slic3r/GUI/PresetComboBoxes.cpp:930
 msgid "System presets"
 msgstr "Préréglages système"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Take Configuration &Snapshot"
 msgstr "Capturer un in&stantané de la configuration"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Taking configuration snapshot"
 msgstr "Instantané de la configuration en cours"
 
-#: src/slic3r/GUI/Tab.cpp:1433 src/libslic3r/PrintConfig.cpp:2067
+#: src/slic3r/GUI/Tab.cpp:1779
 msgid "Temperature"
 msgstr "Température"
 
-#: src/libslic3r/PrintConfig.cpp:1804
+#: src/libslic3r/PrintConfig.cpp:1919
 msgid "Temperature difference to be applied when an extruder is not active. Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped."
 msgstr "Différence de température devant être appliquée quand un extrudeur n'est pas actif. Permet la génération d'un contour complet \"sacrificiel\" sur lequel les buses sont nettoyées régulièrement."
 
-#: src/libslic3r/PrintConfig.cpp:1803
+#: src/libslic3r/PrintConfig.cpp:1918
 msgid "Temperature variation"
 msgstr "Variation de température"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
+#: src/slic3r/GUI/ConfigWizard.cpp:1383
 msgid "Temperatures"
 msgstr "Températures"
 
-#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:1915
+#: src/slic3r/GUI/Tab.cpp:2215
+msgid "Template Custom G-code"
+msgstr "G-code de modèle personnalisé"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:284
 msgid "Test"
 msgstr "Test"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:172
+#: src/slic3r/GUI/BedShapeDialog.cpp:315
 msgid "Texture"
 msgstr "Texture"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:208
+#: src/slic3r/GUI/ConfigManipulation.cpp:207
 msgid "The %1% infill pattern is not supposed to work at 100%% density."
 msgstr "Le modèle de remplissage %1% n'est pas censé fonctionner avec une densité de 100%%."
 
@@ -7666,131 +8794,148 @@ msgstr ""
 "L'équipement %s n'a pas été trouvé.\n"
 "Si l'équipement est connecté, veuillez appuyer sur le bouton Reset à côté du connecteur USB ..."
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1238
 msgid "The current custom preset will be detached from the parent system preset."
 msgstr "Le préréglage personnalisé actuel sera détaché du préréglage système parent."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:925
 msgid ""
 "The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
 "Non-uniform scaling of tilted objects is only possible in the World coordinate system,\n"
 "once the rotation is embedded into the object coordinates."
 msgstr "L'objet actuel est incliné (les angles de rotation ne sont pas des multiples de 90 °). La mise à l'échelle non uniforme des objets inclinés est possible dans le système de coordonnées seulement quand la rotation est incorporée aux coordonnées de l'objet."
 
-#: src/libslic3r/PrintConfig.cpp:2726
+#: src/libslic3r/PrintConfig.cpp:2890
 msgid "The default angle for connecting support sticks and junctions."
 msgstr "L'angle par défaut pour connecter les tiges de support et les jonctions."
 
-#: src/libslic3r/SLAPrint.cpp:631
+#: src/libslic3r/SLAPrint.cpp:645
 msgid "The endings of the support pillars will be deployed on the gap between the object and the pad. 'Support base safety distance' has to be greater than the 'Pad object gap' parameter to avoid this."
 msgstr "Les extrémités des piliers de support seront déployées dans l'espace entre l'objet et le socle. La 'Distance de sécurité de base du support' doit être plus grande que le paramètre 'Espace de l'objet socle' pour éviter cela."
 
-#: src/libslic3r/PrintConfig.cpp:489
+#: src/libslic3r/PrintConfig.cpp:525
 msgid "The extruder to use (unless more specific extruder settings are specified). This value overrides perimeter and infill extruders, but not the support extruders."
 msgstr "L'extrudeur à utiliser (à moins que d'autres réglages d'extrudeur plus spécifiques soient spécifiés). Cette valeur se substitue aux extrudeurs de périmètre et de remplissage, mais pas aux extrudeurs de support."
 
-#: src/libslic3r/PrintConfig.cpp:1003
+#: src/libslic3r/PrintConfig.cpp:1047
 msgid "The extruder to use when printing infill."
 msgstr "L'extrudeur à utiliser pour imprimer le remplissage."
 
-#: src/libslic3r/PrintConfig.cpp:1410
+#: src/libslic3r/PrintConfig.cpp:1518
 msgid "The extruder to use when printing perimeters and brim. First extruder is 1."
 msgstr "L'extrudeur à utiliser pour imprimer les périmètres et la bordure. Le premier extrudeur a le numéro 1."
 
-#: src/libslic3r/PrintConfig.cpp:1738
+#: src/libslic3r/PrintConfig.cpp:1853
 msgid "The extruder to use when printing solid infill."
 msgstr "L'extrudeur à utiliser pour imprimer les remplissages solides."
 
-#: src/libslic3r/PrintConfig.cpp:1966
+#: src/libslic3r/PrintConfig.cpp:2108
 msgid "The extruder to use when printing support material interface (1+, 0 to use the current extruder to minimize tool changes). This affects raft too."
 msgstr "L'extrudeur à utiliser pour imprimer les intercalaires du support (1+,0 pour utiliser l'extrudeur actuel et limiter les changements d'outil). Cela affecte également le raft."
 
-#: src/libslic3r/PrintConfig.cpp:1939
+#: src/libslic3r/PrintConfig.cpp:2081
 msgid "The extruder to use when printing support material, raft and skirt (1+, 0 to use the current extruder to minimize tool changes)."
 msgstr "L'extrudeur à utiliser pour imprimer des supports, du raft ou des contours (1+,0 pour utiliser l'extrudeur actuel et limiter les changements d'outil)."
 
-#: src/libslic3r/PrintConfig.cpp:727
+#: src/libslic3r/PrintConfig.cpp:763
 msgid "The filament material type for use in custom G-codes."
 msgstr "Le type de matériau de filament à utiliser dans les G-codes personnalisés."
 
-#: src/libslic3r/PrintConfig.cpp:3494
+#: src/libslic3r/PrintConfig.cpp:3693
 msgid "The file where the output will be written (if not specified, it will be based on the input file)."
 msgstr "Le fichier dans lequel la sortie sera écrite (si rien n'est spécifié, il sera basé sur le fichier d'entrée)"
 
-#: src/libslic3r/PrintConfig.cpp:1102
+#: src/libslic3r/PrintConfig.cpp:1195
 msgid "The firmware supports stealth mode"
 msgstr "Le firmware est compatible avec le mode silencieux"
 
-#: src/libslic3r/PrintConfig.cpp:120
+#: src/libslic3r/PrintConfig.cpp:122
 msgid "The first layer will be shrunk in the XY plane by the configured value to compensate for the 1st layer squish aka an Elephant Foot effect."
 msgstr "La première couche sera réduite sur le plan XY selon la valeur configurée afin de compenser l'écrasement de la première couche également connu sous le nom d'effet Pied d'Éléphant."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3820
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3927 src/slic3r/GUI/Tab.cpp:3457
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4283
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4410
+#: src/slic3r/GUI/SavePresetDialog.cpp:117
 msgid "the following characters are not allowed:"
 msgstr "les caractères suivant ne sont pas autorisés :"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1830
+#: src/slic3r/GUI/ConfigWizard.cpp:2257
 msgid "The following FFF printer models have no filament selected:"
 msgstr "Les modèles d'imprimantes FFF suivants n'ont aucun filament sélectionné :"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1848
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1004
+msgid "The following presets were modified:"
+msgstr "Les préréglages suivants ont été modifiés :"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:2275
 msgid "The following SLA printer models have no materials selected:"
 msgstr "Les modèles d'imprimantes SLA suivants n'ont aucun matériau sélectionné :"
 
-#: src/slic3r/GUI/Tab.cpp:3461
+#: src/slic3r/GUI/SavePresetDialog.cpp:125
 msgid "the following suffix is not allowed:"
 msgstr "le suffixe suivant n'est pas autorisé :"
 
-#: src/libslic3r/PrintConfig.cpp:2871
+#: src/libslic3r/PrintConfig.cpp:3035
 msgid "The gap between the object bottom and the generated pad in zero elevation mode."
 msgstr "Espace entre le bas de l'objet et le socle généré en mode élévation zéro."
 
-#: src/libslic3r/PrintConfig.cpp:2704
+#: src/libslic3r/PrintConfig.cpp:2868
 msgid "The height of the pillar base cone"
 msgstr "La hauteur du cône de la base du pilier"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1922
+#: src/slic3r/GUI/DoubleSlider.cpp:2140
 msgid "The last color change data was saved for a multi extruder printing with tool changes for whole print."
 msgstr "Les dernières données de changement de couleur ont été enregistrées pour une impression multi-extrudeur avec des changements d'outils pour l'impression entière."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1900 src/slic3r/GUI/DoubleSlider.cpp:1916
+#: src/slic3r/GUI/DoubleSlider.cpp:2119 src/slic3r/GUI/DoubleSlider.cpp:2134
 msgid "The last color change data was saved for a multi extruder printing."
 msgstr "Les dernières données de changement de couleur ont été enregistrées pour une impression multi-extrudeur."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1899
+#: src/slic3r/GUI/DoubleSlider.cpp:2118
 msgid "The last color change data was saved for a single extruder printing."
 msgstr "Les dernières données de changement de couleur ont été sauvegardées une vue d'une impression avec extrudeur simple."
 
-#: src/libslic3r/PrintConfig.cpp:2745
+#: src/libslic3r/PrintConfig.cpp:2909
 msgid "The max distance of two pillars to get linked with each other. A zero value will prohibit pillar cascading."
 msgstr "La distance maximum entre deux piliers pour qu'ils soient reliés. Une valeur de zéro empêchera les piliers en cascade."
 
-#: src/libslic3r/PrintConfig.cpp:2736
+#: src/libslic3r/PrintConfig.cpp:2900
 msgid "The max length of a bridge"
 msgstr "La longueur maximum d'un pont"
 
-#: src/libslic3r/PrintConfig.cpp:2714
+#: src/libslic3r/PrintConfig.cpp:2878
 msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
 msgstr "Distance minimum entre la base du pilier et le modèle en mm. Utile en mode élévation zéro où un espace correspondant à ce paramètre est inséré entre le modèle et le socle."
 
-#: src/libslic3r/PrintConfig.cpp:185
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
+msgid "The name cannot be empty."
+msgstr "Le nom ne peut pas être vide."
+
+#: src/libslic3r/PrintConfig.cpp:219
 msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
 msgstr "Le nombre de couches solides inférieures est augmenté au-dessus de bottom_solid_layers si nécessaire pour satisfaire l'épaisseur minimale de la coque inférieure."
 
-#: src/libslic3r/PrintConfig.cpp:2143
+#: src/libslic3r/PrintConfig.cpp:2286
 msgid "The number of top solid layers is increased above top_solid_layers if necessary to satisfy minimum thickness of top shell. This is useful to prevent pillowing effect when printing with variable layer height."
 msgstr "Le nombre de couches solides supérieures est augmenté au-dessus de top_solid_layers si nécessaire pour satisfaire l'épaisseur minimale de la coque supérieure. Ceci est utile pour éviter l'effet de capitonnage lors de l'impression avec une hauteur de couche variable."
 
-#: src/libslic3r/PrintConfig.cpp:2277
+#: src/slic3r/GUI/Plater.cpp:2326
+msgid "The object appears to be saved in inches"
+msgstr "L'objet semble être enregistré en pouces"
+
+#: src/libslic3r/PrintConfig.cpp:2420
 msgid "The object will be grown/shrunk in the XY plane by the configured value (negative = inwards, positive = outwards). This might be useful for fine-tuning hole sizes."
 msgstr "L'objet sera agrandi/réduit sur les plans XY selon la valeur indiquée (négatif = réduit, positif = agrandi). Ce réglage peut être utile pour un réglage fin des tailles de trous."
 
-#: src/libslic3r/PrintConfig.cpp:1503
+#: src/libslic3r/PrintConfig.cpp:1611
 msgid "The object will be raised by this number of layers, and support material will be generated under it."
 msgstr "L'objet sera surélevé de ce nombre de couches, et du support sera généré en dessous."
 
-#: src/libslic3r/PrintConfig.cpp:2424
+#: src/libslic3r/PrintConfig.cpp:2803
+msgid "The percentage of smaller pillars compared to the normal pillar diameter which are used in problematic areas where a normal pilla cannot fit."
+msgstr "Le pourcentage de piliers plus petits par rapport au diamètre de pilier normal qui sont utilisés dans les zones problématiques où un pilier normal ne peut pas rentrer."
+
+#: src/libslic3r/PrintConfig.cpp:2567
 msgid ""
 "The percentage of the bed area. \n"
 "If the print area exceeds the specified value, \n"
@@ -7800,39 +8945,51 @@ msgstr ""
 "Si la zone d'impression excède la valeur spécifiée,\n"
 "alors une inclinaison lente sera appliquée, sinon - une inclinaison rapide"
 
-#: src/slic3r/GUI/GUI_App.cpp:932
-msgid "The presets on the following tabs were modified"
-msgstr "Les préréglages des onglets suivants ont été modifiés"
+#: src/slic3r/GUI/Tab.cpp:3430
+msgid "The physical printer(s) below is based on the preset, you are going to delete."
+msgstr "La/les imprimante(s) physique(s) ci-dessous sont basées sur le préréglage que vous allez supprimer."
 
-#: src/libslic3r/PrintConfig.cpp:1846
+#: src/slic3r/GUI/Tab.cpp:3438
+msgid "The physical printer(s) below is based only on the preset, you are going to delete."
+msgstr "Les imprimantes physiques ci-dessous sont basées uniquement sur le préréglage que vous allez supprimer."
+
+#: src/slic3r/GUI/GUI_App.cpp:1676
+msgid "The preset(s) modifications are successfully saved"
+msgstr "Les modifications des préréglages sont enregistrées avec succès"
+
+#: src/libslic3r/PrintConfig.cpp:1988
 msgid "The printer multiplexes filaments into a single hot end."
 msgstr "L'imprimante multiplexe les filaments vers une seule tête d'extrusion."
 
-#: src/libslic3r/Format/3mf.cpp:1630
+#: src/libslic3r/Format/3mf.cpp:1667
 msgid "The selected 3mf file has been saved with a newer version of %1% and is not compatible."
 msgstr "Le fichier 3mf sélectionné a été enregistré avec une version plus récente de %1% et n'est pas compatible."
 
-#: src/libslic3r/Format/AMF.cpp:934
+#: src/libslic3r/Format/AMF.cpp:955
 msgid "The selected amf file has been saved with a newer version of %1% and is not compatible."
 msgstr "Le fichier amf sélectionné a été enregistré avec une version plus récente de %1% et n'est pas compatible."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:513
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "The selected file"
+msgstr "Le fichier sélectionné"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:589
 msgid "The selected file contains no geometry."
 msgstr "Le fichier sélectionné ne contient aucune géométrie."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:517
+#: src/slic3r/GUI/BedShapeDialog.cpp:593
 msgid "The selected file contains several disjoint areas. This is not supported."
 msgstr "Le fichier sélectionné contient plusieurs zones disjointes. Cela n'est pas utilisable."
 
-#: src/slic3r/GUI/Plater.cpp:2970
+#: src/slic3r/GUI/Plater.cpp:2763
 msgid "The selected object can't be split because it contains more than one volume/material."
 msgstr "L'objet sélectionné ne peut être scindé car il contient plus d'un volume/matériau."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2270 src/slic3r/GUI/Plater.cpp:2978
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2771
 msgid "The selected object couldn't be split because it contains only one part."
 msgstr "L'objet sélectionné n'a pu être scindé car il ne contient qu'une seule pièce."
 
-#: src/slic3r/GUI/MainFrame.cpp:461
+#: src/slic3r/GUI/MainFrame.cpp:1003
 msgid ""
 "The selected project is no longer available.\n"
 "Do you want to remove it from the recent projects list?"
@@ -7840,7 +8997,7 @@ msgstr ""
 "Le projet sélectionné n'est plus disponible.\n"
 "Voulez-vous le retirer de la liste des projets récents?"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:998
+#: src/slic3r/GUI/DoubleSlider.cpp:1121
 msgid ""
 "The sequential print is on.\n"
 "It's impossible to apply any custom G-code for objects printing sequentually.\n"
@@ -7850,20 +9007,24 @@ msgstr ""
 "Il est impossible d'appliquer un G-code personnalisé pour des objets en impression séquentielle.\n"
 "Ce code ne sera pas traité au cours de la génération du G-code."
 
-#: src/libslic3r/PrintConfig.cpp:2846
+#: src/slic3r/GUI/ConfigWizard.cpp:1187
+msgid "The size of the object can be specified in inches"
+msgstr "La taille de l'objet peut être spécifiée en pouces"
+
+#: src/libslic3r/PrintConfig.cpp:3010
 msgid "The slope of the pad wall relative to the bed plane. 90 degrees means straight walls."
 msgstr "La pente de la paroi du socle par rapport au plan du lit. 90 degrés donne des murs droits."
 
-#: src/libslic3r/PrintConfig.cpp:1614
+#: src/libslic3r/PrintConfig.cpp:1722
 msgid "The speed for loading of a filament into extruder after retraction (it only applies to the extruder motor). If left to zero, the retraction speed is used."
 msgstr "La vitesse de chargement d'un filament dans l'extrudeur après une rétractation (ne s'applique qu'au moteur de l'extrudeur). Si cette valeur reste sur zéro, la vitesse de rétraction est utilisée."
 
-#: src/libslic3r/PrintConfig.cpp:1606
+#: src/libslic3r/PrintConfig.cpp:1714
 msgid "The speed for retractions (it only applies to the extruder motor)."
 msgstr "La vitesse des rétractations (ne s'applique qu'au moteur de l'extrudeur)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:81
-#, no-c-format
+#: src/slic3r/GUI/ConfigManipulation.cpp:80
+#, c-format
 msgid ""
 "The Spiral Vase mode requires:\n"
 "- one perimeter\n"
@@ -7881,41 +9042,42 @@ msgstr ""
 "-Vérifier que l'épaisseur de coque verticale est activée\n"
 "-La détection de parois fines doit être désactivée"
 
-#: src/libslic3r/Print.cpp:1237
+#: src/libslic3r/Print.cpp:1263
 msgid "The Spiral Vase option can only be used when printing a single object."
 msgstr "L'option Vase Spirale ne peut être utilisé que lors de l'impression d'un seul objet."
 
-#: src/libslic3r/Print.cpp:1244
+#: src/libslic3r/Print.cpp:1270
 msgid "The Spiral Vase option can only be used when printing single material objects."
 msgstr "L'option Vase Spirale ne peut être utilisé que lors de l'impression d'objets mono-matériau."
 
-#: src/slic3r/GUI/Tab.cpp:3068
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:464
 msgid "The supplied name is empty. It can't be saved."
 msgstr "Le nom proposé est vide. Sauvegarde impossible."
 
-#: src/slic3r/GUI/Tab.cpp:3465
+#: src/slic3r/GUI/SavePresetDialog.cpp:131
 msgid "The supplied name is not available."
 msgstr "Le nom proposé n'est pas disponible."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3819
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3926 src/slic3r/GUI/Tab.cpp:3456
-#: src/slic3r/GUI/Tab.cpp:3460
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4282
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4409
+#: src/slic3r/GUI/SavePresetDialog.cpp:116
+#: src/slic3r/GUI/SavePresetDialog.cpp:124
 msgid "The supplied name is not valid;"
 msgstr "Le nom fourni n'est pas valide ;"
 
-#: src/libslic3r/Print.cpp:1222
+#: src/libslic3r/Print.cpp:1248
 msgid "The supplied settings will cause an empty print."
 msgstr "Les réglages fournis vont entraîner une impression vide."
 
-#: src/libslic3r/PrintConfig.cpp:2789
+#: src/libslic3r/PrintConfig.cpp:2953
 msgid "The thickness of the pad and its optional cavity walls."
 msgstr "L'épaisseur du socle et de ses parois de cavité optionnelles."
 
-#: src/libslic3r/PrintConfig.cpp:1911
+#: src/libslic3r/PrintConfig.cpp:2053
 msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
 msgstr "Distance verticale entre l'objet et l'intercalaire du support. Régler cette valeur sur zéro empêchera Slic3r d'utiliser la vitesse et le débit des ponts pour la première couche de l'objet."
 
-#: src/slic3r/GUI/Tab.cpp:2575
+#: src/slic3r/GUI/Tab.cpp:2731
 msgid ""
 "The Wipe option is not available when using the Firmware Retraction mode.\n"
 "\n"
@@ -7925,11 +9087,11 @@ msgstr ""
 "\n"
 "Voulez-vous que je la désactive pour permettre la Rétractation du Firmware ?"
 
-#: src/libslic3r/Print.cpp:1268
+#: src/libslic3r/Print.cpp:1294
 msgid "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)."
 msgstr "À l'heure actuelle, la Tour de Nettoyage ne prend pas en charge l'E volumétrique (use_volumetric_e-0)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:115
+#: src/slic3r/GUI/ConfigManipulation.cpp:114
 msgid ""
 "The Wipe Tower currently supports the non-soluble supports only\n"
 "if they are printed with the current extruder without triggering a tool change.\n"
@@ -7939,51 +9101,55 @@ msgstr ""
 "si ils sont imprimés avec l'extrudeur actuel sans déclencher un changement d'outil.\n"
 "(support_material_extruder et support_material_interface_extruder doivent être réglés sur 0)."
 
-#: src/libslic3r/Print.cpp:1400
+#: src/libslic3r/Print.cpp:1426
 msgid "The Wipe Tower currently supports the non-soluble supports only if they are printed with the current extruder without triggering a tool change. (both support_material_extruder and support_material_interface_extruder need to be set to 0)."
 msgstr "A l'heure actuelle la Tour de Nettoyage ne tolère les supports non-solubles  que s'ils sont imprimés avec l'extrudeur en cours d'utilisation sans déclencher un changement d'outil. (support_material_extruder de même que support_material_interface_extruder doivent être réglés sur 0)."
 
-#: src/libslic3r/Print.cpp:1270
+#: src/libslic3r/Print.cpp:1296
 msgid "The Wipe Tower is currently not supported for multimaterial sequential prints."
 msgstr "La tour de nettoyage n'est actuellement pas prise en charge pour les impressions séquentielles multimatériaux."
 
-#: src/libslic3r/Print.cpp:1262
-msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors."
-msgstr "La tour de nettoyage est actuellement supportée uniquement pour les versions de G-Code de Marlin, RepRap/Sprinter et Repetier."
+#: src/libslic3r/Print.cpp:1290
+msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors."
+msgstr "La tour de nettoyage n'est actuellement prise en charge que pour les versions du G-code Marlin, RepRap / Sprinter, RepRapFirmware et Repetier."
 
-#: src/libslic3r/Print.cpp:1264
+#: src/libslic3r/Print.cpp:1290
 msgid "The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."
 msgstr "La tour de nettoyage est actuellement supportée uniquement avec l'adressage relatif de l'extrudeur (use_relative_e_distances=1)."
 
-#: src/libslic3r/Print.cpp:1293
+#: src/libslic3r/Print.cpp:1319
 msgid "The Wipe Tower is only supported for multiple objects if they are printed over an equal number of raft layers"
 msgstr "La tour de nettoyage est uniquement supportées pour plusieurs objets s'ils sont imprimés avec un nombre égal de couche de radeau"
 
-#: src/libslic3r/Print.cpp:1295
+#: src/libslic3r/Print.cpp:1321
 msgid "The Wipe Tower is only supported for multiple objects if they are printed with the same support_material_contact_distance"
 msgstr "La tour de nettoyage est uniquement supportée pour plusieurs objets s'ils sont imprimés avec la même support_material_contact_distance"
 
-#: src/libslic3r/Print.cpp:1297
+#: src/libslic3r/Print.cpp:1323
 msgid "The Wipe Tower is only supported for multiple objects if they are sliced equally."
 msgstr "La tour de nettoyage est uniquement supportée pour plusieurs objets s'ils découpés de la même façon."
 
-#: src/libslic3r/Print.cpp:1291
+#: src/libslic3r/Print.cpp:1317
 msgid "The Wipe Tower is only supported for multiple objects if they have equal layer heights"
 msgstr "La tour de nettoyage est uniquement supportée pour plusieurs objets s'ils ont une même hauteur de couche"
 
-#: src/libslic3r/Print.cpp:1257
+#: src/libslic3r/Print.cpp:1283
 msgid "The wipe tower is only supported if all extruders have the same nozzle diameter and use filaments of the same diameter."
 msgstr "La tour de nettoyage n'est supportée que si tous les extrudeurs ont le même diamètre de buse et utilisent un filament de même diamètre."
 
-#: src/libslic3r/Print.cpp:1339
+#: src/libslic3r/Print.cpp:1365
 msgid "The Wipe tower is only supported if all objects have the same variable layer height"
 msgstr "La tour de Nettoyage n'est prise en charge que si tous les objets ont la même hauteur de couche variable"
 
-#: src/libslic3r/SLAPrintSteps.cpp:621
+#: src/slic3r/GUI/Plater.cpp:3563
+msgid "There are active warnings concerning sliced models:"
+msgstr "Il existe des avertissements actifs concernant les modèles découpés :"
+
+#: src/libslic3r/SLAPrintSteps.cpp:619
 msgid "There are unprintable objects. Try to adjust support settings to make the objects printable."
 msgstr "Il y a des objets non imprimables. Essayez d'ajuster les paramètres de support pour rendre les objets imprimables."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1030
+#: src/slic3r/GUI/DoubleSlider.cpp:1155
 msgid ""
 "There is a color change for extruder that has not been used before.\n"
 "Check your settings to avoid redundant color changes."
@@ -7991,7 +9157,7 @@ msgstr ""
 "Il y a un changement de couleur pour un extrudeur qui n'a pas été utilisé auparavant.\n"
 "Vérifiez vos paramètres pour éviter les changements de couleur redondants."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1024
+#: src/slic3r/GUI/DoubleSlider.cpp:1149
 msgid ""
 "There is a color change for extruder that won't be used till the end of print job.\n"
 "This code won't be processed during G-code generation."
@@ -7999,7 +9165,7 @@ msgstr ""
 "Il y a un changement de couleur pour un extrudeur qui ne sera pas utilisé avant la fin du travail d'impression.\n"
 "Ce code ne sera pas traité lors de la génération du G-code."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1027
+#: src/slic3r/GUI/DoubleSlider.cpp:1152
 msgid ""
 "There is an extruder change set to the same extruder.\n"
 "This code won't be processed during G-code generation."
@@ -8007,12 +9173,16 @@ msgstr ""
 "Une modification d'extrudeur est défini sur le même extrudeur.\n"
 "Ce code ne sera pas traité lors de la génération du G-code."
 
+#: src/libslic3r/GCode.cpp:604
+msgid "There is an object with no extrusions on the first layer."
+msgstr "Il y a un objet sans extrusion sur la première couche."
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:225
 #, c-format
 msgid "This %s version: %s"
 msgstr "Version de ce %s : %s"
 
-#: src/slic3r/GUI/Tab.cpp:982
+#: src/slic3r/GUI/Tab.cpp:1244
 msgid ""
 "This action is not revertable.\n"
 "Do you want to proceed?"
@@ -8020,79 +9190,79 @@ msgstr ""
 "Cette action n'est pas réversible.\n"
 "Voulez-vous continuer ?"
 
-#: src/libslic3r/PrintConfig.cpp:165
+#: src/libslic3r/PrintConfig.cpp:199
 msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Ce code est inséré entre des objets lorsque vous utilisez l'impression séquentielle. Par défaut la température de l'extrudeur et du plateau est réinitialisée et utilise la commande  sans-attente ; toutefois si des commandes M104, M109, M140 ou M190 sont détectées dans ce code personnalisé, Slic3r n'ajoutera pas de commandes de température. Notez que vous pouvez utiliser des variables génériques pour tous les réglages de Slic3r, donc vous pouvez entrer une commande \"M109S[first_layer_temperature]\" où vous le souhaitez."
 
-#: src/libslic3r/PrintConfig.cpp:1081
+#: src/libslic3r/PrintConfig.cpp:1174
 msgid "This custom code is inserted at every layer change, right after the Z move and before the extruder moves to the first layer point. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Ce code personnalisé est inséré à chaque changement de couche, juste après le mouvement Z et avant le déplacement de l'extrudeur au point de départ de la couche suivante. Notez que vous pouvez utiliser des variables génériques pour tous les réglages de Slic3r de même que [layer_num] et [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:154
+#: src/libslic3r/PrintConfig.cpp:188
 msgid "This custom code is inserted at every layer change, right before the Z move. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Ce code personnalisé est inséré à chaque changement de couche, juste avant le mouvement en Z. Notez que vous pouvez utiliser des variables génériques pour tous les réglages de Slic3r de même que [layer_num] et [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:2094
+#: src/libslic3r/PrintConfig.cpp:2237
 msgid "This custom code is inserted before every toolchange. Placeholder variables for all PrusaSlicer settings as well as {previous_extruder} and {next_extruder} can be used. When a tool-changing command which changes to the correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit no other such command. It is therefore possible to script custom behaviour both before and after the toolchange."
 msgstr "Ce code personnalisé est inséré avant chaque changement d'outil. Des variables génériques pour n'importe quels réglages PrusaSlicer ainsi que {previous_extruder} et {next_extruder} peuvent être utilisées. Lorsqu'une commande de changement d'outil qui occasionne un changement concernant le bon extrudeur est incluse (comme T{next_extruder}), PrusaSlicer n'émettra pas d'autres commandes de ce type. Il est donc possible de rédiger le script d'un comportement personnalisé à la fois avant et après le changement d'outil."
 
-#: src/libslic3r/PrintConfig.cpp:396
+#: src/libslic3r/PrintConfig.cpp:430
 msgid "This end procedure is inserted at the end of the output file, before the printer end gcode (and before any toolchange from this filament in case of multimaterial printers). Note that you can use placeholder variables for all PrusaSlicer settings. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Cette procédure de fin est insérée à la fin d'un fichier de sortie, avant le gcode de fin de l'imprimante (et avant tout changement d'outil de ce filament dans le cas des imprimantes multimatériaux). Notez que vous pouvez utiliser des variables génériques pour tous les réglages PrusaSlicer. Si vous avez des extrudeurs multiples, le gcode est traité dans l'ordre des extrudeurs."
 
-#: src/libslic3r/PrintConfig.cpp:386
+#: src/libslic3r/PrintConfig.cpp:420
 msgid "This end procedure is inserted at the end of the output file. Note that you can use placeholder variables for all PrusaSlicer settings."
 msgstr "Cette procédure de fin est insérée à la fin d'un fichier de sortie. Notez que vous pouvez utiliser des variables génériques pour tous les paramètres PrusaSlicer."
 
-#: src/libslic3r/PrintConfig.cpp:1258 src/libslic3r/PrintConfig.cpp:1269
+#: src/libslic3r/PrintConfig.cpp:1366 src/libslic3r/PrintConfig.cpp:1377
 msgid "This experimental setting is used to limit the speed of change in extrusion rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."
 msgstr "Ce réglage expérimental sert à limiter la vitesse de changement dans le flux d'extrusion. Une valeur de 1.8 mm³/s² garantit qu'un changement de flux d'extrusion de 1.8 mm³/s (largeur d'extrusion 0.45mm, hauteur d'extrusion 0.2mm, vitesse d'avance de 20 mm/s) à 5.4 mm³/s (vitesse d'avance de 60 mm/s) prendra au moins 2 secondes."
 
-#: src/libslic3r/PrintConfig.cpp:1248
+#: src/libslic3r/PrintConfig.cpp:1356
 msgid "This experimental setting is used to set the maximum volumetric speed your extruder supports."
 msgstr "Ce réglage expérimental est utilisé pour paramétrer la vitesse volumétrique maximum tolérée par votre extrudeur."
 
-#: src/libslic3r/PrintConfig.cpp:2162
+#: src/libslic3r/PrintConfig.cpp:2305
 msgid "This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin."
 msgstr "Ce réglage expérimental utilise les commandes G10 et G11 pour laisser le firmware gérer la rétractation. Utilisable seulement par les versions récentes de Marlin."
 
-#: src/libslic3r/PrintConfig.cpp:2176
+#: src/libslic3r/PrintConfig.cpp:2319
 msgid "This experimental setting uses outputs the E values in cubic millimeters instead of linear millimeters. If your firmware doesn't already know filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' in your start G-code in order to turn volumetric mode on and use the filament diameter associated to the filament selected in Slic3r. This is only supported in recent Marlin."
 msgstr "Cette fonction expérimentale génère des valeurs de E en millimètres cubiques au lieu de millimètres linéaires. Si votre firmware ne connait pas déjà le diamètre du filament, vous pouvez saisir une commande comme 'M200 D[filament_diameter_0] T0' dans votre G-Code de début pour activer le mode volumétrique, et utiliser le diamètre de filament associé au filament choisi dans Slic3r. Cette fonction n'est utilisable que dans les versions récentes de Marlin."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3972
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4459
 msgid "This extruder will be set for selected items"
 msgstr "Cet extrudeur sera défini pour les items sélectionnés"
 
-#: src/libslic3r/PrintConfig.cpp:224
+#: src/libslic3r/PrintConfig.cpp:258
 msgid "This factor affects the amount of plastic for bridging. You can decrease it slightly to pull the extrudates and prevent sagging, although default settings are usually good and you should experiment with cooling (use a fan) before tweaking this."
 msgstr "Ce facteur affecte la quantité de plastique utilisée pour les ponts. Vous pouvez le diminuer légèrement pour éviter l'affaissement. La valeur par défaut est généralement suffisante et vous devriez expérimenter le refroidissement (utiliser un ventilateur) avant de modifier ceci."
 
-#: src/libslic3r/PrintConfig.cpp:546
+#: src/libslic3r/PrintConfig.cpp:582
 msgid "This factor changes the amount of flow proportionally. You may need to tweak this setting to get nice surface finish and correct single wall widths. Usual values are between 0.9 and 1.1. If you think you need to change this more, check filament diameter and your firmware E steps."
 msgstr "Ce facteur modifie proportionnellement le flux d'extrusion. Vous pouvez avoir besoin de modifier ceci afin d'obtenir un rendu de surface net et une largeur correcte pour les murs uniques. Les valeurs habituelles vont de 0.9 à 1.1. Si vous pensez devoir changer davantage cette valeur, vérifiez le diamètre de votre filament et les E Steps dans le firmware."
 
-#: src/libslic3r/PrintConfig.cpp:214
+#: src/libslic3r/PrintConfig.cpp:248
 msgid "This fan speed is enforced during all bridges and overhangs."
 msgstr "Cette vitesse de ventilateur sera utilisée pour les ponts et les surplombs."
 
-#: src/libslic3r/PrintConfig.cpp:992
+#: src/libslic3r/PrintConfig.cpp:1036
 msgid "This feature allows to combine infill and speed up your print by extruding thicker infill layers while preserving thin perimeters, thus accuracy."
 msgstr "Cette fonction permet de combiner le remplissage afin d'accélérer l'impression en extrudant des couches de remplissage plus épaisses tout en conservant des périmètres fins, avec plus de précision."
 
-#: src/libslic3r/PrintConfig.cpp:1746
+#: src/libslic3r/PrintConfig.cpp:1861
 msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
 msgstr "Cette fonction permet de forcer l'impression d'une couche solide après le nombre de couches indiqué. Réglez sur zéro pour la désactiver. Vous pouvez indiquer n'importe quelle valeur (par exemple 9999); Slic3r choisira automatiquement le nombre maximum de couches a combiner en fonction du diamètre de la buse et de l'épaisseur des couches."
 
-#: src/libslic3r/PrintConfig.cpp:1795
+#: src/libslic3r/PrintConfig.cpp:1910
 msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
 msgstr "Cette fonction élèvera le Z graduellement en cas d'impression d'un objet à paroi unique, afin de rendre invisibles les jointures. Cette option nécessite de n'avoir qu'un seul périmètre, de ne pas avoir de remplissage, ni de surface solide supérieure, ni de support. Vous pouvez toujours choisir le nombre de surface solides inférieures de même que les boucles des jupes et des bordures. Cela ne fonctionnera pas si vous imprimez plus d'un objet."
 
-#: src/slic3r/GUI/Plater.cpp:2367
+#: src/slic3r/GUI/Plater.cpp:2329
 msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
 msgstr "Ce fichier ne peut être chargé en mode simple. Voulez-vous basculer en mode avancé ?"
 
-#: src/slic3r/GUI/Plater.cpp:2357
+#: src/slic3r/GUI/Plater.cpp:2319
 msgid ""
 "This file contains several objects positioned at multiple heights.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -8118,84 +9288,96 @@ msgstr ""
 "Voulez-vous continuer et flasher ce fichier hex quand même ?\n"
 "S'il vous plait, ne continuez que si vous êtes certain de faire le bon choix."
 
-#: src/libslic3r/PrintConfig.cpp:314
+#: src/libslic3r/PrintConfig.cpp:348
 msgid "This flag enables the automatic cooling logic that adjusts print speed and fan speed according to layer printing time."
 msgstr "Cette option active la logique de refroidissement automatique, qui ajuste la vitesse d'impression et celle du ventilateur en fonction du temps d'impression de la couche."
 
-#: src/slic3r/GUI/Plater.cpp:536
+#: src/slic3r/GUI/Plater.cpp:402
 msgid "This flag enables the brim that will be printed around each object on the first layer."
 msgstr "Cette option permet l'impression de la bordure qui entoure chaque objet lors de la première couche."
 
-#: src/libslic3r/PrintConfig.cpp:1538
+#: src/libslic3r/PrintConfig.cpp:1646
 msgid "This flag enforces a retraction whenever a Z move is done."
 msgstr "Cette option active la rétractation lors d'un déplacement sur l'axe Z."
 
-#: src/libslic3r/PrintConfig.cpp:2194
+#: src/libslic3r/PrintConfig.cpp:2337
 msgid "This flag will move the nozzle while retracting to minimize the possible blob on leaky extruders."
 msgstr "Cette option déplace la buse lors des rétractations, limitant ainsi l'apparition d'amas sur les extrudeurs ayant tendance à couler."
 
-#: src/slic3r/GUI/Tab.cpp:953
+#: src/libslic3r/PrintConfig.cpp:1961
+msgid "This G-code will be used as a code for the color change"
+msgstr "Ce G-code sera utilisé comme code pour le changement de couleur"
+
+#: src/libslic3r/PrintConfig.cpp:1970
+msgid "This G-code will be used as a code for the pause print"
+msgstr "Ce G-code sera utilisé comme code pour la pause de l'impression"
+
+#: src/libslic3r/PrintConfig.cpp:1979
+msgid "This G-code will be used as a custom code"
+msgstr "Ce G-code sera utilisé comme code personnalisé"
+
+#: src/slic3r/GUI/Tab.cpp:1272
 msgid "This is a default preset."
 msgstr "Ceci est un préréglage par défaut."
 
-#: src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2930
 msgid "This is a relative measure of support points density."
 msgstr "Ceci est une mesure relative de la densité des points de support."
 
-#: src/slic3r/GUI/Tab.cpp:2338
+#: src/slic3r/GUI/Tab.cpp:2507
 msgid "This is a single extruder multimaterial printer, diameters of all extruders will be set to the new value. Do you want to proceed?"
 msgstr "Ceci est une imprimante multimatériaux à extrudeur unique, les diamètres de tous les extrudeurs seront réglés sur la nouvelle valeur. Voulez-vous continuer ?"
 
-#: src/slic3r/GUI/Tab.cpp:955
+#: src/slic3r/GUI/Tab.cpp:1274
 msgid "This is a system preset."
 msgstr "Ceci est un préréglage système."
 
-#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:583
+#: src/libslic3r/PrintConfig.cpp:559 src/libslic3r/PrintConfig.cpp:619
 msgid "This is only used in the Slic3r interface as a visual help."
 msgstr "Ceci est utilisé dans l'interface de Slic3r uniquement en tant que indication visuelle."
 
-#: src/libslic3r/PrintConfig.cpp:336
+#: src/libslic3r/PrintConfig.cpp:370
 msgid "This is the acceleration your printer will be reset to after the role-specific acceleration values are used (perimeter/infill). Set zero to prevent resetting acceleration at all."
 msgstr "Accélération à laquelle votre imprimante sera réinitialisée suite à une modification de l'accélération des fonctions spécifiques (périmètre/remplissage). Régler sur zéro pour ne pas réinitialiser l'accélération."
 
-#: src/libslic3r/PrintConfig.cpp:194
+#: src/libslic3r/PrintConfig.cpp:228
 msgid "This is the acceleration your printer will use for bridges. Set zero to disable acceleration control for bridges."
 msgstr "L'accélération qui sera utilisée par votre imprimante pour les ponts. Régler sur zéro pour désactiver l'accélération pour les ponts."
 
-#: src/libslic3r/PrintConfig.cpp:860
+#: src/libslic3r/PrintConfig.cpp:900
 msgid "This is the acceleration your printer will use for first layer. Set zero to disable acceleration control for first layer."
 msgstr "L'accélération que l'imprimante utilisera pour la première couche. Régler sur zéro afin de désactiver le contrôle de l'accélération pour la première couche."
 
-#: src/libslic3r/PrintConfig.cpp:982
+#: src/libslic3r/PrintConfig.cpp:1026
 msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
 msgstr "Il s'agit de l'accélération que votre imprimante utilisera pour le remplissage. Régler sur zéro afin de désactiver le contrôle de l'accélération pour le remplissage."
 
-#: src/libslic3r/PrintConfig.cpp:1400
+#: src/libslic3r/PrintConfig.cpp:1508
 msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
 msgstr "L'accélération que votre imprimante utilisera pour les périmètres. Une valeur élevée comme 9000  donne généralement de bons résultats si votre matériel le permet. Régler sur zéro afin de désactiver le contrôle de l'accélération pour les périmètres."
 
-#: src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1435
 msgid "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"
 msgstr "Il s'agit du diamètre de la buse de votre extrudeur (par exemple: 0.5, 0.35, etc.)"
 
-#: src/libslic3r/PrintConfig.cpp:1227
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:1335
+#, c-format
 msgid "This is the highest printable layer height for this extruder, used to cap the variable layer height and support layer height. Maximum recommended layer height is 75% of the extrusion width to achieve reasonable inter-layer adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter."
 msgstr "Ceci est la hauteur de couche imprimable maximum pour cet extrudeur, utilisée pour plafonner la hauteur de couche variable et la hauteur de couche des supports. La hauteur de couche maximum recommandée est 75% de la largeur d'extrusion afin d'obtenir une adhésion inter-couches correcte. Si réglée sur 0, la hauteur de couche est limitée à 75% du diamètre de la buse."
 
-#: src/libslic3r/PrintConfig.cpp:1290
+#: src/libslic3r/PrintConfig.cpp:1398
 msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
 msgstr "Cette valeur est la hauteur de couche imprimable minimum pour cet extrudeur et elle limite la résolution pour la hauteur de couche variable. Les valeurs type se situent entre 0.05 mm et 0.1 mm."
 
-#: src/libslic3r/GCode.cpp:639
+#: src/libslic3r/GCode.cpp:624
 msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
 msgstr "Ceci est généralement provoqué par de petites extrusions négligeables ou par un modèle défectueux. Essayez de réparer le modèle ou de changer son orientation sur le lit."
 
-#: src/libslic3r/PrintConfig.cpp:2215
+#: src/libslic3r/PrintConfig.cpp:2358
 msgid "This matrix describes volumes (in cubic milimetres) required to purge the new filament on the wipe tower for any given pair of tools."
 msgstr "Cette matrice décrit les volumes (en millimètres cube) nécessaires pour purger le nouveau filament dans la tour de nettoyage pour une paire d'outils donnée."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:928
 msgid ""
 "This operation is irreversible.\n"
 "Do you want to proceed?"
@@ -8203,31 +9385,35 @@ msgstr ""
 "Cette opération est irréversible.\n"
 "Voulez-vous continuer?"
 
-#: src/libslic3r/PrintConfig.cpp:1442
+#: src/libslic3r/PrintConfig.cpp:1550
 msgid "This option sets the number of perimeters to generate for each layer. Note that Slic3r may increase this number automatically when it detects sloping surfaces which benefit from a higher number of perimeters if the Extra Perimeters option is enabled."
 msgstr "Cette option définit le nombre de périmètres à générer pour chaque couche. Notez que Slic3r peut augmenter cette valeur automatiquement si il détecte une surface inclinée qui nécessite un plus grand nombre de périmètres, si l'option \"Périmètres supplémentaires\" est sélectionnée."
 
-#: src/libslic3r/PrintConfig.cpp:1356
+#: src/libslic3r/PrintConfig.cpp:1464
 msgid "This option will drop the temperature of the inactive extruders to prevent oozing. It will enable a tall skirt automatically and move extruders outside such skirt when changing temperatures."
 msgstr "Cette option abaissera la température des extrudeurs inutilisés pour prévenir le oozing (suintement). Cela active automatiquement la génération d'une grande jupe et le déplacement des extrudeurs hors de cette jupe lors des changements de température."
 
-#: src/libslic3r/PrintConfig.cpp:1029
+#: src/libslic3r/PrintConfig.cpp:1073
 msgid "This option will limit infill to the areas actually needed for supporting ceilings (it will act as internal support material). If enabled, slows down the G-code generation due to the multiple checks involved."
 msgstr "Cette option limitera le remplissage aux zones nécessaires pour soutenir les couches supérieures (cela agira comme un support interne). Si activé, la génération du G-Code prendra plus de temps à cause des calculs supplémentaires requis."
 
-#: src/libslic3r/PrintConfig.cpp:1022
+#: src/libslic3r/PrintConfig.cpp:1066
 msgid "This option will switch the print order of perimeters and infill, making the latter first."
 msgstr "Cette option inverse l'ordre d'impression des périmètres et du remplissage, ce dernier étant alors imprimé en premier."
 
-#: src/libslic3r/PrintConfig.cpp:459
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:85
+msgid "This printer will be shown in the presets list as"
+msgstr "Cette imprimante sera affichée dans la liste des préréglages comme"
+
+#: src/libslic3r/PrintConfig.cpp:495
 msgid "This separate setting will affect the speed of external perimeters (the visible ones). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
 msgstr "Ce réglage distinct affectera la vitesse des périmètres extérieurs (ceux qui sont visibles). Si cette valeur est exprimée en pourcentage (par exemple: 80%) elle sera calculée d'après le réglage de la vitesse de périmètre susmentionnée. Réglez sur zéro pour un ajustement automatique."
 
-#: src/libslic3r/PrintConfig.cpp:1717
+#: src/libslic3r/PrintConfig.cpp:1832
 msgid "This separate setting will affect the speed of perimeters having radius <= 6.5mm (usually holes). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
 msgstr "Ce réglage distinct affectera la vitesse des périmètre ayant un rayon <= 6.5mm (les trous habituellement). Si cette valeur est exprimée en pourcentage (par exemple: 80%) elle sera calculée d'après le réglage de la vitesse de périmètre susmentionnée. Réglez sur zéro pour un ajustement automatique."
 
-#: src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1082
 msgid "This setting applies an additional overlap between infill and perimeters for better bonding. Theoretically this shouldn't be needed, but backlash might cause gaps. If expressed as percentage (example: 15%) it is calculated over perimeter extrusion width."
 msgstr "Cette option applique un chevauchement supplémentaire entre les périmètres et le remplissage pour une meilleur fusion. En théorie, cela ne devrait pas être nécessaire, mais le jeu mécanique peut générer des espacements. Si exprimé en pourcentage (par exemple 15%), la valeur sera calculée en fonction de la largeur d'extrusion du périmètre."
 
@@ -8235,31 +9421,31 @@ msgstr "Cette option applique un chevauchement supplémentaire entre les périm
 msgid "This setting controls the height (and thus the total number) of the slices/layers. Thinner layers give better accuracy but take more time to print."
 msgstr "Cette option contrôle l'épaisseur (et donc le nombre total) des couches. Des couches plus fines donneront une meilleure précision mais l'impression sera plus longue."
 
-#: src/libslic3r/PrintConfig.cpp:1218
+#: src/libslic3r/PrintConfig.cpp:1326
 msgid "This setting represents the maximum speed of your fan."
 msgstr "Cette option représente la vitesse maximum du ventilateur."
 
-#: src/libslic3r/PrintConfig.cpp:1281
+#: src/libslic3r/PrintConfig.cpp:1389
 msgid "This setting represents the minimum PWM your fan needs to work."
 msgstr "Cette option représente le PWM minimum dont votre ventilateur a besoin pour tourner."
 
-#: src/libslic3r/PrintConfig.cpp:1829
+#: src/libslic3r/PrintConfig.cpp:1944
 msgid "This start procedure is inserted at the beginning, after any printer start gcode (and after any toolchange to this filament in case of multi-material printers). This is used to override settings for a specific filament. If PrusaSlicer detects M104, M109, M140 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Cette procédure de départ est insérée au début, après n'importe quel gcode de départ de l'imprimante (et après n'importe quel changement d'outil pour ce filament dans le cas des imprimantes multi-matériaux). Ceci est utilisé pour supplanter les réglages d'un filament spécifique. Si PrusaSlicer détecte M104, M109, M140 ou M190 dans vos codes personnalisés, de telles commandes ne seront pas ajoutées automatiquement de sorte que vous restez libre de personnaliser l'ordre des commandes de chauffe et autres actions personnalisées. Notez que vous pouvez utiliser des variables génériques pour les tous les paramètres PrusaSlicer, donc vous pouvez utiliser une commande \"M109 S[first_layer_temperature]\" où vous voulez."
 
-#: src/libslic3r/PrintConfig.cpp:1814
+#: src/libslic3r/PrintConfig.cpp:1929
 msgid "This start procedure is inserted at the beginning, after bed has reached the target temperature and extruder just started heating, and before extruder has finished heating. If PrusaSlicer detects M104 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Cette procédure de départ est insérée au début, après que le lit a atteint la température ciblée et que l'extrudeur vient de commencer à chauffer, et avant que l'extrudeur ait terminé de chauffer. Si PrusaSlicer détecte M104 ou M190 dans votre code personnalisé, de telles commandes ne seront pas ajoutées automatiquement de sorte que vous restez libre de personnaliser l'ordre des commandes de chauffe et autres actions personnalisées. Notez que vous pouvez utiliser des variables génériques pour les tous les paramètres PrusaSlicer, donc vous pouvez utiliser une commande \"M109 S[first_layer_temperature]\" où vous voulez."
 
-#: src/libslic3r/PrintConfig.cpp:695
+#: src/libslic3r/PrintConfig.cpp:731
 msgid "This string is edited by RammingDialog and contains ramming specific parameters."
 msgstr "Cette chaine est éditée par RammingDialog et contient les paramètres spécifiques d'expulsion."
 
-#: src/libslic3r/PrintConfig.cpp:2286
+#: src/libslic3r/PrintConfig.cpp:2429
 msgid "This value will be added (or subtracted) from all the Z coordinates in the output G-code. It is used to compensate for bad Z endstop position: for example, if your endstop zero actually leaves the nozzle 0.3mm far from the print bed, set this to -0.3 (or fix your endstop)."
 msgstr "Cette valeur sera ajoutée (ou soustraite) de toutes les coordonnées Z dans le G-Code de sortie. Elle est utilisée pour compenser une mauvaise position de fin de course Z: par exemple si votre fin de course place votre buse à 0.3mm au dessus du plateau, réglez cette valeur sur -0.3 (ou corrigez votre fin de course)."
 
-#: src/libslic3r/PrintConfig.cpp:2208
+#: src/libslic3r/PrintConfig.cpp:2351
 msgid "This vector saves required volumes to change from/to each tool used on the wipe tower. These values are used to simplify creation of the full purging volumes below."
 msgstr "Ce vecteur enregistre les volumes requis pour changer l'outil utilisé pour la tour de nettoyage. Ces valeurs sont utilisées pour simplifier la création des volumes de purge complets ci-dessous."
 
@@ -8276,82 +9462,96 @@ msgstr ""
 "\n"
 "Vous pouvez soit quitter %s et essayer à nouveau avec une version plus récente, ou vous pouvez relancer la configuration initiale. Procéder ainsi permettra de créer une sauvegarde de la configuration existante avant d'installer les fichiers compatibles avec ce %s."
 
-#: src/libslic3r/PrintConfig.cpp:2458
+#: src/libslic3r/PrintConfig.cpp:2601
 msgid "This will apply a gamma correction to the rasterized 2D polygons. A gamma value of zero means thresholding with the threshold in the middle. This behaviour eliminates antialiasing without losing holes in polygons."
 msgstr "Cela appliquera une correction gamma aux polygones 2D tramés. Une valeur gamma de zéro signifie un seuillage avec le seuil au milieu. Ce comportement élimine l'anti-alias sans perdre de trous dans le polygone."
 
-#: src/libslic3r/PrintConfig.cpp:2081
+#: src/libslic3r/PrintConfig.cpp:2224
 msgid "Threads"
 msgstr "Threads"
 
-#: src/libslic3r/PrintConfig.cpp:2082
+#: src/libslic3r/PrintConfig.cpp:2225
 msgid "Threads are used to parallelize long-running tasks. Optimal threads number is slightly above the number of available cores/processors."
 msgstr "Les threads sont utilisés pour paralléliser les calculs longs. Le nombre optimal de threads est légèrement supérieur au nombre de coeurs/processeurs disponibles."
 
-#: src/slic3r/GUI/Tab.cpp:2093
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235
+msgid "Threshold:"
+msgstr "Seuil :"
+
+#: src/slic3r/GUI/Tab.cpp:2263
 msgid "Tilt"
 msgstr "Incliner"
 
-#: src/slic3r/GUI/Tab.cpp:2094
+#: src/slic3r/GUI/Tab.cpp:2264
 msgid "Tilt time"
 msgstr "Durée de l'inclinaison"
 
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
 #: src/slic3r/GUI/RammingChart.cpp:76
 msgid "Time"
 msgstr "Durée"
 
-#: src/libslic3r/PrintConfig.cpp:687
+#: src/libslic3r/PrintConfig.cpp:723
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Temps nécessaire pour que le Firmware de l'imprimante (ou la Multi Material Unit 2.0) charge un filament au cours d'un changement d'outils (lorsqu'il exécute le T code). Ce temps est ajouté au temps total d'impression par l'estimateur de temps du G-code."
 
-#: src/libslic3r/PrintConfig.cpp:702
+#: src/libslic3r/PrintConfig.cpp:738
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Temps nécessaire pour que le Firmware de l'imprimante (ou la Multi Material Unit 2.0) décharge un filament au cours d'un changement d'outils (lorsqu'il exécute le T code). Ce temps est ajouté au temps total d'impression par l'estimateur de temps du G-code."
 
-#: src/libslic3r/PrintConfig.cpp:2407
+#: src/libslic3r/PrintConfig.cpp:2550
 msgid "Time of the fast tilt"
 msgstr "Durée de l'inclinaison rapide"
 
-#: src/libslic3r/PrintConfig.cpp:2416
+#: src/libslic3r/PrintConfig.cpp:2559
 msgid "Time of the slow tilt"
 msgstr "Durée de l'inclinaison lente"
 
-#: src/libslic3r/PrintConfig.cpp:641
+#: src/libslic3r/PrintConfig.cpp:677
 msgid "Time to wait after the filament is unloaded. May help to get reliable toolchanges with flexible materials that may need more time to shrink to original dimensions."
 msgstr "Temps d'attente nécessaire après que le filament ait été déchargé.  Peut aider à obtenir des changements d'outils fiables avec des matériaux flexible qui ont besoin de plus de temps pour revenir à leurs dimensions originales."
 
-#: src/slic3r/GUI/Tab.cpp:966
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "to"
+msgstr "à"
+
+#: src/slic3r/GUI/Tab.cpp:1284
 msgid "To do that please specify a new name for the preset."
 msgstr "Pour faire cela veuillez spécifier un nouveau nom pour le préréglage."
 
-#: src/slic3r/GUI/Plater.cpp:4014
+#: src/slic3r/GUI/Plater.cpp:3934
 msgid "To objects"
 msgstr "Vers les objets"
 
-#: src/slic3r/GUI/Plater.cpp:4016
+#: src/slic3r/GUI/Plater.cpp:3936
 msgid "To parts"
 msgstr "Vers les parties"
 
-#: src/slic3r/GUI/Tab.cpp:1756
+#: src/slic3r/Utils/Http.cpp:82
+msgid "To specify the system certificate store manually, please set the %1% environment variable to the correct CA bundle and restart the application."
+msgstr "Pour spécifier manuellement le stockage de certificats système, définissez la variable d'environnement %1% sur le bon groupe d'autorité de certification et redémarrez l'application."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:360
 msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain."
 msgstr "Pour utiliser un fichier CA personnalisé, veuillez importer votre fichier CA dans le Magasin de Certificats / Trousseau."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:271
 #, c-format
 msgid "Toggle %c axis mirroring"
 msgstr "Activer la symétrie sur l'axe %c"
 
-#: src/libslic3r/Zipper.cpp:34
+#: src/libslic3r/miniz_extension.cpp:93
 msgid "too many files"
 msgstr "trop de fichiers"
 
-#: src/libslic3r/SLAPrintSteps.cpp:190
-msgid "Too much overlapping holes."
+#: src/libslic3r/SLAPrintSteps.cpp:192
+msgid "Too many overlapping holes."
 msgstr "Trop de trous qui se chevauchent."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:227 src/slic3r/GUI/GUI_Preview.cpp:335
-#: src/slic3r/GUI/GUI_Preview.cpp:519 src/slic3r/GUI/GUI_Preview.cpp:574
-#: src/slic3r/GUI/GUI_Preview.cpp:835 src/libslic3r/GCode/PreviewData.cpp:357
+#: src/slic3r/GUI/GCodeViewer.cpp:2241 src/slic3r/GUI/GUI_Preview.cpp:281
+#: src/slic3r/GUI/GUI_Preview.cpp:453 src/slic3r/GUI/GUI_Preview.cpp:693
+#: src/slic3r/GUI/GUI_Preview.cpp:786 src/slic3r/GUI/GUI_Preview.cpp:1270
+#: src/libslic3r/GCode/PreviewData.cpp:362
 msgid "Tool"
 msgstr "Outil"
 
@@ -8359,51 +9559,64 @@ msgstr "Outil"
 msgid "Tool #"
 msgstr "Outil #"
 
-#: src/slic3r/GUI/Tab.cpp:2000 src/libslic3r/PrintConfig.cpp:2093
+#: src/slic3r/GUI/Tab.cpp:2189 src/libslic3r/PrintConfig.cpp:2236
 msgid "Tool change G-code"
 msgstr "G-code de changement d'outil"
 
-#: src/slic3r/GUI/Tab.cpp:1491
+#: src/slic3r/GUI/GCodeViewer.cpp:2530 src/slic3r/GUI/GUI_Preview.cpp:1474
+msgid "Tool changes"
+msgstr "Changements d'outils"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:1479
+msgid "Tool marker"
+msgstr "Marqueur d'outil"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:223
+msgid "Tool position"
+msgstr "Position de l'outil"
+
+#: src/slic3r/GUI/Tab.cpp:1837
 msgid "Toolchange parameters with single extruder MM printers"
 msgstr "Paramètres de changement d'outil pour les imprimantes multi-matériaux mono-extrudeur"
 
 #. TRN To be shown in the main menu View->Top
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:662 src/libslic3r/PrintConfig.cpp:2132
-#: src/libslic3r/PrintConfig.cpp:2141
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
+#: src/libslic3r/PrintConfig.cpp:2275 src/libslic3r/PrintConfig.cpp:2284
 msgid "Top"
 msgstr "Haut"
 
-#: src/slic3r/GUI/PresetHints.cpp:304
+#: src/slic3r/GUI/PresetHints.cpp:302
 msgid "Top / bottom shell thickness hint: Not available due to invalid layer height."
 msgstr "Indice d'épaisseur de coque supérieure / inférieure : non disponible en raison de la hauteur de couche non valide."
 
-#: src/libslic3r/PrintConfig.cpp:415
+#: src/libslic3r/PrintConfig.cpp:449
 msgid "Top fill pattern"
 msgstr "Motif de remplissage du dessus"
 
-#: src/slic3r/GUI/PresetHints.cpp:323
+#: src/slic3r/GUI/PresetHints.cpp:321
 msgid "Top is open."
 msgstr "Le haut est ouvert."
 
-#: src/slic3r/GUI/PresetHints.cpp:317
+#: src/slic3r/GUI/PresetHints.cpp:315
 msgid "Top shell is %1% mm thick for layer height %2% mm."
 msgstr "La coque supérieure a une épaisseur de %1% mm pour une hauteur de couche %2% mm."
 
-#: src/slic3r/GUI/PresetHints.cpp:192
+#: src/slic3r/GUI/PresetHints.cpp:191
 msgid "top solid infill"
 msgstr "remplissage solide supérieur"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:242 src/libslic3r/ExtrusionEntity.cpp:315
-#: src/libslic3r/PrintConfig.cpp:2105 src/libslic3r/PrintConfig.cpp:2117
+#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:319
+#: src/libslic3r/ExtrusionEntity.cpp:346 src/libslic3r/PrintConfig.cpp:2248
+#: src/libslic3r/PrintConfig.cpp:2260
 msgid "Top solid infill"
 msgstr "Remplissage solide supérieur"
 
-#: src/libslic3r/PrintConfig.cpp:2135
+#: src/libslic3r/PrintConfig.cpp:2278
 msgid "Top solid layers"
 msgstr "Couches supérieures solides"
 
-#: src/slic3r/GUI/MainFrame.cpp:662
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
 msgid "Top View"
 msgstr "Vue du Dessus"
 
@@ -8419,90 +9632,128 @@ msgstr "Volume total expulsé"
 msgid "Total ramming time"
 msgstr "Durée totale de l'expulsion"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:516
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:640
+msgid "Transfer"
+msgstr "Transférer"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:745
+msgid "Transfer the selected options to the newly selected preset \"%1%\"."
+msgstr "Transférer les options sélectionnées vers le nouveau préréglage \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Transfer the selected settings to the newly selected preset."
+msgstr "Transférez les réglages sélectionnés vers le nouveau préréglage sélectionné."
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:561
 msgid "Translate"
 msgstr "Traduire"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:300
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:282
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Translation"
 msgstr "Translation"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:253 src/libslic3r/PrintConfig.cpp:2152
+#: src/slic3r/GUI/GCodeViewer.cpp:2489 src/slic3r/GUI/GUI_Preview.cpp:335
+#: src/slic3r/GUI/GUI_Preview.cpp:1471 src/libslic3r/PrintConfig.cpp:2295
 msgid "Travel"
 msgstr "Déplacement"
 
-#: src/libslic3r/PrintConfig.cpp:845
+#: src/libslic3r/PrintConfig.cpp:883
 msgid "Triangles"
 msgstr "Triangles"
 
-#: src/libslic3r/PrintConfig.cpp:3448
+#: src/libslic3r/PrintConfig.cpp:3647
 msgid "Try to repair any non-manifold meshes (this option is implicitly added whenever we need to slice the model to perform the requested action)."
 msgstr "Essayer de réparer tout maillage non-multiple (cette option est ajoutée implicitement dès que nous devons découper le modèle pour accomplir l'action demandée)."
 
-#: src/libslic3r/PrintConfig.cpp:1467
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:165
+msgid "Type here the name of your printer device"
+msgstr "Tapez ici le nom de votre imprimante"
+
+#: src/libslic3r/PrintConfig.cpp:1575
 msgid "Type of the printer."
 msgstr "Type d'imprimante."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013 src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/ConfigWizard.cpp:2524 src/slic3r/GUI/ConfigWizard.cpp:2526
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Type:"
 msgstr "Type :"
 
-#: src/slic3r/GUI/Plater.cpp:3428
+#: src/slic3r/GUI/OpenGLManager.cpp:275
+#, c-format
+msgid ""
+"Unable to load the following shaders:\n"
+"%s"
+msgstr ""
+"Impossible de charger les shaders suivants :\n"
+"%s"
+
+#: src/slic3r/GUI/Plater.cpp:3233
 msgid "Unable to reload:"
 msgstr "Impossible de recharger :"
 
-#: src/libslic3r/Zipper.cpp:32
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:137
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:146
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:845
+msgid "Undef"
+msgstr "Undef"
+
+#: src/libslic3r/miniz_extension.cpp:91
 msgid "undefined error"
 msgstr "erreur non définie"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/KBShortcutsDialog.cpp:130
-#: src/slic3r/GUI/MainFrame.cpp:581
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/KBShortcutsDialog.cpp:125
+#: src/slic3r/GUI/MainFrame.cpp:1187
 msgid "Undo"
 msgstr "Annuler"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Undo %1$d Action"
 msgid_plural "Undo %1$d Actions"
 msgstr[0] "Annuler %1$d Action"
 msgstr[1] "Annuler %1$d Actions"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Undo History"
 msgstr "Annuler Historique"
 
-#: src/libslic3r/Zipper.cpp:56
+#: src/libslic3r/miniz_extension.cpp:115
 msgid "unexpected decompressed size"
 msgstr "volume de décompression inattendu"
 
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27
+#: src/slic3r/GUI/GUI_Preview.cpp:299 src/libslic3r/ExtrusionEntity.cpp:310
 msgid "Unknown"
 msgstr "Inconnu"
 
-#: src/slic3r/Utils/Duet.cpp:82 src/slic3r/Utils/Duet.cpp:137
-#: src/slic3r/Utils/FlashAir.cpp:119 src/slic3r/Utils/FlashAir.cpp:140
-#: src/slic3r/Utils/FlashAir.cpp:156
+#: src/slic3r/Utils/Duet.cpp:84 src/slic3r/Utils/Duet.cpp:139
+#: src/slic3r/Utils/FlashAir.cpp:122 src/slic3r/Utils/FlashAir.cpp:143
+#: src/slic3r/Utils/FlashAir.cpp:159
 msgid "Unknown error occured"
 msgstr "Une erreur inconnue s'est produite"
 
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:178
+msgid "Unknown error occured during exporting G-code."
+msgstr "Une erreur inconnue s'est produite lors de l'exportation du G-code."
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:263
 msgid "unloaded"
 msgstr "déchargé"
 
-#: src/libslic3r/PrintConfig.cpp:623
+#: src/libslic3r/PrintConfig.cpp:659
 msgid "Unloading speed"
 msgstr "Vitesse de déchargement"
 
-#: src/libslic3r/PrintConfig.cpp:632
+#: src/libslic3r/PrintConfig.cpp:668
 msgid "Unloading speed at the start"
 msgstr "Vitesse de déchargement au démarrage"
 
-#: src/slic3r/GUI/Tab.cpp:3256
+#: src/slic3r/GUI/Tab.cpp:3693
 msgid "UNLOCKED LOCK"
 msgstr "CADENAS OUVERT"
 
-#: src/slic3r/GUI/Tab.cpp:3282
+#: src/slic3r/GUI/Tab.cpp:3719
 msgid ""
 "UNLOCKED LOCK icon indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
 "Click to reset all settings for current option group to the system (or default) values."
@@ -8510,7 +9761,7 @@ msgstr ""
 "L'icône CADENAS OUVERT indique que certains paramètres ont été modifiés et ne sont pas égaux aux valeurs du système (ou par défaut) pour le groupe d'options actuel.\n"
 "Cliquez pour régler tous les paramètres pour le groupe d'options actuel sur les valeurs du système (ou par défaut)."
 
-#: src/slic3r/GUI/Tab.cpp:3297
+#: src/slic3r/GUI/Tab.cpp:3734
 msgid ""
 "UNLOCKED LOCK icon indicates that the value was changed and is not equal to the system (or default) value.\n"
 "Click to reset current value to the system (or default) value."
@@ -8518,56 +9769,43 @@ msgstr ""
 "L'icône CADENAS OUVERT indique que la valeur a été changée et n'est pas égale à la valeur du système (ou par défaut).\n"
 "Cliquez pour réinitialiser la valeur actuelle sur les valeurs du système (ou par défaut)."
 
-#: src/slic3r/GUI/Plater.cpp:5203
-#, c-format
-msgid "Unmounting successful. The device %s(%s) can now be safely removed from the computer."
-msgstr "Démontage réussi. Le matériel %s(%s) peut maintenant être déconnecté de l'ordinateur en toute sécurité."
-
-#: src/slic3r/GUI/GUI_Preview.cpp:255
-msgid "Unretractions"
-msgstr "Dérétractation"
-
-#: src/slic3r/GUI/Tab.cpp:2947
-msgid "Unsaved Changes"
-msgstr "Modifications Non Sauvegardés"
-
-#: src/slic3r/GUI/GUI_App.cpp:935
-msgid "Unsaved Presets"
-msgstr "Préréglages Non Sauvegardés"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
 msgid "Unselect gizmo or clear selection"
 msgstr "Désélectionner le Gizmo ou supprimer la sélection"
 
-#: src/libslic3r/Zipper.cpp:60
+#: src/libslic3r/miniz_extension.cpp:119
 msgid "unsupported central directory size"
 msgstr "volume du répertoire central non supporté"
 
-#: src/libslic3r/Zipper.cpp:40
+#: src/libslic3r/miniz_extension.cpp:99
 msgid "unsupported encryption"
 msgstr "cryptage non supporté"
 
-#: src/libslic3r/Zipper.cpp:42
+#: src/libslic3r/miniz_extension.cpp:101
 msgid "unsupported feature"
 msgstr "fonction non supportée"
 
-#: src/libslic3r/Zipper.cpp:38
+#: src/libslic3r/miniz_extension.cpp:97
 msgid "unsupported method"
 msgstr "méthode non supportée"
 
-#: src/libslic3r/Zipper.cpp:50
+#: src/libslic3r/miniz_extension.cpp:109
 msgid "unsupported multidisk archive"
 msgstr "archive multidisque non supportée"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:292
+#: src/slic3r/GUI/OpenGLManager.cpp:267
 msgid "Unsupported OpenGL version"
 msgstr "Version d'OpenGL non supportée"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3420
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3883
 msgid "Unsupported selection"
 msgstr "Sélection non supportée"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:955
+#: src/slic3r/GUI/GCodeViewer.cpp:2183
+msgid "up to"
+msgstr "jusqu'à"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:961
 #, c-format
 msgid "up to %.2f mm"
 msgstr "jusqu'à %.2f mm"
@@ -8576,15 +9814,15 @@ msgstr "jusqu'à %.2f mm"
 msgid "Update available"
 msgstr "Mise à jour disponible"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:779 src/slic3r/GUI/Preferences.cpp:80
+#: src/slic3r/GUI/ConfigWizard.cpp:1138 src/slic3r/GUI/Preferences.cpp:97
 msgid "Update built-in Presets automatically"
 msgstr "Mettre à jour automatiquement les Préréglages intégrés"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Updates"
 msgstr "Mises à jour"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:786
+#: src/slic3r/GUI/ConfigWizard.cpp:1145
 msgid "Updates are never applied without user's consent and never overwrite user's customized settings."
 msgstr "Les mises à jour ne sont jamais appliquées sans l'accord de l'utilisateur et n'annulent jamais les réglages personnalisés de l'utilisateur."
 
@@ -8592,7 +9830,7 @@ msgstr "Les mises à jour ne sont jamais appliquées sans l'accord de l'utilisat
 msgid "Upgrade"
 msgstr "Mise à jour"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Upload a firmware image into an Arduino based printer"
 msgstr "Charger un firmware dans une imprimante basée sur un Arduino"
 
@@ -8608,101 +9846,118 @@ msgstr "Envoyer vers l'Hôte d'Imprimante avec le nom de fichier suivant :"
 msgid "Uploading"
 msgstr "Téléchargement"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
 msgid "Upper Layer"
 msgstr "Couche du Haut"
 
-#: src/slic3r/GUI/Tab.cpp:1900
-msgid "USB/Serial connection"
-msgstr "Connexion USB/Série"
-
-#: src/libslic3r/PrintConfig.cpp:1662
-msgid "USB/serial port for printer connection."
-msgstr "Port USB/Série pour la connexion de l'imprimante."
-
-#: src/slic3r/GUI/DoubleSlider.cpp:1147
+#: src/slic3r/GUI/DoubleSlider.cpp:1276
 msgid "Use another extruder"
 msgstr "Utiliser un autre extrudeur"
 
-#: src/slic3r/GUI/Preferences.cpp:143
+#: src/slic3r/GUI/Preferences.cpp:220
 msgid "Use custom size for toolbar icons"
 msgstr "Utiliser une taille personnalisée pour les icônes de la barre d'outils"
 
-#: src/libslic3r/PrintConfig.cpp:2161
+#: src/slic3r/GUI/Preferences.cpp:268
+msgid "Use environment map"
+msgstr "Utiliser la carte d'environnement"
+
+#: src/libslic3r/PrintConfig.cpp:2304
 msgid "Use firmware retraction"
 msgstr "Utiliser la rétraction du firmware"
 
+#: src/slic3r/GUI/ImGuiWrapper.cpp:800 src/slic3r/GUI/Search.cpp:464
+msgid "Use for search"
+msgstr "Utiliser pour la recherche"
+
+#: src/libslic3r/PrintConfig.cpp:1218
+msgid "Use for time estimate"
+msgstr "Utiliser pour l'estimation du temps"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:42
 msgid "Use forward slashes ( / ) as a directory separator if needed."
 msgstr "Utilisez des barres obliques (/) comme séparateur de répertoire si nécessaire."
 
-#: src/slic3r/GUI/Preferences.cpp:126
+#: src/slic3r/GUI/Preferences.cpp:191
 msgid "Use free camera"
 msgstr "Utiliser la caméra libre"
 
-#: src/libslic3r/PrintConfig.cpp:2780
+#: src/slic3r/GUI/ConfigWizard.cpp:1188
+msgid "Use inches"
+msgstr "Utiliser les pouces"
+
+#: src/libslic3r/PrintConfig.cpp:2944
 msgid "Use pad"
 msgstr "Utiliser un socle"
 
-#: src/slic3r/GUI/Preferences.cpp:119
+#: src/slic3r/GUI/Preferences.cpp:184
 msgid "Use perspective camera"
 msgstr "Utiliser l'appareil photo en perspective"
 
-#: src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2311
 msgid "Use relative E distances"
 msgstr "Utiliser des valeurs E relatives"
 
-#: src/slic3r/GUI/Preferences.cpp:104
+#: src/slic3r/GUI/Preferences.cpp:135
 msgid "Use Retina resolution for the 3D scene"
 msgstr "Utiliser la résolution Retina pour la scène 3D"
 
-#: src/libslic3r/PrintConfig.cpp:540
+#: src/libslic3r/PrintConfig.cpp:576
 msgid "Use this option to set the axis letter associated to your printer's extruder (usually E but some printers use A)."
 msgstr "Utiliser cette option pour indiquer la lettre utilisée par l'extrudeur de votre imprimante (habituellement E, mais certaines imprimantes utilisent A)."
 
-#: src/libslic3r/PrintConfig.cpp:1893
+#: src/libslic3r/PrintConfig.cpp:2035
 msgid "Use this setting to rotate the support material pattern on the horizontal plane."
 msgstr "Utiliser ce réglage pour orienter le motif du support sur le plan horizontal."
 
-#: src/libslic3r/PrintConfig.cpp:2175
+#: src/libslic3r/PrintConfig.cpp:2318
 msgid "Use volumetric E"
 msgstr "E Volumétrique"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1171
+#: src/slic3r/GUI/DoubleSlider.cpp:1298
 msgid "used"
 msgstr "utilisé"
 
-#: src/slic3r/GUI/Plater.cpp:237
+#: src/slic3r/GUI/Plater.cpp:243
 msgid "Used Filament (g)"
 msgstr "Filament Utilisé (g)"
 
-#: src/slic3r/GUI/Plater.cpp:235 src/slic3r/GUI/Plater.cpp:1229
+#: src/slic3r/GUI/Plater.cpp:1141
+msgid "Used Filament (in)"
+msgstr "Filament utilisé (in)"
+
+#: src/slic3r/GUI/Plater.cpp:1153
+msgid "Used Filament (in³)"
+msgstr "Filament utilisé (in³)"
+
+#: src/slic3r/GUI/Plater.cpp:241 src/slic3r/GUI/Plater.cpp:1141
 msgid "Used Filament (m)"
 msgstr "Filament Utilisé (m)"
 
-#: src/slic3r/GUI/Plater.cpp:236
+#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1153
 msgid "Used Filament (mm³)"
 msgstr "Filament Utilisé (mm³)"
 
-#: src/slic3r/GUI/Plater.cpp:1191
+#: src/slic3r/GUI/Plater.cpp:1100
 msgid "Used Material (ml)"
 msgstr "Matériau Utilisé (ml)"
 
-#: src/slic3r/GUI/Plater.cpp:238
+#: src/slic3r/GUI/Plater.cpp:244
 msgid "Used Material (unit)"
 msgstr "Matériau Utilisé (unité)"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 src/libslic3r/PrintConfig.cpp:132
 msgid "User"
 msgstr "Utilisateur"
 
-#: src/slic3r/GUI/Preset.cpp:1168 src/slic3r/GUI/Preset.cpp:1288
-#: src/slic3r/GUI/PresetBundle.cpp:1677
+#: src/slic3r/GUI/PresetComboBoxes.cpp:230
+#: src/slic3r/GUI/PresetComboBoxes.cpp:778
+#: src/slic3r/GUI/PresetComboBoxes.cpp:934
 msgid "User presets"
 msgstr "Préréglages utilisateur"
 
-#: src/libslic3r/Zipper.cpp:90
+#: src/libslic3r/miniz_extension.cpp:149
 msgid "validation failed"
 msgstr "échec de la validation"
 
@@ -8714,31 +9969,31 @@ msgstr "La valeur est identique à la valeur du système"
 msgid "Value was changed and is not equal to the system value or the last saved preset"
 msgstr "La valeur a été changée et n'est pas égale à la valeur du système ou au dernier préréglage sauvegardé"
 
-#: src/slic3r/GUI/Tab.cpp:2202
+#: src/slic3r/GUI/Tab.cpp:2371
 msgid "Values in this column are for Normal mode"
 msgstr "Les valeurs de cette colonne sont pour le mode Normal"
 
-#: src/slic3r/GUI/Tab.cpp:2208
+#: src/slic3r/GUI/Tab.cpp:2377
 msgid "Values in this column are for Stealth mode"
 msgstr "Les valeurs de cette colonne sont pour le mode Silencieux"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:234 src/slic3r/GUI/GLCanvas3D.cpp:4573
+#: src/slic3r/GUI/GLCanvas3D.cpp:231 src/slic3r/GUI/GLCanvas3D.cpp:4978
 msgid "Variable layer height"
 msgstr "Hauteur de couche variable"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1709
+#: src/slic3r/GUI/GLCanvas3D.cpp:1786
 msgid "Variable layer height - Adaptive"
 msgstr "Hauteur de couche variable - Adaptatif"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:599
+#: src/slic3r/GUI/GLCanvas3D.cpp:565
 msgid "Variable layer height - Manual edit"
 msgstr "Hauteur de couche variable - Modification manuelle"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1701
+#: src/slic3r/GUI/GLCanvas3D.cpp:1778
 msgid "Variable layer height - Reset"
 msgstr "Hauteur de couche variable - Réinitialisation"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1717
+#: src/slic3r/GUI/GLCanvas3D.cpp:1794
 msgid "Variable layer height - Smooth all"
 msgstr "Hauteur de couche variable - Tout lisser"
 
@@ -8746,19 +10001,20 @@ msgstr "Hauteur de couche variable - Tout lisser"
 msgid "variants"
 msgstr "variantes"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:971
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1289
 msgid "vendor"
 msgstr "fabriquant"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:565
+#: src/slic3r/GUI/ConfigWizard.cpp:589
 msgid "Vendor:"
 msgstr "Fournisseur :"
 
-#: src/libslic3r/PrintConfig.cpp:928
+#: src/libslic3r/PrintConfig.cpp:972
 msgid "Verbose G-code"
 msgstr "G-code commenté"
 
-#: src/slic3r/GUI/AboutDialog.cpp:231 src/slic3r/GUI/MainFrame.cpp:64
+#: src/slic3r/GUI/AboutDialog.cpp:256 src/slic3r/GUI/GUI_App.cpp:239
+#: src/slic3r/GUI/MainFrame.cpp:164
 msgid "Version"
 msgstr "Version"
 
@@ -8766,24 +10022,36 @@ msgstr "Version"
 msgid "version"
 msgstr "version"
 
-#: src/slic3r/GUI/Tab.cpp:1053
+#: src/slic3r/GUI/Tab.cpp:1375
 msgid "Vertical shells"
 msgstr "Parois verticales"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:218
+#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
 msgid "View"
 msgstr "Vue"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:813
+#: src/slic3r/GUI/ConfigWizard.cpp:1172
 msgid "View mode"
 msgstr "Mode de vue"
 
-#: src/libslic3r/SLAPrintSteps.cpp:413 src/libslic3r/SLAPrintSteps.cpp:422
-#: src/libslic3r/SLAPrintSteps.cpp:461
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:666
+msgid ""
+"Visit \"Preferences\" and check \"%1%\"\n"
+"to be asked about unsaved changes again."
+msgstr ""
+"Accédez aux \"Préférences\" et cochez \"%1%\"\n"
+"pour être à nouveau interrogé sur les modifications non enregistrées."
+
+#: src/libslic3r/PrintConfig.cpp:3553
+msgid "Visualize an already sliced and saved G-code"
+msgstr "Visualisez un G-code déjà découpé et enregistré"
+
+#: src/libslic3r/SLAPrintSteps.cpp:411 src/libslic3r/SLAPrintSteps.cpp:420
+#: src/libslic3r/SLAPrintSteps.cpp:459
 msgid "Visualizing supports"
 msgstr "Visualisation des supports"
 
-#: src/slic3r/GUI/Plater.cpp:161
+#: src/slic3r/GUI/Plater.cpp:167
 msgid "Volume"
 msgstr "Volume"
 
@@ -8791,23 +10059,23 @@ msgstr "Volume"
 msgid "Volume to purge (mm³) when the filament is being"
 msgstr "Volume à purger (mm³) lorsque le filament est"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Volumes in Object reordered"
 msgstr "Volumes dans l'Objet réorganisés"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Volumetric"
 msgstr "Volumétrique"
 
-#: src/slic3r/GUI/Tab.cpp:1591
+#: src/slic3r/GUI/Tab.cpp:1930
 msgid "Volumetric flow hints not available"
 msgstr "Indications du débit volumétrique non disponible"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:226
+#: src/slic3r/GUI/GUI_Preview.cpp:280
 msgid "Volumetric flow rate"
 msgstr "Débit volumétrique"
 
-#: src/libslic3r/GCode/PreviewData.cpp:355
+#: src/slic3r/GUI/GCodeViewer.cpp:2240 src/libslic3r/GCode/PreviewData.cpp:360
 msgid "Volumetric flow rate (mm³/s)"
 msgstr "Débit volumétrique (mm³/s)"
 
@@ -8815,151 +10083,166 @@ msgstr "Débit volumétrique (mm³/s)"
 msgid "Volumetric speed"
 msgstr "Vitesse volumétrique"
 
-#: src/libslic3r/PrintConfig.cpp:2915
+#: src/libslic3r/PrintConfig.cpp:3079
 msgid "Wall thickness"
 msgstr "Épaisseur de la paroi"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1270 src/slic3r/GUI/GUI.cpp:251
-#: src/slic3r/GUI/Tab.cpp:3084 src/slic3r/GUI/WipeTowerDialog.cpp:45
-#: src/slic3r/GUI/WipeTowerDialog.cpp:366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1129 src/slic3r/GUI/GUI.cpp:256
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:478
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:502
+#: src/slic3r/GUI/WipeTowerDialog.cpp:45 src/slic3r/GUI/WipeTowerDialog.cpp:366
 msgid "Warning"
 msgstr "Alerte"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:431
+#: src/slic3r/GUI/NotificationManager.cpp:672
+#: src/slic3r/GUI/NotificationManager.cpp:687
+#: src/slic3r/GUI/NotificationManager.cpp:702
+msgid "WARNING:"
+msgstr "ATTENTION :"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:449
 msgid "Welcome"
 msgstr "Bienvenue"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:427
+#: src/slic3r/GUI/ConfigWizard.cpp:445
 #, c-format
 msgid "Welcome to the %s Configuration Assistant"
 msgstr "Bienvenue dans l'Assistant de Configuration de %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:429
+#: src/slic3r/GUI/ConfigWizard.cpp:447
 #, c-format
 msgid "Welcome to the %s Configuration Wizard"
 msgstr "Bienvenue dans l'Assistant de Configuration de %s"
 
-#: src/slic3r/GUI/Preferences.cpp:97
+#: src/slic3r/GUI/SavePresetDialog.cpp:310
+msgid "What would you like to do with \"%1%\" preset after saving?"
+msgstr "Que souhaitez-vous faire avec le préréglage de \"%1%\" après l'enregistrement ?"
+
+#: src/slic3r/GUI/Preferences.cpp:114
 msgid "When checked, the print and filament presets are shown in the preset editor even if they are marked as incompatible with the active printer"
 msgstr "Lorsqu'ils sont sélectionnés, les préréglages de l'imprimante et du filament sont visibles dans l'éditeur de préréglage même s'ils sont désignés comme incompatibles avec l'imprimante en cours d'utilisation"
 
-#: src/slic3r/GUI/PresetHints.cpp:224
+#: src/slic3r/GUI/Preferences.cpp:156
+msgid "When closing the application, always ask for unsaved changes"
+msgstr "Lors de la fermeture de l'application, toujours demander pour les modifications non enregistrées"
+
+#: src/slic3r/GUI/PresetHints.cpp:223
 msgid "when printing"
 msgstr "pendant l'impression des"
 
-#: src/libslic3r/PrintConfig.cpp:253
+#: src/libslic3r/PrintConfig.cpp:287
 msgid "When printing multi-material objects, this settings will make Slic3r to clip the overlapping object parts one by the other (2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc)."
 msgstr "Lorsque vous imprimez des objets multi-matériaux, ce réglage fera en sorte que Slic3r rattache ensemble les parties de l'objet qui se superposent (la 2e partie sera rattachée à la 1ere, la 3e partie sera rattachée à la 1ere et la 2e, etc...)."
 
-#: src/libslic3r/PrintConfig.cpp:305
+#: src/libslic3r/PrintConfig.cpp:339
 msgid "When printing multiple objects or copies, this feature will complete each object before moving onto next one (and starting it from its bottom layer). This feature is useful to avoid the risk of ruined prints. Slic3r should warn and prevent you from extruder collisions, but beware."
 msgstr "Lorsque vous imprimez plusieurs objets ou copies, ce réglage permet de terminer un objet avant de passer au suivant (en repartant de sa première couche). Cette fonction est utile pour éviter les risques d'impressions gâchées. Slic3r doit vous avertir et éviter les collisions entre les objets et l'extrudeur, mais soyez vigilant."
 
-#: src/libslic3r/PrintConfig.cpp:891
+#: src/libslic3r/PrintConfig.cpp:933
 msgid "When printing with very low layer heights, you might still want to print a thicker bottom layer to improve adhesion and tolerance for non perfect build plates. This can be expressed as an absolute value or as a percentage (for example: 150%) over the default layer height."
 msgstr "Lors d'une impression avec de très faibles épaisseurs de couche, vous pouvez choisir d'imprimer une première couche plus épaisse pour améliorer l'adhérence et la tolérance aux plateaux imparfaits. Ce réglage peut être exprimé comme une valeur absolue ou un pourcentage (par exemple 150%) par rapport à l'épaisseur de couche par défaut."
 
-#: src/libslic3r/PrintConfig.cpp:1553
+#: src/libslic3r/PrintConfig.cpp:1661
 msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Lorsque la rétractation est déclenchée avant un changement d'outil, le filament est retiré de la longueur indiquée (la longueur est mesurée sur le filament brut, avant qu'il entre dans l'extrudeur)."
 
-#: src/libslic3r/PrintConfig.cpp:1545
+#: src/libslic3r/PrintConfig.cpp:1653
 msgid "When retraction is triggered, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Lorsque la rétractation est déclenchée, le filament est tiré en arrière de la longueur indiquée (la longueur est mesurée sur le filament brut, avant qu'il entre dans l'extrudeur)."
 
-#: src/libslic3r/PrintConfig.cpp:1391
+#: src/libslic3r/PrintConfig.cpp:1499
 msgid "When set to zero, the distance the filament is moved from parking position during load is exactly the same as it was moved back during unload. When positive, it is loaded further,  if negative, the loading move is shorter than unloading."
 msgstr "Lorsqu'elle est réglée sur zéro, la distance de laquelle le filament est déplacé depuis la position d'attente pendant le chargement est exactement la même que lors de son déchargement. Lorsqu'elle est positive, il est chargé davantage, si elle est négative, le déplacement de chargement est plus court que le déchargement."
 
-#: src/libslic3r/PrintConfig.cpp:1238
+#: src/libslic3r/PrintConfig.cpp:1346
 msgid "When setting other speed settings to 0 Slic3r will autocalculate the optimal speed in order to keep constant extruder pressure. This experimental setting is used to set the highest print speed you want to allow."
 msgstr "Lorsque vous réglez les autres vitesses à 0, Slic3r calculera automatiquement la vitesse optimale de façon à garder une pression constante dans l'extrudeur. Cette fonction expérimentale est utilisée pour régler la plus haute vitesse que vous souhaitez autoriser."
 
-#: src/libslic3r/PrintConfig.cpp:1597
+#: src/libslic3r/PrintConfig.cpp:1705
 msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament."
 msgstr "Lorsque la rétractation est compensée après un changement d'outil, l'extrudeur exprimera cette quantité de filament en plus."
 
-#: src/libslic3r/PrintConfig.cpp:1589
+#: src/libslic3r/PrintConfig.cpp:1697
 msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed."
 msgstr "Lorsque la rétractation est compensée après un déplacement, l'extruder exprimera cette quantité de filament en plus. Ce réglage est rarement nécessaire."
 
-#: src/slic3r/GUI/Tab.cpp:3263
+#: src/slic3r/GUI/Tab.cpp:3700
 msgid "WHITE BULLET"
 msgstr "PUCE BLANCHE"
 
-#: src/slic3r/GUI/Tab.cpp:3285
+#: src/slic3r/GUI/Tab.cpp:3722
 msgid "WHITE BULLET icon indicates a non system (or non default) preset."
 msgstr "L'icône en forme de PUCE BLANCHE indique un préréglage non-système (ou non par défaut)."
 
-#: src/slic3r/GUI/Tab.cpp:3288
+#: src/slic3r/GUI/Tab.cpp:3725
 msgid "WHITE BULLET icon indicates that the settings are the same as in the last saved preset for the current option group."
 msgstr "L'icône en forme de PUCE BLANCHE indique que les réglages sont identiques au dernier préréglage sauvegardé pour le groupe d'options actuel."
 
-#: src/slic3r/GUI/Tab.cpp:3303
+#: src/slic3r/GUI/Tab.cpp:3740
 msgid "WHITE BULLET icon indicates that the value is the same as in the last saved preset."
 msgstr "L'icône PUCE BLANCHE indique que la valeur est la même que pour le dernier préréglage sauvegardé."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:223 src/libslic3r/PrintConfig.cpp:2238
+#: src/slic3r/GUI/GUI_Preview.cpp:277 src/libslic3r/PrintConfig.cpp:2381
 msgid "Width"
 msgstr "Largeur"
 
-#: src/libslic3r/GCode/PreviewData.cpp:349
+#: src/slic3r/GUI/GCodeViewer.cpp:2237 src/libslic3r/GCode/PreviewData.cpp:354
 msgid "Width (mm)"
 msgstr "Largeur (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:2640
+#: src/libslic3r/PrintConfig.cpp:2783
 msgid "Width from the back sphere center to the front sphere center"
 msgstr "Largeur depuis le centre arrière de la sphère jusqu'au centre avant de la sphère"
 
-#: src/libslic3r/PrintConfig.cpp:2239
+#: src/libslic3r/PrintConfig.cpp:2382
 msgid "Width of a wipe tower"
 msgstr "Largeur d'une tour de nettoyage"
 
-#: src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3055
 msgid "Width of the connector sticks which connect the object and the generated pad."
 msgstr "Largeur des bâtonnets de connexion qui connectent l'objet et le socle généré."
 
-#: src/libslic3r/PrintConfig.cpp:2354
+#: src/libslic3r/PrintConfig.cpp:2497
 msgid "Width of the display"
 msgstr "Largeur de l'affichage"
 
-#: src/slic3r/GUI/PresetHints.cpp:48
+#: src/slic3r/GUI/PresetHints.cpp:47
 msgid "will always run at %1%%%"
 msgstr "fonctionnera toujours à %1%%%"
 
-#: src/slic3r/GUI/PresetHints.cpp:55
+#: src/slic3r/GUI/PresetHints.cpp:54
 msgid "will be turned off."
 msgstr "sera désactivé."
 
-#: src/libslic3r/PrintConfig.cpp:2441
+#: src/libslic3r/PrintConfig.cpp:2584
 msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
 msgstr "Va augmenter ou diminuer les polygones 2D découpés en fonction du signe de la correction."
 
-#: src/libslic3r/PrintConfig.cpp:2261
+#: src/libslic3r/PrintConfig.cpp:2404
 msgid "Wipe into this object"
 msgstr "Nettoyer dans cet objet"
 
-#: src/libslic3r/PrintConfig.cpp:2253
+#: src/libslic3r/PrintConfig.cpp:2396
 msgid "Wipe into this object's infill"
 msgstr "Nettoyer dans le remplissage de cet objet"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101
-#: src/slic3r/GUI/GUI_ObjectList.cpp:619 src/libslic3r/PrintConfig.cpp:2252
-#: src/libslic3r/PrintConfig.cpp:2260
+#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:99
+#: src/slic3r/GUI/GUI_ObjectList.cpp:658 src/libslic3r/PrintConfig.cpp:2395
+#: src/libslic3r/PrintConfig.cpp:2403
 msgid "Wipe options"
 msgstr "Options de nettoyage"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:248 src/slic3r/GUI/Tab.cpp:1191
-#: src/libslic3r/ExtrusionEntity.cpp:321
+#: src/slic3r/GUI/GUI_Preview.cpp:313 src/slic3r/GUI/Tab.cpp:1521
+#: src/libslic3r/ExtrusionEntity.cpp:326 src/libslic3r/ExtrusionEntity.cpp:360
 msgid "Wipe tower"
 msgstr "Tour de nettoyage"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "wipe tower"
 msgstr "tour de nettoyage"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:120
-#: src/slic3r/GUI/ConfigManipulation.cpp:140
+#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:139
 msgid "Wipe Tower"
 msgstr "Tour de Nettoyage"
 
@@ -8967,36 +10250,36 @@ msgstr "Tour de Nettoyage"
 msgid "Wipe tower - Purging volume adjustment"
 msgstr "Tour de nettoyage - Ajustement du volume de purge"
 
-#: src/slic3r/GUI/Tab.cpp:1488
+#: src/slic3r/GUI/Tab.cpp:1834
 msgid "Wipe tower parameters"
 msgstr "Paramètres de la tour de nettoyage"
 
-#: src/libslic3r/PrintConfig.cpp:2245
+#: src/libslic3r/PrintConfig.cpp:2388
 msgid "Wipe tower rotation angle"
 msgstr "Angle de rotation de la tour de nettoyage"
 
-#: src/libslic3r/PrintConfig.cpp:2246
+#: src/libslic3r/PrintConfig.cpp:2389
 msgid "Wipe tower rotation angle with respect to x-axis."
 msgstr "Angle de rotation de la tour de nettoyage par rapport à l'axe X."
 
-#: src/libslic3r/PrintConfig.cpp:2193
+#: src/libslic3r/PrintConfig.cpp:2336
 msgid "Wipe while retracting"
 msgstr "Nettoyer lors des rétractions"
 
-#: src/slic3r/GUI/PresetHints.cpp:225
+#: src/slic3r/GUI/PresetHints.cpp:224
 msgid "with a volumetric rate"
 msgstr "avec un débit volumétrique"
 
-#: src/libslic3r/PrintConfig.cpp:1530
+#: src/libslic3r/PrintConfig.cpp:1638
 msgid "With bowden extruders, it may be wise to do some amount of quick retract before doing the wipe movement."
 msgstr "Avec les extrudeurs bowden, il est conseillé d'effectuer une rétractation rapide avant de réaliser le mouvement de nettoyage."
 
-#: src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2198
 msgid "With sheath around the support"
 msgstr "Avec une enveloppe autour du support"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:62
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:105
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:68
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:111
 msgid "World coordinates"
 msgstr "Les coordonnées mondiales"
 
@@ -9014,84 +10297,100 @@ msgstr ""
 "\n"
 "Ensembles de configuration mis à jour :"
 
-#: src/libslic3r/Zipper.cpp:92
+#: src/libslic3r/miniz_extension.cpp:151
 msgid "write calledback failed"
 msgstr "échec de l'écriture du rappel"
 
-#: src/libslic3r/PrintConfig.cpp:3382
+#: src/libslic3r/PrintConfig.cpp:3581
 msgid "Write information about the model to the console."
 msgstr "Rédiger des informations au sujet du modèle en direction de la console."
 
-#: src/slic3r/Utils/Duet.cpp:131
+#: src/slic3r/Utils/Duet.cpp:133
 msgid "Wrong password"
 msgstr "Mauvais mot de passe"
 
-#: src/libslic3r/PrintConfig.cpp:2225
+#: src/libslic3r/PrintConfig.cpp:2368
 msgid "X coordinate of the left front corner of a wipe tower"
 msgstr "Coordonnée X du coin avant gauche d'une tour de nettoyage"
 
-#: src/libslic3r/PrintConfig.cpp:1879
+#: src/libslic3r/PrintConfig.cpp:2021
 msgid "XY separation between an object and its support"
 msgstr "Séparation XY entre un objet et ses supports"
 
-#: src/libslic3r/PrintConfig.cpp:1881
+#: src/libslic3r/PrintConfig.cpp:2023
 msgid "XY separation between an object and its support. If expressed as percentage (for example 50%), it will be calculated over external perimeter width."
 msgstr "Séparation XY entre un objet et ses supports. Si la valeur est exprimée en pourcentage (par exemple 50%), elle sera calculée à partir de la largeur du périmètre extérieur."
 
-#: src/libslic3r/PrintConfig.cpp:2275
+#: src/libslic3r/PrintConfig.cpp:2418
 msgid "XY Size Compensation"
 msgstr "Compensation de Taille XY"
 
-#: src/libslic3r/PrintConfig.cpp:2232
+#: src/libslic3r/PrintConfig.cpp:2375
 msgid "Y coordinate of the left front corner of a wipe tower"
 msgstr "Coordonnée Y du coin avant gauche d'une tour de nettoyage"
 
-#: src/slic3r/GUI/Plater.cpp:1170
+#: src/slic3r/GUI/Plater.cpp:1079
 msgid "Yes"
 msgstr "Oui"
 
-#: src/libslic3r/PrintConfig.cpp:1317
+#: src/slic3r/GUI/Plater.cpp:1405
+msgid "You can open only one .gcode file at a time."
+msgstr "Vous ne pouvez ouvrir qu'un seul fichier .gcode à la fois."
+
+#: src/libslic3r/PrintConfig.cpp:1425
 msgid "You can put here your personal notes. This text will be added to the G-code header comments."
 msgstr "Vous pouvez inscrire ici vos commentaires personnels. Ce texte sera ajouté au commentaire en entête du G-Code."
 
-#: src/libslic3r/PrintConfig.cpp:589
+#: src/libslic3r/PrintConfig.cpp:625
 msgid "You can put your notes regarding the filament here."
 msgstr "Vous pouvez saisir vos remarques concernant le filament ici."
 
-#: src/libslic3r/PrintConfig.cpp:1473
+#: src/libslic3r/PrintConfig.cpp:1581
 msgid "You can put your notes regarding the printer here."
 msgstr "Vous pouvez saisir ici vos observations concernant l'imprimante."
 
-#: src/libslic3r/PrintConfig.cpp:2579
+#: src/libslic3r/PrintConfig.cpp:2722
 msgid "You can put your notes regarding the SLA print material here."
 msgstr "Vous pouvez mettre ici vos annotations concernant le matériau d'impression SLA."
 
-#: src/libslic3r/PrintConfig.cpp:360
+#: src/libslic3r/PrintConfig.cpp:394
 msgid "You can set this to a positive value to disable fan at all during the first layers, so that it does not make adhesion worse."
 msgstr "Vous pouvez régler ce paramètre sur une valeur positive pour désactiver complètement le ventilateur pendant les premières couches, afin de ne pas rendre l'adhérence plus difficile."
 
-#: src/libslic3r/PrintConfig.cpp:1364
+#: src/libslic3r/PrintConfig.cpp:1472
 msgid "You can use all configuration options as variables inside this template. For example: [layer_height], [fill_density] etc. You can also use [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename], [input_filename_base]."
 msgstr "Vous pouvez utiliser toutes les options de configuration comme variables dans ce modèle. Par exemple :  [layer_height], [fill_density] etc. Vous pouvez aussi utiliser [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename], [input_filename_base]."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3546
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4009
 msgid "You can't change a type of the last solid part of the object."
 msgstr "Vous ne pouvez pas changer un type de la dernière partie solide de l'objet."
 
-#: src/slic3r/GUI/Plater.cpp:2390
+#: src/slic3r/GUI/Plater.cpp:2352
 #, c-format
 msgid "You can't to add the object(s) from %s because of one or some of them is(are) multi-part"
 msgstr "Vous ne pouvez pas ajouter l'objet (les objets) depuis %s car l'un d'entre eux est en plusieurs parties"
 
-#: src/slic3r/GUI/Plater.cpp:2311
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2254
 msgid "You cannot load SLA project with a multi-part object on the bed"
 msgstr "Vous ne pouvez pas charger un projet SLA avec un objet en plusieurs parties sur le plateau"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:578
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:625
 msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
 msgstr "Vous ne pouvez pas utiliser un mode de redimensionnement non-uniforme pour une sélection d'objets/de parties multiples"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
+#: src/slic3r/GUI/SavePresetDialog.cpp:277
+msgid ""
+"You have selected physical printer \"%1%\" \n"
+"with related printer preset \"%2%\""
+msgstr ""
+"Vous avez sélectionné l'imprimante physique \"%1%\"\n"
+"avec le préréglage d'imprimante associé \"%2%\""
+
+#: src/slic3r/GUI/GUI_App.cpp:1078
+msgid "You have the following presets with saved options for \"Print Host upload\""
+msgstr "Vous disposez des préréglages suivants avec des options enregistrées pour le \"Téléchargement vers l'hôte d'impression\""
+
+#: src/slic3r/GUI/OpenGLManager.cpp:262
 msgid "You may need to update your graphics card driver."
 msgstr "Vous avez peut-être besoin de mettre à jour le pilote de votre carte graphique."
 
@@ -9099,37 +10398,49 @@ msgstr "Vous avez peut-être besoin de mettre à jour le pilote de votre carte g
 msgid "You must install a configuration update."
 msgstr "Il est nécessaire d'installer une mise à niveau de configuration."
 
-#: src/slic3r/GUI/Preferences.cpp:172
+#: src/slic3r/GUI/Preferences.cpp:299
 #, c-format
 msgid "You need to restart %s to make the changes effective."
 msgstr "Vous devez redémarrer %s afin que les modifications soient appliquées."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3421
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
+msgid "You should to change a name of your printer device. It can't be saved."
+msgstr "Vous devez changer le nom de votre imprimante. Il ne peut pas être enregistré."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
 #, c-format
 msgid "You started your selection with %s Item."
 msgstr "Vous avez commencé votre sélection avec l'item %s."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1902
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:664
+msgid "You will not be asked about the unsaved changes the next time you close PrusaSlicer."
+msgstr "Vous ne serez pas interrogé sur les modifications non enregistrées la prochaine fois que vous fermerez PrusaSlicer."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:665
+msgid "You will not be asked about the unsaved changes the next time you switch a preset."
+msgstr "Vous ne serez pas interrogé sur les modifications non enregistrées la prochaine fois que vous changerez de préréglage."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:2121
 msgid "Your current changes will delete all saved color changes."
 msgstr "Vos changements actuels supprimeront toutes les changements de couleur enregistrés."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1923
+#: src/slic3r/GUI/DoubleSlider.cpp:2141
 msgid "Your current changes will delete all saved extruder (tool) changes."
 msgstr "Vos changements actuels supprimeront toutes les changement enregistrés de l'extrudeur (outil)."
 
-#: src/slic3r/GUI/MainFrame.cpp:911
+#: src/slic3r/GUI/MainFrame.cpp:1612
 msgid "Your file was repaired."
 msgstr "Votre fichier a été réparé."
 
-#: src/slic3r/GUI/Plater.cpp:2528
+#: src/slic3r/GUI/Plater.cpp:2490
 msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
 msgstr "Votre objet semble être trop grand, il a donc été automatiquement réduit afin de l'adapter à votre plateau d'impression."
 
-#: src/libslic3r/PrintConfig.cpp:2285
+#: src/libslic3r/PrintConfig.cpp:2428
 msgid "Z offset"
 msgstr "Décalage Z"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:60
+#: src/slic3r/GUI/ConfigManipulation.cpp:59
 msgid ""
 "Zero first layer height is not valid.\n"
 "\n"
@@ -9139,7 +10450,7 @@ msgstr ""
 "\n"
 "La hauteur de la première couche sera réinitialisée à 0,01."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/ConfigManipulation.cpp:47
 msgid ""
 "Zero layer height is not valid.\n"
 "\n"
@@ -9149,28 +10460,28 @@ msgstr ""
 "\n"
 "La hauteur de la couche sera réinitialisée à 0,01."
 
-#: src/libslic3r/PrintConfig.cpp:2667
+#: src/libslic3r/PrintConfig.cpp:2831
 msgid "Zig-Zag"
 msgstr "Zig-Zag"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:308
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:294
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Zoom"
 msgstr "Zoom"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:183
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
 msgid "Zoom in"
 msgstr "Zoom avant"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:184
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
 msgid "Zoom out"
 msgstr "Zoom arrière"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
 msgid "Zoom to Bed"
 msgstr "Zoomer sur le Lit"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
 msgid ""
 "Zoom to selected object\n"
 "or all objects in scene, if none selected"
@@ -9178,14 +10489,16 @@ msgstr ""
 "Zoomer sur l'objet sélectionné\n"
 "ou sur tous les objets sur la scène, si aucun n'est sélectionné"
 
-#: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780
-#: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650
-#: src/libslic3r/PrintConfig.cpp:1894 src/libslic3r/PrintConfig.cpp:2049
-#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2727
-#: src/libslic3r/PrintConfig.cpp:2848
+#: src/libslic3r/PrintConfig.cpp:241 src/libslic3r/PrintConfig.cpp:816
+#: src/libslic3r/PrintConfig.cpp:1748 src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:2036 src/libslic3r/PrintConfig.cpp:2191
+#: src/libslic3r/PrintConfig.cpp:2390 src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3012
 msgid "°"
 msgstr "°"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1038 src/slic3r/GUI/ConfigWizard.cpp:1052
+#: src/slic3r/GUI/ConfigWizard.cpp:1404 src/slic3r/GUI/ConfigWizard.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:180 src/libslic3r/PrintConfig.cpp:912
+#: src/libslic3r/PrintConfig.cpp:956 src/libslic3r/PrintConfig.cpp:2209
 msgid "°C"
 msgstr "°C"
diff --git a/resources/localization/it/PrusaSlicer.mo b/resources/localization/it/PrusaSlicer.mo
index cb07f0949ba50e4851654e912d497736ce820b56..b8903a0f619e4a9876cd24df094e0b07bce4dfce 100644
GIT binary patch
delta 79799
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
N=T_9)|HbgD{}0M2ERp~K

delta 51801
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%0AGjl3~VMNU?=!L2H6*&
z6?kF)E@Y?CJ_Va)z!{J~s2&z}FQ`4y3qpYp$_hXQsb~*Ej(-eeIf1A64LB0~3LV&v
zfc1e2RwBWjQV*eIsYo!sl<X_mq`>|sv<g~4KNc}3s6BBjumFlJ5G;mrB@&H+bCgcD
z2RaEHhN7InMmn%MPb+v^7yTyqcj2=a{AH~>u8XVzd4;gKr2^>opd(;YWCszc1AGX@
zQeZ5chG@s#y4?ZeaVV@OihK(`ub_xWfM0+wflBZ#1aCsn9e#;g(OVaz*z&Ns1OC~t
zUlIO(5Ki`B(hw{S^g3P4Wbk#=IBD30fIT5Q3Y$}q?bL}S=yb?#t3u&h12(VdgioP;
z3F51ew};#b{&VmOHiN#a_Qa+-kP;^03Gbraj<z%uf&UEwb|X<eC_M1l1b#V^_JS+{
zZ3gfs=zf50C+LQwt%nB)q8$hOF-TY&@_&Ka6CMVhfZ{_KDA))5G(=(5!#NB1HFz(A
zEJTuM&<U`giKl9*5<vD5u&(ykuAv5NJ_O(3^8?tdSBQc+d=(VUSJlH2|5ZQ;Cd1$m
z5<U+8CA6!<VoO6LGU0R-`X-Rg13d|C1Z;jnVOK%lMw})ntXKyhsoSm4-Gbd2=-R{o
z=lg{gS?VKjFBrr?cnE=-YNZYI6v$r%wgf!`&I&$2VNDSDJOU1etS;JQ$nQY*IP6@|
z=Yakcx<s^v(9MCo1O`Fg5;^w64$qIBPY0e2qfMx8i00o0-32BG(N2Nxb2!X`?gQX)
z@SSzgMY>%JyAr61#7j}wC<ywX{S8<G%RpBKE`&|!oiH739pG!I>UAWs0?Q(30x%K1
z^BN4t>m)unawM9soB_F7{u<h+p{oMfG3Xir*C9?OWbr6?C*<j%6>I>n;2iQ54bj~_
z4??#N)=0P62vAk)?Qq@++yTdG&<_Fb(*c`no3)T-YuR3v0dNJfHPAaiTR|&$P8a{9
z`UAfGw6jvA0;`qcd!VRsc-lz_`WlKUf!*NyA&3M%fF61dx}7>`dDu7CMGWC3|L)|X
zmaNrL79mtBWbXi1Bg+@?7Ko(aYgAx>uBrK3@QH!VNZ>3T=Mg;0r=Yt6>%xwZ^)X$+
z`|y7Yw(Ed%;9Hc1j}iLW`@rx67$j?B8v?um`U2XuaOe-ZEiemqeNfDokgZWIWU)w;
z2j8lQ6$4o!+NWTb36wwuQ-L>N+XgwK!?GevX9(sa!DR@qfu0S;-=LSmc&+jRbVTq2
zy2yn{(hWBI(JE*R-y`t*2>dQ!PuL#TwhIua8j8$ByC1gYV7m?cK+q|$t*3tO{5_m+
z!C@tg{?<WTBZz|Mz<&?j9_U)bt}OV^!CwrkL%#yqQ2S_6=-+QC`b8vq7d~-F`Vwdb
zi75OpU|;Z$qFt(vWJeIZ5{%B380moVNVF;J7y1lB?tpAL+5mhM<RVBnv{g~?7l?5d
z@eTs#fUXEz1@mFk8T|QDh3?Y+YLB=40;ReD2NVPFgYO5YpI{UXoB{e}=vN?cKJ-gL
zFHm+m!5Zl2>f)9EcpdyW>=m?z?sLQ}fw!UeLf1guJC;GY9Jm7535s5*@+R8y+F3ar
zglr4&X(Y-=(p_3N8nSGlf+YBNKrc*#%?)67SZt{d`x=nn&_yMHHc(6)cvF4vd>F((
z2(n5)4S`+=gEQJ;1?1m@Ux}cFz~_JpilF}vm;v2Ev~wZPfN!&~+Hwqj0c|@S#VN3%
z@M)k=z~`_kJk<YaJ1R!QC^%)pa14ynK(~a02m0T^Z$r?Qu&W6E4ETEBHzN5pU<uTP
ztQB;XVKW<TX*dd|qwc*yh+R|`%o3gaXV96TPwA>lJI>Hf+YoS!){jDAKZ4&1>`<xz
z<yRT}0iC=)eBVIa6_D3J`y%`U&_P`C{NYsXQTaq2Xao$t)!o(@GCOdOPCOOuD!4p}
zV0|F}5$%WIM*#bRE)6$z;S~_CIp{LTQ34y)8OsWXeL#m!tdwgs{TvFotcy6N+mp~e
zq@U~s&@**W5olK<_>ZtVju^9`dsN%0n0uj{4cTGXy@NuYhOB;(uEq~xBV`5Hs}qG7
z&_6;q7k0NmPe6d#P#BOU0X+!xFmwr!m%~Hcglqxqyx<=Je*(OMHfVQ2z8!4=d<H<a
z3mEGEXP_7ehY4_qhj5H83S{W7(|!YoXF>Oa&7aU&@l*pLQ{dNaQ^+O&D<IZOuzLcr
zeuFLw%WW~*SK)UHvg6Q|K%%;LPSS#AI*?M<MGyt^fipuCP9X@cpbP?T)%x$z79j8x
z&9{S1G?FN2fi?&7JkT8>PlBBbbOW8|chJwMJ625y(!jW3#Nkv6h6>IBqkwZEYl@_s
zb)oyAKMQ&Q<mG{jkmR=ZF~R=={ybuqL0f?CKCN{Rz~>U=SM-ClgM6sEW4#B(S}4ZC
z`KmTn1sLF4KwllG;Bnw7IM;(*{UBlyd~U+NF51s@&_cAUq1ywKV`$GocR<-|V5&zT
zFM*;BP#%HPvruG0x&-tjBuvsyOAw$0dP4S*<_9BjIRx^-_AmI>fYC->=y$sP3^qRi
zOCUiLi*;<{0sXS9hX9Wu*tZBC2ijt^Flg~A)`+&RV$EtA1va1I3)t<Z&zBu=I;R^x
zr^9Y$CDDc)9vA$4_jAQlzldXHjf7EVrqAIwi+AsNG$J_qpeK0rVC!J@uf8v?{Pk5F
zO?wXRLkBjpYQea}Lu37pe4F32^t6LOlV$TLqWI|HS}fXS78o9{!{s-<#g~p;V8uTi
zb+TagcSi8d?}~#($2%AAJN_CE{(dSW=sDdw`0nXS!MmrM2XCKF3XVO~vUtv!c`Uf_
z-0k4*^K;Ak{ie(BaJ%A*zxh6%6~|rJ!irB_46x!kKOJPj3coa{lA4y<qD^bVo@?5t
z7}++5)66PPyWCv_m;B}}PPw{_1%JPGGI;Cv3BiZ1Hwr#;{mEeBA3eC+8(jZK&EPkG
zbO|=NVH6L)v5N(hZ`OJs93ZK<-_3XyV-&c(Q+$Tq?e&^=zjJzU-d`UEPu<!V;dVM)
zIl&6I6N_*By^aSj-Hs17zFWKa>fH@YR%UD;lh-&i8D(2pTe-=~Mlq@$$qtk?eWu@N
z(#Y3T9*<-bIi;0l7ioAD>qMKQ*dh6TG`qv;qYA8Xyxr!_!ZX=iIi}CBxj?(o53Ya-
zW_p2bdUrZof$fsJDzXb!+EtaUra(2;lGasYn`u@o`$VQyXWuYtTa)dOLu;{qoYvK0
zJ?Ksy)<SlRW22dTzb<RSsY*PXMM?G9XH=yD8%~oOu#xgW12%)vQ;pax*)xGvWD%iG
zm3<qtW2{V`JIiz?B_+vDO<5mSRh5=vW*H;QJdf$M`2$|lM}b7vJI3(e7a7@ZFBvo0
z{0i9^pCn7~X?|}Y%k&0^{n(#o&18wu_hmkLIFU7GWHe`w$<57~U@|6&y~pV6gKUr-
z)RM(Ad8ic|C&+%0H<f{QtbkKQNA@Va(~(W8<aPVi#O&)R%ySz)yUj@>li5zH*O{%5
z2RgF{1^wBLWjD9mTz1omxsqh*=XN^X1sG5x%k4sO_jx@TWLkHYFXZhM=8B{x1K0xT
z9mMh;pu-ugp<FhCt+G=8F{}=~For!#?n)w-d}CQ#IyIKX)8KJz1Z^J2y2WOh(^QV!
zP&V|KJ99E76<r<2?9w@&IT)Rsz)U&nA=Zx3)`_eeb)CdA<?cz0@hZ8dBPZ9NY#C&m
zZh8%`nie$mNmiB4WwLQJ!_E@RKxyWft}HrjXMa@egMPLQa@(>DMfqrd7Hclsn`||s
zf3n%P)W*R)@_h%}6|vdFwnxyu06RwS<+A`e3fONla~ezM^hF{2noc~-YRlR)SWi~o
zk8upRvXU)B+<ud86|v9h>SHXWmeI>$%QLaum8P)JX&PBtAUDrsjjZzg)2x8eThFlZ
zl~a2fcGK&3WIOB_Cj;|=UU`<K$Z~VoO-ALOV}@+^9E<1l+I-fVuFhvmX!-LjiE6yS
zo~BP;V3{=VMK(l!^dkG3l_^<HbY%ha(p#Nawep6;W!xKl8n}?PX^lx>8cj;eon}+R
zjeZQxl~Ss(plKAH?8KUqe<2&%(Pi@(nbVDSjs6wbX-2`{j~S-*t@85j8|1n3O|lZp
zp{c|M(g9-gX!0Vk7Z$Np>bjVXlAkSR5iH8#@&wSS7$MrWgsrFDFS9gCS<043v5Yli
zG-NruPUBaw_OxgP>n{IT!RA<L{p+llX0Bqj=<+I-L8Df)3Xxf6KK68)u$mp0{nxMx
zEcomB8Z!S4wui-FsvADj>##WukK60_QJ1xBvfR9ur8644j-8jo*0VxRUv6aa^6Eym
zfYIJ}*hETBW^vU};r-skj7nF1Nzb2R)u{U>wu8zSvp%%4n6;DFirF4(LTKB^G`FPR
zPgt5Zd>+%xlKg!(x1xM&H%npkz#evlChlXgWc?Boy33cWhMfK-`<TfQ`<R`{z5ChY
zf+l{=Hpph*ux}adILxZcqlZ~TPPLD+MlCaKfh-JXwvmyZ@?fb4Rhv%9dq{1cE-W{^
zNs?s8qpZgRo&5oyB^`T3z?Y2Hv^o8`Xx$#e<~PF2&5|B|YsQ1{sID_ooNoIR(@Sm6
zvB$dSnpj=gUhK>Fru#j^kj`VeOh5KSB>lIdz>($8m21y2!Kv<xEH<_zzQ^Ho+Po#<
z<g4GaNsN*%usqsu0UP(-3v4-;#Xqq>ta8g0HlVC*d{aqI-(q8#%)HHF*uuN);U?IF
zO~21@y9|FWme{@h&2P)}83m@-G_Z?f1ycWi*qsHB@u>GQIpcBx=gC5fNWP1aD8sAE
z;xc?r9QA9=6XlWwUaP#^-i9AQ$sM>?1njvK?7%z7s~z~ujH)K{cjdKYzL|BwDCp6@
z-|3eB=h)DJE<Bblb>V5`?8;kI$-{nw*IrJk0}LHL%X+rRaCueVhDOw9$#D5>`Pfra
z!!OKx{IGCO$c0@wx_W(gUYjm==L2PG58jl?mwNJBjLP)l$K@}*_%n<)_Tls8!+m+p
za`NMJzCzHAQT#<ZFq$`(%g69&P8-MZ1{AXZd&5`b_+9E3$ztg8c-~F+pTPfS)PEw6
zqZtcW136<NpU-J{Ca;p}@EI<*9}_UogQ<{-t*F4^&kavZe7e=@xBM?7(<|+nya%V%
zS^TJ+W%3bhXs*}hGkbbGMiWnnw0S&9$j~%O9sbfBII(0Q875Nb+~CCwuwm45oDRd5
zljCrEUD&VDvFKJK*YEd)PKwnHygt-B+^w8SdfXj4Cmxc^a(N1iGSVGTtCOOvJehZk
z<O!)%cLlFQPkMMR{o~=u)O#wwB{RIdgP=PBQIA#!`1IJGesy5P|2Kigt&WQ!Le9_U
zi&!O_;R?9(ZHCWpLm%PTC~HsSxm>O;<fj>}n891nr2<}#?#$q)DC$v+U*4mf392}g
zPog(w^0rkna_}z4vpMk&a^b=A9mzD|3EnmQaqJ1+Qbx_f+?2^r@wSX!f11A<jap1s
zA=aiDFYnIgQ<!}DSze9HZFBioOdgoW>vKBv0&hs$U*t9A$RPh#PzU0Z<x%2$nfz!m
zk70Cc3AeR(c<pZ0zm`5W^fwOIQ;aOr=l8k|9El7Y_C)l((`I0I!7gk`g@xT_&~mS+
zL5E)EPteSzymr+zhu?+)a>Ey+W#l{19khNakHagY>N4Jn($&Y}WxVN{1Isw4+bej}
zsB9aa+iy#<q|(G)qLJ*rl2>B1ZY7VZqs9<%?sck>9SA+H>R@{56~3KLzRI`DZLjev
zf}UT^<LTGcyjtB{Tgb~{4|r{%`c(|O*Wt&}&eomYS&b>KtfhYqzsBUHH+ce=iR<__
zMt`s88PdIhuVQQv?U*I7nZM2VR}U{jOm#EM%yzic1PUF2%f5rnL|!e%QlvKT@l;y*
z9=|L1ZRVo{HQ&m+wCL@0<T+ew;$qQ+cPyOp4Kp;SaTZn@O!|OpYQXGHIa~RDIeHs!
z5K(rR+H`S(HtEeBd?)!n<{f46$2^kJ`A_)I^6XCDic|b9?rCtZgH*5M!PV)?k>_!k
zIW_|;1cTwA4|egP5t$D3GueLNRps)}`4}FF#fNdET6=g3x%OZm{B#fB$mEK>{1Hy0
z5AY9Y|3Ur-UHyuWqM={&hp5swm_{eR=C84+ESr&#f`b%ZrC%Q6bL7&)d?+g)nv1x>
zghrIMf6EOizU2`-Ds<#_y49h($uT~YC6qdBhh|G-HQNF{H~IrdFFc6HVRO0Z&F^@>
zqWiWs<Gz`im=4%^9XKV29y`fMH;w#&``<f8o(<jXRC`5e2H!u@+l(yC2Q3cIvF57h
z+@KANhYzD{GYU;={TJo|{)$s9_4}1q92q+7sC~&D@Z;>0WceTU>G9BaS1f8Q@NmgV
zM*n}Mq85LNn)kBQjP9-b!(kaggU*N=vdwYyFyX&GUn=b<`9LPio#q!9)i}#@<eIa*
zFO#10{7WG-FLKGL&Ch%uUHzH6Y4#=TJ4Y_@%ET`7<8=NqUr7tE@Tz6(HjmqG&vnQR
zSNLScddix=@$T61uklI!($S6B%Ft=(1D6YTZtST^meOMNHgK9aef)>qg+=Ri1blX^
zk|g=|HNIZRg*SNY1JwB+zES2evA+yWDJSa6n^7V$g1Q~#HOea|(}(>+ZRu1PBU<t-
z8?B2G)5%pyWDu_`no_W`7(uryi?l}lU0Dvhqp;8xo^Tk8fXi^_<d}Zc>kHNHchlf1
z;tBb474bAP`n%MrD*QaD`nj=ZBWu3R>Bw@^ifUq_tQ9M8<K0+Yq)_`BVv0OaLrmlq
zdSXjPs_;-IQ;XW-8M<3rbfzJ7M6`Ukj%dqbLT|uSn-@zqd=_34C)&#Ry5cmG%?%OF
z=vsYIB<D8}D<b7PiQ=tDX|@t&7(Lor^ovIQ*quUKC+%x366KgSq8XF(+KN{>_3j|9
z)4YzN2H!cGPW;L1$v-=ad`3md*n3-a6LIurSMeFG=_ZEiOAL1HfO?y_lP%#}%{_tK
z(nB1!%0qp`UPiz76NOaNU(})c1H=R=2Z#qbT^S_m%bJ5#;<#aAI28;NuTb;hq6>XK
zTr8rQX~Inn(?ve*Oc&RM&FhyRju351U1J^{C9>kx`7HF}2)#4G1YB5cc!!jX7d`)(
zs9FunJbcgbI<nN@`0y&T(aBMwQ?Jqz_&0I=S6iH!4X>K1|6!s;xB{JNDPn8lJ&nTx
zrm<RhZfqAg8(@}s-4s1q^cw026^dInN)2s1xF-GgWKrRlVTq~3P#32AroPa|L0d+P
zhbeiC$e|C$h~+eQj3`h01EMTFHdaibvg5=M^$|@o#|e*27%v2?GtBE&-)!M~2)EkN
z)Lc^AOXy}rjV6fo)b}AVjCMXGK9H*>iVP;}*hCVe$(b0I^_e0=HnxlD5mxnbrZ;j$
zLn`YKTj-)g#FKln7~3$-k%!ZXdOUw<mf;VkYJo#l?NBEgx;|N4l2@mQfsDL)B8gJ+
z#Dj8W9%f2?T$#dS6F%jH_fmD6F!im>K~vl!^<VS&J-28t|8|R2Ojh)YcqUVQ;usFz
z`J#dBn=g(tnmSFqL<fH1&7-64_abedCTdCRbWxj8t3ol7P85pPvi-y2?TGfFvlTL8
zZ^khIw>Zl%)PQ$;=%Qv?Mw+<WIQ%<ThAxREa+&(LxKde;eo4$=^6COng;5-dPBd__
zC`b68Y9eVViHh<BVfxF)OT;E7|9Dx{wo=2DViGfH&Pp+wepo3IWXD%T6sKmdW1oKf
zbx}v!UKgV{on9?EJs7^gsT)H0-VmPtcr}Oa4?Z=q(N`sh!z5X5jp$e=GTrppyf$)f
z6mb#v$c^;KCamnWn?#)o>au2c8~ScVy^F=thwd$D_3FZG#?%iVxBPfxVU=N__`-KR
zx25#9_g~b5Y~GyQ(B5`WDZeciBY2I$?kwz!sw*)OOFaW^-NGB-YnSSqv8&P*iLUrw
zim{Zw1(Rj%7V#ICpKKG}h`yMLsxTbSJppe{X!Yf}!~5^fH%bb$sljtQ-D(wK&gYw6
z)lm+kZwouVqEic#p1*>-^wN*T&L}y1uc#^L@e~m&j~q~g`NUVE3!}Vm#G*FoZme)T
zKGv{4WhoMCJ9K-}@qK0vW{$ct;0%Tv{9#No+3JXB&E+dc#T!CCc|s)dij90Fm6*v!
zBcEJ<S|m51$`RJ8vaPVLt|-q{w&n}E8Ef58CIc@lpZe}&Lv?E{dAGV1cbp@&tb66&
z+Sc-Xe5$&#>(MVYIrO|OB?)aprTV$lT(N}C2|fpoZzf(7I1`4>g~=3O*V-z)=Ev5x
zcB6B3tzE11Mt3{IvrWH)ZFB<DskaTsc^@{gz|Kv0(PG7@Sb1(G!}lXTbyf~d1Pr@6
zkm6ipdXp@@%od?Ls@k?4mceu;(ORvtJ`Agur_biZcjyjTx1M!2rycRu+7w;injxL_
ztu7`b8(PP4`ZK|LUH;kFim!4b6Rk_>bTeyxS-qLHRs|ZLY^^2>J6UU4sb@Fq+tj(c
zwK=(aSX;`6dRSX<dLhNyu!(8lJdZIe89ci!FH?Orrv|cA4axG|6f3@O`Y_d6hHj-=
zC&}r(tYbJG?qh94@guS8l<#Z3!m0ZJYa9(3C92azACHbwGc>d;ElSuxjvHW|iEkqY
NS#byXbFlT${{hzrO``w+

diff --git a/resources/localization/it/PrusaSlicer_it.po b/resources/localization/it/PrusaSlicer_it.po
index 9cb5960b9..bebc6ef5b 100644
--- a/resources/localization/it/PrusaSlicer_it.po
+++ b/resources/localization/it/PrusaSlicer_it.po
@@ -5,343 +5,425 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: PhraseApp (phraseapp.com)\n"
+"X-Generator: Poedit 2.4.2\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
 
-#: src/slic3r/GUI/MainFrame.cpp:66
-msgid " - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/releases"
-msgstr " - Ricordati di controllare gli aggiornamenti su http://github.com/prusa3d/PrusaSlicer/releases"
+#: src/slic3r/GUI/Tab.cpp:4124
+msgid ""
+"\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n"
+"To enable \"%1%\", please switch off \"%2%\""
+msgstr ""
+"\"%1%\" è disattivato perchè \"%2%\" è nella categoria \"%3%\".\n"
+"Per attivare \"%1%\", si prega di spegnere \"%2%\""
 
-#: src/slic3r/GUI/MainFrame.cpp:872
-msgid " was successfully sliced."
-msgstr " generato con successo."
-
-#: src/libslic3r/PrintConfig.cpp:215 src/libslic3r/PrintConfig.cpp:792
-#: src/libslic3r/PrintConfig.cpp:1219 src/libslic3r/PrintConfig.cpp:1282
-#: src/libslic3r/PrintConfig.cpp:1532 src/libslic3r/PrintConfig.cpp:2425
-#: src/libslic3r/PrintConfig.cpp:2767
+#: src/libslic3r/PrintConfig.cpp:249 src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1390 src/libslic3r/PrintConfig.cpp:1640
+#: src/libslic3r/PrintConfig.cpp:2568 src/libslic3r/PrintConfig.cpp:2805
+#: src/libslic3r/PrintConfig.cpp:2931
 msgid "%"
 msgstr "%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:963
-#, possible-c-format
+#: src/slic3r/GUI/GLCanvas3D.cpp:969
+#, c-format
 msgid "%.2f - %.2f mm"
 msgstr "%.2f - %.2f mm"
 
 #. TRN  Remove/Delete
-#: src/slic3r/GUI/Tab.cpp:3126
+#: src/slic3r/GUI/Tab.cpp:3425
 msgid "%1% Preset"
 msgstr "%1% Preset"
 
-#: src/slic3r/GUI/Plater.cpp:4400
+#: src/slic3r/GUI/Plater.cpp:4423
 msgid "%1% printer was active at the time the target Undo / Redo snapshot was taken. Switching to %1% printer requires reloading of %1% presets."
 msgstr "La stampante %1% era attiva nel momento in cui  è stata creata l'istantanea di Annulla / Ripeti dell'oggetto. Passare alla stampante %1% richiede il ricaricamento dei preset %1%."
 
-#: src/libslic3r/Print.cpp:1374
+#: src/slic3r/GUI/MainFrame.cpp:1585
+msgid "%1% was successfully sliced."
+msgstr "%1% generato con successo."
+
+#: src/libslic3r/Print.cpp:1400
 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm"
 msgstr "%1%=%2% mm è troppo basso per essere un altezza layer stampabile %3% mm"
 
-#: src/slic3r/GUI/PresetHints.cpp:229
-#, possible-c-format
+#: src/slic3r/GUI/PresetHints.cpp:228
+#, c-format
 msgid "%3.2f mm³/s at filament speed %3.2f mm/s."
 msgstr "%3.2f mm³/s alla velocità del filamento di %3.2f mm/s."
 
-#: src/slic3r/GUI/Plater.cpp:1152
-#, possible-c-format
+#: src/slic3r/GUI/Plater.cpp:1061
+#, c-format
 msgid "%d (%d shells)"
 msgstr "%d (%d di perimetri)"
 
-#: src/slic3r/GUI/Plater.cpp:1160
-#, possible-c-format
+#: src/slic3r/GUI/Plater.cpp:1069
+#, c-format
 msgid "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d facets reversed, %d backwards edges"
 msgstr "%d facce degenerate, %d spigoli riparati, %d facce rimosse, %d faccee aggiunte, %d facce invertite, %d spigoli inversi"
 
-#: src/slic3r/GUI/PresetHints.cpp:270
-#, possible-c-format
+#: src/slic3r/GUI/PresetHints.cpp:269
+#, c-format
 msgid "%d lines: %.2f mm"
 msgstr "%d linee: %.2f mm"
 
-#: src/slic3r/GUI/MainFrame.cpp:1027
-#, possible-c-format
+#: src/slic3r/GUI/MainFrame.cpp:1728
+#, c-format
 msgid "%d presets successfully imported."
 msgstr "%d preset importati correttamente."
 
-#: src/slic3r/GUI/MainFrame.cpp:692
-#, possible-c-format
+#: src/slic3r/GUI/GUI_App.cpp:718
+#, c-format
+msgid ""
+"%s\n"
+"Do you want to continue?"
+msgstr ""
+"%s\n"
+"Vuoi continuare?"
+
+#: src/slic3r/GUI/MainFrame.cpp:917 src/slic3r/GUI/MainFrame.cpp:1316
+#, c-format
 msgid "%s &Website"
-msgstr "%s Sito &Web"
+msgstr "Sito &Web %s"
+
+#: src/slic3r/GUI/GUI_App.cpp:394
+#, c-format
+msgid "%s - BREAKING CHANGE"
+msgstr "%s - BREAKING CHANGE"
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:211
-#, possible-c-format
+#, c-format
 msgid "%s configuration is incompatible"
 msgstr "configurazione %s non compatibile"
 
-#: src/slic3r/GUI/Field.cpp:175
-#, possible-c-format
+#: src/slic3r/GUI/Field.cpp:223
+#, c-format
 msgid "%s doesn't support percentage"
 msgstr "%s non supporta la percentuale"
 
 #: src/slic3r/GUI/MsgDialog.cpp:73
-#, possible-c-format
+#, c-format
 msgid "%s error"
 msgstr "errore %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:481
-#, possible-c-format
+#: src/slic3r/GUI/ConfigWizard.cpp:499
+#, c-format
 msgid "%s Family"
 msgstr "Famiglia %s"
 
 #: src/slic3r/GUI/MsgDialog.cpp:74
-#, possible-c-format
+#, c-format
 msgid "%s has encountered an error"
 msgstr "%s ha riscontrato un errore"
 
-#: src/slic3r/GUI/GUI_App.cpp:138
-#, possible-c-format
-msgid "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it.\n\nThe application will now terminate."
-msgstr "%s ha riscontrato un errore. Probabilmente è stato causato dalla memoria piena. Se sei sicuro di avere abbastanza RAM nel sistema, questo potrebbe essere un bug e te ne saremmo grati se potessi informarci.\n\nL'applicazione verrà chiusa."
+#: src/slic3r/GUI/GUI_App.cpp:528
+#, c-format
+msgid ""
+"%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it.\n"
+"\n"
+"The application will now terminate."
+msgstr ""
+"%s ha riscontrato un errore. Probabilmente è stato causato dalla memoria piena. Se sei sicuro di avere abbastanza RAM nel sistema, questo potrebbe essere un bug e te ne saremmo grati se potessi informarci.\n"
+"\n"
+"L'applicazione verrà chiusa."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:222
-#, possible-c-format
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:62
+#, c-format
 msgid "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it."
 msgstr "%s ha riscontrato un errore. Probabilmente è stato causato dalla memoria piena. Se sei sicuro di avere abbastanza RAM nel sistema, questo potrebbe essere un bug e te ne saremmo grati se potessi informarci."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:308
-#, possible-c-format
+#: src/slic3r/GUI/UpdateDialogs.cpp:309
+#, c-format
 msgid "%s has no configuration updates available."
 msgstr "Non sono disponibili aggiornamenti di configurazione per %s."
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:148 src/slic3r/GUI/UpdateDialogs.cpp:210
-#, possible-c-format
+#, c-format
 msgid "%s incompatibility"
 msgstr "incompatibilità %s"
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:270
-#, possible-c-format
-msgid "%s now uses an updated configuration structure.\n\nSo called 'System presets' have been introduced, which hold the built-in default settings for various printers. These System presets cannot be modified, instead, users now may create their own presets inheriting settings from one of the System presets.\nAn inheriting preset may either inherit a particular value from its parent or override it with a customized value.\n\nPlease proceed with the %s that follows to set up the new presets and to choose whether to enable automatic preset updates."
-msgstr "%s adesso utilizza uno schema aggiornato di configurazioni.\n\nSono stati introdotti i così detti 'Preset di sistema', che contengono i settaggi integrati predefiniti per varie stampanti. Questi preset di sistema non possono essere modificati, però l'utente può creare i propri preset ereditando le impostazioni da quelli di sistema.\nUn preset ereditato può sia ereditare un valore particolare dal genitore, o sovrascriverlo con un valore personalizzato.\n\nSi prega di procedere con il %s che segue per impostare i nuovi preset e scegliere se abilitare gli aggiornamenti automatici del preset."
+#, c-format
+msgid ""
+"%s now uses an updated configuration structure.\n"
+"\n"
+"So called 'System presets' have been introduced, which hold the built-in default settings for various printers. These System presets cannot be modified, instead, users now may create their own presets inheriting settings from one of the System presets.\n"
+"An inheriting preset may either inherit a particular value from its parent or override it with a customized value.\n"
+"\n"
+"Please proceed with the %s that follows to set up the new presets and to choose whether to enable automatic preset updates."
+msgstr ""
+"%s adesso utilizza uno schema aggiornato di configurazioni.\n"
+"\n"
+"Sono stati introdotti i così detti 'Preset di sistema', che contengono i settaggi integrati predefiniti per varie stampanti. Questi preset di sistema non possono essere modificati, però l'utente può creare i propri preset ereditando le impostazioni da quelli di sistema.\n"
+"Un preset ereditato può sia ereditare un valore particolare dal genitore, o sovrascriverlo con un valore personalizzato.\n"
+"\n"
+"Si prega di procedere con il %s che segue per impostare i nuovi preset e scegliere se abilitare gli aggiornamenti automatici del preset."
 
-#: src/slic3r/GUI/GUI_App.cpp:820
-#, possible-c-format
+#: src/slic3r/GUI/GUI_App.cpp:1512
+#, c-format
 msgid "%s View Mode"
 msgstr "%s Modalità Visualizzazione"
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:151
-#, possible-c-format
-msgid "%s will now start updates. Otherwise it won't be able to start.\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:"
-msgstr "%s avvierà gli aggiornamenti. In caso contrario non sarà in grado di avviarsi.\n\nSi fa noto che prima verrà creata un'istantanea della configurazione completa. Questa potrà essere ripristinata in qualunque momento se dovesse esserci un problema con la nuova versione.\n\nPacchetti di configurazione aggiornati:"
+#, c-format
+msgid ""
+"%s will now start updates. Otherwise it won't be able to start.\n"
+"\n"
+"Note that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n"
+"\n"
+"Updated configuration bundles:"
+msgstr ""
+"%s avvierà gli aggiornamenti. In caso contrario non sarà in grado di avviarsi.\n"
+"\n"
+"Si fa noto che prima verrà creata un'istantanea della configurazione completa. Questa potrà essere ripristinata in qualunque momento se dovesse esserci un problema con la nuova versione.\n"
+"\n"
+"Pacchetti di configurazione aggiornati:"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
-#, possible-c-format
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
+#, c-format
 msgid "&About %s"
 msgstr "Inform&azioni su %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:908
+#: src/slic3r/GUI/MainFrame.cpp:1297
+msgid "&Collapse sidebar"
+msgstr "Ridu&ci barra laterale"
+
+#: src/slic3r/GUI/GUI_App.cpp:1645
 msgid "&Configuration"
 msgstr "&Configurazione"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "&Configuration Snapshots"
 msgstr "Istantanee di &Configurazione"
 
-#: src/slic3r/GUI/MainFrame.cpp:588
+#: src/slic3r/GUI/MainFrame.cpp:1194
 msgid "&Copy"
 msgstr "&Copia"
 
-#: src/slic3r/GUI/MainFrame.cpp:572
+#: src/slic3r/GUI/MainFrame.cpp:1178
 msgid "&Delete selected"
 msgstr "Eli&mina selezionati"
 
-#: src/slic3r/GUI/MainFrame.cpp:722
+#: src/slic3r/GUI/MainFrame.cpp:1348 src/slic3r/GUI/MainFrame.cpp:1358
 msgid "&Edit"
 msgstr "&Modifiche"
 
-#: src/slic3r/GUI/MainFrame.cpp:506
+#: src/slic3r/GUI/MainFrame.cpp:1103
 msgid "&Export"
 msgstr "&Esporta"
 
-#: src/slic3r/GUI/MainFrame.cpp:617 src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1224 src/slic3r/GUI/MainFrame.cpp:1451
 msgid "&Filament Settings Tab"
 msgstr "Impostazioni &Filamento"
 
-#: src/slic3r/GUI/MainFrame.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:1347 src/slic3r/GUI/MainFrame.cpp:1357
+#: src/slic3r/GUI/MainFrame.cpp:1417
 msgid "&File"
 msgstr "&File"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1981
+#: src/slic3r/GUI/ConfigWizard.cpp:2492
 msgid "&Finish"
 msgstr "&Completa"
 
-#: src/slic3r/GUI/MainFrame.cpp:727
+#: src/slic3r/GUI/MainFrame.cpp:1141
+msgid "&G-code preview"
+msgstr "Anteprima &G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1353 src/slic3r/GUI/MainFrame.cpp:1363
+#: src/slic3r/GUI/MainFrame.cpp:1423
 msgid "&Help"
 msgstr "&Aiuto"
 
-#: src/slic3r/GUI/MainFrame.cpp:474
+#: src/slic3r/GUI/MainFrame.cpp:1065
 msgid "&Import"
 msgstr "&Importa"
 
-#: src/slic3r/GUI/GUI_App.cpp:822
+#: src/slic3r/GUI/GUI_App.cpp:1517
 msgid "&Language"
 msgstr "&Lingua"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "&New Project"
 msgstr "&Nuovo progetto"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1980
+#: src/slic3r/GUI/ConfigWizard.cpp:2491
 msgid "&Next >"
 msgstr "&Successivo>"
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "&Open G-code"
+msgstr "Apri G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "&Open Project"
 msgstr "Apri Pr&ogetto"
 
-#: src/slic3r/GUI/MainFrame.cpp:591
+#: src/slic3r/GUI/MainFrame.cpp:1197
 msgid "&Paste"
 msgstr "I&ncolla"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "&Plater Tab"
 msgstr "&Piano"
 
-#: src/slic3r/GUI/GUI_App.cpp:804
+#: src/slic3r/GUI/GUI_App.cpp:1487
 msgid "&Preferences"
 msgstr "&Preferenze"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
 msgid "&Quit"
 msgstr "Es&ci"
 
-#: src/slic3r/GUI/MainFrame.cpp:583
+#: src/slic3r/GUI/MainFrame.cpp:1189
 msgid "&Redo"
 msgstr "&Ripeti"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "&Repair STL file"
 msgstr "&Ripara file STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "&Save Project"
 msgstr "&Salva Progetto"
 
-#: src/slic3r/GUI/MainFrame.cpp:565
+#: src/slic3r/GUI/MainFrame.cpp:1171
 msgid "&Select all"
 msgstr "&Seleziona tutto"
 
-#: src/slic3r/GUI/MainFrame.cpp:580
+#: src/slic3r/GUI/MainFrame.cpp:1186
 msgid "&Undo"
 msgstr "Ann&ulla"
 
-#: src/slic3r/GUI/MainFrame.cpp:724
+#: src/slic3r/GUI/MainFrame.cpp:1350 src/slic3r/GUI/MainFrame.cpp:1360
+#: src/slic3r/GUI/MainFrame.cpp:1418
 msgid "&View"
 msgstr "&Vista"
 
-#: src/slic3r/GUI/MainFrame.cpp:723
+#: src/slic3r/GUI/MainFrame.cpp:1349 src/slic3r/GUI/MainFrame.cpp:1359
 msgid "&Window"
 msgstr "Fines&tra"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:603 src/slic3r/GUI/ConfigWizard.cpp:631
+#: src/slic3r/GUI/ConfigWizard.cpp:662 src/slic3r/GUI/ConfigWizard.cpp:812
+#: src/slic3r/GUI/ConfigWizard.cpp:873 src/slic3r/GUI/ConfigWizard.cpp:1007
 msgid "(All)"
 msgstr "(Tutto)"
 
-#: src/libslic3r/PrintConfig.cpp:1446
+#: src/libslic3r/PrintConfig.cpp:1554
 msgid "(minimum)"
 msgstr "(minimo)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:116
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:109
 msgid "(Re)slice"
 msgstr "(Ri)processa"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "(Re)Slice No&w"
 msgstr "(Re)Sli&ce Ora"
 
-#: src/libslic3r/PrintConfig.cpp:771 src/libslic3r/PrintConfig.cpp:2587
+#: src/libslic3r/PrintConfig.cpp:807 src/libslic3r/PrintConfig.cpp:2730
 msgid "(Unknown)"
 msgstr "(Sconosciuto)"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid ") not found."
 msgstr ") non trovato."
 
-#: src/libslic3r/PrintConfig.cpp:1918
+#: src/libslic3r/PrintConfig.cpp:2060
 msgid "0 (soluble)"
 msgstr "0 (solubile)"
 
-#: src/libslic3r/PrintConfig.cpp:1919
+#: src/libslic3r/PrintConfig.cpp:2061
 msgid "0.2 (detachable)"
 msgstr "0.2 (rimovibile)"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "3&D"
 msgstr "3&D"
 
-#: src/slic3r/GUI/Plater.cpp:4097
+#: src/slic3r/GUI/Plater.cpp:4044
 msgid "3D editor view"
 msgstr "Vista modifica 3D"
 
-#: src/libslic3r/PrintConfig.cpp:851
+#: src/libslic3r/PrintConfig.cpp:889
 msgid "3D Honeycomb"
 msgstr "Nido d'ape 3D"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:274
+#: src/slic3r/GUI/NotificationManager.hpp:318
+msgid "3D Mouse disconnected."
+msgstr "Mouse 3D disconnesso."
+
+#: src/slic3r/GUI/Mouse3DController.cpp:263
 msgid "3Dconnexion settings"
 msgstr "Impostazioni 3Dconnexion"
 
-#: src/slic3r/GUI/Plater.cpp:5038
-#, possible-c-format
+#: src/slic3r/GUI/Plater.cpp:5167
+#, c-format
 msgid "3MF file exported to %s"
 msgstr "File 3MF esportato in %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1979
+#: src/slic3r/GUI/ConfigWizard.cpp:2490
 msgid "< &Back"
 msgstr "< &Precedente"
 
-#: src/libslic3r/PrintConfig.cpp:287
+#: src/libslic3r/PrintConfig.cpp:321
 msgid "A boolean expression using the configuration values of an active print profile. If this expression evaluates to true, this profile is considered compatible with the active print profile."
 msgstr "Un'espressione booleana che usa i valori di configurazione di un profilo di stampa attivo. Se questa espressione produce un risultato vero, questo profilo si considera compatibile con il profilo stampante attivo."
 
-#: src/libslic3r/PrintConfig.cpp:272
+#: src/libslic3r/PrintConfig.cpp:306
 msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
 msgstr "Un'espressione booleana che usa i valori di configurazione di un profilo stampante attivo. Se questa espressione produce un risultato vero, questo profilo si considera compatibile con il profilo stampante attivo."
 
-#: src/slic3r/GUI/Tab.cpp:975
+#: src/slic3r/GUI/Tab.cpp:1237
 msgid "A copy of the current system preset will be created, which will be detached from the system preset."
 msgstr "Verrà creata una copia del preset di sistema corrente, e verrà distaccata dal preset di sistema."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1034
+#: src/slic3r/GUI/ConfigWizard.cpp:1400
 msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
 msgstr "Una regola generale è da 160 a 230°C per il PLA, e da 215 a 250°C per l'ABS."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1048
+#: src/slic3r/GUI/ConfigWizard.cpp:1414
 msgid "A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have no heated bed."
 msgstr "Una regola generale è 60°C per il PLA e 110°C per l'ABS. Lascia a zero se non hai un piano riscaldato."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:686
-msgid "A toolpath outside the print area was detected"
-msgstr "È stato rilevato un percorso al di fuori dell'area di stampa"
+#: src/slic3r/GUI/GLCanvas3D.cpp:634
+msgid "A toolpath outside the print area was detected."
+msgstr "È stato rilevato un percorso fuori dall'area di stampa."
 
-#: src/slic3r/GUI/AboutDialog.cpp:199
-#, possible-c-format
+#: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215
+#, c-format
 msgid "About %s"
 msgstr "Informazioni su %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:959
-#, possible-c-format
+#: src/slic3r/GUI/GCodeViewer.cpp:2189
+msgid "above"
+msgstr "sopra"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:965
+#, c-format
 msgid "above %.2f mm"
 msgstr "sopra %.2f mm"
 
-#: src/libslic3r/PrintConfig.cpp:1569
+#: src/libslic3r/PrintConfig.cpp:1677
 msgid "Above Z"
 msgstr "Z Sopra"
 
-#: src/slic3r/GUI/Tab.cpp:1164
+#: src/slic3r/GUI/Tab.cpp:1494
 msgid "Acceleration control (advanced)"
 msgstr "Controllo Accelerazione (avanzato)"
 
-#: src/libslic3r/PrintConfig.cpp:2925
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:221
+#: src/libslic3r/PrintConfig.cpp:3089
 msgid "Accuracy"
 msgstr "Precisione"
 
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:59
+msgid "Accurate"
+msgstr "Precisa"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78
 msgid "Activate"
 msgstr "Attiva"
@@ -350,67 +432,75 @@ msgstr "Attiva"
 msgid "Active"
 msgstr "Attivo"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1135 src/slic3r/GUI/GUI_ObjectList.cpp:1705
+#: src/slic3r/GUI/DoubleSlider.cpp:1264 src/slic3r/GUI/GUI_ObjectList.cpp:1833
 msgid "active"
 msgstr "attivo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:267
+#: src/slic3r/GUI/GLCanvas3D.cpp:254
 msgid "Adaptive"
 msgstr "Adattivo"
 
-#: src/slic3r/GUI/Tab.cpp:241
-msgid "Add a new printer"
-msgstr "Aggiungi una nuova stampante"
+#: src/libslic3r/PrintConfig.cpp:894
+msgid "Adaptive Cubic"
+msgstr "Adattivo Cubico"
 
-#: src/libslic3r/PrintConfig.cpp:2782
+#: src/slic3r/GUI/SavePresetDialog.cpp:314
+msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\""
+msgstr "Aggiunge \"%1%\" come prossimo preset per la stampante fisica \"%2%\""
+
+#: src/libslic3r/PrintConfig.cpp:2946
 msgid "Add a pad underneath the supported model"
 msgstr "Aggiungi un pad sotto il modello supportato"
 
-#: src/libslic3r/PrintConfig.cpp:2058
+#: src/libslic3r/PrintConfig.cpp:2200
 msgid "Add a sheath (a single perimeter line) around the base support. This makes the support more reliable, but also more difficult to remove."
 msgstr "Aggiunge un contorno (una singola linea di perimetro) attorno alla base del supporto. Questo rende il supporto più affidabile, ma anche più difficile da rimuovere."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:991
+#: src/slic3r/GUI/DoubleSlider.cpp:1114
 msgid "Add another code - Ctrl + Left click"
 msgstr "Aggiungi altro codice - Ctrl + Clic sinistro"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:992
+#: src/slic3r/GUI/DoubleSlider.cpp:1115
 msgid "Add another code - Right click"
 msgstr "Aggiungi un altro codice - Clic destro"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1477
+#: src/slic3r/GUI/DoubleSlider.cpp:1665
 msgid "Add color change"
 msgstr "Aggiungi cambio colore"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1180
+#: src/slic3r/GUI/DoubleSlider.cpp:1307
 msgid "Add color change (%1%) for:"
 msgstr "Aggiungi cambio colore (%1%) per:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:988
+#: src/slic3r/GUI/DoubleSlider.cpp:1111
 msgid "Add color change - Left click"
 msgstr "Aggiungi cambio colore - Clic sinistro"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:986
+#: src/slic3r/GUI/DoubleSlider.cpp:1109
 msgid "Add color change - Left click for predefined color or Shift + Left click for custom color selection"
 msgstr "Aggiungi cambio colore - Clic sinistro per colore predefinito o Maiusc + Clic sinistro per selezione personalizzata del colore"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
 msgid "Add color change marker for current layer"
 msgstr "Aggiungi un segnale di cambio colore al layer corrente"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1490
+#: src/slic3r/GUI/DoubleSlider.cpp:1682
 msgid "Add custom G-code"
 msgstr "Aggiungi un G-code personalizzato"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:240
+#: src/slic3r/GUI/DoubleSlider.cpp:1679
+msgid "Add custom template"
+msgstr "Aggiungi un modello personalizzato"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:235
 msgid "Add detail"
 msgstr "Aggiungi dettagli"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:421
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:308
 msgid "Add drainage hole"
 msgstr "Aggiungi foro di drenaggio"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:984
+#: src/slic3r/GUI/DoubleSlider.cpp:1107
 msgid "Add extruder change - Left click"
 msgstr "Aggiungi cambio estrusore - Clic sinistro"
 
@@ -418,30 +508,30 @@ msgstr "Aggiungi cambio estrusore - Clic sinistro"
 msgid "Add extruder to sequence"
 msgstr "Aggiungi estrusore alla sequenza"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1993
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
 msgid "Add Generic Subobject"
 msgstr "Aggiungi sotto-oggetto generico"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2896
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2925
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2943
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3297
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3325
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3345
 msgid "Add Height Range"
 msgstr "Aggiungi Intervallo Altezza"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4526 src/slic3r/GUI/Plater.cpp:3788
-#: src/slic3r/GUI/Plater.cpp:3800 src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/GLCanvas3D.cpp:4892 src/slic3r/GUI/Plater.cpp:3708
+#: src/slic3r/GUI/Plater.cpp:3720 src/slic3r/GUI/Plater.cpp:3858
 msgid "Add instance"
 msgstr "Aggiungi istanza"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:153
 msgid "Add Instance of the selected object"
 msgstr "Aggiungi istanza all'oggetto selezionato"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:162
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:165
 msgid "Add layer range"
 msgstr "Aggiungi intervallo layer"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2328
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2692
 msgid "Add Layers"
 msgstr "Aggiungi layer"
 
@@ -449,12 +539,12 @@ msgstr "Aggiungi layer"
 msgid "Add modifier"
 msgstr "Aggiungi modificatore"
 
-#: src/libslic3r/PrintConfig.cpp:479
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:515
+#, c-format
 msgid "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r keeps adding perimeters, until more than 70% of the loop immediately above is supported."
 msgstr "Aggiunge più perimetri quando necessario per evitare spazi tra i perimetri inclinati. Slic3r continua ad aggiungere perimetri fino a quando almeno il 70% del giro immediatamente sopra sarà supportato."
 
-#: src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/Plater.cpp:3858
 msgid "Add one more instance of the selected object"
 msgstr "Aggiungi un'altra istanza dell'oggetto selezionato"
 
@@ -462,52 +552,61 @@ msgstr "Aggiungi un'altra istanza dell'oggetto selezionato"
 msgid "Add part"
 msgstr "Aggiungi parte"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1487
+#: src/slic3r/GUI/DoubleSlider.cpp:1675
 msgid "Add pause print"
 msgstr "Aggiungi pausa di stampa"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
+#: src/slic3r/GUI/PresetComboBoxes.cpp:627
+#: src/slic3r/GUI/PresetComboBoxes.cpp:674
+msgid "Add physical printer"
+msgstr "Aggiungi stampante fisica"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
 msgid "Add point"
 msgstr "Aggiungi punto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
 msgid "Add point to selection"
 msgstr "Aggiungi punto alla selezione"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1509
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:180
+msgid "Add preset for this printer device"
+msgstr "Aggiungi preset per questa stampante"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1640
 msgid "Add settings"
 msgstr "Aggiungi impostazioni"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1386
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1517
 msgid "Add Settings Bundle for Height range"
 msgstr "Aggiungi Gruppo impostazioni per intervallo Altezza"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1388
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1519
 msgid "Add Settings Bundle for Object"
 msgstr "Aggiungi gruppo di impostazioni per l'oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1387
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1518
 msgid "Add Settings Bundle for Sub-object"
 msgstr "Aggiungi Gruppi di Impostazioni per il sotto-progetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1314
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1445
 msgid "Add Settings for Layers"
 msgstr "Aggiungi impostazioni per i layer"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1316
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1447
 msgid "Add Settings for Object"
 msgstr "Aggiungi impostazioni per l'oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1315
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1446
 msgid "Add Settings for Sub-object"
 msgstr "Aggiungi impostazioni per il sotto-oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2051
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1953
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2210
 msgid "Add Shape"
 msgstr "Aggiungi Forma"
 
-#: src/libslic3r/PrintConfig.cpp:409
+#: src/libslic3r/PrintConfig.cpp:443
 msgid "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)."
 msgstr "Aggiunge un riempimento solido vicino le superfici inclinate per garantire lo spessore verticale (layer solidi superiore + inferiore)"
 
@@ -519,11 +618,19 @@ msgstr "Aggiungi blocco supporto"
 msgid "Add support enforcer"
 msgstr "Aggiungi rinforzo supporto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:494
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:374
 msgid "Add support point"
 msgstr "Aggiungi punto di supporto"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4467
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:371
+msgid "Add supports"
+msgstr "Aggiungi supporti"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:293
+msgid "Add supports by angle"
+msgstr "Aggiungi supporti all'angolo"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4833
 msgid "Add..."
 msgstr "Aggiungi..."
 
@@ -531,23 +638,29 @@ msgstr "Aggiungi..."
 msgid "Add/Remove filaments"
 msgstr "Aggiungi/Rimuovi filamenti"
 
-#: src/slic3r/GUI/Preset.cpp:1201
+#: src/slic3r/GUI/PresetComboBoxes.cpp:813
 msgid "Add/Remove materials"
 msgstr "Aggiungi/Rimuovi materiali"
 
-#: src/slic3r/GUI/Preset.cpp:1203
+#: src/slic3r/GUI/PresetComboBoxes.cpp:622
+#: src/slic3r/GUI/PresetComboBoxes.cpp:669
+msgid "Add/Remove presets"
+msgstr "Aggiungi/Rimuovi preset"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:815
+#: src/slic3r/GUI/PresetComboBoxes.cpp:972
 msgid "Add/Remove printers"
 msgstr "Aggiungi/Rimuovi stampanti"
 
-#: src/slic3r/GUI/Tab.cpp:970
+#: src/slic3r/GUI/Tab.cpp:1288
 msgid "Additional information:"
 msgstr "Informazioni aggiuntive:"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:59
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:62
 msgid "Additional Settings"
 msgstr "Impostazioni Aggiuntive"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:791
+#: src/slic3r/GUI/ConfigWizard.cpp:1150
 msgid "Additionally a backup snapshot of the whole configuration is created before an update is applied."
 msgstr "Inoltre viene generata una copia di backup dei preset prima di applicare un aggiornamento."
 
@@ -555,23 +668,22 @@ msgstr "Inoltre viene generata una copia di backup dei preset prima di applicare
 msgid "Address"
 msgstr "Indirizzo"
 
-#: src/slic3r/GUI/GUI_App.cpp:814 src/slic3r/GUI/GUI_ObjectList.cpp:104
-#: src/slic3r/GUI/GUI_ObjectList.cpp:622 src/slic3r/GUI/Tab.cpp:1087
-#: src/slic3r/GUI/Tab.cpp:1102 src/slic3r/GUI/Tab.cpp:1201
-#: src/slic3r/GUI/Tab.cpp:1204 src/slic3r/GUI/Tab.cpp:1470
-#: src/slic3r/GUI/Tab.cpp:1967 src/slic3r/GUI/Tab.cpp:3661
-#: src/slic3r/GUI/wxExtensions.cpp:754 src/libslic3r/PrintConfig.cpp:88
-#: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223
-#: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2276
-#: src/libslic3r/PrintConfig.cpp:2448
+#: src/slic3r/GUI/GUI_ObjectList.cpp:102 src/slic3r/GUI/GUI_ObjectList.cpp:661
+#: src/slic3r/GUI/Tab.cpp:1409 src/slic3r/GUI/Tab.cpp:1430
+#: src/slic3r/GUI/Tab.cpp:1531 src/slic3r/GUI/Tab.cpp:1534
+#: src/slic3r/GUI/Tab.cpp:1816 src/slic3r/GUI/Tab.cpp:2152
+#: src/slic3r/GUI/Tab.cpp:4080 src/libslic3r/PrintConfig.cpp:90
+#: src/libslic3r/PrintConfig.cpp:121 src/libslic3r/PrintConfig.cpp:257
+#: src/libslic3r/PrintConfig.cpp:1081 src/libslic3r/PrintConfig.cpp:2419
+#: src/libslic3r/PrintConfig.cpp:2591
 msgid "Advanced"
 msgstr "Avanzate"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:821
+#: src/slic3r/GUI/ConfigWizard.cpp:1180
 msgid "Advanced mode"
 msgstr "Modalità Avanzata"
 
-#: src/slic3r/GUI/GUI_App.cpp:814
+#: src/slic3r/GUI/GUI_App.cpp:1506
 msgid "Advanced View Mode"
 msgstr "Modalità Visualizzazione Avanzata"
 
@@ -579,219 +691,271 @@ msgstr "Modalità Visualizzazione Avanzata"
 msgid "Advanced: Output log"
 msgstr "Avanzato: Log di output"
 
-#: src/libslic3r/PrintConfig.cpp:668
+#: src/libslic3r/PrintConfig.cpp:704
 msgid "After a tool change, the exact position of the newly loaded filament inside the nozzle may not be known, and the filament pressure is likely not yet stable. Before purging the print head into an infill or a sacrificial object, Slic3r will always prime this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."
 msgstr "Dopo un cambio di attrezzo, l'esatta posizione del filamento appena caricato dentro l'ugello potrebbe essere sconosciuta, e la pressione del filamento probabilmente non è ancora stabile. Prima di spurgare la testina di stampa nel riempimento o in un oggetto sacrificale, Slic3r posizionerà questo materiale in una torre di spurgo al fine di ottenere una successiva estrusione affidabile su oggetto sacrificale o riempimento."
 
-#: src/slic3r/GUI/Tab.cpp:1994 src/libslic3r/PrintConfig.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:2182 src/libslic3r/PrintConfig.cpp:1173
 msgid "After layer change G-code"
 msgstr "G-code dopo il cambio layer"
 
-#: src/libslic3r/PrintConfig.cpp:3398
+#: src/libslic3r/PrintConfig.cpp:3597
 msgid "Align the model to the given point."
 msgstr "Allinea il modello al punto dato."
 
-#: src/libslic3r/PrintConfig.cpp:3397
+#: src/libslic3r/PrintConfig.cpp:3596
 msgid "Align XY"
 msgstr "Allinea XY"
 
-#: src/libslic3r/PrintConfig.cpp:1631
+#: src/libslic3r/PrintConfig.cpp:1739
 msgid "Aligned"
 msgstr "Allineato"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:290 src/slic3r/GUI/ConfigWizard.cpp:573
-#: src/slic3r/GUI/Tab.cpp:3174
+#: src/slic3r/GUI/ConfigWizard.cpp:308 src/slic3r/GUI/ConfigWizard.cpp:598
+#: src/slic3r/GUI/Tab.cpp:3507 src/slic3r/GUI/UnsavedChangesDialog.cpp:921
 msgid "All"
 msgstr "Tutto"
 
-#: src/libslic3r/Print.cpp:1219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
+msgid "All gizmos: Rotate - left mouse button; Pan - right mouse button"
+msgstr "Tutti i gizmos: Ruota - tasto destro del mouse; Panoramica - tasto destro del mouse"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:694
+msgid "All installed printers are compatible with the selected filament."
+msgstr "Tutte le stampanti installate sono compatibili con il filamento selezionato."
+
+#: src/libslic3r/Print.cpp:1245
 msgid "All objects are outside of the print volume."
 msgstr "Tutti gli oggetti sono fuori dal volume di stampa."
 
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "All objects will be removed, continue?"
 msgstr "Saranno rimossi tutti gli oggetti, continuare?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737
+msgid "All settings changes will be discarded."
+msgstr "Tutte le modifiche alle impostazioni verranno eliminate."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "All standard"
 msgstr "Tutto standard"
 
-#: src/libslic3r/Zipper.cpp:62
+#: src/libslic3r/miniz_extension.cpp:121
 msgid "allocation failed"
 msgstr "allocazione fallita"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Along X axis"
 msgstr "Lungo asse X"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Along Y axis"
 msgstr "Lungo asse Y"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Along Z axis"
 msgstr "Lungo l'asse Z"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:222
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:160
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:141
+msgid "Alt + Mouse wheel"
+msgstr "Alt + Rotella del mouse"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:240
 msgid "Alternate nozzles:"
 msgstr "Ugelli alternativi:"
 
-#: src/slic3r/GUI/Plater.cpp:5002
-#, possible-c-format
+#: src/slic3r/GUI/Preferences.cpp:163
+msgid "Always ask for unsaved changes when selecting new preset"
+msgstr "Chiedere sempre riguardo le modifiche non salvate quando si seleziona un nuovo preset"
+
+#: src/slic3r/GUI/Plater.cpp:5135
+#, c-format
 msgid "AMF file exported to %s"
 msgstr "File AMF esportato in %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:690
-msgid "An object outside the print area was detected\nResolve the current problem to continue slicing"
-msgstr "È stato rilevato un oggetto al di fuori dell'area di stampa\nRisolvere il problema per continuare lo slicing"
+#: src/slic3r/GUI/GLCanvas3D.cpp:638
+msgid ""
+"An object outside the print area was detected.\n"
+"Resolve the current problem to continue slicing."
+msgstr ""
+"È stato rilevato un oggetto al di fuori dell'area di stampa.\n"
+"Risolvere il problema per continuare lo slicing."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:685
-msgid "An object outside the print area was detected"
-msgstr "È stato rilevato un oggetto al di fuori dell'area di stampa"
+#: src/slic3r/GUI/GLCanvas3D.cpp:633
+msgid "An object outside the print area was detected."
+msgstr "È stato rilevato un oggetto al di fuori dell'area di stampa."
 
-#: src/slic3r/GUI/Tab.cpp:2943
-msgid "and it has the following unsaved changes:"
-msgstr "e ha i seguenti cambiamenti non salvati:"
-
-#: src/slic3r/GUI/Plater.cpp:3170
+#: src/slic3r/GUI/Plater.cpp:2972
 msgid "Another export job is currently running."
 msgstr "Un altro processo di esportazione è in corso."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Any arrow"
 msgstr "Qualunque freccia"
 
-#: src/slic3r/GUI/Tab.cpp:965
+#: src/slic3r/GUI/Tab.cpp:1283
 msgid "Any modifications should be saved as a new preset inherited from this one."
 msgstr "Qualunque modifica deve essere salvata come un nuovo preset ereditato da questo."
 
-#: src/libslic3r/PrintConfig.cpp:104
+#: src/libslic3r/PrintConfig.cpp:106
 msgid "API Key / Password"
 msgstr "Chiave API / Password"
 
-#: src/slic3r/GUI/GUI_App.cpp:810
+#: src/slic3r/GUI/GUI_App.cpp:1493
 msgid "Application preferences"
 msgstr "Preferenze applicazione"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1374
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221
 msgid "Apply changes"
 msgstr "Applica cambiamenti"
 
-#: src/libslic3r/PrintConfig.cpp:575 src/libslic3r/PrintConfig.cpp:1708
+#: src/libslic3r/PrintConfig.cpp:611 src/libslic3r/PrintConfig.cpp:1823
 msgid "approximate seconds"
 msgstr "secondi approssimativi"
 
-#: src/libslic3r/PrintConfig.cpp:428 src/libslic3r/PrintConfig.cpp:854
+#: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:892
 msgid "Archimedean Chords"
 msgstr "Corde di Archimede"
 
-#: src/libslic3r/Zipper.cpp:88
+#: src/libslic3r/miniz_extension.cpp:147
 msgid "archive is too large"
 msgstr "l'archivio è troppo grande"
 
-#. TRN  remove/delete
-#: src/slic3r/GUI/Tab.cpp:3123
+#: src/slic3r/GUI/Tab.cpp:3420
 msgid "Are you sure you want to %1% the selected preset?"
 msgstr "Sei sicuro di voler %1% il preset selezionato?"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:902
-msgid "Are you sure you want to cancel firmware flashing?\nThis could leave your printer in an unusable state!"
-msgstr "Sei sicuro di voler annullare il flash del firmware?\nQuesto potrebbe lasciare la tua stampante in una condizione inutilizzabile!"
+msgid ""
+"Are you sure you want to cancel firmware flashing?\n"
+"This could leave your printer in an unusable state!"
+msgstr ""
+"Sei sicuro di voler annullare il flash del firmware?\n"
+"Questo potrebbe lasciare la tua stampante in una condizione inutilizzabile!"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1903 src/slic3r/GUI/DoubleSlider.cpp:1924
+#: src/slic3r/GUI/DoubleSlider.cpp:2122 src/slic3r/GUI/DoubleSlider.cpp:2142
 msgid "Are you sure you want to continue?"
 msgstr "Sei sicuro di voler continuare?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1269
+#: src/slic3r/GUI/Tab.cpp:3392
+msgid "Are you sure you want to delete \"%1%\" preset from the physical printer \"%2%\"?"
+msgstr "Sei sicuro di voler eliminare il preset \"%1%\" dalla stampante fisica \"%2%\"?"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:658
+msgid "Are you sure you want to delete \"%1%\" printer?"
+msgstr "Sicuro di voler eliminare la stampante \"%1%\"?"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1128
 msgid "Are you sure you want to do it?"
 msgstr "Sei sicuro di voler procedere?"
 
-#: src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2566
 msgid "Area fill"
 msgstr "Riempimento area"
 
-#: src/slic3r/GUI/Plater.cpp:641
+#: src/slic3r/GUI/Plater.cpp:507
 msgid "Around object"
 msgstr "Intorno all'oggetto"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:157
-#: src/slic3r/GUI/Plater.cpp:2754
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/Plater.cpp:1549
 msgid "Arrange"
 msgstr "Disponi"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:152
 msgid "Arrange selection"
 msgstr "Disponi selezione"
 
-#: src/libslic3r/PrintConfig.cpp:3443
+#: src/libslic3r/PrintConfig.cpp:3642
 msgid "Arrange the supplied models in a plate and merge them in a single model in order to perform actions once."
 msgstr "Disponi i modelli su un piano e uniscili in un singolo modello al fine di effettuare le operazioni una singola volta."
 
-#: src/slic3r/GUI/Plater.cpp:2813
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:149
 msgid "Arranging"
 msgstr "Disponendo"
 
-#: src/slic3r/GUI/Plater.cpp:2841
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:182
 msgid "Arranging canceled."
 msgstr "Disposizione annullata."
 
-#: src/slic3r/GUI/Plater.cpp:2842
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:183
 msgid "Arranging done."
 msgstr "Disposizione completata."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Arrow Down"
 msgstr "Freccia giù"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
 msgid "Arrow Left"
 msgstr "Freccia sinistra"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
 msgid "Arrow Right"
 msgstr "Freccia Destra"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Arrow Up"
 msgstr "Freccia Su"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:290
+#: src/slic3r/GUI/GUI_App.cpp:246
+msgid "Artwork model by Nora Al-Badri and Jan Nikolai Nelles"
+msgstr "Modello grafico di Nora Al-Badri e Jan Nikolai Nelles"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:265
 msgid "As a workaround, you may run PrusaSlicer with a software rendered 3D graphics by running prusa-slicer.exe with the --sw_renderer parameter."
 msgstr "Come soluzione alternativa, è possibile eseguire PrusaSlicer con una grafica 3D di rendering software eseguendo prusa-slicer.exe con il parametro --sw_renderer."
 
-#: src/slic3r/GUI/GUI_App.cpp:1086 src/slic3r/GUI/Plater.cpp:2313
-#: src/slic3r/GUI/Tab.cpp:2960
+#: src/slic3r/GUI/Preferences.cpp:154
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:659
+msgid "Ask for unsaved changes when closing application"
+msgstr "Chiedere riguardo le modifiche non salvate alla chiusura del programma"
+
+#: src/slic3r/GUI/Preferences.cpp:161
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:660
+msgid "Ask for unsaved changes when selecting new preset"
+msgstr "Chiedere riguardo le modifiche non salvate quando si seleziona un nuovo preset"
+
+#: src/slic3r/GUI/GUI_App.cpp:1878 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210
+#: src/slic3r/GUI/Plater.cpp:2256 src/slic3r/GUI/Tab.cpp:3189
 msgid "Attention!"
 msgstr "Attenzione!"
 
-#: src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:150
+msgid "Authorization Type"
+msgstr "Tipo di autorizzazione"
+
+#: src/libslic3r/PrintConfig.cpp:2013
 msgid "Auto generated supports"
 msgstr "Supporti generati automaticamente"
 
-#: src/slic3r/GUI/Preferences.cpp:47
+#: src/slic3r/GUI/Preferences.cpp:64
 msgid "Auto-center parts"
 msgstr "Centra automaticamente le parti"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1377
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1224
 msgid "Auto-generate points"
 msgstr "Genera punti automaticamente"
 
-#: src/slic3r/GUI/Plater.cpp:1157
-#, possible-c-format
+#: src/slic3r/GUI/Plater.cpp:1066
+#, c-format
 msgid "Auto-repaired (%d errors)"
 msgstr "Auto-riparati (%d errori)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:339
-#, possible-c-format
+#: src/slic3r/GUI/GUI_ObjectList.cpp:386
+#, c-format
 msgid "Auto-repaired (%d errors):"
 msgstr "Auto-riparati (%d errori):"
 
@@ -799,59 +963,79 @@ msgstr "Auto-riparati (%d errori):"
 msgid "Autodetected"
 msgstr "Autorilevato"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1273
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1134
 msgid "Autogenerate support points"
 msgstr "Genera automaticamente punti di supporto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1268
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127
 msgid "Autogeneration will erase all manually edited points."
 msgstr "La generazione automatica cancellerà tutti i punti editati manualmente."
 
-#: src/slic3r/GUI/Tab.cpp:3632
+#: src/slic3r/GUI/Tab.cpp:4051
 msgid "Automatic generation"
 msgstr "Generazione automatica"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Automatic updates"
 msgstr "Aggiornamenti automatici"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "Automatically repair an STL file"
 msgstr "Ripara automaticamente un file STL"
 
-#: src/slic3r/GUI/Tab.cpp:1171
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:129
+msgid "Autoset by angle"
+msgstr "Autoset ad angolo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:233
+msgid "Autoset custom supports"
+msgstr "Autoset supporti personalizzati"
+
+#: src/slic3r/GUI/Tab.cpp:1501
 msgid "Autospeed (advanced)"
 msgstr "Autovelocità (avanzato)"
 
-#: src/libslic3r/PrintConfig.cpp:136
+#: src/libslic3r/PrintConfig.cpp:169
 msgid "Avoid crossing perimeters"
 msgstr "Evita incrocio perimetri"
 
-#: src/slic3r/GUI/Tab.cpp:3268
+#: src/slic3r/GUI/Tab.cpp:3705
 msgid "BACK ARROW"
 msgstr "FRECCIA INDIETRO"
 
-#: src/slic3r/GUI/Tab.cpp:3290
-msgid "BACK ARROW icon indicates that the settings were changed and are not equal to the last saved preset for the current option group.\nClick to reset all settings for the current option group to the last saved preset."
-msgstr "L'icona FRECCIA INDIETRO indica che le impostazioni sono state cambiate e non corrispondono all'ultimo preset salvato per il seguente gruppo di opzioni.\nClicca per reimpostare all'ultimo preset salvato tutte le impostazioni per il seguente gruppo di opzioni."
+#: src/slic3r/GUI/Tab.cpp:3727
+msgid ""
+"BACK ARROW icon indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
+"Click to reset all settings for the current option group to the last saved preset."
+msgstr ""
+"L'icona FRECCIA INDIETRO indica che le impostazioni sono state cambiate e non corrispondono all'ultimo preset salvato per il seguente gruppo di opzioni.\n"
+"Clicca per reimpostare all'ultimo preset salvato tutte le impostazioni per il seguente gruppo di opzioni."
 
-#: src/slic3r/GUI/Tab.cpp:3304
-msgid "BACK ARROW icon indicates that the value was changed and is not equal to the last saved preset.\nClick to reset current value to the last saved preset."
-msgstr "L'icona FRECCIA ALL'INDIETRO indica che il valore è stato cambiato e non corrisponde all'ultimo preset salvato.\nCliccare per reimpostare il valore corrente all'ultimo preset salvato."
+#: src/slic3r/GUI/Tab.cpp:3741
+msgid ""
+"BACK ARROW icon indicates that the value was changed and is not equal to the last saved preset.\n"
+"Click to reset current value to the last saved preset."
+msgstr ""
+"L'icona FRECCIA ALL'INDIETRO indica che il valore è stato cambiato e non corrisponde all'ultimo preset salvato.\n"
+"Cliccare per reimpostare il valore corrente all'ultimo preset salvato."
 
-#: src/slic3r/GUI/Preferences.cpp:55
+#: src/slic3r/GUI/Preferences.cpp:72
 msgid "Background processing"
 msgstr "Elaborazione in background"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:351
+#: src/slic3r/GUI/GUI_ObjectList.cpp:398
 msgid "backwards edges"
 msgstr "spigoli invertiti"
 
-#: src/slic3r/GUI/MainFrame.cpp:174
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:60
+msgid "Balanced"
+msgstr "Bilanciato"
+
+#: src/slic3r/GUI/MainFrame.cpp:535 src/slic3r/GUI/MainFrame.cpp:537
 msgid "based on Slic3r"
 msgstr "basato su Slic3r"
 
-#: src/slic3r/GUI/Tab.cpp:1439
+#: src/slic3r/GUI/Tab.cpp:1785
 msgid "Bed"
 msgstr "Piano"
 
@@ -863,7 +1047,7 @@ msgstr "Modello piano personalizzato"
 msgid "Bed custom texture"
 msgstr "Forma piano personalizzata"
 
-#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/BedShapeDialog.hpp:98 src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape"
 msgstr "Forma Piano"
 
@@ -871,23 +1055,23 @@ msgstr "Forma Piano"
 msgid "Bed shape"
 msgstr "Forma piano"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape and Size"
 msgstr "Forma e dimensioni del piano di stampa"
 
-#: src/libslic3r/PrintConfig.cpp:147
+#: src/libslic3r/PrintConfig.cpp:181
 msgid "Bed temperature"
 msgstr "Temperatura piano"
 
-#: src/libslic3r/PrintConfig.cpp:145
+#: src/libslic3r/PrintConfig.cpp:178
 msgid "Bed temperature for layers after the first one. Set this to zero to disable bed temperature control commands in the output."
 msgstr "Temperatura per i layer dopo il primo. Imposta a zero per disattivare i comandi di controllo della temperatura del piano di stampa in output."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1051
+#: src/slic3r/GUI/ConfigWizard.cpp:1417
 msgid "Bed Temperature:"
 msgstr "Temperatura piano di stampa:"
 
-#: src/slic3r/GUI/Tab.cpp:1988 src/libslic3r/PrintConfig.cpp:153
+#: src/slic3r/GUI/Tab.cpp:2175 src/libslic3r/PrintConfig.cpp:187
 msgid "Before layer change G-code"
 msgstr "G-code prima del cambio layer"
 
@@ -895,143 +1079,191 @@ msgstr "G-code prima del cambio layer"
 msgid "Before roll back"
 msgstr "Prima di tornare indietro"
 
-#: src/slic3r/GUI/Plater.cpp:640
+#: src/slic3r/GUI/Plater.cpp:506
 msgid "Below object"
 msgstr "Sotto l'oggetto"
 
-#: src/libslic3r/PrintConfig.cpp:1578
+#: src/libslic3r/PrintConfig.cpp:1686
 msgid "Below Z"
 msgstr "Z Sotto"
 
-#: src/libslic3r/PrintConfig.cpp:164
+#: src/libslic3r/PrintConfig.cpp:198
 msgid "Between objects G-code"
 msgstr "G-code tra gli oggetti"
 
-#: src/slic3r/GUI/Tab.cpp:2006
+#: src/slic3r/GUI/Tab.cpp:2196
 msgid "Between objects G-code (for sequential printing)"
 msgstr "G-code tra gli oggetti (per stampa sequenziale)"
 
-#: src/libslic3r/PrintConfig.cpp:2489 src/libslic3r/PrintConfig.cpp:2490
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:242
+msgid "Block"
+msgstr "Blocco"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:32
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:383
+msgid "Block seam"
+msgstr "Blocca giunzione"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:373
+msgid "Block supports"
+msgstr "Blocca supporti"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:292
+msgid "Block supports by angle"
+msgstr "Blocca supporti all'angolo"
+
+#: src/libslic3r/PrintConfig.cpp:2632 src/libslic3r/PrintConfig.cpp:2633
 msgid "Bottle volume"
 msgstr "Volume bottiglia"
 
-#: src/libslic3r/PrintConfig.cpp:2496 src/libslic3r/PrintConfig.cpp:2497
+#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2640
 msgid "Bottle weight"
 msgstr "Peso bottiglia"
 
 #. TRN To be shown in the main menu View->Bottom
 #. TRN To be shown in Print Settings "Bottom solid layers"
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:665 src/libslic3r/PrintConfig.cpp:174
-#: src/libslic3r/PrintConfig.cpp:183
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
+#: src/libslic3r/PrintConfig.cpp:208 src/libslic3r/PrintConfig.cpp:217
 msgid "Bottom"
 msgstr "Inferiore"
 
-#: src/libslic3r/PrintConfig.cpp:435
+#: src/libslic3r/PrintConfig.cpp:471
 msgid "Bottom fill pattern"
 msgstr "Trama riempimento inferiore"
 
-#: src/slic3r/GUI/PresetHints.cpp:342
+#: src/slic3r/GUI/PresetHints.cpp:340
 msgid "Bottom is open."
 msgstr "La parte inferiore è aperta."
 
-#: src/slic3r/GUI/PresetHints.cpp:336
+#: src/slic3r/GUI/PresetHints.cpp:334
 msgid "Bottom shell is %1% mm thick for layer height %2% mm."
 msgstr "Il guscio inferiore è spesso %1% mm per l'altezza layer %2% mm."
 
-#: src/libslic3r/PrintConfig.cpp:177
+#: src/libslic3r/PrintConfig.cpp:211
 msgid "Bottom solid layers"
 msgstr "Layer solidi sul fondo"
 
-#: src/slic3r/GUI/MainFrame.cpp:665
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
 msgid "Bottom View"
 msgstr "Vista inferiore"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1464
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1468
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1595
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
 msgid "Box"
 msgstr "Cubo"
 
-#: src/libslic3r/PrintConfig.cpp:193
+#: src/libslic3r/PrintConfig.cpp:227
 msgid "Bridge"
 msgstr "Bridge"
 
-#: src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:256
 msgid "Bridge flow ratio"
 msgstr "Rapporto flusso Bridge"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/slic3r/GUI/GUI_Preview.cpp:308 src/libslic3r/ExtrusionEntity.cpp:321
+#: src/libslic3r/ExtrusionEntity.cpp:350
 msgid "Bridge infill"
 msgstr "Riempimento Bridge"
 
-#: src/libslic3r/PrintConfig.cpp:234
+#: src/libslic3r/PrintConfig.cpp:268
 msgid "Bridges"
 msgstr "Bridge"
 
-#: src/libslic3r/PrintConfig.cpp:213
+#: src/libslic3r/PrintConfig.cpp:247
 msgid "Bridges fan speed"
 msgstr "Velocità ventola Bridge"
 
-#: src/libslic3r/PrintConfig.cpp:202
+#: src/libslic3r/PrintConfig.cpp:236
 msgid "Bridging angle"
 msgstr "Angolo Bridge"
 
-#: src/libslic3r/PrintConfig.cpp:204
+#: src/libslic3r/PrintConfig.cpp:238
 msgid "Bridging angle override. If left to zero, the bridging angle will be calculated automatically. Otherwise the provided angle will be used for all bridges. Use 180° for zero angle."
 msgstr "Ignora angolo Bridging. Se lasciato a zero, l'angolo di bridging verrà calcolato automaticamente. Altrimenti l'angolo fornito sarà utilizzato per tutti i bridge. Usa 180° per l'angolo zero."
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Bridging volumetric"
 msgstr "Bridging  volumetrico"
 
-#: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1117
+#: src/slic3r/GUI/Plater.cpp:400 src/slic3r/GUI/Tab.cpp:1446
 msgid "Brim"
 msgstr "Brim"
 
-#: src/libslic3r/PrintConfig.cpp:244
+#: src/libslic3r/PrintConfig.cpp:278
 msgid "Brim width"
 msgstr "Larghezza brim"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1658
-#: src/slic3r/GUI/Tab.cpp:1721
+#: src/slic3r/GUI/FirmwareDialog.cpp:805
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:271
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
 msgid "Browse"
 msgstr "Naviga"
 
-#: src/libslic3r/Zipper.cpp:82
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:28
+msgid "Brush shape"
+msgstr "Forma Pennello"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:44
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:27
+msgid "Brush size"
+msgstr "Dimensione Pennello"
+
+#: src/libslic3r/miniz_extension.cpp:141
 msgid "buffer too small"
 msgstr "buffer troppo piccolo"
 
+#: src/slic3r/GUI/GUI_App.cpp:1152
+msgid ""
+"But since this version of PrusaSlicer we don't show this information in Printer Settings anymore.\n"
+"Settings will be available in physical printers settings."
+msgstr ""
+"Ma da questa versione di PrusaSlicer non mostriamo più queste informazioni nelle impostazioni della stampante.\n"
+"Le impostazioni saranno disponibili nelle impostazioni delle stampanti fisiche."
+
 #: src/slic3r/GUI/ButtonsDescription.cpp:16
 msgid "Buttons And Text Colors Description"
 msgstr "Descrizione colori testo e pulsanti"
 
-#: src/slic3r/GUI/PresetHints.cpp:223
+#: src/slic3r/GUI/GUI_App.cpp:1084
+msgid ""
+"By default new Printer devices will be named as \"Printer N\" during its creation.\n"
+"Note: This name can be changed later from the physical printers settings"
+msgstr ""
+"Per impostazione predefinita le nuove stampanti saranno denominate \"Printer N\" durante la loro creazione.\n"
+"Nota: Questo nome può essere cambiato in seguito dalle impostazioni delle stampanti fisiche"
+
+#: src/slic3r/GUI/PresetHints.cpp:222
 msgid "by the print profile maximum"
 msgstr "secondo il massimo del profilo di stampa"
 
-#: src/slic3r/GUI/Preferences.cpp:113
+#: src/slic3r/GUI/Preferences.cpp:178
 msgid "Camera"
 msgstr "Camera"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:144
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
 msgid "Camera view"
 msgstr "Vista camera"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1982 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/ConfigWizard.cpp:2493 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:245
 #: src/slic3r/GUI/ProgressStatusBar.cpp:26
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:644
 msgid "Cancel"
 msgstr "Annulla"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:157
+#: src/slic3r/GUI/PrintHostDialogs.cpp:155
 msgid "Cancel selected"
 msgstr "Cancella selezione"
 
-#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/PrintHostDialogs.cpp:233
+#: src/slic3r/GUI/Plater.cpp:3589 src/slic3r/GUI/PrintHostDialogs.cpp:233
 msgid "Cancelled"
 msgstr "Annullato"
 
-#: src/slic3r/GUI/Plater.cpp:3153 src/slic3r/GUI/PrintHostDialogs.cpp:232
+#: src/slic3r/GUI/Plater.cpp:2953 src/slic3r/GUI/PrintHostDialogs.cpp:232
 msgid "Cancelling"
 msgstr "Annullamento"
 
@@ -1043,92 +1275,116 @@ msgstr "Annullo in corso..."
 msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
 msgstr "Non è possibile calcolare la larghezza di estrusione per %1%: Variabile \"%2%\" non accessibile."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
-msgid "Cannot insert a new layer range after the current layer range.\nCurrent layer range overlaps with the next layer range."
-msgstr "Non è possibile inserire un nuovo intervallo layer dopo quello attuale.\nL'intervallo layer attuale si sovrappone alla quello successivo."
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3400
+msgid ""
+"Cannot insert a new layer range after the current layer range.\n"
+"Current layer range overlaps with the next layer range."
+msgstr ""
+"Non è possibile inserire un nuovo intervallo layer dopo quello attuale.\n"
+"L'intervallo layer attuale si sovrappone alla quello successivo."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
-msgid "Cannot insert a new layer range after the current layer range.\nThe next layer range is too thin to be split to two\nwithout violating the minimum layer height."
-msgstr "Non è possibile inserire un nuovo intervallo layer dopo quello attuale.\nL'intervallo layer successivo è troppo sottile per essere diviso in due\nsenza violare l'altezza layer minima."
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3391
+msgid ""
+"Cannot insert a new layer range after the current layer range.\n"
+"The next layer range is too thin to be split to two\n"
+"without violating the minimum layer height."
+msgstr ""
+"Non è possibile inserire un nuovo intervallo layer dopo quello attuale.\n"
+"L'intervallo layer successivo è troppo sottile per essere diviso in due\n"
+"senza violare l'altezza layer minima."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
-msgid "Cannot insert a new layer range between the current and the next layer range.\nThe gap between the current layer range and the next layer range\nis thinner than the minimum layer height allowed."
-msgstr "Non è possibile inserire un nuovo intervallo layer tra quello attuale e quello successivo.\nLo spazio tra l'intervallo layer corrente e quello successivo\nè più sottile dell'altezza layer minima consentita."
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3395
+msgid ""
+"Cannot insert a new layer range between the current and the next layer range.\n"
+"The gap between the current layer range and the next layer range\n"
+"is thinner than the minimum layer height allowed."
+msgstr ""
+"Non è possibile inserire un nuovo intervallo layer tra quello attuale e quello successivo.\n"
+"Lo spazio tra l'intervallo layer corrente e quello successivo\n"
+"è più sottile dell'altezza layer minima consentita."
 
-#: src/slic3r/GUI/Tab.cpp:3073
+#: src/slic3r/GUI/SavePresetDialog.cpp:137
 msgid "Cannot overwrite a system profile."
 msgstr "Impossibile sovrascrivere un profilo di sistema."
 
-#: src/slic3r/GUI/Tab.cpp:3077
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
 msgid "Cannot overwrite an external profile."
 msgstr "Impossibile sovrascrivere un profilo esterno."
 
-#: src/libslic3r/SLAPrint.cpp:613
+#: src/libslic3r/SLAPrint.cpp:627
 msgid "Cannot proceed without support points! Add support points or disable support generation."
 msgstr "Impossibile procedere senza punti di supporto! Aggiungi i punti di supporto o disattiva la generazione supporti."
 
-#: src/slic3r/GUI/Tab.cpp:1834
+#: src/slic3r/GUI/Tab.cpp:2068 src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "Capabilities"
 msgstr "Caratteristiche"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Capture a configuration snapshot"
 msgstr "Cattura un'istantanea della configurazione"
 
-#: src/libslic3r/PrintConfig.cpp:3424
+#: src/slic3r/GUI/ImGuiWrapper.cpp:801 src/slic3r/GUI/Search.cpp:458
+msgid "Category"
+msgstr "Categoria"
+
+#: src/libslic3r/PrintConfig.cpp:3623
 msgid "Center"
 msgstr "Centro"
 
-#: src/libslic3r/PrintConfig.cpp:3425
+#: src/libslic3r/PrintConfig.cpp:3624
 msgid "Center the print around the given center."
 msgstr "Centra la stampa sul centro dato."
 
-#: src/slic3r/GUI/Tab.cpp:1728
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:329
 msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
 msgstr "File di certificato (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+#: src/slic3r/GUI/SavePresetDialog.cpp:313
+msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\""
+msgstr "Cambia \"%1%\" a \"%2%\" per questa stampante fisica \"%3%\""
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
 msgid "Change camera type (perspective, orthographic)"
 msgstr "Cambia tipo di visuale (prospettica, ortografica)"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:885
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:693
 msgid "Change drainage hole diameter"
 msgstr "Modifica il diametro dei fori di drenaggio"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144 src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/DoubleSlider.cpp:1273 src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Change extruder"
 msgstr "Cambia estrusore"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:536
+#: src/slic3r/GUI/GUI_ObjectList.cpp:574
 msgid "Change Extruder"
 msgstr "Cambio estrusore"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1145
+#: src/slic3r/GUI/DoubleSlider.cpp:1274
 msgid "Change extruder (N/A)"
 msgstr "Cambio estrusore (N/A)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3997
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4484
 msgid "Change Extruders"
 msgstr "Cambio Estrusori"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152
-#, possible-c-format
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:157
+#, c-format
 msgid "Change Option %s"
 msgstr "Modifica Opzione %s"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3558
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4021
 msgid "Change Part Type"
 msgstr "Modifica il tipo di Parte"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:820
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:694
 msgid "Change point head diameter"
 msgstr "Modifica diametro punta della testa"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Change the number of instances of the selected object"
 msgstr "Cambia il numero di istanze dell'oggetto selezionato"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1589
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1718
 msgid "Change type"
 msgstr "Cambia tipo"
 
@@ -1136,125 +1392,172 @@ msgstr "Cambia tipo"
 msgid "Changelog && Download"
 msgstr "Changelog && Download"
 
-#: src/slic3r/GUI/GUI_App.cpp:442
+#: src/slic3r/GUI/GUI_App.cpp:1245
 msgid "Changing of an application language"
 msgstr "Cambio lingua applicazione"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:769 src/slic3r/GUI/Preferences.cpp:64
+#: src/slic3r/GUI/ConfigWizard.cpp:1128 src/slic3r/GUI/Preferences.cpp:81
 msgid "Check for application updates"
 msgstr "Verifica la presenza di aggiornamenti"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for configuration updates"
 msgstr "Controlla aggiornamenti di configurazione"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for updates"
 msgstr "Cerca aggiorna&menti"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:532
+#: src/slic3r/GUI/BedShapeDialog.cpp:608
 msgid "Choose a file to import bed texture from (PNG/SVG):"
 msgstr "Seleziona un file da cui importare la forma del piano di stampa (PNG/SVG):"
 
-#: src/slic3r/GUI/MainFrame.cpp:773
+#: src/slic3r/GUI/MainFrame.cpp:1474
 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Scegli un file da processare (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:555
+#: src/slic3r/GUI/BedShapeDialog.cpp:631
 msgid "Choose an STL file to import bed model from:"
 msgstr "Scegli un file STL da cui importare il modello del piano:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:487
+#: src/slic3r/GUI/BedShapeDialog.cpp:563
 msgid "Choose an STL file to import bed shape from:"
 msgstr "Scegli un file STL da cui importare la forma del piano:"
 
-#: src/slic3r/GUI/GUI_App.cpp:555
+#: src/slic3r/GUI/GUI_App.cpp:1208
 msgid "Choose one file (3MF/AMF):"
 msgstr "Seleziona un file (3MF/AMF):"
 
-#: src/slic3r/GUI/GUI_App.cpp:567
+#: src/slic3r/GUI/GUI_App.cpp:1233
+msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):"
+msgstr "Scegliere un file (GCODE/.GCO/.G/.ngc/NGC):"
+
+#: src/slic3r/GUI/GUI_App.cpp:1220
 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Seleziona uno o più file (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:895
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:35
+msgid "Choose SLA archive:"
+msgstr "Scegliere l'archivio SLA:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1261
 msgid "Choose the type of firmware used by your printer."
 msgstr "Indica il firmware usato dalla tua stampante."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:89
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:53
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:36
+msgid "Circle"
+msgstr "Cerchio"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:142
 msgid "Circular"
 msgstr "Circolare"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/GLCanvas3D.cpp:4657
-msgid "Click right mouse button to open History"
-msgstr "Fai click destro per aprire la Storia"
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
+msgid "Click right mouse button to open/close History"
+msgstr "Cliccare con il tasto destro del mouse per aprire/chiudere la Cronologia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:404
+#: src/slic3r/GUI/GUI_ObjectList.cpp:451
 msgid "Click the icon to change the object printable property"
 msgstr "Clicca l'icona per cambiare le proprietà di stampa dell'oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:398
+#: src/slic3r/GUI/GUI_ObjectList.cpp:445
 msgid "Click the icon to change the object settings"
 msgstr "Fare clic sull'icona per modificare le impostazioni dell'oggetto"
 
-#: src/slic3r/GUI/Plater.cpp:343
+#: src/slic3r/GUI/PresetComboBoxes.cpp:566
 msgid "Click to edit preset"
 msgstr "Clicca per modificare il preset"
 
-#: src/libslic3r/PrintConfig.cpp:252
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to hide"
+msgstr "Fare clic per nascondere"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to show"
+msgstr "Clic per mostrare"
+
+#: src/libslic3r/PrintConfig.cpp:286
 msgid "Clip multi-part objects"
 msgstr "Collega oggetti multi-part"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:25
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
 msgid "Clipping of view"
-msgstr "Ritaglio della vista"
+msgstr "Vista in sezione"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:852
-#: src/slic3r/GUI/Mouse3DController.cpp:364
-#: src/slic3r/GUI/PrintHostDialogs.cpp:161
+#: src/slic3r/GUI/Mouse3DController.cpp:353
+#: src/slic3r/GUI/PrintHostDialogs.cpp:159
 msgid "Close"
 msgstr "Chiudi"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
-#: src/libslic3r/PrintConfig.cpp:2934
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:3098
 msgid "Closing distance"
 msgstr "Distanza di chiusura"
 
-#: src/slic3r/GUI/Plater.cpp:1260 src/libslic3r/PrintConfig.cpp:582
+#: src/slic3r/GUI/MainFrame.cpp:1297 src/slic3r/GUI/Plater.cpp:2144
+msgid "Collapse sidebar"
+msgstr "Riduci barra laterale"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+msgid "Collapse/Expand the sidebar"
+msgstr "Riduci/Espandi barra laterale"
+
+#: src/slic3r/GUI/Plater.cpp:1198 src/libslic3r/PrintConfig.cpp:618
 msgid "Color"
 msgstr "Colore"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1005
+#: src/slic3r/GUI/GCodeViewer.cpp:2410 src/slic3r/GUI/GCodeViewer.cpp:2438
+msgid "Color change"
+msgstr "Cambio colore"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1130
 msgid "Color change (\"%1%\")"
 msgstr "Cambio colore (\"%1%\")"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1006
+#: src/slic3r/GUI/DoubleSlider.cpp:1131
 msgid "Color change (\"%1%\") for Extruder %2%"
 msgstr "Cambio colore (\"%1%\") per Estrusore %2%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:995
-#, possible-c-format
+#: src/slic3r/GUI/GLCanvas3D.cpp:1001
+#, c-format
 msgid "Color change for Extruder %d at %.2f mm"
 msgstr "Cambio colore per Estrusore %d a %.2f mm"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:228 src/slic3r/GUI/GUI_Preview.cpp:572
-#: src/libslic3r/GCode/PreviewData.cpp:359
+#: src/slic3r/GUI/Tab.cpp:2203
+msgid "Color Change G-code"
+msgstr "G-code cambio colore"
+
+#: src/libslic3r/PrintConfig.cpp:1960
+msgid "Color change G-code"
+msgstr "G-code cambio colore"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2531 src/slic3r/GUI/GUI_Preview.cpp:1475
+msgid "Color changes"
+msgstr "Cambi colore"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2242 src/slic3r/GUI/GUI_Preview.cpp:282
+#: src/slic3r/GUI/GUI_Preview.cpp:784 src/libslic3r/GCode/PreviewData.cpp:364
 msgid "Color Print"
 msgstr "Color Print (Stampa a Colori)"
 
-#: src/libslic3r/PrintConfig.cpp:260
+#: src/libslic3r/PrintConfig.cpp:294
 msgid "Colorprint height"
 msgstr "Altezza Colorprint"
 
-#: src/libslic3r/PrintConfig.cpp:990
+#: src/libslic3r/PrintConfig.cpp:1034
 msgid "Combine infill every"
 msgstr "Combina riempimento ogni"
 
-#: src/libslic3r/PrintConfig.cpp:995
+#: src/libslic3r/PrintConfig.cpp:1039
 msgid "Combine infill every n layers"
 msgstr "Combina riempimento ogni n layer"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:148
 msgid "Commands"
 msgstr "Comandi"
 
@@ -1262,23 +1565,23 @@ msgstr "Comandi"
 msgid "Comment:"
 msgstr "Commento:"
 
-#: src/slic3r/GUI/Tab.cpp:56 src/libslic3r/PrintConfig.cpp:280
+#: src/slic3r/GUI/Tab.cpp:107 src/libslic3r/PrintConfig.cpp:314
 msgid "Compatible print profiles"
 msgstr "Profili di stampa compatibili"
 
-#: src/libslic3r/PrintConfig.cpp:286
+#: src/libslic3r/PrintConfig.cpp:320
 msgid "Compatible print profiles condition"
 msgstr "Condizioni profili di stampa compatibili"
 
-#: src/slic3r/GUI/Tab.cpp:50 src/libslic3r/PrintConfig.cpp:265
+#: src/slic3r/GUI/Tab.cpp:101 src/libslic3r/PrintConfig.cpp:299
 msgid "Compatible printers"
 msgstr "Stampanti compatibili"
 
-#: src/libslic3r/PrintConfig.cpp:271
+#: src/libslic3r/PrintConfig.cpp:305
 msgid "Compatible printers condition"
 msgstr "Condizioni di stampante compatibile"
 
-#: src/libslic3r/PrintConfig.cpp:304
+#: src/libslic3r/PrintConfig.cpp:338
 msgid "Complete individual objects"
 msgstr "Completa singoli oggetti"
 
@@ -1286,27 +1589,27 @@ msgstr "Completa singoli oggetti"
 msgid "Completed"
 msgstr "Completato"
 
-#: src/libslic3r/Zipper.cpp:54
+#: src/libslic3r/miniz_extension.cpp:113
 msgid "compression failed"
 msgstr "compressione fallita"
 
-#: src/libslic3r/PrintConfig.cpp:426 src/libslic3r/PrintConfig.cpp:849
+#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:887
 msgid "Concentric"
 msgstr "Concentrico"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2110
+#: src/slic3r/GUI/ConfigWizard.cpp:2625
 msgid "Configuration &Assistant"
 msgstr "&Assistente Configurazione"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2113
+#: src/slic3r/GUI/ConfigWizard.cpp:2628
 msgid "Configuration &Wizard"
 msgstr "Co&nfigurazione guidata"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2109
+#: src/slic3r/GUI/ConfigWizard.cpp:2624
 msgid "Configuration Assistant"
 msgstr "Assistente configurazione"
 
-#: src/libslic3r/PrintConfig.cpp:1316
+#: src/libslic3r/PrintConfig.cpp:1424
 msgid "Configuration notes"
 msgstr "Note di configurazione"
 
@@ -1322,11 +1625,15 @@ msgstr "Aggiornamento di configurazione"
 msgid "Configuration update is available"
 msgstr "Aggiornamento di configurazione disponibile"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "Configuration update is available."
+msgstr "Aggiornamento di configurazione disponibile."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "Configuration updates"
 msgstr "Aggiornamenti di configurazione"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2112
+#: src/slic3r/GUI/ConfigWizard.cpp:2627
 msgid "Configuration Wizard"
 msgstr "Configurazione Guidata"
 
@@ -1334,15 +1641,11 @@ msgstr "Configurazione Guidata"
 msgid "Confirmation"
 msgstr "Conferma"
 
-#: src/slic3r/GUI/Tab.cpp:1931
-msgid "Connection failed."
-msgstr "Connessione fallita."
-
-#: src/slic3r/GUI/Tab.cpp:3627
+#: src/slic3r/GUI/Tab.cpp:4046
 msgid "Connection of the support sticks and junctions"
 msgstr "Connessione delle barre di supporto e giunzioni"
 
-#: src/slic3r/Utils/AstroBox.cpp:83
+#: src/slic3r/Utils/AstroBox.cpp:84
 msgid "Connection to AstroBox works correctly."
 msgstr "La connessione ad AstroBox funziona correttamente."
 
@@ -1358,124 +1661,136 @@ msgstr "Connessione a FlashAir correttamente funzionante e caricamento abilitato
 msgid "Connection to OctoPrint works correctly."
 msgstr "Connessione con OctoPrint funzionante."
 
-#: src/slic3r/GUI/Tab.cpp:1928
-msgid "Connection to printer works correctly."
-msgstr "Connessione con la stampante funzionante."
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:260
+msgid "Connection to printers connected via the print host failed."
+msgstr "Collegamento alle stampanti collegate tramite l'host di stampa fallito."
 
-#: src/slic3r/Utils/OctoPrint.cpp:176
+#: src/slic3r/Utils/OctoPrint.cpp:185
 msgid "Connection to Prusa SL1 works correctly."
 msgstr "La connessione a Prusa SL1 funziona correttamente."
 
-#: src/libslic3r/PrintConfig.cpp:1909
+#: src/libslic3r/PrintConfig.cpp:2051
 msgid "Contact Z distance"
 msgstr "Distanza di contatto Z"
 
-#: src/slic3r/GUI/AboutDialog.cpp:261
+#: src/slic3r/GUI/AboutDialog.cpp:286
 msgid "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and numerous others."
 msgstr "Con il contributo di Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik e molti altri."
 
-#: src/libslic3r/PrintConfig.cpp:2659
+#: src/slic3r/GUI/GUI_App.cpp:245
+msgid "Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others."
+msgstr "Contributi di Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik e molti altri."
+
+#: src/libslic3r/PrintConfig.cpp:2823
 msgid "Controls the bridge type between two neighboring pillars. Can be zig-zag, cross (double zig-zag) or dynamic which will automatically switch between the first two depending on the distance of the two pillars."
 msgstr "Controlla il tipo di bridge tra due pilastri adiacenti. Può essere zig-zag, croce (doppio zig-zag) o dinamico, che passerà automaticamente tra i due a seconda della distanza tra i due pilastri."
 
-#: src/slic3r/GUI/Tab.cpp:1444
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4886
+msgid "Convert from imperial units"
+msgstr "Convertire da unità imperiali"
+
+#: src/slic3r/GUI/Tab.cpp:1790
 msgid "Cooling"
 msgstr "Raffreddamento"
 
-#: src/libslic3r/PrintConfig.cpp:660
+#: src/libslic3r/PrintConfig.cpp:696
 msgid "Cooling moves are gradually accelerating beginning at this speed."
 msgstr "I movimenti di raffreddamento accelerano gradualmente partendo da questa velocità."
 
-#: src/libslic3r/PrintConfig.cpp:679
+#: src/libslic3r/PrintConfig.cpp:715
 msgid "Cooling moves are gradually accelerating towards this speed."
 msgstr "I movimenti di raffreddamento accelerano gradualmente verso questa velocità."
 
-#: src/slic3r/GUI/Tab.cpp:1465
+#: src/slic3r/GUI/Tab.cpp:1811
 msgid "Cooling thresholds"
 msgstr "Soglie di raffreddamento"
 
-#: src/libslic3r/PrintConfig.cpp:327
+#: src/libslic3r/PrintConfig.cpp:361
 msgid "Cooling tube length"
 msgstr "Lunghezza del tubo di raffreddamento"
 
-#: src/libslic3r/PrintConfig.cpp:319
+#: src/libslic3r/PrintConfig.cpp:353
 msgid "Cooling tube position"
 msgstr "Posizione tubo di raffreddamento"
 
-#: src/slic3r/GUI/Plater.cpp:4752
+#: src/slic3r/GUI/Plater.cpp:4856
 msgid "Copies of the selected object"
 msgstr "Copie dell'oggetto selezionato"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4505
+#: src/slic3r/GUI/GLCanvas3D.cpp:4871
 msgid "Copy"
 msgstr "Copia"
 
-#: src/slic3r/GUI/MainFrame.cpp:589
+#: src/slic3r/GUI/MainFrame.cpp:1195
 msgid "Copy selection to clipboard"
 msgstr "Copia selezione negli appunti"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
 msgid "Copy to clipboard"
 msgstr "Copia negli appunti"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:154
+#: src/slic3r/GUI/SysInfoDialog.cpp:177
 msgid "Copy to Clipboard"
 msgstr "Copia negli appunti"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:121
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
 msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
 msgstr "Copia del G-code temporaneo completata ma non è stato possibile aprire il codice esportato durante il controllo copia. Il G-code di output è su %1%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:118
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:153
 msgid "Copying of the temporary G-code has finished but the original code at %1% couldn't be opened during copy check. The output G-code is at %2%.tmp."
 msgstr "Copia del G-code temporaneo completata ma non è stato possibile aprire  il codice originale su %1% durante il controllo copia. Il G-code di output è su %2%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:480
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:522
 msgid "Copying of the temporary G-code to the output G-code failed"
 msgstr "Copia del G-code temporaneo nel G-code di output non riuscita"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:109
-msgid "Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?"
-msgstr "Copia del G-code temporaneo nel G-code di output non riuscita. Forse la scheda SD ha la sicura per la scrittura?"
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+msgid ""
+"Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\n"
+"Error message: %1%"
+msgstr ""
+"Copia del G-code temporaneo sul G-code di uscita non riuscita. Forse la scheda SD è bloccata in scrittura?\n"
+"Messaggio di errore: %1%"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:112
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:147
 msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
 msgstr "Copia del G-code temporaneo nel G-code di output non riuscita. Potrebbe esserci un problema nel dispositivo di destinazione, prova una nuova esportazione con un dispositivo diverso. Il file G-code corrotto è su %1%.tmp."
 
-#: src/slic3r/GUI/AboutDialog.cpp:127 src/slic3r/GUI/AboutDialog.cpp:256
+#: src/slic3r/GUI/AboutDialog.cpp:139 src/slic3r/GUI/AboutDialog.cpp:281
 msgid "Copyright"
 msgstr "Copyright"
 
-#: src/libslic3r/PrintConfig.cpp:2571 src/libslic3r/PrintConfig.cpp:2572
+#: src/libslic3r/PrintConfig.cpp:2714 src/libslic3r/PrintConfig.cpp:2715
 msgid "Correction for expansion"
 msgstr "Correzione dell'espansione"
 
-#: src/slic3r/GUI/Tab.cpp:2100 src/slic3r/GUI/Tab.cpp:3519
+#: src/slic3r/GUI/Tab.cpp:2270 src/slic3r/GUI/Tab.cpp:3935
 msgid "Corrections"
 msgstr "Correzioni"
 
-#: src/slic3r/GUI/Plater.cpp:1243 src/libslic3r/PrintConfig.cpp:760
-#: src/libslic3r/PrintConfig.cpp:2510 src/libslic3r/PrintConfig.cpp:2511
+#: src/slic3r/GUI/Plater.cpp:1158 src/libslic3r/PrintConfig.cpp:796
+#: src/libslic3r/PrintConfig.cpp:2653 src/libslic3r/PrintConfig.cpp:2654
 msgid "Cost"
 msgstr "Costo"
 
-#: src/slic3r/GUI/Plater.cpp:239
+#: src/slic3r/GUI/Plater.cpp:245
 msgid "Cost (money)"
 msgstr "Costo (soldi)"
 
-#: src/slic3r/GUI/Plater.cpp:2835
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:176
 msgid "Could not arrange model objects! Some geometries may be invalid."
 msgstr "Non è stato possibile disporre gli oggetti! Alcune geometrie potrebbero essere non valide."
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/Utils/AstroBox.cpp:90
 msgid "Could not connect to AstroBox"
 msgstr "Impossibile connettere ad AstroBox"
 
-#: src/slic3r/Utils/Duet.cpp:54
+#: src/slic3r/Utils/Duet.cpp:55
 msgid "Could not connect to Duet"
 msgstr "Connessione a Duet fallita"
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:74
 msgid "Could not connect to FlashAir"
 msgstr "Impossibile connettersi a FlashAir"
 
@@ -1483,56 +1798,69 @@ msgstr "Impossibile connettersi a FlashAir"
 msgid "Could not connect to OctoPrint"
 msgstr "Impossibile connettersi ad OctoPrint"
 
-#: src/slic3r/Utils/OctoPrint.cpp:181
+#: src/slic3r/Utils/OctoPrint.cpp:191
 msgid "Could not connect to Prusa SLA"
 msgstr "Connessione a Prusa SLA fallita"
 
-#: src/slic3r/GUI/Tab.cpp:1687
+#: src/slic3r/Utils/Http.cpp:73
+msgid "Could not detect system SSL certificate store. PrusaSlicer will be unable to establish secure network connections."
+msgstr "Impossibile rilevare archivio di certificati SSL di sistema. PrusaSlicer non sarà in grado di stabilire connessioni di rete sicure."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:289
 msgid "Could not get a valid Printer Host reference"
 msgstr "Impossibile ottenere un riferimento Host Stampante valido"
 
-#: src/slic3r/Utils/Duet.cpp:134
+#: src/slic3r/Utils/Duet.cpp:136
 msgid "Could not get resources to create a new connection"
 msgstr "Non sono state trovate le risorse per stabilire una nuova connessione"
 
-#: src/libslic3r/PrintConfig.cpp:1959
+#: src/libslic3r/PrintConfig.cpp:2101
 msgid "Cover the top contact layer of the supports with loops. Disabled by default."
 msgstr "Copre con anelli il layer superiore del supporto a contatto. Disattivato per impostazione predefinita."
 
-#: src/libslic3r/PrintConfig.cpp:89
+#: src/libslic3r/PrintConfig.cpp:91
 msgid "Cracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low."
 msgstr "Le fratture più piccole di 2 volte il gap closing radius vengono riempite durante lo slicing del mesh triangolare. L'operazione potrebbe ridurre la risoluzione finale di stampa, dunque è preferibile settare il valore ragionevolmente basso."
 
-#: src/libslic3r/Zipper.cpp:58
+#: src/libslic3r/miniz_extension.cpp:117
 msgid "CRC-32 check failed"
 msgstr "verifica CRC-32 fallita"
 
-#: src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:3021
 msgid "Create pad around object and ignore the support elevation"
 msgstr "Genera Pad intorno all'oggetto ed ignora l'elevazione del supporto"
 
-#: src/libslic3r/PrintConfig.cpp:2724
+#: src/libslic3r/PrintConfig.cpp:2888
 msgid "Critical angle"
 msgstr "Angolo critico"
 
-#: src/libslic3r/PrintConfig.cpp:2668
+#: src/libslic3r/PrintConfig.cpp:2832
 msgid "Cross"
 msgstr "Croce"
 
-#: src/libslic3r/PrintConfig.cpp:847
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:225
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:203
+msgid "Ctrl + Mouse wheel"
+msgstr "Ctrl + Rotella del mouse"
+
+#: src/libslic3r/PrintConfig.cpp:885
 msgid "Cubic"
 msgstr "Cubico"
 
-#: src/slic3r/GUI/wxExtensions.cpp:704
-#, possible-c-format
+#: src/slic3r/Utils/Http.cpp:91
+msgid "CURL init has failed. PrusaSlicer will be unable to establish network connections. See logs for additional details."
+msgstr "CURL init non riuscito. PrusaSlicer non sarà in grado di stabilire connessioni di rete. Vedere i log per ulteriori dettagli."
+
+#: src/slic3r/GUI/wxExtensions.cpp:624
+#, c-format
 msgid "Current mode is %s"
 msgstr "La modalità corrente è %s"
 
-#: src/slic3r/GUI/Tab.cpp:959
+#: src/slic3r/GUI/Tab.cpp:1278
 msgid "Current preset is inherited from"
 msgstr "Il preset corrente è ereditato da"
 
-#: src/slic3r/GUI/Tab.cpp:957
+#: src/slic3r/GUI/Tab.cpp:1276
 msgid "Current preset is inherited from the default preset."
 msgstr "Il preset attuale è stato ereditato dal preset predefinito."
 
@@ -1540,480 +1868,527 @@ msgstr "Il preset attuale è stato ereditato dal preset predefinito."
 msgid "Current version:"
 msgstr "Versione corrente:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:98 src/slic3r/GUI/GUI_Preview.cpp:249
-#: src/libslic3r/ExtrusionEntity.cpp:322
+#: src/slic3r/GUI/BedShapeDialog.cpp:143 src/slic3r/GUI/GUI_Preview.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:327 src/libslic3r/ExtrusionEntity.cpp:362
 msgid "Custom"
 msgstr "Personalizzato"
 
-#: src/libslic3r/PrintConfig.cpp:112
+#: src/libslic3r/PrintConfig.cpp:114
 msgid "Custom CA certificate file can be specified for HTTPS OctoPrint connections, in crt/pem format. If left blank, the default OS CA certificate repository is used."
 msgstr "Può essere specificato il file del certificato CA personalizzato per le connessioni OctoPrint HTTPS, in formato crt/pem. Se lasciato in bianco, verrà utilizzato lo OS CA certificate repository predefinito."
 
-#: src/slic3r/GUI/Tab.cpp:1527 src/slic3r/GUI/Tab.cpp:1975
+#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2160
+#: src/libslic3r/PrintConfig.cpp:1978
 msgid "Custom G-code"
 msgstr "G-code personalizzato"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1619
+#: src/slic3r/GUI/DoubleSlider.cpp:1815
 msgid "Custom G-code on current layer (%1% mm)."
 msgstr "G-code personalizzato al layer attuale (%1% mm)."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/GCodeViewer.cpp:2580 src/slic3r/GUI/GUI_Preview.cpp:1477
+msgid "Custom G-codes"
+msgstr "G-code personalizzati"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer"
 msgstr "Stampante Personalizzata"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer Setup"
 msgstr "Setup Stampante Personalizzata"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:736
+#: src/slic3r/GUI/ConfigWizard.cpp:1095
 msgid "Custom profile name:"
 msgstr "Nome profilo personalizzato:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:42
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:144 src/libslic3r/PrintConfig.cpp:3402
+#: src/slic3r/GUI/DoubleSlider.cpp:1135
+msgid "Custom template (\"%1%\")"
+msgstr "Modello personalizzato (\"%1%\")"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:146 src/libslic3r/PrintConfig.cpp:3601
 msgid "Cut"
 msgstr "Taglia"
 
-#: src/slic3r/GUI/Plater.cpp:4786
+#: src/slic3r/GUI/Plater.cpp:4921
 msgid "Cut by Plane"
 msgstr "Taglia sul Piano"
 
-#: src/libslic3r/PrintConfig.cpp:3403
+#: src/libslic3r/PrintConfig.cpp:3602
 msgid "Cut model at the given Z."
 msgstr "Taglia il modello al dato Z."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Cylinder"
 msgstr "Cilindro"
 
-#: src/slic3r/GUI/MainFrame.cpp:568
+#: src/slic3r/GUI/MainFrame.cpp:1174
 msgid "D&eselect all"
 msgstr "D&eseleziona tutto"
 
-#: src/libslic3r/PrintConfig.cpp:3504
+#: src/libslic3r/PrintConfig.cpp:3709
 msgid "Data directory"
 msgstr "Directory dati"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:313
+#: src/slic3r/GUI/Mouse3DController.cpp:300
 msgid "Deadzone:"
 msgstr "Zona morta:"
 
-#: src/libslic3r/Zipper.cpp:52
+#: src/libslic3r/miniz_extension.cpp:111
 msgid "decompression failed or archive is corrupted"
 msgstr "decompressione non riuscita o archivio corrotto"
 
-#: src/slic3r/GUI/Plater.cpp:4720
+#: src/slic3r/GUI/Plater.cpp:4824
 msgid "Decrease Instances"
 msgstr "Diminuisci Istanze"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1704 src/libslic3r/PrintConfig.cpp:335
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1832 src/libslic3r/PrintConfig.cpp:369
 msgid "Default"
 msgstr "Predefinito"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:457 src/slic3r/GUI/GUI_ObjectList.cpp:469
-#: src/slic3r/GUI/GUI_ObjectList.cpp:917 src/slic3r/GUI/GUI_ObjectList.cpp:3967
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3977
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4012
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:200
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:257
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:282
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:490
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:1753
+#: src/slic3r/GUI/ExtraRenderers.cpp:297 src/slic3r/GUI/GUI_ObjectList.cpp:496
+#: src/slic3r/GUI/GUI_ObjectList.cpp:508 src/slic3r/GUI/GUI_ObjectList.cpp:1015
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4454
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4464
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4499
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:202
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:259
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:284
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:492
 msgid "default"
 msgstr "predefinito"
 
-#: src/libslic3r/PrintConfig.cpp:777
+#: src/libslic3r/PrintConfig.cpp:813
 msgid "Default base angle for infill orientation. Cross-hatching will be applied to this. Bridges will be infilled using the best direction Slic3r can detect, so this setting does not affect them."
 msgstr "Angolo base predefinito per l'orientamento del riempimento. Su questo verrà applicato il tratteggio. I bridge saranno riempiti utilizzando la migliore direzione che Slic3r riesce a determinare, quindi questa impostazione non influisce sui bridge."
 
-#: src/libslic3r/PrintConfig.cpp:554
+#: src/slic3r/GUI/GCodeViewer.cpp:2289
+msgid "Default color"
+msgstr "Colore predefinito"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2313
+msgid "default color"
+msgstr "colore predefinito"
+
+#: src/libslic3r/PrintConfig.cpp:590
 msgid "Default extrusion width"
 msgstr "Larghezza estrusione predefinita"
 
-#: src/slic3r/GUI/Tab.cpp:987
+#: src/slic3r/GUI/Tab.cpp:1305
 msgid "default filament profile"
 msgstr "profilo filamento predefinito"
 
-#: src/libslic3r/PrintConfig.cpp:345
+#: src/libslic3r/PrintConfig.cpp:379
 msgid "Default filament profile"
 msgstr "Profilo filamento predefinito"
 
-#: src/libslic3r/PrintConfig.cpp:346
+#: src/libslic3r/PrintConfig.cpp:380
 msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
 msgstr "Profilo filamento predefinito associato al profilo stampante corrente. Quando si seleziona il profilo stampante corrente, questo profilo filamento verrà attivato."
 
-#: src/slic3r/GUI/Tab.cpp:2919
-#, possible-c-format
-msgid "Default preset (%s)"
-msgstr "Preset predefinito (%s)"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:904 src/slic3r/GUI/GLCanvas3D.cpp:933
+#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
 msgid "Default print color"
 msgstr "Colore di stampa predefinito"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1302
 msgid "default print profile"
 msgstr "profilo di stampa predefinito"
 
-#: src/libslic3r/PrintConfig.cpp:352
+#: src/libslic3r/PrintConfig.cpp:386
 msgid "Default print profile"
 msgstr "Profilo di stampa predefinito"
 
-#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:2592
-#: src/libslic3r/PrintConfig.cpp:2603
+#: src/libslic3r/PrintConfig.cpp:387 src/libslic3r/PrintConfig.cpp:2735
+#: src/libslic3r/PrintConfig.cpp:2746
 msgid "Default print profile associated with the current printer profile. On selection of the current printer profile, this print profile will be activated."
 msgstr "Profilo di stampa predefinito associato al profilo stampante corrente. Alla selezione del profilo stampante corrente, questo profilo di stampa verrà attivato."
 
-#: src/slic3r/GUI/Tab.cpp:1001
+#: src/slic3r/GUI/Tab.cpp:1319
 msgid "default SLA material profile"
 msgstr "profilo materiale SLA predefinito"
 
-#: src/libslic3r/PrintConfig.cpp:2591 src/libslic3r/PrintConfig.cpp:2602
+#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2745
 msgid "Default SLA material profile"
 msgstr "Profilo materiale SLA predefinito"
 
-#: src/slic3r/GUI/Tab.cpp:1005
+#: src/slic3r/GUI/Tab.cpp:1323
 msgid "default SLA print profile"
 msgstr "profilo di stampa SLA predefinito"
 
-#: src/slic3r/GUI/Field.cpp:136
+#: src/slic3r/GUI/Field.cpp:184
 msgid "default value"
 msgstr "valore predefinito"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:734
+#: src/slic3r/GUI/ConfigWizard.cpp:1093
 msgid "Define a custom printer profile"
 msgstr "Inserisci un profilo stampante personalizzato"
 
-#: src/libslic3r/PrintConfig.cpp:2798
+#: src/libslic3r/PrintConfig.cpp:2962
 msgid "Defines the pad cavity depth. Set to zero to disable the cavity. Be careful when enabling this feature, as some resins may produce an extreme suction effect inside the cavity, which makes peeling the print off the vat foil difficult."
 msgstr "Definisce la profondità della cavità nel pad. Imposta a zero per disattivare la cavità. Fai attenzione ad attivare questa funzione in quanto alcune resine possono causare un effetto ventosa dentro la cavità il che renderà difficile il distacco della stampa dal foglio del vat."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:346
+#: src/slic3r/GUI/GUI_ObjectList.cpp:393
 msgid "degenerate facets"
 msgstr "facce degenerate"
 
-#: src/libslic3r/PrintConfig.cpp:640
+#: src/libslic3r/PrintConfig.cpp:676
 msgid "Delay after unloading"
 msgstr "Ritardo dopo lo scarico"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "delete"
 msgstr "elimina"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4475 src/slic3r/GUI/GUI_ObjectList.cpp:1718
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/GLCanvas3D.cpp:4841 src/slic3r/GUI/GUI_ObjectList.cpp:1846
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Delete"
 msgstr "Elimina"
 
-#: src/slic3r/GUI/MainFrame.cpp:575
+#: src/slic3r/GUI/MainFrame.cpp:1181
 msgid "Delete &all"
 msgstr "Elimin&a tutto"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4484 src/slic3r/GUI/KBShortcutsDialog.cpp:129
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/GLCanvas3D.cpp:4850 src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "Delete all"
 msgstr "Elimina tutto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2176
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2341
 msgid "Delete All Instances from Object"
 msgstr "Elimina Tutte le Istanze dall'Oggetto"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1516
+#: src/slic3r/GUI/DoubleSlider.cpp:1708
 msgid "Delete color change"
 msgstr "Elimina il cambio colore"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
 msgid "Delete color change marker for current layer"
 msgstr "Elimina il segnale di cambio colore per il layer corrente"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1519
+#: src/slic3r/GUI/DoubleSlider.cpp:1711
 msgid "Delete custom G-code"
 msgstr "Elimina G-code personalizzato"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:539
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:424
 msgid "Delete drainage hole"
 msgstr "Elimina foro di drenaggio"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2192
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2357
 msgid "Delete Height Range"
 msgstr "Elimina Intervallo Altezza"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2246
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
 msgid "Delete Instance"
 msgstr "Elimina Istanza"
 
-#: src/slic3r/GUI/Plater.cpp:2712
+#: src/slic3r/GUI/Plater.cpp:2673
 msgid "Delete Object"
 msgstr "Elimina Oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:101
-#, possible-c-format
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:104
+#, c-format
 msgid "Delete Option %s"
 msgstr "Elimina Opzione %s"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1518
+#: src/slic3r/GUI/DoubleSlider.cpp:1710
 msgid "Delete pause print"
 msgstr "Elimina pausa stampa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
+#: src/slic3r/GUI/PresetComboBoxes.cpp:652
+msgid "Delete physical printer"
+msgstr "Elimina stampante fisica"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:659
+msgid "Delete Physical Printer"
+msgstr "Elimina stampante fisica"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:123
 msgid "Delete selected"
 msgstr "Elimina selezionato"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2830
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3221
 msgid "Delete Selected"
 msgstr "Elimina Selezionati"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2693
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3083
 msgid "Delete Selected Item"
 msgstr "Elimina l'elemento selezionato"
 
-#: src/slic3r/GUI/Plater.cpp:4677
+#: src/slic3r/GUI/Plater.cpp:4782
 msgid "Delete Selected Objects"
 msgstr "Elimina Oggetti Selezionati"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2319
 msgid "Delete Settings"
 msgstr "Elimina Impostazioni"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2227
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2393
 msgid "Delete Subobject"
 msgstr "Elimina Sotto-oggetto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:631
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:514
 msgid "Delete support point"
 msgstr "Elimina punto di supporto"
 
-#: src/slic3r/GUI/Tab.cpp:134
+#: src/slic3r/GUI/Tab.cpp:204
 msgid "Delete this preset"
 msgstr "Elimina questo preset"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1035
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:55
+msgid "Delete this preset from this printer device"
+msgstr "Elimina questo preset da questa stampante"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1160
 msgid "Delete tick mark - Left click or press \"-\" key"
 msgstr "Elimina il segno di spunta - Clic sinistro o premi il tasto \"-\""
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1517
+#: src/slic3r/GUI/DoubleSlider.cpp:1709
 msgid "Delete tool change"
 msgstr "Elimina cambio attrezzo"
 
-#: src/slic3r/GUI/MainFrame.cpp:576
+#: src/slic3r/GUI/MainFrame.cpp:1182
 msgid "Deletes all objects"
 msgstr "Elimina tutti gli oggetti"
 
-#: src/slic3r/GUI/MainFrame.cpp:573
+#: src/slic3r/GUI/MainFrame.cpp:1179
 msgid "Deletes the current selection"
 msgstr "Elimina la selezione corrente"
 
-#: src/libslic3r/PrintConfig.cpp:717 src/libslic3r/PrintConfig.cpp:2503
-#: src/libslic3r/PrintConfig.cpp:2504
+#: src/libslic3r/PrintConfig.cpp:753 src/libslic3r/PrintConfig.cpp:2646
+#: src/libslic3r/PrintConfig.cpp:2647
 msgid "Density"
 msgstr "Densità"
 
-#: src/libslic3r/PrintConfig.cpp:791
+#: src/libslic3r/PrintConfig.cpp:827
 msgid "Density of internal infill, expressed in the range 0% - 100%."
 msgstr "Densità del riempimento interno, espresso nell'intervallo 0% - 100%."
 
-#: src/slic3r/GUI/Tab.cpp:1258 src/slic3r/GUI/Tab.cpp:1548
-#: src/slic3r/GUI/Tab.cpp:2019 src/slic3r/GUI/Tab.cpp:2135
-#: src/slic3r/GUI/Tab.cpp:3543 src/slic3r/GUI/Tab.cpp:3671
+#: src/slic3r/GUI/Tab.cpp:1588 src/slic3r/GUI/Tab.cpp:1895
+#: src/slic3r/GUI/Tab.cpp:2228 src/slic3r/GUI/Tab.cpp:2304
+#: src/slic3r/GUI/Tab.cpp:3959 src/slic3r/GUI/Tab.cpp:4090
 msgid "Dependencies"
 msgstr "Dipendenze"
 
-#: src/libslic3r/PrintConfig.cpp:1612 src/libslic3r/PrintConfig.cpp:1613
+#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1721
 msgid "Deretraction Speed"
 msgstr "Velocità di deretrazione"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
+#: src/slic3r/GUI/GCodeViewer.cpp:2529 src/slic3r/GUI/GUI_Preview.cpp:337
+#: src/slic3r/GUI/GUI_Preview.cpp:1473
+msgid "Deretractions"
+msgstr "De-retrazioni"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:172
+msgid "Descriptive name for the printer"
+msgstr "Nome descrittivo della stampante"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:122
 msgid "Deselect all"
 msgstr "Deseleziona tutto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Deselect by rectangle"
 msgstr "Deseleziona con rettangolo"
 
-#: src/slic3r/GUI/MainFrame.cpp:569
+#: src/slic3r/GUI/MainFrame.cpp:1175
 msgid "Deselects all objects"
 msgstr "Deseleziona tutti gli oggetti"
 
-#: src/slic3r/GUI/Tab.cpp:963
+#: src/slic3r/GUI/Tab.cpp:1224
 msgid "Detach from system preset"
 msgstr "Distacco dal preset di sistema"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1246
 msgid "Detach preset"
 msgstr "Preset distacco"
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/Tab.cpp:3323
 msgid "Detached"
 msgstr "Distaccato"
 
-#: src/libslic3r/PrintConfig.cpp:1373
+#: src/libslic3r/PrintConfig.cpp:1481
 msgid "Detect bridging perimeters"
 msgstr "Rileva perimetri ponte (bridge)"
 
-#: src/libslic3r/PrintConfig.cpp:2075
+#: src/libslic3r/PrintConfig.cpp:2218
 msgid "Detect single-width walls (parts where two extrusions don't fit and we need to collapse them into a single trace)."
 msgstr "Rileva pareti a spessore singolo (parti in cui non entrano due estrusioni ed è necessario comprimerle in una singola traccia)."
 
-#: src/libslic3r/PrintConfig.cpp:2073
+#: src/libslic3r/PrintConfig.cpp:2216
 msgid "Detect thin walls"
 msgstr "Rileva perimetri sottili"
 
-#: src/libslic3r/PrintConfig.cpp:3472
+#: src/libslic3r/PrintConfig.cpp:3671
 msgid "Detect unconnected parts in the given model(s) and split them into separate objects."
 msgstr "Rileva parti non connesse nel modello(i) dato e le divide in oggetti separati."
 
-#: src/slic3r/GUI/Plater.cpp:2368
+#: src/slic3r/GUI/Plater.cpp:2330
 msgid "Detected advanced data"
 msgstr "Rilevati dati avanzati"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:289
+#: src/slic3r/GUI/Mouse3DController.cpp:274
 msgid "Device:"
 msgstr "Dispositivo:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:93 src/libslic3r/PrintConfig.cpp:709
+#: src/slic3r/GUI/BedShapeDialog.cpp:95 src/libslic3r/PrintConfig.cpp:745
 msgid "Diameter"
 msgstr "Diametro"
 
-#: src/libslic3r/PrintConfig.cpp:2694
+#: src/libslic3r/PrintConfig.cpp:2858
 msgid "Diameter in mm of the pillar base"
 msgstr "Diametro in mm della base del pilastro"
 
-#: src/libslic3r/PrintConfig.cpp:2650
+#: src/libslic3r/PrintConfig.cpp:2793
 msgid "Diameter in mm of the support pillars"
 msgstr "Diametro in mm dei pilastri di supporto"
 
-#: src/libslic3r/PrintConfig.cpp:2622
+#: src/libslic3r/PrintConfig.cpp:2765
 msgid "Diameter of the pointing side of the head"
 msgstr "Diametro del lato di puntamento della testa"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:94
+#: src/slic3r/GUI/BedShapeDialog.cpp:131
 msgid "Diameter of the print bed. It is assumed that origin (0,0) is located in the center."
 msgstr "Diametro del piano di stampa. Si presume che l'origine (0,0) si trovi al centro."
 
-#: src/libslic3r/PrintConfig.cpp:1639
+#: src/libslic3r/PrintConfig.cpp:1747
 msgid "Direction"
 msgstr "Direzione"
 
-#: src/libslic3r/PrintConfig.cpp:359
+#: src/libslic3r/PrintConfig.cpp:393
 msgid "Disable fan for the first"
 msgstr "Disattiva ventola per i primi"
 
-#: src/libslic3r/PrintConfig.cpp:1349
+#: src/libslic3r/PrintConfig.cpp:1457
 msgid "Disables retraction when the travel path does not exceed the upper layer's perimeters (and thus any ooze will be probably invisible)."
 msgstr "Disabilita la retrazione quando la traiettoria del movimento non oltrepassa i perimetri del layer superiore (pertanto qualunque scolatura sarà probabilmente invisibile)."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:952
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:641
+msgid "Discard"
+msgstr "Annulla"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1066
 msgid "Discard all custom changes"
 msgstr "Elimina tutte le modifiche personalizzate"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1375
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222
 msgid "Discard changes"
 msgstr "Annulla modifiche"
 
-#: src/slic3r/GUI/GUI_App.cpp:932 src/slic3r/GUI/Tab.cpp:2946
-msgid "Discard changes and continue anyway?"
-msgstr "Eliminare le modifiche e continuare comunque?"
-
-#: src/slic3r/GUI/Tab.cpp:2078
+#: src/slic3r/GUI/Tab.cpp:2248
 msgid "Display"
 msgstr "Display"
 
-#: src/libslic3r/PrintConfig.cpp:2359
+#: src/libslic3r/PrintConfig.cpp:2502
 msgid "Display height"
 msgstr "Altezza display"
 
-#: src/libslic3r/PrintConfig.cpp:2378
+#: src/libslic3r/PrintConfig.cpp:2521
 msgid "Display horizontal mirroring"
 msgstr "Mostra mirroring orizzontale"
 
-#: src/libslic3r/PrintConfig.cpp:2392
+#: src/libslic3r/PrintConfig.cpp:2535
 msgid "Display orientation"
 msgstr "Orientamento display"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Display the Print Host Upload Queue window"
 msgstr "Mostra la finestra della fila di caricamento all'host di stampa"
 
-#: src/libslic3r/PrintConfig.cpp:2385
+#: src/libslic3r/PrintConfig.cpp:2528
 msgid "Display vertical mirroring"
 msgstr "Mostra mirroring verticale"
 
-#: src/libslic3r/PrintConfig.cpp:2353
+#: src/libslic3r/PrintConfig.cpp:2496
 msgid "Display width"
 msgstr "Larghezza display"
 
-#: src/libslic3r/PrintConfig.cpp:377
+#: src/libslic3r/PrintConfig.cpp:411
 msgid "Distance between copies"
 msgstr "Distanza tra le copie"
 
-#: src/libslic3r/PrintConfig.cpp:1680
+#: src/libslic3r/PrintConfig.cpp:1157
+msgid "Distance between ironing lines"
+msgstr "Distanza tra le linee di stiratura"
+
+#: src/libslic3r/PrintConfig.cpp:1788
 msgid "Distance between skirt and object(s). Set this to zero to attach the skirt to the object(s) and get a brim for better adhesion."
 msgstr "La distanza tra skirt e oggetto(i). Imposta questo valore a zero per unire lo skirt all'oggetto(i) e ottenere un brim per una migliore adesione."
 
-#: src/libslic3r/PrintConfig.cpp:2882
+#: src/libslic3r/PrintConfig.cpp:3046
 msgid "Distance between two connector sticks which connect the object and the generated pad."
 msgstr "Distanza tra due barre di connessione che collegano l'oggetto e il pad generato."
 
-#: src/libslic3r/PrintConfig.cpp:1679
+#: src/libslic3r/PrintConfig.cpp:1787
 msgid "Distance from object"
 msgstr "Distanza dall'oggetto"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:85
+#: src/slic3r/GUI/BedShapeDialog.cpp:121
 msgid "Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."
 msgstr "Distanza della coordinata 0,0 del G-code dall'angolo frontale sinistro del rettangolo."
 
-#: src/libslic3r/PrintConfig.cpp:320
+#: src/libslic3r/PrintConfig.cpp:354
 msgid "Distance of the center-point of the cooling tube from the extruder tip."
 msgstr "Distanza del centro del tubo di raffreddamento dalla punta dell'estrusore."
 
-#: src/libslic3r/PrintConfig.cpp:1382
+#: src/libslic3r/PrintConfig.cpp:1490
 msgid "Distance of the extruder tip from the position where the filament is parked when unloaded. This should match the value in printer firmware."
 msgstr "Distanza della punta dell'estrusore dalla posizione dove il filamento viene posto mentre viene scaricato. Dovrebbe essere uguale al valore nel firmware della stampante."
 
-#: src/libslic3r/PrintConfig.cpp:378
+#: src/libslic3r/PrintConfig.cpp:412
 msgid "Distance used for the auto-arrange feature of the plater."
 msgstr "Distanza usata per la funzione disposizione automatica del piano."
 
-#: src/libslic3r/PrintConfig.cpp:3486
+#: src/libslic3r/PrintConfig.cpp:3685
 msgid "Do not fail if a file supplied to --load does not exist."
 msgstr "Non fallire se un file fornito a --load non esiste."
 
-#: src/libslic3r/PrintConfig.cpp:3430
+#: src/libslic3r/PrintConfig.cpp:3629
 msgid "Do not rearrange the given models before merging and keep their original XY coordinates."
 msgstr "Non disporre i modelli prima dell’unione e mantieni le coordinate XY originali."
 
-#: src/slic3r/GUI/Field.cpp:240
-#, possible-c-format
-msgid "Do you mean %s%% instead of %s %s?\nSelect YES if you want to change this value to %s%%, \nor NO if you are sure that %s %s is a correct value."
-msgstr "Intendevi %s invece di %s %s?\nSeleziona SI se vuoi cambiare il valore a %s %%,\no NO se sei sicuro che %s %s è il valore corretto."
+#: src/slic3r/GUI/Field.cpp:288
+#, c-format
+msgid ""
+"Do you mean %s%% instead of %s %s?\n"
+"Select YES if you want to change this value to %s%%, \n"
+"or NO if you are sure that %s %s is a correct value."
+msgstr ""
+"Intendevi %s invece di %s %s?\n"
+"Seleziona SI se vuoi cambiare il valore a %s %%,\n"
+"o NO se sei sicuro che %s %s è il valore corretto."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1920
+#: src/slic3r/GUI/DoubleSlider.cpp:2138
 msgid "Do you want to delete all saved tool changes?"
 msgstr "Vuoi cancellare tutti i cambi attrezzo salvati?"
 
-#: src/slic3r/GUI/GUI_App.cpp:884
+#: src/slic3r/GUI/GUI_App.cpp:1610
 msgid "Do you want to proceed?"
 msgstr "Vuoi continuare?"
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "Do you want to retry"
 msgstr "Vuoi riprovare"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1045
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:911
 msgid "Do you want to save your manually edited support points?"
 msgstr "Vuoi salvare i punti di supporto modificati manualmente?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1834
+#: src/slic3r/GUI/ConfigWizard.cpp:2261
 msgid "Do you want to select default filaments for these FFF printer models?"
 msgstr "Vuoi selezionare i filamenti predefiniti per questi modelli di stampante FFF?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1852
+#: src/slic3r/GUI/ConfigWizard.cpp:2279
 msgid "Do you want to select default SLA materials for these printer models?"
 msgstr "Vuoi selezionare i materiali SLA predefiniti per questi modelli di stampante?"
 
-#: src/libslic3r/PrintConfig.cpp:3429
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "does not contain valid gcode."
+msgstr "non contiene un g-code valido."
+
+#: src/libslic3r/PrintConfig.cpp:3628
 msgid "Don't arrange"
 msgstr "Non disporre"
 
@@ -2021,7 +2396,7 @@ msgstr "Non disporre"
 msgid "Don't notify about new releases any more"
 msgstr "Non notificare più i nuovi rilasci"
 
-#: src/libslic3r/PrintConfig.cpp:369
+#: src/libslic3r/PrintConfig.cpp:403
 msgid "Don't support bridges"
 msgstr "Non supportare i bridge"
 
@@ -2029,262 +2404,332 @@ msgstr "Non supportare i bridge"
 msgid "Downgrade"
 msgstr "Downgrade"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1803
 msgid "Draft shield"
 msgstr "Scudo di protezione"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Drag"
 msgstr "Trascina"
 
-#: src/libslic3r/SLAPrintSteps.cpp:44
-msgid "Drilling holes into model."
-msgstr "Praticare fori nel modello."
+#: src/slic3r/GUI/Plater.cpp:1406
+msgid "Drag and drop G-code file"
+msgstr "Trascina e rilascia un file G-code"
 
-#: src/libslic3r/SLAPrintSteps.cpp:199
+#: src/libslic3r/SLAPrintSteps.cpp:45
+msgid "Drilling holes into model."
+msgstr "Eseguendo i fori nel modello."
+
+#: src/libslic3r/SLAPrintSteps.cpp:201
 msgid "Drilling holes into the mesh failed. This is usually caused by broken model. Try to fix it first."
 msgstr "Applicazione dei fori nella mesh non riuscita. Questo solitamente è causato da un modello corrotto. Prova prima a sistemarlo."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:337
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:349
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:345
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357
 msgid "Drop to bed"
 msgstr "Poggia sul piano"
 
-#: src/libslic3r/PrintConfig.cpp:3433
+#: src/libslic3r/PrintConfig.cpp:3632
 msgid "Duplicate"
 msgstr "Duplica"
 
-#: src/libslic3r/PrintConfig.cpp:3438
+#: src/libslic3r/PrintConfig.cpp:3637
 msgid "Duplicate by grid"
 msgstr "Duplica per griglia"
 
-#: src/slic3r/GUI/PresetHints.cpp:40
+#: src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Duration"
+msgstr "Durata"
+
+#: src/slic3r/GUI/PresetHints.cpp:39
 msgid "During the other layers, fan"
 msgstr "Durante gli altri layer, la ventola"
 
-#: src/libslic3r/PrintConfig.cpp:2669
+#: src/libslic3r/PrintConfig.cpp:2833
 msgid "Dynamic"
 msgstr "Dinamico"
 
-#: src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1448
 msgid "E&xport"
 msgstr "Esporta"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:347
+#: src/slic3r/GUI/GUI_ObjectList.cpp:394
 msgid "edges fixed"
 msgstr "spigoli riparati"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1508
+#: src/slic3r/GUI/DoubleSlider.cpp:1700
 msgid "Edit color"
 msgstr "Modifica colore"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:960
+#: src/slic3r/GUI/DoubleSlider.cpp:1083
 msgid "Edit current color - Right click the colored slider segment"
 msgstr "Modifica colore attuale - Clic destro sul segmento colorato della barra di scorrimento"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1510
+#: src/slic3r/GUI/DoubleSlider.cpp:1702
 msgid "Edit custom G-code"
 msgstr "Modifica G-code personalizzato"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3003
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3459
 msgid "Edit Height Range"
 msgstr "Modifica Intervallo Altezza"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1509
+#: src/slic3r/GUI/DoubleSlider.cpp:1701
 msgid "Edit pause print message"
 msgstr "Modifica messaggio pausa di stampa"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1037
+#: src/slic3r/GUI/PresetComboBoxes.cpp:645
+msgid "Edit physical printer"
+msgstr "Modifica stampante fisica"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:641
+msgid "Edit preset"
+msgstr "Modifica preset"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1162
 msgid "Edit tick mark - Ctrl + Left click"
 msgstr "Modifica segno di spunta - Ctrl + Clic Sinistro"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1038
+#: src/slic3r/GUI/DoubleSlider.cpp:1163
 msgid "Edit tick mark - Right click"
 msgstr "Modifica segno di spunta - Clic destro"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:282 src/slic3r/GUI/GUI_ObjectList.cpp:394
+#: src/slic3r/GUI/GUI_ObjectList.cpp:300 src/slic3r/GUI/GUI_ObjectList.cpp:441
 msgid "Editing"
 msgstr "Modifica"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Ejec&t SD card / Flash drive"
 msgstr "Espelli Scheda SD / Memoria flash &t"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/NotificationManager.cpp:780
+msgid "Eject drive"
+msgstr "Espelli dispositivo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
 msgid "Eject SD card / Flash drive"
 msgstr "Espelli scheda SD / Memoria flash"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Eject SD card / Flash drive after the G-code was exported to it."
 msgstr "Espelli scheda SD / Memoria flash dopo l'esportazione del G-code in essa."
 
-#: src/slic3r/GUI/Plater.cpp:2202
-#, possible-c-format
+#: src/slic3r/GUI/Plater.cpp:2034
+#, c-format
 msgid "Ejecting of device %s(%s) has failed."
 msgstr "Espulsione del dispositivo %s(%s) non riuscita."
 
-#: src/libslic3r/PrintConfig.cpp:118
+#: src/libslic3r/PrintConfig.cpp:120
 msgid "Elephant foot compensation"
 msgstr "Compensazione zampa d'elefante"
 
-#: src/libslic3r/PrintConfig.cpp:2447
+#: src/libslic3r/PrintConfig.cpp:2590
 msgid "Elephant foot minimum width"
 msgstr "Larghezza minima zampa d'elefante"
 
-#: src/libslic3r/SLAPrint.cpp:625
+#: src/libslic3r/SLAPrint.cpp:639
 msgid "Elevation is too low for object. Use the \"Pad around object\" feature to print the object without elevation."
 msgstr "L'elevazione è troppo bassa per l'oggetto. Utilizza la funzione \"Pad intorno all'oggetto\" per stampare l'oggetto senza elevazione."
 
-#: src/libslic3r/PrintConfig.cpp:1093
+#: src/libslic3r/PrintConfig.cpp:1186
 msgid "Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute intervals into the G-code to let the firmware show accurate remaining time. As of now only the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 firmware supports M73 Qxx Sxx for the silent mode."
 msgstr "Inserisce M73 P[percent printed] R[remaining time in minutes] ad intervalli di un minuto nel G-code per permettere al firmware di mostrare un tempo residuo accurato. Al momento solo il firmware della Prusa i3 MK3 riconosce M73. Il firmware della i3 MK3 supporta il codice M73 Qxx Sxx anche per la modalità silenziosa."
 
-#: src/libslic3r/GCode.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1217
+msgid "Emit to G-code"
+msgstr "Invia a G-code"
+
+#: src/libslic3r/GCode.cpp:622
 msgid "Empty layers detected, the output would not be printable."
 msgstr "Rilevati layer vuoti, il file non sarà stampabile."
 
-#: src/slic3r/GUI/Tab.cpp:1445 src/libslic3r/PrintConfig.cpp:1355
-#: src/libslic3r/PrintConfig.cpp:2200
+#: src/slic3r/GUI/Tab.cpp:1791 src/libslic3r/PrintConfig.cpp:1463
+#: src/libslic3r/PrintConfig.cpp:2343
 msgid "Enable"
 msgstr "Abilita"
 
-#: src/libslic3r/PrintConfig.cpp:313
+#: src/libslic3r/PrintConfig.cpp:347
 msgid "Enable auto cooling"
 msgstr "Abilita raffreddamento automatico"
 
-#: src/libslic3r/PrintConfig.cpp:572
+#: src/libslic3r/PrintConfig.cpp:608
 msgid "Enable fan if layer print time is below"
-msgstr "Attiva ventola se la stampa del layer impiega meno di"
+msgstr "Attiva ventola se il tempo di stampa del layer è inferiore a"
 
-#: src/libslic3r/PrintConfig.cpp:2908
+#: src/libslic3r/PrintConfig.cpp:3072
 msgid "Enable hollowing"
 msgstr "Attiva svuotamento"
 
-#: src/libslic3r/PrintConfig.cpp:2380
+#: src/libslic3r/PrintConfig.cpp:2523
 msgid "Enable horizontal mirroring of output images"
 msgstr "Attiva il mirroring orizzontale per le immagini di output"
 
-#: src/libslic3r/PrintConfig.cpp:1867
+#: src/libslic3r/PrintConfig.cpp:1124
+msgid "Enable ironing"
+msgstr "Attiva stiratura"
+
+#: src/libslic3r/PrintConfig.cpp:1125
+msgid "Enable ironing of the top layers with the hot print head for smooth surface"
+msgstr "Abilitare la stiratura degli strati superiori con la testina di stampa a caldo per una superficie liscia"
+
+#: src/libslic3r/PrintConfig.cpp:2009
 msgid "Enable support material generation."
 msgstr "Abilita la generazione di materiale di supporto."
 
-#: src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1010
 msgid "Enable this to add comments into the G-Code labeling print moves with what object they belong to, which is useful for the Octoprint CancelObject plugin. This settings is NOT compatible with Single Extruder Multi Material setup and Wipe into Object / Wipe into Infill."
 msgstr "Attivalo per aggiungere commenti nel G-Code etichettando i movimenti di stampa secondo l'appartenenza, utile per il plugin Octoprint CancelObject. Questa impostazione NON è compatibile con una configurazione Multi Material ad estrusore singolo e con Spurgo nell'oggetto / Spurgo nel riempimento."
 
-#: src/libslic3r/PrintConfig.cpp:929
+#: src/libslic3r/PrintConfig.cpp:973
 msgid "Enable this to get a commented G-code file, with each line explained by a descriptive text. If you print from SD card, the additional weight of the file could make your firmware slow down."
 msgstr "Abilita per ottenere un file G-code commentato, con un testo descrittivo per ciascuna linea. Se stampi da memoria SD, il peso aggiuntivo del file potrebbe rallentare il firmware."
 
-#: src/libslic3r/PrintConfig.cpp:2186
+#: src/libslic3r/PrintConfig.cpp:2329
 msgid "Enable variable layer height feature"
 msgstr "Abilita layer ad altezza variabile"
 
-#: src/libslic3r/PrintConfig.cpp:2387
+#: src/libslic3r/PrintConfig.cpp:2530
 msgid "Enable vertical mirroring of output images"
 msgstr "Attiva mirroring verticale per le immagini di output"
 
-#: src/slic3r/GUI/Tab.cpp:1534 src/slic3r/GUI/Tab.cpp:1982
-#: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395
+#: src/slic3r/GUI/Tab.cpp:1880 src/slic3r/GUI/Tab.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:419 src/libslic3r/PrintConfig.cpp:429
 msgid "End G-code"
 msgstr "G-code finale"
 
-#: src/libslic3r/PrintConfig.cpp:1924
-msgid "Enforce support for the first"
-msgstr "Applica il supporto per i primi"
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:239
+msgid "Enforce"
+msgstr "Rinforzo"
 
-#: src/libslic3r/PrintConfig.cpp:1931
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:30
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:381
+msgid "Enforce seam"
+msgstr "Rinforzo giunzione"
+
+#: src/libslic3r/PrintConfig.cpp:2066
+msgid "Enforce support for the first"
+msgstr "Rinforza il supporto per i primi"
+
+#: src/libslic3r/PrintConfig.cpp:2073
 msgid "Enforce support for the first n layers"
 msgstr "Applica il supporto per i primi n layer"
 
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:47
+msgid "Enforce supports"
+msgstr "Rinforzi supporti"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:198
 #: src/slic3r/GUI/PrintHostDialogs.cpp:229
 msgid "Enqueued"
 msgstr "Messo in coda"
 
-#: src/libslic3r/PrintConfig.cpp:407
+#: src/libslic3r/PrintConfig.cpp:441
 msgid "Ensure vertical shell thickness"
 msgstr "Mantieni spessore guscio verticale"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1618
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4410
+#: src/slic3r/GUI/Search.cpp:433
+msgid "Enter a search term"
+msgstr "Inserire un termine di ricerca"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1814
 msgid "Enter custom G-code used on current layer"
 msgstr "Inserisci il G-code personalizzato da usare al layer corrente"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Enter new name"
 msgstr "Inserisci un nuovo nome"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1634
+#: src/slic3r/GUI/DoubleSlider.cpp:1830
 msgid "Enter short message shown on Printer display when a print is paused"
 msgstr "Inserisci un breve messaggio da mostrare sul display della stampante quando una stampa è in pausa"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1047
+#: src/slic3r/GUI/ConfigWizard.cpp:1413
 msgid "Enter the bed temperature needed for getting your filament to stick to your heated bed."
 msgstr "Inserisci la temperatura del piano necessaria per l'adesione del filamento al piano riscaldato."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:979
+#: src/slic3r/GUI/ConfigWizard.cpp:1345
 msgid "Enter the diameter of your filament."
 msgstr "Inserisci il diametro del filamento."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:966
+#: src/slic3r/GUI/ConfigWizard.cpp:1332
 msgid "Enter the diameter of your printer's hot end nozzle."
 msgstr "Inserisci il diametro dell'ugello dell'estrusore della stampante."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1650
+#: src/slic3r/GUI/DoubleSlider.cpp:1851 src/slic3r/GUI/DoubleSlider.cpp:1855
 msgid "Enter the height you want to jump to"
 msgstr "Inserisci l'altezza a cui si vuole saltare"
 
-#: src/slic3r/GUI/Plater.cpp:4751
+#: src/slic3r/GUI/DoubleSlider.cpp:1851
+msgid "Enter the move you want to jump to"
+msgstr "Inserisci lo spostamento a cui vuoi saltare"
+
+#: src/slic3r/GUI/Plater.cpp:4855
 msgid "Enter the number of copies:"
 msgstr "Inserisci il numero di copie:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1033
+#: src/slic3r/GUI/ConfigWizard.cpp:1399
 msgid "Enter the temperature needed for extruding your filament."
 msgstr "Inserisci la temperatura necessaria per estrudere il filamento."
 
-#: src/libslic3r/PrintConfig.cpp:761
+#: src/libslic3r/PrintConfig.cpp:797
 msgid "Enter your filament cost per kg here. This is only for statistical information."
 msgstr "Inserisci qui il costo del filamento per kg. È solo un'informazione statistica."
 
-#: src/libslic3r/PrintConfig.cpp:718
+#: src/libslic3r/PrintConfig.cpp:754
 msgid "Enter your filament density here. This is only for statistical information. A decent way is to weigh a known length of filament and compute the ratio of the length to volume. Better is to calculate the volume directly through displacement."
 msgstr "Inserisci qui la densità del filamento. È solo un'informazione statistica. Un metodo di calcolo approssimativo consiste nel pesare un pezzo di filamento di lunghezza nota, e calcolare il rapporto tra lunghezza e volume. È meglio calcolare il volume direttamente attraverso il dislocamento."
 
-#: src/libslic3r/PrintConfig.cpp:710
+#: src/libslic3r/PrintConfig.cpp:746
 msgid "Enter your filament diameter here. Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
 msgstr "Inserisci qui il diametro del filamento. È richiesta una buona precisione, pertanto usa un calibro ed esegui misurazioni multiple lungo il filamento, per poi ricavare una media."
 
-#: src/slic3r/GUI/MainFrame.cpp:422 src/slic3r/GUI/MainFrame.cpp:785
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:39
+msgid "Entering Paint-on supports"
+msgstr "Inserimento supporti Paint-on"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:40
+msgid "Entering Seam painting"
+msgstr "Inserimento pittura giunzione"
+
+#: src/slic3r/GUI/MainFrame.cpp:1003 src/slic3r/GUI/MainFrame.cpp:1486
 #: src/slic3r/GUI/PrintHostDialogs.cpp:231
 msgid "Error"
 msgstr "Errore"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:645
-#, possible-c-format
+#, c-format
 msgid "Error accessing port at %s: %s"
 msgstr "Errore nell'accedere alla porta a%s: %s"
 
-#: src/slic3r/GUI/Plater.cpp:3433
+#: src/slic3r/GUI/Plater.cpp:3238
 msgid "Error during reload"
 msgstr "Errore durante il ri-caricamento"
 
-#: src/slic3r/GUI/Plater.cpp:5043
-#, possible-c-format
+#: src/slic3r/GUI/Plater.cpp:5172
+#, c-format
 msgid "Error exporting 3MF file %s"
 msgstr "Errore nell'esportazione del file 3MF %s"
 
-#: src/slic3r/GUI/Plater.cpp:5005
-#, possible-c-format
+#: src/slic3r/GUI/Plater.cpp:5138
+#, c-format
 msgid "Error exporting AMF file %s"
 msgstr "Errore nell'esportazione del file AMF %s"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:154
+#: src/slic3r/GUI/OpenGLManager.cpp:276
+msgid "Error loading shaders"
+msgstr "Errore caricamento shader"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:152
 msgid "Error Message"
 msgstr "Messaggio d'errore"
 
-#: src/slic3r/GUI/AppConfig.cpp:114
+#: src/slic3r/GUI/GUI_App.cpp:661
+msgid "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to manually delete the file to recover from the error."
+msgstr "Errore nell'analisi del file di configurazione di PrusaGCodeViewer, probabilmente è corrotto. Provare a cancellare manualmente il file per risolvere l'errore."
+
+#: src/slic3r/GUI/GUI_App.cpp:655 src/slic3r/GUI/GUI_App.cpp:670
 msgid "Error parsing PrusaSlicer config file, it is probably corrupted. Try to manually delete the file to recover from the error. Your user profiles will not be affected."
 msgstr "Errore nell'analisi del file config di PrusaSlicer, probabilmente è corrotto. Per risolvere questo problema prova ad eliminare manualmente il file. Il tuoi profili utente non verranno toccati."
 
@@ -2292,163 +2737,191 @@ msgstr "Errore nell'analisi del file config di PrusaSlicer, probabilmente è cor
 msgid "Error uploading to print host:"
 msgstr "Errore durante il caricamento dell'host di stampa:"
 
-#: src/libslic3r/Zipper.cpp:102
+#: src/slic3r/GUI/Plater.cpp:4752
+msgid "Error while loading .gcode file"
+msgstr "Errore durante il caricamento del file .gcode"
+
+#: src/libslic3r/Zipper.cpp:27
 msgid "Error with zip archive"
 msgstr "Errore con archivio zip"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1918
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2077
 msgid "Error!"
 msgstr "Errore!"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:505
+#: src/slic3r/GUI/BedShapeDialog.cpp:581
 msgid "Error! Invalid model"
 msgstr "Errore! Modello non valido"
 
+#: src/slic3r/GUI/NotificationManager.cpp:667
+#: src/slic3r/GUI/NotificationManager.cpp:683
+#: src/slic3r/GUI/NotificationManager.cpp:694
+msgid "ERROR:"
+msgstr "ERRORE:"
+
 #: src/slic3r/GUI/FirmwareDialog.cpp:647
-#, possible-c-format
+#, c-format
 msgid "Error: %s"
 msgstr "Errore: %s"
 
-#: src/slic3r/GUI/Job.hpp:123
+#: src/slic3r/GUI/Jobs/Job.cpp:74
 msgid "ERROR: not enough resources to execute a new job."
 msgstr "ERRORE: risorse non sufficienti per eseguire un nuovo lavoro."
 
-#: src/slic3r/GUI/Plater.cpp:240 src/slic3r/GUI/Plater.cpp:1216
-#: src/slic3r/GUI/Plater.cpp:1258
+#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
+#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
+#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
 msgid "Estimated printing time"
 msgstr "Tempo di stampa stimato"
 
-#: src/slic3r/GUI/Plater.cpp:502
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Event"
+msgstr "Evento"
+
+#: src/slic3r/GUI/Plater.cpp:368
 msgid "Everywhere"
 msgstr "Ovunque"
 
-#: src/slic3r/GUI/PresetHints.cpp:51
+#: src/slic3r/GUI/PresetHints.cpp:50
 msgid "except for the first %1% layers."
 msgstr "ad eccezione dei primi %1% layer."
 
-#: src/slic3r/GUI/PresetHints.cpp:53
+#: src/slic3r/GUI/PresetHints.cpp:52
 msgid "except for the first layer."
 msgstr "ad eccezione del primo layer."
 
-#: src/libslic3r/Print.cpp:1377
+#: src/libslic3r/Print.cpp:1403
 msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm"
 msgstr "%1% %2% mm eccessivi per essere stampabili con un diametro ugello di %3% mm"
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:191 src/slic3r/GUI/UpdateDialogs.cpp:246
-#, possible-c-format
+#, c-format
 msgid "Exit %s"
 msgstr "Chiudi %s"
 
-#: src/libslic3r/PrintConfig.cpp:371
+#: src/slic3r/GUI/Plater.cpp:2143
+msgid "Expand sidebar"
+msgstr "Espandi barra laterale"
+
+#: src/libslic3r/PrintConfig.cpp:405
 msgid "Experimental option for preventing support material from being generated under bridged areas."
 msgstr "Opzione sperimentale per prevenire la formazione di supporti sotto i bridge."
 
-#: src/libslic3r/PrintConfig.cpp:1375
+#: src/libslic3r/PrintConfig.cpp:1483
 msgid "Experimental option to adjust flow for overhangs (bridge flow will be used), to apply bridge speed to them and enable fan."
 msgstr "Opzione sperimentale per regolare il flusso delle sporgenze (sarà utilizzato il flusso dei bridge), applicare la velocità del bridge e attivare la ventola."
 
-#: src/slic3r/GUI/GUI_App.cpp:815 src/slic3r/GUI/wxExtensions.cpp:755
+#: src/slic3r/GUI/GUI_App.cpp:1507 src/slic3r/GUI/wxExtensions.cpp:676
 msgid "Expert"
 msgstr "Esperto"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:822
+#: src/slic3r/GUI/ConfigWizard.cpp:1181
 msgid "Expert mode"
 msgstr "Modalità Esperto"
 
-#: src/slic3r/GUI/GUI_App.cpp:815
+#: src/slic3r/GUI/GUI_App.cpp:1507
 msgid "Expert View Mode"
 msgstr "Modalità Visualizzazione Esperto"
 
-#: src/slic3r/GUI/Plater.cpp:5521
+#: src/slic3r/GUI/Plater.cpp:5706
 msgid "Export"
 msgstr "Esporta"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export &Config"
 msgstr "Esporta &Configurazione"
 
-#: src/slic3r/GUI/MainFrame.cpp:477 src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1068 src/slic3r/GUI/MainFrame.cpp:1448
 msgid "Export &G-code"
 msgstr "Esporta &G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export &toolpaths as OBJ"
 msgstr "Esporta percorso a&ttrezzo come OBJ"
 
-#: src/libslic3r/PrintConfig.cpp:3338
+#: src/libslic3r/PrintConfig.cpp:3531
 msgid "Export 3MF"
 msgstr "Esporta 3MF"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export all presets including physical printers to file"
+msgstr "Esportazione di tutti i preset, incluse le stampanti fisiche, su file"
+
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export all presets to file"
 msgstr "Esporta tutti i preset su file"
 
-#: src/libslic3r/PrintConfig.cpp:3343
+#: src/libslic3r/PrintConfig.cpp:3536
 msgid "Export AMF"
 msgstr "Esporta AMF"
 
-#: src/slic3r/GUI/Plater.cpp:2598
+#: src/slic3r/GUI/Plater.cpp:2560
 msgid "Export AMF file:"
 msgstr "Esporta file AMF:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1657 src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3884
 msgid "Export as STL"
 msgstr "Esporta come STL"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:117
 msgid "Export config"
 msgstr "Esporta config"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export Config &Bundle"
-msgstr "Esporta Configurazione da &Bundle"
+msgstr "Esporta Configurazione in &Bundle"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export Config Bundle With Physical Printers"
+msgstr "Esportazione Config Bundle con stampanti fisiche"
+
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export current configuration to file"
 msgstr "Esporta la configurazione corrente su file"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export current plate as AMF"
 msgstr "Esporta il piano corrente come AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:477
+#: src/slic3r/GUI/MainFrame.cpp:1068
 msgid "Export current plate as G-code"
 msgstr "Esporta il piano corrente come G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export current plate as G-code to SD card / Flash drive"
 msgstr "Esporta il piano corrente come G-code su scheda SD / Memoria flash"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export current plate as STL"
 msgstr "Esporta il piano corrente come STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export current plate as STL including supports"
 msgstr "Esporta piano corrente come STL includendo i supporti"
 
-#: src/slic3r/GUI/Plater.cpp:3664
-msgid "Export failed"
-msgstr "Esportazione fallita"
-
-#: src/slic3r/GUI/ConfigWizard.cpp:801
+#: src/slic3r/GUI/ConfigWizard.cpp:1160
 msgid "Export full pathnames of models and parts sources into 3mf and amf files"
 msgstr "Esporta il percorso completo dei modelli e fonti delle parti nei file 3mf e amf"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:891
-#: src/slic3r/GUI/Plater.cpp:5521 src/libslic3r/PrintConfig.cpp:3353
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 src/slic3r/GUI/Plater.cpp:766
+#: src/slic3r/GUI/Plater.cpp:5706 src/libslic3r/PrintConfig.cpp:3546
 msgid "Export G-code"
 msgstr "Esporta G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export G-code to SD card / Flash drive"
 msgstr "Esporta G-code su Scheda SD / Memoria flash"
 
-#: src/libslic3r/PrintConfig.cpp:3320
+#: src/slic3r/GUI/NotificationManager.cpp:631
+#: src/slic3r/GUI/NotificationManager.cpp:748
+msgid "Export G-Code."
+msgstr "Esporta G-code."
+
+#: src/libslic3r/PrintConfig.cpp:3513
 msgid "Export OBJ"
 msgstr "Esporta OBJ"
 
-#: src/slic3r/GUI/Plater.cpp:2610
+#: src/slic3r/GUI/Plater.cpp:2572
 msgid "Export OBJ file:"
 msgstr "Esporta file OBJ:"
 
@@ -2456,212 +2929,215 @@ msgstr "Esporta file OBJ:"
 msgid "Export of a temporary 3mf file failed"
 msgstr "L'esportazione di un file 3mf non è riuscita"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export plate as &AMF"
 msgstr "Esporta piano come &AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export plate as &STL"
 msgstr "Esporta piano come &STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export plate as STL &including supports"
 msgstr "Esporta piano come STL &includendo i supporti"
 
-#: src/libslic3r/PrintConfig.cpp:3332
+#: src/libslic3r/PrintConfig.cpp:3525
 msgid "Export SLA"
 msgstr "Esporta SLA"
 
-#: src/slic3r/GUI/Preferences.cpp:72
+#: src/slic3r/GUI/Preferences.cpp:89
 msgid "Export sources full pathnames to 3mf and amf"
 msgstr "Esporta il percorso completo delle fonti su 3mf e amf"
 
-#: src/libslic3r/PrintConfig.cpp:3348
+#: src/libslic3r/PrintConfig.cpp:3541
 msgid "Export STL"
 msgstr "Esporta STL"
 
-#: src/slic3r/GUI/Plater.cpp:2591
+#: src/slic3r/GUI/Plater.cpp:2553
 msgid "Export STL file:"
 msgstr "Esporta file STL:"
 
-#: src/libslic3r/PrintConfig.cpp:3339
+#: src/libslic3r/PrintConfig.cpp:3532
 msgid "Export the model(s) as 3MF."
 msgstr "Esporta modello/i come 3MF."
 
-#: src/libslic3r/PrintConfig.cpp:3344
+#: src/libslic3r/PrintConfig.cpp:3537
 msgid "Export the model(s) as AMF."
 msgstr "Esporta il modello(i) come AMF."
 
-#: src/libslic3r/PrintConfig.cpp:3321
+#: src/libslic3r/PrintConfig.cpp:3514
 msgid "Export the model(s) as OBJ."
 msgstr "Esporta il modello(i) come OBJ."
 
-#: src/libslic3r/PrintConfig.cpp:3349
+#: src/libslic3r/PrintConfig.cpp:3542
 msgid "Export the model(s) as STL."
 msgstr "Esporta il modello(i) come STL."
 
-#: src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/Plater.cpp:3884
 msgid "Export the selected object as STL file"
 msgstr "Esporta l'oggetto selezionato come file STL"
 
-#: src/slic3r/GUI/Plater.cpp:880
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 src/slic3r/GUI/Plater.cpp:755
 msgid "Export to SD card / Flash drive"
 msgstr "Esporta su scheda SD / memoria Flash"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export toolpaths as OBJ"
 msgstr "Esporta percorso attrezzo come OBJ"
 
-#: src/libslic3r/Print.cpp:1638
+#: src/slic3r/GUI/NotificationManager.hpp:317
+msgid "Exporting finished."
+msgstr "Esportazione completata."
+
+#: src/libslic3r/Print.cpp:1676
 msgid "Exporting G-code"
 msgstr "Esportando il G-code"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:341
-msgid "Exporting model..."
-msgstr "Esportazione modello..."
+msgid "Exporting model"
+msgstr "Esportazione modello"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:219
 #: src/slic3r/Utils/FixModelByWin10.cpp:359
 msgid "Exporting source model"
 msgstr "Esportazione modello sorgente"
 
-#: src/libslic3r/SLAPrint.cpp:646
+#: src/libslic3r/SLAPrint.cpp:660
 msgid "Exposition time is out of printer profile bounds."
 msgstr "Il tempo di esposizione è fuori dai limiti del profilo stampante."
 
-#: src/slic3r/GUI/Tab.cpp:2117 src/slic3r/GUI/Tab.cpp:3515
+#: src/slic3r/GUI/Tab.cpp:2287 src/slic3r/GUI/Tab.cpp:3931
 msgid "Exposure"
 msgstr "Esposizione"
 
-#: src/libslic3r/PrintConfig.cpp:2541 src/libslic3r/PrintConfig.cpp:2542
+#: src/libslic3r/PrintConfig.cpp:2684 src/libslic3r/PrintConfig.cpp:2685
 msgid "Exposure time"
 msgstr "Tempo di esposizione"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:311
+#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:315
+#: src/libslic3r/ExtrusionEntity.cpp:338
 msgid "External perimeter"
 msgstr "Perimetro esterno"
 
-#: src/slic3r/GUI/PresetHints.cpp:156
+#: src/slic3r/GUI/PresetHints.cpp:155
 msgid "external perimeters"
 msgstr "perimetri esterni"
 
-#: src/libslic3r/PrintConfig.cpp:446 src/libslic3r/PrintConfig.cpp:457
+#: src/libslic3r/PrintConfig.cpp:482 src/libslic3r/PrintConfig.cpp:493
 msgid "External perimeters"
 msgstr "Perimetri esterni"
 
-#: src/libslic3r/PrintConfig.cpp:469
+#: src/libslic3r/PrintConfig.cpp:505
 msgid "External perimeters first"
 msgstr "Perimetri esterni per primi"
 
-#: src/libslic3r/PrintConfig.cpp:1588 src/libslic3r/PrintConfig.cpp:1596
+#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1704
 msgid "Extra length on restart"
 msgstr "Lunghezza extra in ripresa"
 
-#: src/libslic3r/PrintConfig.cpp:1390
+#: src/libslic3r/PrintConfig.cpp:1498
 msgid "Extra loading distance"
 msgstr "Distanza di caricamento aggiuntiva"
 
-#: src/libslic3r/PrintConfig.cpp:477
+#: src/libslic3r/PrintConfig.cpp:513
 msgid "Extra perimeters if needed"
 msgstr "Perimetro aggiuntivo se necessario"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:278 src/slic3r/GUI/Tab.cpp:1434
-#: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487
+#: src/slic3r/GUI/GCodeViewer.cpp:2277 src/slic3r/GUI/GCodeViewer.cpp:2313
+#: src/slic3r/GUI/GCodeViewer.cpp:2318 src/slic3r/GUI/GUI_ObjectList.cpp:296
+#: src/slic3r/GUI/Tab.cpp:1780 src/slic3r/GUI/wxExtensions.cpp:515
+#: src/libslic3r/PrintConfig.cpp:523
 msgid "Extruder"
 msgstr "Estrusore"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1134 src/slic3r/GUI/DoubleSlider.cpp:1170
-#: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1704
-#: src/slic3r/GUI/Tab.cpp:2320 src/libslic3r/GCode/PreviewData.cpp:445
-#, possible-c-format
+#: src/slic3r/GUI/DoubleSlider.cpp:1263 src/slic3r/GUI/DoubleSlider.cpp:1297
+#: src/slic3r/GUI/GLCanvas3D.cpp:983 src/slic3r/GUI/GUI_ObjectList.cpp:1832
+#: src/slic3r/GUI/Tab.cpp:2489 src/libslic3r/GCode/PreviewData.cpp:450
+#, c-format
 msgid "Extruder %d"
 msgstr "Estrusore %d"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1011
+#: src/slic3r/GUI/DoubleSlider.cpp:1137
 msgid "Extruder (tool) is changed to Extruder \"%1%\""
 msgstr "Estrusore (attrezzo) viene cambiato a Estrusore \"%1%\""
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
-msgid "Extruder and Bed Temperatures"
-msgstr "Temperature dell'estrusore e del piano"
-
 #: src/slic3r/GUI/WipeTowerDialog.cpp:255
 msgid "Extruder changed to"
 msgstr "Cambia estrusore a"
 
-#: src/slic3r/GUI/Tab.cpp:1233
+#: src/slic3r/GUI/Tab.cpp:1563
 msgid "Extruder clearance (mm)"
 msgstr "Spazio libero per l'estrusore (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:522
+#: src/libslic3r/PrintConfig.cpp:558
 msgid "Extruder Color"
 msgstr "Colore estrusore"
 
-#: src/libslic3r/PrintConfig.cpp:529
+#: src/libslic3r/PrintConfig.cpp:565
 msgid "Extruder offset"
 msgstr "Offset estrusore"
 
-#: src/libslic3r/PrintConfig.cpp:911
-msgid "Extruder temperature for first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output file."
-msgstr "Temperatura estrusore per il primo layer. Se vuoi controllare manualmente la temperatura durante la stampa, imposta questo a zero per disattivare i comandi di controllo temperatura nel file di output."
-
-#: src/libslic3r/PrintConfig.cpp:2065
-msgid "Extruder temperature for layers after the first one. Set this to zero to disable temperature control commands in the output."
-msgstr "Temperatura estrusore per i layer successivi al primo. Imposta questo a zero per disattivare i comandi di controllo temperatura nell'output."
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:617
-#: src/slic3r/GUI/Tab.cpp:1180 src/slic3r/GUI/Tab.cpp:1838
-#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002
-#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1737
-#: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1965
+#: src/slic3r/GUI/GUI_ObjectList.cpp:97 src/slic3r/GUI/GUI_ObjectList.cpp:656
+#: src/slic3r/GUI/Tab.cpp:1510 src/slic3r/GUI/Tab.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:524 src/libslic3r/PrintConfig.cpp:1046
+#: src/libslic3r/PrintConfig.cpp:1517 src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:2080 src/libslic3r/PrintConfig.cpp:2107
 msgid "Extruders"
 msgstr "Estrusori"
 
-#: src/libslic3r/PrintConfig.cpp:539
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1061
+msgid "Extruders count"
+msgstr "Conteggio estrusori"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2493
+msgid "Extrusion"
+msgstr "Estrusione"
+
+#: src/libslic3r/PrintConfig.cpp:575
 msgid "Extrusion axis"
 msgstr "Asse estrusore"
 
-#: src/libslic3r/PrintConfig.cpp:545
+#: src/libslic3r/PrintConfig.cpp:581
 msgid "Extrusion multiplier"
 msgstr "Moltiplicatore estrusione"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1037
+#: src/slic3r/GUI/ConfigWizard.cpp:1403
 msgid "Extrusion Temperature:"
 msgstr "Temperatura di estrusione:"
 
-#: src/slic3r/GUI/Tab.cpp:1205
+#: src/slic3r/GUI/Tab.cpp:1535
 msgid "Extrusion width"
 msgstr "Larghezza estrusione"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:618
-#: src/libslic3r/PrintConfig.cpp:447 src/libslic3r/PrintConfig.cpp:555
-#: src/libslic3r/PrintConfig.cpp:877 src/libslic3r/PrintConfig.cpp:1010
-#: src/libslic3r/PrintConfig.cpp:1418 src/libslic3r/PrintConfig.cpp:1757
-#: src/libslic3r/PrintConfig.cpp:1947 src/libslic3r/PrintConfig.cpp:2106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:657
+#: src/libslic3r/PrintConfig.cpp:483 src/libslic3r/PrintConfig.cpp:591
+#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1054
+#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1872
+#: src/libslic3r/PrintConfig.cpp:2089 src/libslic3r/PrintConfig.cpp:2249
 msgid "Extrusion Width"
 msgstr "Larghezza Estrusione"
 
-#: src/slic3r/GUI/Plater.cpp:162
+#: src/slic3r/GUI/Plater.cpp:168
 msgid "Facets"
 msgstr "Facce"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:349
+#: src/slic3r/GUI/GUI_ObjectList.cpp:396
 msgid "facets added"
 msgstr "aggiunte facce"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:348
+#: src/slic3r/GUI/GUI_ObjectList.cpp:395
 msgid "facets removed"
 msgstr "rimosse facce"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:350
+#: src/slic3r/GUI/GUI_ObjectList.cpp:397
 msgid "facets reversed"
 msgstr "facce invertite"
 
-#: src/libslic3r/PrintConfig.cpp:2517
+#: src/libslic3r/PrintConfig.cpp:2660
 msgid "Faded layers"
 msgstr "Layer sfumati"
 
-#: src/libslic3r/Zipper.cpp:44
+#: src/libslic3r/miniz_extension.cpp:103
 msgid "failed finding central directory"
 msgstr "directory centrale non trovata"
 
@@ -2669,105 +3145,115 @@ msgstr "directory centrale non trovata"
 msgid "Failed loading the input model."
 msgstr "Caricamento modello input fallito."
 
-#: src/libslic3r/PrintBase.cpp:71
+#: src/libslic3r/PrintBase.cpp:72
 msgid "Failed processing of the output_filename_format template."
 msgstr "Elaborazione fallita del modello output_filename_format."
 
-#: src/slic3r/GUI/PresetHints.cpp:42
+#: src/slic3r/GUI/PresetHints.cpp:41
 msgid "Fan"
 msgstr "Ventola"
 
-#: src/slic3r/GUI/Tab.cpp:1456
+#: src/slic3r/GUI/Tab.cpp:1802
 msgid "Fan settings"
 msgstr "Impostazioni ventola"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/Tab.cpp:1457
+#: src/slic3r/GUI/GUI_Preview.cpp:279 src/slic3r/GUI/Tab.cpp:1803
 msgid "Fan speed"
 msgstr "Velocità ventola"
 
-#: src/libslic3r/GCode/PreviewData.cpp:353
+#: src/slic3r/GUI/GCodeViewer.cpp:2239 src/libslic3r/GCode/PreviewData.cpp:358
 msgid "Fan Speed (%)"
 msgstr "Velocità ventola (%)"
 
-#: src/libslic3r/PrintConfig.cpp:2405
+#: src/libslic3r/PrintConfig.cpp:2548
 msgid "Fast"
 msgstr "Veloce"
 
-#: src/libslic3r/PrintConfig.cpp:2406
+#: src/libslic3r/PrintConfig.cpp:2549
 msgid "Fast tilt"
 msgstr "Tilt veloce"
 
-#: src/slic3r/GUI/GUI_App.cpp:141
+#: src/slic3r/GUI/GUI_App.cpp:531
 msgid "Fatal error"
 msgstr "Errore irreversibile"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:221 src/slic3r/GUI/GUI_Preview.cpp:575
-#: src/libslic3r/GCode/PreviewData.cpp:345
+#: src/slic3r/GUI/GUI_Init.cpp:88
+msgid "Fatal error, exception catched: %1%"
+msgstr "Fatal error, eccezione registrata: %1%"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
+#: src/slic3r/GUI/GUI_Preview.cpp:275 src/slic3r/GUI/GUI_Preview.cpp:787
+#: src/libslic3r/GCode/PreviewData.cpp:350
 msgid "Feature type"
 msgstr "Tipo di caratteristica"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:234 src/slic3r/GUI/GUI_Preview.cpp:235
+#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:295
+#: src/slic3r/GUI/GUI_Preview.cpp:316
 msgid "Feature types"
 msgstr "Tipi di caratteristica"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1525
+#: src/slic3r/GUI/ConfigWizard.cpp:1926
 msgid "FFF Technology Printers"
 msgstr "Stampanti con tecnologia FFF"
 
-#: src/slic3r/GUI/Plater.cpp:816 src/slic3r/GUI/Tab.cpp:1425
-#: src/slic3r/GUI/Tab.cpp:1426
+#: src/slic3r/GUI/Plater.cpp:691 src/slic3r/GUI/Tab.cpp:1770
+#: src/slic3r/GUI/Tab.cpp:1771
 msgid "Filament"
 msgstr "Filamento"
 
-#: src/slic3r/GUI/Preset.cpp:1522
+#: src/libslic3r/Preset.cpp:1301
 msgid "filament"
 msgstr "filamento"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Filament and Nozzle Diameters"
 msgstr "Diametro filamento e ugello"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:983
+#: src/slic3r/GUI/ConfigWizard.cpp:1349
 msgid "Filament Diameter:"
 msgstr "Diametro del filamento:"
 
-#: src/libslic3r/PrintConfig.cpp:651
+#: src/libslic3r/PrintConfig.cpp:687
 msgid "Filament is cooled by being moved back and forth in the cooling tubes. Specify desired number of these moves."
 msgstr "Il filamento è raffreddato venendo spostato avanti e indietro nei tubi di raffreddamento. Specificare il numero desiderato di questi movimenti."
 
-#: src/libslic3r/PrintConfig.cpp:686
+#: src/libslic3r/PrintConfig.cpp:722
 msgid "Filament load time"
 msgstr "Durata caricamento filamento"
 
-#: src/libslic3r/PrintConfig.cpp:588
+#: src/libslic3r/PrintConfig.cpp:624
 msgid "Filament notes"
 msgstr "Note filamento"
 
-#: src/slic3r/GUI/Tab.cpp:1323 src/slic3r/GUI/Tab.cpp:1378
+#: src/slic3r/GUI/Tab.cpp:1669
 msgid "Filament Overrides"
 msgstr "Sovrascrittura filamento"
 
-#: src/libslic3r/PrintConfig.cpp:1381
+#: src/libslic3r/PrintConfig.cpp:1489
 msgid "Filament parking position"
 msgstr "Posizione di parcheggio del filamento"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filament Profiles Selection"
 msgstr "Selezione Profili Filamento"
 
-#: src/slic3r/GUI/Tab.cpp:1471
+#: src/slic3r/GUI/Tab.cpp:1817
 msgid "Filament properties"
 msgstr "Proprietà filamento"
 
-#: src/slic3r/GUI/Tab.hpp:355
+#: src/slic3r/GUI/Tab.hpp:409
 msgid "Filament Settings"
 msgstr "Impostazioni Filamento"
 
-#: src/libslic3r/PrintConfig.cpp:726
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Filament Settings Tab"
+msgstr "Scheda Impostazioni Filamento"
+
+#: src/libslic3r/PrintConfig.cpp:762
 msgid "Filament type"
 msgstr "Tipo filamento"
 
-#: src/libslic3r/PrintConfig.cpp:701
+#: src/libslic3r/PrintConfig.cpp:737
 msgid "Filament unload time"
 msgstr "Durata scaricamento filamento"
 
@@ -2775,75 +3261,79 @@ msgstr "Durata scaricamento filamento"
 msgid "filaments"
 msgstr "filamenti"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filaments"
 msgstr "Filamenti"
 
-#: src/libslic3r/Zipper.cpp:72
+#: src/slic3r/GUI/ConfigWizard.cpp:691
+msgid "Filaments marked with <b>*</b> are <b>not</b> compatible with some installed printers."
+msgstr "I filamenti segnati con <b>*</b> non <b>sono</b> compatibili con alcune stampanti installate."
+
+#: src/libslic3r/miniz_extension.cpp:131
 msgid "file close failed"
 msgstr "chiusura del file fallita"
 
-#: src/libslic3r/Zipper.cpp:66
+#: src/libslic3r/miniz_extension.cpp:125
 msgid "file create failed"
 msgstr "generazione del file non riuscita"
 
-#: src/slic3r/GUI/MainFrame.cpp:791
+#: src/slic3r/GUI/MainFrame.cpp:1492
 msgid "File Not Found"
 msgstr "file non trovato"
 
-#: src/libslic3r/Zipper.cpp:86
+#: src/libslic3r/miniz_extension.cpp:145
 msgid "file not found"
 msgstr "file non trovato"
 
-#: src/libslic3r/Zipper.cpp:64
+#: src/libslic3r/miniz_extension.cpp:123
 msgid "file open failed"
 msgstr "apertura file non riuscita"
 
-#: src/libslic3r/Zipper.cpp:70
+#: src/libslic3r/miniz_extension.cpp:129
 msgid "file read failed"
 msgstr "lettura del file non riuscita"
 
-#: src/libslic3r/Zipper.cpp:74
+#: src/libslic3r/miniz_extension.cpp:133
 msgid "file seek failed"
 msgstr "ricerca file fallita"
 
-#: src/libslic3r/Zipper.cpp:76
+#: src/libslic3r/miniz_extension.cpp:135
 msgid "file stat failed"
 msgstr "statistica file non riuscita"
 
-#: src/libslic3r/Zipper.cpp:36
+#: src/libslic3r/miniz_extension.cpp:95
 msgid "file too large"
 msgstr "file troppo grande"
 
-#: src/libslic3r/Zipper.cpp:68
+#: src/libslic3r/miniz_extension.cpp:127
 msgid "file write failed"
 msgstr "scrittura file fallita"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:153
+#: src/slic3r/GUI/PrintHostDialogs.cpp:151
 msgid "Filename"
 msgstr "Nome file"
 
-#: src/libslic3r/PrintConfig.cpp:775
+#: src/libslic3r/PrintConfig.cpp:811
 msgid "Fill angle"
 msgstr "Angolo riempimento"
 
-#: src/libslic3r/PrintConfig.cpp:789
+#: src/libslic3r/PrintConfig.cpp:825
 msgid "Fill density"
 msgstr "Densità riempimento"
 
-#: src/libslic3r/PrintConfig.cpp:826
+#: src/libslic3r/PrintConfig.cpp:862
 msgid "Fill pattern"
 msgstr "Trama riempimento"
 
-#: src/libslic3r/PrintConfig.cpp:437
+#: src/libslic3r/PrintConfig.cpp:473
 msgid "Fill pattern for bottom infill. This only affects the bottom external visible layer, and not its adjacent solid shells."
 msgstr "Trama per riempimento inferiore. Questo influenza solamente il layer inferiore esterno visibile, e non i gusci solidi adiacenti."
 
-#: src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:864
 msgid "Fill pattern for general low-density infill."
 msgstr "Trama riempimento generale a bassa densità."
 
-#: src/libslic3r/PrintConfig.cpp:417
+#: src/libslic3r/PrintConfig.cpp:451
 msgid "Fill pattern for top infill. This only affects the top visible layer, and not its adjacent solid shells."
 msgstr "Trama per riempimento superiore. Questo influenza solamente il layer superiore esterno visibile, e non i gusci solidi adiacenti."
 
@@ -2851,7 +3341,7 @@ msgstr "Trama per riempimento superiore. Questo influenza solamente il layer sup
 msgid "Finished"
 msgstr "Finito"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891 src/slic3r/GUI/Tab.cpp:1947
+#: src/slic3r/GUI/ConfigWizard.cpp:1257 src/slic3r/GUI/Tab.cpp:2132
 msgid "Firmware"
 msgstr "Firmware"
 
@@ -2863,44 +3353,52 @@ msgstr "Firmware flasher"
 msgid "Firmware image:"
 msgstr "Immagine firmware:"
 
-#: src/slic3r/GUI/Tab.cpp:2577
+#: src/slic3r/GUI/Tab.cpp:2733
 msgid "Firmware Retraction"
 msgstr "Retrazione Firmware"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891
+#: src/slic3r/GUI/ConfigWizard.cpp:1257
 msgid "Firmware Type"
 msgstr "Tipo Firmware"
 
-#: src/libslic3r/PrintConfig.cpp:859 src/libslic3r/PrintConfig.cpp:868
-#: src/libslic3r/PrintConfig.cpp:876 src/libslic3r/PrintConfig.cpp:910
+#: src/libslic3r/PrintConfig.cpp:899 src/libslic3r/PrintConfig.cpp:908
+#: src/libslic3r/PrintConfig.cpp:918 src/libslic3r/PrintConfig.cpp:952
 msgid "First layer"
 msgstr "Primo layer"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:61 src/libslic3r/PrintConfig.cpp:889
+#: src/libslic3r/PrintConfig.cpp:909
+msgid "First layer bed temperature"
+msgstr "Temperatura del piano del primo layer"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:60 src/libslic3r/PrintConfig.cpp:931
 msgid "First layer height"
 msgstr "Altezza del primo layer"
 
-#: src/libslic3r/Print.cpp:1422
+#: src/libslic3r/Print.cpp:1448
 msgid "First layer height can't be greater than nozzle diameter"
 msgstr "L'altezza del primo layer non può essere più grande del diametro dell'ugello"
 
-#: src/libslic3r/PrintConfig.cpp:900
+#: src/libslic3r/PrintConfig.cpp:960
+msgid "First layer nozzle temperature"
+msgstr "Temperatura dell'ugello del primo layer"
+
+#: src/libslic3r/PrintConfig.cpp:942
 msgid "First layer speed"
 msgstr "Velocità del primo layer"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "First layer volumetric"
 msgstr "Volumetrica primo layer"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1647
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
 msgid "Fix through the Netfabb"
 msgstr "Ripara tramite Netfabb"
 
-#: src/slic3r/GUI/Plater.cpp:3473
+#: src/slic3r/GUI/Plater.cpp:3278
 msgid "Fix Throught NetFabb"
 msgstr "Ripara tramite NetFabb"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Flash printer &firmware"
 msgstr "Installa &firmware stampante"
 
@@ -2928,44 +3426,58 @@ msgstr "Flash in corso. Non disconnettere la stampante!"
 msgid "Flashing succeeded!"
 msgstr "Flash completato con successo!"
 
-#: src/slic3r/GUI/Tab.cpp:1218
+#: src/slic3r/GUI/Tab.cpp:1548
 msgid "Flow"
 msgstr "Flusso"
 
-#: src/slic3r/GUI/PresetHints.cpp:220
+#: src/libslic3r/PrintConfig.cpp:1145
+msgid "Flow rate"
+msgstr "Flusso"
+
+#: src/slic3r/GUI/PresetHints.cpp:219
 msgid "flow rate is maximized"
 msgstr "il flusso viene massimizzato"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:286
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:555
+msgid "Following printer preset(s) is duplicated:%1%The above preset for printer \"%2%\" will be used just once."
+msgstr "Il seguente(i) preset della stampante è duplicato:%1% Il preset sopra per la stampante \"%2%\" verrà usato solo una volta."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:287
 msgid "For more information please visit our wiki page:"
 msgstr "Per maggiori informazioni visita la nostra pagina wiki:"
 
-#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Plater.cpp:624
+#: src/slic3r/GUI/Plater.cpp:367 src/slic3r/GUI/Plater.cpp:490
 msgid "For support enforcers only"
 msgstr "Solo per rinforzi supporto"
 
 #. TRN Description for "WHITE BULLET"
-#: src/slic3r/GUI/Tab.cpp:3267
-msgid "for the left button: indicates a non-system (or non-default) preset,\nfor the right button: indicates that the settings hasn't been modified."
-msgstr "per il tasto sinistro: indica un preset non di sistema (o non-predefinito),\nper il tasto destro: indica che le impostazioni non sono state modificate."
+#: src/slic3r/GUI/Tab.cpp:3702
+msgid ""
+"for the left button: indicates a non-system (or non-default) preset,\n"
+"for the right button: indicates that the settings hasn't been modified."
+msgstr ""
+"per il tasto sinistro: indica un preset non di sistema (o non-predefinito),\n"
+"per il tasto destro: indica che le impostazioni non sono state modificate."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:136
-msgid "For the Wipe Tower to work with the soluble supports, the support layers\nneed to be synchronized with the object layers."
+#: src/slic3r/GUI/ConfigManipulation.cpp:135
+msgid ""
+"For the Wipe Tower to work with the soluble supports, the support layers\n"
+"need to be synchronized with the object layers."
 msgstr "Per far sì che la torre di spurgo funzioni con i supporti solubili, i layer dei supporti devono essere sincronizzati con quelli del modello."
 
-#: src/libslic3r/Print.cpp:1396
+#: src/libslic3r/Print.cpp:1422
 msgid "For the Wipe Tower to work with the soluble supports, the support layers need to be synchronized with the object layers."
 msgstr "Per far sì che la torre di spurgo funzioni con i supporti solubili, i layer dei supporti devono essere sincronizzati con quelli del modello."
 
-#: src/libslic3r/PrintConfig.cpp:2864
+#: src/libslic3r/PrintConfig.cpp:3028
 msgid "Force pad around object everywhere"
 msgstr "Forza il Pad ovunque intorno all'oggetto"
 
-#: src/libslic3r/PrintConfig.cpp:1729
+#: src/libslic3r/PrintConfig.cpp:1844
 msgid "Force solid infill for regions having a smaller area than the specified threshold."
 msgstr "Forza riempimento solido per le regioni con un'area inferiore al limite specificato."
 
-#: src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1116
 msgid "Force the generation of solid shells between adjacent materials/volumes. Useful for multi-extruder prints with translucent materials or manual soluble support material."
 msgstr "Forza la generazione di perimetri solidi tra volumi o materiali adiacenti. Utile per stampe multi estrusore con materiali traslucidi o supporti solubili manuali."
 
@@ -2973,244 +3485,305 @@ msgstr "Forza la generazione di perimetri solidi tra volumi o materiali adiacent
 msgid "From"
 msgstr "Da"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2223
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "from"
+msgstr "da"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2389
 msgid "From Object List You can't delete the last solid part from object."
 msgstr "Non è possibile eliminare l'ultima parte solida dall'oggetto nell'elenco Oggetti."
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front"
 msgstr "Frontale"
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front View"
 msgstr "Vista anteriore"
 
-#: src/slic3r/GUI/Tab.cpp:1013
+#: src/slic3r/GUI/Tab.cpp:1331
 msgid "full profile name"
 msgstr "nome completo profilo"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "G-code"
 msgstr "G-code"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1021
-msgid "G-code associated to this tick mark is in a conflict with print mode.\nEditing it will cause changes of Slider data."
-msgstr "Il G-code associato a questo segno di spunta è in conflitto con la modalità di stampa.\nLa modifica causerà cambiamenti nei dati della barra di scorrimento."
+#: src/slic3r/GUI/DoubleSlider.cpp:1146
+msgid ""
+"G-code associated to this tick mark is in a conflict with print mode.\n"
+"Editing it will cause changes of Slider data."
+msgstr ""
+"Il G-code associato a questo segno di spunta è in conflitto con la modalità di stampa.\n"
+"La modifica causerà cambiamenti nei dati della barra di scorrimento."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:130
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:165
 msgid "G-code file exported to %1%"
 msgstr "G-code esportato in %1%"
 
-#: src/libslic3r/PrintConfig.cpp:936
+#: src/libslic3r/PrintConfig.cpp:980
 msgid "G-code flavor"
 msgstr "Formato G-code"
 
-#: src/libslic3r/PrintConfig.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:79
+msgid "G-code preview"
+msgstr "Anteprima G-code"
+
+#: src/libslic3r/PrintConfig.cpp:3552
+msgid "G-code viewer"
+msgstr "Visualizzatore G-code"
+
+#: src/libslic3r/PrintConfig.cpp:757
 msgid "g/cm³"
 msgstr "g/cm³"
 
-#: src/libslic3r/PrintConfig.cpp:2505
+#: src/libslic3r/PrintConfig.cpp:2648
 msgid "g/ml"
 msgstr "g/ml"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:317
-#: src/libslic3r/PrintConfig.cpp:918
+#: src/slic3r/GUI/GUI_Preview.cpp:309 src/libslic3r/ExtrusionEntity.cpp:322
+#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:962
 msgid "Gap fill"
 msgstr "Riempimento spazi"
 
-#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1796
-#: src/slic3r/GUI/Tab.cpp:2040
+#: src/slic3r/GUI/Preferences.cpp:24 src/slic3r/GUI/Tab.cpp:2058
+#: src/slic3r/GUI/Tab.cpp:2240 src/slic3r/GUI/Tab.cpp:2348
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "General"
 msgstr "Generale"
 
-#: src/libslic3r/PrintConfig.cpp:1307
+#: src/libslic3r/PrintConfig.cpp:1415
 msgid "Generate no less than the number of skirt loops required to consume the specified amount of filament on the bottom layer. For multi-extruder machines, this minimum applies to each extruder."
 msgstr "Genera almeno il numero di skirt necessari per consumare la quantità di filamento specificata per il primo layer. Per le macchine multi estrusore, questo minimo riguarda ciascun estrusore."
 
-#: src/libslic3r/PrintConfig.cpp:1865
+#: src/libslic3r/PrintConfig.cpp:2007
 msgid "Generate support material"
 msgstr "Genera materiale di supporto"
 
-#: src/libslic3r/PrintConfig.cpp:1926
+#: src/libslic3r/PrintConfig.cpp:2068
 msgid "Generate support material for the specified number of layers counting from bottom, regardless of whether normal support material is enabled or not and regardless of any angle threshold. This is useful for getting more adhesion of objects having a very thin or poor footprint on the build plate."
 msgstr "Genera materiale di supporto per il numero di layer specificati partendo dal basso, a prescindere che sia abilitato il materiale di supporto normale o meno, e indipendentemente dall'angolo limite. Questo è utile per ottenere più adesione negli oggetti con un appoggio sul piano molto sottile o fragile."
 
-#: src/libslic3r/PrintConfig.cpp:2613
+#: src/libslic3r/PrintConfig.cpp:2756
 msgid "Generate supports"
 msgstr "Genera supporti"
 
-#: src/libslic3r/PrintConfig.cpp:2615
+#: src/libslic3r/PrintConfig.cpp:2758
 msgid "Generate supports for the models"
 msgstr "Genera supporti per i modelli"
 
-#: src/libslic3r/Print.cpp:1614
+#: src/slic3r/GUI/Plater.cpp:3554
+msgid "generated warnings"
+msgstr "ha generato avvisi"
+
+#: src/libslic3r/Print.cpp:1645
 msgid "Generating brim"
 msgstr "Generazione brim"
 
-#: src/libslic3r/Print.cpp:1642
+#: src/libslic3r/Print.cpp:1680
 msgid "Generating G-code"
 msgstr "Generazione G-code"
 
-#: src/libslic3r/SLAPrintSteps.cpp:48
+#: src/slic3r/GUI/GCodeViewer.cpp:1392
+msgid "Generating index buffers"
+msgstr "Generazione indici buffer"
+
+#: src/libslic3r/SLAPrintSteps.cpp:49
 msgid "Generating pad"
 msgstr "Generazione pad"
 
-#: src/libslic3r/PrintObject.cpp:152
+#: src/libslic3r/PrintObject.cpp:158
 msgid "Generating perimeters"
 msgstr "Generazione perimetri"
 
-#: src/libslic3r/Print.cpp:1606
+#: src/libslic3r/Print.cpp:1636
 msgid "Generating skirt"
 msgstr "Generando skirt"
 
-#: src/libslic3r/PrintObject.cpp:395
+#: src/libslic3r/PrintObject.cpp:422
 msgid "Generating support material"
 msgstr "Generazione materiale di supporto"
 
-#: src/libslic3r/SLAPrintSteps.cpp:46 src/libslic3r/SLAPrintSteps.cpp:356
+#: src/libslic3r/SLAPrintSteps.cpp:47 src/libslic3r/SLAPrintSteps.cpp:359
 msgid "Generating support points"
 msgstr "Generazione punti di supporto"
 
-#: src/libslic3r/SLAPrintSteps.cpp:47
+#: src/libslic3r/SLAPrintSteps.cpp:48
 msgid "Generating support tree"
 msgstr "Generazione albero di supporto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2022
+#: src/slic3r/GUI/GCodeViewer.cpp:933
+msgid "Generating toolpaths"
+msgstr "Generazione percorsi"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:1318
+msgid "Generating vertex buffer"
+msgstr "Generazione buffer vertici"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2181
 msgid "Generic"
 msgstr "Generico"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
 msgid "Gizmo cut"
 msgstr "Gizmo Taglia"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
 msgid "Gizmo move"
 msgstr "Gizmo Sposta"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
+msgid "Gizmo move: Press to snap by 1mm"
+msgstr "Gizmo Sposta: Premere per scatti di 1mm"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
 msgid "Gizmo Place face on bed"
 msgstr "Gizmo Posiziona faccia sul piano"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
 msgid "Gizmo rotate"
 msgstr "Gizmo Ruota"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:203
+msgid "Gizmo rotate: Press to rotate selected objects around their own center"
+msgstr "Gizmo ruota: Premi per ruotare gli oggetti attorno al loro centro"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
 msgid "Gizmo scale"
 msgstr "Gizmo Ridimensiona"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+msgid "Gizmo scale: Press to activate one direction scaling"
+msgstr "Gizmo ridimensiona: Premi per attivare il ridimensionamento su una direzione"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:202
+msgid "Gizmo scale: Press to scale selected objects around their own center"
+msgstr "Gizmo ridimensiona: Premi per ridimensionare gli oggetti attorno al loro centro"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
+msgid "Gizmo scale: Press to snap by 5%"
+msgstr "Gizmo Ridimensiona: Premere per salti del 5%"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:200
+msgid "Gizmo scale: Scale selection to fit print volume"
+msgstr "Gizmo ridimensiona: Ridimensiona la selezione per riempire il volume di stampa"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
 msgid "Gizmo SLA hollow"
 msgstr "Gizmo SLA Svuota"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
 msgid "Gizmo SLA support points"
 msgstr "Gizmo Punti supporto SLA"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2921
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:562
+#: src/slic3r/GUI/GLCanvas3D.cpp:3165
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520
 msgid "Gizmo-Move"
 msgstr "Gizmo-Sposta"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:489
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:639
 msgid "Gizmo-Place on Face"
 msgstr "Gizmo-Posiziona su faccia"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3001
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:564
+#: src/slic3r/GUI/GLCanvas3D.cpp:3249
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:522
 msgid "Gizmo-Rotate"
 msgstr "Gizmo-Ruota"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:563
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521
 msgid "Gizmo-Scale"
 msgstr "Gizmo-Ridimensiona"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
 msgid "Gizmos"
 msgstr "Gizmo"
 
-#: src/slic3r/GUI/AboutDialog.cpp:259
+#: src/slic3r/GUI/AboutDialog.cpp:284 src/slic3r/GUI/GUI_App.cpp:244
 msgid "GNU Affero General Public License, version 3"
 msgstr "GNU Affero General Public License, versione 3"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:980
+#: src/slic3r/GUI/ConfigWizard.cpp:1346
 msgid "Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
 msgstr "È necessaria una buona precisione, quindi utilizza un calibro ed effettua diverse misurazioni lungo il filamento, quindi calcola la media."
 
-#: src/libslic3r/PrintConfig.cpp:844
+#: src/libslic3r/PrintConfig.cpp:882
 msgid "Grid"
 msgstr "Griglia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2454
+#: src/slic3r/GUI/PrintHostDialogs.cpp:57
+msgid "Group"
+msgstr "Gruppo"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2846
 msgid "Group manipulation"
 msgstr "Manipolazione gruppo"
 
-#: src/slic3r/GUI/Preferences.cpp:133
+#: src/slic3r/GUI/Preferences.cpp:200
 msgid "GUI"
 msgstr "GUI"
 
-#: src/libslic3r/PrintConfig.cpp:852
+#: src/libslic3r/PrintConfig.cpp:890
 msgid "Gyroid"
 msgstr "Giroide"
 
-#: src/slic3r/GUI/Tab.cpp:2937
-msgid "has the following unsaved changes:"
-msgstr "ha le seguenti modifiche non salvate:"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47
 msgid "Head diameter"
 msgstr "Diametro testa"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:317
-msgid "Head penetration should not be greater than the head width."
-msgstr "L'inserimento della capocchia non deve essere più grande della sua larghezza."
+#: src/libslic3r/PrintConfig.cpp:2772
+msgid "Head penetration"
+msgstr "Penetrazione testa"
 
-#: src/libslic3r/PrintConfig.cpp:869
+#: src/slic3r/GUI/ConfigManipulation.cpp:322
+msgid "Head penetration should not be greater than the head width."
+msgstr "L'inserimento della testa non deve essere più grande della sua larghezza."
+
+#: src/libslic3r/PrintConfig.cpp:910
 msgid "Heated build plate temperature for the first layer. Set this to zero to disable bed temperature control commands in the output."
 msgstr "Temperatura piano riscaldato per il primo layer. Imposta a zero per disattivare i comandi di controllo temperatura nell'output."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:222 src/libslic3r/PrintConfig.cpp:500
+#: src/slic3r/GUI/GUI_Preview.cpp:276 src/libslic3r/PrintConfig.cpp:536
 msgid "Height"
 msgstr "Altezza"
 
-#: src/libslic3r/GCode/PreviewData.cpp:347
+#: src/slic3r/GUI/GCodeViewer.cpp:2236 src/libslic3r/GCode/PreviewData.cpp:352
 msgid "Height (mm)"
 msgstr "Altezza (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:1688
+#: src/libslic3r/PrintConfig.cpp:1796
 msgid "Height of skirt expressed in layers. Set this to a tall value to use skirt as a shield against drafts."
 msgstr "Altezza dello skirt espresso in layer. Imposta un valore alto per utilizzare lo skirt come scudo contro le scolature."
 
-#: src/libslic3r/PrintConfig.cpp:2360
+#: src/libslic3r/PrintConfig.cpp:2503
 msgid "Height of the display"
 msgstr "Altezza del display"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1631
 msgid "Height range Modifier"
-msgstr "Modificatore intervallo Altezza"
+msgstr "Modificatore intervallo altezza"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Height ranges"
 msgstr "Intervalli Altezza"
 
-#: src/libslic3r/PrintConfig.cpp:261
+#: src/libslic3r/PrintConfig.cpp:295
 msgid "Heights at which a filament change is to occur."
 msgstr "Altezze alle quali i cambi di filamento devono avvenire."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:433
-#, possible-c-format
+#: src/slic3r/GUI/ConfigWizard.cpp:451
+#, c-format
 msgid "Hello, welcome to %s! This %s helps you with the initial configuration; just a few settings and you will be ready to print."
 msgstr "Ciao, benvenuto su %s! La %s ti aiuterà con la configurazione iniziale; giusto qualche impostazione e sarai pronto a stampare."
 
-#: src/libslic3r/PrintConfig.cpp:3365
+#: src/libslic3r/PrintConfig.cpp:3564
 msgid "Help"
 msgstr "Aiuto"
 
-#: src/libslic3r/PrintConfig.cpp:3371
+#: src/libslic3r/PrintConfig.cpp:3570
 msgid "Help (FFF options)"
 msgstr "Aiuto (opzioni FFF)"
 
-#: src/libslic3r/PrintConfig.cpp:3376
+#: src/libslic3r/PrintConfig.cpp:3575
 msgid "Help (SLA options)"
 msgstr "Aiuto (opzioni SLA)"
 
@@ -3218,96 +3791,80 @@ msgstr "Aiuto (opzioni SLA)"
 msgid "Here you can adjust required purging volume (mm³) for any given pair of tools."
 msgstr "Qui è possibile regolare il volume di spurgo necessario (mm³) per ogni coppia di attrezzi."
 
-#: src/libslic3r/PrintConfig.cpp:973
+#: src/libslic3r/PrintConfig.cpp:1017
 msgid "High extruder current on filament swap"
 msgstr "Alta corrente estrusore al cambio filamento"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:277
+#: src/slic3r/GUI/GLCanvas3D.cpp:263
 msgid "Higher print quality versus higher print speed."
 msgstr "Qualità di stampa più alta contro velocità di stampa più alta."
 
-#: src/libslic3r/PrintConfig.cpp:427 src/libslic3r/PrintConfig.cpp:853
+#: src/libslic3r/PrintConfig.cpp:463 src/libslic3r/PrintConfig.cpp:891
 msgid "Hilbert Curve"
 msgstr "Curva di Hilbert"
 
-#: src/slic3r/GUI/Plater.cpp:1042
+#: src/slic3r/GUI/Plater.cpp:916
 msgid "Hold Shift to Slice & Export G-code"
 msgstr "Tieni premuto Shift per fare lo Slice & Esportare il G-code"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
 msgid "Hole depth"
 msgstr "Profondità foro"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
 msgid "Hole diameter"
 msgstr "Diametro foro"
 
-#: src/slic3r/GUI/Plater.cpp:2760
-msgid "Hollow"
-msgstr "Svuota"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:977
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:785
 msgid "Hollow and drill"
 msgstr "Svuota e perfora"
 
-#: src/libslic3r/PrintConfig.cpp:2910
+#: src/libslic3r/PrintConfig.cpp:3074
 msgid "Hollow out a model to have an empty interior"
 msgstr "Svuota un modello per avere l'interno vuoto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40
 msgid "Hollow this object"
 msgstr "Svuota questo oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3654
-#: src/slic3r/GUI/Tab.cpp:3655 src/libslic3r/SLA/Hollowing.cpp:46
-#: src/libslic3r/SLA/Hollowing.cpp:58 src/libslic3r/SLA/Hollowing.cpp:67
-#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2909
-#: src/libslic3r/PrintConfig.cpp:2916 src/libslic3r/PrintConfig.cpp:2926
-#: src/libslic3r/PrintConfig.cpp:2935
+#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4073
+#: src/slic3r/GUI/Tab.cpp:4074 src/libslic3r/SLA/Hollowing.cpp:45
+#: src/libslic3r/SLA/Hollowing.cpp:57 src/libslic3r/SLA/Hollowing.cpp:66
+#: src/libslic3r/SLA/Hollowing.cpp:75 src/libslic3r/PrintConfig.cpp:3073
+#: src/libslic3r/PrintConfig.cpp:3080 src/libslic3r/PrintConfig.cpp:3090
+#: src/libslic3r/PrintConfig.cpp:3099
 msgid "Hollowing"
 msgstr "Svuotamento"
 
-#: src/slic3r/GUI/Plater.cpp:2926
-msgid "Hollowing cancelled."
-msgstr "Svuotamento annullato."
-
-#: src/slic3r/GUI/Plater.cpp:2927
-msgid "Hollowing done."
-msgstr "Svuotamento completato."
-
-#: src/slic3r/GUI/Plater.cpp:2929
-msgid "Hollowing failed."
-msgstr "Svuotamento non riuscito."
-
-#: src/libslic3r/PrintConfig.cpp:2937
+#: src/libslic3r/PrintConfig.cpp:3101
 msgid "Hollowing is done in two steps: first, an imaginary interior is calculated deeper (offset plus the closing distance) in the object and then it's inflated back to the specified offset. A greater closing distance makes the interior more rounded. At zero, the interior will resemble the exterior the most."
 msgstr "Lo svuotamento avviene in due passaggi: prima, viene calcolato un interno immaginario (offset più la distanza di chiusura) nell'oggetto e viene quindi riportato all'offset specificato. Una distanza di chiusura più grande rende l'interno più arrotondato. A zero, l'interno sarà più somigliante all'esterno."
 
-#: src/libslic3r/SLAPrintSteps.cpp:43
+#: src/libslic3r/SLAPrintSteps.cpp:44
 msgid "Hollowing model"
 msgstr "Svuotamento modello"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:813
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:624
 msgid "Hollowing parameter change"
 msgstr "Cambio parametro svuotamento"
 
-#: src/libslic3r/PrintConfig.cpp:850 src/libslic3r/PrintConfig.cpp:2011
+#: src/libslic3r/PrintConfig.cpp:888 src/libslic3r/PrintConfig.cpp:2153
 msgid "Honeycomb"
 msgstr "Nido d'ape"
 
-#: src/slic3r/GUI/Tab.cpp:1064
+#: src/slic3r/GUI/Tab.cpp:1386
 msgid "Horizontal shells"
 msgstr "Gusci orizzontali"
 
-#: src/libslic3r/PrintConfig.cpp:245
+#: src/libslic3r/PrintConfig.cpp:279
 msgid "Horizontal width of the brim that will be printed around each object on the first layer."
 msgstr "Larghezza orizzontale del brim che sarà stampata attorno ad ogni oggetto nel primo layer."
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:152
+#: src/slic3r/GUI/PrintHostDialogs.cpp:150
 msgid "Host"
 msgstr "Host"
 
-#: src/libslic3r/PrintConfig.cpp:1332
+#: src/libslic3r/PrintConfig.cpp:1440
 msgid "Host Type"
 msgstr "Tipo di Host"
 
@@ -3315,189 +3872,249 @@ msgstr "Tipo di Host"
 msgid "Hostname"
 msgstr "Nome Host"
 
-#: src/libslic3r/PrintConfig.cpp:97
+#: src/libslic3r/PrintConfig.cpp:99
 msgid "Hostname, IP or URL"
 msgstr "Nome Host, IP o URL"
 
-#: src/slic3r/GUI/Tab.cpp:139
-msgid "Hover the cursor over buttons to find more information \nor click this button."
+#: src/slic3r/GUI/Tab.cpp:210
+msgid ""
+"Hover the cursor over buttons to find more information \n"
+"or click this button."
 msgstr "Scorri il cursore sui bottoni per ottenere maggiori informazioni o clicca su questo bottone."
 
-#: src/libslic3r/PrintConfig.cpp:2812
+#: src/libslic3r/PrintConfig.cpp:2976
 msgid "How far should the pad extend around the contained geometry"
 msgstr "Quanto deve estendersi il Pad attorno la geometria contenuta"
 
-#: src/libslic3r/PrintConfig.cpp:2901
+#: src/libslic3r/PrintConfig.cpp:3065
 msgid "How much should the tiny connectors penetrate into the model body."
 msgstr "Quanto devono penetrare i piccoli connettori nel corpo del modello."
 
-#: src/libslic3r/PrintConfig.cpp:2631
+#: src/libslic3r/PrintConfig.cpp:2774
 msgid "How much the pinhead has to penetrate the model surface"
 msgstr "Quanto deve penetrare l'apice nella superficie del modello"
 
-#: src/libslic3r/PrintConfig.cpp:2755
+#: src/libslic3r/PrintConfig.cpp:2919
 msgid "How much the supports should lift up the supported object. If \"Pad around object\" is enabled, this value is ignored."
 msgstr "Quanto deve sollevarsi il supporto fino all'oggetto supportato. Se \"Pad intorno all'oggetto\" è attivo, questo valore è ignorato."
 
-#: src/libslic3r/PrintConfig.cpp:111
+#: src/libslic3r/PrintConfig.cpp:1209
+msgid "How to apply limits"
+msgstr "Come applicare i limiti"
+
+#: src/libslic3r/PrintConfig.cpp:1203
+msgid "How to apply the Machine Limits"
+msgstr "Come applicare i Limiti Macchina"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:358
+#: src/libslic3r/PrintConfig.cpp:113
 msgid "HTTPS CA File"
 msgstr "File HTTPS CA"
 
-#: src/slic3r/GUI/Tab.cpp:1713
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:319
 msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
 msgstr "File HTTPS CA opzionale. È necessario solo se si intende usare un HTTPS con certificato autofirmato."
 
-#: src/slic3r/GUI/Preferences.cpp:222
+#: src/slic3r/GUI/Preferences.cpp:376
 msgid "Icon size in a respect to the default size"
 msgstr "Dimensioni icona rispetto alla dimensione predefinita"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:149
+#: src/slic3r/GUI/PrintHostDialogs.cpp:147
 msgid "ID"
 msgstr "ID"
 
-#: src/libslic3r/PrintConfig.cpp:1873
+#: src/libslic3r/PrintConfig.cpp:2015
 msgid "If checked, supports will be generated automatically based on the overhang threshold value. If unchecked, supports will be generated inside the \"Support Enforcer\" volumes only."
 msgstr "Se attivo, verranno automaticamente generati i supporti in base al valore soglia di sporgenza. Se disattivato, i supporti verranno generati solamente all'interno dei volumi di \"Rinforzo Supporto\"."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:773
-#, possible-c-format
+#: src/slic3r/GUI/ConfigWizard.cpp:1132
+#, c-format
 msgid "If enabled, %s checks for new application versions online. When a new version becomes available, a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "Se attivato, %s verifica la presenza di nuove versioni online. Quando è disponibile una nuova versione, viene mostrata una notifica al successivo avvio dell'applicazione (mai durante l'uso del programma). È solo un meccanismo di notifica, non viene effettuato nessun aggiornamento automatico."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:783
-#, possible-c-format
+#: src/slic3r/GUI/ConfigWizard.cpp:1142
+#, c-format
 msgid "If enabled, %s downloads updates of built-in system presets in the background.These updates are downloaded into a separate temporary location.When a new preset version becomes available it is offered at application startup."
 msgstr "Se attivo, %s scarica in background gli aggiornamenti dei preset integrati nel sistema. Questi aggiornamenti vengono scaricati in una cartella temporanea separata. Quando è disponibile una nuova versione del preset, questa viene proposta all'avvio."
 
-#: src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:1994
 msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
 msgstr "Se attivata, tutti gli estrusori di stampa verranno preparati nel bordo frontale del piano di stampa all'inizio della stampa."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:805
-msgid "If enabled, allows the Reload from disk command to automatically find and load the files when invoked.\nIf not enabled, the Reload from disk command will ask to select each file using an open file dialog."
-msgstr "Se attivo, permette al comando di Ricarica da disco di trovare e caricare automaticamente i file quando richiesti.\nSe non attivo, il comando Ricarica da disco chiederà di selezionare ciascun file tramite finestra di apertura file."
+#: src/slic3r/GUI/ConfigWizard.cpp:1164
+msgid ""
+"If enabled, allows the Reload from disk command to automatically find and load the files when invoked.\n"
+"If not enabled, the Reload from disk command will ask to select each file using an open file dialog."
+msgstr ""
+"Se attivo, permette al comando di Ricarica da disco di trovare e caricare automaticamente i file quando richiesti.\n"
+"Se non attivo, il comando Ricarica da disco chiederà di selezionare ciascun file tramite finestra di apertura file."
 
-#: src/slic3r/GUI/Preferences.cpp:74
+#: src/slic3r/GUI/Preferences.cpp:91
 msgid "If enabled, allows the Reload from disk command to automatically find and load the files when invoked."
 msgstr "Se attivo, permette il comando Ricarica da disco per trovare e caricare automaticamente i file quando richiesto."
 
-#: src/slic3r/GUI/Preferences.cpp:66
+#: src/slic3r/GUI/Preferences.cpp:238
+msgid "If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer. If disabled, changes made using the sequential slider, in preview, apply to the whole gcode."
+msgstr "Se abilitato, le modifiche effettuate utilizzando il cursore sequenziale, in anteprima, si applicano solo al livello superiore del gcode. Se disabilitato, le modifiche effettuate utilizzando il cursore sequenziale, in anteprima, si applicano all'intero gcode."
+
+#: src/slic3r/GUI/Preferences.cpp:83
 msgid "If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "Se attivato, PrusaSlicer verifica la presenza di nuove versioni online. Quando una nuova versione è disponibile, viene mostrata una notifica al successivo avvio dell'applicazione (mai durante l'uso del programma). Questo è solo un meccanismo di notifica, non viene effettuato nessun aggiornamento automatico."
 
-#: src/slic3r/GUI/Preferences.cpp:82
+#: src/slic3r/GUI/Preferences.cpp:270
+msgid "If enabled, renders object using the environment map."
+msgstr "Se abilitato, renderizza l'oggetto utilizzando la mappa ambientale."
+
+#: src/slic3r/GUI/Preferences.cpp:200
+msgid "If enabled, reverses the direction of zoom with mouse wheel"
+msgstr "Se abilitato, inverte la direzione dello zoom con la rotella del mouse"
+
+#: src/slic3r/GUI/Preferences.cpp:99
 msgid "If enabled, Slic3r downloads updates of built-in system presets in the background. These updates are downloaded into a separate temporary location. When a new preset version becomes available it is offered at application startup."
 msgstr "Se abilitato, Slic3r scarica gli aggiornamenti dei preset inclusi in background. Questi aggiornamenti sono scaricati in una posizione temporanea. Quando una nuova versione dei preset diventa disponibile, viene offerta all'avvio."
 
-#: src/slic3r/GUI/Preferences.cpp:106
+#: src/slic3r/GUI/Preferences.cpp:137
 msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
 msgstr "Se attivo, la scena 3D verrà renderizzata con la risoluzione Retina. Se si riscontrano problemi di prestazioni 3D, disattivare questa opzione potrebbe essere d'aiuto."
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/slic3r/GUI/Preferences.cpp:215
+msgid "If enabled, the button for the collapse sidebar will be appeared in top right corner of the 3D Scene"
+msgstr "Se abilitato, il pulsante per ridurre la barra di scorrimento laterale apparirà nell'angolo in alto a destra della scena 3D"
+
+#: src/libslic3r/PrintConfig.cpp:3698
+msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
+msgstr "Se abilitato, gli argomenti della riga di comando vengono inviati ad un'istanza GUI esistente di PrusaSlicer, oppure viene attivata una finestra PrusaSlicer esistente. Sovrascrive il valore di configurazione \"single_instance\" dalle preferenze dell'applicazione."
+
+#: src/libslic3r/PrintConfig.cpp:1804
 msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
 msgstr "Se abilitata, lo skirt sarà alto quanto l'oggetto stampato più alto. Questo è utile per evitare che una stampa ABS o ASA si deformi e si stacchi dal piano di stampa a causa di correnti d'aria."
 
-#: src/libslic3r/PrintConfig.cpp:1858
+#: src/libslic3r/PrintConfig.cpp:2000
 msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
 msgstr "Se attiva, la torre di spurgo non verrà stampata sui layer con cambio attrezzo. Sui layer con un cambio attrezzo, l'estrusore si sposterà verso il basso per stampare la torre di spurgo. L'utente è responsabile nell'accertarsi che non avvengano collisioni durante la stampa."
 
-#: src/slic3r/GUI/Preferences.cpp:128
+#: src/slic3r/GUI/Preferences.cpp:193
 msgid "If enabled, use free camera. If not enabled, use constrained camera."
 msgstr "Se attivo, usa la visuale libera. Se non attivo, usa la visuale vincolata."
 
-#: src/slic3r/GUI/Preferences.cpp:121
+#: src/slic3r/GUI/Preferences.cpp:186
 msgid "If enabled, use perspective camera. If not enabled, use orthographic camera."
 msgstr "Se attivo, usa la visuale in prospettiva. Se non attivo, usa la visuale ortografica."
 
-#: src/slic3r/GUI/Preferences.cpp:145
+#: src/slic3r/GUI/Preferences.cpp:222
 msgid "If enabled, you can change size of toolbar icons manually."
 msgstr "Se attivo, è possibile modificare manualmente la dimensione delle icone degli strumenti."
 
-#: src/slic3r/GUI/PresetHints.cpp:29
+#: src/slic3r/GUI/PresetHints.cpp:28
 msgid "If estimated layer time is below ~%1%s, fan will run at %2%%% and print speed will be reduced so that no less than %3%s are spent on that layer (however, speed will never be reduced below %4%mm/s)."
 msgstr "Se il tempo previsto per il layer è inferiore a ~%1%s, la ventola girerà al %2%%% e la velocità di stampa sarà ridotta così da impiegare non meno di %3%s su quel layer (in ogni caso, la velocità non sarà mai ridotta sotto %4%mm/s)."
 
-#: src/slic3r/GUI/PresetHints.cpp:36
+#: src/slic3r/GUI/PresetHints.cpp:35
 msgid "If estimated layer time is greater, but still below ~%1%s, fan will run at a proportionally decreasing speed between %2%%% and %3%%%."
 msgstr "Se la durata di stampa prevista per il layer è più lunga, ma comunque inferiore a ~%1%s, la ventola girerà ad una velocità proporzionalmente decrescente compresa tra %2%%% e %3%%%."
 
-#: src/libslic3r/PrintConfig.cpp:901
+#: src/libslic3r/PrintConfig.cpp:943
 msgid "If expressed as absolute value in mm/s, this speed will be applied to all the print moves of the first layer, regardless of their type. If expressed as a percentage (for example: 40%) it will scale the default speeds."
 msgstr "Se espresso in valore assoluto in mm/s, questa velocità sarà applicata a tutti i movimenti di stampa del primo layer, a prescindere dal tipo di movimento. Se espresso in percentuale (per esempio: 40%) verranno scalate le velocità predefinite."
 
-#: src/libslic3r/PrintConfig.cpp:573
+#: src/libslic3r/PrintConfig.cpp:609
 msgid "If layer print time is estimated below this number of seconds, fan will be enabled and its speed will be calculated by interpolating the minimum and maximum speeds."
 msgstr "Se il tempo stimato di stampa del layer è al di sotto di questo numero di secondi, la ventola sarà attivata e la sua velocità sarà calcolata interpolando la velocità minima e massima."
 
-#: src/libslic3r/PrintConfig.cpp:1706
+#: src/libslic3r/PrintConfig.cpp:1821
 msgid "If layer print time is estimated below this number of seconds, print moves speed will be scaled down to extend duration to this value."
 msgstr "Se il tempo stimato di stampa del layer è al di sotto di questo numero di secondi, la velocità dei movimenti di stampa sarà ridotta per estendere la durata di questo valore."
 
-#: src/libslic3r/PrintConfig.cpp:567
+#: src/libslic3r/PrintConfig.cpp:603
 msgid "If this is enabled, fan will never be disabled and will be kept running at least at its minimum speed. Useful for PLA, harmful for ABS."
 msgstr "Se questo è attivo, la ventola non verrà mai disattiva e verrà mantenuta attiva almeno alla velocità minima. Utile per il PLA, dannosa per l'ABS."
 
-#: src/slic3r/GUI/Preferences.cpp:49
+#: src/slic3r/GUI/Preferences.cpp:66
 msgid "If this is enabled, Slic3r will auto-center objects around the print bed center."
 msgstr "Se attivo, Slic3r posizionerà automaticamente gli oggetti al centro del piano di stampa."
 
-#: src/slic3r/GUI/Preferences.cpp:57
+#: src/slic3r/GUI/Preferences.cpp:74
 msgid "If this is enabled, Slic3r will pre-process objects as soon as they're loaded in order to save time when exporting G-code."
 msgstr "Se attivo, Slic3r processerà in anticipo gli oggetti non appena saranno caricati, così da risparmiare tempo durante l'esportazione del G-code."
 
-#: src/slic3r/GUI/Preferences.cpp:41
+#: src/slic3r/GUI/Preferences.cpp:54
 msgid "If this is enabled, Slic3r will prompt the last output directory instead of the one containing the input files."
 msgstr "Se attivo, Slic3r suggerirà l'ultima cartella di destinazione invece della cartella contenente il file di ricezione."
 
-#: src/libslic3r/PrintConfig.cpp:1562
+#: src/slic3r/GUI/Preferences.cpp:125
+msgid "If this is enabled, when starting PrusaSlicer and another instance of the same PrusaSlicer is already running, that instance will be reactivated instead."
+msgstr "Se questo è abilitato, quando si avvia PrusaSlicer e un'altra istanza della stessa PrusaSlicer è già in esecuzione, quell'istanza verrà invece riattivata."
+
+#: src/libslic3r/PrintConfig.cpp:1670
 msgid "If you set this to a positive value, Z is quickly raised every time a retraction is triggered. When using multiple extruders, only the setting for the first extruder will be considered."
 msgstr "Se inserisci un valore positivo, Z verrà alzato velocemente ogni volta che si innesca una retrazione. Quando si utilizzano diversi estrusori, verrà considerato solamente l'impostazione del primo estrusore."
 
-#: src/libslic3r/PrintConfig.cpp:1571
+#: src/libslic3r/PrintConfig.cpp:1679
 msgid "If you set this to a positive value, Z lift will only take place above the specified absolute Z. You can tune this setting for skipping lift on the first layers."
 msgstr "Se inserisci un valore positivo, il sollevamento Z avverrà solamente sopra un certo specifico valore assoluto Z. Puoi regolare questa impostazione per evitare il sollevamento nei primi layer."
 
-#: src/libslic3r/PrintConfig.cpp:1580
+#: src/libslic3r/PrintConfig.cpp:1688
 msgid "If you set this to a positive value, Z lift will only take place below the specified absolute Z. You can tune this setting for limiting lift to the first layers."
 msgstr "Se inserisci un valore positivo, il sollevamento Z avverrà solamente sotto un certo specifico valore assoluto Z. Puoi regolare questa impostazione per limitare il sollevamento ai primi layer."
 
-#: src/libslic3r/PrintConfig.cpp:1454
+#: src/libslic3r/PrintConfig.cpp:1562
 msgid "If you want to process the output G-code through custom scripts, just list their absolute paths here. Separate multiple scripts with a semicolon. Scripts will be passed the absolute path to the G-code file as the first argument, and they can access the Slic3r config settings by reading environment variables."
 msgstr "Se vuoi processare il G-code in uscita con script personalizzati, basta elencare qui il loro percorso assoluto. Separa i diversi script con un punto e virgola.  Gli script passeranno il percorso assoluto nel G-code come primo argomento, e potranno accedere alle impostazioni di configurazione di Slic3r leggendo le variabili di ambiente."
 
-#: src/libslic3r/PrintConfig.cpp:530
+#: src/libslic3r/PrintConfig.cpp:566
 msgid "If your firmware doesn't handle the extruder displacement you need the G-code to take it into account. This option lets you specify the displacement of each extruder with respect to the first one. It expects positive coordinates (they will be subtracted from the XY coordinate)."
 msgstr "Se il firmware non gestisce lo spostamento dell'estrusore,  è necessario che il G-code ne tenga conto. Questa opzione  permette di specificare lo spostamento di ciascun estrusore rispetto al primo. Si aspetta delle coordinate positive (che saranno sottratte dalle coordinate XY)."
 
-#: src/libslic3r/PrintConfig.cpp:2169
+#: src/libslic3r/PrintConfig.cpp:2312
 msgid "If your firmware requires relative E values, check this, otherwise leave it unchecked. Most firmwares use absolute values."
 msgstr "Se il firmware richiede valori E relativi, selezionalo, altrimenti mantienilo deselezionato. Molti firmware utilizzano valori assoluti."
 
-#: src/libslic3r/PrintConfig.cpp:3485
+#: src/libslic3r/PrintConfig.cpp:1219
+msgid "Ignore"
+msgstr "Ignora"
+
+#: src/libslic3r/PrintConfig.cpp:3684
 msgid "Ignore non-existent config files"
 msgstr "Ignora file di configurazione non esistenti"
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:192
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:173
+msgid "Ignores facets facing away from the camera."
+msgstr "Ignora le faccette rivolte verso l'esterno."
+
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Import &Config"
 msgstr "Importa &Configurazione"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Import Config &Bundle"
-msgstr "Importa Configurazione da &Bundle"
+msgstr "Importa Configurazione in &Bundle"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Import Config from &project"
 msgstr "Importa Configurazione da &progetto"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
 msgid "Import Config from ini/amf/3mf/gcode"
 msgstr "Importa Config da ini/amf/3mf/gcode"
 
-#: src/slic3r/GUI/Plater.cpp:4603
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39
+msgid "Import file"
+msgstr "Importa file"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46
+msgid "Import model and profile"
+msgstr "Importa modello e profilo"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48
+msgid "Import model only"
+msgstr "Importa solo il modello"
+
+#: src/slic3r/GUI/Plater.cpp:4655
 msgid "Import Object"
 msgstr "Importa Oggetto"
 
-#: src/slic3r/GUI/Plater.cpp:4607
+#: src/slic3r/GUI/Plater.cpp:4659
 msgid "Import Objects"
 msgstr "Importa Oggetti"
 
@@ -3505,16 +4122,51 @@ msgstr "Importa Oggetti"
 msgid "Import of the repaired 3mf file failed"
 msgstr "Importazione del file 3mf riparato non riuscita"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47
+msgid "Import profile only"
+msgstr "Solo profilo di importazione"
+
+#: src/slic3r/GUI/MainFrame.cpp:1050
+msgid "Import SL1 archive"
+msgstr "Importa archivio SL1"
+
+#: src/slic3r/GUI/Plater.cpp:1561
+msgid "Import SLA archive"
+msgstr "Importa archivio SLA"
+
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Import STL (imperial units)"
+msgstr "Importa STL (unità imperiali)"
+
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Import STL/OBJ/AM&F/3MF"
 msgstr "Importa STL/OBJ/AM&F/3MF"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:118
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:111
 msgid "Import STL/OBJ/AMF/3MF without config, keep plater"
 msgstr "Importa STL/OBJ/AMF/3MF senza configurazione, mantieni piano"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3422
-#, possible-c-format
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:159
+msgid "Importing canceled."
+msgstr "Importazione annullata."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:160
+msgid "Importing done."
+msgstr "Importazione completata."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:135
+msgid "Importing SLA archive"
+msgstr "Importazione archivio SLA"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+msgid "in"
+msgstr "in"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3885
+#, c-format
 msgid "In this mode you can select only other %s Items%s"
 msgstr "In questa modalità puoi selezionare solo altri %s oggetti %s"
 
@@ -3522,451 +4174,515 @@ msgstr "In questa modalità puoi selezionare solo altri %s oggetti %s"
 msgid "Incompatible bundles:"
 msgstr "Gruppi incompatibili:"
 
+#: src/slic3r/GUI/PresetComboBoxes.cpp:241
+msgid "Incompatible presets"
+msgstr "Preset incompatibili"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75
-#, possible-c-format
+#, c-format
 msgid "Incompatible with this %s"
 msgstr "Incompatibile con questo %s"
 
-#: src/slic3r/GUI/Plater.cpp:4685
+#: src/slic3r/GUI/Plater.cpp:4790
 msgid "Increase Instances"
 msgstr "Aumenta Istanze"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:264
+#: src/slic3r/GUI/GLCanvas3D.cpp:251
 msgid "Increase/decrease edit area"
 msgstr "Aumenta/diminuisci l'area di modifica"
 
-#: src/slic3r/GUI/Plater.cpp:2922
-msgid "Indexing hollowed object"
-msgstr "Indicizzazione di un oggetto svuotato"
-
 #. TRN Description for "UNLOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3258
-msgid "indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\nClick the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values."
-msgstr "indica che è stata modificata qualche impostazione e non è uguale ai valori di sistema (o predefiniti) del corrente gruppo di opzioni.\nClicca l'icona LUCCHETTO APERTO per reimpostare tutte le impostazioni del corrente gruppo di opzioni ai valori di sistema (o predefiniti)."
+#: src/slic3r/GUI/Tab.cpp:3695
+msgid ""
+"indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
+"Click the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values."
+msgstr ""
+"indica che è stata modificata qualche impostazione e non è uguale ai valori di sistema (o predefiniti) del corrente gruppo di opzioni.\n"
+"Clicca l'icona LUCCHETTO APERTO per reimpostare tutte le impostazioni del corrente gruppo di opzioni ai valori di sistema (o predefiniti)."
 
 #. TRN Description for "LOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3254
+#: src/slic3r/GUI/Tab.cpp:3691
 msgid "indicates that the settings are the same as the system (or default) values for the current option group"
 msgstr "indica che le impostazioni sono uguali ai valori di sistema (o predefiniti) per l'attuale gruppo di opzioni"
 
 #. TRN Description for "BACK ARROW"
-#: src/slic3r/GUI/Tab.cpp:3270
-msgid "indicates that the settings were changed and are not equal to the last saved preset for the current option group.\nClick the BACK ARROW icon to reset all settings for the current option group to the last saved preset."
-msgstr "indica che le impostazioni sono state modificate e non corrispondono all'ultimo preset salvato per l'attuale gruppo opzioni.\nClicca l'icona FRECCIA INDIETRO per reimpostare all'ultimo preset salvato tutte le impostazioni per il seguente gruppo di opzioni."
+#: src/slic3r/GUI/Tab.cpp:3707
+msgid ""
+"indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
+"Click the BACK ARROW icon to reset all settings for the current option group to the last saved preset."
+msgstr ""
+"indica che le impostazioni sono state modificate e non corrispondono all'ultimo preset salvato per l'attuale gruppo opzioni.\n"
+"Clicca l'icona FRECCIA INDIETRO per reimpostare all'ultimo preset salvato tutte le impostazioni per il seguente gruppo di opzioni."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:211
-#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96
-#: src/slic3r/GUI/GUI_ObjectList.cpp:614 src/slic3r/GUI/Plater.cpp:527
-#: src/slic3r/GUI/Tab.cpp:1091 src/slic3r/GUI/Tab.cpp:1092
-#: src/libslic3r/PrintConfig.cpp:203 src/libslic3r/PrintConfig.cpp:416
-#: src/libslic3r/PrintConfig.cpp:436 src/libslic3r/PrintConfig.cpp:776
-#: src/libslic3r/PrintConfig.cpp:790 src/libslic3r/PrintConfig.cpp:827
-#: src/libslic3r/PrintConfig.cpp:981 src/libslic3r/PrintConfig.cpp:991
-#: src/libslic3r/PrintConfig.cpp:1009 src/libslic3r/PrintConfig.cpp:1028
-#: src/libslic3r/PrintConfig.cpp:1047 src/libslic3r/PrintConfig.cpp:1728
-#: src/libslic3r/PrintConfig.cpp:1745
+#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:93
+#: src/slic3r/GUI/GUI_ObjectList.cpp:652 src/slic3r/GUI/Plater.cpp:393
+#: src/slic3r/GUI/Tab.cpp:1413 src/slic3r/GUI/Tab.cpp:1414
+#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:450
+#: src/libslic3r/PrintConfig.cpp:472 src/libslic3r/PrintConfig.cpp:812
+#: src/libslic3r/PrintConfig.cpp:826 src/libslic3r/PrintConfig.cpp:863
+#: src/libslic3r/PrintConfig.cpp:1025 src/libslic3r/PrintConfig.cpp:1035
+#: src/libslic3r/PrintConfig.cpp:1053 src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1091 src/libslic3r/PrintConfig.cpp:1843
+#: src/libslic3r/PrintConfig.cpp:1860
 msgid "Infill"
 msgstr "Riempimento"
 
-#: src/slic3r/GUI/PresetHints.cpp:174
+#: src/slic3r/GUI/PresetHints.cpp:173
 msgid "infill"
 msgstr "riempimento"
 
-#: src/libslic3r/PrintConfig.cpp:1021
+#: src/libslic3r/PrintConfig.cpp:1065
 msgid "Infill before perimeters"
 msgstr "Riempimento prima dei perimetri"
 
-#: src/libslic3r/PrintConfig.cpp:1001
+#: src/libslic3r/PrintConfig.cpp:1045
 msgid "Infill extruder"
 msgstr "Estrusore riempimento"
 
-#: src/libslic3r/PrintConfig.cpp:1036
+#: src/libslic3r/PrintConfig.cpp:1080
 msgid "Infill/perimeters overlap"
 msgstr "Sovrapposizione riempimento/perimetri"
 
-#: src/libslic3r/Print.cpp:1584
+#: src/libslic3r/Print.cpp:1610
 msgid "Infilling layers"
 msgstr "Layer di riempimento"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3430
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3505 src/slic3r/GUI/Plater.cpp:141
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3893
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3968 src/slic3r/GUI/Plater.cpp:147
 msgid "Info"
 msgstr "Info"
 
-#: src/libslic3r/PrintConfig.cpp:1057
+#: src/slic3r/GUI/GUI_App.cpp:1087 src/slic3r/GUI/Tab.cpp:3435
+msgid "Information"
+msgstr "Informazioni"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
+msgid "Infornation"
+msgstr "Informazioni"
+
+#: src/libslic3r/PrintConfig.cpp:1101
 msgid "Inherits profile"
 msgstr "Eredita profilo"
 
-#: src/libslic3r/SLAPrint.cpp:653
+#: src/libslic3r/SLAPrint.cpp:667
 msgid "Initial exposition time is out of printer profile bounds."
 msgstr "Il tempo di esposizione iniziale è fuori dai limiti del profilo stampante."
 
-#: src/libslic3r/PrintConfig.cpp:2564 src/libslic3r/PrintConfig.cpp:2565
+#: src/libslic3r/PrintConfig.cpp:2707 src/libslic3r/PrintConfig.cpp:2708
 msgid "Initial exposure time"
 msgstr "Tempo di esposizione iniziale"
 
-#: src/libslic3r/PrintConfig.cpp:2482 src/libslic3r/PrintConfig.cpp:2483
+#: src/libslic3r/PrintConfig.cpp:2625 src/libslic3r/PrintConfig.cpp:2626
 msgid "Initial layer height"
 msgstr "Altezza layer iniziale"
 
-#: src/slic3r/GUI/Field.cpp:204
+#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
 msgid "Input value is out of range"
 msgstr "Valore input fuori portata"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "Inspect / activate configuration snapshots"
 msgstr "Ispeziona / attiva istantanee di configurazione"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:60
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:216
-#, possible-c-format
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
+#, c-format
 msgid "Instance %d"
 msgstr "Istanza %d"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2892
 msgid "Instance manipulation"
 msgstr "Manipolazione istanza"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:56
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:58
 msgid "Instances"
 msgstr "Istanze"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1091
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3781
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1215
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4244
 msgid "Instances to Separated Objects"
 msgstr "Istanze in Oggetti Separati"
 
-#: src/libslic3r/PrintConfig.cpp:1973
+#: src/libslic3r/PrintConfig.cpp:2115
 msgid "Interface layers"
 msgstr "Layer interfaccia"
 
-#: src/libslic3r/PrintConfig.cpp:1957
+#: src/libslic3r/PrintConfig.cpp:2099
 msgid "Interface loops"
 msgstr "Giri interfaccia"
 
-#: src/libslic3r/PrintConfig.cpp:1982
+#: src/libslic3r/PrintConfig.cpp:2124
 msgid "Interface pattern spacing"
 msgstr "Spaziatura trama interfaccia"
 
-#: src/libslic3r/PrintConfig.cpp:1071
+#: src/libslic3r/PrintConfig.cpp:1115
 msgid "Interface shells"
 msgstr "Gusci interfaccia"
 
-#: src/libslic3r/Zipper.cpp:84
+#: src/libslic3r/miniz_extension.cpp:143
 msgid "internal error"
 msgstr "errore interno"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:240 src/libslic3r/ExtrusionEntity.cpp:313
+#: src/slic3r/GUI/GUI_Preview.cpp:304 src/libslic3r/ExtrusionEntity.cpp:317
+#: src/libslic3r/ExtrusionEntity.cpp:342
 msgid "Internal infill"
 msgstr "Riempimento interno"
 
-#: src/slic3r/GUI/Plater.cpp:3106
+#: src/slic3r/GUI/BedShapeDialog.cpp:145
+msgid "Invalid"
+msgstr "Non valido"
+
+#: src/slic3r/GUI/Plater.cpp:2906 src/slic3r/GUI/Plater.cpp:3583
 msgid "Invalid data"
 msgstr "Dati non validi"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:494 src/slic3r/GUI/BedShapeDialog.cpp:543
-#: src/slic3r/GUI/BedShapeDialog.cpp:566
+#: src/slic3r/GUI/BedShapeDialog.cpp:570 src/slic3r/GUI/BedShapeDialog.cpp:619
+#: src/slic3r/GUI/BedShapeDialog.cpp:642
 msgid "Invalid file format."
 msgstr "Formato file non valido."
 
-#: src/libslic3r/Zipper.cpp:80
+#: src/libslic3r/miniz_extension.cpp:139
 msgid "invalid filename"
 msgstr "nome file non valido"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:319
+#: src/slic3r/GUI/ConfigManipulation.cpp:324
 msgid "Invalid Head penetration"
-msgstr "Inserimento Capocchia non valido"
+msgstr "Penetrazione della testa non valida"
 
-#: src/libslic3r/Zipper.cpp:48
+#: src/libslic3r/miniz_extension.cpp:107
 msgid "invalid header or archive is corrupted"
 msgstr "titolo non valido o archivio corrotto"
 
-#: src/slic3r/GUI/Field.cpp:195 src/slic3r/GUI/Field.cpp:226
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:376
+#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
+#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
 msgid "Invalid numeric input."
 msgstr "Input numerico non valido."
 
-#: src/libslic3r/Zipper.cpp:78
+#: src/libslic3r/miniz_extension.cpp:137
 msgid "invalid parameter"
 msgstr "parametro non valido"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:332
+#: src/slic3r/GUI/ConfigManipulation.cpp:337
 msgid "Invalid pinhead diameter"
 msgstr "Diametro apice non valido"
 
+#: src/slic3r/GUI/GUI_ObjectList.cpp:94 src/slic3r/GUI/GUI_ObjectList.cpp:653
+#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1420
+#: src/libslic3r/ExtrusionEntity.cpp:320 src/libslic3r/ExtrusionEntity.cpp:348
+#: src/libslic3r/PrintConfig.cpp:1126 src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1146 src/libslic3r/PrintConfig.cpp:1156
+msgid "Ironing"
+msgstr "Stiratura"
+
+#: src/libslic3r/PrintConfig.cpp:1131 src/libslic3r/PrintConfig.cpp:1133
+msgid "Ironing Type"
+msgstr "Tipo di stiratura"
+
+#: src/slic3r/GUI/GUI_App.cpp:243
+msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community."
+msgstr "è basato su Slic3r di Alessandro Ranellucci e la comunità RepRap."
+
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:258
+#: src/slic3r/GUI/AboutDialog.cpp:283 src/slic3r/GUI/GUI_App.cpp:244
 msgid "is licensed under the"
 msgstr "è concesso in licenza ai sensi"
 
-#: src/slic3r/GUI/Tab.cpp:2941
-msgid "is not compatible with print profile"
-msgstr "non è compatibile con il profilo di stampa"
-
-#: src/slic3r/GUI/Tab.cpp:2940
-msgid "is not compatible with printer"
-msgstr "non è compatibile con la stampante"
-
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso"
 msgstr "Iso"
 
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso View"
 msgstr "Vista isometrica"
 
-#: src/slic3r/GUI/Tab.cpp:964
+#: src/slic3r/GUI/Tab.cpp:1282
 msgid "It can't be deleted or modified."
 msgstr "Non può essere eliminato o modificato."
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "It is not allowed to change the file to reload"
 msgstr "Non è permesso modificare il file da ricaricare"
 
-#: src/libslic3r/PrintConfig.cpp:974
+#: src/libslic3r/PrintConfig.cpp:1018
 msgid "It may be beneficial to increase the extruder motor current during the filament exchange sequence to allow for rapid ramming feed rates and to overcome resistance when loading a filament with an ugly shaped tip."
 msgstr "Potrebbe essere utile aumentare la corrente del motore estrusore durante la sequenza di cambio filamento per permettere un avanzamento rapido del ramming e per superare la resistenza durante il caricamento di un filamento con una punta deformata."
 
-#: src/slic3r/GUI/GUI_App.cpp:1084 src/slic3r/GUI/Tab.cpp:2958
+#: src/slic3r/GUI/Tab.cpp:3413
+msgid "It's a last preset for this physical printer."
+msgstr "È l'ultimo preset per questa stampante fisica."
+
+#: src/slic3r/GUI/GUI_App.cpp:1876 src/slic3r/GUI/Tab.cpp:3187
 msgid "It's impossible to print multi-part object(s) with SLA technology."
 msgstr "Non è possibile stampare oggetti multi-parte con tecnologia SLA."
 
-#: src/slic3r/GUI/Tab.cpp:2229
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:601
+msgid "It's not possible to delete the last related preset for the printer."
+msgstr "Non è possibile cancellare l'ultimo preset relativo alla stampante."
+
+#: src/slic3r/GUI/Tab.cpp:2398
 msgid "Jerk limits"
 msgstr "Limiti Jerk"
 
-#: src/libslic3r/PrintConfig.cpp:1649
+#: src/libslic3r/PrintConfig.cpp:1757
 msgid "Jitter"
 msgstr "Jitter"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:957 src/slic3r/GUI/DoubleSlider.cpp:1529
-#: src/slic3r/GUI/DoubleSlider.cpp:1651
+#: src/slic3r/GUI/DoubleSlider.cpp:1077 src/slic3r/GUI/DoubleSlider.cpp:1721
+#: src/slic3r/GUI/DoubleSlider.cpp:1852 src/slic3r/GUI/DoubleSlider.cpp:1856
 msgid "Jump to height"
 msgstr "Salta all'altezza"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:955
-#, possible-c-format
+#: src/slic3r/GUI/DoubleSlider.cpp:1075
+#, c-format
 msgid "Jump to height %s or Set extruder sequence for the entire print"
 msgstr "Salta all'altezza %s o Imposta sequenza estrusore per l'intera stampa"
 
-#: src/libslic3r/PrintConfig.cpp:566
+#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
+msgid "Jump to move"
+msgstr "Salta per spostare"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:315
+msgid "Just switch to \"%1%\" preset"
+msgstr "Passa solo al preset \"%1%\""
+
+#: src/libslic3r/PrintConfig.cpp:602
 msgid "Keep fan always on"
 msgstr "Mantieni la ventola sempre accesa"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:169
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171
 msgid "Keep lower part"
 msgstr "Mantieni parte inferiore"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:304
+#: src/slic3r/GUI/GLCanvas3D.cpp:290
 msgid "Keep min"
 msgstr "Mantieni min"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:168
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
 msgid "Keep upper part"
 msgstr "Mantieni parte superiore"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:37
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:39 src/slic3r/GUI/MainFrame.cpp:941
+#: src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Keyboard Shortcuts"
 msgstr "Scorciatoie Tastiera"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:245
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:259
 msgid "Keyboard shortcuts"
 msgstr "Scorciatoie tastiera"
 
-#: src/libslic3r/PrintConfig.cpp:2498
+#: src/libslic3r/PrintConfig.cpp:2641
 msgid "kg"
 msgstr "kg"
 
-#: src/libslic3r/PrintConfig.cpp:965
+#: src/libslic3r/PrintConfig.cpp:1009
 msgid "Label objects"
 msgstr "Etichetta oggetti"
 
-#: src/libslic3r/PrintConfig.cpp:2399
+#: src/libslic3r/PrintConfig.cpp:2542
 msgid "Landscape"
 msgstr "Landscape"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Language"
 msgstr "Lingua"
 
-#: src/slic3r/GUI/GUI_App.cpp:885
+#: src/slic3r/GUI/GUI_App.cpp:1605 src/slic3r/GUI/GUI_App.cpp:1614
 msgid "Language selection"
 msgstr "Selezione lingua"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2140
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2242
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2307
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2408
 msgid "Last instance of an object cannot be deleted."
 msgstr "Non è possibile eliminare l'ultima istanza di un oggetto."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
 msgid "Layer"
 msgstr "Layer"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:49
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1049
+#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 src/slic3r/GUI/Tab.cpp:1371
 #: src/libslic3r/PrintConfig.cpp:71
 msgid "Layer height"
 msgstr "Altezza layer"
 
-#: src/libslic3r/Print.cpp:1427
+#: src/libslic3r/Print.cpp:1453
 msgid "Layer height can't be greater than nozzle diameter"
 msgstr "L'altezza layer non può essere più grande del diametro dell'ugello"
 
-#: src/slic3r/GUI/Tab.cpp:2362
+#: src/slic3r/GUI/Tab.cpp:2531
 msgid "Layer height limits"
 msgstr "Limiti altezza layer"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
-msgid "Layer height:"
-msgstr "Altezza layer:"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2488
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2880
 msgid "Layer range Settings to modify"
 msgstr "Impostazioni da modificare in Intervallo Layer"
 
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52
-#: src/libslic3r/PrintConfig.cpp:362 src/libslic3r/PrintConfig.cpp:994
-#: src/libslic3r/PrintConfig.cpp:1505 src/libslic3r/PrintConfig.cpp:1690
-#: src/libslic3r/PrintConfig.cpp:1750 src/libslic3r/PrintConfig.cpp:1930
-#: src/libslic3r/PrintConfig.cpp:1976
+#: src/libslic3r/PrintConfig.cpp:396 src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1613 src/libslic3r/PrintConfig.cpp:1798
+#: src/libslic3r/PrintConfig.cpp:1865 src/libslic3r/PrintConfig.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:2118
 msgid "layers"
 msgstr "layer"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:67 src/slic3r/GUI/Tab.cpp:3512
-#: src/slic3r/GUI/Tab.cpp:3600
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3928
+#: src/slic3r/GUI/Tab.cpp:4010
 msgid "Layers"
 msgstr "Layer"
 
-#: src/slic3r/GUI/Tab.cpp:1048 src/slic3r/GUI/Tab.cpp:3598
+#: src/slic3r/GUI/Tab.cpp:1370 src/slic3r/GUI/Tab.cpp:4008
 msgid "Layers and perimeters"
 msgstr "Layer e perimetri"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:95
-#: src/slic3r/GUI/GUI_ObjectList.cpp:613 src/libslic3r/PrintConfig.cpp:72
-#: src/libslic3r/PrintConfig.cpp:175 src/libslic3r/PrintConfig.cpp:184
-#: src/libslic3r/PrintConfig.cpp:408 src/libslic3r/PrintConfig.cpp:470
-#: src/libslic3r/PrintConfig.cpp:478 src/libslic3r/PrintConfig.cpp:890
-#: src/libslic3r/PrintConfig.cpp:1075 src/libslic3r/PrintConfig.cpp:1374
-#: src/libslic3r/PrintConfig.cpp:1441 src/libslic3r/PrintConfig.cpp:1622
-#: src/libslic3r/PrintConfig.cpp:2074 src/libslic3r/PrintConfig.cpp:2133
-#: src/libslic3r/PrintConfig.cpp:2142
+#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:92
+#: src/slic3r/GUI/GUI_ObjectList.cpp:651 src/libslic3r/PrintConfig.cpp:72
+#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:218
+#: src/libslic3r/PrintConfig.cpp:442 src/libslic3r/PrintConfig.cpp:506
+#: src/libslic3r/PrintConfig.cpp:514 src/libslic3r/PrintConfig.cpp:932
+#: src/libslic3r/PrintConfig.cpp:1119 src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1549 src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:2217 src/libslic3r/PrintConfig.cpp:2276
+#: src/libslic3r/PrintConfig.cpp:2285
 msgid "Layers and Perimeters"
 msgstr "Layer e Perimetri"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
 msgid "Layers Slider"
 msgstr "Barra di scorrimento Layer"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Bottom"
 msgstr "Inferiore"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Top"
 msgstr "Superiore"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/Preferences.cpp:440
+msgid "Layout Options"
+msgstr "Opzioni di layout"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:48
+msgid "Leaving Paint-on supports"
+msgstr "Chiusura supporti Paint-on"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:47
+msgid "Leaving Seam painting"
+msgstr "Lasciare pittura Giunzione"
+
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left"
 msgstr "Sinistra"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Left click"
 msgstr "Click sinistro"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:237
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:29
+msgid "Left mouse button"
+msgstr "Tasto sinistro mouse"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:233
 msgid "Left mouse button:"
 msgstr "Tasto sinistro mouse:"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left View"
 msgstr "Vista sinistra"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:257
+#: src/slic3r/GUI/GUI_Preview.cpp:339
 msgid "Legend"
 msgstr "Legenda"
 
-#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1551
+#: src/slic3r/GUI/GUI_Preview.cpp:1480
+msgid "Legend/Estimated printing time"
+msgstr "Legenda/Stima del tempo di stampa"
+
+#: src/libslic3r/PrintConfig.cpp:1651 src/libslic3r/PrintConfig.cpp:1659
 msgid "Length"
 msgstr "Lunghezza"
 
-#: src/libslic3r/PrintConfig.cpp:328
+#: src/libslic3r/PrintConfig.cpp:362
 msgid "Length of the cooling tube to limit space for cooling moves inside it."
 msgstr "Lunghezza del tubo di raffreddamento per limitare lo spazio delle mosse di raffreddamento al suo interno."
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:129
+#: src/slic3r/GUI/AboutDialog.cpp:141
 msgid "License agreements of all following programs (libraries) are part of application license agreement"
 msgstr "Gli accordi di licenza di tutti i programmi seguenti (librerie) fanno parte del contratto di licenza dell'applicazione"
 
-#: src/libslic3r/PrintConfig.cpp:1561
+#: src/libslic3r/PrintConfig.cpp:1669
 msgid "Lift Z"
 msgstr "Solleva Z"
 
-#: src/libslic3r/PrintConfig.cpp:848
+#: src/libslic3r/PrintConfig.cpp:886
 msgid "Line"
 msgstr "Linea"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1427
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1558
 msgid "Load"
 msgstr "Carica"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Load a model"
 msgstr "Carica modello"
 
-#: src/libslic3r/PrintConfig.cpp:3505
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Load an model saved with imperial units"
+msgstr "Carica un modello salvato con unità imperiali"
+
+#: src/slic3r/GUI/MainFrame.cpp:1058
+msgid "Load an SL1 archive"
+msgstr "Carica un archivio SL1"
+
+#: src/libslic3r/PrintConfig.cpp:3710
 msgid "Load and store settings at the given directory. This is useful for maintaining different profiles or including configurations from a network storage."
 msgstr "Carica e archivia le impostazione in una data cartella. Questo è utile per mantenere diversi profili o aggiungere configurazioni da un archivio di rete."
 
-#: src/libslic3r/PrintConfig.cpp:3489
+#: src/libslic3r/PrintConfig.cpp:3688
 msgid "Load config file"
 msgstr "Carica file di configurazione"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:120
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
 msgid "Load Config from ini/amf/3mf/gcode and merge"
 msgstr "Carica Config da ini/amf/3mf/gcode e unisci"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Load configuration from project file"
 msgstr "Carica  configurazione dal file di progetto"
 
-#: src/libslic3r/PrintConfig.cpp:3490
+#: src/libslic3r/PrintConfig.cpp:3689
 msgid "Load configuration from the specified file. It can be used more than once to load options from multiple files."
 msgstr "Carica configurazione dal file specificato. Può essere usato più di una volta per caricare opzioni da vari file."
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Load exported configuration file"
 msgstr "Carica un file di configurazione esportato"
 
-#: src/slic3r/GUI/Plater.cpp:1395
-msgid "Load File"
-msgstr "Carica file"
-
-#: src/slic3r/GUI/Plater.cpp:1399
-msgid "Load Files"
-msgstr "Carica file"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1879
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2038
 msgid "Load Part"
 msgstr "Carica Parte"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Load presets from a bundle"
 msgstr "Carica i preset da un gruppo"
 
-#: src/slic3r/GUI/Plater.cpp:4575
+#: src/slic3r/GUI/Plater.cpp:4627
 msgid "Load Project"
 msgstr "Carica Progetto"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:102
+#: src/slic3r/GUI/BedShapeDialog.cpp:243
 msgid "Load shape from STL..."
 msgstr "Carica forma da STL..."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:182 src/slic3r/GUI/BedShapeDialog.cpp:261
+#: src/slic3r/GUI/BedShapeDialog.cpp:325 src/slic3r/GUI/BedShapeDialog.cpp:405
 msgid "Load..."
 msgstr "Caricamento..."
 
@@ -3974,19 +4690,27 @@ msgstr "Caricamento..."
 msgid "loaded"
 msgstr "caricato"
 
-#: src/slic3r/GUI/Plater.cpp:2426
+#: src/slic3r/GUI/Plater.cpp:2388
 msgid "Loaded"
 msgstr "Caricato"
 
-#: src/slic3r/GUI/Plater.cpp:2273
+#: src/slic3r/GUI/Plater.cpp:2216
 msgid "Loading"
 msgstr "Caricamento"
 
-#: src/slic3r/GUI/GUI_App.cpp:474
+#: src/slic3r/GUI/GUI_App.cpp:797
+msgid "Loading configuration"
+msgstr "Caricamento configurazione"
+
+#: src/slic3r/GUI/Plater.cpp:2226
+msgid "Loading file"
+msgstr "Caricamento file"
+
+#: src/slic3r/GUI/GUI_App.cpp:1125
 msgid "Loading of a mode view"
 msgstr "Caricamento di una modalità di vista"
 
-#: src/slic3r/GUI/GUI_App.cpp:466
+#: src/slic3r/GUI/GUI_App.cpp:1120
 msgid "Loading of current presets"
 msgstr "Caricamento dei preset correnti"
 
@@ -3995,101 +4719,117 @@ msgstr "Caricamento dei preset correnti"
 msgid "Loading repaired model"
 msgstr "Caricamento modello riparato"
 
-#: src/libslic3r/PrintConfig.cpp:607
+#: src/libslic3r/PrintConfig.cpp:643
 msgid "Loading speed"
 msgstr "Velocità di caricamento"
 
-#: src/libslic3r/PrintConfig.cpp:615
+#: src/libslic3r/PrintConfig.cpp:651
 msgid "Loading speed at the start"
 msgstr "Velocità iniziale di caricamento"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:63
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:106
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:69
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:112
 msgid "Local coordinates"
 msgstr "Coordinate locali"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
 msgid "Lock supports under new islands"
 msgstr "Fissa i supporti sotto le nuove isole"
 
-#: src/slic3r/GUI/Tab.cpp:3252
+#: src/slic3r/GUI/Tab.cpp:3689
 msgid "LOCKED LOCK"
 msgstr "LUCCHETTO CHIUSO"
 
-#: src/slic3r/GUI/Tab.cpp:3280
+#: src/slic3r/GUI/Tab.cpp:3717
 msgid "LOCKED LOCK icon indicates that the settings are the same as the system (or default) values for the current option group"
 msgstr "L'icona LUCCHETTO CHIUSO indica che le impostazioni corrispondono ai valori di sistema (o predefiniti) per il seguente gruppo di opzioni"
 
-#: src/slic3r/GUI/Tab.cpp:3296
+#: src/slic3r/GUI/Tab.cpp:3733
 msgid "LOCKED LOCK icon indicates that the value is the same as the system (or default) value."
 msgstr "L'icona LUCCHETTO CHIUSO indica che il valore è uguale a quello di sistema (o predefinito)."
 
-#: src/libslic3r/PrintConfig.cpp:3508
+#: src/libslic3r/PrintConfig.cpp:3713
 msgid "Logging level"
 msgstr "Livello di logging"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1810
 msgid "Loops (minimum)"
 msgstr "Giri (minimo)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
 msgid "Lower Layer"
 msgstr "Layer Inferiore"
 
-#: src/slic3r/GUI/Tab.cpp:2188 src/slic3r/GUI/Tab.cpp:2273
-#: src/libslic3r/PrintConfig.cpp:1129 src/libslic3r/PrintConfig.cpp:1146
-#: src/libslic3r/PrintConfig.cpp:1163 src/libslic3r/PrintConfig.cpp:1179
-#: src/libslic3r/PrintConfig.cpp:1189 src/libslic3r/PrintConfig.cpp:1199
-#: src/libslic3r/PrintConfig.cpp:1209
+#: src/slic3r/GUI/Tab.cpp:2346 src/slic3r/GUI/Tab.cpp:2442
+#: src/libslic3r/PrintConfig.cpp:1202 src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1254 src/libslic3r/PrintConfig.cpp:1271
+#: src/libslic3r/PrintConfig.cpp:1287 src/libslic3r/PrintConfig.cpp:1297
+#: src/libslic3r/PrintConfig.cpp:1307 src/libslic3r/PrintConfig.cpp:1317
 msgid "Machine limits"
 msgstr "Limiti macchina"
 
-#: src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:3667
+msgid "Machine limits are not set, therefore the print time estimate may not be accurate."
+msgstr "I limiti della macchina non sono impostati, quindi la stima del tempo di stampa potrebbe non essere accurata."
+
+#: src/slic3r/GUI/Tab.cpp:3660
+msgid "Machine limits will be emitted to G-code and used to estimate print time."
+msgstr "I limiti della macchina verranno emessi in G-code e utilizzati per stimare il tempo di stampa."
+
+#: src/slic3r/GUI/Tab.cpp:3663
+msgid "Machine limits will NOT be emitted to G-code, however they will be used to estimate print time, which may therefore not be accurate as the printer may apply a different set of machine limits."
+msgstr "I limiti della macchina NON saranno emessi nel G-code, tuttavia saranno utilizzati per stimare il tempo di stampa, che potrebbe quindi non essere accurato in quanto la stampante potrebbe applicare un diverso set di limiti della macchina."
+
+#: src/slic3r/GUI/Plater.cpp:172
 msgid "Manifold"
 msgstr "Manifold"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
 msgid "Manual editing"
 msgstr "Modifica manuale"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:180
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:214
 msgid "Masked SLA file exported to %1%"
 msgstr "File SLA mascherato esportato su %1%"
 
-#: src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1451
 msgid "Mate&rial Settings Tab"
 msgstr "Scheda Impostazioni Mate&riale"
 
-#: src/slic3r/GUI/Tab.cpp:3478 src/slic3r/GUI/Tab.cpp:3480
+#: src/slic3r/GUI/Tab.cpp:3894 src/slic3r/GUI/Tab.cpp:3896
 msgid "Material"
 msgstr "Materiale"
 
-#: src/slic3r/GUI/Tab.hpp:416
+#: src/slic3r/GUI/Tab.hpp:486
 msgid "Material Settings"
 msgstr "Impostazioni Materiali"
 
-#: src/slic3r/GUI/Plater.cpp:163
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Material Settings Tab"
+msgstr "Scheda Impostazioni Materiali"
+
+#: src/slic3r/GUI/Plater.cpp:169
 msgid "Materials"
 msgstr "Materiali"
 
-#: src/libslic3r/PrintConfig.cpp:1217 src/libslic3r/PrintConfig.cpp:1226
+#: src/libslic3r/PrintConfig.cpp:1325 src/libslic3r/PrintConfig.cpp:1334
 msgid "Max"
 msgstr "Massimo"
 
-#: src/libslic3r/PrintConfig.cpp:2734
+#: src/libslic3r/PrintConfig.cpp:2898
 msgid "Max bridge length"
 msgstr "Lunghezza massima Bridge"
 
-#: src/libslic3r/PrintConfig.cpp:2658
+#: src/libslic3r/PrintConfig.cpp:2812
 msgid "Max bridges on a pillar"
 msgstr "Ponteggi massimi su un pilastro"
 
-#: src/libslic3r/PrintConfig.cpp:2822
+#: src/libslic3r/PrintConfig.cpp:2986
 msgid "Max merge distance"
 msgstr "Massima distanza di unione"
 
-#: src/libslic3r/PrintConfig.cpp:2743
+#: src/libslic3r/PrintConfig.cpp:2907
 msgid "Max pillar linking distance"
 msgstr "Distanza massima collegamento pilastri"
 
@@ -4097,7 +4837,7 @@ msgstr "Distanza massima collegamento pilastri"
 msgid "Max print height"
 msgstr "Altezza massima di stampa"
 
-#: src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1345
 msgid "Max print speed"
 msgstr "Massima velocità di stampa"
 
@@ -4105,171 +4845,189 @@ msgstr "Massima velocità di stampa"
 msgid "max PrusaSlicer version"
 msgstr "versione PrusaSlicer massima"
 
-#: src/libslic3r/PrintConfig.cpp:1268
+#: src/libslic3r/PrintConfig.cpp:1376
 msgid "Max volumetric slope negative"
 msgstr "Massima pendenza volumetrica negativa"
 
-#: src/libslic3r/PrintConfig.cpp:1257
+#: src/libslic3r/PrintConfig.cpp:1365
 msgid "Max volumetric slope positive"
 msgstr "Massima pendenza volumetrica positiva"
 
-#: src/libslic3r/PrintConfig.cpp:597 src/libslic3r/PrintConfig.cpp:1247
+#: src/libslic3r/PrintConfig.cpp:633 src/libslic3r/PrintConfig.cpp:1355
 msgid "Max volumetric speed"
 msgstr "Massima velocità volumetrica"
 
-#: src/libslic3r/PrintConfig.cpp:2268
+#: src/libslic3r/PrintConfig.cpp:2411
 msgid "Maximal bridging distance"
 msgstr "Distanza massima bridging"
 
-#: src/libslic3r/PrintConfig.cpp:2269
+#: src/libslic3r/PrintConfig.cpp:2412
 msgid "Maximal distance between supports on sparse infill sections."
 msgstr "Distanza massima tra supporti in sezioni a riempimento sparso."
 
-#: src/libslic3r/PrintConfig.cpp:1145
+#: src/libslic3r/PrintConfig.cpp:1253
 msgid "Maximum acceleration E"
 msgstr "Accelerazione massima E"
 
-#: src/libslic3r/PrintConfig.cpp:1151
+#: src/libslic3r/PrintConfig.cpp:1259
 msgid "Maximum acceleration of the E axis"
 msgstr "Accelerazione massima dell'asse E"
 
-#: src/libslic3r/PrintConfig.cpp:1148
+#: src/libslic3r/PrintConfig.cpp:1256
 msgid "Maximum acceleration of the X axis"
 msgstr "Accelerazione massima dell'asse X"
 
-#: src/libslic3r/PrintConfig.cpp:1149
+#: src/libslic3r/PrintConfig.cpp:1257
 msgid "Maximum acceleration of the Y axis"
 msgstr "Accelerazione massima dell'asse Y"
 
-#: src/libslic3r/PrintConfig.cpp:1150
+#: src/libslic3r/PrintConfig.cpp:1258
 msgid "Maximum acceleration of the Z axis"
 msgstr "Accelerazione massima dell'asse Z"
 
-#: src/libslic3r/PrintConfig.cpp:1198
+#: src/libslic3r/PrintConfig.cpp:1306
 msgid "Maximum acceleration when extruding"
 msgstr "Accelerazione massima durante l'estrusione"
 
-#: src/libslic3r/PrintConfig.cpp:1200
+#: src/libslic3r/PrintConfig.cpp:1308
 msgid "Maximum acceleration when extruding (M204 S)"
 msgstr "Accelerazione massima durante l'estrusione (M204 S)"
 
-#: src/libslic3r/PrintConfig.cpp:1208
+#: src/libslic3r/PrintConfig.cpp:1316
 msgid "Maximum acceleration when retracting"
 msgstr "Accelerazione massima durante la retrazione"
 
-#: src/libslic3r/PrintConfig.cpp:1210
+#: src/libslic3r/PrintConfig.cpp:1318
 msgid "Maximum acceleration when retracting (M204 T)"
 msgstr "Accelerazione massima durante la retrazione (M204 T)"
 
-#: src/libslic3r/PrintConfig.cpp:1142
+#: src/libslic3r/PrintConfig.cpp:1250
 msgid "Maximum acceleration X"
 msgstr "Accelerazione massima X"
 
-#: src/libslic3r/PrintConfig.cpp:1143
+#: src/libslic3r/PrintConfig.cpp:1251
 msgid "Maximum acceleration Y"
 msgstr "Accelerazione massima Y"
 
-#: src/libslic3r/PrintConfig.cpp:1144
+#: src/libslic3r/PrintConfig.cpp:1252
 msgid "Maximum acceleration Z"
 msgstr "Accelerazione massima Z"
 
-#: src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2391
 msgid "Maximum accelerations"
 msgstr "Accelerazioni massime"
 
-#: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2534
+#: src/libslic3r/PrintConfig.cpp:2676 src/libslic3r/PrintConfig.cpp:2677
 msgid "Maximum exposure time"
 msgstr "Tempo massimo di esposizione"
 
-#: src/libslic3r/PrintConfig.cpp:1128
+#: src/libslic3r/PrintConfig.cpp:1236
 msgid "Maximum feedrate E"
 msgstr "Avanzamento massimo E"
 
-#: src/libslic3r/PrintConfig.cpp:1134
+#: src/libslic3r/PrintConfig.cpp:1242
 msgid "Maximum feedrate of the E axis"
 msgstr "Avanzamento massimo dell'asse E"
 
-#: src/libslic3r/PrintConfig.cpp:1131
+#: src/libslic3r/PrintConfig.cpp:1239
 msgid "Maximum feedrate of the X axis"
 msgstr "Avanzamento massimo dell'asse X"
 
-#: src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1240
 msgid "Maximum feedrate of the Y axis"
 msgstr "Avanzamento massimo dell'asse Y"
 
-#: src/libslic3r/PrintConfig.cpp:1133
+#: src/libslic3r/PrintConfig.cpp:1241
 msgid "Maximum feedrate of the Z axis"
 msgstr "Avanzamento massimo dell'asse Z"
 
-#: src/libslic3r/PrintConfig.cpp:1125
+#: src/libslic3r/PrintConfig.cpp:1233
 msgid "Maximum feedrate X"
 msgstr "Avanzamento massimo X"
 
-#: src/libslic3r/PrintConfig.cpp:1126
+#: src/libslic3r/PrintConfig.cpp:1234
 msgid "Maximum feedrate Y"
 msgstr "Avanzamento massimo Y"
 
-#: src/libslic3r/PrintConfig.cpp:1127
+#: src/libslic3r/PrintConfig.cpp:1235
 msgid "Maximum feedrate Z"
 msgstr "Avanzamento massimo Z"
 
-#: src/slic3r/GUI/Tab.cpp:2217
+#: src/slic3r/GUI/Tab.cpp:2386
 msgid "Maximum feedrates"
 msgstr "Avanzamenti massimi"
 
-#: src/libslic3r/PrintConfig.cpp:2556 src/libslic3r/PrintConfig.cpp:2557
+#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2700
 msgid "Maximum initial exposure time"
 msgstr "Tempo massimo di esposizione iniziale"
 
-#: src/libslic3r/PrintConfig.cpp:1162
+#: src/libslic3r/PrintConfig.cpp:1270
 msgid "Maximum jerk E"
 msgstr "Jerk massimo E"
 
-#: src/libslic3r/PrintConfig.cpp:1168
+#: src/libslic3r/PrintConfig.cpp:1276
 msgid "Maximum jerk of the E axis"
 msgstr "Jerk massimo dell'asse E"
 
-#: src/libslic3r/PrintConfig.cpp:1165
+#: src/libslic3r/PrintConfig.cpp:1273
 msgid "Maximum jerk of the X axis"
 msgstr "Jerk massimo dell'asse X"
 
-#: src/libslic3r/PrintConfig.cpp:1166
+#: src/libslic3r/PrintConfig.cpp:1274
 msgid "Maximum jerk of the Y axis"
 msgstr "Jerk massimo dell'asse Y"
 
-#: src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1275
 msgid "Maximum jerk of the Z axis"
 msgstr "Jerk massimo dell'asse Z"
 
-#: src/libslic3r/PrintConfig.cpp:1159
+#: src/libslic3r/PrintConfig.cpp:1267
 msgid "Maximum jerk X"
 msgstr "Jerk massimo X"
 
-#: src/libslic3r/PrintConfig.cpp:1160
+#: src/libslic3r/PrintConfig.cpp:1268
 msgid "Maximum jerk Y"
 msgstr "Jerk massimo Y"
 
-#: src/libslic3r/PrintConfig.cpp:1161
+#: src/libslic3r/PrintConfig.cpp:1269
 msgid "Maximum jerk Z"
 msgstr "Jerk massimo Z"
 
-#: src/libslic3r/PrintConfig.cpp:2660
+#: src/libslic3r/PrintConfig.cpp:2814
 msgid "Maximum number of bridges that can be placed on a pillar. Bridges hold support point pinheads and connect to pillars as small branches."
 msgstr "Numero massimo di ponteggi che può essere posizionato su un pilastro. I ponteggi mantengono le capocchie dei punti di supporto e si collegano ai pilastri come piccoli rami."
 
-#: src/libslic3r/PrintConfig.cpp:598
+#: src/libslic3r/PrintConfig.cpp:634
 msgid "Maximum volumetric speed allowed for this filament. Limits the maximum volumetric speed of a print to the minimum of print and filament volumetric speed. Set to zero for no limit."
 msgstr "Massima velocità volumetrica consentita per questo filamento. Limita la velocità volumetrica massima di una stampa alla velocità volumetrica minima del filamento e di stampa. Imposta a zero per non avere limite."
 
-#: src/libslic3r/PrintConfig.cpp:3442
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2569 src/libslic3r/PrintConfig.cpp:3641
 msgid "Merge"
 msgstr "Unisci"
 
-#: src/libslic3r/PrintConfig.cpp:2683
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2660
+msgid "Merge all parts to the one single object"
+msgstr "Unisci tutte le parti in un unico oggetto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+msgid "Merge objects to the one multipart object"
+msgstr "Unisci oggetti in un unico oggetto multiparte"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+msgid "Merge objects to the one single object"
+msgstr "Unisci oggetti in un singolo oggetto"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2576
+msgid "Merged"
+msgstr "Unito"
+
+#: src/libslic3r/PrintConfig.cpp:2847
 msgid "Merging bridges or pillars into another pillars can increase the radius. Zero means no increase, one means full increase."
 msgstr "L'unione di bridge o pilastri con altri pilastri può aumentarne il raggio. Zero significa nessun incremento, uno significa incremento pieno."
 
-#: src/libslic3r/SLAPrintSteps.cpp:64
+#: src/libslic3r/SLAPrintSteps.cpp:65
 msgid "Merging slices and calculating statistics"
 msgstr "Unendo gli slice e calcolando le statistiche"
 
@@ -4277,15 +5035,15 @@ msgstr "Unendo gli slice e calcolando le statistiche"
 msgid "Mesh repair failed."
 msgstr "Riparazione mesh fallita."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1635
+#: src/slic3r/GUI/DoubleSlider.cpp:1831
 msgid "Message for pause print on current layer (%1% mm)."
 msgstr "Messaggio per pausa stampa al corrente layer (%1% mm)."
 
-#: src/libslic3r/PrintConfig.cpp:1280 src/libslic3r/PrintConfig.cpp:1289
+#: src/libslic3r/PrintConfig.cpp:1388 src/libslic3r/PrintConfig.cpp:1397
 msgid "Min"
 msgstr "Minimo"
 
-#: src/libslic3r/PrintConfig.cpp:1298
+#: src/libslic3r/PrintConfig.cpp:1406
 msgid "Min print speed"
 msgstr "Velocità minima di stampa"
 
@@ -4293,232 +5051,237 @@ msgstr "Velocità minima di stampa"
 msgid "min PrusaSlicer version"
 msgstr "versione PrusaSlicer minima"
 
-#: src/libslic3r/PrintConfig.cpp:2772
+#: src/libslic3r/PrintConfig.cpp:2936
 msgid "Minimal distance of the support points"
 msgstr "Distanza minima dei punti di supporto"
 
-#: src/libslic3r/PrintConfig.cpp:1306
+#: src/libslic3r/PrintConfig.cpp:1414
 msgid "Minimal filament extrusion length"
 msgstr "Lunghezza di estrusione minima del filamento"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
 msgid "Minimal points distance"
 msgstr "Distanza minima punti"
 
-#: src/libslic3r/PrintConfig.cpp:667
+#: src/libslic3r/PrintConfig.cpp:703
 msgid "Minimal purge on wipe tower"
 msgstr "Spurgo minimo sulla torre di spurgo"
 
-#: src/libslic3r/PrintConfig.cpp:187
+#: src/libslic3r/PrintConfig.cpp:221
 msgid "Minimum bottom shell thickness"
 msgstr "Spessore minimo guscio inferiore"
 
-#: src/slic3r/GUI/PresetHints.cpp:339
+#: src/slic3r/GUI/PresetHints.cpp:337
 msgid "Minimum bottom shell thickness is %1% mm."
 msgstr "Spessore minimo guscio inferiore è %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1512
+#: src/libslic3r/PrintConfig.cpp:1620
 msgid "Minimum detail resolution, used to simplify the input file for speeding up the slicing job and reducing memory usage. High-resolution models often carry more detail than printers can render. Set to zero to disable any simplification and use full resolution from input."
 msgstr "Risoluzione minima dettaglio, utilizzato per semplificare il file input accelerando lo slicing e riducendo l'utilizzo di memoria. I file ad alta risoluzione spesso hanno più dettaglio di quanto la stampante possa generare. Impostate a zero per disabilitare la semplificazione e utilizzare la risoluzione completa."
 
-#: src/libslic3r/PrintConfig.cpp:2525 src/libslic3r/PrintConfig.cpp:2526
+#: src/libslic3r/PrintConfig.cpp:2668 src/libslic3r/PrintConfig.cpp:2669
 msgid "Minimum exposure time"
 msgstr "Tempo minimo di esposizione"
 
-#: src/libslic3r/PrintConfig.cpp:1178
+#: src/libslic3r/PrintConfig.cpp:1286
 msgid "Minimum feedrate when extruding"
 msgstr "Avanzamento minimo durante estrusione"
 
-#: src/libslic3r/PrintConfig.cpp:1180
+#: src/libslic3r/PrintConfig.cpp:1288
 msgid "Minimum feedrate when extruding (M205 S)"
 msgstr "Avanzamento minimo durante estrusione (M205 S)"
 
-#: src/slic3r/GUI/Tab.cpp:2234
+#: src/slic3r/GUI/Tab.cpp:2403
 msgid "Minimum feedrates"
 msgstr "Avanzamento minimo"
 
-#: src/libslic3r/PrintConfig.cpp:2548 src/libslic3r/PrintConfig.cpp:2549
+#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2692
 msgid "Minimum initial exposure time"
 msgstr "Tempo minimo di esposizione iniziale"
 
-#: src/slic3r/GUI/Tab.cpp:1069
+#: src/slic3r/GUI/Tab.cpp:1391
 msgid "Minimum shell thickness"
 msgstr "Spessore minimo guscio"
 
-#: src/libslic3r/PrintConfig.cpp:1787 src/libslic3r/PrintConfig.cpp:1788
+#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1903
 msgid "Minimum thickness of a top / bottom shell"
 msgstr "Spessore minimo guscio superiore / inferiore"
 
-#: src/libslic3r/PrintConfig.cpp:2146
+#: src/libslic3r/PrintConfig.cpp:2289
 msgid "Minimum top shell thickness"
 msgstr "Spessore minimo guscio superiore"
 
-#: src/slic3r/GUI/PresetHints.cpp:320
+#: src/slic3r/GUI/PresetHints.cpp:318
 msgid "Minimum top shell thickness is %1% mm."
 msgstr "Spessore minimo guscio superiore è %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1522
+#: src/libslic3r/PrintConfig.cpp:1630
 msgid "Minimum travel after retraction"
 msgstr "Spostamento minimo dopo una retrazione"
 
-#: src/libslic3r/PrintConfig.cpp:1188
+#: src/libslic3r/PrintConfig.cpp:1296
 msgid "Minimum travel feedrate"
 msgstr "Avanzamento minimo di spostamento"
 
-#: src/libslic3r/PrintConfig.cpp:1190
+#: src/libslic3r/PrintConfig.cpp:1298
 msgid "Minimum travel feedrate (M205 T)"
 msgstr "Avanzamento minimo di spostamento (M205 T)"
 
-#: src/libslic3r/PrintConfig.cpp:2917
+#: src/libslic3r/PrintConfig.cpp:3081
 msgid "Minimum wall thickness of a hollowed model."
 msgstr "Spessore minimo parete di un modello svuotato."
 
-#: src/libslic3r/PrintConfig.cpp:2449
+#: src/libslic3r/PrintConfig.cpp:2592
 msgid "Minimum width of features to maintain when doing elephant foot compensation."
 msgstr "Larghezza minima della funzione da mantenere durante la compensazione della zampa d'elefante."
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror"
 msgstr "Specchia"
 
-#: src/libslic3r/PrintConfig.cpp:2379
+#: src/libslic3r/PrintConfig.cpp:2522
 msgid "Mirror horizontally"
 msgstr "Specchia orizzontalmente"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2053
+#: src/slic3r/GUI/GLCanvas3D.cpp:2226
 msgid "Mirror Object"
 msgstr "Specchia Oggetto"
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror the selected object"
 msgstr "Specchia l'oggetto selezionato"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Mirror the selected object along the X axis"
 msgstr "Specchia l'oggetto selezionato sull'asse X"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Mirror the selected object along the Y axis"
 msgstr "Specchia l'oggetto selezionato sull'asse y"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Mirror the selected object along the Z axis"
 msgstr "Specchia l'oggetto selezionato sull'asse Z"
 
-#: src/libslic3r/PrintConfig.cpp:2386
+#: src/libslic3r/PrintConfig.cpp:2529
 msgid "Mirror vertically"
 msgstr "Specchia verticalmente"
 
-#: src/slic3r/Utils/AstroBox.cpp:68 src/slic3r/Utils/OctoPrint.cpp:68
-#, possible-c-format
+#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:68
+#, c-format
 msgid "Mismatched type of print host: %s"
 msgstr "Tipo di Host di stampa non corrispondente: %s"
 
-#: src/libslic3r/ExtrusionEntity.cpp:323
+#: src/libslic3r/ExtrusionEntity.cpp:328 src/libslic3r/ExtrusionEntity.cpp:364
 msgid "Mixed"
 msgstr "Mischiate"
 
-#: src/libslic3r/PrintConfig.cpp:2491
+#: src/libslic3r/PrintConfig.cpp:2634
 msgid "ml"
 msgstr "ml"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:92 src/slic3r/GUI/ConfigWizard.cpp:218
-#: src/slic3r/GUI/ConfigWizard.cpp:970 src/slic3r/GUI/ConfigWizard.cpp:984
+#: src/slic3r/GUI/BedShapeDialog.cpp:129 src/slic3r/GUI/ConfigWizard.cpp:236
+#: src/slic3r/GUI/ConfigWizard.cpp:1336 src/slic3r/GUI/ConfigWizard.cpp:1350
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:135
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:333
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/GCodeViewer.cpp:2183 src/slic3r/GUI/GCodeViewer.cpp:2189
+#: src/slic3r/GUI/GCodeViewer.cpp:2197 src/slic3r/GUI/GUI_ObjectLayers.cpp:145
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 #: src/slic3r/GUI/WipeTowerDialog.cpp:85 src/libslic3r/PrintConfig.cpp:75
-#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:91
-#: src/libslic3r/PrintConfig.cpp:122 src/libslic3r/PrintConfig.cpp:188
-#: src/libslic3r/PrintConfig.cpp:246 src/libslic3r/PrintConfig.cpp:321
-#: src/libslic3r/PrintConfig.cpp:329 src/libslic3r/PrintConfig.cpp:379
-#: src/libslic3r/PrintConfig.cpp:505 src/libslic3r/PrintConfig.cpp:516
-#: src/libslic3r/PrintConfig.cpp:534 src/libslic3r/PrintConfig.cpp:712
-#: src/libslic3r/PrintConfig.cpp:1231 src/libslic3r/PrintConfig.cpp:1292
-#: src/libslic3r/PrintConfig.cpp:1310 src/libslic3r/PrintConfig.cpp:1328
-#: src/libslic3r/PrintConfig.cpp:1384 src/libslic3r/PrintConfig.cpp:1394
-#: src/libslic3r/PrintConfig.cpp:1516 src/libslic3r/PrintConfig.cpp:1524
-#: src/libslic3r/PrintConfig.cpp:1565 src/libslic3r/PrintConfig.cpp:1573
-#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1591
-#: src/libslic3r/PrintConfig.cpp:1599 src/libslic3r/PrintConfig.cpp:1682
-#: src/libslic3r/PrintConfig.cpp:1914 src/libslic3r/PrintConfig.cpp:1985
-#: src/libslic3r/PrintConfig.cpp:2019 src/libslic3r/PrintConfig.cpp:2147
-#: src/libslic3r/PrintConfig.cpp:2226 src/libslic3r/PrintConfig.cpp:2233
-#: src/libslic3r/PrintConfig.cpp:2240 src/libslic3r/PrintConfig.cpp:2270
-#: src/libslic3r/PrintConfig.cpp:2280 src/libslic3r/PrintConfig.cpp:2290
-#: src/libslic3r/PrintConfig.cpp:2450 src/libslic3r/PrintConfig.cpp:2484
-#: src/libslic3r/PrintConfig.cpp:2623 src/libslic3r/PrintConfig.cpp:2632
-#: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2651
-#: src/libslic3r/PrintConfig.cpp:2695 src/libslic3r/PrintConfig.cpp:2705
-#: src/libslic3r/PrintConfig.cpp:2717 src/libslic3r/PrintConfig.cpp:2737
-#: src/libslic3r/PrintConfig.cpp:2747 src/libslic3r/PrintConfig.cpp:2757
-#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2790
-#: src/libslic3r/PrintConfig.cpp:2804 src/libslic3r/PrintConfig.cpp:2815
-#: src/libslic3r/PrintConfig.cpp:2828 src/libslic3r/PrintConfig.cpp:2873
-#: src/libslic3r/PrintConfig.cpp:2883 src/libslic3r/PrintConfig.cpp:2892
-#: src/libslic3r/PrintConfig.cpp:2902 src/libslic3r/PrintConfig.cpp:2918
-#: src/libslic3r/PrintConfig.cpp:2942
+#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:93
+#: src/libslic3r/PrintConfig.cpp:124 src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:280 src/libslic3r/PrintConfig.cpp:355
+#: src/libslic3r/PrintConfig.cpp:363 src/libslic3r/PrintConfig.cpp:413
+#: src/libslic3r/PrintConfig.cpp:541 src/libslic3r/PrintConfig.cpp:552
+#: src/libslic3r/PrintConfig.cpp:570 src/libslic3r/PrintConfig.cpp:748
+#: src/libslic3r/PrintConfig.cpp:1158 src/libslic3r/PrintConfig.cpp:1339
+#: src/libslic3r/PrintConfig.cpp:1400 src/libslic3r/PrintConfig.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:1436 src/libslic3r/PrintConfig.cpp:1492
+#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1624
+#: src/libslic3r/PrintConfig.cpp:1632 src/libslic3r/PrintConfig.cpp:1673
+#: src/libslic3r/PrintConfig.cpp:1681 src/libslic3r/PrintConfig.cpp:1691
+#: src/libslic3r/PrintConfig.cpp:1699 src/libslic3r/PrintConfig.cpp:1707
+#: src/libslic3r/PrintConfig.cpp:1790 src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2127 src/libslic3r/PrintConfig.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:2290 src/libslic3r/PrintConfig.cpp:2369
+#: src/libslic3r/PrintConfig.cpp:2376 src/libslic3r/PrintConfig.cpp:2383
+#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2433 src/libslic3r/PrintConfig.cpp:2593
+#: src/libslic3r/PrintConfig.cpp:2627 src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2784
+#: src/libslic3r/PrintConfig.cpp:2794 src/libslic3r/PrintConfig.cpp:2859
+#: src/libslic3r/PrintConfig.cpp:2869 src/libslic3r/PrintConfig.cpp:2881
+#: src/libslic3r/PrintConfig.cpp:2901 src/libslic3r/PrintConfig.cpp:2911
+#: src/libslic3r/PrintConfig.cpp:2921 src/libslic3r/PrintConfig.cpp:2939
+#: src/libslic3r/PrintConfig.cpp:2954 src/libslic3r/PrintConfig.cpp:2968
+#: src/libslic3r/PrintConfig.cpp:2979 src/libslic3r/PrintConfig.cpp:2992
+#: src/libslic3r/PrintConfig.cpp:3037 src/libslic3r/PrintConfig.cpp:3047
+#: src/libslic3r/PrintConfig.cpp:3056 src/libslic3r/PrintConfig.cpp:3066
+#: src/libslic3r/PrintConfig.cpp:3082 src/libslic3r/PrintConfig.cpp:3106
 msgid "mm"
 msgstr "mm"
 
-#: src/libslic3r/PrintConfig.cpp:1547 src/libslic3r/PrintConfig.cpp:1556
+#: src/libslic3r/PrintConfig.cpp:1655 src/libslic3r/PrintConfig.cpp:1664
 msgid "mm (zero to disable)"
 msgstr "mm (imposta a zero per disabilitare)"
 
-#: src/libslic3r/PrintConfig.cpp:451 src/libslic3r/PrintConfig.cpp:560
-#: src/libslic3r/PrintConfig.cpp:882 src/libslic3r/PrintConfig.cpp:895
-#: src/libslic3r/PrintConfig.cpp:1015 src/libslic3r/PrintConfig.cpp:1041
-#: src/libslic3r/PrintConfig.cpp:1423 src/libslic3r/PrintConfig.cpp:1761
-#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:1951
-#: src/libslic3r/PrintConfig.cpp:2111
+#: src/libslic3r/PrintConfig.cpp:487 src/libslic3r/PrintConfig.cpp:596
+#: src/libslic3r/PrintConfig.cpp:924 src/libslic3r/PrintConfig.cpp:937
+#: src/libslic3r/PrintConfig.cpp:1059 src/libslic3r/PrintConfig.cpp:1085
+#: src/libslic3r/PrintConfig.cpp:1531 src/libslic3r/PrintConfig.cpp:1876
+#: src/libslic3r/PrintConfig.cpp:2025 src/libslic3r/PrintConfig.cpp:2093
+#: src/libslic3r/PrintConfig.cpp:2254
 msgid "mm or %"
 msgstr "mm o %"
 
-#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:609
-#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:626
-#: src/libslic3r/PrintConfig.cpp:634 src/libslic3r/PrintConfig.cpp:661
-#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:922
-#: src/libslic3r/PrintConfig.cpp:1050 src/libslic3r/PrintConfig.cpp:1135
-#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1181
-#: src/libslic3r/PrintConfig.cpp:1191 src/libslic3r/PrintConfig.cpp:1241
-#: src/libslic3r/PrintConfig.cpp:1300 src/libslic3r/PrintConfig.cpp:1433
-#: src/libslic3r/PrintConfig.cpp:1607 src/libslic3r/PrintConfig.cpp:1616
-#: src/libslic3r/PrintConfig.cpp:2028 src/libslic3r/PrintConfig.cpp:2154
+#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
+#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
+#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
+#: src/libslic3r/PrintConfig.cpp:716 src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1094 src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1243 src/libslic3r/PrintConfig.cpp:1277
+#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1349 src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1541 src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1724 src/libslic3r/PrintConfig.cpp:2170
+#: src/libslic3r/PrintConfig.cpp:2297
 msgid "mm/s"
 msgstr "mm/s"
 
-#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:904
-#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1772
-#: src/libslic3r/PrintConfig.cpp:1995 src/libslic3r/PrintConfig.cpp:2124
+#: src/libslic3r/PrintConfig.cpp:498 src/libslic3r/PrintConfig.cpp:946
+#: src/libslic3r/PrintConfig.cpp:1835 src/libslic3r/PrintConfig.cpp:1887
+#: src/libslic3r/PrintConfig.cpp:2137 src/libslic3r/PrintConfig.cpp:2267
 msgid "mm/s or %"
 msgstr "mm/s o %"
 
-#: src/libslic3r/PrintConfig.cpp:196 src/libslic3r/PrintConfig.cpp:339
-#: src/libslic3r/PrintConfig.cpp:862 src/libslic3r/PrintConfig.cpp:984
-#: src/libslic3r/PrintConfig.cpp:1152 src/libslic3r/PrintConfig.cpp:1201
-#: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1403
+#: src/libslic3r/PrintConfig.cpp:230 src/libslic3r/PrintConfig.cpp:373
+#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:1028
+#: src/libslic3r/PrintConfig.cpp:1260 src/libslic3r/PrintConfig.cpp:1309
+#: src/libslic3r/PrintConfig.cpp:1319 src/libslic3r/PrintConfig.cpp:1511
 msgid "mm/s²"
 msgstr "mm/s²"
 
-#: src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:1845
 msgid "mm²"
 msgstr "mm²"
 
-#: src/libslic3r/PrintConfig.cpp:672
+#: src/libslic3r/PrintConfig.cpp:708
 msgid "mm³"
 msgstr "mm³"
 
-#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:601
-#: src/libslic3r/PrintConfig.cpp:1250
+#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1358
 msgid "mm³/s"
 msgstr "mm³/s"
 
-#: src/libslic3r/PrintConfig.cpp:1262 src/libslic3r/PrintConfig.cpp:1273
+#: src/libslic3r/PrintConfig.cpp:1370 src/libslic3r/PrintConfig.cpp:1381
 msgid "mm³/s²"
 msgstr "mm³/s²"
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:1512
 msgid "Mode"
 msgstr "&Modalità"
 
@@ -4526,7 +5289,7 @@ msgstr "&Modalità"
 msgid "model"
 msgstr "modello"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:251
+#: src/slic3r/GUI/BedShapeDialog.cpp:395
 msgid "Model"
 msgstr "Modello"
 
@@ -4555,145 +5318,181 @@ msgstr "Riparazione modello terminata"
 msgid "Model repaired successfully"
 msgstr "Modello riparato con successo"
 
-#: src/slic3r/GUI/Tab.cpp:979
+#: src/slic3r/GUI/GUI_App.cpp:1506 src/slic3r/GUI/wxExtensions.cpp:675
+msgctxt "Mode"
+msgid "Advanced"
+msgstr "Avanzata"
+
+#: src/slic3r/GUI/Tab.cpp:1241
 msgid "Modifications to the current profile will be saved."
 msgstr "Verranno salvate le modifiche al profilo attuale."
 
-#: src/slic3r/GUI/Preset.cpp:247
+#: src/slic3r/GUI/GUI_App.cpp:1425
 msgid "modified"
 msgstr "modificato"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Modifier"
 msgstr "Modificatore"
 
-#: src/slic3r/GUI/Tab.cpp:1161
+#: src/slic3r/GUI/Tab.cpp:1491
 msgid "Modifiers"
 msgstr "Modificatori"
 
-#: src/libslic3r/PrintConfig.cpp:2512
+#: src/libslic3r/PrintConfig.cpp:2655
 msgid "money/bottle"
 msgstr "soldi/bottiglia"
 
-#: src/libslic3r/PrintConfig.cpp:762
+#: src/libslic3r/PrintConfig.cpp:798
 msgid "money/kg"
 msgstr "soldi/kg"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/libslic3r/PrintConfig.cpp:461
+msgid "Monotonic"
+msgstr "Monotonico"
+
+#: src/slic3r/GUI/NotificationManager.cpp:305
+#: src/slic3r/GUI/NotificationManager.cpp:315
+msgid "More"
+msgstr "Altro"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Mouse wheel"
 msgstr "Rotella del mouse"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:261
+#: src/slic3r/GUI/GLCanvas3D.cpp:249
 msgid "Mouse wheel:"
 msgstr "Rotella del mouse:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:64
 msgid "Move"
 msgstr "Sposta"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Move clipping plane"
-msgstr "Sposta piano di ritaglio"
+msgstr "Sposta piano sezione"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Move current slider thumb Down"
 msgstr "Abbassa la barra di scorrimento attuale"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
+msgid "Move current slider thumb Left"
+msgstr "Sposta a sinistra la barra di scorrimento attuale"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
+msgid "Move current slider thumb Right"
+msgstr "Sposta a destra la barra di scorrimento attuale"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Move current slider thumb Up"
 msgstr "Solleva la barra di scorrimento attuale"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:1059
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:835
 msgid "Move drainage hole"
 msgstr "Sposta foro di drenaggio"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3505
+#: src/slic3r/GUI/GLCanvas3D.cpp:3810
 msgid "Move Object"
 msgstr "Sposta oggetto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
 msgid "Move point"
 msgstr "Sposta punto"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
 msgid "Move selection 10 mm in negative X direction"
 msgstr "Sposta selezione 10 mm in direzione X negativa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
 msgid "Move selection 10 mm in negative Y direction"
 msgstr "Sposta selezione 10 mm in direzione Y negativa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
 msgid "Move selection 10 mm in positive X direction"
 msgstr "Sposta selezione 10 mm in direzione X positiva"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
 msgid "Move selection 10 mm in positive Y direction"
 msgstr "Sposta selezione 10 mm in direzione Y positiva"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1097
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:955
 msgid "Move support point"
 msgstr "Sposta punto di supporto"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/GCodeViewer.cpp:2492
+msgid "Movement"
+msgstr "Movimento"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Movement in camera space"
 msgstr "Movimento nello spazio della camera"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
 msgid "Movement step set to 1 mm"
 msgstr "Passo del movimento impostato a 1 mm"
 
-#: src/libslic3r/PrintConfig.cpp:2201
+#: src/libslic3r/PrintConfig.cpp:2344
 msgid "Multi material printers may need to prime or purge extruders on tool changes. Extrude the excess material into the wipe tower."
 msgstr "Le stampanti multi-material potrebbero necessitare di caricare o spurgare l'estrusore al cambio di attrezzo. Estrude il materiale in eccesso in una torre di spurgo."
 
-#: src/slic3r/GUI/Plater.cpp:2360 src/slic3r/GUI/Plater.cpp:2413
+#: src/slic3r/GUI/Plater.cpp:2322 src/slic3r/GUI/Plater.cpp:2375
 msgid "Multi-part object detected"
 msgstr "Rilevato oggetto in parti multiple"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:419 src/slic3r/GUI/FirmwareDialog.cpp:454
-#, possible-c-format
+#, c-format
 msgid "Multiple %s devices found. Please only connect one at a time for flashing."
 msgstr "Trovati molteplici %s dispositivi. Per favore connettine uno alla volta per il flashing."
 
-#: src/slic3r/GUI/Tab.cpp:1179
+#: src/slic3r/GUI/Tab.cpp:1509
 msgid "Multiple Extruders"
 msgstr "Estrusori multipli"
 
-#: src/slic3r/GUI/Plater.cpp:2410
-msgid "Multiple objects were loaded for a multi-material printer.\nInstead of considering them as multiple objects, should I consider\nthese files to represent a single object having multiple parts?"
-msgstr "Sono stati caricati oggetti multipli per stampante multi-material.\nInvece di considerarli come oggetti multipli, devo considerarli come parte di un singolo oggetto avente parti multiple?"
+#: src/slic3r/GUI/Plater.cpp:2372
+msgid ""
+"Multiple objects were loaded for a multi-material printer.\n"
+"Instead of considering them as multiple objects, should I consider\n"
+"these files to represent a single object having multiple parts?"
+msgstr ""
+"Sono stati caricati oggetti multipli per stampante multi-material.\n"
+"Invece di considerarli come oggetti multipli, devo considerarli come parte di un singolo oggetto avente parti multiple?"
 
-#: src/libslic3r/PrintConfig.cpp:3439
+#: src/libslic3r/PrintConfig.cpp:3638
 msgid "Multiply copies by creating a grid."
 msgstr "Moltiplica le copie creando una griglia."
 
-#: src/libslic3r/PrintConfig.cpp:3434
+#: src/libslic3r/PrintConfig.cpp:3633
 msgid "Multiply copies by this factor."
 msgstr "Moltiplica le copie per questo valore."
 
-#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:580
+#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:715
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:874
 msgid "N/A"
 msgstr "N/A"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:270
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:153
+#: src/slic3r/GUI/GUI_ObjectList.cpp:284
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:161
 msgid "Name"
 msgstr "Nome"
 
-#: src/libslic3r/PrintConfig.cpp:1488
+#: src/libslic3r/PrintConfig.cpp:114
+msgid "Name of the printer"
+msgstr "Nome della stampante"
+
+#: src/libslic3r/PrintConfig.cpp:1596
 msgid "Name of the printer variant. For example, the printer variants may be differentiated by a nozzle diameter."
 msgstr "Nome della variante di stampante. Per esempio le varianti di una stampante potrebbero differire per diametro dell'ugello."
 
-#: src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1590
 msgid "Name of the printer vendor."
 msgstr "Nome del venditore della stampante."
 
-#: src/libslic3r/PrintConfig.cpp:1058
+#: src/libslic3r/PrintConfig.cpp:1102
 msgid "Name of the profile, from which this profile inherits."
 msgstr "Nome del profilo da cui questo profilo eredita."
 
-#: src/libslic3r/PrintConfig.cpp:1630
+#: src/libslic3r/PrintConfig.cpp:1738
 msgid "Nearest"
 msgstr "Più vicino"
 
@@ -4701,16 +5500,32 @@ msgstr "Più vicino"
 msgid "Network lookup"
 msgstr "Ricerca network"
 
-#: src/slic3r/GUI/Plater.cpp:2151
+#: src/slic3r/GUI/Preferences.cpp:430
+msgid "New layout, access via settings button in the top menu"
+msgstr "Nuovo layout, accesso tramite pulsante impostazioni dal menù superiore"
+
+#: src/slic3r/GUI/Plater.cpp:2056
 msgid "New Project"
 msgstr "Nuovo progetto"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:105
 msgid "New project, clear plater"
 msgstr "Nuovo progetto, pulisci piano"
 
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:609
+msgid "New Value"
+msgstr "Nuovo Valore"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1178
+msgid "New value"
+msgstr "Nuovo valore"
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "New version is available."
+msgstr "È disponibile una nuova versione."
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:38
-#, possible-c-format
+#, c-format
 msgid "New version of %s is available"
 msgstr "È disponibile una nuova versione di %s"
 
@@ -4718,23 +5533,23 @@ msgstr "È disponibile una nuova versione di %s"
 msgid "New version:"
 msgstr "Nuova versione:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4673
+#: src/slic3r/GUI/GLCanvas3D.cpp:5089
 msgid "Next Redo action: %1%"
 msgstr "Ripeti Prossima azione: %1%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4641
+#: src/slic3r/GUI/GLCanvas3D.cpp:5051
 msgid "Next Undo action: %1%"
 msgstr "Annulla Prossima azione: %1%"
 
-#: src/libslic3r/PrintConfig.cpp:960
+#: src/libslic3r/PrintConfig.cpp:1004
 msgid "No extrusion"
 msgstr "No estrusione"
 
-#: src/libslic3r/SLAPrintSteps.cpp:453
+#: src/libslic3r/SLAPrintSteps.cpp:451
 msgid "No pad can be generated for this model with the current configuration"
 msgstr "Non può essere generato nessun Pad per questo modello con la configurazione corrente"
 
-#: src/slic3r/GUI/MainFrame.cpp:784
+#: src/slic3r/GUI/MainFrame.cpp:1485
 msgid "No previously sliced file."
 msgstr "File non processato precedentemente."
 
@@ -4742,175 +5557,221 @@ msgstr "File non processato precedentemente."
 msgid "NO RAMMING AT ALL"
 msgstr "NESSUN RAMMING"
 
-#: src/libslic3r/PrintConfig.cpp:1857
+#: src/libslic3r/PrintConfig.cpp:1999
 msgid "No sparse layers (EXPERIMENTAL)"
 msgstr "Nessun layer sparso (SPERIMENTALE)"
 
-#: src/libslic3r/PrintConfig.cpp:2774
+#: src/libslic3r/PrintConfig.cpp:2938
 msgid "No support points will be placed closer than this threshold."
 msgstr "Non verranno posizionati punti di supporto più vicini di questa soglia."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "No updates available"
 msgstr "Nessun aggiornamento disponibile"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:291 src/slic3r/GUI/ConfigWizard.cpp:574
-#: src/slic3r/GUI/Plater.cpp:499 src/slic3r/GUI/Plater.cpp:639
-#: src/libslic3r/ExtrusionEntity.cpp:309
+#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/ConfigWizard.cpp:599
+#: src/slic3r/GUI/Plater.cpp:365 src/slic3r/GUI/Plater.cpp:505
+#: src/libslic3r/ExtrusionEntity.cpp:312
 msgid "None"
 msgstr "Nessuno"
 
-#: src/slic3r/GUI/Tab.cpp:2203
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2372
 msgid "Normal"
 msgstr "Normale"
 
-#: src/slic3r/GUI/Plater.cpp:1286
+#: src/slic3r/GUI/Plater.cpp:1177 src/slic3r/GUI/Plater.cpp:1224
 msgid "normal mode"
 msgstr "modalità normale"
 
-#: src/libslic3r/Zipper.cpp:46
+#: src/slic3r/GUI/GCodeViewer.cpp:2552
+msgid "Normal mode"
+msgstr "Modalità normale"
+
+#: src/libslic3r/miniz_extension.cpp:105
 msgid "not a ZIP archive"
 msgstr "non un archivio ZIP"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:223 src/slic3r/GUI/BedShapeDialog.cpp:302
+#: src/slic3r/GUI/BedShapeDialog.cpp:366 src/slic3r/GUI/BedShapeDialog.cpp:446
 msgid "Not found:"
 msgstr "Non trovato:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1019
+#: src/slic3r/GUI/DoubleSlider.cpp:1144
 msgid "Note"
 msgstr "Nota"
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/GUI/Tab.cpp:3408
+msgid "Note, that selected preset will be deleted from this/those printer(s) too."
+msgstr "Nota: il preset selezionato verrà eliminato anche da questa/e stampante/i."
+
+#: src/slic3r/GUI/Tab.cpp:3416
+msgid "Note, that this/those printer(s) will be deleted after deleting of the selected preset."
+msgstr "Nota: questa/e stampante/i saranno cancellate dopo aver cancellato il preset selezionato."
+
+#: src/slic3r/GUI/Tab.cpp:2039
+msgid ""
+"Note: All parameters from this group are moved to the Physical Printer settings (see changelog).\n"
+"\n"
+"A new Physical Printer profile is created by clicking on the \"cog\" icon right of the Printer profiles combo box, by selecting the \"Add physical printer\" item in the Printer combo box. The Physical Printer profile editor opens also when clicking on the \"cog\" icon in the Printer settings tab. The Physical Printer profiles are being stored into PrusaSlicer/physical_printer directory."
+msgstr ""
+"Nota: Tutti i parametri di questo gruppo vengono spostati nelle impostazioni della stampante fisica (vedi changelog).\n"
+"\n"
+"Un nuovo profilo di stampante fisica viene creato cliccando sull'icona \"ingranaggio\" a destra della casella combinata dei profili della stampante, selezionando la voce \"Aggiungi stampante fisica\" nella casella combinata della stampante. L'editor dei profili della stampante fisica si apre anche cliccando sull'icona \"ingranaggio\" nella scheda Impostazioni della stampante. I profili della stampante fisica vengono memorizzati nella directory PrusaSlicer/physical_printer."
+
+#: src/slic3r/Utils/AstroBox.cpp:92
 msgid "Note: AstroBox version at least 1.1.0 is required."
 msgstr "Nota: è richiesta una versione di AstroBox 1.1.0 o successiva."
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:76
 msgid "Note: FlashAir with firmware 2.00.02 or newer and activated upload function is required."
 msgstr "Nota: è necessaria FlashAir con firmware 2.00.02 o successivo e funzione di caricamento attiva."
 
-#: src/slic3r/Utils/OctoPrint.cpp:89
+#: src/slic3r/Utils/OctoPrint.cpp:91
 msgid "Note: OctoPrint version at least 1.1.0 is required."
 msgstr "Nota: è richiesta una versione di OctoPrint 1.1.0 o successiva."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1345
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1192
 msgid "Note: some shortcuts work in (non)editing mode only."
 msgstr "Nota: alcune scorciatoie funzionano solo in modalità (non)modifica."
 
-#: src/slic3r/GUI/Tab.cpp:1251 src/slic3r/GUI/Tab.cpp:1252
-#: src/slic3r/GUI/Tab.cpp:1540 src/slic3r/GUI/Tab.cpp:1541
-#: src/slic3r/GUI/Tab.cpp:2012 src/slic3r/GUI/Tab.cpp:2013
-#: src/slic3r/GUI/Tab.cpp:2128 src/slic3r/GUI/Tab.cpp:2129
-#: src/slic3r/GUI/Tab.cpp:3535 src/slic3r/GUI/Tab.cpp:3536
+#: src/slic3r/GUI/SavePresetDialog.cpp:151
+msgid "Note: This preset will be replaced after saving"
+msgstr "Nota: Questo preset sarà sostituito dopo il salvataggio"
+
+#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582
+#: src/slic3r/GUI/Tab.cpp:1887 src/slic3r/GUI/Tab.cpp:1888
+#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2297 src/slic3r/GUI/Tab.cpp:2298
+#: src/slic3r/GUI/Tab.cpp:3951 src/slic3r/GUI/Tab.cpp:3952
 msgid "Notes"
 msgstr "Note"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1751 src/slic3r/GUI/DoubleSlider.cpp:1905
-#: src/slic3r/GUI/DoubleSlider.cpp:1926 src/slic3r/GUI/GUI.cpp:245
+#: src/slic3r/GUI/ConfigWizard.cpp:2237 src/slic3r/GUI/DoubleSlider.cpp:2124
+#: src/slic3r/GUI/DoubleSlider.cpp:2144 src/slic3r/GUI/GUI.cpp:244
 msgid "Notice"
 msgstr "Avvertenza"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:218
+#: src/slic3r/GUI/ConfigWizard.cpp:236
 msgid "nozzle"
 msgstr "ugello"
 
-#: src/slic3r/GUI/Tab.cpp:1870 src/slic3r/GUI/Tab.cpp:2340
-#: src/libslic3r/PrintConfig.cpp:1326
+#: src/slic3r/GUI/Tab.cpp:1790
+msgid "Nozzle"
+msgstr "Ugello"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1392
+msgid "Nozzle and Bed Temperatures"
+msgstr "Temperatura ugello e piano"
+
+#: src/slic3r/GUI/Tab.cpp:2104 src/slic3r/GUI/Tab.cpp:2509
+#: src/libslic3r/PrintConfig.cpp:1434
 msgid "Nozzle diameter"
 msgstr "Diametro ugello"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:969
+#: src/slic3r/GUI/ConfigWizard.cpp:1335
 msgid "Nozzle Diameter:"
 msgstr "Diametro ugello:"
 
-#: src/libslic3r/PrintConfig.cpp:650
+#: src/libslic3r/PrintConfig.cpp:2201
+msgid "Nozzle temperature"
+msgstr "Temperatura ugello"
+
+#: src/libslic3r/PrintConfig.cpp:2198
+msgid "Nozzle temperature for layers after the first one. Set this to zero to disable temperature control commands in the output G-code."
+msgstr "Temperatura dell'ugello per i layer dopo il primo. Impostarlo a zero per disabilitare i comandi di controllo della temperatura nel G-code di uscita."
+
+#: src/libslic3r/PrintConfig.cpp:961
+msgid "Nozzle temperature for the first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output G-code."
+msgstr "Temperatura dell'ugello per il primo strato. Se si desidera controllare la temperatura manualmente durante la stampa, impostarla a zero per disabilitare i comandi di controllo della temperatura nel G-code di uscita."
+
+#: src/libslic3r/PrintConfig.cpp:686
 msgid "Number of cooling moves"
 msgstr "Numero di movimenti di raffreddamento"
 
-#: src/slic3r/GUI/Tab.cpp:1839
+#: src/slic3r/GUI/Tab.cpp:2073
 msgid "Number of extruders of the printer."
 msgstr "Numero estrusori della stampante."
 
-#: src/libslic3r/PrintConfig.cpp:1975
+#: src/libslic3r/PrintConfig.cpp:2117
 msgid "Number of interface layers to insert between the object(s) and support material."
 msgstr "Numero di layer interfaccia da inserire tra l'oggetto(i) e il materiale di supporto."
 
-#: src/libslic3r/PrintConfig.cpp:1697
+#: src/libslic3r/PrintConfig.cpp:1812
 msgid "Number of loops for the skirt. If the Minimum Extrusion Length option is set, the number of loops might be greater than the one configured here. Set this to zero to disable skirt completely."
 msgstr "Numero di giri per lo skirt. Se è impostata l'opzione per la lunghezza minima di estrusione, il numero dei giri potrebbe essere più grande di quello configurato qui. Imposta questo valore a zero per disattivare completamente lo skirt."
 
-#: src/libslic3r/PrintConfig.cpp:2365
+#: src/libslic3r/PrintConfig.cpp:2508
 msgid "Number of pixels in"
 msgstr "Numero di pixel su"
 
-#: src/libslic3r/PrintConfig.cpp:2367
+#: src/libslic3r/PrintConfig.cpp:2510
 msgid "Number of pixels in X"
 msgstr "Numero di pixel su X"
 
-#: src/libslic3r/PrintConfig.cpp:2373
+#: src/libslic3r/PrintConfig.cpp:2516
 msgid "Number of pixels in Y"
 msgstr "Numero di pixel su Y"
 
-#: src/libslic3r/PrintConfig.cpp:176
+#: src/libslic3r/PrintConfig.cpp:210
 msgid "Number of solid layers to generate on bottom surfaces."
 msgstr "Numero di layer solidi da generare sulle superfici inferiori."
 
-#: src/libslic3r/PrintConfig.cpp:1781
+#: src/libslic3r/PrintConfig.cpp:1896
 msgid "Number of solid layers to generate on top and bottom surfaces."
 msgstr "Numero di layer solidi da generare sulle superfici superiori e inferiori."
 
-#: src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2277
 msgid "Number of solid layers to generate on top surfaces."
 msgstr "Numero di layer solidi da generare sulle superfici superiori."
 
-#: src/libslic3r/PrintConfig.cpp:2518
+#: src/libslic3r/PrintConfig.cpp:2661
 msgid "Number of the layers needed for the exposure time fade from initial exposure time to the exposure time"
 msgstr "Numero di layer necessari per la sfumatura del tempo di esposizione dal tempo di esposizione iniziale al tempo di esposizione"
 
-#: src/slic3r/GUI/Plater.cpp:241
+#: src/slic3r/GUI/Plater.cpp:247
 msgid "Number of tool changes"
 msgstr "Numero di cambi attrezzo"
 
-#: src/libslic3r/PrintConfig.cpp:2753
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:2917
 msgid "Object elevation"
 msgstr "Elevazione oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2466
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2858
 msgid "Object manipulation"
 msgstr "Manipolazione oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:155 src/libslic3r/GCode.cpp:638
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:163 src/libslic3r/GCode.cpp:623
 msgid "Object name"
 msgstr "Nome oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3417
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3880
 msgid "Object or Instance"
 msgstr "Oggetto o Istanza"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Object reordered"
 msgstr "Oggetto riordinato"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2479
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2871
 msgid "Object Settings to modify"
 msgstr "Impostazioni Oggetto da modificare"
 
-#: src/slic3r/GUI/Plater.cpp:2529
+#: src/slic3r/GUI/Plater.cpp:2491
 msgid "Object too large?"
 msgstr "Oggetto troppo grande?"
 
-#: src/libslic3r/PrintConfig.cpp:2262
+#: src/libslic3r/PrintConfig.cpp:2405
 msgid "Object will be used to purge the nozzle after a toolchange to save material that would otherwise end up in the wipe tower and decrease print time. Colours of the objects will be mixed as a result."
 msgstr "L'oggetto sarà utilizzato per spurgare l'ugello dopo un cambio di attrezzo per ridurre il tempo di stampa e risparmiare materiale che finirebbe altrimenti nella torre di spurgo. Come risultato, i colori dell'oggetto saranno mischiati."
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "object(s)"
 msgstr "oggetto(i)"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "objects"
 msgstr "oggetti"
 
-#: src/libslic3r/PrintConfig.cpp:429 src/libslic3r/PrintConfig.cpp:855
+#: src/libslic3r/PrintConfig.cpp:465 src/libslic3r/PrintConfig.cpp:893
 msgid "Octagram Spiral"
 msgstr "Spirale a Ottagramma"
 
@@ -4918,64 +5779,97 @@ msgstr "Spirale a Ottagramma"
 msgid "OctoPrint version"
 msgstr "Versione OctoPrint"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3425
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3888
 msgid "of a current Object"
 msgstr "di un Oggetto corrente"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
 msgid "Offset"
 msgstr "Offset"
 
-#: src/slic3r/GUI/Tab.cpp:1755
-#, possible-c-format
+#: src/slic3r/GUI/Preferences.cpp:422
+msgid "Old regular layout with the tab bar"
+msgstr "Precedente layout normale con la barra delle schede"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:608
+msgid "Old Value"
+msgstr "Valore precedente"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1177
+msgid "Old value"
+msgstr "Vecchio valore"
+
+#: src/slic3r/GUI/Preferences.cpp:123
+msgid "On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances of same app from the command line. In such case this settings will allow only one instance."
+msgstr "Su OSX per impostazione predefinita c'è sempre una sola istanza di applicazione in esecuzione. Tuttavia è possibile eseguire più istanze della stessa app dalla riga di comando. In tal caso questa impostazione consentirà una sola istanza."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:359
+#, c-format
 msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain."
 msgstr "Su questo sistema, %s utilizza certificati HTTPS provenienti dal sistema Certificate Store o da Keychain."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:950
+#: src/slic3r/GUI/DoubleSlider.cpp:1064
 msgid "One layer mode"
 msgstr "Modalità Un Layer"
 
-#: src/libslic3r/Print.cpp:1365
+#: src/libslic3r/Print.cpp:1391
 msgid "One or more object were assigned an extruder that the printer does not have."
 msgstr "Uno o più oggetti sono assegnati ad un estrusore non presente sulla stampante."
 
-#: src/libslic3r/PrintConfig.cpp:1903 src/libslic3r/PrintConfig.cpp:2676
+#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
 msgid "Only create support if it lies on a build plate. Don't create support on a print."
 msgstr "Genera supporti solo se questi poggiano sulla superficie di stampa. Non genera supporti sulla stampa."
 
-#: src/libslic3r/PrintConfig.cpp:1027
+#: src/libslic3r/PrintConfig.cpp:1071
 msgid "Only infill where needed"
 msgstr "Riempimento solo quando necessario"
 
-#: src/slic3r/GUI/Tab.cpp:2373
+#: src/slic3r/GUI/Tab.cpp:2542
 msgid "Only lift Z"
 msgstr "Solleva Z solamente"
 
-#: src/libslic3r/PrintConfig.cpp:1570
+#: src/libslic3r/PrintConfig.cpp:1678
 msgid "Only lift Z above"
 msgstr "Solleva Z solo  al di sopra"
 
-#: src/libslic3r/PrintConfig.cpp:1579
+#: src/libslic3r/PrintConfig.cpp:1687
 msgid "Only lift Z below"
 msgstr "Solleva Z solo  al di sotto"
 
-#: src/libslic3r/PrintConfig.cpp:1348
+#: src/libslic3r/PrintConfig.cpp:1456
 msgid "Only retract when crossing perimeters"
 msgstr "Retrai solo se si attraversa un perimetro"
 
-#: src/slic3r/GUI/Tab.cpp:1187
+#: src/slic3r/GUI/ConfigWizard.cpp:714
+msgid "Only the following installed printers are compatible with the selected filament:"
+msgstr "Il filamento selezionato è compatibile solo con le seguenti stampanti installate:"
+
+#: src/slic3r/GUI/Tab.cpp:1517
 msgid "Ooze prevention"
 msgstr "Prevenzione delle fuoriuscite"
 
-#: src/libslic3r/Print.cpp:1266
+#: src/libslic3r/Print.cpp:1292
 msgid "Ooze prevention is currently not supported with the wipe tower enabled."
 msgstr "Prevenzione sgocciolamento non è al momento supportata con la torre di spurgo attiva."
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open &PrusaSlicer"
+msgstr "Apri &PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "Open a G-code file"
+msgstr "Apri un file G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:77
+#: src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open a new PrusaSlicer instance"
+msgstr "Apri una nuova istanza PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "Open a project file"
 msgstr "Apri un file progetto"
 
-#: src/slic3r/GUI/Tab.cpp:1729
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:330
 msgid "Open CA certificate file"
 msgstr "Apri file di certificato CA"
 
@@ -4988,116 +5882,150 @@ msgstr "Apri la pagina del registro delle modifiche"
 msgid "Open download page"
 msgstr "Apri la pagina di Download"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
+#: src/slic3r/GUI/NotificationManager.cpp:742
+msgid "Open Folder."
+msgstr "Apri Cartella."
+
+#: src/slic3r/Utils/Process.cpp:151
+msgid "Open G-code file:"
+msgstr "Apri un file G-code:"
+
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:1141
+msgid "Open G-code viewer"
+msgstr "Apri visualizzatore G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:79
+msgid "Open new G-code viewer"
+msgstr "Apri nuovo visualizzatore G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open new instance"
+msgstr "Apri una nuova istanza"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:106
 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater"
 msgstr "Apri progetto STL/OBJ/AMF/3MF con configurazione, pulisci piano"
 
-#: src/slic3r/GUI/MainFrame.cpp:693
-#, possible-c-format
+#: src/slic3r/GUI/MainFrame.cpp:77 src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open PrusaSlicer"
+msgstr "Apri PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:918 src/slic3r/GUI/MainFrame.cpp:1317
+#, c-format
 msgid "Open the %s website in your browser"
 msgstr "Apri il sito web di %s nel browser"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Open the Prusa3D drivers download page in your browser"
 msgstr "Apri la pagina di download dei driver Prusa3D sul browser"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Open the software releases page in your browser"
 msgstr "Apri la pagina delle versioni software sul browser"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:220 src/slic3r/GUI/Plater.cpp:3961
 msgid "Optimize orientation"
 msgstr "Ottimizza orientamento"
 
-#: src/slic3r/GUI/Plater.cpp:2767
+#: src/slic3r/GUI/Plater.cpp:1555
 msgid "Optimize Rotation"
 msgstr "Ottimizza Rotazione"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Plater.cpp:3962
 msgid "Optimize the rotation of the object for better print results."
 msgstr "Ottimizza la rotazione dell'oggetto per risultati di stampa migliori."
 
-#: src/libslic3r/PrintConfig.cpp:137
+#: src/libslic3r/PrintConfig.cpp:170
 msgid "Optimize travel moves in order to minimize the crossing of perimeters. This is mostly useful with Bowden extruders which suffer from oozing. This feature slows down both the print and the G-code generation."
 msgstr "Ottimizza il movimenti di spostamento per minimizzare l'incrocio di perimetri. È comunemente usato con estrusori Bowden che soffrono di oozing (trasudazione). Questa caratteristica rallenta sia la stampa che la generazione del G-code."
 
-#: src/slic3r/GUI/Tab.cpp:1131
+#: src/slic3r/GUI/GCodeViewer.cpp:2525 src/slic3r/GUI/GUI_Preview.cpp:320
+#: src/slic3r/GUI/GUI_Preview.cpp:333
+msgid "Options"
+msgstr "Opzioni"
+
+#: src/slic3r/GUI/Tab.cpp:1460
 msgid "Options for support material and raft"
 msgstr "Opzioni per materiale di supporto e raft"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:989
+#: src/slic3r/GUI/Mouse3DController.cpp:315
+msgid "Options:"
+msgstr "Opzioni:"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1112
 msgid "or press \"+\" key"
 msgstr "o premi il tasto \"+\""
 
-#: src/slic3r/GUI/Plater.cpp:2892
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:74
 msgid "Orientation found."
 msgstr "Trovato orientamento."
 
-#: src/slic3r/GUI/Plater.cpp:2891
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:73
 msgid "Orientation search canceled."
 msgstr "Ricerca orientamento annullata."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:84
+#: src/slic3r/GUI/BedShapeDialog.cpp:94
 msgid "Origin"
 msgstr "Origine"
 
-#: src/slic3r/GUI/Tab.cpp:1227
+#: src/slic3r/GUI/Tab.cpp:1557
 msgid "Other"
 msgstr "Altro"
 
-#: src/libslic3r/PrintConfig.cpp:144 src/libslic3r/PrintConfig.cpp:2064
+#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:2206
 msgid "Other layers"
 msgstr "Altri layer"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:856
+#: src/slic3r/GUI/ConfigWizard.cpp:1222
 msgid "Other Vendors"
 msgstr "Altri Fornitori"
 
-#: src/slic3r/GUI/Tab.cpp:1238 src/slic3r/GUI/Tab.cpp:3666
+#: src/slic3r/GUI/Tab.cpp:1568 src/slic3r/GUI/Tab.cpp:4085
 msgid "Output file"
 msgstr "File di output"
 
-#: src/libslic3r/PrintConfig.cpp:3493
+#: src/libslic3r/PrintConfig.cpp:3692
 msgid "Output File"
 msgstr "File di output"
 
-#: src/libslic3r/PrintConfig.cpp:1363
+#: src/libslic3r/PrintConfig.cpp:1471
 msgid "Output filename format"
 msgstr "Formato del file di output"
 
-#: src/libslic3r/PrintConfig.cpp:3381
+#: src/libslic3r/PrintConfig.cpp:3580
 msgid "Output Model Info"
 msgstr "Info Modello di output"
 
-#: src/slic3r/GUI/Tab.cpp:1230 src/slic3r/GUI/Tab.cpp:3665
+#: src/slic3r/GUI/Tab.cpp:1560 src/slic3r/GUI/Tab.cpp:4084
 msgid "Output options"
 msgstr "Opzioni output"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/ExtrusionEntity.cpp:312
+#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/libslic3r/ExtrusionEntity.cpp:340
 msgid "Overhang perimeter"
 msgstr "Perimetro sporgente"
 
-#: src/libslic3r/PrintConfig.cpp:2042
+#: src/libslic3r/PrintConfig.cpp:2184
 msgid "Overhang threshold"
 msgstr "Soglia sporgenza"
 
-#: src/slic3r/GUI/Tab.cpp:1215
+#: src/slic3r/GUI/Tab.cpp:1545
 msgid "Overlap"
 msgstr "Sovrapposizione"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "P&rint Settings Tab"
 msgstr "Impos&tazioni Stampa"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:625
-#: src/slic3r/GUI/Plater.cpp:635 src/slic3r/GUI/Tab.cpp:3636
-#: src/slic3r/GUI/Tab.cpp:3637 src/libslic3r/PrintConfig.cpp:2781
-#: src/libslic3r/PrintConfig.cpp:2788 src/libslic3r/PrintConfig.cpp:2802
-#: src/libslic3r/PrintConfig.cpp:2813 src/libslic3r/PrintConfig.cpp:2823
-#: src/libslic3r/PrintConfig.cpp:2845 src/libslic3r/PrintConfig.cpp:2856
-#: src/libslic3r/PrintConfig.cpp:2863 src/libslic3r/PrintConfig.cpp:2870
-#: src/libslic3r/PrintConfig.cpp:2881 src/libslic3r/PrintConfig.cpp:2890
-#: src/libslic3r/PrintConfig.cpp:2899
+#: src/slic3r/GUI/GUI_ObjectList.cpp:105 src/slic3r/GUI/GUI_ObjectList.cpp:664
+#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Tab.cpp:4055
+#: src/slic3r/GUI/Tab.cpp:4056 src/slic3r/GUI/Tab.cpp:4127
+#: src/libslic3r/PrintConfig.cpp:2945 src/libslic3r/PrintConfig.cpp:2952
+#: src/libslic3r/PrintConfig.cpp:2966 src/libslic3r/PrintConfig.cpp:2977
+#: src/libslic3r/PrintConfig.cpp:2987 src/libslic3r/PrintConfig.cpp:3009
+#: src/libslic3r/PrintConfig.cpp:3020 src/libslic3r/PrintConfig.cpp:3027
+#: src/libslic3r/PrintConfig.cpp:3034 src/libslic3r/PrintConfig.cpp:3045
+#: src/libslic3r/PrintConfig.cpp:3054 src/libslic3r/PrintConfig.cpp:3063
 msgid "Pad"
 msgstr "Pad"
 
@@ -5105,151 +6033,187 @@ msgstr "Pad"
 msgid "Pad and Support"
 msgstr "Pad e Supporto"
 
-#: src/libslic3r/PrintConfig.cpp:2855
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:3019
 msgid "Pad around object"
 msgstr "Pad Intorno all'oggetto"
 
-#: src/libslic3r/PrintConfig.cpp:2862
+#: src/libslic3r/PrintConfig.cpp:3026
 msgid "Pad around object everywhere"
 msgstr "Pad ovunque intorno all'oggetto"
 
-#: src/libslic3r/PrintConfig.cpp:2811
+#: src/libslic3r/PrintConfig.cpp:2975
 msgid "Pad brim size"
 msgstr "Dimensioni brim del Pad"
 
-#: src/libslic3r/SLA/Pad.cpp:691
+#: src/libslic3r/SLA/Pad.cpp:532
 msgid "Pad brim size is too small for the current configuration."
 msgstr "La dimensione del brim del Pad è troppo piccola per la configurazione attuale."
 
-#: src/libslic3r/PrintConfig.cpp:2898
+#: src/libslic3r/PrintConfig.cpp:3062
 msgid "Pad object connector penetration"
 msgstr "Inserimento connettore Pad dell'oggetto"
 
-#: src/libslic3r/PrintConfig.cpp:2880
+#: src/libslic3r/PrintConfig.cpp:3044
 msgid "Pad object connector stride"
 msgstr "Passo del connettore del pad dell'oggetto"
 
-#: src/libslic3r/PrintConfig.cpp:2889
+#: src/libslic3r/PrintConfig.cpp:3053
 msgid "Pad object connector width"
 msgstr "Lunghezza connettore Pad dell'oggetto"
 
-#: src/libslic3r/PrintConfig.cpp:2869
+#: src/libslic3r/PrintConfig.cpp:3033
 msgid "Pad object gap"
 msgstr "Spazio Pad oggetto"
 
-#: src/libslic3r/PrintConfig.cpp:2797
+#: src/libslic3r/PrintConfig.cpp:2961
 msgid "Pad wall height"
 msgstr "Altezza parete Pad"
 
-#: src/libslic3r/PrintConfig.cpp:2844
+#: src/libslic3r/PrintConfig.cpp:3008
 msgid "Pad wall slope"
 msgstr "Inclinazione della parete del pad"
 
-#: src/libslic3r/PrintConfig.cpp:2787
+#: src/libslic3r/PrintConfig.cpp:2951
 msgid "Pad wall thickness"
 msgstr "Spessore parete Pad"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Page Down"
 msgstr "Page Down"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Page Up"
 msgstr "Page Up"
 
-#: src/slic3r/GUI/Field.cpp:139
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33
+msgid "Paint-on supports"
+msgstr "Supporti Paint-on"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:178
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:159
+msgid "Paints all facets inside, regardless of their orientation."
+msgstr "Dipinge tutte le faccette all'interno, indipendentemente dal loro orientamento."
+
+#: src/slic3r/GUI/Field.cpp:187
 msgid "parameter name"
 msgstr "nome parametro"
 
-#: src/slic3r/GUI/Field.cpp:243
+#: src/slic3r/GUI/Field.cpp:291
 msgid "Parameter validation"
 msgstr "Validazione parametri"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Part"
 msgstr "Parte"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2494
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2886
 msgid "Part manipulation"
 msgstr "Manipolazione parti"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2483
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2875
 msgid "Part Settings to modify"
 msgstr "Impostazioni parte da modificare"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4514
+#: src/libslic3r/PrintConfig.cpp:138
+msgid "Password"
+msgstr "Password"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4880
 msgid "Paste"
 msgstr "Incolla"
 
-#: src/slic3r/GUI/MainFrame.cpp:592
+#: src/slic3r/GUI/MainFrame.cpp:1198
 msgid "Paste clipboard"
 msgstr "Incolla appunti"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
 msgid "Paste from clipboard"
 msgstr "Incolla dagli appunti"
 
-#: src/slic3r/GUI/Plater.cpp:5606
+#: src/slic3r/GUI/Plater.cpp:5803
 msgid "Paste From Clipboard"
 msgstr "Incolla dagli appunti"
 
-#: src/libslic3r/PrintConfig.cpp:2002
+#: src/libslic3r/PrintConfig.cpp:2144
 msgid "Pattern"
 msgstr "Trama"
 
-#: src/libslic3r/PrintConfig.cpp:1891
+#: src/libslic3r/PrintConfig.cpp:2033
 msgid "Pattern angle"
 msgstr "Angolo trama"
 
-#: src/libslic3r/PrintConfig.cpp:2016
+#: src/libslic3r/PrintConfig.cpp:2158
 msgid "Pattern spacing"
 msgstr "Spaziatura trama"
 
-#: src/libslic3r/PrintConfig.cpp:2004
+#: src/libslic3r/PrintConfig.cpp:2146
 msgid "Pattern used to generate support material."
 msgstr "Trama usata per generare il materiale di supporto."
 
-#: src/slic3r/GUI/Plater.cpp:1261
+#: src/slic3r/GUI/GCodeViewer.cpp:2437 src/slic3r/GUI/GCodeViewer.cpp:2460
+#: src/slic3r/GUI/Plater.cpp:1199
 msgid "Pause"
 msgstr "Pausa"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1009
+#: src/slic3r/GUI/DoubleSlider.cpp:1133
 msgid "Pause print (\"%1%\")"
 msgstr "Metti in pausa (\"%1%\")"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:934 src/slic3r/GUI/GLCanvas3D.cpp:943
-#: src/slic3r/GUI/GLCanvas3D.cpp:982
+#: src/slic3r/GUI/Tab.cpp:2209 src/libslic3r/PrintConfig.cpp:1969
+msgid "Pause Print G-code"
+msgstr "G-code Pausa Stampa"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
+#: src/slic3r/GUI/GLCanvas3D.cpp:988
 msgid "Pause print or custom G-code"
 msgstr "Pausa stampa o G-code personalizzato"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:175
+#: src/libslic3r/PrintConfig.cpp:1147
+msgid "Percent of a flow rate relative to object's normal layer height."
+msgstr "Percentuale di una portata rispetto all'altezza normale dello strato dell'oggetto."
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2233
+msgid "Percentage"
+msgstr "Percentuale"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:177
 msgid "Perform cut"
 msgstr "Effettua taglio"
 
-#: src/libslic3r/PrintConfig.cpp:2927
+#: src/libslic3r/PrintConfig.cpp:3091
 msgid "Performance vs accuracy of calculation. Lower values may produce unwanted artifacts."
 msgstr "Prestazioni vs Precisione di calcolo. Valori più bassi possono produrre artefatti non voluti."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:237 src/libslic3r/ExtrusionEntity.cpp:310
+#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:336
 msgid "Perimeter"
 msgstr "Perimetro"
 
-#: src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1516
 msgid "Perimeter extruder"
 msgstr "Estrusore perimetro"
 
-#: src/slic3r/GUI/PresetHints.cpp:165
+#: src/slic3r/GUI/PresetHints.cpp:164
 msgid "perimeters"
 msgstr "perimetri"
 
-#: src/libslic3r/PrintConfig.cpp:1399 src/libslic3r/PrintConfig.cpp:1417
-#: src/libslic3r/PrintConfig.cpp:1430 src/libslic3r/PrintConfig.cpp:1440
+#: src/libslic3r/PrintConfig.cpp:1507 src/libslic3r/PrintConfig.cpp:1525
+#: src/libslic3r/PrintConfig.cpp:1538 src/libslic3r/PrintConfig.cpp:1548
 msgid "Perimeters"
 msgstr "Perimetri"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:860
-#, possible-c-format
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:159
+msgid "Physical Printer"
+msgstr "Stampante Fisica"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:789
+#: src/slic3r/GUI/PresetComboBoxes.cpp:948
+msgid "Physical printers"
+msgstr "Stampanti fisiche"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1226
+#, c-format
 msgid "Pick another vendor supported by %s"
 msgstr "Scegli un altro distributore supportato da %s"
 
@@ -5257,279 +6221,338 @@ msgstr "Scegli un altro distributore supportato da %s"
 msgid "Picture sizes to be stored into a .gcode and .sl1 files"
 msgstr "Dimensioni immagine per essere memorizzate nei file .gcode e .sl1"
 
-#: src/libslic3r/PrintConfig.cpp:2681
+#: src/libslic3r/PrintConfig.cpp:2822
+msgid "Pillar connection mode"
+msgstr "Modo di collegamento al pilastro"
+
+#: src/libslic3r/PrintConfig.cpp:2791
+msgid "Pillar diameter"
+msgstr "Diametro pilastro"
+
+#: src/libslic3r/PrintConfig.cpp:2845
 msgid "Pillar widening factor"
 msgstr "Fattore di espansione pilastro"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:330
+#: src/slic3r/GUI/ConfigManipulation.cpp:335
 msgid "Pinhead diameter should be smaller than the pillar diameter."
 msgstr "Il diametro dell'apice dovrebbe essere più piccolo rispetto al diametro del pilastro."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:79
+#: src/libslic3r/PrintConfig.cpp:2763
+msgid "Pinhead front diameter"
+msgstr "Diametro anteriore apice"
+
+#: src/libslic3r/PrintConfig.cpp:2781
+msgid "Pinhead width"
+msgstr "Larghezza apice"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:110
 msgid "Place bearings in slots and resume printing"
 msgstr "Posiziona i cuscinetti negli alloggi e riprendi a stampare"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41
 msgid "Place on face"
 msgstr "Posiziona su faccia"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:192 src/slic3r/GUI/MainFrame.cpp:204
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:190 src/slic3r/GUI/MainFrame.cpp:340
+#: src/slic3r/GUI/MainFrame.cpp:352
 msgid "Plater"
 msgstr "Piano"
 
-#: src/slic3r/GUI/GUI_App.cpp:1085
+#: src/slic3r/GUI/GUI_App.cpp:1877
 msgid "Please check and fix your object list."
 msgstr "Per favore controlla e correggi la tua lista oggetti."
 
-#: src/slic3r/GUI/Plater.cpp:2312 src/slic3r/GUI/Tab.cpp:2959
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2255
+#: src/slic3r/GUI/Tab.cpp:3188
 msgid "Please check your object list before preset changing."
 msgstr "Per favore verifica la tua lista di oggetti prima di cambiare i preset."
 
-#: src/slic3r/GUI/Plater.cpp:3286
+#: src/slic3r/GUI/Plater.cpp:3089
 msgid "Please select the file to reload"
 msgstr "Seleziona il file da ricaricare"
 
-#: src/slic3r/GUI/AboutDialog.cpp:39 src/slic3r/GUI/AboutDialog.cpp:291
+#: src/slic3r/GUI/AboutDialog.cpp:43 src/slic3r/GUI/AboutDialog.cpp:48
+#: src/slic3r/GUI/AboutDialog.cpp:317
 msgid "Portions copyright"
-msgstr "Parti di copyright"
+msgstr "Porzioni di copyright"
 
-#: src/libslic3r/PrintConfig.cpp:2400
+#: src/libslic3r/PrintConfig.cpp:2543
 msgid "Portrait"
 msgstr "Ritratto"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:215
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:457
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:223
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:505
 msgid "Position"
 msgstr "Posizione"
 
-#: src/slic3r/GUI/Tab.cpp:2367
+#: src/slic3r/GUI/Tab.cpp:2536
 msgid "Position (for multi-extruder printers)"
 msgstr "Posizione (per stampanti multi-estrusore)"
 
-#: src/libslic3r/PrintConfig.cpp:1623
+#: src/libslic3r/PrintConfig.cpp:1731
 msgid "Position of perimeters starting points."
 msgstr "Posizione dei punti iniziali dei perimetri."
 
-#: src/libslic3r/PrintConfig.cpp:2224
+#: src/libslic3r/PrintConfig.cpp:2367
 msgid "Position X"
 msgstr "Posizione X"
 
-#: src/libslic3r/PrintConfig.cpp:2231
+#: src/libslic3r/PrintConfig.cpp:2374
 msgid "Position Y"
 msgstr "Posizione Y"
 
-#: src/slic3r/GUI/Tab.cpp:1245 src/libslic3r/PrintConfig.cpp:1453
+#: src/slic3r/GUI/Tab.cpp:1575 src/libslic3r/PrintConfig.cpp:1561
 msgid "Post-processing scripts"
 msgstr "Script di post produzione"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Pre&view"
 msgstr "&Visualizza anteprima"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:149 src/slic3r/GUI/Preferences.cpp:10
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 src/slic3r/GUI/Preferences.cpp:12
 msgid "Preferences"
 msgstr "Preferenze"
 
-#: src/libslic3r/PrintConfig.cpp:1641
+#: src/libslic3r/PrintConfig.cpp:1749
 msgid "Preferred direction of the seam"
 msgstr "Direzione preferita della giunzione"
 
-#: src/libslic3r/PrintConfig.cpp:1652
+#: src/libslic3r/PrintConfig.cpp:1760
 msgid "Preferred direction of the seam - jitter"
 msgstr "Direzione preferita della giunzione - jitter"
 
-#: src/libslic3r/PrintObject.cpp:255
+#: src/libslic3r/PrintObject.cpp:261
 msgid "Preparing infill"
 msgstr "Preparazione infill"
 
-#: src/slic3r/GUI/Tab.cpp:2920
-#, possible-c-format
-msgid "Preset (%s)"
-msgstr "Preset (%s)"
+#: src/slic3r/GUI/GUI_App.cpp:855
+msgid "Preparing settings tabs"
+msgstr "Preparazione schede impostazioni"
 
-#: src/slic3r/GUI/Tab.cpp:3082
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1009
+msgid "Preset \"%1%\" has the following unsaved changes:"
+msgstr "Il preset \"%1%\" ha le seguenti modifiche non salvate:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1014
+msgid "Preset \"%1%\" is not compatible with the new print profile and it has the following unsaved changes:"
+msgstr "Il preset \"%1%\" non è compatibile con il nuovo profilo di stampa e possiede le seguenti modifiche non salvate:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1013
+msgid "Preset \"%1%\" is not compatible with the new printer profile and it has the following unsaved changes:"
+msgstr "Il preset \"%1%\" non è compatibile con il nuovo profilo stampante e possiede le seguenti modifiche non salvate:"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:136
+msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
+msgstr "Il preset con il nome \"%1%\" esiste già e non è compatibile con la stampante selezionata."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:148
 msgid "Preset with name \"%1%\" already exists."
 msgstr "Preset con il nome \"%1%\" già esistente."
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/SavePresetDialog.cpp:219
 msgctxt "PresetName"
 msgid "Copy"
 msgstr "Copia"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
 msgid "Press to activate deselection rectangle"
 msgstr "Premi per attivare il rettangolo di deselezione"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
-msgid "Press to activate one direction scaling in Gizmo scale"
-msgstr "Premere per attivare una direzione di ridimensionamento nel Gizmo ridimensiona"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:156
 msgid "Press to activate selection rectangle"
 msgstr "Premi per attivare il rettangolo di selezione"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
-msgid "Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\nselected objects around their own center"
-msgstr "Premi per ridimensionare (nel Gizmo ridimensiona) o ruotare (nel Gizmo ruota)\nl'oggetto selezionato attorno al proprio centro"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:155
+msgid ""
+"Press to select multiple objects\n"
+"or move multiple objects with mouse"
+msgstr ""
+"Premi per selezionare o spostare\n"
+"oggetti multipli con il mouse"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
-msgid "Press to select multiple objects\nor move multiple objects with mouse"
-msgstr "Premi per selezionare o spostare\noggetti multipli con il mouse"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
+msgid ""
+"Press to speed up 5 times while moving thumb\n"
+"with arrow keys or mouse wheel"
+msgstr ""
+"Premere per accelerare di 5 volte durante il movimento del cursore\n"
+"con i tasti freccia o la rotella del mouse"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
-#, no-c-format
-msgid "Press to snap by 5% in Gizmo scale\nor to snap by 1mm in Gizmo move"
-msgstr "Premi per scatti del 5% nel Gizmo ridimensiona\no per scatti di 1mm nel Gizmo sposta"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4105
-#: src/slic3r/GUI/Tab.cpp:2390
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 src/slic3r/GUI/Plater.cpp:4052
+#: src/slic3r/GUI/Tab.cpp:2559
 msgid "Preview"
 msgstr "Anteprima"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
 msgid "Preview hollowed and drilled model"
 msgstr "Anteprima del modello svuotato e forato"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid "Previously sliced file ("
 msgstr "File precedentemente processato ("
 
-#: src/libslic3r/PrintConfig.cpp:1851
+#: src/libslic3r/PrintConfig.cpp:1993
 msgid "Prime all printing extruders"
 msgstr "Prepara tutti gli estrusori di stampa"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1521
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/libslic3r/Preset.cpp:1300
 msgid "print"
 msgstr "stampa"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/GCodeViewer.cpp:2436 src/slic3r/GUI/GCodeViewer.cpp:2451
+msgid "Print"
+msgstr "Stampa"
+
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Print &Host Upload Queue"
 msgstr "Coda di caricamento &Host di stampa"
 
-#: src/libslic3r/PrintConfig.cpp:471
+#: src/libslic3r/PrintConfig.cpp:507
 msgid "Print contour perimeters from the outermost one to the innermost one instead of the default inverse order."
 msgstr "Stampa i perimetri di contorno dal più esterno al più interno invece dell'ordine predefinito inverso."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Print Diameters"
 msgstr "Diametro di stampa"
 
-#: src/slic3r/GUI/Tab.cpp:1944 src/slic3r/GUI/Tab.cpp:2123
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:209 src/slic3r/GUI/Tab.cpp:2024
 msgid "Print Host upload"
 msgstr "Caricamento Host di stampa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:142
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
 #: src/slic3r/GUI/PrintHostDialogs.cpp:136
 msgid "Print host upload queue"
 msgstr "Coda di caricamento Host di stampa"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:970
+#: src/slic3r/GUI/DoubleSlider.cpp:1093
 msgid "Print mode"
 msgstr "Modalità di stampa"
 
-#: src/slic3r/GUI/Tab.hpp:328 src/slic3r/GUI/Tab.hpp:431
+#: src/slic3r/GUI/GCodeViewer.cpp:2579 src/slic3r/GUI/GUI_Preview.cpp:1476
+msgid "Print pauses"
+msgstr "Pause di stampa"
+
+#: src/slic3r/GUI/Tab.hpp:378 src/slic3r/GUI/Tab.hpp:502
 msgid "Print Settings"
 msgstr "Impostazioni Stampa"
 
-#: src/slic3r/GUI/Plater.cpp:815
+#: src/slic3r/GUI/Plater.cpp:690
 msgid "Print settings"
 msgstr "Impostazioni di stampa"
 
-#: src/slic3r/GUI/Tab.cpp:1478
+#: src/slic3r/GUI/GLCanvas3D.cpp:4303 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Print Settings Tab"
+msgstr "Scheda Impostazioni Stampa"
+
+#: src/slic3r/GUI/Tab.cpp:1824
 msgid "Print speed override"
 msgstr "Scavalca velocità di stampa"
 
-#: src/libslic3r/GCode.cpp:638
+#: src/libslic3r/GCode.cpp:623
 msgid "Print z"
 msgstr "Stampa z"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Print&er Settings Tab"
 msgstr "Impostazioni Stampant&e"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1621
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1750
 msgid "Printable"
 msgstr "Stampabile"
 
-#: src/slic3r/GUI/Plater.cpp:819
+#: src/slic3r/GUI/Plater.cpp:694
 msgid "Printer"
 msgstr "Stampante"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1525
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/libslic3r/Preset.cpp:1304
 msgid "printer"
 msgstr "stampante"
 
-#: src/libslic3r/PrintConfig.cpp:2439 src/libslic3r/PrintConfig.cpp:2440
+#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2583
 msgid "Printer absolute correction"
 msgstr "Correzione assoluta stampante"
 
-#: src/libslic3r/PrintConfig.cpp:2456 src/libslic3r/PrintConfig.cpp:2457
+#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2600
 msgid "Printer gamma correction"
 msgstr "Correzione gamma della stampante"
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1294
 msgid "printer model"
 msgstr "modello stampante"
 
-#: src/libslic3r/PrintConfig.cpp:1472
+#: src/libslic3r/PrintConfig.cpp:1580
 msgid "Printer notes"
 msgstr "Note stampante"
 
-#: src/libslic3r/PrintConfig.cpp:2431 src/libslic3r/PrintConfig.cpp:2432
-#: src/libslic3r/PrintConfig.cpp:2433
+#: src/libslic3r/PrintConfig.cpp:144
+msgid "Printer preset name"
+msgstr "Nome del preset della stampante"
+
+#: src/libslic3r/PrintConfig.cpp:2574 src/libslic3r/PrintConfig.cpp:2575
+#: src/libslic3r/PrintConfig.cpp:2576
 msgid "Printer scaling correction"
 msgstr "Correzione di scala stampante"
 
-#: src/slic3r/GUI/Tab.hpp:391
+#: src/slic3r/GUI/Tab.hpp:453
 msgid "Printer Settings"
 msgstr "Impostazioni stampante"
 
+#: src/slic3r/GUI/GLCanvas3D.cpp:4305 src/slic3r/GUI/GLCanvas3D.cpp:4941
+msgid "Printer Settings Tab"
+msgstr "Scheda Impostazioni Stampante"
+
 #: src/libslic3r/PrintConfig.cpp:43 src/libslic3r/PrintConfig.cpp:44
 msgid "Printer technology"
 msgstr "Tecnologia stampante"
 
-#: src/libslic3r/PrintConfig.cpp:1466
+#: src/libslic3r/PrintConfig.cpp:1574
 msgid "Printer type"
 msgstr "Tipo stampante"
 
-#: src/libslic3r/PrintConfig.cpp:1487
+#: src/libslic3r/PrintConfig.cpp:1595
 msgid "Printer variant"
 msgstr "Variante della stampante"
 
-#: src/libslic3r/PrintConfig.cpp:1481
+#: src/libslic3r/PrintConfig.cpp:1589
 msgid "Printer vendor"
 msgstr "Venditore della stampante"
 
-#: src/libslic3r/Print.cpp:1388
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:476
+msgid "Printer with name \"%1%\" already exists."
+msgstr "Stampante con nome \"%1%\" già esistente."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:587
+msgid "Printer:"
+msgstr "Stampante:"
+
+#: src/libslic3r/Print.cpp:1414
 msgid "Printing with multiple extruders of differing nozzle diameters. If support is to be printed with the current extruder (support_material_extruder == 0 or support_material_interface_extruder == 0), all nozzles have to be of the same diameter."
 msgstr "Stampa con più estrusori con ugelli di di diametro diverso. Se il supporto deve essere stampato con l'estrusore corrente (support_material_extruder = = 0 o support_material_interface_extruder = = 0), tutti gli ugelli devono avere lo stesso diametro."
 
 #. TRN "Processing input_file_basename"
-#: src/slic3r/GUI/MainFrame.cpp:849
-#, possible-c-format
+#: src/slic3r/GUI/MainFrame.cpp:1550
+#, c-format
 msgid "Processing %s"
 msgstr "Elaborando %s"
 
-#: src/slic3r/GUI/Plater.cpp:2283
-#, possible-c-format
-msgid "Processing input file %s"
-msgstr "Processando il file di input %s"
-
-#: src/libslic3r/PrintObject.cpp:108
+#: src/libslic3r/PrintObject.cpp:114
 msgid "Processing triangulated mesh"
 msgstr "Elaborando la mesh triangolata"
 
-#: src/slic3r/GUI/Tab.cpp:1259 src/slic3r/GUI/Tab.cpp:1549
-#: src/slic3r/GUI/Tab.cpp:2020 src/slic3r/GUI/Tab.cpp:2136
-#: src/slic3r/GUI/Tab.cpp:3544 src/slic3r/GUI/Tab.cpp:3672
+#: src/slic3r/GUI/Tab.cpp:1589 src/slic3r/GUI/Tab.cpp:1896
+#: src/slic3r/GUI/Tab.cpp:2229 src/slic3r/GUI/Tab.cpp:2305
+#: src/slic3r/GUI/Tab.cpp:3960 src/slic3r/GUI/Tab.cpp:4091
 msgid "Profile dependencies"
 msgstr "Dipendenze profilo"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:566
+#: src/slic3r/GUI/ConfigWizard.cpp:590
 msgid "Profile:"
 msgstr "Profilo:"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:150
+#: src/slic3r/GUI/PrintHostDialogs.cpp:148
 msgid "Progress"
 msgstr "Progresso"
 
@@ -5537,93 +6560,133 @@ msgstr "Progresso"
 msgid "Progress:"
 msgstr "Progresso:"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Prusa 3D &Drivers"
 msgstr "Prusa 3D &Drivers"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1995
+#: src/slic3r/GUI/ConfigWizard.cpp:2506
 msgid "Prusa FFF Technology Printers"
 msgstr "Stampanti Prusa con tecnologia FFF"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1998
+#: src/slic3r/GUI/ConfigWizard.cpp:2509
 msgid "Prusa MSLA Technology Printers"
 msgstr "Stampanti Prusa con tecnologia MSLA"
 
-#: src/slic3r/GUI/AboutDialog.cpp:260
+#: src/slic3r/Utils/Http.cpp:78
+msgid "PrusaSlicer detected system SSL certificate store in: %1%"
+msgstr "PrusaSlicer ha rilevato l'archivio dei certificati SSL di sistema: %1%"
+
+#: src/slic3r/GUI/GUI_Init.cpp:85 src/slic3r/GUI/GUI_Init.cpp:88
+msgid "PrusaSlicer GUI initialization failed"
+msgstr "Inizializzazione GUI PrusaSlicer non riuscita"
+
+#: src/slic3r/GUI/AboutDialog.cpp:285
 msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
 msgstr "PrusaSlicer è basato su Slic3r di Alessandro Ranellucci e la comunità RepRap."
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:284
-#, possible-c-format
-msgid "PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \nwhile OpenGL version %s, render %s, vendor %s was detected."
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:525
+msgid "PrusaSlicer is closing: Unsaved Changes"
+msgstr "Chiusura PrusaSlicer: Modifiche non salvate"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:259
+#, c-format
+msgid ""
+"PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n"
+"while OpenGL version %s, render %s, vendor %s was detected."
 msgstr "PrusaSlicer richiede un driver video con supporto OpenGL 2.0 per funzionare correttamente, mentre è stata rilevata la versione %s OpenGL, render %s, distributore %s."
 
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:50
 msgid "PrusaSlicer version"
 msgstr "versione PrusaSlicer"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:815
-msgid "PrusaSlicer's user interfaces comes in three variants:\nSimple, Advanced, and Expert.\nThe Simple mode shows only the most frequently used settings relevant for regular 3D printing. The other two offer progressively more sophisticated fine-tuning, they are suitable for advanced and expert users, respectively."
-msgstr "L'interfaccia utente di PrusaSlicer è disponibile in tre varianti:\nSemplice, Avanzata ed Esperto.\nLa modalità Semplice mostra solo le impostazioni rilevanti utilizzate più spesso per una semplice stampa 3D. Le altre due offrono progressivamente ottimizzazioni più sofisticate, sono adatte ad utenti avanzati ed esperti, rispettivamente."
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:662
+msgid "PrusaSlicer will remember your action."
+msgstr "PrusaSlicer ricorderà la tua azione."
 
-#: src/libslic3r/PrintConfig.cpp:2254
+#: src/slic3r/GUI/ConfigWizard.cpp:1174
+msgid ""
+"PrusaSlicer's user interfaces comes in three variants:\n"
+"Simple, Advanced, and Expert.\n"
+"The Simple mode shows only the most frequently used settings relevant for regular 3D printing. The other two offer progressively more sophisticated fine-tuning, they are suitable for advanced and expert users, respectively."
+msgstr ""
+"L'interfaccia utente di PrusaSlicer è disponibile in tre varianti:\n"
+"Semplice, Avanzata ed Esperto.\n"
+"La modalità Semplice mostra solo le impostazioni rilevanti utilizzate più spesso per una semplice stampa 3D. Le altre due offrono progressivamente ottimizzazioni più sofisticate, sono adatte ad utenti avanzati ed esperti, rispettivamente."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:668
+msgid "PrusaSlicer: Don't ask me again"
+msgstr "PrusaSlicer: Non chiedermelo più"
+
+#: src/libslic3r/PrintConfig.cpp:2397
 msgid "Purging after toolchange will done inside this object's infills. This lowers the amount of waste but may result in longer print time  due to additional travel moves."
 msgstr "Lo spurgo dopo un cambio di attrezzo verrà effettuato dentro il riempimento di questo oggetto. Questo diminuisce la quantità di scarto ma potrebbe prolungare il tempo di stampa a causa di spostamenti aggiuntivi."
 
-#: src/slic3r/GUI/Plater.cpp:544
+#: src/slic3r/GUI/Plater.cpp:410
 msgid "Purging volumes"
 msgstr "Volumi di spurgo"
 
-#: src/libslic3r/PrintConfig.cpp:2207
+#: src/libslic3r/PrintConfig.cpp:2350
 msgid "Purging volumes - load/unload volumes"
 msgstr "Volumi di spurgo - volumi di carico/scarico"
 
-#: src/libslic3r/PrintConfig.cpp:2214
+#: src/libslic3r/PrintConfig.cpp:2357
 msgid "Purging volumes - matrix"
 msgstr "Volumi di spurgo - matrice"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:1201
+msgid "Purpose of Machine Limits"
+msgstr "Scopo dei limiti della macchina"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
 msgid "Quality"
 msgstr "Qualità"
 
-#: src/slic3r/GUI/Tab.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:1402
 msgid "Quality (slower slicing)"
 msgstr "Qualità (slicing più lento)"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:273
+#: src/slic3r/GUI/GLCanvas3D.cpp:260
 msgid "Quality / Speed"
 msgstr "Qualità / Velocità"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1182
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1530
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1536
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1849
-#, possible-c-format
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:61
+msgid "Quick"
+msgstr "Veloce"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1306
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1661
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1667
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2008
+#, c-format
 msgid "Quick Add Settings (%s)"
 msgstr "Aggiungere Impostazioni Rapide (%s)"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Quick Slice"
 msgstr "Slice veloce"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Quick Slice and Save As"
 msgstr "Slice veloce e Salva Come"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
-#, possible-c-format
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
+#, c-format
 msgid "Quit %s"
 msgstr "Chiudi %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:294 src/libslic3r/PrintConfig.cpp:511
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Quit, I will move my data now"
+msgstr "Chiudi, sposterò i miei dati adesso"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:280 src/libslic3r/PrintConfig.cpp:547
 msgid "Radius"
 msgstr "Raggio"
 
-#: src/slic3r/GUI/Tab.cpp:1127
+#: src/slic3r/GUI/Tab.cpp:1456
 msgid "Raft"
 msgstr "Raft"
 
-#: src/libslic3r/PrintConfig.cpp:1501
+#: src/libslic3r/PrintConfig.cpp:1609
 msgid "Raft layers"
 msgstr "Layer raft"
 
@@ -5632,8 +6695,14 @@ msgid "Ramming customization"
 msgstr "Personalizzazione del ramming"
 
 #: src/slic3r/GUI/WipeTowerDialog.cpp:41
-msgid "Ramming denotes the rapid extrusion just before a tool change in a single-extruder MM printer. Its purpose is to properly shape the end of the unloaded filament so it does not prevent insertion of the new filament and can itself be reinserted later. This phase is important and different materials can require different extrusion speeds to get the good shape. For this reason, the extrusion rates during ramming are adjustable.\n\nThis is an expert-level setting, incorrect adjustment will likely lead to jams, extruder wheel grinding into filament etc."
-msgstr "Il ramming è la rapida estrusione appena prima di un cambio di attrezzo in una stampante MM ad estrusore singolo. Lo scopo è di dare la forma corretta al capo del filamento scaricato cosicché non prevenga l'inserzione del nuovo filamento e perché possa essere inserito più facilmente esso stesso.  Questa fase è importante e materiali diversi possono richiedere velocità diverse per ottenere la forma corretta. Per questo motivo le velocità di estrusione del ramming possono essere modificate.\n\nQuesta è un'impostazione per esperti, valori scorretti produrranno facilmente dei blocchi, o porteranno l'ingranaggio di estrusione a macinare il filamento etc."
+msgid ""
+"Ramming denotes the rapid extrusion just before a tool change in a single-extruder MM printer. Its purpose is to properly shape the end of the unloaded filament so it does not prevent insertion of the new filament and can itself be reinserted later. This phase is important and different materials can require different extrusion speeds to get the good shape. For this reason, the extrusion rates during ramming are adjustable.\n"
+"\n"
+"This is an expert-level setting, incorrect adjustment will likely lead to jams, extruder wheel grinding into filament etc."
+msgstr ""
+"Il ramming è la rapida estrusione appena prima di un cambio di attrezzo in una stampante MM ad estrusore singolo. Lo scopo è di dare la forma corretta al capo del filamento scaricato cosicché non prevenga l'inserzione del nuovo filamento e perché possa essere inserito più facilmente esso stesso.  Questa fase è importante e materiali diversi possono richiedere velocità diverse per ottenere la forma corretta. Per questo motivo le velocità di estrusione del ramming possono essere modificate.\n"
+"\n"
+"Questa è un'impostazione per esperti, valori scorretti produrranno facilmente dei blocchi, o porteranno l'ingranaggio di estrusione a macinare il filamento etc."
 
 #: src/slic3r/GUI/WipeTowerDialog.cpp:91
 msgid "Ramming line spacing"
@@ -5643,27 +6712,27 @@ msgstr "Spaziatura tra linee di ramming"
 msgid "Ramming line width"
 msgstr "Larghezza della linea di Ramming"
 
-#: src/libslic3r/PrintConfig.cpp:694
+#: src/libslic3r/PrintConfig.cpp:730
 msgid "Ramming parameters"
 msgstr "Parametri del ramming"
 
-#: src/slic3r/GUI/Tab.cpp:1505
+#: src/slic3r/GUI/Tab.cpp:1850
 msgid "Ramming settings"
 msgstr "Impostazioni del ramming"
 
-#: src/libslic3r/PrintConfig.cpp:1629
+#: src/libslic3r/PrintConfig.cpp:1737
 msgid "Random"
 msgstr "Casuale"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 msgid "Range"
 msgstr "Intervallo"
 
-#: src/libslic3r/SLAPrintSteps.cpp:65
+#: src/libslic3r/SLAPrintSteps.cpp:66
 msgid "Rasterizing layers"
 msgstr "Rasterizzazione dei layer"
 
-#: src/slic3r/GUI/MainFrame.cpp:596
+#: src/slic3r/GUI/MainFrame.cpp:1202
 msgid "Re&load from disk"
 msgstr "R&icarica da disco"
 
@@ -5675,210 +6744,243 @@ msgstr "Ri-configura"
 msgid "Ready"
 msgstr "Pronto"
 
-#: src/slic3r/GUI/Plater.cpp:3115
+#: src/slic3r/GUI/Plater.cpp:2915
 msgid "Ready to slice"
 msgstr "Pronto a processare"
 
-#: src/slic3r/GUI/MainFrame.cpp:669 src/libslic3r/PrintConfig.cpp:1632
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
+#: src/libslic3r/PrintConfig.cpp:1740
 msgid "Rear"
 msgstr "Posteriore"
 
-#: src/slic3r/GUI/MainFrame.cpp:669
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
 msgid "Rear View"
 msgstr "Vista posteriore"
 
-#: src/slic3r/GUI/MainFrame.cpp:413
+#: src/slic3r/GUI/MainFrame.cpp:994
 msgid "Recent projects"
 msgstr "Prog&etti recenti"
 
-#: src/slic3r/GUI/PresetHints.cpp:263
-#, possible-c-format
+#: src/slic3r/GUI/PresetHints.cpp:262
+#, c-format
 msgid "Recommended object thin wall thickness for layer height %.2f and"
 msgstr "Spessore raccomandato per oggetto con parete sottile per altezza layer %.2f e"
 
-#: src/slic3r/GUI/PresetHints.cpp:274
+#: src/slic3r/GUI/PresetHints.cpp:273
 msgid "Recommended object thin wall thickness: Not available due to excessively small extrusion width."
 msgstr "Spessore raccomandato per oggetto con parete sottile: Non disponibile a causa di una larghezza di estrusione eccessivamente piccola."
 
-#: src/slic3r/GUI/PresetHints.cpp:247
+#: src/slic3r/GUI/PresetHints.cpp:246
 msgid "Recommended object thin wall thickness: Not available due to invalid layer height."
 msgstr "Spessore raccomandato per oggetto con parete sottile: Non disponibile a causa di un'altezza layer non valida."
 
-#: src/slic3r/GUI/GUI_App.cpp:450 src/slic3r/GUI/GUI_App.cpp:459
+#: src/slic3r/GUI/GUI_App.cpp:1102 src/slic3r/GUI/GUI_App.cpp:1115
 msgid "Recreating"
 msgstr "Rigenerando"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:73
+#: src/slic3r/GUI/BedShapeDialog.cpp:141
 msgid "Rectangular"
 msgstr "Rettangolare"
 
-#: src/libslic3r/PrintConfig.cpp:425 src/libslic3r/PrintConfig.cpp:843
-#: src/libslic3r/PrintConfig.cpp:2009
+#: src/libslic3r/PrintConfig.cpp:460 src/libslic3r/PrintConfig.cpp:881
+#: src/libslic3r/PrintConfig.cpp:2151
 msgid "Rectilinear"
 msgstr "Rettilineo"
 
-#: src/libslic3r/PrintConfig.cpp:2010
+#: src/libslic3r/PrintConfig.cpp:2152
 msgid "Rectilinear grid"
 msgstr "Griglia rettilinea"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4657 src/slic3r/GUI/KBShortcutsDialog.cpp:131
-#: src/slic3r/GUI/MainFrame.cpp:584
+#: src/slic3r/GUI/GLCanvas3D.cpp:5067 src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/MainFrame.cpp:1190
 msgid "Redo"
 msgstr "Ripeti"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
-#, possible-c-format
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
+#, c-format
 msgid "Redo %1$d Action"
 msgid_plural "Redo %1$d Actions"
 msgstr[0] "Ripeti %1$d Azione"
 msgstr[1] "Ripeti %1$d Azioni"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Redo History"
-msgstr "Storia Ripeti"
+msgstr "Cronologia Ripeti"
 
-#: src/slic3r/GUI/Tab.cpp:1098
+#: src/slic3r/GUI/Tab.cpp:1426
 msgid "Reducing printing time"
 msgstr "Riduzione tempo di stampa"
 
-#: src/slic3r/GUI/Plater.cpp:3452
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
+msgid "Refresh Printers"
+msgstr "Aggiorna Stampanti"
+
+#: src/libslic3r/PrintConfig.cpp:145
+msgid "Related printer preset name"
+msgstr "Nome del preset della stampante correlato"
+
+#: src/slic3r/GUI/Plater.cpp:3257
 msgid "Reload all from disk"
 msgstr "Ricarica tutto da disco"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:798 src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3225
-#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/ConfigWizard.cpp:1157 src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3028
+#: src/slic3r/GUI/Plater.cpp:3852 src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload from disk"
 msgstr "Ricarica da Disco"
 
-#: src/slic3r/GUI/Plater.cpp:3339
+#: src/slic3r/GUI/Plater.cpp:3142
 msgid "Reload from:"
 msgstr "Ricarica da:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:129
 msgid "Reload plater from disk"
 msgstr "Ricarica piano da disco"
 
-#: src/slic3r/GUI/MainFrame.cpp:597
+#: src/slic3r/GUI/MainFrame.cpp:1203
 msgid "Reload the plater from disk"
 msgstr "Ricarica piano da disco"
 
-#: src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload the selected object from disk"
 msgstr "Ricarica l'oggetto selezionato dal disco"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3934
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3852
 msgid "Reload the selected volumes from disk"
 msgstr "Ricarica i volumi selezionati dal disco"
 
-#: src/slic3r/GUI/Preferences.cpp:39
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Remaining time"
+msgstr "Tempo rimanente"
+
+#: src/slic3r/GUI/GUI_App.cpp:720 src/slic3r/GUI/UnsavedChangesDialog.cpp:653
+msgid "Remember my choice"
+msgstr "Ricorda la mia scelta"
+
+#: src/slic3r/GUI/Preferences.cpp:52
 msgid "Remember output directory"
 msgstr "Ricorda la directory di output"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/MainFrame.cpp:166
+msgid "Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases"
+msgstr "Ricorda di controllare la presenza di aggiornamenti su https://github.com/prusa3d/PrusaSlicer/releases"
+
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "remove"
 msgstr "rimuovi"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:190 src/slic3r/GUI/BedShapeDialog.cpp:269
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/BedShapeDialog.cpp:413
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Remove"
 msgstr "Rimuovi"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
 msgid "Remove all holes"
 msgstr "Rimuovi tutti i fori"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
 msgid "Remove all points"
 msgstr "Rimuovi tutti i punti"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:246
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:35
+msgid "Remove all selection"
+msgstr "Elimina tutte le selezioni"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:239
 msgid "Remove detail"
 msgstr "Rimuovi dettagli"
 
-#: src/slic3r/GUI/Plater.cpp:879
-msgid "Remove device"
-msgstr "Rimuovi dispositivo"
-
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:182
 msgid "Remove extruder from sequence"
 msgstr "Rimuovi estrusore dalla sequenza"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4537 src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/GLCanvas3D.cpp:4903 src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove instance"
 msgstr "Rimuovi istanza"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
 msgid "Remove Instance of the selected object"
 msgstr "Rimuovi Istanza dell'oggetto selezionato"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:153
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:161
 msgid "Remove layer range"
 msgstr "Rimuovi intervallo layer"
 
-#: src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove one instance of the selected object"
 msgstr "Rimuovi una istanza dell'oggetto selezionato"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:95
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:98
 msgid "Remove parameter"
 msgstr "Rimuovi parametro"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Remove point"
 msgstr "Rimuovi punto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Remove point from selection"
 msgstr "Rimuovi punto dalla selezione"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
 msgid "Remove selected holes"
 msgstr "Rimuovi i fori selezionati"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1371
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218
 msgid "Remove selected points"
 msgstr "Rimuovi punti selezionati"
 
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:34
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:368
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:378
+msgid "Remove selection"
+msgstr "Elimina selezione"
+
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
 msgid "Remove the selected object"
 msgstr "Rimuovi l'oggetto selezionato"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:453
+#: src/slic3r/GUI/ConfigWizard.cpp:456
 msgid "Remove user profiles (a snapshot will be taken beforehand)"
 msgstr "Rimuovere i profili utente (verrà effettuata un'istantanea prima di procedere)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1765
 msgid "Rename"
 msgstr "Rinomina"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Object"
 msgstr "Rinomina oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Sub-object"
 msgstr "Rinomina sotto-oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Renaming"
 msgstr "Rinomina"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:115
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:150
 msgid "Renaming of the G-code after copying to the selected destination folder has failed. Current path is %1%.tmp. Please try exporting again."
 msgstr "Non è stato possibile rinominare il G-code dopo la copia nella cartella di destinazione selezionata. Il percorso corrente è %1%.tmp. Prova a esportare di nuovo."
 
-#: src/libslic3r/PrintConfig.cpp:3515
+#: src/slic3r/GUI/Preferences.cpp:255
+msgid "Render"
+msgstr "Render"
+
+#: src/libslic3r/PrintConfig.cpp:3720
 msgid "Render with a software renderer"
 msgstr "Eseguire il rendering con un software redender"
 
-#: src/libslic3r/PrintConfig.cpp:3516
+#: src/libslic3r/PrintConfig.cpp:3721
 msgid "Render with a software renderer. The bundled MESA software renderer is loaded instead of the default OpenGL driver."
 msgstr "Eseguire il rendering con un software redender. Viene caricato il software di rendering MESA integrato al posto del driver OpenGL predefinito ."
 
-#: src/slic3r/GUI/MainFrame.cpp:911 src/libslic3r/PrintConfig.cpp:3447
+#: src/slic3r/GUI/MainFrame.cpp:1612 src/libslic3r/PrintConfig.cpp:3646
 msgid "Repair"
 msgstr "Ripara"
 
@@ -5902,39 +7004,39 @@ msgstr "Il file 3MF non contiene alcun volume"
 msgid "Repairing model by the Netfabb service"
 msgstr "Riparare modello tramite servizio Netfabb"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat last quick slice"
 msgstr "Ripeti l'ultimo slice veloce"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat Last Quick Slice"
 msgstr "Ripeti l'ultimo slice veloce"
 
-#: src/slic3r/GUI/Tab.cpp:3083
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:477
 msgid "Replace?"
 msgstr "Sostituire?"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
 msgid "Report an I&ssue"
 msgstr "&Segnala un problema"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
-#, possible-c-format
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
+#, c-format
 msgid "Report an issue on %s"
 msgstr "Segnala un problema su %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:713
-#, possible-c-format
+#: src/slic3r/Utils/PresetUpdater.cpp:733
+#, c-format
 msgid "requires max. %s"
 msgstr "richiede max. %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:710
-#, possible-c-format
+#: src/slic3r/Utils/PresetUpdater.cpp:730
+#, c-format
 msgid "requires min. %s"
 msgstr "richiede min. %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:705
-#, possible-c-format
+#: src/slic3r/Utils/PresetUpdater.cpp:726
+#, c-format
 msgid "requires min. %s and max. %s"
 msgstr "richiede min. %s e max. %s"
 
@@ -5942,270 +7044,300 @@ msgstr "richiede min. %s e max. %s"
 msgid "Rescan"
 msgstr "Ri-scansiona"
 
-#: src/slic3r/GUI/Tab.cpp:1906
-msgid "Rescan serial ports"
-msgstr "Scansiona nuovamente porte seriali"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:313
+#: src/slic3r/GUI/GLCanvas3D.cpp:299
 msgid "Reset"
 msgstr "Reimposta"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1373
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220
 msgid "Reset clipping plane"
-msgstr "Ripristina piano di ritaglio"
+msgstr "Ripristina piano sezione"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:59
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:26
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
 msgid "Reset direction"
 msgstr "Reset direzione"
 
-#: src/slic3r/GUI/Plater.cpp:2723
+#: src/slic3r/GUI/Plater.cpp:2684
 msgid "Reset Project"
 msgstr "Reimposta Progetto"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:372
 msgid "Reset rotation"
 msgstr "Reimposta rotazione"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:394
 msgid "Reset Rotation"
 msgstr "Reimposta rotazione"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:397
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:399
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:407
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409
 msgid "Reset scale"
 msgstr "Reimposta scala"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:252
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:136
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:118
+msgid "Reset selection"
+msgstr "Reset selezione"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:243
 msgid "Reset to base"
 msgstr "Ripristina alla base"
 
-#: src/slic3r/GUI/Tab.cpp:2394
+#: src/slic3r/GUI/Tab.cpp:2564
 msgid "Reset to Filament Color"
 msgstr "Ripristina colore Filamento"
 
-#: src/libslic3r/PrintConfig.cpp:1511
+#: src/libslic3r/PrintConfig.cpp:1619
 msgid "Resolution"
 msgstr "Risoluzione"
 
-#: src/libslic3r/PrintConfig.cpp:1529
+#: src/libslic3r/PrintConfig.cpp:1637
 msgid "Retract amount before wipe"
 msgstr "Retrai la quantità prima di pulire"
 
-#: src/libslic3r/PrintConfig.cpp:1537
+#: src/libslic3r/PrintConfig.cpp:1645
 msgid "Retract on layer change"
 msgstr "Retrai al cambio layer"
 
-#: src/slic3r/GUI/Tab.cpp:1324 src/slic3r/GUI/Tab.cpp:1383
-#: src/slic3r/GUI/Tab.cpp:2370
+#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/Tab.cpp:1670
+#: src/slic3r/GUI/Tab.cpp:2539
 msgid "Retraction"
 msgstr "Retrazione"
 
-#: src/libslic3r/PrintConfig.cpp:1523
+#: src/libslic3r/PrintConfig.cpp:1631
 msgid "Retraction is not triggered when travel moves are shorter than this length."
 msgstr "La retrazione non è attivata quando i movimenti di spostamento sono più brevi di questa lunghezza."
 
-#: src/libslic3r/PrintConfig.cpp:1544
+#: src/libslic3r/PrintConfig.cpp:1652
 msgid "Retraction Length"
 msgstr "Lunghezza Retrazione"
 
-#: src/libslic3r/PrintConfig.cpp:1552
+#: src/libslic3r/PrintConfig.cpp:1660
 msgid "Retraction Length (Toolchange)"
 msgstr "Lunghezza Retrazione (cambio attrezzo)"
 
-#: src/libslic3r/PrintConfig.cpp:1604 src/libslic3r/PrintConfig.cpp:1605
+#: src/libslic3r/PrintConfig.cpp:1712 src/libslic3r/PrintConfig.cpp:1713
 msgid "Retraction Speed"
 msgstr "Velocità di retrazione"
 
-#: src/slic3r/GUI/Tab.cpp:2386
+#: src/slic3r/GUI/Tab.cpp:2555
 msgid "Retraction when tool is disabled (advanced settings for multi-extruder setups)"
 msgstr "Retrazione quando l'attrezzo è disabilitato (impostazioni avanzate per setup multi-estrusore)"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:254
+#: src/slic3r/GUI/GCodeViewer.cpp:2528 src/slic3r/GUI/GUI_Preview.cpp:336
+#: src/slic3r/GUI/GUI_Preview.cpp:1472
 msgid "Retractions"
 msgstr "Retrazioni"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/Preferences.cpp:198
+msgid "Reverse direction of zoom with mouse wheel"
+msgstr "Inversione della direzione dello zoom con la rotella del mouse"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4886
+msgid "Revert conversion from imperial units"
+msgstr "Invertire la conversione dalle unità imperiali"
+
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right"
 msgstr "Destra"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:402
+#: src/slic3r/GUI/GUI_ObjectList.cpp:449
 msgid "Right button click the icon to change the object printable property"
 msgstr "Fare clic con il pulsante destro del mouse sull'icona per modificare le proprietà dell'oggetto stampabile"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:396
+#: src/slic3r/GUI/GUI_ObjectList.cpp:443
 msgid "Right button click the icon to change the object settings"
 msgstr "Click destro sull'icona per cambiare le impostazioni dell'oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:359
+#: src/slic3r/GUI/GUI_ObjectList.cpp:406
 msgid "Right button click the icon to fix STL through Netfabb"
 msgstr "Click destro sull'icona per riparare il file STL tramite Netfabb"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Right click"
 msgstr "Click destro"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:243
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:31
+msgid "Right mouse button"
+msgstr "Tasto destro mouse"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:237
 msgid "Right mouse button:"
 msgstr "Tasto destro mouse:"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right View"
 msgstr "Vista destra"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:480
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:499
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:517
-#: src/libslic3r/PrintConfig.cpp:3451
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:513
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:527
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:546
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562
+#: src/libslic3r/PrintConfig.cpp:3650
 msgid "Rotate"
 msgstr "Ruota"
 
-#: src/libslic3r/PrintConfig.cpp:3456
+#: src/libslic3r/PrintConfig.cpp:3655
 msgid "Rotate around X"
 msgstr "Ruota attorno ad X"
 
-#: src/libslic3r/PrintConfig.cpp:3461
+#: src/libslic3r/PrintConfig.cpp:3660
 msgid "Rotate around Y"
 msgstr "Ruota attorno ad Y"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:172
 msgid "Rotate lower part upwards"
 msgstr "Capovolgi la parte inferiore"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Rotate selection 45 degrees CCW"
 msgstr "Ruota la selezione di 45° in senso antiorario"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Rotate selection 45 degrees CW"
 msgstr "Ruota la selezione di 45° in senso orario"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458
-#: src/slic3r/GUI/Mouse3DController.cpp:304
-#: src/slic3r/GUI/Mouse3DController.cpp:321
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:210
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:224
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:506
+#: src/slic3r/GUI/Mouse3DController.cpp:288
+#: src/slic3r/GUI/Mouse3DController.cpp:309
 msgid "Rotation"
 msgstr "Rotazione"
 
-#: src/libslic3r/PrintConfig.cpp:3457
+#: src/libslic3r/PrintConfig.cpp:3656
 msgid "Rotation angle around the X axis in degrees."
 msgstr "Angolo di rotazione attorno all'asse X in gradi."
 
-#: src/libslic3r/PrintConfig.cpp:3462
+#: src/libslic3r/PrintConfig.cpp:3661
 msgid "Rotation angle around the Y axis in degrees."
 msgstr "Angolo di rotazione sull'asse Y in gradi."
 
-#: src/libslic3r/PrintConfig.cpp:3452
+#: src/libslic3r/PrintConfig.cpp:3651
 msgid "Rotation angle around the Z axis in degrees."
 msgstr "Angolo di rotazione attorno all'asse Z in gradi."
 
-#: src/slic3r/GUI/GUI_App.cpp:797
-#, possible-c-format
+#: src/slic3r/GUI/GUI_App.cpp:1474
+#, c-format
 msgid "Run %s"
 msgstr "Run %s"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:128
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:478
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:520
 msgid "Running post-processing scripts"
 msgstr "Esecuzione script di post produzione"
 
 #: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:83
-#: src/libslic3r/PrintConfig.cpp:644 src/libslic3r/PrintConfig.cpp:688
-#: src/libslic3r/PrintConfig.cpp:703 src/libslic3r/PrintConfig.cpp:2408
-#: src/libslic3r/PrintConfig.cpp:2417 src/libslic3r/PrintConfig.cpp:2527
-#: src/libslic3r/PrintConfig.cpp:2535 src/libslic3r/PrintConfig.cpp:2543
-#: src/libslic3r/PrintConfig.cpp:2550 src/libslic3r/PrintConfig.cpp:2558
-#: src/libslic3r/PrintConfig.cpp:2566
+#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:724
+#: src/libslic3r/PrintConfig.cpp:739 src/libslic3r/PrintConfig.cpp:2551
+#: src/libslic3r/PrintConfig.cpp:2560 src/libslic3r/PrintConfig.cpp:2670
+#: src/libslic3r/PrintConfig.cpp:2678 src/libslic3r/PrintConfig.cpp:2686
+#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2701
+#: src/libslic3r/PrintConfig.cpp:2709
 msgid "s"
 msgstr "s"
 
-#: src/slic3r/GUI/MainFrame.cpp:481 src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1072 src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end G-code"
 msgstr "Invia G-cod&e"
 
-#: src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end to print"
 msgstr "Manda in stampa"
 
-#. TRN Preset
-#: src/slic3r/GUI/Tab.cpp:3417
-#, possible-c-format
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:642
+msgid "Save"
+msgstr "Salva"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:72
+#, c-format
 msgid "Save %s as:"
 msgstr "Salva %s come:"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
-#, possible-c-format
+#: src/slic3r/GUI/MainFrame.cpp:1527
+#, c-format
 msgid "Save %s file as:"
 msgstr "Salva file %s come:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1046
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:912
 msgid "Save changes?"
 msgstr "Salvare modifiche?"
 
-#: src/libslic3r/PrintConfig.cpp:3386
+#: src/libslic3r/PrintConfig.cpp:3585
 msgid "Save config file"
 msgstr "Salva file config"
 
-#: src/slic3r/GUI/MainFrame.cpp:925
+#: src/slic3r/GUI/MainFrame.cpp:1626
 msgid "Save configuration as:"
 msgstr "Salva configurazione come:"
 
-#: src/libslic3r/PrintConfig.cpp:3387
+#: src/libslic3r/PrintConfig.cpp:3586
 msgid "Save configuration to the specified file."
 msgstr "Salva configurazione nel file specificato."
 
 #. TRN "Save current Settings"
-#: src/slic3r/GUI/Tab.cpp:133
-#, possible-c-format
+#: src/slic3r/GUI/Tab.cpp:203
+#, c-format
 msgid "Save current %s"
 msgstr "Salva le %s attuali"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "Save current project file"
 msgstr "Salva progetto corrente"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save current project file as"
 msgstr "Salvare il file del progetto corrente come"
 
-#: src/slic3r/GUI/Plater.cpp:2604
+#: src/slic3r/GUI/Plater.cpp:2566
 msgid "Save file as:"
 msgstr "Salva come:"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save G-code file as:"
 msgstr "Salva il file G-code come:"
 
-#: src/slic3r/GUI/MainFrame.cpp:899
+#: src/slic3r/GUI/MainFrame.cpp:1600
 msgid "Save OBJ file (less prone to coordinate errors than STL) as:"
 msgstr "Salva il file OBJ (meno soggetto a errori di coordinate dell'STL) come:"
 
-#: src/slic3r/GUI/Tab.hpp:443
+#: src/slic3r/GUI/SavePresetDialog.cpp:190
+#: src/slic3r/GUI/SavePresetDialog.cpp:196
 msgid "Save preset"
 msgstr "Salva preset"
 
-#: src/slic3r/GUI/MainFrame.cpp:980
+#: src/slic3r/GUI/MainFrame.cpp:1681
 msgid "Save presets bundle as:"
 msgstr "Salva il gruppo di preset come:"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save Project &as"
 msgstr "Salv&a Progetto come"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:114
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:107
 msgid "Save project (3mf)"
 msgstr "Salva progetto (3mf)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:115
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:108
 msgid "Save project as (3mf)"
 msgstr "Salva progetto come (3mf)"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save SL1 file as:"
 msgstr "Salva file SL1 come:"
 
-#: src/slic3r/GUI/MainFrame.cpp:838
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:744
+msgid "Save the selected options to preset \"%1%\"."
+msgstr "Salva le opzioni selezionate nel preset \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Save the selected options."
+msgstr "Salvare le opzioni selezionate."
+
+#: src/slic3r/GUI/MainFrame.cpp:1539
 msgid "Save zip file as:"
 msgstr "Salva file zip come:"
 
@@ -6215,211 +7347,246 @@ msgstr "Salva file zip come:"
 msgid "Saving mesh into the 3MF container failed."
 msgstr "Il salvataggio della rete nel contenitore 3MF non è riuscito."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:47
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:230
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:500
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:518
-#: src/libslic3r/PrintConfig.cpp:3466
+#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:78
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:238
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:547
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:563
+#: src/libslic3r/PrintConfig.cpp:3665
 msgid "Scale"
 msgstr "Ridimensiona"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:459
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:507
 msgid "Scale factors"
 msgstr "Fattore di scala"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
-msgid "Scale selection to fit print volume\nin Gizmo scale"
-msgstr "Ridimensiona la selezione per riempire il volume di stampa\nnel Gizmo Ridimensiona"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale the selected object to fit the print volume"
 msgstr "Ridimensiona l'oggetto selezionato per entrare nel volume di stampa"
 
-#: src/libslic3r/PrintConfig.cpp:3475
+#: src/libslic3r/PrintConfig.cpp:3674
 msgid "Scale to Fit"
 msgstr "Ridimensiona per riempire"
 
-#: src/slic3r/GUI/Selection.cpp:939
+#: src/slic3r/GUI/Selection.cpp:988
 msgid "Scale To Fit"
 msgstr "Ridimensiona per adattare"
 
-#: src/libslic3r/PrintConfig.cpp:3476
+#: src/libslic3r/PrintConfig.cpp:3675
 msgid "Scale to fit the given volume."
 msgstr "Ridimensiona per adattare al volume dato."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale to print volume"
 msgstr "Ridimensiona a volume di stampa"
 
-#: src/libslic3r/PrintConfig.cpp:3467
+#: src/libslic3r/PrintConfig.cpp:3666
 msgid "Scaling factor or percentage."
 msgstr "Fattore di scala o percentuale."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:505
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:545
 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
 msgstr "Programmazione del caricamento su `%1%`. Vedere finestra -> Coda di caricamento Host di Stampa"
 
-#: src/libslic3r/PrintConfig.cpp:1621
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:46
+msgid "Seam painting"
+msgstr "Pittura giunzione"
+
+#: src/libslic3r/PrintConfig.cpp:1729
 msgid "Seam position"
 msgstr "Posizione giunzioni"
 
-#: src/libslic3r/PrintConfig.cpp:1642
+#: src/libslic3r/PrintConfig.cpp:1750
 msgid "Seam preferred direction"
 msgstr "Direzione preferita giunzione"
 
-#: src/libslic3r/PrintConfig.cpp:1651
+#: src/libslic3r/PrintConfig.cpp:1759
 msgid "Seam preferred direction jitter"
 msgstr "Direzione preferita giunzione jitter"
 
+#: src/slic3r/GUI/MainFrame.cpp:1207
+msgid "Searc&h"
+msgstr "Cerca"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4957
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 src/slic3r/GUI/Search.cpp:426
+msgid "Search"
+msgstr "Cerca"
+
+#: src/slic3r/GUI/ImGuiWrapper.cpp:803 src/slic3r/GUI/Search.cpp:460
+msgid "Search in English"
+msgstr "Cerca in inglese"
+
+#: src/slic3r/GUI/MainFrame.cpp:1216
+msgid "Search in settings"
+msgstr "Cerca nelle impostazioni"
+
+#: src/slic3r/GUI/Tab.cpp:222
+msgid "Search in settings [%1%]"
+msgstr "Cerca nelle impostazioni [%1%]"
+
 #: src/slic3r/GUI/BonjourDialog.cpp:218
 msgid "Searching for devices"
 msgstr "Ricerca dispositivi"
 
-#: src/slic3r/GUI/Plater.cpp:2858
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:41
 msgid "Searching for optimal orientation"
 msgstr "Ricerca orientamento ottimale"
 
-#: src/slic3r/GUI/GUI_App.cpp:1103
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "See more."
+msgstr "Vedi altro."
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "See Releases page."
+msgstr "Vedi la pagina dei rilasci."
+
+#: src/slic3r/GUI/GUI_App.cpp:1895
 msgid "Select a gcode file:"
 msgstr "Seleziona un file gcode:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:121
 msgid "Select all objects"
 msgstr "Seleziona tutti gli oggetti"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1370
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217
 msgid "Select all points"
 msgstr "Seleziona tutti i punti"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1976
+#: src/slic3r/GUI/ConfigWizard.cpp:2487
 msgid "Select all standard printers"
 msgstr "Seleziona tutte le stampanti standard"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
 msgid "Select by rectangle"
 msgstr "Seleziona con rettangolo"
 
-#: src/slic3r/GUI/MainFrame.cpp:944 src/slic3r/GUI/MainFrame.cpp:1006
+#: src/slic3r/GUI/MainFrame.cpp:1645 src/slic3r/GUI/MainFrame.cpp:1707
 msgid "Select configuration to load:"
 msgstr "Seleziona configurazione da caricare:"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:82
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:88
 msgid "Select coordinate space, in which the transformation will be performed."
 msgstr "Seleziona le coordinate spaziali in cui verrà eseguita la trasformazione."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3971
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4458
 msgid "Select extruder number:"
 msgstr "Seleziona l'estrusore numero:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
 msgid "Select Filament Settings Tab"
 msgstr "Attiva Scheda impostazioni di Filamento"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
 msgid "Select Plater Tab"
 msgstr "Seleziona scheda piano"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
 msgid "Select Print Settings Tab"
 msgstr "Attiva Scheda Impostazioni di Stampa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:139
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:135
 msgid "Select Printer Settings Tab"
 msgstr "Attiva Scheda Impostazioni Stampante"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1265
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1396
 msgid "Select showing settings"
 msgstr "Seleziona le impostazioni mostrate"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Select the language"
 msgstr "Seleziona la lingua"
 
-#: src/slic3r/GUI/Tab.cpp:57
+#: src/slic3r/GUI/Tab.cpp:108
 msgid "Select the print profiles this profile is compatible with."
 msgstr "Seleziona i profili di stampa compatibili con questo profilo."
 
-#: src/slic3r/GUI/Tab.cpp:51
+#: src/slic3r/GUI/Tab.cpp:102
 msgid "Select the printers this profile is compatible with."
 msgstr "Seleziona le stampanti compatibili con questo profilo."
 
-#: src/slic3r/GUI/MainFrame.cpp:889
+#: src/slic3r/GUI/MainFrame.cpp:1590
 msgid "Select the STL file to repair:"
 msgstr "Seleziona il file STL da riparare:"
 
-#: src/slic3r/GUI/Preferences.cpp:237
+#: src/slic3r/GUI/Preferences.cpp:391
 msgid "Select toolbar icon size in respect to the default one."
 msgstr "Seleziona la dimensione delle icone della barra degli strumenti rispetto a quella predefinita."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Select type of part"
 msgstr "Seleziona il tipo di parte"
 
-#: src/slic3r/GUI/Plater.cpp:638
+#: src/slic3r/GUI/Plater.cpp:504
 msgid "Select what kind of pad do you need"
 msgstr "Seleziona il tipo di Pad richiesto"
 
-#: src/slic3r/GUI/Plater.cpp:498
+#: src/slic3r/GUI/Plater.cpp:364
 msgid "Select what kind of support do you need"
 msgstr "Seleziona il tipo di supporto richiesto"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1917
-msgid "Select YES if you want to delete all saved tool changes, \nNO if you want all tool changes switch to color changes, \nor CANCEL to leave it unchanged."
-msgstr "Seleziona SI se vuoi cancellare tutti i cambi attrezzo salvati,\nNO se vuoi che tutti i cambi attrezzo passino a cambi colore,\no ANNULLA per lasciarlo invariato."
+#: src/slic3r/GUI/DoubleSlider.cpp:2135
+msgid ""
+"Select YES if you want to delete all saved tool changes, \n"
+"NO if you want all tool changes switch to color changes, \n"
+"or CANCEL to leave it unchanged."
+msgstr ""
+"Seleziona SI se vuoi cancellare tutti i cambi attrezzo salvati,\n"
+"NO se vuoi che tutti i cambi attrezzo passino a cambi colore,\n"
+"o ANNULLA per lasciarlo invariato."
 
-#: src/slic3r/GUI/Selection.cpp:146
+#: src/slic3r/GUI/Selection.cpp:191
 msgid "Selection-Add"
 msgstr "Selezione-Aggiungi"
 
-#: src/slic3r/GUI/Selection.cpp:376
+#: src/slic3r/GUI/Selection.cpp:421
 msgid "Selection-Add All"
 msgstr "Selezione-Aggiungi tutti"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3299
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3762
 msgid "Selection-Add from list"
 msgstr "Aggiungi selezione da elenco"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6598
+#: src/slic3r/GUI/GLCanvas3D.cpp:7193
 msgid "Selection-Add from rectangle"
 msgstr "Aggiungi Selezione da rettangolo"
 
-#: src/slic3r/GUI/Selection.cpp:256
+#: src/slic3r/GUI/Selection.cpp:301
 msgid "Selection-Add Instance"
 msgstr "Selezione-Aggiungi istanza"
 
-#: src/slic3r/GUI/Selection.cpp:219
+#: src/slic3r/GUI/Selection.cpp:264
 msgid "Selection-Add Object"
 msgstr "Selezione-Aggiungi Oggetto"
 
-#: src/slic3r/GUI/Selection.cpp:187
+#: src/slic3r/GUI/Selection.cpp:232
 msgid "Selection-Remove"
 msgstr "Selezione-Rimuovi"
 
-#: src/slic3r/GUI/Selection.cpp:402
+#: src/slic3r/GUI/Selection.cpp:447
 msgid "Selection-Remove All"
 msgstr "Selezione-Rimuovi tutti"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3291
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3754
 msgid "Selection-Remove from list"
 msgstr "Rimozione Selezione dall'elenco"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6617
+#: src/slic3r/GUI/GLCanvas3D.cpp:7212
 msgid "Selection-Remove from rectangle"
 msgstr "Rimuovi selezione da rettangolo"
 
-#: src/slic3r/GUI/Selection.cpp:275
+#: src/slic3r/GUI/Selection.cpp:320
 msgid "Selection-Remove Instance"
 msgstr "Selezione-Rimuovi istanza"
 
-#: src/slic3r/GUI/Selection.cpp:238
+#: src/slic3r/GUI/Selection.cpp:283
 msgid "Selection-Remove Object"
 msgstr "Selezione-Rimuovi oggetto"
 
-#: src/slic3r/GUI/MainFrame.cpp:566
+#: src/slic3r/GUI/MainFrame.cpp:1172
 msgid "Selects all objects"
 msgstr "Seleziona tutti gli oggetti"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send G-code"
 msgstr "Invia G-code"
 
@@ -6427,29 +7594,29 @@ msgstr "Invia G-code"
 msgid "Send G-Code to printer host"
 msgstr "Invia G-code all’host stampante"
 
-#: src/slic3r/GUI/MainFrame.cpp:481
+#: src/slic3r/GUI/MainFrame.cpp:1072
 msgid "Send to print current plate as G-code"
 msgstr "Manda alla stampante il piano corrente come G-Code"
 
-#: src/slic3r/GUI/Plater.cpp:878 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/Plater.cpp:753 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send to printer"
 msgstr "Manda alla stampante"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1305
+#: src/slic3r/GUI/GLCanvas3D.cpp:1312
 msgid "Seq."
 msgstr "Seq."
 
-#: src/slic3r/GUI/Tab.cpp:1231
+#: src/slic3r/GUI/Tab.cpp:1561
 msgid "Sequential printing"
 msgstr "Stampa sequenziale"
 
-#: src/slic3r/GUI/Tab.cpp:1901 src/libslic3r/PrintConfig.cpp:1661
-msgid "Serial port"
-msgstr "Porta seriale"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
+msgid "Sequential Slider"
+msgstr "Slider Sequenziale"
 
-#: src/libslic3r/PrintConfig.cpp:1669
-msgid "Serial port speed"
-msgstr "Velocità porta seriale"
+#: src/slic3r/GUI/Preferences.cpp:230
+msgid "Sequential slider applied only to top layer"
+msgstr "Cursore sequenziale applicato solo sullo strato superiore"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:807
 msgid "Serial port:"
@@ -6459,17 +7626,16 @@ msgstr "Porta seriale:"
 msgid "Service name"
 msgstr "Nome servizio"
 
-#: src/slic3r/GUI/Tab.cpp:1802 src/slic3r/GUI/Tab.cpp:2046
-#: src/slic3r/GUI/Tab.cpp:3176
+#: src/slic3r/GUI/Tab.cpp:3509 src/slic3r/GUI/Tab.cpp:3588
 msgid "Set"
 msgstr "Imposta"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1728
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Object"
 msgstr "Imposta come Oggetto Separato"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Objects"
 msgstr "Imposta come Oggetti Separati"
 
@@ -6477,7 +7643,7 @@ msgstr "Imposta come Oggetti Separati"
 msgid "Set extruder change for every"
 msgstr "Imposta il cambio estrusore per ogni"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Set extruder for selected items"
 msgstr "Imposta estrusore per gli elementi selezionati"
 
@@ -6485,7 +7651,7 @@ msgstr "Imposta estrusore per gli elementi selezionati"
 msgid "Set extruder sequence"
 msgstr "Imposta sequenza estrusore"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1532
+#: src/slic3r/GUI/DoubleSlider.cpp:1728
 msgid "Set extruder sequence for the entire print"
 msgstr "Imposta sequenza estrusore per l'intera stampa"
 
@@ -6493,84 +7659,84 @@ msgstr "Imposta sequenza estrusore per l'intera stampa"
 msgid "Set extruder(tool) sequence"
 msgstr "Imposta sequenza estrusore(attrezzo)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
 msgid "Set lower thumb to current slider thumb"
 msgstr "Imposta il cursore inferiore alla barra di scorrimento attuale"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:297
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305
 msgid "Set Mirror"
 msgstr "Imposta specchio"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Set number of instances"
 msgstr "Imposta numero di istanze"
 
-#: src/slic3r/GUI/Plater.cpp:4756
-#, possible-c-format
+#: src/slic3r/GUI/Plater.cpp:4860
+#, c-format
 msgid "Set numbers of copies to %d"
 msgstr "Imposta il numero di copie a %d"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:781
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:828
 msgid "Set Orientation"
 msgstr "Imposta orientamento"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:750
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:797
 msgid "Set Position"
 msgstr "Imposta posizione"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Printable"
 msgstr "Imposta stampabile"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Printable Instance"
 msgstr "Imposta Istanza Stampabile"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:846
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:893
 msgid "Set Scale"
 msgstr "Imposta scala"
 
-#: src/libslic3r/PrintConfig.cpp:2393
+#: src/libslic3r/PrintConfig.cpp:2536
 msgid "Set the actual LCD display orientation inside the SLA printer. Portrait mode will flip the meaning of display width and height parameters and the output images will be rotated by 90 degrees."
 msgstr "Imposta l'orientamento effettivo del display LCD nella stampante SLA. La modalità Ritratto invertirà i valori di altezza e larghezza del display,  e le immagini di output saranno ruotate di 90 gradi."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:932
+#: src/slic3r/GUI/ConfigWizard.cpp:1298
 msgid "Set the shape of your printer's bed."
 msgstr "Imposta la dimensione del piano della stampante."
 
-#: src/libslic3r/PrintConfig.cpp:556
+#: src/libslic3r/PrintConfig.cpp:592
 msgid "Set this to a non-zero value to allow a manual extrusion width. If left to zero, Slic3r derives extrusion widths from the nozzle diameter (see the tooltips for perimeter extrusion width, infill extrusion width etc). If expressed as percentage (for example: 230%), it will be computed over layer height."
 msgstr "Imposta questo valore diverso da zero per permettere la larghezza estrusione manuale. Se lasciato a zero, Slic3r ricava la larghezza d'estrusione dal diametro dell'ugello (vedi il suggerimento per la larghezza di estrusione perimetro,larghezza estrusione riempimento ecc.). Se espresso in percentuale (ad esempio 230%), sarà calcolato sull'altezza del layer."
 
-#: src/libslic3r/PrintConfig.cpp:448
+#: src/libslic3r/PrintConfig.cpp:484
 msgid "Set this to a non-zero value to set a manual extrusion width for external perimeters. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%), it will be computed over layer height."
 msgstr "Imposta questo valore diverso da zero per impostare una larghezza d'estrusione manuale per i perimetri esterni. Se lasciato a zero, verrà utilizzata la larghezza predefinita se impostata; diversamente verrà utilizzato il valore 1.125 x il diametro dell'ugello. Se espresso in percentuale (per esempio 200%), sarà calcolato sull'altezza del layer."
 
-#: src/libslic3r/PrintConfig.cpp:878
+#: src/libslic3r/PrintConfig.cpp:920
 msgid "Set this to a non-zero value to set a manual extrusion width for first layer. You can use this to force fatter extrudates for better adhesion. If expressed as percentage (for example 120%) it will be computed over first layer height. If set to zero, it will use the default extrusion width."
 msgstr "Imposta questo valore diverso da zero per impostare la larghezza di estrusione manuale per il primo layer. Puoi usarlo per forzare un'estrusione più grossa per avere un'adesione migliore. Se espresso in percentuale (per esempio 120%) sarà calcolato sull'altezza del primo layer. Se impostato a zero, sarà utilizzata la larghezza di estrusione predefinita."
 
-#: src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:1873
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Imposta questo valore diverso da zero per impostare una larghezza d'estrusione manuale per il riempimento delle superfici solide. Se lasciato a zero, verrà usata la larghezza d'estrusione predefinita, altrimenti verrà utilizzato il valore 1.125 x il diametro dell'ugello. Se espresso in percentuale (per esempio 90%) verrà calcolato sull'altezza del layer."
 
-#: src/libslic3r/PrintConfig.cpp:2107
+#: src/libslic3r/PrintConfig.cpp:2250
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Imposta questo valore diverso da zero per impostare una larghezza d'estrusione manuale per il riempimento delle superfici superiori. Dovresti scegliere un'estrusione più sottile per riempire gli spazi stretti ed ottenere una finitura più liscia. Se lasciato a zero, verrà usata la larghezza d'estrusione predefinita, altrimenti verrà utilizzato il valore 1.125 x il diametro dell'ugello. Se espresso in percentuale (per esempio 90%) verrà calcolato sull'altezza del layer."
 
-#: src/libslic3r/PrintConfig.cpp:1011
+#: src/libslic3r/PrintConfig.cpp:1055
 msgid "Set this to a non-zero value to set a manual extrusion width for infill. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. You may want to use fatter extrudates to speed up the infill and make your parts stronger. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Imposta questo valore diverso da zero per impostare una larghezza d'estrusione manuale per il riempimento. Se lasciato a zero, verrà usata la larghezza d'estrusione predefinita, altrimenti verrà utilizzato il valore 1.125 x il diametro dell'ugello. Dovresti usare un estrusione più grossa per velocizzare la stampa del riempimento e rendere le tue parti più robuste. Se espresso in percentuale (per esempio 90%) verrà calcolato sull'altezza del layer."
 
-#: src/libslic3r/PrintConfig.cpp:1419
+#: src/libslic3r/PrintConfig.cpp:1527
 msgid "Set this to a non-zero value to set a manual extrusion width for perimeters. You may want to use thinner extrudates to get more accurate surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%) it will be computed over layer height."
 msgstr "Imposta questo valore diverso da zero per impostare una larghezza d'estrusione manuale per i perimetri. Dovresti scegliere un'estrusione più sottile per ottenere superfici più precise. Se lasciato a zero, verrà usata la larghezza d'estrusione predefinita, altrimenti verrà utilizzato il valore 1.125 x il diametro dell'ugello. Se espresso in percentuale (per esempio 200%) verrà calcolato sull'altezza del layer."
 
-#: src/libslic3r/PrintConfig.cpp:1948
+#: src/libslic3r/PrintConfig.cpp:2090
 msgid "Set this to a non-zero value to set a manual extrusion width for support material. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
 msgstr "Imposta questo valore diverso da zero per impostare una larghezza d'estrusione manuale per il supporto. Se lasciato a zero, verrà usata la larghezza d'estrusione predefinita., altrimenti verrà utilizzato il valore del diametro dell'ugello. Se espresso in percentuale (per esempio 90%) verrà calcolato sull'altezza del layer."
 
-#: src/libslic3r/PrintConfig.cpp:512
+#: src/libslic3r/PrintConfig.cpp:548
 msgid "Set this to the clearance radius around your extruder. If the extruder is not centered, choose the largest value for safety. This setting is used to check for collisions and to display the graphical preview in the plater."
 msgstr "Imposta il raggio di spazio attorno all'estrusore. Se l'estrusore non è centrato, scegli il valore più grande per sicurezza. Questa impostazione è usata per controllare le collisioni e per mostrare l'anteprima grafica nel piano."
 
@@ -6578,83 +7744,98 @@ msgstr "Imposta il raggio di spazio attorno all'estrusore. Se l'estrusore non è
 msgid "Set this to the maximum height that can be reached by your extruder while printing."
 msgstr "Impostate alla massima altezza che può essere raggiunta dal vostro estrusore durante la stampa."
 
-#: src/libslic3r/PrintConfig.cpp:501
+#: src/libslic3r/PrintConfig.cpp:537
 msgid "Set this to the vertical distance between your nozzle tip and (usually) the X carriage rods. In other words, this is the height of the clearance cylinder around your extruder, and it represents the maximum depth the extruder can peek before colliding with other printed objects."
 msgstr "Imposta la distanza verticale tra la punta dell'ugello e (solitamente) le barre del carrello X. In altre parole, questa è l'altezza dello spazio cilindrico attorno l'estrusore, e indica la profondità massima che l'estrusore può affacciarsi prima di sbattere con altri oggetti stampati."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Unprintable"
 msgstr "Imposta non stampabile"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Unprintable Instance"
 msgstr "Imposta Istanza non stampabile"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
 msgid "Set upper thumb to current slider thumb"
 msgstr "Imposta il cursore superiore alla barra di scorrimento attuale"
 
-#: src/libslic3r/PrintConfig.cpp:3509
-msgid "Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:trace\nFor example. loglevel=2 logs fatal, error and warning level messages."
-msgstr "Imposta la sensibilità di log. 0:fatale, 1:errore, 2:avviso, 3:informazioni, 4:debug, 5:traccia\nPer esempio. loglevel=2 registra messaggi fatali, di errore e di avviso."
+#: src/libslic3r/PrintConfig.cpp:3714
+msgid ""
+"Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:trace\n"
+"For example. loglevel=2 logs fatal, error and warning level messages."
+msgstr ""
+"Imposta la sensibilità di log. 0:fatale, 1:errore, 2:avviso, 3:informazioni, 4:debug, 5:traccia\n"
+"Per esempio. loglevel=2 registra messaggi fatali, di errore e di avviso."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:155
+#: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/MainFrame.cpp:1969
 msgid "Settings"
 msgstr "Impostazioni"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Settings for height range"
 msgstr "Impostazioni per intervallo altezza"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:162
+#: src/slic3r/GUI/Preferences.cpp:431
+msgid "Settings in non-modal window"
+msgstr "Impostazioni nella finestra non modale"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:161
 msgid "Shall I adjust those settings for supports?"
 msgstr "Vuoi che regoli queste impostazioni per i supporti?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:89
+#: src/slic3r/GUI/ConfigManipulation.cpp:88
 msgid "Shall I adjust those settings in order to enable Spiral Vase?"
 msgstr "Vuoi che modifichi queste impostazioni per poter attivare il Vaso a Spirale?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:118
 msgid "Shall I adjust those settings in order to enable the Wipe Tower?"
 msgstr "Vuoi che modifichi queste impostazioni per poter attivare la Torre di Spurgo?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/ConfigManipulation.cpp:209
 msgid "Shall I switch to rectilinear fill pattern?"
 msgstr "Devo passare alla trama di riempimento rettilinea?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:139
+#: src/slic3r/GUI/ConfigManipulation.cpp:138
 msgid "Shall I synchronize support layers in order to enable the Wipe Tower?"
 msgstr "Devo sincronizzare i supporti layer in modo da poter attivare la Torre di Spurgo?"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2059
+#: src/slic3r/GUI/BedShapeDialog.cpp:156 src/slic3r/GUI/BedShapeDialog.cpp:222
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2215
 msgid "Shape"
 msgstr "Forma"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:256
+#: src/slic3r/GUI/GUI_Preview.cpp:338 src/slic3r/GUI/GUI_Preview.cpp:1478
 msgid "Shells"
 msgstr "Gusci"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:249
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:33
+msgid "Shift + Left mouse button"
+msgstr "Shift + Tasto sinistro mouse"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:241
 msgid "Shift + Left mouse button:"
 msgstr "Shift + Tasto sinistro mouse:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:255
+#: src/slic3r/GUI/GLCanvas3D.cpp:245
 msgid "Shift + Right mouse button:"
 msgstr "Shift + Tasto destro mouse:"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:231
+#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:288
 msgid "Show"
 msgstr "Mostra"
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show &Configuration Folder"
 msgstr "Mostra Cartella &Configurazione"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show &labels"
 msgstr "Mostra &etichette"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
 msgid "Show about dialog"
 msgstr "Mostra la finestra di informazioni"
 
@@ -6662,543 +7843,593 @@ msgstr "Mostra la finestra di informazioni"
 msgid "Show advanced settings"
 msgstr "Mostra impostazioni avanzate"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:159
+#: src/slic3r/GUI/PrintHostDialogs.cpp:157
 msgid "Show error message"
 msgstr "Mostra messaggio d'errore"
 
-#: src/slic3r/GUI/Preferences.cpp:95
+#: src/slic3r/GUI/Preferences.cpp:112
 msgid "Show incompatible print and filament presets"
 msgstr "Mostra preset di stampa e di filamento incompatibili"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:145
 msgid "Show keyboard shortcuts list"
 msgstr "Mostra elenco scorciatoie di tastiera"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/GCodeViewer.cpp:2591
+msgid "Show normal mode"
+msgstr "Mostra modalità normale"
+
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show object/instance labels in 3D scene"
 msgstr "Mostra nella scena 3D le etichette dell'oggetto/istanza"
 
+#: src/slic3r/GUI/Preferences.cpp:213
+msgid "Show sidebar collapse/expand button"
+msgstr "Mostra il pulsante di riduci/espandi barra laterale"
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:377
 msgid "Show simplified settings"
 msgstr "Mostra impostazioni semplificate"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:52
+#: src/slic3r/GUI/Preferences.cpp:169 src/slic3r/GUI/Preferences.cpp:171
+msgid "Show splash screen"
+msgstr "Mostra splash screen"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2586
+msgid "Show stealth mode"
+msgstr "Mostra modalità silenziosa"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
 msgid "Show supports"
 msgstr "Mostra supporti"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "Show system information"
 msgstr "Mostra informazioni di sistema"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "Show the 3D editing view"
 msgstr "Mostra la Vista modifica 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Show the 3D slices preview"
 msgstr "Mostra anteprima slice 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:617
+#: src/slic3r/GUI/MainFrame.cpp:1224
 msgid "Show the filament settings"
 msgstr "Mostra impostazioni filamento"
 
-#: src/libslic3r/PrintConfig.cpp:3372
+#: src/libslic3r/PrintConfig.cpp:3571
 msgid "Show the full list of print/G-code configuration options."
 msgstr "Mostra l'elenco completo delle opzioni di configurazione stampa/G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3377
+#: src/libslic3r/PrintConfig.cpp:3576
 msgid "Show the full list of SLA print configuration options."
 msgstr "Mostra la lista completa delle opzioni di configurazione di stampa SLA."
 
-#: src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/MainFrame.cpp:941 src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Show the list of the keyboard shortcuts"
 msgstr "Mostra l'elenco delle scorciatoie di tastiera"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "Show the plater"
 msgstr "Mostra il piano"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "Show the print settings"
 msgstr "Mostra impostazioni di stampa"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Show the printer settings"
 msgstr "Mostra impostazioni della stampante"
 
-#: src/libslic3r/PrintConfig.cpp:3366
+#: src/libslic3r/PrintConfig.cpp:3565
 msgid "Show this help."
 msgstr "Mostra questo aiuto."
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show user configuration folder (datadir)"
 msgstr "Mostra cartella configurazione utente (datadir)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:185
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
 msgid "Show/Hide 3Dconnexion devices settings dialog"
 msgstr "Mostra/Nascondi finestra delle impostazioni dei dispositivi 3Dconnexion"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
-msgid "Show/Hide Legend"
-msgstr "Mostra/Nascondi Legenda"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+msgid "Show/Hide Legend & Estimated printing time"
+msgstr "Mostra/Nascondi Legenda & Stima del tempo di stampa"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:146
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
 msgid "Show/Hide object/instance labels"
 msgstr "Mostra/Nascondi etichette dell'oggetto/istanza"
 
-#: src/slic3r/GUI/GUI_App.cpp:813 src/slic3r/GUI/wxExtensions.cpp:753
+#: src/slic3r/GUI/GUI_App.cpp:1504 src/slic3r/GUI/wxExtensions.cpp:673
 msgid "Simple"
 msgstr "Semplice"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:820
+#: src/slic3r/GUI/ConfigWizard.cpp:1179
 msgid "Simple mode"
 msgstr "Modalità Semplice"
 
-#: src/slic3r/GUI/GUI_App.cpp:813
+#: src/slic3r/GUI/GUI_App.cpp:1504
 msgid "Simple View Mode"
 msgstr "Modalità di visualizzazione semplice"
 
-#: src/slic3r/GUI/Tab.cpp:2298 src/slic3r/GUI/Tab.cpp:2306
+#: src/slic3r/GUI/Tab.cpp:2467 src/slic3r/GUI/Tab.cpp:2475
 msgid "Single extruder MM setup"
 msgstr "Setup Estrusore singolo MM"
 
-#: src/libslic3r/PrintConfig.cpp:1845
+#: src/libslic3r/PrintConfig.cpp:1987
 msgid "Single Extruder Multi Material"
 msgstr "Estrusore singolo Multi Material"
 
-#: src/slic3r/GUI/Tab.cpp:1867
-msgid "Single Extruder Multi Material is selected, \nand all extruders must have the same diameter.\nDo you want to change the diameter for all extruders to first extruder nozzle diameter value?"
-msgstr "Materiale multiplo a singolo estrusore selezionato,\ntutti gli estrusori devono avere lo stesso diametro.\nVuoi modificare il diametro di tutti gli estrusori al valore del diametro dell'ugello del primo estrusore?"
+#: src/slic3r/GUI/Tab.cpp:2101
+msgid ""
+"Single Extruder Multi Material is selected, \n"
+"and all extruders must have the same diameter.\n"
+"Do you want to change the diameter for all extruders to first extruder nozzle diameter value?"
+msgstr ""
+"Materiale multiplo a singolo estrusore selezionato,\n"
+"tutti gli estrusori devono avere lo stesso diametro.\n"
+"Vuoi modificare il diametro di tutti gli estrusori al valore del diametro dell'ugello del primo estrusore?"
 
-#: src/slic3r/GUI/Tab.cpp:2307
+#: src/slic3r/GUI/Tab.cpp:2476
 msgid "Single extruder multimaterial parameters"
 msgstr "Parametri  estrusore singolo materiale multiplo"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:77
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:160
-#: src/slic3r/GUI/Tab.cpp:2324
+#: src/slic3r/GUI/Preferences.cpp:120 src/libslic3r/PrintConfig.cpp:3689
+msgid "Single instance mode"
+msgstr "Modalità a istanza singola"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:93
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:240 src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:2493
 msgid "Size"
 msgstr "Dimensioni"
 
-#: src/slic3r/GUI/Tab.cpp:1797 src/slic3r/GUI/Tab.cpp:2041
+#: src/slic3r/GUI/Tab.cpp:2059 src/slic3r/GUI/Tab.cpp:2241
 msgid "Size and coordinates"
 msgstr "Dimensione e coordinate"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:78
+#: src/slic3r/GUI/BedShapeDialog.cpp:110
 msgid "Size in X and Y of the rectangular plate."
 msgstr "Dimensioni X e Y del piano rettangolare."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:245 src/slic3r/GUI/Tab.cpp:1111
-#: src/libslic3r/ExtrusionEntity.cpp:318
+#: src/slic3r/GUI/GUI_Preview.cpp:310 src/slic3r/GUI/Tab.cpp:1439
+#: src/libslic3r/ExtrusionEntity.cpp:323 src/libslic3r/ExtrusionEntity.cpp:354
 msgid "Skirt"
 msgstr "Skirt"
 
-#: src/slic3r/GUI/Tab.cpp:1110
+#: src/slic3r/GUI/Tab.cpp:1438
 msgid "Skirt and brim"
 msgstr "Skirt e brim"
 
-#: src/libslic3r/PrintConfig.cpp:1687
+#: src/libslic3r/PrintConfig.cpp:1795
 msgid "Skirt height"
 msgstr "Altezza skirt"
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/libslic3r/PrintConfig.cpp:1811
 msgid "Skirt Loops"
 msgstr "Giri skirt"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1334
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1181
 msgid "SLA gizmo keyboard shortcuts"
 msgstr "Scorciatoie di tastiera gizmo SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1058
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:924
 msgid "SLA gizmo turned off"
 msgstr "Gizmo SLA disattivato"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1017
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:897
 msgid "SLA gizmo turned on"
 msgstr "Gizmo SLA attivato"
 
-#: src/slic3r/GUI/Plater.cpp:818 src/slic3r/GUI/Preset.cpp:1524
+#: src/slic3r/GUI/Plater.cpp:693 src/libslic3r/Preset.cpp:1303
 msgid "SLA material"
 msgstr "Materiale SLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Material Profiles Selection"
 msgstr "Selezione Profili Materiale SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2470 src/libslic3r/PrintConfig.cpp:2471
+#: src/libslic3r/PrintConfig.cpp:2613 src/libslic3r/PrintConfig.cpp:2614
 msgid "SLA material type"
 msgstr "Tipo materiale SLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Materials"
 msgstr "Materiali SLA"
 
-#: src/slic3r/GUI/Preset.cpp:1523
+#: src/libslic3r/Preset.cpp:1302
 msgid "SLA print"
 msgstr "Stampa SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2578
+#: src/libslic3r/PrintConfig.cpp:2721
 msgid "SLA print material notes"
 msgstr "Note sul materiale di stampa SLA"
 
-#: src/slic3r/GUI/Plater.cpp:817
+#: src/slic3r/GUI/Plater.cpp:692
 msgid "SLA print settings"
 msgstr "Impostazioni di stampa SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:996
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:869
 msgid "SLA Support Points"
 msgstr "Punti di Supporto SLA"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:687
-msgid "SLA supports outside the print area were detected"
-msgstr "Sono stati rilevati supporti SLA al di fuori dell'area di stampa"
+#: src/slic3r/GUI/GLCanvas3D.cpp:635
+msgid "SLA supports outside the print area were detected."
+msgstr "Sono stati rilevati supporti SLA al di fuori dell'area di stampa ."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1530
+#: src/slic3r/GUI/ConfigWizard.cpp:1931
 msgid "SLA Technology Printers"
 msgstr "Stampanti con tecnologia SLA"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Slab"
 msgstr "Lastra"
 
-#: src/libslic3r/PrintConfig.cpp:1333
+#: src/libslic3r/PrintConfig.cpp:1441
 msgid "Slic3r can upload G-code files to a printer host. This field must contain the kind of the host."
 msgstr "Slic3r può caricare il file G-code ad un host stampante. Questo campo deve contenere il tipo di host."
 
-#: src/libslic3r/PrintConfig.cpp:105
+#: src/libslic3r/PrintConfig.cpp:107
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
 msgstr "Slic3r può caricare i file G-code su un host di stampa. Questo campo deve contenere la chiave API o la password richiesta per l'autenticazione."
 
-#: src/libslic3r/PrintConfig.cpp:98
+#: src/libslic3r/PrintConfig.cpp:100
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
 msgstr "Slic3r può caricare i file G-code su un host della stampante. Questo campo dovrebbe contenere il nome host, l'indirizzo IP o URL dell'istanza dell'host della stampante."
 
-#: src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1407
 msgid "Slic3r will not scale speed down below this speed."
 msgstr "Slic3r non rallenterà la velocità al di sotto di questa."
 
-#: src/libslic3r/PrintConfig.cpp:3359
+#: src/libslic3r/PrintConfig.cpp:3558
 msgid "Slice"
 msgstr "Processa"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Slice a file into a G-code"
 msgstr "Processa un file in G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Slice a file into a G-code, save as"
 msgstr "Processa un file in G-code, salva come"
 
-#: src/libslic3r/PrintConfig.cpp:87
+#: src/libslic3r/PrintConfig.cpp:89
 msgid "Slice gap closing radius"
 msgstr "Gap closing radius per slicing"
 
-#: src/slic3r/GUI/Plater.cpp:892 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5110
+#: src/slic3r/GUI/Plater.cpp:767 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5237
 msgid "Slice now"
 msgstr "Processa ora"
 
-#: src/libslic3r/PrintConfig.cpp:3333
+#: src/libslic3r/PrintConfig.cpp:3526
 msgid "Slice the model and export SLA printing layers as PNG."
 msgstr "Effettua lo slice del modello ed esporta i layer di stampa SLA come PNG."
 
-#: src/libslic3r/PrintConfig.cpp:3354
+#: src/libslic3r/PrintConfig.cpp:3547
 msgid "Slice the model and export toolpaths as G-code."
 msgstr "Effettua slice del modello ed esporta il percorso come G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3360
+#: src/libslic3r/PrintConfig.cpp:3559
 msgid "Slice the model as FFF or SLA based on the printer_technology configuration value."
 msgstr "Effettua lo slice del modello come FFF o SLA in base al valore di configurazione di printer_technology."
 
-#: src/slic3r/GUI/Plater.cpp:216
+#: src/slic3r/GUI/Plater.cpp:222
 msgid "Sliced Info"
 msgstr "Informazioni processo"
 
-#: src/slic3r/GUI/MainFrame.cpp:847 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5107 src/slic3r/GUI/Tab.cpp:1221
-#: src/slic3r/GUI/Tab.cpp:3662
+#: src/slic3r/GUI/MainFrame.cpp:1548 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5234 src/slic3r/GUI/Tab.cpp:1551
+#: src/slic3r/GUI/Tab.cpp:4081
 msgid "Slicing"
 msgstr "Slicing"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:134
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:184
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:170
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:219
 msgid "Slicing complete"
 msgstr "Slicing completato"
 
-#: src/libslic3r/SLAPrint.cpp:760
+#: src/libslic3r/SLAPrint.cpp:780
 msgid "Slicing done"
 msgstr "Slicing completato"
 
-#: src/slic3r/GUI/MainFrame.cpp:874
+#: src/slic3r/GUI/MainFrame.cpp:1575
 msgid "Slicing Done!"
 msgstr "Slicing Completato!"
 
-#: src/libslic3r/SLAPrintSteps.cpp:245
+#: src/slic3r/GUI/NotificationManager.cpp:751
+msgid "Slicing finished."
+msgstr "Slicing completato."
+
+#: src/libslic3r/SLAPrintSteps.cpp:247
 msgid "Slicing had to be stopped due to an internal error: Inconsistent slice index."
 msgstr "Lo slicing è stato interrotto a causa di un errore interno: Indice di slice inconsistente."
 
-#: src/libslic3r/SLAPrintSteps.cpp:45
+#: src/libslic3r/SLAPrintSteps.cpp:46
 msgid "Slicing model"
-msgstr "Slice modello"
+msgstr "Slicing del modello"
 
-#: src/libslic3r/SLAPrintSteps.cpp:49
+#: src/libslic3r/SLAPrintSteps.cpp:50
 msgid "Slicing supports"
 msgstr "Supporti di Slicing"
 
-#: src/libslic3r/PrintConfig.cpp:2414
+#: src/libslic3r/PrintConfig.cpp:2557
 msgid "Slow"
 msgstr "Lento"
 
-#: src/libslic3r/PrintConfig.cpp:1705
+#: src/libslic3r/PrintConfig.cpp:1820
 msgid "Slow down if layer print time is below"
-msgstr "Rallenta se il tempo di stampa del layer è inferiore"
+msgstr "Rallenta se il tempo di stampa del layer è inferiore a"
 
-#: src/libslic3r/PrintConfig.cpp:2415
+#: src/libslic3r/PrintConfig.cpp:2558
 msgid "Slow tilt"
 msgstr "Inclinazione lenta"
 
-#: src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1830
 msgid "Small perimeters"
 msgstr "Perimetri piccoli"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:288
+#: src/libslic3r/PrintConfig.cpp:2801
+msgid "Small pillar diameter percent"
+msgstr "Percentuale di diametro del pilastro piccolo"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:274
 msgid "Smooth"
 msgstr "Leviga"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:258
+#: src/slic3r/GUI/GLCanvas3D.cpp:247
 msgid "Smoothing"
 msgstr "Levigatura"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Snapshot name"
 msgstr "Nome istantanea"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Software &Releases"
 msgstr "Ve&rsioni Software"
 
-#: src/slic3r/GUI/PresetHints.cpp:184
+#: src/slic3r/GUI/PresetHints.cpp:183
 msgid "solid infill"
 msgstr "riempimento solido"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/ExtrusionEntity.cpp:314
-#: src/libslic3r/PrintConfig.cpp:1756 src/libslic3r/PrintConfig.cpp:1767
+#: src/slic3r/GUI/GUI_Preview.cpp:305 src/libslic3r/ExtrusionEntity.cpp:318
+#: src/libslic3r/ExtrusionEntity.cpp:344 src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:1882
 msgid "Solid infill"
 msgstr "Riempimento solido"
 
-#: src/libslic3r/PrintConfig.cpp:1744
+#: src/libslic3r/PrintConfig.cpp:1859
 msgid "Solid infill every"
 msgstr "Riempimento solido ogni"
 
-#: src/libslic3r/PrintConfig.cpp:1736
+#: src/libslic3r/PrintConfig.cpp:1851
 msgid "Solid infill extruder"
 msgstr "Estrusore riempimento solido"
 
-#: src/libslic3r/PrintConfig.cpp:1727
+#: src/libslic3r/PrintConfig.cpp:1842
 msgid "Solid infill threshold area"
 msgstr "Area soglia riempimento solido"
 
-#: src/slic3r/GUI/Tab.cpp:1065 src/libslic3r/PrintConfig.cpp:1780
+#: src/slic3r/GUI/Tab.cpp:1387 src/libslic3r/PrintConfig.cpp:1895
 msgid "Solid layers"
 msgstr "Layer solidi"
 
-#: src/libslic3r/PrintConfig.cpp:754
+#: src/libslic3r/PrintConfig.cpp:790
 msgid "Soluble material"
 msgstr "Materiale solubile"
 
-#: src/libslic3r/PrintConfig.cpp:755
+#: src/libslic3r/PrintConfig.cpp:791
 msgid "Soluble material is most likely used for a soluble support."
 msgstr "Il materiale solubile è comunemente usato per un supporto solubile."
 
-#: src/libslic3r/PrintConfig.cpp:937
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:735
+msgid "Some fields are too long to fit. Right mouse click reveals the full text."
+msgstr "Alcuni campi sono troppo lunghi per adattarsi. Cliccando con il tasto destro del mouse si visualizza il testo completo."
+
+#: src/libslic3r/PrintConfig.cpp:981
 msgid "Some G/M-code commands, including temperature control and others, are not universal. Set this option to your printer's firmware to get a compatible output. The \"No extrusion\" flavor prevents PrusaSlicer from exporting any extrusion value at all."
 msgstr "Alcuni comandi G/M-code, incluso il controllo di temperatura e altri, non sono universali. Imposta questa opzione nel firmware della tua stampante per ottenere un output compatibile. La versione \"No extrusion\" evita che PrusaSlicer non esporti alcun valore."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:688
-msgid "Some objects are not visible"
-msgstr "Alcuni oggetti non sono visibili"
+#: src/slic3r/GUI/Plater.cpp:2309
+#, c-format
+msgid ""
+"Some object(s) in file %s looks like saved in inches.\n"
+"Should I consider them as a saved in inches and convert them?"
+msgstr ""
+"Alcuni oggetti nel file %s sembrano salvati in pollici.\n"
+"Devo considerarli come salvati in pollici e convertirli?"
 
-#: src/libslic3r/Print.cpp:1226
+#: src/slic3r/GUI/GLCanvas3D.cpp:636
+msgid "Some objects are not visible."
+msgstr "Alcuni oggetti non sono visibili."
+
+#: src/libslic3r/Print.cpp:1252
 msgid "Some objects are too close; your extruder will collide with them."
 msgstr "Alcuni oggetti sono troppo vicini; l'estrusore li colpirà."
 
-#: src/libslic3r/Print.cpp:1228
+#: src/libslic3r/Print.cpp:1254
 msgid "Some objects are too tall and cannot be printed without extruder collisions."
 msgstr "Alcuni oggetti sono troppo alti e non possono essere stampati senza essere colpiti dall'estrusore."
 
-#: src/libslic3r/PrintConfig.cpp:2824
+#: src/libslic3r/PrintConfig.cpp:2988
 msgid "Some objects can get along with a few smaller pads instead of a single big one. This parameter defines how far the center of two smaller pads should be. If theyare closer, they will get merged into one pad."
 msgstr "Per alcuni oggetti possono bastare pochi piccoli pad invece che un singolo pad grande. Questo parametro definisce quanto può essere lontano il centro di due pad. Se questi sono più vicini, si fonderanno in un unico pad."
 
-#: src/libslic3r/PrintConfig.cpp:2187
+#: src/libslic3r/PrintConfig.cpp:2330
 msgid "Some printers or printer setups may have difficulties printing with a variable layer height. Enabled by default."
 msgstr "Alcune stampanti o setup di stampanti possono riscontrare difficoltà a stampare con l'altezza layer variabile. Attivato come predefinito."
 
-#: src/libslic3r/PrintConfig.cpp:1984
+#: src/libslic3r/PrintConfig.cpp:2126
 msgid "Spacing between interface lines. Set zero to get a solid interface."
 msgstr "Spaziatura tra le linee di interfaccia. Imposta a zero per ottenere un'interfaccia solida."
 
-#: src/libslic3r/PrintConfig.cpp:2018
+#: src/libslic3r/PrintConfig.cpp:1155
+msgid "Spacing between ironing passes"
+msgstr "Spaziatura tra i passaggi di stiratura"
+
+#: src/libslic3r/PrintConfig.cpp:2160
 msgid "Spacing between support material lines."
 msgstr "Spaziatura tra le linee del materiale di supporto."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:616
-#: src/slic3r/GUI/GUI_Preview.cpp:224 src/slic3r/GUI/Tab.cpp:1145
-#: src/libslic3r/PrintConfig.cpp:235 src/libslic3r/PrintConfig.cpp:458
-#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1048
-#: src/libslic3r/PrintConfig.cpp:1431 src/libslic3r/PrintConfig.cpp:1668
-#: src/libslic3r/PrintConfig.cpp:1716 src/libslic3r/PrintConfig.cpp:1768
-#: src/libslic3r/PrintConfig.cpp:2118
+#: src/slic3r/GUI/GUI_ObjectList.cpp:96 src/slic3r/GUI/GUI_ObjectList.cpp:655
+#: src/slic3r/GUI/GUI_Preview.cpp:278 src/slic3r/GUI/Tab.cpp:1474
+#: src/libslic3r/PrintConfig.cpp:269 src/libslic3r/PrintConfig.cpp:494
+#: src/libslic3r/PrintConfig.cpp:963 src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1165 src/libslic3r/PrintConfig.cpp:1539
+#: src/libslic3r/PrintConfig.cpp:1776 src/libslic3r/PrintConfig.cpp:1831
+#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:2261
 msgid "Speed"
 msgstr "Velocità"
 
-#: src/libslic3r/PrintConfig.cpp:1670
-msgid "Speed (baud) of USB/serial port for printer connection."
-msgstr "Velocità (baud) USB/Seriale per la connessione stampante."
-
-#: src/libslic3r/GCode/PreviewData.cpp:351
+#: src/slic3r/GUI/GCodeViewer.cpp:2238 src/libslic3r/GCode/PreviewData.cpp:356
 msgid "Speed (mm/s)"
 msgstr "Velocità (mm/s)"
 
-#: src/libslic3r/PrintConfig.cpp:920
+#: src/libslic3r/PrintConfig.cpp:964
 msgid "Speed for filling small gaps using short zigzag moves. Keep this reasonably low to avoid too much shaking and resonance issues. Set zero to disable gaps filling."
 msgstr "Velocità per il riempimento degli spazi stretti utilizzando brevi movimenti a zig-zag. Mantieni questa velocità ragionevolmente bassa per evitare problemi di oscillazione e risonanza. Imposta a zero per disabilitare il riempimento degli spazi."
 
-#: src/slic3r/GUI/Tab.cpp:1158
+#: src/slic3r/GUI/Tab.cpp:1488
 msgid "Speed for non-print moves"
 msgstr "Velocità per i movimenti non di stampa"
 
-#: src/libslic3r/PrintConfig.cpp:1432
+#: src/libslic3r/PrintConfig.cpp:1540
 msgid "Speed for perimeters (contours, aka vertical shells). Set to zero for auto."
 msgstr "Velocità per i perimetri (contorni, conosciuti anche come gusci verticali). Imposta a zero per automatizzare."
 
-#: src/slic3r/GUI/Tab.cpp:1146
+#: src/slic3r/GUI/Tab.cpp:1475
 msgid "Speed for print moves"
 msgstr "Velocità per i movimenti di stampa"
 
-#: src/libslic3r/PrintConfig.cpp:236
+#: src/libslic3r/PrintConfig.cpp:270
 msgid "Speed for printing bridges."
 msgstr "Velocità di stampa Bridge."
 
-#: src/libslic3r/PrintConfig.cpp:1769
+#: src/libslic3r/PrintConfig.cpp:1884
 msgid "Speed for printing solid regions (top/bottom/internal horizontal shells). This can be expressed as a percentage (for example: 80%) over the default infill speed above. Set to zero for auto."
 msgstr "La velocità per le regioni di stampa solide (superiore/inferiore/gusci interni orizzontali). Questo valore può essere espresso in percentuale (per esempio: 80%) sulla velocità del riempimento predefinita qui sopra. Imposta a zero per automatizzare."
 
-#: src/libslic3r/PrintConfig.cpp:1993
+#: src/libslic3r/PrintConfig.cpp:2135
 msgid "Speed for printing support material interface layers. If expressed as percentage (for example 50%) it will be calculated over support material speed."
 msgstr "Velocità per la stampa dei layer di interfaccia del materiale di supporto. Se espresso in percentuale (per esempio 50%) sarà calcolato sulla velocità del materiale di supporto."
 
-#: src/libslic3r/PrintConfig.cpp:2027
+#: src/libslic3r/PrintConfig.cpp:2169
 msgid "Speed for printing support material."
 msgstr "Velocità per la stampa del materiale di supporto."
 
-#: src/libslic3r/PrintConfig.cpp:1049
+#: src/libslic3r/PrintConfig.cpp:1093
 msgid "Speed for printing the internal fill. Set to zero for auto."
 msgstr "Velocità per la stampa del riempimento interno. Imposta a zero per auto."
 
-#: src/libslic3r/PrintConfig.cpp:2119
+#: src/libslic3r/PrintConfig.cpp:2262
 msgid "Speed for printing top solid layers (it only applies to the uppermost external layers and not to their internal solid layers). You may want to slow down this to get a nicer surface finish. This can be expressed as a percentage (for example: 80%) over the solid infill speed above. Set to zero for auto."
 msgstr "Velocità di stampa dei layer solidi superiori (si applica solamente al layer solido esterno più in alto e non ai layer solidi interni). Rallenta questa impostazione per ottenere una superficie più rifinita. Questo valore può essere espresso in percentuale (per esempio: 80%) della velocità del riempimento solido qui sopra. Imposta a zero per auto."
 
-#: src/libslic3r/PrintConfig.cpp:2153
+#: src/libslic3r/PrintConfig.cpp:2296
 msgid "Speed for travel moves (jumps between distant extrusion points)."
 msgstr "Velocità per movimenti di spostamento (salti tra punti di estrusione distanti)."
 
-#: src/libslic3r/PrintConfig.cpp:659
+#: src/libslic3r/PrintConfig.cpp:695
 msgid "Speed of the first cooling move"
 msgstr "Velocità del primo movimento di raffreddamento"
 
-#: src/libslic3r/PrintConfig.cpp:678
+#: src/libslic3r/PrintConfig.cpp:714
 msgid "Speed of the last cooling move"
 msgstr "Velocità dell'ultimo movimento di raffreddamento"
 
-#: src/libslic3r/PrintConfig.cpp:616
+#: src/libslic3r/PrintConfig.cpp:652
 msgid "Speed used at the very beginning of loading phase."
 msgstr "Velocità utilizzata all'inizio della fase di caricamento."
 
-#: src/libslic3r/PrintConfig.cpp:608
+#: src/libslic3r/PrintConfig.cpp:644
 msgid "Speed used for loading the filament on the wipe tower."
 msgstr "Velocità utilizzata per caricare il filamento sulla torre di spurgo."
 
-#: src/libslic3r/PrintConfig.cpp:624
+#: src/libslic3r/PrintConfig.cpp:660
 msgid "Speed used for unloading the filament on the wipe tower (does not affect  initial part of unloading just after ramming)."
 msgstr "Velocità usata per scaricare il filamento sulla wipe tower (non influisce sulla parte iniziale dello scaricamento dopo il ramming)."
 
-#: src/libslic3r/PrintConfig.cpp:633
+#: src/libslic3r/PrintConfig.cpp:669
 msgid "Speed used for unloading the tip of the filament immediately after ramming."
 msgstr "Velocità utilizzata per scaricare la punta del filamento immediatamente dopo il ramming."
 
-#: src/slic3r/GUI/Mouse3DController.cpp:296
+#: src/slic3r/GUI/Mouse3DController.cpp:279
 msgid "Speed:"
 msgstr "Velocità:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:37
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Sphere"
 msgstr "Sfera"
 
-#: src/libslic3r/PrintConfig.cpp:1794
+#: src/libslic3r/PrintConfig.cpp:1909
 msgid "Spiral vase"
 msgstr "Vaso a spirale"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:90
+#: src/slic3r/GUI/ConfigManipulation.cpp:89
 msgid "Spiral Vase"
 msgstr "Vaso a spirale"
 
-#: src/slic3r/GUI/Plater.cpp:4019 src/slic3r/GUI/Plater.cpp:4034
-#: src/slic3r/GUI/Plater.cpp:4048 src/libslic3r/PrintConfig.cpp:3471
+#: src/slic3r/GUI/Plater.cpp:3939 src/slic3r/GUI/Plater.cpp:3954
+#: src/slic3r/GUI/Plater.cpp:3972 src/libslic3r/PrintConfig.cpp:3670
 msgid "Split"
 msgstr "Dividi"
 
-#: src/slic3r/GUI/Plater.cpp:4019
+#: src/slic3r/GUI/Plater.cpp:3939
 msgid "Split the selected object"
 msgstr "Dividi l'oggetto selezionato"
 
-#: src/slic3r/GUI/Plater.cpp:4014 src/slic3r/GUI/Plater.cpp:4034
+#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3954
 msgid "Split the selected object into individual objects"
 msgstr "Dividi l'oggetto selezionato in singoli oggetti"
 
-#: src/slic3r/GUI/Plater.cpp:4016 src/slic3r/GUI/Plater.cpp:4048
+#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3972
 msgid "Split the selected object into individual sub-parts"
 msgstr "Dividi l'oggetto selezionato in singole sotto parti"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4550
+#: src/slic3r/GUI/GLCanvas3D.cpp:4916
 msgid "Split to objects"
-msgstr "Separa in oggetti"
+msgstr "Dividi in oggetti"
 
-#: src/slic3r/GUI/Plater.cpp:2981
+#: src/slic3r/GUI/Plater.cpp:2774
 msgid "Split to Objects"
-msgstr "Separa in oggetti"
+msgstr "Dividi in oggetti"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4560 src/slic3r/GUI/GUI_ObjectList.cpp:1487
+#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/GUI_ObjectList.cpp:1618
 msgid "Split to parts"
 msgstr "Dividi in parti"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2274
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2440
 msgid "Split to Parts"
 msgstr "Dividi in parti"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "Standard"
 msgstr "Standard"
 
-#: src/libslic3r/PrintConfig.cpp:846
+#: src/libslic3r/PrintConfig.cpp:884
 msgid "Stars"
 msgstr "Stelle"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "Start a new project"
 msgstr "Inizia un nuovo progetto"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Start at height"
 msgstr "Inizia all'altezza"
 
-#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1976
-#: src/libslic3r/PrintConfig.cpp:1813 src/libslic3r/PrintConfig.cpp:1828
+#: src/slic3r/GUI/Tab.cpp:1873 src/slic3r/GUI/Tab.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:1928 src/libslic3r/PrintConfig.cpp:1943
 msgid "Start G-code"
 msgstr "G-code iniziale"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "Start new slicing process"
 msgstr "Avvia un nuovo processo di slicing"
 
@@ -7206,7 +8437,37 @@ msgstr "Avvia un nuovo processo di slicing"
 msgid "Start printing after upload"
 msgstr "Avvia la stampa dopo il caricamento"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:151
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Start the application"
+msgstr "Avvia l'applicazione"
+
+#: src/slic3r/GUI/GUI_App.cpp:386
+msgid ""
+"Starting with %1% 2.3, configuration directory on Linux has changed (according to XDG Base Directory Specification) to \n"
+"%2%.\n"
+"\n"
+"This directory did not exist yet (maybe you run the new version for the first time).\n"
+"However, an old %1% configuration directory was detected in \n"
+"%3%.\n"
+"\n"
+"Consider moving the contents of the old directory to the new location in order to access your profiles, etc.\n"
+"Note that if you decide to downgrade %1% in future, it will use the old location again.\n"
+"\n"
+"What do you want to do now?"
+msgstr ""
+"A partire da %1% 2.3, la directory di configurazione su Linux è cambiata (secondo la XDG Base Directory Specification) in \n"
+"%2%.\n"
+"\n"
+"Questa directory non esiste ancora (forse stai usando la nuova versione per la prima volta).\n"
+"Tuttavia, è stata rilevata una vecchia directory di configurazione %1% in \n"
+"%3%.\n"
+"\n"
+"Prendere in considerazione la possibilità di spostare il contenuto della vecchia directory nella nuova posizione per accedere ai propri profili, ecc.\n"
+"Notare che se si decide di fare un downgrade di %1% in futuro, si utilizzerà di nuovo la vecchia posizione.\n"
+"\n"
+"Cosa vuoi fare adesso?"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:149
 msgid "Status"
 msgstr "Stato"
 
@@ -7214,766 +8475,940 @@ msgstr "Stato"
 msgid "Status:"
 msgstr "Stato:"
 
-#: src/slic3r/GUI/Tab.cpp:2209
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2378
 msgid "Stealth"
 msgstr "Silenzioso"
 
-#: src/slic3r/GUI/Plater.cpp:1291
+#: src/slic3r/GUI/Plater.cpp:1187 src/slic3r/GUI/Plater.cpp:1235
 msgid "stealth mode"
 msgstr "modalità silenziosa"
 
-#: src/slic3r/GUI/Plater.cpp:4985
-#, possible-c-format
+#: src/slic3r/GUI/GCodeViewer.cpp:2557
+msgid "Stealth mode"
+msgstr "Modalità silenziosa"
+
+#: src/slic3r/GUI/Plater.cpp:5118
+#, c-format
 msgid "STL file exported to %s"
 msgstr "File STL esportato in %s"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Stop at height"
 msgstr "Ferma all'altezza"
 
-#: src/slic3r/GUI/Tab.cpp:1693 src/slic3r/GUI/Tab.cpp:1928
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
 msgid "Success!"
 msgstr "Successo!"
 
-#: src/slic3r/GUI/PresetHints.cpp:203
+#: src/slic3r/GUI/Plater.cpp:2047
+#, c-format
+msgid "Successfully unmounted. The device %s(%s) can now be safely removed from the computer."
+msgstr "Smontato correttamente. Il dispositivo %s(%s) può ora essere rimosso dal computer in sicurezza."
+
+#: src/slic3r/GUI/PresetHints.cpp:202
 msgid "support"
 msgstr "supporto"
 
-#: src/libslic3r/PrintConfig.cpp:2692
+#: src/libslic3r/PrintConfig.cpp:2856
 msgid "Support base diameter"
 msgstr "Diametro della base del supporto"
 
-#: src/libslic3r/PrintConfig.cpp:2702
+#: src/libslic3r/PrintConfig.cpp:2866
 msgid "Support base height"
 msgstr "Altezza della base del supporto"
 
-#: src/libslic3r/PrintConfig.cpp:2711
+#: src/libslic3r/PrintConfig.cpp:2875
 msgid "Support base safety distance"
 msgstr "Distanza di sicurezza base supporto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Blocker"
 msgstr "Blocco Supporto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/libslic3r/PrintConfig.cpp:895
+msgid "Support Cubic"
+msgstr "Supporto Cubico"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Enforcer"
 msgstr "Rinforzo Supporto"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:163
+#: src/slic3r/GUI/ConfigManipulation.cpp:162
 msgid "Support Generator"
 msgstr "Generatore Supporti"
 
-#: src/slic3r/GUI/Tab.cpp:3608
+#: src/slic3r/GUI/Tab.cpp:4018
 msgid "Support head"
 msgstr "Testa supporto"
 
-#: src/libslic3r/PrintConfig.cpp:2620
-msgid "Support head front diameter"
-msgstr "Diametro anteriore della testa del supporto"
-
-#: src/libslic3r/PrintConfig.cpp:2629
-msgid "Support head penetration"
-msgstr "Inserimento testa del supporto"
-
-#: src/libslic3r/PrintConfig.cpp:2638
-msgid "Support head width"
-msgstr "Larghezza testa del supporto"
-
-#: src/slic3r/GUI/PresetHints.cpp:213
+#: src/slic3r/GUI/PresetHints.cpp:212
 msgid "support interface"
 msgstr "interfaccia supporto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:97
-#: src/slic3r/GUI/GUI_ObjectList.cpp:615 src/slic3r/GUI/GUI_Preview.cpp:246
-#: src/slic3r/GUI/Tab.cpp:1120 src/slic3r/GUI/Tab.cpp:1121
-#: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370
-#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1866
-#: src/libslic3r/PrintConfig.cpp:1872 src/libslic3r/PrintConfig.cpp:1880
-#: src/libslic3r/PrintConfig.cpp:1892 src/libslic3r/PrintConfig.cpp:1902
-#: src/libslic3r/PrintConfig.cpp:1910 src/libslic3r/PrintConfig.cpp:1925
-#: src/libslic3r/PrintConfig.cpp:1946 src/libslic3r/PrintConfig.cpp:1958
-#: src/libslic3r/PrintConfig.cpp:1974 src/libslic3r/PrintConfig.cpp:1983
-#: src/libslic3r/PrintConfig.cpp:1992 src/libslic3r/PrintConfig.cpp:2003
-#: src/libslic3r/PrintConfig.cpp:2017 src/libslic3r/PrintConfig.cpp:2025
-#: src/libslic3r/PrintConfig.cpp:2026 src/libslic3r/PrintConfig.cpp:2035
-#: src/libslic3r/PrintConfig.cpp:2043 src/libslic3r/PrintConfig.cpp:2057
+#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:95
+#: src/slic3r/GUI/GUI_ObjectList.cpp:654 src/slic3r/GUI/GUI_Preview.cpp:311
+#: src/slic3r/GUI/Tab.cpp:1449 src/slic3r/GUI/Tab.cpp:1450
+#: src/libslic3r/ExtrusionEntity.cpp:324 src/libslic3r/ExtrusionEntity.cpp:356
+#: src/libslic3r/PrintConfig.cpp:404 src/libslic3r/PrintConfig.cpp:1610
+#: src/libslic3r/PrintConfig.cpp:2008 src/libslic3r/PrintConfig.cpp:2014
+#: src/libslic3r/PrintConfig.cpp:2022 src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2044 src/libslic3r/PrintConfig.cpp:2052
+#: src/libslic3r/PrintConfig.cpp:2067 src/libslic3r/PrintConfig.cpp:2088
+#: src/libslic3r/PrintConfig.cpp:2100 src/libslic3r/PrintConfig.cpp:2116
+#: src/libslic3r/PrintConfig.cpp:2125 src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2145 src/libslic3r/PrintConfig.cpp:2159
+#: src/libslic3r/PrintConfig.cpp:2167 src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2177 src/libslic3r/PrintConfig.cpp:2185
+#: src/libslic3r/PrintConfig.cpp:2199
 msgid "Support material"
 msgstr "Materiale di supporto"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:247 src/libslic3r/ExtrusionEntity.cpp:320
-#: src/libslic3r/PrintConfig.cpp:1991
+#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/ExtrusionEntity.cpp:325
+#: src/libslic3r/ExtrusionEntity.cpp:358 src/libslic3r/PrintConfig.cpp:2133
 msgid "Support material interface"
 msgstr "Interfaccia materiale di supporto"
 
-#: src/libslic3r/PrintConfig.cpp:2044
+#: src/libslic3r/PrintConfig.cpp:2186
 msgid "Support material will not be generated for overhangs whose slope angle (90° = vertical) is above the given threshold. In other words, this value represent the most horizontal slope (measured from the horizontal plane) that you can print without support material. Set to zero for automatic detection (recommended)."
 msgstr "Il materiale di supporto non sarà generato per sporgenze con angolo di inclinazione (90°=verticale) superiore al limite impostato. In altre parole, questo valore rappresenta l'inclinazione orizzontale massima (misurata dal piano orizzontale) che puoi stampare senza materiale di supporto. Imposta a zero per un rilevamento automatico (raccomandato)."
 
-#: src/libslic3r/PrintConfig.cpp:1964
+#: src/libslic3r/PrintConfig.cpp:2106
 msgid "Support material/raft interface extruder"
 msgstr "Estrusore materiale di supporto/intefaccia raft"
 
-#: src/libslic3r/PrintConfig.cpp:1937
+#: src/libslic3r/PrintConfig.cpp:2079
 msgid "Support material/raft/skirt extruder"
 msgstr "Estrusore materiale di supporto/raft/skirt"
 
-#: src/slic3r/GUI/Plater.cpp:500 src/libslic3r/PrintConfig.cpp:1901
-#: src/libslic3r/PrintConfig.cpp:2674
+#: src/slic3r/GUI/Plater.cpp:366 src/libslic3r/PrintConfig.cpp:2043
+#: src/libslic3r/PrintConfig.cpp:2838
 msgid "Support on build plate only"
 msgstr "Supporti solo dal piano di stampa"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:888
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:762
 msgid "Support parameter change"
 msgstr "Modifica parametro del Supporto"
 
-#: src/slic3r/GUI/Tab.cpp:3613
+#: src/slic3r/GUI/Tab.cpp:4023
 msgid "Support pillar"
 msgstr "Pilastro di supporto"
 
-#: src/libslic3r/PrintConfig.cpp:2658
-msgid "Support pillar connection mode"
-msgstr "Modalità di connessione dei pilastri di supporto"
-
-#: src/libslic3r/PrintConfig.cpp:2648
-msgid "Support pillar diameter"
-msgstr "Diametro pilastro di supporto"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
-#: src/libslic3r/PrintConfig.cpp:2764
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/libslic3r/PrintConfig.cpp:2928
 msgid "Support points density"
 msgstr "Densità punti di supporto"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1196
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048
 msgid "Support points edit"
 msgstr "Edita punti di supporto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:624
-#: src/slic3r/GUI/Plater.cpp:495 src/slic3r/GUI/Tab.cpp:3604
-#: src/slic3r/GUI/Tab.cpp:3605 src/libslic3r/PrintConfig.cpp:2614
-#: src/libslic3r/PrintConfig.cpp:2621 src/libslic3r/PrintConfig.cpp:2630
-#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2649
-#: src/libslic3r/PrintConfig.cpp:2675 src/libslic3r/PrintConfig.cpp:2682
-#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2703
-#: src/libslic3r/PrintConfig.cpp:2712 src/libslic3r/PrintConfig.cpp:2725
-#: src/libslic3r/PrintConfig.cpp:2735 src/libslic3r/PrintConfig.cpp:2744
-#: src/libslic3r/PrintConfig.cpp:2754 src/libslic3r/PrintConfig.cpp:2765
-#: src/libslic3r/PrintConfig.cpp:2773
+#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:663
+#: src/slic3r/GUI/Plater.cpp:361 src/slic3r/GUI/Tab.cpp:4014
+#: src/slic3r/GUI/Tab.cpp:4015 src/libslic3r/PrintConfig.cpp:2757
+#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2773
+#: src/libslic3r/PrintConfig.cpp:2782 src/libslic3r/PrintConfig.cpp:2792
+#: src/libslic3r/PrintConfig.cpp:2802 src/libslic3r/PrintConfig.cpp:2839
+#: src/libslic3r/PrintConfig.cpp:2846 src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:2867 src/libslic3r/PrintConfig.cpp:2876
+#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899
+#: src/libslic3r/PrintConfig.cpp:2908 src/libslic3r/PrintConfig.cpp:2918
+#: src/libslic3r/PrintConfig.cpp:2929 src/libslic3r/PrintConfig.cpp:2937
 msgid "Supports"
 msgstr "Supporti"
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "supports and pad"
 msgstr "supporti e pad"
 
-#: src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1185
 msgid "Supports remaining times"
 msgstr "Supporto Tempo residuo"
 
-#: src/libslic3r/PrintConfig.cpp:1101
+#: src/libslic3r/PrintConfig.cpp:1194
 msgid "Supports stealth mode"
 msgstr "Supporto modalità silenziosa"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:159
-msgid "Supports work better, if the following feature is enabled:\n- Detect bridging perimeters"
-msgstr "I supporti funzionano meglio se le la seguente funzione è attivata:\n- Rileva perimetri ponte"
+#: src/slic3r/GUI/ConfigManipulation.cpp:158
+msgid ""
+"Supports work better, if the following feature is enabled:\n"
+"- Detect bridging perimeters"
+msgstr ""
+"I supporti funzionano meglio se le la seguente funzione è attivata:\n"
+"- Rileva perimetri ponte"
 
-#: src/slic3r/GUI/Preferences.cpp:87
+#: src/slic3r/GUI/Preferences.cpp:104
 msgid "Suppress \" - default - \" presets"
 msgstr "Nascondi i preset \" - default - \""
 
-#: src/slic3r/GUI/Preferences.cpp:89
+#: src/slic3r/GUI/Preferences.cpp:106
 msgid "Suppress \" - default - \" presets in the Print / Filament / Printer selections once there are any other valid presets available."
 msgstr "Nascondi i preset \" - default - \" nelle selezioni Stampa / Filamento / Stampante non appena sono disponibili altri preset validi."
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "SVG"
 msgstr "SVG"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144
+#: src/slic3r/GUI/Mouse3DController.cpp:318
+msgid "Swap Y/Z axes"
+msgstr "Inverti assi Y/Z"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+msgid "Switch between Editor/Preview"
+msgstr "Passare da Editor/Anteprima"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1273
 msgid "Switch code to Change extruder"
 msgstr "Passa il codice a Cambio estrusore"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1179
+#: src/slic3r/GUI/DoubleSlider.cpp:1306
 msgid "Switch code to Color change (%1%) for:"
 msgstr "Passa il codice a Cambio colore (%1%) per:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
 msgid "Switch to 3D"
 msgstr "Passa a 3D"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1376
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1223
 msgid "Switch to editing mode"
 msgstr "Passa alla modalità modifica"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
 msgid "Switch to Preview"
 msgstr "Passa ad Anteprima"
 
-#: src/slic3r/GUI/wxExtensions.cpp:703
-#, possible-c-format
+#: src/slic3r/GUI/GLCanvas3D.cpp:4302 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Switch to Settings"
+msgstr "Passa a Impostazioni"
+
+#: src/slic3r/GUI/wxExtensions.cpp:623
+#, c-format
 msgid "Switch to the %s mode"
 msgstr "Passa alla modalità %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:882
-msgid "Switching the language will trigger application restart.\nYou will lose content of the plater."
-msgstr "Il cambio della lingua necessita il riavvio dell'applicazione.\nVerrà cancellato il contenuto del piano."
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:542
+msgid "Switching Presets: Unsaved Changes"
+msgstr "Cambio di preset: Modifiche non salvate"
+
+#: src/slic3r/GUI/GUI_App.cpp:1608
+msgid ""
+"Switching the language will trigger application restart.\n"
+"You will lose content of the plater."
+msgstr ""
+"Il cambio della lingua necessita il riavvio dell'applicazione.\n"
+"Verrà cancellato il contenuto del piano."
 
 #: src/slic3r/GUI/WipeTowerDialog.cpp:365
-msgid "Switching to simple settings will discard changes done in the advanced mode!\n\nDo you want to proceed?"
-msgstr "Cambiare alle impostazioni semplici eliminerà tutte le modifiche fatte alle impostazioni complesse!\n\nProcedere?"
+msgid ""
+"Switching to simple settings will discard changes done in the advanced mode!\n"
+"\n"
+"Do you want to proceed?"
+msgstr ""
+"Cambiare alle impostazioni semplici eliminerà tutte le modifiche fatte alle impostazioni complesse!\n"
+"\n"
+"Procedere?"
 
-#: src/slic3r/GUI/Tab.cpp:1014
+#: src/slic3r/GUI/Tab.cpp:1332
 msgid "symbolic profile name"
 msgstr "nome simbolico profilo"
 
-#: src/libslic3r/PrintConfig.cpp:2036
+#: src/libslic3r/PrintConfig.cpp:2178
 msgid "Synchronize support layers with the object print layers. This is useful with multi-material printers, where the extruder switch is expensive."
 msgstr "Sincronizza i layer di supporto con i layer dell'oggetto stampato. È utile con le stampanti multi-material, dove il cambio estrusore è costoso."
 
-#: src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2176
 msgid "Synchronize with object layers"
 msgstr "Sincronizza con i layer dell'oggetto"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "System &Info"
 msgstr "&Info di Sistema"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:78
+#: src/slic3r/GUI/SysInfoDialog.cpp:90 src/slic3r/GUI/SysInfoDialog.cpp:92
 msgid "System Information"
 msgstr "Informazioni di sistema"
 
-#: src/slic3r/GUI/Preset.cpp:1109 src/slic3r/GUI/Preset.cpp:1164
-#: src/slic3r/GUI/Preset.cpp:1242 src/slic3r/GUI/Preset.cpp:1284
-#: src/slic3r/GUI/PresetBundle.cpp:1583 src/slic3r/GUI/PresetBundle.cpp:1672
+#: src/slic3r/GUI/PresetComboBoxes.cpp:188
+#: src/slic3r/GUI/PresetComboBoxes.cpp:226
+#: src/slic3r/GUI/PresetComboBoxes.cpp:724
+#: src/slic3r/GUI/PresetComboBoxes.cpp:774
+#: src/slic3r/GUI/PresetComboBoxes.cpp:886
+#: src/slic3r/GUI/PresetComboBoxes.cpp:930
 msgid "System presets"
 msgstr "Preset di sistema"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Take Configuration &Snapshot"
 msgstr "Cattura I&stantanea di Configurazione"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Taking configuration snapshot"
 msgstr "Cattura istantanea della configurazione"
 
-#: src/slic3r/GUI/Tab.cpp:1433 src/libslic3r/PrintConfig.cpp:2067
+#: src/slic3r/GUI/Tab.cpp:1779
 msgid "Temperature"
 msgstr "Temperatura"
 
-#: src/libslic3r/PrintConfig.cpp:1804
+#: src/libslic3r/PrintConfig.cpp:1919
 msgid "Temperature difference to be applied when an extruder is not active. Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped."
 msgstr "La differenza di temperatura da applicare quando un estrusore non è attivo. Abilita uno skirt \"sacrificale\" a piena altezza su cui l'ugello verrà pulito periodicamente."
 
-#: src/libslic3r/PrintConfig.cpp:1803
+#: src/libslic3r/PrintConfig.cpp:1918
 msgid "Temperature variation"
 msgstr "Variazione di temperatura"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
+#: src/slic3r/GUI/ConfigWizard.cpp:1383
 msgid "Temperatures"
 msgstr "Temperature"
 
-#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:1915
+#: src/slic3r/GUI/Tab.cpp:2215
+msgid "Template Custom G-code"
+msgstr "Template G-code personalizzato"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:284
 msgid "Test"
 msgstr "Test"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:172
+#: src/slic3r/GUI/BedShapeDialog.cpp:315
 msgid "Texture"
 msgstr "Texture"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:208
+#: src/slic3r/GUI/ConfigManipulation.cpp:207
 msgid "The %1% infill pattern is not supposed to work at 100%% density."
 msgstr "La trama di riempimento %1% non è fatta per lavorare con densità al 100%%."
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:548
-#, possible-c-format
+#, c-format
 msgid "The %s device could not have been found"
 msgstr "Il dispositivo %s non è stato trovato"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:436
-#, possible-c-format
-msgid "The %s device was not found.\nIf the device is connected, please press the Reset button next to the USB connector ..."
-msgstr "Il dispositivo %s non è stato trovato.\nSe il dispositivo è connesso, premi il pulsante Reset vicino al connettore USB ..."
+#, c-format
+msgid ""
+"The %s device was not found.\n"
+"If the device is connected, please press the Reset button next to the USB connector ..."
+msgstr ""
+"Il dispositivo %s non è stato trovato.\n"
+"Se il dispositivo è connesso, premi il pulsante Reset vicino al connettore USB ..."
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1238
 msgid "The current custom preset will be detached from the parent system preset."
 msgstr "Il preset personalizzato corrente sarà staccato dal preset del sistema padre."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
-msgid "The currently manipulated object is tilted (rotation angles are not multiples of 90°).\nNon-uniform scaling of tilted objects is only possible in the World coordinate system,\nonce the rotation is embedded into the object coordinates."
-msgstr "L'oggetto modificato corrente è inclinato (angoli di rotazione non multipli di 90°).\nUn ridimensionamento non uniforme di un oggetto inclinato è possibile solamente su un sistema di coordinate reali, non appena la rotazione è inclusa nelle coordinate dell'oggetto."
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:925
+msgid ""
+"The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
+"Non-uniform scaling of tilted objects is only possible in the World coordinate system,\n"
+"once the rotation is embedded into the object coordinates."
+msgstr ""
+"L'oggetto modificato corrente è inclinato (angoli di rotazione non multipli di 90°).\n"
+"Un ridimensionamento non uniforme di un oggetto inclinato è possibile solamente su un sistema di coordinate reali, non appena la rotazione è inclusa nelle coordinate dell'oggetto."
 
-#: src/libslic3r/PrintConfig.cpp:2726
+#: src/libslic3r/PrintConfig.cpp:2890
 msgid "The default angle for connecting support sticks and junctions."
 msgstr "Angolo predefinito per la connessione delle barre di supporto e le giunzioni."
 
-#: src/libslic3r/SLAPrint.cpp:631
+#: src/libslic3r/SLAPrint.cpp:645
 msgid "The endings of the support pillars will be deployed on the gap between the object and the pad. 'Support base safety distance' has to be greater than the 'Pad object gap' parameter to avoid this."
 msgstr "La fine del pilastro di supporto si svilupperà nello spazio tra l'oggetto e il pad. La 'Distanza di sicurezza base di supporto' deve essere più grande del parametro 'Distanza Pad oggetto' per evitare questo."
 
-#: src/libslic3r/PrintConfig.cpp:489
+#: src/libslic3r/PrintConfig.cpp:525
 msgid "The extruder to use (unless more specific extruder settings are specified). This value overrides perimeter and infill extruders, but not the support extruders."
 msgstr "Estrusore da utilizzare (a meno che non siano specificate impostazioni d'estrusore più specifiche). Questo valore scavalca l'estrusore dei perimetri e di riempimento, ma non l'estrusore dei supporti."
 
-#: src/libslic3r/PrintConfig.cpp:1003
+#: src/libslic3r/PrintConfig.cpp:1047
 msgid "The extruder to use when printing infill."
 msgstr "L'estrusore da utilizzare per la stampa del riempimento."
 
-#: src/libslic3r/PrintConfig.cpp:1410
+#: src/libslic3r/PrintConfig.cpp:1518
 msgid "The extruder to use when printing perimeters and brim. First extruder is 1."
 msgstr "L'estrusore da utilizzare per la stampa dei perimetri e del brim. Il primo estrusore è 1."
 
-#: src/libslic3r/PrintConfig.cpp:1738
+#: src/libslic3r/PrintConfig.cpp:1853
 msgid "The extruder to use when printing solid infill."
 msgstr "L'estrusore da utilizzare per la stampa del riempimento solido."
 
-#: src/libslic3r/PrintConfig.cpp:1966
+#: src/libslic3r/PrintConfig.cpp:2108
 msgid "The extruder to use when printing support material interface (1+, 0 to use the current extruder to minimize tool changes). This affects raft too."
 msgstr "L'estrusore da utilizzare per la stampa dell'interfaccia del materiale di supporto (1+, 0 per usare l'estrusore attuale per minimizzare il cambio di attrezzo). Questo influenza anche il raft."
 
-#: src/libslic3r/PrintConfig.cpp:1939
+#: src/libslic3r/PrintConfig.cpp:2081
 msgid "The extruder to use when printing support material, raft and skirt (1+, 0 to use the current extruder to minimize tool changes)."
 msgstr "L'estrusore da utilizzare per la stampa del materiale di supporto, raft e skirt (1+, 0 per utilizzare l'estrusore attuale per minimizzare i cambi di attrezzo)."
 
-#: src/libslic3r/PrintConfig.cpp:727
+#: src/libslic3r/PrintConfig.cpp:763
 msgid "The filament material type for use in custom G-codes."
 msgstr "Tipo di materiale da usare nei G-code personalizzati."
 
-#: src/libslic3r/PrintConfig.cpp:3494
+#: src/libslic3r/PrintConfig.cpp:3693
 msgid "The file where the output will be written (if not specified, it will be based on the input file)."
 msgstr "Il file dove verrà scritto l'output (se non specificato, sarà basato sul file di input)."
 
-#: src/libslic3r/PrintConfig.cpp:1102
+#: src/libslic3r/PrintConfig.cpp:1195
 msgid "The firmware supports stealth mode"
 msgstr "Il firmware supporta la modalità silenziosa"
 
-#: src/libslic3r/PrintConfig.cpp:120
+#: src/libslic3r/PrintConfig.cpp:122
 msgid "The first layer will be shrunk in the XY plane by the configured value to compensate for the 1st layer squish aka an Elephant Foot effect."
 msgstr "Il primo layer verrà ristretto sul piano XY dal valore configurato, così da compensare per lo schiacciamento del 1° layer, anche noto come effetto Zampa d'elefante."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3820
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3927 src/slic3r/GUI/Tab.cpp:3457
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4283
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4410
+#: src/slic3r/GUI/SavePresetDialog.cpp:117
 msgid "the following characters are not allowed:"
 msgstr "non sono permessi i seguenti caratteri:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1830
+#: src/slic3r/GUI/ConfigWizard.cpp:2257
 msgid "The following FFF printer models have no filament selected:"
 msgstr "I seguenti modelli di stampante FFF non hanno nessun filamento selezionato:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1848
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1004
+msgid "The following presets were modified:"
+msgstr "I preset seguenti sono stati modificati:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:2275
 msgid "The following SLA printer models have no materials selected:"
 msgstr "I seguenti modelli di stampante SLA non hanno nessun filamento selezionato:"
 
-#: src/slic3r/GUI/Tab.cpp:3461
+#: src/slic3r/GUI/SavePresetDialog.cpp:125
 msgid "the following suffix is not allowed:"
 msgstr "il seguente suffisso non è permesso:"
 
-#: src/libslic3r/PrintConfig.cpp:2871
+#: src/libslic3r/PrintConfig.cpp:3035
 msgid "The gap between the object bottom and the generated pad in zero elevation mode."
 msgstr "Lo spazio tra la parte inferiore dell'oggetto e il pad generato nella modalità ad elevazione zero."
 
-#: src/libslic3r/PrintConfig.cpp:2704
+#: src/libslic3r/PrintConfig.cpp:2868
 msgid "The height of the pillar base cone"
 msgstr "Altezza del cono alla base del pilastro"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1922
+#: src/slic3r/GUI/DoubleSlider.cpp:2140
 msgid "The last color change data was saved for a multi extruder printing with tool changes for whole print."
 msgstr "Gli ultimi dati del cambio colore sono stati salvati per una stampa a estrusore multiplo con cambi di attrezzo per l'intera stampa."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1900 src/slic3r/GUI/DoubleSlider.cpp:1916
+#: src/slic3r/GUI/DoubleSlider.cpp:2119 src/slic3r/GUI/DoubleSlider.cpp:2134
 msgid "The last color change data was saved for a multi extruder printing."
 msgstr "Gli ultimi dati del cambio colore sono stati salvati per una stampa a estrusore multiplo."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1899
+#: src/slic3r/GUI/DoubleSlider.cpp:2118
 msgid "The last color change data was saved for a single extruder printing."
 msgstr "I dati dell'ultimo cambio colore sono stati salvati per la stampa ad estrusore singolo."
 
-#: src/libslic3r/PrintConfig.cpp:2745
+#: src/libslic3r/PrintConfig.cpp:2909
 msgid "The max distance of two pillars to get linked with each other. A zero value will prohibit pillar cascading."
 msgstr "La distanza massima tra due pilastri per collegarsi gli uni agli altri. Un valore di zero impedisce i pilastri a cascata."
 
-#: src/libslic3r/PrintConfig.cpp:2736
+#: src/libslic3r/PrintConfig.cpp:2900
 msgid "The max length of a bridge"
 msgstr "La lunghezza massima di un bridge"
 
-#: src/libslic3r/PrintConfig.cpp:2714
+#: src/libslic3r/PrintConfig.cpp:2878
 msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
 msgstr "Distanza minima della base del pilastro dal modello in mm. Ha senso con modalità ad elevazione zero in cui viene inserito uno spazio tra modello e pad a seconda di questo parametro."
 
-#: src/libslic3r/PrintConfig.cpp:185
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
+msgid "The name cannot be empty."
+msgstr "Il nome non può essere vuoto."
+
+#: src/libslic3r/PrintConfig.cpp:219
 msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
 msgstr "Il numero di layer solidi inferiori è aumentato al di sopra di bottom_solid_layers se necessario per soddisfare lo spessore minimo del guscio inferiore."
 
-#: src/libslic3r/PrintConfig.cpp:2143
+#: src/libslic3r/PrintConfig.cpp:2286
 msgid "The number of top solid layers is increased above top_solid_layers if necessary to satisfy minimum thickness of top shell. This is useful to prevent pillowing effect when printing with variable layer height."
 msgstr "Il numero di layer solidi superiori è aumentato al di sopra di top_solid_layers se necessario per soddisfare lo spessore minimo del guscio superiore. Questo è utile a prevenire l'effetto cuscinetto con la stampa ad altezza layer variabile."
 
-#: src/libslic3r/PrintConfig.cpp:2277
+#: src/slic3r/GUI/Plater.cpp:2326
+msgid "The object appears to be saved in inches"
+msgstr "L'oggetto sembra essere stato salvato in pollici"
+
+#: src/libslic3r/PrintConfig.cpp:2420
 msgid "The object will be grown/shrunk in the XY plane by the configured value (negative = inwards, positive = outwards). This might be useful for fine-tuning hole sizes."
 msgstr "L'oggetto verrà allargato/ristretto sul piano XY dal valore configurato (negativo = verso l'interno, positivo = verso l'esterno). Questo può essere utile per regolare la grandezza dei fori."
 
-#: src/libslic3r/PrintConfig.cpp:1503
+#: src/libslic3r/PrintConfig.cpp:1611
 msgid "The object will be raised by this number of layers, and support material will be generated under it."
 msgstr "L'oggetto verrà sollevato per questo numero di layer e verrà generato il materiale di supporto al di sotto di esso."
 
-#: src/libslic3r/PrintConfig.cpp:2424
-msgid "The percentage of the bed area. \nIf the print area exceeds the specified value, \nthen a slow tilt will be used, otherwise - a fast tilt"
-msgstr "La percentuale dell'area del piano.\nSe l'area di stampa supera un determinato valore,\nverrà utilizzata l'inclinazione lenta, in caso contrario - l'inclinazione veloce"
+#: src/libslic3r/PrintConfig.cpp:2803
+msgid "The percentage of smaller pillars compared to the normal pillar diameter which are used in problematic areas where a normal pilla cannot fit."
+msgstr "La percentuale di pilastri più piccoli rispetto al diametro normale dei pilastri che vengono utilizzati in aree problematiche in cui un normale pilastro non può adattarsi."
 
-#: src/slic3r/GUI/GUI_App.cpp:932
-msgid "The presets on the following tabs were modified"
-msgstr "Sono stati modificati i preset nelle seguenti schede"
+#: src/libslic3r/PrintConfig.cpp:2567
+msgid ""
+"The percentage of the bed area. \n"
+"If the print area exceeds the specified value, \n"
+"then a slow tilt will be used, otherwise - a fast tilt"
+msgstr ""
+"La percentuale dell'area del piano.\n"
+"Se l'area di stampa supera un determinato valore,\n"
+"verrà utilizzata l'inclinazione lenta, in caso contrario - l'inclinazione veloce"
 
-#: src/libslic3r/PrintConfig.cpp:1846
+#: src/slic3r/GUI/Tab.cpp:3430
+msgid "The physical printer(s) below is based on the preset, you are going to delete."
+msgstr "La(e) stampante(e) fisica(e) sottostante(i) si basa(no) solo sul preset che si intende cancellare."
+
+#: src/slic3r/GUI/Tab.cpp:3438
+msgid "The physical printer(s) below is based only on the preset, you are going to delete."
+msgstr "La(e) stampante(e) fisica(e) sottostante(i) si basa(no) solo sul preset che si intende cancellare."
+
+#: src/slic3r/GUI/GUI_App.cpp:1676
+msgid "The preset(s) modifications are successfully saved"
+msgstr "Le modifiche dei preset sono state salvate correttamente"
+
+#: src/libslic3r/PrintConfig.cpp:1988
 msgid "The printer multiplexes filaments into a single hot end."
 msgstr "La stampante processa diversi filamenti in un singolo hotend."
 
-#: src/libslic3r/Format/3mf.cpp:1630
+#: src/libslic3r/Format/3mf.cpp:1667
 msgid "The selected 3mf file has been saved with a newer version of %1% and is not compatible."
 msgstr "Il file 3mf selezionato è stato salvato con una versione più recente di %1% e non è compatibile."
 
-#: src/libslic3r/Format/AMF.cpp:934
+#: src/libslic3r/Format/AMF.cpp:955
 msgid "The selected amf file has been saved with a newer version of %1% and is not compatible."
 msgstr "Il file amf selezionato è stato salvato con una versione più recente di %1% e non è compatibile."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:513
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "The selected file"
+msgstr "Il file selezionato"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:589
 msgid "The selected file contains no geometry."
 msgstr "Il file selezionato non contiene geometrie."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:517
+#: src/slic3r/GUI/BedShapeDialog.cpp:593
 msgid "The selected file contains several disjoint areas. This is not supported."
 msgstr "Il file selezionato contiene molteplici aree disgiunte. Non è supportato."
 
-#: src/slic3r/GUI/Plater.cpp:2970
+#: src/slic3r/GUI/Plater.cpp:2763
 msgid "The selected object can't be split because it contains more than one volume/material."
 msgstr "L'oggetto selezionato non può essere diviso perché contiene più di un volume/materiale."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2270 src/slic3r/GUI/Plater.cpp:2978
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2771
 msgid "The selected object couldn't be split because it contains only one part."
 msgstr "L'oggetto selezionato non può essere diviso perché contiene solo una parte."
 
-#: src/slic3r/GUI/MainFrame.cpp:461
-msgid "The selected project is no longer available.\nDo you want to remove it from the recent projects list?"
-msgstr "Il progetto selezionato non è più disponibile.\nVuoi rimuoverlo dall'elenco dei progetti recenti?"
+#: src/slic3r/GUI/MainFrame.cpp:1003
+msgid ""
+"The selected project is no longer available.\n"
+"Do you want to remove it from the recent projects list?"
+msgstr ""
+"Il progetto selezionato non è più disponibile.\n"
+"Vuoi rimuoverlo dall'elenco dei progetti recenti?"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:998
-msgid "The sequential print is on.\nIt's impossible to apply any custom G-code for objects printing sequentually.\nThis code won't be processed during G-code generation."
-msgstr "La stampa sequenziale è attiva.\nNon è possibile applicare alcun G-code personalizzato per oggetti con stampa sequenziale.\nQuesto codice non sarà processato durante la generazione del G-code."
+#: src/slic3r/GUI/DoubleSlider.cpp:1121
+msgid ""
+"The sequential print is on.\n"
+"It's impossible to apply any custom G-code for objects printing sequentually.\n"
+"This code won't be processed during G-code generation."
+msgstr ""
+"La stampa sequenziale è attiva.\n"
+"Non è possibile applicare alcun G-code personalizzato per oggetti con stampa sequenziale.\n"
+"Questo codice non sarà processato durante la generazione del G-code."
 
-#: src/libslic3r/PrintConfig.cpp:2846
+#: src/slic3r/GUI/ConfigWizard.cpp:1187
+msgid "The size of the object can be specified in inches"
+msgstr "La dimensione dell'oggetto può essere specificata in pollici"
+
+#: src/libslic3r/PrintConfig.cpp:3010
 msgid "The slope of the pad wall relative to the bed plane. 90 degrees means straight walls."
 msgstr "Inclinazione della parete del pad relativa al piano. 90 gradi equivale a pareti dritte."
 
-#: src/libslic3r/PrintConfig.cpp:1614
+#: src/libslic3r/PrintConfig.cpp:1722
 msgid "The speed for loading of a filament into extruder after retraction (it only applies to the extruder motor). If left to zero, the retraction speed is used."
 msgstr "La velocità di caricamento di un filamento nell'estrusore dopo la retrazione (si applica solamente al motore dell'estrusore). Se lasciato a zero, verrà utilizzata la velocità di retrazione."
 
-#: src/libslic3r/PrintConfig.cpp:1606
+#: src/libslic3r/PrintConfig.cpp:1714
 msgid "The speed for retractions (it only applies to the extruder motor)."
 msgstr "Velocità delle retrazioni (si applica solamente al motore dell'estrusore)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:81
-#, no-c-format
-msgid "The Spiral Vase mode requires:\n- one perimeter\n- no top solid layers\n- 0% fill density\n- no support material\n- Ensure vertical shell thickness enabled\n- Detect thin walls disabled"
-msgstr "La modalità Vaso a spirale necessita:\n-un solo perimetro\n-nessun layer solido superiore\n-densità riempimento 0%\n-nessun materiale di supporto\n-Mantieni spessore guscio verticale attivo\n-Rileva perimetri sottili disattivo"
+#: src/slic3r/GUI/ConfigManipulation.cpp:80
+#, c-format
+msgid ""
+"The Spiral Vase mode requires:\n"
+"- one perimeter\n"
+"- no top solid layers\n"
+"- 0% fill density\n"
+"- no support material\n"
+"- Ensure vertical shell thickness enabled\n"
+"- Detect thin walls disabled"
+msgstr ""
+"La modalità Vaso a spirale necessita:\n"
+"-un solo perimetro\n"
+"-nessun layer solido superiore\n"
+"-densità riempimento 0%\n"
+"-nessun materiale di supporto\n"
+"-Mantieni spessore guscio verticale attivo\n"
+"-Rileva perimetri sottili disattivo"
 
-#: src/libslic3r/Print.cpp:1237
+#: src/libslic3r/Print.cpp:1263
 msgid "The Spiral Vase option can only be used when printing a single object."
 msgstr "L'opzione Vaso a Spirale può essere utilizzata soltanto durante la stampa di un oggetto singolo."
 
-#: src/libslic3r/Print.cpp:1244
+#: src/libslic3r/Print.cpp:1270
 msgid "The Spiral Vase option can only be used when printing single material objects."
 msgstr "L'opzione Vaso a Spirale può essere usata solo durante la stampa di oggetti in materiale singolo."
 
-#: src/slic3r/GUI/Tab.cpp:3068
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:464
 msgid "The supplied name is empty. It can't be saved."
 msgstr "Il nome fornito è vuoto. Non può essere salvato."
 
-#: src/slic3r/GUI/Tab.cpp:3465
+#: src/slic3r/GUI/SavePresetDialog.cpp:131
 msgid "The supplied name is not available."
 msgstr "Il nome fornito non è disponibile."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3819
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3926 src/slic3r/GUI/Tab.cpp:3456
-#: src/slic3r/GUI/Tab.cpp:3460
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4282
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4409
+#: src/slic3r/GUI/SavePresetDialog.cpp:116
+#: src/slic3r/GUI/SavePresetDialog.cpp:124
 msgid "The supplied name is not valid;"
 msgstr "Il nome fornito non è valido;"
 
-#: src/libslic3r/Print.cpp:1222
+#: src/libslic3r/Print.cpp:1248
 msgid "The supplied settings will cause an empty print."
 msgstr "Le configurazioni fornite causeranno una stampa vuota."
 
-#: src/libslic3r/PrintConfig.cpp:2789
+#: src/libslic3r/PrintConfig.cpp:2953
 msgid "The thickness of the pad and its optional cavity walls."
 msgstr "Lo spessore del pad e delle intercapedini opzionali."
 
-#: src/libslic3r/PrintConfig.cpp:1911
+#: src/libslic3r/PrintConfig.cpp:2053
 msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
 msgstr "Distanza verticale tra oggetto e interfaccia del materiale di supporto. Impostando questo valore a 0 eviterà che Slic3r utilizzi il flusso e velocità bridge per il primo layer dell'oggetto."
 
-#: src/slic3r/GUI/Tab.cpp:2575
-msgid "The Wipe option is not available when using the Firmware Retraction mode.\n\nShall I disable it in order to enable Firmware Retraction?"
-msgstr "La funzione Wipe non è disponibile quando si usa la modalità Retrazione Firmware.\n\nDevo disattivarla per poter abilitare la Retrazione Firmware?"
+#: src/slic3r/GUI/Tab.cpp:2731
+msgid ""
+"The Wipe option is not available when using the Firmware Retraction mode.\n"
+"\n"
+"Shall I disable it in order to enable Firmware Retraction?"
+msgstr ""
+"La funzione Wipe non è disponibile quando si usa la modalità Retrazione Firmware.\n"
+"\n"
+"Devo disattivarla per poter abilitare la Retrazione Firmware?"
 
-#: src/libslic3r/Print.cpp:1268
+#: src/libslic3r/Print.cpp:1294
 msgid "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)."
 msgstr "La Torre di Spurgo attualmente non supporta la volumetrica E (use_volumetric_e=0)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:115
-msgid "The Wipe Tower currently supports the non-soluble supports only\nif they are printed with the current extruder without triggering a tool change.\n(both support_material_extruder and support_material_interface_extruder need to be set to 0)."
+#: src/slic3r/GUI/ConfigManipulation.cpp:114
+msgid ""
+"The Wipe Tower currently supports the non-soluble supports only\n"
+"if they are printed with the current extruder without triggering a tool change.\n"
+"(both support_material_extruder and support_material_interface_extruder need to be set to 0)."
 msgstr "La Torre di Spurgo attualmente è compatibile con i supporti non solubili solamente se questi sono stampati con l'attuale estrusore senza l'innesco di un cambio attrezzo. (entrambi support_material_extruder e support_material_interface_extruder devono essere impostati a 0)."
 
-#: src/libslic3r/Print.cpp:1400
+#: src/libslic3r/Print.cpp:1426
 msgid "The Wipe Tower currently supports the non-soluble supports only if they are printed with the current extruder without triggering a tool change. (both support_material_extruder and support_material_interface_extruder need to be set to 0)."
 msgstr "La Torre di Spurgo attualmente è compatibile con i supporti non solubili solamente se questi sono stampati con l'attuale estrusore senza l'innesco di un cambio attrezzo. (entrambi support_material_extruder e support_material_interface_extruder devono essere impostati a 0)."
 
-#: src/libslic3r/Print.cpp:1270
+#: src/libslic3r/Print.cpp:1296
 msgid "The Wipe Tower is currently not supported for multimaterial sequential prints."
 msgstr "La Torre di spurgo non è al momento supportata per stampe multi-material sequenziali."
 
-#: src/libslic3r/Print.cpp:1262
-msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors."
-msgstr "La torre di spurgo al momento è supportata solo nelle versioni G-code per Marlin, RepRap/Sprinter e Repetier."
+#: src/libslic3r/Print.cpp:1290
+msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors."
+msgstr "La Torre di spurgo è al momento supportata solo da varianti G-code Marlin, RepRap/Sprinter, RepRapFirmware e Repetier."
 
-#: src/libslic3r/Print.cpp:1264
+#: src/libslic3r/Print.cpp:1290
 msgid "The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."
 msgstr "Attualmente la Torre di spurgo è supportata solo con l'indirizzamento relativo dell'estrusore (use_relative_e_distances = 1)."
 
-#: src/libslic3r/Print.cpp:1293
+#: src/libslic3r/Print.cpp:1319
 msgid "The Wipe Tower is only supported for multiple objects if they are printed over an equal number of raft layers"
 msgstr "La Torre di spurgo è supportata con oggetti multipli solo se questi vengono stampati sullo stesso numero di layer di raft"
 
-#: src/libslic3r/Print.cpp:1295
+#: src/libslic3r/Print.cpp:1321
 msgid "The Wipe Tower is only supported for multiple objects if they are printed with the same support_material_contact_distance"
 msgstr "La Torre di spurgo è supportata con oggetti multipli solo se questi vengono stampati sullo stesso support_material_contact_distance"
 
-#: src/libslic3r/Print.cpp:1297
+#: src/libslic3r/Print.cpp:1323
 msgid "The Wipe Tower is only supported for multiple objects if they are sliced equally."
 msgstr "La Torre di spurgo è supportata con oggetti multipli solo se questi sono processati allo stesso modo."
 
-#: src/libslic3r/Print.cpp:1291
+#: src/libslic3r/Print.cpp:1317
 msgid "The Wipe Tower is only supported for multiple objects if they have equal layer heights"
 msgstr "La Torre di spurgo è supportata con oggetti multipli solo se questi hanno la stessa altezza layer"
 
-#: src/libslic3r/Print.cpp:1257
+#: src/libslic3r/Print.cpp:1283
 msgid "The wipe tower is only supported if all extruders have the same nozzle diameter and use filaments of the same diameter."
 msgstr "La torre di spurgo è supportata solo se tutti gli estrusori hanno l'ugello con lo stesso diametro ed utilizzano filamenti con lo stesso diametro."
 
-#: src/libslic3r/Print.cpp:1339
+#: src/libslic3r/Print.cpp:1365
 msgid "The Wipe tower is only supported if all objects have the same variable layer height"
 msgstr "La Torre di spurgo è supportata solo se tutti gli oggetti hanno la stessa altezza layer variabile"
 
-#: src/libslic3r/SLAPrintSteps.cpp:621
+#: src/slic3r/GUI/Plater.cpp:3563
+msgid "There are active warnings concerning sliced models:"
+msgstr "Sono presenti avvisi attivi relativi ai modelli processati:"
+
+#: src/libslic3r/SLAPrintSteps.cpp:619
 msgid "There are unprintable objects. Try to adjust support settings to make the objects printable."
 msgstr "Sono presenti oggetti non stampabili. Prova a regolare le impostazioni dei supporti per rendere gli oggetti stampabili."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1030
-msgid "There is a color change for extruder that has not been used before.\nCheck your settings to avoid redundant color changes."
-msgstr "È presente un cambio colore per l'estrusore che non è stato usato prima.\nControlla le impostazioni per evitare cambi colore ridondanti."
+#: src/slic3r/GUI/DoubleSlider.cpp:1155
+msgid ""
+"There is a color change for extruder that has not been used before.\n"
+"Check your settings to avoid redundant color changes."
+msgstr ""
+"È presente un cambio colore per l'estrusore che non è stato usato prima.\n"
+"Controlla le impostazioni per evitare cambi colore ridondanti."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1024
-msgid "There is a color change for extruder that won't be used till the end of print job.\nThis code won't be processed during G-code generation."
-msgstr "È presente un cambio colore per l'estrusore che non sarà utilizzato fino alla fine del lavoro di stampa.\nQuesto codice non sarà processato durante la generazione del G-code."
+#: src/slic3r/GUI/DoubleSlider.cpp:1149
+msgid ""
+"There is a color change for extruder that won't be used till the end of print job.\n"
+"This code won't be processed during G-code generation."
+msgstr ""
+"È presente un cambio colore per l'estrusore che non sarà utilizzato fino alla fine del lavoro di stampa.\n"
+"Questo codice non sarà processato durante la generazione del G-code."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1027
-msgid "There is an extruder change set to the same extruder.\nThis code won't be processed during G-code generation."
-msgstr "È presente un cambio estrusore impostato nello stesso estrusore.\nQuesto codice non verrà processato durante la generazione del G-code."
+#: src/slic3r/GUI/DoubleSlider.cpp:1152
+msgid ""
+"There is an extruder change set to the same extruder.\n"
+"This code won't be processed during G-code generation."
+msgstr ""
+"È presente un cambio estrusore impostato nello stesso estrusore.\n"
+"Questo codice non verrà processato durante la generazione del G-code."
+
+#: src/libslic3r/GCode.cpp:604
+msgid "There is an object with no extrusions on the first layer."
+msgstr "C'è un oggetto senza estrusioni sul primo layer."
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:225
-#, possible-c-format
+#, c-format
 msgid "This %s version: %s"
 msgstr "%s versione: %s"
 
-#: src/slic3r/GUI/Tab.cpp:982
-msgid "This action is not revertable.\nDo you want to proceed?"
-msgstr "Questa azione non è reversibile.\nVuoi continuare?"
+#: src/slic3r/GUI/Tab.cpp:1244
+msgid ""
+"This action is not revertable.\n"
+"Do you want to proceed?"
+msgstr ""
+"Questa azione non è reversibile.\n"
+"Vuoi continuare?"
 
-#: src/libslic3r/PrintConfig.cpp:165
+#: src/libslic3r/PrintConfig.cpp:199
 msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Questo codice è inserito tra gli oggetti quando si utilizza una stampa sequenziale. Come predefinito, la temperatura di estrusione e del piano sono resettate con il comando non-attesa; in ogni caso se nel codice personalizzato vengono rilevati i comandi M104,M109,M140 o M190, Slic3r non aggiungerà i comandi di temperatura. Si fa presente che puoi usare variabili sostitutive per tutte le impostazioni di Slic3r, quindi puoi inserire un comando \"M109 S[first_layer_temperature]\" quando preferisci."
 
-#: src/libslic3r/PrintConfig.cpp:1081
+#: src/libslic3r/PrintConfig.cpp:1174
 msgid "This custom code is inserted at every layer change, right after the Z move and before the extruder moves to the first layer point. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Questo codice personalizzato è inserito ad ogni cambio layer, subito dopo il movimento Z e prima che l'estrusore si sposti al punto del primo layer. Si fa presente che puoi usare variabili sostitutive per tutte le impostazioni di Slic3r sia per [layer_num] che per [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:154
+#: src/libslic3r/PrintConfig.cpp:188
 msgid "This custom code is inserted at every layer change, right before the Z move. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Questo codice personalizzato è inserito ad ogni cambio layer, subito prima del movimento Z. Si fa presente che puoi usare variabili sostitutive per tutte le impostazioni di Slic3r  sia per [layer_num] che per [layer_z]."
 
-#: src/libslic3r/PrintConfig.cpp:2094
+#: src/libslic3r/PrintConfig.cpp:2237
 msgid "This custom code is inserted before every toolchange. Placeholder variables for all PrusaSlicer settings as well as {previous_extruder} and {next_extruder} can be used. When a tool-changing command which changes to the correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit no other such command. It is therefore possible to script custom behaviour both before and after the toolchange."
 msgstr "Questo codice personalizzato è inserito prima di ogni cambio attrezzo. Possono essere usate delle variabili segnaposto per tutte le impostazioni di PrusaSlicer come {previous_extruder} e {next_extruder}. Quando viene incluso un comando di cambio attrezzo che cambia all'estrusore corretto (come T{next_extruder}), PrusaSlicer non emetterà altri comandi simili. È per tanto possibile elaborare un comportamento personalizzato sia prima che dopo il cambio attrezzo."
 
-#: src/libslic3r/PrintConfig.cpp:396
+#: src/libslic3r/PrintConfig.cpp:430
 msgid "This end procedure is inserted at the end of the output file, before the printer end gcode (and before any toolchange from this filament in case of multimaterial printers). Note that you can use placeholder variables for all PrusaSlicer settings. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Questa procedura finale è inserita alla fine del file di output, prima che la stampante completi il gcode (e prima di qualunque cambio attrezzo da questo filamento in caso di stampanti multi-material). Da notare che è possibile inserire variabili segnaposto per tutte le impostazioni di PrusaSlicer. Se hai estrusori multipli, il gcode è processato nell'ordine degli estrusori."
 
-#: src/libslic3r/PrintConfig.cpp:386
+#: src/libslic3r/PrintConfig.cpp:420
 msgid "This end procedure is inserted at the end of the output file. Note that you can use placeholder variables for all PrusaSlicer settings."
 msgstr "Questa procedura finale è inserita alla fine del file di output. Da notare che è possibile usare variabili segnaposto per tutte le impostazioni di PrusaSlicer."
 
-#: src/libslic3r/PrintConfig.cpp:1258 src/libslic3r/PrintConfig.cpp:1269
+#: src/libslic3r/PrintConfig.cpp:1366 src/libslic3r/PrintConfig.cpp:1377
 msgid "This experimental setting is used to limit the speed of change in extrusion rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."
 msgstr "Questa impostazione sperimentale è utilizzata per limitare la velocità del cambio nel fattore di estrusione.  Un valore di 1.8 mm³/s² assicura che un cambio dal fattore di estrusione di 1.8 mm³/s (larghezza estrusione 0.45mm, altezza estrusione di 0.2mm, avanzamento 20 mm/s) a 5.4 mm³/s (avanzamento a 60 mm/s) impiegherà almeno 2 secondi."
 
-#: src/libslic3r/PrintConfig.cpp:1248
+#: src/libslic3r/PrintConfig.cpp:1356
 msgid "This experimental setting is used to set the maximum volumetric speed your extruder supports."
 msgstr "Questa impostazione sperimentale è utilizzata per impostare la massima velocità volumetrica supportata dal tuo estrusore."
 
-#: src/libslic3r/PrintConfig.cpp:2162
+#: src/libslic3r/PrintConfig.cpp:2305
 msgid "This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin."
 msgstr "Questa funziona sperimentale utilizza i comandi G10 e G11 per permettere al firmware la gestione della retrazione. È supportata solo nel Marlin recente."
 
-#: src/libslic3r/PrintConfig.cpp:2176
+#: src/libslic3r/PrintConfig.cpp:2319
 msgid "This experimental setting uses outputs the E values in cubic millimeters instead of linear millimeters. If your firmware doesn't already know filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' in your start G-code in order to turn volumetric mode on and use the filament diameter associated to the filament selected in Slic3r. This is only supported in recent Marlin."
 msgstr "Questa impostazione sperimentale produce un valore in uscita di E  in millimetri cubici anziché in millimetri lineari. Se il tuo firmware non sa ancora qual'è il diametro del filamento, puoi inserire un comando tipo 'M200 D[filament_diameter_0] T0' nel tuo G-code iniziale in modo da attivare la funzione volumetrica e usare il diametro associato al filamento selezionato su Slic3r. Questa funziona è supportata solo nel Marlin più recente."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3972
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4459
 msgid "This extruder will be set for selected items"
 msgstr "L'estrusore sarà impostato per gli elementi selezionati"
 
-#: src/libslic3r/PrintConfig.cpp:224
+#: src/libslic3r/PrintConfig.cpp:258
 msgid "This factor affects the amount of plastic for bridging. You can decrease it slightly to pull the extrudates and prevent sagging, although default settings are usually good and you should experiment with cooling (use a fan) before tweaking this."
 msgstr "Questo valore influenza la quantità di plastica per il bridging. Puoi diminuirlo leggermente per tendere il materiale estruso ed evitare che si afflosci, sebbene le impostazioni predefinite sono generalmente buone ed è consigliabile sperimentare con il raffreddamento (usare la ventola) prima di modificare questo valore."
 
-#: src/libslic3r/PrintConfig.cpp:546
+#: src/libslic3r/PrintConfig.cpp:582
 msgid "This factor changes the amount of flow proportionally. You may need to tweak this setting to get nice surface finish and correct single wall widths. Usual values are between 0.9 and 1.1. If you think you need to change this more, check filament diameter and your firmware E steps."
 msgstr "Questo valore modifica proporzionalmente il valore del flusso. Dovrai modificare questa impostazione per ottenere una buona finitura superficiale e correggere la larghezza delle pareti singole. Normalmente i valori sono tra 0.9 e 1.1. Se ritieni di dover modificare questo valore ulteriormente, controlla il diametro del filamento e i passi E del tuo firmware."
 
-#: src/libslic3r/PrintConfig.cpp:214
+#: src/libslic3r/PrintConfig.cpp:248
 msgid "This fan speed is enforced during all bridges and overhangs."
 msgstr "Questa velocità della ventola verrà forzata durante tutti i bridge e overhang."
 
-#: src/libslic3r/PrintConfig.cpp:992
+#: src/libslic3r/PrintConfig.cpp:1036
 msgid "This feature allows to combine infill and speed up your print by extruding thicker infill layers while preserving thin perimeters, thus accuracy."
 msgstr "Questa funzione permette di combinare il riempimento e velocizza il tempo di stampa estrudendo layer di infill più spessi conservando tuttavia i perimetri sottili, e quindi l'accuratezza."
 
-#: src/libslic3r/PrintConfig.cpp:1746
+#: src/libslic3r/PrintConfig.cpp:1861
 msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
 msgstr "Questa funzione permette di forzare un layer solido ogni tot layer. Zero per disabilitare. È possibile impostare qualunque valore (per esempio 9999); Slic3r sceglierà automaticamente il maggior numero possibile di layer da combinare secondo il diametro dell'ugello e l'altezza layer."
 
-#: src/libslic3r/PrintConfig.cpp:1795
+#: src/libslic3r/PrintConfig.cpp:1910
 msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
 msgstr "Questa funzione solleverà Z gradualmente durante la stampa di un oggetto a parete singola allo scopo di rimuovere qualunque giunzione. Questa opzione richiede un singolo perimetro, nessun riempimento, nessun layer solido superiore e nessun materiale di supporto. È possibile comunque impostare qualunque numero di layer solidi inferiori così come per i giri di skirt/brim. Non funzionerà stampando più di un oggetto."
 
-#: src/slic3r/GUI/Plater.cpp:2367
+#: src/slic3r/GUI/Plater.cpp:2329
 msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
 msgstr "Non è possibile caricare questo file in modalità semplice. Si desidera passare alla modalità avanzata?"
 
-#: src/slic3r/GUI/Plater.cpp:2357
-msgid "This file contains several objects positioned at multiple heights.\nInstead of considering them as multiple objects, should I consider\nthis file as a single object having multiple parts?"
-msgstr "Questo file contiene numerosi oggetti posizionati ad altezze multiple. Invece di considerarli come oggetti multipli, devo considerare \nquesto file come un oggetto singolo con parti multiple?"
+#: src/slic3r/GUI/Plater.cpp:2319
+msgid ""
+"This file contains several objects positioned at multiple heights.\n"
+"Instead of considering them as multiple objects, should I consider\n"
+"this file as a single object having multiple parts?"
+msgstr ""
+"Questo file contiene numerosi oggetti posizionati ad altezze multiple. Invece di considerarli come oggetti multipli, devo considerare \n"
+"questo file come un oggetto singolo con parti multiple?"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:332
-#, possible-c-format
-msgid "This firmware hex file does not match the printer model.\nThe hex file is intended for: %s\nPrinter reported: %s\n\nDo you want to continue and flash this hex file anyway?\nPlease only continue if you are sure this is the right thing to do."
-msgstr "Questo file hex di firmware non è corretto per il modello della stampante. \nIl file hex è per: %s\nLa stampante è: %s\n\nVuoi continuare ed installare il firmware comunque?\nContinua solo se sei certo che sia la cosa giusta da fare."
+#, c-format
+msgid ""
+"This firmware hex file does not match the printer model.\n"
+"The hex file is intended for: %s\n"
+"Printer reported: %s\n"
+"\n"
+"Do you want to continue and flash this hex file anyway?\n"
+"Please only continue if you are sure this is the right thing to do."
+msgstr ""
+"Questo file hex di firmware non è corretto per il modello della stampante. \n"
+"Il file hex è per: %s\n"
+"La stampante è: %s\n"
+"\n"
+"Vuoi continuare ed installare il firmware comunque?\n"
+"Continua solo se sei certo che sia la cosa giusta da fare."
 
-#: src/libslic3r/PrintConfig.cpp:314
+#: src/libslic3r/PrintConfig.cpp:348
 msgid "This flag enables the automatic cooling logic that adjusts print speed and fan speed according to layer printing time."
 msgstr "Questa funzione abilita il raffreddamento automatico che regola la velocità di stampa e la velocità della ventola in base al tempo di stampa del layer."
 
-#: src/slic3r/GUI/Plater.cpp:536
+#: src/slic3r/GUI/Plater.cpp:402
 msgid "This flag enables the brim that will be printed around each object on the first layer."
 msgstr "La spunta su questa opzione abilita il brim che verrà stampato attorno ad ogni oggetto nel primo layer."
 
-#: src/libslic3r/PrintConfig.cpp:1538
+#: src/libslic3r/PrintConfig.cpp:1646
 msgid "This flag enforces a retraction whenever a Z move is done."
 msgstr "Questo contrassegno forza una retrazione ogni volta che viene effettuato un movimento di Z."
 
-#: src/libslic3r/PrintConfig.cpp:2194
+#: src/libslic3r/PrintConfig.cpp:2337
 msgid "This flag will move the nozzle while retracting to minimize the possible blob on leaky extruders."
 msgstr "Questo contrassegno farà spostare l'ugello durante la retrazione in modo da minimizzare il possibile grumo con estrusori che trasudano."
 
-#: src/slic3r/GUI/Tab.cpp:953
+#: src/libslic3r/PrintConfig.cpp:1961
+msgid "This G-code will be used as a code for the color change"
+msgstr "Questo G-code verrà utilizzato come codice per il cambio colore"
+
+#: src/libslic3r/PrintConfig.cpp:1970
+msgid "This G-code will be used as a code for the pause print"
+msgstr "Questo G-code sarà usato come codice per la pausa di stampa"
+
+#: src/libslic3r/PrintConfig.cpp:1979
+msgid "This G-code will be used as a custom code"
+msgstr "Questo G-code verrà utilizzato come codice personalizzato"
+
+#: src/slic3r/GUI/Tab.cpp:1272
 msgid "This is a default preset."
 msgstr "Questo è un preset predefinito."
 
-#: src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2930
 msgid "This is a relative measure of support points density."
 msgstr "Questa è una misura relativa della densità dei punti di supporto."
 
-#: src/slic3r/GUI/Tab.cpp:2338
+#: src/slic3r/GUI/Tab.cpp:2507
 msgid "This is a single extruder multimaterial printer, diameters of all extruders will be set to the new value. Do you want to proceed?"
 msgstr "Questa è una stampante multi-material ad estrusore singolo, i diametri di tutti gli estrusori verranno impostati al nuovo valore. Vuoi continuare?"
 
-#: src/slic3r/GUI/Tab.cpp:955
+#: src/slic3r/GUI/Tab.cpp:1274
 msgid "This is a system preset."
 msgstr "Questo è un preset di sistema."
 
-#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:583
+#: src/libslic3r/PrintConfig.cpp:559 src/libslic3r/PrintConfig.cpp:619
 msgid "This is only used in the Slic3r interface as a visual help."
 msgstr "Utilizzato solo nell'interfaccia di Slic3r come aiuto visivo."
 
-#: src/libslic3r/PrintConfig.cpp:336
+#: src/libslic3r/PrintConfig.cpp:370
 msgid "This is the acceleration your printer will be reset to after the role-specific acceleration values are used (perimeter/infill). Set zero to prevent resetting acceleration at all."
 msgstr "Questa è l'accelerazione a cui la stampante sarà reimpostata dopo aver utilizzato un valore di accelerazione per un ruolo specifico (perimetro/riempimento). Imposta a zero per evitare del tutto la reimpostazione dell'accelerazione."
 
-#: src/libslic3r/PrintConfig.cpp:194
+#: src/libslic3r/PrintConfig.cpp:228
 msgid "This is the acceleration your printer will use for bridges. Set zero to disable acceleration control for bridges."
 msgstr "Questa è l'accelerazione che la tua stampante utilizzerà per i bridge. Impostala a zero per disattivare il controllo dell'accelerazione per i bridge."
 
-#: src/libslic3r/PrintConfig.cpp:860
+#: src/libslic3r/PrintConfig.cpp:900
 msgid "This is the acceleration your printer will use for first layer. Set zero to disable acceleration control for first layer."
 msgstr "Questa è l'accelerazione che la stampante utilizzerà per il primo layer. Imposta a zero per disattivare il controllo dell'accelerazione per il primo layer."
 
-#: src/libslic3r/PrintConfig.cpp:982
+#: src/libslic3r/PrintConfig.cpp:1026
 msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
 msgstr "Questa è l'accelerazione che la stampante utilizzerà per il riempimento. Imposta a zero per disattivare il controllo dell'accelerazione per il riempimento."
 
-#: src/libslic3r/PrintConfig.cpp:1400
+#: src/libslic3r/PrintConfig.cpp:1508
 msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
 msgstr "Questa è l'accelerazione che la stampante utilizzerà per i perimetri. Un valore alto come 9000 solitamente produce dei buoni risultati se l'hardware è all'altezza. Imposta a zero per disattivare il controllo dell'accelerazione per i perimetri."
 
-#: src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1435
 msgid "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"
 msgstr "Questo è il diametro dell'ugello dell'estrusore (per esempio: 0.5, 0.35 ecc.)"
 
-#: src/libslic3r/PrintConfig.cpp:1227
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:1335
+#, c-format
 msgid "This is the highest printable layer height for this extruder, used to cap the variable layer height and support layer height. Maximum recommended layer height is 75% of the extrusion width to achieve reasonable inter-layer adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter."
 msgstr "Questa è la massima altezza layer stampabile per questo estrusore, usata come limite per l'altezza variabile dei layer e l'altezza dei layer di supporto. L'altezza layer massima raccomandata è il 75% della larghezza di estrusione, in modo da ottenere una buona adesione tra i layer. Se impostato a 0, l'altezza layer è limitata al 75% del diametro dell'ugello."
 
-#: src/libslic3r/PrintConfig.cpp:1290
+#: src/libslic3r/PrintConfig.cpp:1398
 msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
 msgstr "Questa è l'altezza minima stampabile per questo estrusore e limita la risoluzione per l'altezza variabile dei layer.  Valori tipici sono compresi tra 0.05 mm e 0.1 mm."
 
-#: src/libslic3r/GCode.cpp:639
+#: src/libslic3r/GCode.cpp:624
 msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
 msgstr "Questo solitamente è causato da estrusioni molto piccole o da un modello difettoso. Provare a riparare il modello o cambiare il suo orientamento sul piano."
 
-#: src/libslic3r/PrintConfig.cpp:2215
+#: src/libslic3r/PrintConfig.cpp:2358
 msgid "This matrix describes volumes (in cubic milimetres) required to purge the new filament on the wipe tower for any given pair of tools."
 msgstr "Questa matrice descrive il volume (in millimetri cubici) necessario per spurgare il filamento nella torre di spurgo per una qualunque coppia di attrezzi."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878
-msgid "This operation is irreversible.\nDo you want to proceed?"
-msgstr "Questa operazione è irreversibile.\nVuoi continuare?"
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:928
+msgid ""
+"This operation is irreversible.\n"
+"Do you want to proceed?"
+msgstr ""
+"Questa operazione è irreversibile.\n"
+"Vuoi continuare?"
 
-#: src/libslic3r/PrintConfig.cpp:1442
+#: src/libslic3r/PrintConfig.cpp:1550
 msgid "This option sets the number of perimeters to generate for each layer. Note that Slic3r may increase this number automatically when it detects sloping surfaces which benefit from a higher number of perimeters if the Extra Perimeters option is enabled."
 msgstr "Questa opzione imposta il numero di perimetri da generare per ogni layer. Da notare che Slic3r aumenta questo numero automaticamente quando rileva superfici inclinate che potrebbero beneficiare di un aumento del numero dei perimetri se l'opzione Perimetri aggiuntivi è attiva."
 
-#: src/libslic3r/PrintConfig.cpp:1356
+#: src/libslic3r/PrintConfig.cpp:1464
 msgid "This option will drop the temperature of the inactive extruders to prevent oozing. It will enable a tall skirt automatically and move extruders outside such skirt when changing temperatures."
 msgstr "Questa opzione abbasserà la temperatura degli estrusori inattivi per prevenire oozing (trasudazione). Attiverà automaticamente uno skirt alto e muoverà l'estrusore al di fuori di questo skirt al cambiamento di temperature."
 
-#: src/libslic3r/PrintConfig.cpp:1029
+#: src/libslic3r/PrintConfig.cpp:1073
 msgid "This option will limit infill to the areas actually needed for supporting ceilings (it will act as internal support material). If enabled, slows down the G-code generation due to the multiple checks involved."
 msgstr "Questa opzione limiterà il riempimento alle aree che effettivamente hanno bisogno di un supporto per i soffitti (si comporterà come un materiale di supporto interno). Se attivato, rallenterà la generazione del G-code a causa dei molteplici controlli necessari."
 
-#: src/libslic3r/PrintConfig.cpp:1022
+#: src/libslic3r/PrintConfig.cpp:1066
 msgid "This option will switch the print order of perimeters and infill, making the latter first."
 msgstr "Questa opzione sostituirà l'ordine di stampa dei perimetri e del riempimento, realizzando per primo il secondo."
 
-#: src/libslic3r/PrintConfig.cpp:459
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:85
+msgid "This printer will be shown in the presets list as"
+msgstr "La stampante verrà mostrata nell'elenco dei preset come"
+
+#: src/libslic3r/PrintConfig.cpp:495
 msgid "This separate setting will affect the speed of external perimeters (the visible ones). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
 msgstr "Questa impostazione separata avrà effetto sulla velocità dei perimetri esterni (quelli visibili). Se espresso in percentuale (per esempio: 80%) verrà calcolato sull'impostazione della velocità dei perimetri qui sopra. Imposta a zero per automatico."
 
-#: src/libslic3r/PrintConfig.cpp:1717
+#: src/libslic3r/PrintConfig.cpp:1832
 msgid "This separate setting will affect the speed of perimeters having radius <= 6.5mm (usually holes). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
 msgstr "Questa impostazione separata influenzerà la velocità dei perimetri con raggio <=6.5mm (solitamente i buchi). Se espresso in percentuale (per esempio: 80%) sarà calcolato sulla velocità dei perimetri qui sopra. Imposta a zero per automatico."
 
-#: src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1082
 msgid "This setting applies an additional overlap between infill and perimeters for better bonding. Theoretically this shouldn't be needed, but backlash might cause gaps. If expressed as percentage (example: 15%) it is calculated over perimeter extrusion width."
 msgstr "Questa impostazione applica una sovrapposizione aggiuntiva tra perimetri e riempimento per una migliore unione. Teoricamente non sarebbe necessario, ma i contraccolpi possono causare spazi vuoi. Se espresso in percentuale (per esempio: 15%) viene calcolato sulla larghezza d'estrusione del perimetro."
 
@@ -7981,167 +9416,202 @@ msgstr "Questa impostazione applica una sovrapposizione aggiuntiva tra perimetri
 msgid "This setting controls the height (and thus the total number) of the slices/layers. Thinner layers give better accuracy but take more time to print."
 msgstr "Questa impostazione controlla l'altezza (e quindi il numero totale) degli strati/layer. Un layer più sottile sarà più preciso ma sarà necessario più tempo per stampare."
 
-#: src/libslic3r/PrintConfig.cpp:1218
+#: src/libslic3r/PrintConfig.cpp:1326
 msgid "This setting represents the maximum speed of your fan."
 msgstr "Questa impostazione rappresenta la velocità massima della ventola."
 
-#: src/libslic3r/PrintConfig.cpp:1281
+#: src/libslic3r/PrintConfig.cpp:1389
 msgid "This setting represents the minimum PWM your fan needs to work."
 msgstr "Questa impostazione rappresenta la PWM minima (modulazione di larghezza di impulso) che la ventola necessita per lavorare."
 
-#: src/libslic3r/PrintConfig.cpp:1829
+#: src/libslic3r/PrintConfig.cpp:1944
 msgid "This start procedure is inserted at the beginning, after any printer start gcode (and after any toolchange to this filament in case of multi-material printers). This is used to override settings for a specific filament. If PrusaSlicer detects M104, M109, M140 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Questa procedura di inizio è inserita all'inizio, dopo un qualsiasi gcode iniziale (e dopo un qualunque cambio attrezzo per questo filamento nel caso di stampanti multi-material). Viene utilizzato per scavalcare le impostazioni per un filamento specifico. Se PrusaSlicer rileva M104, M109, M140 o M190 nei codici personalizzati, questi comandi non vengono anteposti automaticamente così si è liberi di personalizzare liberamente l'ordine dei comandi di riscaldamento e altre azioni personalizzate. Da notare che è possibile utilizzare delle variabili segnaposto per tutte le impostazioni di PrusaSlicer, così è possibile inserire un comando \"M109 S[first_layer_temperature]\" ovunque lo si desideri. Se hai estrusori multipli, il gcode è processato nell'ordine degli estrusori."
 
-#: src/libslic3r/PrintConfig.cpp:1814
+#: src/libslic3r/PrintConfig.cpp:1929
 msgid "This start procedure is inserted at the beginning, after bed has reached the target temperature and extruder just started heating, and before extruder has finished heating. If PrusaSlicer detects M104 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Questa procedura di inizio è inserita all'inizio, dopo che il piano ha raggiunto la temperatura impostata e appena l'estrusore inizia il riscaldamento, e prima che l'estrusore completi il riscaldamento. Se PrusaSlicer rileva M104 o M190 nel tuo codice personalizzato, questi comandi non vengono anteposti automaticamente così si è liberi di personalizzare l'ordine dei comandi di riscaldamento e altre azioni personalizzate. Da notare che è possibile utilizzare delle variabili segnaposto per tutte le impostazioni di PrusaSlicer, così è possibile inserire un comando \"M109 S[first_layer_temperature]\" ovunque si desideri."
 
-#: src/libslic3r/PrintConfig.cpp:695
+#: src/libslic3r/PrintConfig.cpp:731
 msgid "This string is edited by RammingDialog and contains ramming specific parameters."
 msgstr "Questa stringa viene controllata da RammingDialog e contiene parametri specifici del ramming."
 
-#: src/libslic3r/PrintConfig.cpp:2286
+#: src/libslic3r/PrintConfig.cpp:2429
 msgid "This value will be added (or subtracted) from all the Z coordinates in the output G-code. It is used to compensate for bad Z endstop position: for example, if your endstop zero actually leaves the nozzle 0.3mm far from the print bed, set this to -0.3 (or fix your endstop)."
 msgstr "Questo valore sarà aggiunto (o sottratto) da tutte le coordinate Z nel G-code di output. Viene utilizzato per compensare una posizione di finecorsa Z errata: per esempio, se la posizione minima del finecorsa rimane in realtà 0.3mm lontano dal piano, imposta questo valore a -0.3 (o sistema il finecorsa)."
 
-#: src/libslic3r/PrintConfig.cpp:2208
+#: src/libslic3r/PrintConfig.cpp:2351
 msgid "This vector saves required volumes to change from/to each tool used on the wipe tower. These values are used to simplify creation of the full purging volumes below."
 msgstr "Questo vettore salva il volume necessario per cambiare da/a ogni attrezzo usato per la torre di spurgo. Questi valori vengono usati per semplificare la creazione dei volumi di spurgo completi."
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:216
-#, possible-c-format
-msgid "This version of %s is not compatible with currently installed configuration bundles.\nThis probably happened as a result of running an older %s after using a newer one.\n\nYou may either exit %s and try again with a newer version, or you may re-run the initial configuration. Doing so will create a backup snapshot of the existing configuration before installing files compatible with this %s."
-msgstr "Questa versione di %s non è compatibile con gli attuali gruppi di configurazioni installati.\nProbabilmente è causato dall'esecuzione di una vecchia versione di %s dopo averne utilizzata una più recente.\n\nProva a chiudere %s e riprovare con una versione più recente, o prova ad effettuare nuovamente la configurazione iniziale. Così facendo creerai un'istantanea di backup della configurazione esistente prima di istallare i file compatibili con questo %s."
+#, c-format
+msgid ""
+"This version of %s is not compatible with currently installed configuration bundles.\n"
+"This probably happened as a result of running an older %s after using a newer one.\n"
+"\n"
+"You may either exit %s and try again with a newer version, or you may re-run the initial configuration. Doing so will create a backup snapshot of the existing configuration before installing files compatible with this %s."
+msgstr ""
+"Questa versione di %s non è compatibile con gli attuali gruppi di configurazioni installati.\n"
+"Probabilmente è causato dall'esecuzione di una vecchia versione di %s dopo averne utilizzata una più recente.\n"
+"\n"
+"Prova a chiudere %s e riprovare con una versione più recente, o prova ad effettuare nuovamente la configurazione iniziale. Così facendo creerai un'istantanea di backup della configurazione esistente prima di istallare i file compatibili con questo %s."
 
-#: src/libslic3r/PrintConfig.cpp:2458
+#: src/libslic3r/PrintConfig.cpp:2601
 msgid "This will apply a gamma correction to the rasterized 2D polygons. A gamma value of zero means thresholding with the threshold in the middle. This behaviour eliminates antialiasing without losing holes in polygons."
 msgstr "Questo applicherà una correzione gamma ai poligoni 2D rasterizzati. Un valore gamma di zero comporta una calcolo della soglia nel mezzo. Questo comportamento elimina l'antialiasing senza perdere i fori nei poligoni."
 
-#: src/libslic3r/PrintConfig.cpp:2081
+#: src/libslic3r/PrintConfig.cpp:2224
 msgid "Threads"
 msgstr "Thread"
 
-#: src/libslic3r/PrintConfig.cpp:2082
+#: src/libslic3r/PrintConfig.cpp:2225
 msgid "Threads are used to parallelize long-running tasks. Optimal threads number is slightly above the number of available cores/processors."
 msgstr "I thread sono utilizzati per parallelizzare operazioni di lunga durata. Il numero di thread ottimali è leggermente superiore al numero di core / processori disponibili."
 
-#: src/slic3r/GUI/Tab.cpp:2093
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235
+msgid "Threshold:"
+msgstr "Soglia:"
+
+#: src/slic3r/GUI/Tab.cpp:2263
 msgid "Tilt"
 msgstr "Inclina"
 
-#: src/slic3r/GUI/Tab.cpp:2094
+#: src/slic3r/GUI/Tab.cpp:2264
 msgid "Tilt time"
 msgstr "Tempo di tilt"
 
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
 #: src/slic3r/GUI/RammingChart.cpp:76
 msgid "Time"
 msgstr "Tempo"
 
-#: src/libslic3r/PrintConfig.cpp:687
+#: src/libslic3r/PrintConfig.cpp:723
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Tempo per il firmware della stampante (o per l'unità Multi Material 2.0) per il caricamento del nuovo filamento durante il cambio attrezzo (quando viene eseguito il T code). Questa durata viene aggiunta alla stima del tempo totale di stampa del G-code."
 
-#: src/libslic3r/PrintConfig.cpp:702
+#: src/libslic3r/PrintConfig.cpp:738
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Tempo per il firmware della stampante (o per l'unità Multi Material 2.0) per lo scaricamento del nuovo filamento durante il cambio attrezzo (quando viene eseguito il T code). Questa durata viene aggiunta alla stima del tempo totale di stampa del G-code."
 
-#: src/libslic3r/PrintConfig.cpp:2407
+#: src/libslic3r/PrintConfig.cpp:2550
 msgid "Time of the fast tilt"
 msgstr "Tempo di inclinazione veloce"
 
-#: src/libslic3r/PrintConfig.cpp:2416
+#: src/libslic3r/PrintConfig.cpp:2559
 msgid "Time of the slow tilt"
 msgstr "Tempo di inclinazione lenta"
 
-#: src/libslic3r/PrintConfig.cpp:641
+#: src/libslic3r/PrintConfig.cpp:677
 msgid "Time to wait after the filament is unloaded. May help to get reliable toolchanges with flexible materials that may need more time to shrink to original dimensions."
 msgstr "Tempo di attesa dopo lo scarico del filamento. Può aiutare ad ottenere cambi affidabili con materiali flessibili che potrebbero richiedere più tempo per tornare alle dimensioni originali."
 
-#: src/slic3r/GUI/Tab.cpp:966
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "to"
+msgstr "a"
+
+#: src/slic3r/GUI/Tab.cpp:1284
 msgid "To do that please specify a new name for the preset."
 msgstr "Per favore specifica un nuovo nome per il preset per effettuare l'operazione."
 
-#: src/slic3r/GUI/Plater.cpp:4014
+#: src/slic3r/GUI/Plater.cpp:3934
 msgid "To objects"
 msgstr "In oggetti"
 
-#: src/slic3r/GUI/Plater.cpp:4016
+#: src/slic3r/GUI/Plater.cpp:3936
 msgid "To parts"
 msgstr "In parti"
 
-#: src/slic3r/GUI/Tab.cpp:1756
+#: src/slic3r/Utils/Http.cpp:82
+msgid "To specify the system certificate store manually, please set the %1% environment variable to the correct CA bundle and restart the application."
+msgstr "Per specificare manualmente l'archivio dei certificati di sistema, impostare la variabile di ambiente %1% sul pacchetto CA corretto e riavviare l'applicazione."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:360
 msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain."
 msgstr "Per utilizzare un file CA personalizzato, importa il tuo file CA sul Certificate Store / Keychain."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263
-#, possible-c-format
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:271
+#, c-format
 msgid "Toggle %c axis mirroring"
 msgstr "Attiva / disattiva il mirroring dell'asse %c"
 
-#: src/libslic3r/Zipper.cpp:34
+#: src/libslic3r/miniz_extension.cpp:93
 msgid "too many files"
 msgstr "troppi file"
 
-#: src/libslic3r/SLAPrintSteps.cpp:190
-msgid "Too much overlapping holes."
+#: src/libslic3r/SLAPrintSteps.cpp:192
+msgid "Too many overlapping holes."
 msgstr "Troppi fori sovrapposti."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:227 src/slic3r/GUI/GUI_Preview.cpp:335
-#: src/slic3r/GUI/GUI_Preview.cpp:519 src/slic3r/GUI/GUI_Preview.cpp:574
-#: src/slic3r/GUI/GUI_Preview.cpp:835 src/libslic3r/GCode/PreviewData.cpp:357
+#: src/slic3r/GUI/GCodeViewer.cpp:2241 src/slic3r/GUI/GUI_Preview.cpp:281
+#: src/slic3r/GUI/GUI_Preview.cpp:453 src/slic3r/GUI/GUI_Preview.cpp:693
+#: src/slic3r/GUI/GUI_Preview.cpp:786 src/slic3r/GUI/GUI_Preview.cpp:1270
+#: src/libslic3r/GCode/PreviewData.cpp:362
 msgid "Tool"
 msgstr "Attrezzo"
 
 #: src/slic3r/GUI/WipeTowerDialog.cpp:276
 msgid "Tool #"
-msgstr "Utensile #"
+msgstr "Attrezzo #"
 
-#: src/slic3r/GUI/Tab.cpp:2000 src/libslic3r/PrintConfig.cpp:2093
+#: src/slic3r/GUI/Tab.cpp:2189 src/libslic3r/PrintConfig.cpp:2236
 msgid "Tool change G-code"
 msgstr "G-code cambio attrezzo"
 
-#: src/slic3r/GUI/Tab.cpp:1491
+#: src/slic3r/GUI/GCodeViewer.cpp:2530 src/slic3r/GUI/GUI_Preview.cpp:1474
+msgid "Tool changes"
+msgstr "Cambi attrezzo"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:1479
+msgid "Tool marker"
+msgstr "Indicatore attrezzo"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:223
+msgid "Tool position"
+msgstr "Posizione attrezzo"
+
+#: src/slic3r/GUI/Tab.cpp:1837
 msgid "Toolchange parameters with single extruder MM printers"
 msgstr "Parametri di cambio attrezzo per stampanti MM con estrusore singolo"
 
 #. TRN To be shown in the main menu View->Top
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:662 src/libslic3r/PrintConfig.cpp:2132
-#: src/libslic3r/PrintConfig.cpp:2141
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
+#: src/libslic3r/PrintConfig.cpp:2275 src/libslic3r/PrintConfig.cpp:2284
 msgid "Top"
 msgstr "Superiore"
 
-#: src/slic3r/GUI/PresetHints.cpp:304
+#: src/slic3r/GUI/PresetHints.cpp:302
 msgid "Top / bottom shell thickness hint: Not available due to invalid layer height."
 msgstr "Suggerimento per lo spessore del guscio Superiore / Inferiore: non disponibile a causa di un'altezza dello strato non valida."
 
-#: src/libslic3r/PrintConfig.cpp:415
+#: src/libslic3r/PrintConfig.cpp:449
 msgid "Top fill pattern"
 msgstr "Trama riempimento superiore"
 
-#: src/slic3r/GUI/PresetHints.cpp:323
+#: src/slic3r/GUI/PresetHints.cpp:321
 msgid "Top is open."
 msgstr "La parte superiore è aperta."
 
-#: src/slic3r/GUI/PresetHints.cpp:317
+#: src/slic3r/GUI/PresetHints.cpp:315
 msgid "Top shell is %1% mm thick for layer height %2% mm."
 msgstr "Il guscio superiore è spesso %1% mm per l'altezza layer %2% mm."
 
-#: src/slic3r/GUI/PresetHints.cpp:192
+#: src/slic3r/GUI/PresetHints.cpp:191
 msgid "top solid infill"
 msgstr "riempimento solido superiore"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:242 src/libslic3r/ExtrusionEntity.cpp:315
-#: src/libslic3r/PrintConfig.cpp:2105 src/libslic3r/PrintConfig.cpp:2117
+#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:319
+#: src/libslic3r/ExtrusionEntity.cpp:346 src/libslic3r/PrintConfig.cpp:2248
+#: src/libslic3r/PrintConfig.cpp:2260
 msgid "Top solid infill"
 msgstr "Riempimento solido superiore"
 
-#: src/libslic3r/PrintConfig.cpp:2135
+#: src/libslic3r/PrintConfig.cpp:2278
 msgid "Top solid layers"
 msgstr "Layer solidi superiori"
 
-#: src/slic3r/GUI/MainFrame.cpp:662
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
 msgid "Top View"
 msgstr "Vista superiore"
 
@@ -8157,148 +9627,179 @@ msgstr "Volume totale di ramming"
 msgid "Total ramming time"
 msgstr "Durata totale di ramming"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:516
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:640
+msgid "Transfer"
+msgstr "Trasferisci"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:745
+msgid "Transfer the selected options to the newly selected preset \"%1%\"."
+msgstr "Trasferire le opzioni selezionate nel nuovo preset selezionato \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Transfer the selected settings to the newly selected preset."
+msgstr "Trasferisci le impostazioni selezionate nel nuovo preset selezionato."
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:561
 msgid "Translate"
 msgstr "Traduci"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:300
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:282
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Translation"
 msgstr "Traduzione"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:253 src/libslic3r/PrintConfig.cpp:2152
+#: src/slic3r/GUI/GCodeViewer.cpp:2489 src/slic3r/GUI/GUI_Preview.cpp:335
+#: src/slic3r/GUI/GUI_Preview.cpp:1471 src/libslic3r/PrintConfig.cpp:2295
 msgid "Travel"
 msgstr "Spostamento"
 
-#: src/libslic3r/PrintConfig.cpp:845
+#: src/libslic3r/PrintConfig.cpp:883
 msgid "Triangles"
 msgstr "Triangoli"
 
-#: src/libslic3r/PrintConfig.cpp:3448
+#: src/libslic3r/PrintConfig.cpp:3647
 msgid "Try to repair any non-manifold meshes (this option is implicitly added whenever we need to slice the model to perform the requested action)."
 msgstr "Prova a riparare mesh non-manifold (questa opzione viene aggiunta implicitamente ogni volta che effettuiamo uno slice sul modello per effettuare l'azione richiesta)."
 
-#: src/libslic3r/PrintConfig.cpp:1467
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:165
+msgid "Type here the name of your printer device"
+msgstr "Inserisci qui il nome della tua stampante"
+
+#: src/libslic3r/PrintConfig.cpp:1575
 msgid "Type of the printer."
 msgstr "Tipologia stampante."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013 src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/ConfigWizard.cpp:2524 src/slic3r/GUI/ConfigWizard.cpp:2526
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Type:"
 msgstr "Tipo:"
 
-#: src/slic3r/GUI/Plater.cpp:3428
+#: src/slic3r/GUI/OpenGLManager.cpp:275
+#, c-format
+msgid ""
+"Unable to load the following shaders:\n"
+"%s"
+msgstr ""
+"Impossibile caricare i seguenti shader:\n"
+"%s"
+
+#: src/slic3r/GUI/Plater.cpp:3233
 msgid "Unable to reload:"
 msgstr "Impossibile ricaricare:"
 
-#: src/libslic3r/Zipper.cpp:32
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:137
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:146
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:845
+msgid "Undef"
+msgstr "Undef"
+
+#: src/libslic3r/miniz_extension.cpp:91
 msgid "undefined error"
 msgstr "errore non definito"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/KBShortcutsDialog.cpp:130
-#: src/slic3r/GUI/MainFrame.cpp:581
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/KBShortcutsDialog.cpp:125
+#: src/slic3r/GUI/MainFrame.cpp:1187
 msgid "Undo"
 msgstr "Annulla"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
-#, possible-c-format
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
+#, c-format
 msgid "Undo %1$d Action"
 msgid_plural "Undo %1$d Actions"
 msgstr[0] "Annulla %1$d Azione"
 msgstr[1] "Annulla %1$d Azioni"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Undo History"
-msgstr "Storia Annulla"
+msgstr "Cronologia Annulla"
 
-#: src/libslic3r/Zipper.cpp:56
+#: src/libslic3r/miniz_extension.cpp:115
 msgid "unexpected decompressed size"
 msgstr "dimensione decompressa imprevista"
 
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27
+#: src/slic3r/GUI/GUI_Preview.cpp:299 src/libslic3r/ExtrusionEntity.cpp:310
 msgid "Unknown"
 msgstr "Sconosciuto"
 
-#: src/slic3r/Utils/Duet.cpp:82 src/slic3r/Utils/Duet.cpp:137
-#: src/slic3r/Utils/FlashAir.cpp:119 src/slic3r/Utils/FlashAir.cpp:140
-#: src/slic3r/Utils/FlashAir.cpp:156
+#: src/slic3r/Utils/Duet.cpp:84 src/slic3r/Utils/Duet.cpp:139
+#: src/slic3r/Utils/FlashAir.cpp:122 src/slic3r/Utils/FlashAir.cpp:143
+#: src/slic3r/Utils/FlashAir.cpp:159
 msgid "Unknown error occured"
 msgstr "Si è verificato un errore sconosciuto"
 
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:178
+msgid "Unknown error occured during exporting G-code."
+msgstr "Si è verificato un errore sconosciuto durante l'esportazione del G-code."
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:263
 msgid "unloaded"
 msgstr "scaricato"
 
-#: src/libslic3r/PrintConfig.cpp:623
+#: src/libslic3r/PrintConfig.cpp:659
 msgid "Unloading speed"
 msgstr "Velocità di scaricamento"
 
-#: src/libslic3r/PrintConfig.cpp:632
+#: src/libslic3r/PrintConfig.cpp:668
 msgid "Unloading speed at the start"
 msgstr "Velocità iniziale di scaricamento"
 
-#: src/slic3r/GUI/Tab.cpp:3256
+#: src/slic3r/GUI/Tab.cpp:3693
 msgid "UNLOCKED LOCK"
 msgstr "LUCCHETTO APERTO"
 
-#: src/slic3r/GUI/Tab.cpp:3282
-msgid "UNLOCKED LOCK icon indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\nClick to reset all settings for current option group to the system (or default) values."
-msgstr "L'icona del LUCCHETTO APERTO indica che alcune impostazioni sono state modificate e non sono uguali ai valori di sistema (o predefinite) per il gruppo di opzioni corrente.\nClicca qui per reimpostare tutte le impostazioni del gruppo corrente ai valori di sistema (o predefiniti)."
+#: src/slic3r/GUI/Tab.cpp:3719
+msgid ""
+"UNLOCKED LOCK icon indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
+"Click to reset all settings for current option group to the system (or default) values."
+msgstr ""
+"L'icona del LUCCHETTO APERTO indica che alcune impostazioni sono state modificate e non sono uguali ai valori di sistema (o predefinite) per il gruppo di opzioni corrente.\n"
+"Clicca qui per reimpostare tutte le impostazioni del gruppo corrente ai valori di sistema (o predefiniti)."
 
-#: src/slic3r/GUI/Tab.cpp:3297
-msgid "UNLOCKED LOCK icon indicates that the value was changed and is not equal to the system (or default) value.\nClick to reset current value to the system (or default) value."
+#: src/slic3r/GUI/Tab.cpp:3734
+msgid ""
+"UNLOCKED LOCK icon indicates that the value was changed and is not equal to the system (or default) value.\n"
+"Click to reset current value to the system (or default) value."
 msgstr "L'icona del LUCCHETTO APERTO indica che il valore è stato cambiato e non è uguale al valore di sistema (o predefinito). Clicca per reimpostare il valore corrente al valore di sistema (o predefinito)."
 
-#: src/slic3r/GUI/Plater.cpp:5203
-#, possible-c-format
-msgid "Unmounting successful. The device %s(%s) can now be safely removed from the computer."
-msgstr "Espulsione riuscita. Il dispositivo %s(%s) adesso può essere rimosso in sicurezza dal computer."
-
-#: src/slic3r/GUI/GUI_Preview.cpp:255
-msgid "Unretractions"
-msgstr "De-retrazioni"
-
-#: src/slic3r/GUI/Tab.cpp:2947
-msgid "Unsaved Changes"
-msgstr "Modifiche non salvate"
-
-#: src/slic3r/GUI/GUI_App.cpp:935
-msgid "Unsaved Presets"
-msgstr "Preset non salvati"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
 msgid "Unselect gizmo or clear selection"
 msgstr "Deseleziona gizmo o pulisci selezione"
 
-#: src/libslic3r/Zipper.cpp:60
+#: src/libslic3r/miniz_extension.cpp:119
 msgid "unsupported central directory size"
 msgstr "dimensione della directory centrale non supportata"
 
-#: src/libslic3r/Zipper.cpp:40
+#: src/libslic3r/miniz_extension.cpp:99
 msgid "unsupported encryption"
 msgstr "criptaggio non supportato"
 
-#: src/libslic3r/Zipper.cpp:42
+#: src/libslic3r/miniz_extension.cpp:101
 msgid "unsupported feature"
 msgstr "caratteristica non supportata"
 
-#: src/libslic3r/Zipper.cpp:38
+#: src/libslic3r/miniz_extension.cpp:97
 msgid "unsupported method"
 msgstr "metodo non supportato"
 
-#: src/libslic3r/Zipper.cpp:50
+#: src/libslic3r/miniz_extension.cpp:109
 msgid "unsupported multidisk archive"
 msgstr "archivio multidisk non supportato"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:292
+#: src/slic3r/GUI/OpenGLManager.cpp:267
 msgid "Unsupported OpenGL version"
 msgstr "Versione OpenGL non supportata"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3420
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3883
 msgid "Unsupported selection"
 msgstr "Selezione non supportata"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:955
-#, possible-c-format
+#: src/slic3r/GUI/GCodeViewer.cpp:2183
+msgid "up to"
+msgstr "fino a"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:961
+#, c-format
 msgid "up to %.2f mm"
 msgstr "fino  a %.2f mm"
 
@@ -8306,15 +9807,15 @@ msgstr "fino  a %.2f mm"
 msgid "Update available"
 msgstr "Aggiornamento disponibile"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:779 src/slic3r/GUI/Preferences.cpp:80
+#: src/slic3r/GUI/ConfigWizard.cpp:1138 src/slic3r/GUI/Preferences.cpp:97
 msgid "Update built-in Presets automatically"
 msgstr "Aggiorna automaticamente i Preset integrati"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Updates"
 msgstr "Aggiornamenti"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:786
+#: src/slic3r/GUI/ConfigWizard.cpp:1145
 msgid "Updates are never applied without user's consent and never overwrite user's customized settings."
 msgstr "Gli aggiornamenti non vengono mai applicati senza il consenso dell'utente e non sovrascrivono mai i settaggi personalizzati dell'utente."
 
@@ -8322,7 +9823,7 @@ msgstr "Gli aggiornamenti non vengono mai applicati senza il consenso dell'utent
 msgid "Upgrade"
 msgstr "Aggiorna"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Upload a firmware image into an Arduino based printer"
 msgstr "Carica un'immagine del firmware su una stampante basata su Arduino"
 
@@ -8338,101 +9839,118 @@ msgstr "Carica all'Host di stampa con il seguente nome file:"
 msgid "Uploading"
 msgstr "Caricamento"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
 msgid "Upper Layer"
 msgstr "Layer superiore"
 
-#: src/slic3r/GUI/Tab.cpp:1900
-msgid "USB/Serial connection"
-msgstr "Connessione USB/Seriale"
-
-#: src/libslic3r/PrintConfig.cpp:1662
-msgid "USB/serial port for printer connection."
-msgstr "Porta USB/Seriale per connessione stampante."
-
-#: src/slic3r/GUI/DoubleSlider.cpp:1147
+#: src/slic3r/GUI/DoubleSlider.cpp:1276
 msgid "Use another extruder"
 msgstr "Usa un altro estrusore"
 
-#: src/slic3r/GUI/Preferences.cpp:143
+#: src/slic3r/GUI/Preferences.cpp:220
 msgid "Use custom size for toolbar icons"
 msgstr "Utilizza dimensione personalizzata per le icone degli strumenti"
 
-#: src/libslic3r/PrintConfig.cpp:2161
+#: src/slic3r/GUI/Preferences.cpp:268
+msgid "Use environment map"
+msgstr "Utilizza mappa ambientale"
+
+#: src/libslic3r/PrintConfig.cpp:2304
 msgid "Use firmware retraction"
 msgstr "Usa retrazione firmware"
 
+#: src/slic3r/GUI/ImGuiWrapper.cpp:800 src/slic3r/GUI/Search.cpp:464
+msgid "Use for search"
+msgstr "Usa per cercare"
+
+#: src/libslic3r/PrintConfig.cpp:1218
+msgid "Use for time estimate"
+msgstr "Utilizza per la stima del tempo"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:42
 msgid "Use forward slashes ( / ) as a directory separator if needed."
 msgstr "Usa la barra ( / ) come separatore di cartella se necessario."
 
-#: src/slic3r/GUI/Preferences.cpp:126
+#: src/slic3r/GUI/Preferences.cpp:191
 msgid "Use free camera"
 msgstr "Usa l'inquadratura libera"
 
-#: src/libslic3r/PrintConfig.cpp:2780
+#: src/slic3r/GUI/ConfigWizard.cpp:1188
+msgid "Use inches"
+msgstr "Usa pollici"
+
+#: src/libslic3r/PrintConfig.cpp:2944
 msgid "Use pad"
 msgstr "Utilizza pad"
 
-#: src/slic3r/GUI/Preferences.cpp:119
+#: src/slic3r/GUI/Preferences.cpp:184
 msgid "Use perspective camera"
 msgstr "Usa la visuale prospettica"
 
-#: src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2311
 msgid "Use relative E distances"
 msgstr "Usa distanze E relative"
 
-#: src/slic3r/GUI/Preferences.cpp:104
+#: src/slic3r/GUI/Preferences.cpp:135
 msgid "Use Retina resolution for the 3D scene"
 msgstr "Usa risoluzione Retina per la scena 3D"
 
-#: src/libslic3r/PrintConfig.cpp:540
+#: src/libslic3r/PrintConfig.cpp:576
 msgid "Use this option to set the axis letter associated to your printer's extruder (usually E but some printers use A)."
 msgstr "Usa questa opzione per impostare la lettera dell'asse associato all'estrusore della tua stampante (solitamente E, ma alcune stampanti utilizzano A)."
 
-#: src/libslic3r/PrintConfig.cpp:1893
+#: src/libslic3r/PrintConfig.cpp:2035
 msgid "Use this setting to rotate the support material pattern on the horizontal plane."
 msgstr "Usa questa impostazione per ruotare la trama del materiale di supporto sul piano orizzontale."
 
-#: src/libslic3r/PrintConfig.cpp:2175
+#: src/libslic3r/PrintConfig.cpp:2318
 msgid "Use volumetric E"
 msgstr "Utilizza E volumetrico"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1171
+#: src/slic3r/GUI/DoubleSlider.cpp:1298
 msgid "used"
 msgstr "usato"
 
-#: src/slic3r/GUI/Plater.cpp:237
+#: src/slic3r/GUI/Plater.cpp:243
 msgid "Used Filament (g)"
 msgstr "Filamento usato (g)"
 
-#: src/slic3r/GUI/Plater.cpp:235 src/slic3r/GUI/Plater.cpp:1229
+#: src/slic3r/GUI/Plater.cpp:1141
+msgid "Used Filament (in)"
+msgstr "Filamento usato (in)"
+
+#: src/slic3r/GUI/Plater.cpp:1153
+msgid "Used Filament (in³)"
+msgstr "Filamento usato (in³)"
+
+#: src/slic3r/GUI/Plater.cpp:241 src/slic3r/GUI/Plater.cpp:1141
 msgid "Used Filament (m)"
 msgstr "Filamento usato (m)"
 
-#: src/slic3r/GUI/Plater.cpp:236
+#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1153
 msgid "Used Filament (mm³)"
 msgstr "Filamento usato (mm³)"
 
-#: src/slic3r/GUI/Plater.cpp:1191
+#: src/slic3r/GUI/Plater.cpp:1100
 msgid "Used Material (ml)"
 msgstr "Materiale Usato (ml)"
 
-#: src/slic3r/GUI/Plater.cpp:238
+#: src/slic3r/GUI/Plater.cpp:244
 msgid "Used Material (unit)"
 msgstr "Materiale usato (unità)"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 src/libslic3r/PrintConfig.cpp:132
 msgid "User"
 msgstr "Utente"
 
-#: src/slic3r/GUI/Preset.cpp:1168 src/slic3r/GUI/Preset.cpp:1288
-#: src/slic3r/GUI/PresetBundle.cpp:1677
+#: src/slic3r/GUI/PresetComboBoxes.cpp:230
+#: src/slic3r/GUI/PresetComboBoxes.cpp:778
+#: src/slic3r/GUI/PresetComboBoxes.cpp:934
 msgid "User presets"
 msgstr "Preset utente"
 
-#: src/libslic3r/Zipper.cpp:90
+#: src/libslic3r/miniz_extension.cpp:149
 msgid "validation failed"
 msgstr "convalida non riuscita"
 
@@ -8444,31 +9962,31 @@ msgstr "Valore uguale a quello di sistema"
 msgid "Value was changed and is not equal to the system value or the last saved preset"
 msgstr "Il valore è stato modificato e non è uguale al valore di sistema o all'ultimo preset salvato"
 
-#: src/slic3r/GUI/Tab.cpp:2202
+#: src/slic3r/GUI/Tab.cpp:2371
 msgid "Values in this column are for Normal mode"
 msgstr "I valori in questa colonna sono per la modalità Normale"
 
-#: src/slic3r/GUI/Tab.cpp:2208
+#: src/slic3r/GUI/Tab.cpp:2377
 msgid "Values in this column are for Stealth mode"
 msgstr "I valori in questa colonna sono per la modalità Silenziosa"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:234 src/slic3r/GUI/GLCanvas3D.cpp:4573
+#: src/slic3r/GUI/GLCanvas3D.cpp:231 src/slic3r/GUI/GLCanvas3D.cpp:4978
 msgid "Variable layer height"
 msgstr "Altezza layer variabile"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1709
+#: src/slic3r/GUI/GLCanvas3D.cpp:1786
 msgid "Variable layer height - Adaptive"
 msgstr "Altezza layer variabile - Adattivo"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:599
+#: src/slic3r/GUI/GLCanvas3D.cpp:565
 msgid "Variable layer height - Manual edit"
 msgstr "Altezza layer variabile - Modifica manuale"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1701
+#: src/slic3r/GUI/GLCanvas3D.cpp:1778
 msgid "Variable layer height - Reset"
 msgstr "Altezza layer variabile - Ripristina"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1717
+#: src/slic3r/GUI/GLCanvas3D.cpp:1794
 msgid "Variable layer height - Smooth all"
 msgstr "Altezza layer variabile - Leviga tutto"
 
@@ -8476,19 +9994,20 @@ msgstr "Altezza layer variabile - Leviga tutto"
 msgid "variants"
 msgstr "varianti"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:971
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1289
 msgid "vendor"
 msgstr "produttore"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:565
+#: src/slic3r/GUI/ConfigWizard.cpp:589
 msgid "Vendor:"
 msgstr "Fornitore:"
 
-#: src/libslic3r/PrintConfig.cpp:928
+#: src/libslic3r/PrintConfig.cpp:972
 msgid "Verbose G-code"
 msgstr "G-code verboso"
 
-#: src/slic3r/GUI/AboutDialog.cpp:231 src/slic3r/GUI/MainFrame.cpp:64
+#: src/slic3r/GUI/AboutDialog.cpp:256 src/slic3r/GUI/GUI_App.cpp:239
+#: src/slic3r/GUI/MainFrame.cpp:164
 msgid "Version"
 msgstr "Versione"
 
@@ -8496,24 +10015,36 @@ msgstr "Versione"
 msgid "version"
 msgstr "versione"
 
-#: src/slic3r/GUI/Tab.cpp:1053
+#: src/slic3r/GUI/Tab.cpp:1375
 msgid "Vertical shells"
 msgstr "Gusci verticali"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:218
+#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
 msgid "View"
 msgstr "Vista"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:813
+#: src/slic3r/GUI/ConfigWizard.cpp:1172
 msgid "View mode"
 msgstr "Modalità Visualizzazione"
 
-#: src/libslic3r/SLAPrintSteps.cpp:413 src/libslic3r/SLAPrintSteps.cpp:422
-#: src/libslic3r/SLAPrintSteps.cpp:461
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:666
+msgid ""
+"Visit \"Preferences\" and check \"%1%\"\n"
+"to be asked about unsaved changes again."
+msgstr ""
+"Visita \"Prefereze\" e controlla \"%1%\"\n"
+"per ricevere nuovamente informazioni sui cambiamenti non salvati."
+
+#: src/libslic3r/PrintConfig.cpp:3553
+msgid "Visualize an already sliced and saved G-code"
+msgstr "Visualizza un G-code già processato e salvato"
+
+#: src/libslic3r/SLAPrintSteps.cpp:411 src/libslic3r/SLAPrintSteps.cpp:420
+#: src/libslic3r/SLAPrintSteps.cpp:459
 msgid "Visualizing supports"
 msgstr "Visualizzazione supporti"
 
-#: src/slic3r/GUI/Plater.cpp:161
+#: src/slic3r/GUI/Plater.cpp:167
 msgid "Volume"
 msgstr "Volume"
 
@@ -8521,23 +10052,23 @@ msgstr "Volume"
 msgid "Volume to purge (mm³) when the filament is being"
 msgstr "Il volume di spurgo (mm³) quando il filamento viene"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Volumes in Object reordered"
 msgstr "Volumi in Oggetto riordinati"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Volumetric"
 msgstr "Volumetrico"
 
-#: src/slic3r/GUI/Tab.cpp:1591
+#: src/slic3r/GUI/Tab.cpp:1930
 msgid "Volumetric flow hints not available"
 msgstr "Suggerimenti sul flusso volumetrico non disponibili"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:226
+#: src/slic3r/GUI/GUI_Preview.cpp:280
 msgid "Volumetric flow rate"
 msgstr "Flusso volumetrico"
 
-#: src/libslic3r/GCode/PreviewData.cpp:355
+#: src/slic3r/GUI/GCodeViewer.cpp:2240 src/libslic3r/GCode/PreviewData.cpp:360
 msgid "Volumetric flow rate (mm³/s)"
 msgstr "Flusso volumetrico (mm³/s)"
 
@@ -8545,151 +10076,166 @@ msgstr "Flusso volumetrico (mm³/s)"
 msgid "Volumetric speed"
 msgstr "Velocità volumetrica"
 
-#: src/libslic3r/PrintConfig.cpp:2915
+#: src/libslic3r/PrintConfig.cpp:3079
 msgid "Wall thickness"
 msgstr "Spessore parete"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1270 src/slic3r/GUI/GUI.cpp:251
-#: src/slic3r/GUI/Tab.cpp:3084 src/slic3r/GUI/WipeTowerDialog.cpp:45
-#: src/slic3r/GUI/WipeTowerDialog.cpp:366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1129 src/slic3r/GUI/GUI.cpp:256
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:478
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:502
+#: src/slic3r/GUI/WipeTowerDialog.cpp:45 src/slic3r/GUI/WipeTowerDialog.cpp:366
 msgid "Warning"
 msgstr "Attenzione"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:431
+#: src/slic3r/GUI/NotificationManager.cpp:672
+#: src/slic3r/GUI/NotificationManager.cpp:687
+#: src/slic3r/GUI/NotificationManager.cpp:702
+msgid "WARNING:"
+msgstr "ATTENZIONE:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:449
 msgid "Welcome"
 msgstr "Benvenuto"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:427
-#, possible-c-format
+#: src/slic3r/GUI/ConfigWizard.cpp:445
+#, c-format
 msgid "Welcome to the %s Configuration Assistant"
 msgstr "Benvenuto nell'Assistente di Configurazione di %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:429
-#, possible-c-format
+#: src/slic3r/GUI/ConfigWizard.cpp:447
+#, c-format
 msgid "Welcome to the %s Configuration Wizard"
 msgstr "Benvenuto nella Configurazione Guidata di %s"
 
-#: src/slic3r/GUI/Preferences.cpp:97
+#: src/slic3r/GUI/SavePresetDialog.cpp:310
+msgid "What would you like to do with \"%1%\" preset after saving?"
+msgstr "Cosa desideri fare con il preset \"%1%\" dopo il salvataggio?"
+
+#: src/slic3r/GUI/Preferences.cpp:114
 msgid "When checked, the print and filament presets are shown in the preset editor even if they are marked as incompatible with the active printer"
 msgstr "Quando attivato, i preset di stampa e di filamento vengono mostrati nell'editor dei preset anche se sono segnati come incompatibili con la stampante attiva"
 
-#: src/slic3r/GUI/PresetHints.cpp:224
+#: src/slic3r/GUI/Preferences.cpp:156
+msgid "When closing the application, always ask for unsaved changes"
+msgstr "Alla chiusura dell'applicazione, chiedere sempre riguardo le modifiche non salvate"
+
+#: src/slic3r/GUI/PresetHints.cpp:223
 msgid "when printing"
 msgstr "durante la stampa"
 
-#: src/libslic3r/PrintConfig.cpp:253
+#: src/libslic3r/PrintConfig.cpp:287
 msgid "When printing multi-material objects, this settings will make Slic3r to clip the overlapping object parts one by the other (2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc)."
 msgstr "Durante la stampa di oggetti multi-materiali, questa impostazione farà si che Slic3r unisca le parti sovrapposte dell'oggetto (la seconda sarà collegata con la prima, la terza parte sarà collegata con la prima e la seconda ecc..)."
 
-#: src/libslic3r/PrintConfig.cpp:305
+#: src/libslic3r/PrintConfig.cpp:339
 msgid "When printing multiple objects or copies, this feature will complete each object before moving onto next one (and starting it from its bottom layer). This feature is useful to avoid the risk of ruined prints. Slic3r should warn and prevent you from extruder collisions, but beware."
 msgstr "Durante la stampa di oggetti multipli o copie, questa funzione completerà ciascun oggetto prima di spostarsi al prossimo (e iniziando la stampa dal primo layer). Questa funzione è utile per evitare il rischio di stampe rovinate. Slic3r dovrebbe avvisarti e prevenire collisioni con l'estrusore, ma fai attenzione."
 
-#: src/libslic3r/PrintConfig.cpp:891
+#: src/libslic3r/PrintConfig.cpp:933
 msgid "When printing with very low layer heights, you might still want to print a thicker bottom layer to improve adhesion and tolerance for non perfect build plates. This can be expressed as an absolute value or as a percentage (for example: 150%) over the default layer height."
 msgstr "Durante la stampa di layer molto bassi, potresti comunque aver bisogno di stampare layer inferiori più spessi per migliorare l'adesione e la tolleranza per piani di stampa non perfetti. Questo può essere espresso in valore assoluto o in percentuale (per esempio: 150%) sull'altezza layer predefinita."
 
-#: src/libslic3r/PrintConfig.cpp:1553
+#: src/libslic3r/PrintConfig.cpp:1661
 msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Quando viene attivata la retrazione prima del cambio attrezzo, il filamento è ritirato per la quantità specificata (la lunghezza è misurata sul filamento grezzo, prima che questo entri dentro l'estrusore)."
 
-#: src/libslic3r/PrintConfig.cpp:1545
+#: src/libslic3r/PrintConfig.cpp:1653
 msgid "When retraction is triggered, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Quando viene attivata la retrazione, il filamento viene ritirato per la quantità specificata (la lunghezza è misurata sul filamento grezzo, prima che questo entri dentro l'estrusore)."
 
-#: src/libslic3r/PrintConfig.cpp:1391
+#: src/libslic3r/PrintConfig.cpp:1499
 msgid "When set to zero, the distance the filament is moved from parking position during load is exactly the same as it was moved back during unload. When positive, it is loaded further,  if negative, the loading move is shorter than unloading."
 msgstr "Quando impostato a zero, la distanza percorsa dal filamento in posizione di parcheggio durante il caricamento è esattamente uguale a quella contraria durante lo scaricamento. Quando il valore è positivo, viene caricato maggiormente, se il valore è negativo il movimento di caricamento è più corto dello scaricamento."
 
-#: src/libslic3r/PrintConfig.cpp:1238
+#: src/libslic3r/PrintConfig.cpp:1346
 msgid "When setting other speed settings to 0 Slic3r will autocalculate the optimal speed in order to keep constant extruder pressure. This experimental setting is used to set the highest print speed you want to allow."
 msgstr "Quando le altre velocità sono impostate a 0, Slic3r calcolerà automaticamente la velocità ottimale in modo da mantenere costante la pressione dell'estrusore. Questa impostazione sperimentale è utilizzata per impostare la velocità massima di stampa che vuoi permettere."
 
-#: src/libslic3r/PrintConfig.cpp:1597
+#: src/libslic3r/PrintConfig.cpp:1705
 msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament."
 msgstr "Quando la retrazione è compensata dopo un cambio di attrezzo, l'estrusore spingerà questa quantità addizionale di filamento."
 
-#: src/libslic3r/PrintConfig.cpp:1589
+#: src/libslic3r/PrintConfig.cpp:1697
 msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed."
 msgstr "Quando la retrazione è compensata dopo un movimento di spostamento, l'estrusore spingerà questa quantità addizionale di filamento. Questa impostazione è raramente necessaria."
 
-#: src/slic3r/GUI/Tab.cpp:3263
+#: src/slic3r/GUI/Tab.cpp:3700
 msgid "WHITE BULLET"
 msgstr "PALLINO BIANCO"
 
-#: src/slic3r/GUI/Tab.cpp:3285
+#: src/slic3r/GUI/Tab.cpp:3722
 msgid "WHITE BULLET icon indicates a non system (or non default) preset."
 msgstr "L'icona a forma di PALLINO BIANCO indica un preset non di sistema (o non predefinito)."
 
-#: src/slic3r/GUI/Tab.cpp:3288
+#: src/slic3r/GUI/Tab.cpp:3725
 msgid "WHITE BULLET icon indicates that the settings are the same as in the last saved preset for the current option group."
 msgstr "L'icona a forma di PALLINO BIANCO indica che le impostazioni corrispondono agli ultimi preset salvati per il gruppo di opzioni corrente."
 
-#: src/slic3r/GUI/Tab.cpp:3303
+#: src/slic3r/GUI/Tab.cpp:3740
 msgid "WHITE BULLET icon indicates that the value is the same as in the last saved preset."
 msgstr "L'icona a forma di PALLINO BIANCO indica che il valore è lo stesso dell'ultimo preset salvato."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:223 src/libslic3r/PrintConfig.cpp:2238
+#: src/slic3r/GUI/GUI_Preview.cpp:277 src/libslic3r/PrintConfig.cpp:2381
 msgid "Width"
 msgstr "Larghezza"
 
-#: src/libslic3r/GCode/PreviewData.cpp:349
+#: src/slic3r/GUI/GCodeViewer.cpp:2237 src/libslic3r/GCode/PreviewData.cpp:354
 msgid "Width (mm)"
 msgstr "Larghezza (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:2640
+#: src/libslic3r/PrintConfig.cpp:2783
 msgid "Width from the back sphere center to the front sphere center"
 msgstr "Spessore dal centro della sfera posteriore al centro della sfera anteriore"
 
-#: src/libslic3r/PrintConfig.cpp:2239
+#: src/libslic3r/PrintConfig.cpp:2382
 msgid "Width of a wipe tower"
 msgstr "Larghezza della torre di spurgo"
 
-#: src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3055
 msgid "Width of the connector sticks which connect the object and the generated pad."
 msgstr "Larghezza delle barre di connessione che collegano l'oggetto e il pad generato."
 
-#: src/libslic3r/PrintConfig.cpp:2354
+#: src/libslic3r/PrintConfig.cpp:2497
 msgid "Width of the display"
 msgstr "Larghezza del display"
 
-#: src/slic3r/GUI/PresetHints.cpp:48
+#: src/slic3r/GUI/PresetHints.cpp:47
 msgid "will always run at %1%%%"
 msgstr "lavorerà sempre a %1%%%"
 
-#: src/slic3r/GUI/PresetHints.cpp:55
+#: src/slic3r/GUI/PresetHints.cpp:54
 msgid "will be turned off."
 msgstr "rimarrà spenta."
 
-#: src/libslic3r/PrintConfig.cpp:2441
+#: src/libslic3r/PrintConfig.cpp:2584
 msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
 msgstr "Gonfierà o sgonfierà i poligoni 2D processati in base al segno della correzione."
 
-#: src/libslic3r/PrintConfig.cpp:2261
+#: src/libslic3r/PrintConfig.cpp:2404
 msgid "Wipe into this object"
 msgstr "Spurgo in questo oggetto"
 
-#: src/libslic3r/PrintConfig.cpp:2253
+#: src/libslic3r/PrintConfig.cpp:2396
 msgid "Wipe into this object's infill"
 msgstr "Spurgo nel riempimento di questo oggetto"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101
-#: src/slic3r/GUI/GUI_ObjectList.cpp:619 src/libslic3r/PrintConfig.cpp:2252
-#: src/libslic3r/PrintConfig.cpp:2260
+#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:99
+#: src/slic3r/GUI/GUI_ObjectList.cpp:658 src/libslic3r/PrintConfig.cpp:2395
+#: src/libslic3r/PrintConfig.cpp:2403
 msgid "Wipe options"
 msgstr "Opzioni pulizia"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:248 src/slic3r/GUI/Tab.cpp:1191
-#: src/libslic3r/ExtrusionEntity.cpp:321
+#: src/slic3r/GUI/GUI_Preview.cpp:313 src/slic3r/GUI/Tab.cpp:1521
+#: src/libslic3r/ExtrusionEntity.cpp:326 src/libslic3r/ExtrusionEntity.cpp:360
 msgid "Wipe tower"
 msgstr "Torre di spurgo"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "wipe tower"
 msgstr "torre di spurgo"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:120
-#: src/slic3r/GUI/ConfigManipulation.cpp:140
+#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:139
 msgid "Wipe Tower"
 msgstr "Torre di spurgo"
 
@@ -8697,121 +10243,147 @@ msgstr "Torre di spurgo"
 msgid "Wipe tower - Purging volume adjustment"
 msgstr "Torre di spurgo - Regolazione volume di spurgo"
 
-#: src/slic3r/GUI/Tab.cpp:1488
+#: src/slic3r/GUI/Tab.cpp:1834
 msgid "Wipe tower parameters"
 msgstr "Parametri torre di spurgo"
 
-#: src/libslic3r/PrintConfig.cpp:2245
+#: src/libslic3r/PrintConfig.cpp:2388
 msgid "Wipe tower rotation angle"
 msgstr "Angolo di rotazione della torre di spurgo"
 
-#: src/libslic3r/PrintConfig.cpp:2246
+#: src/libslic3r/PrintConfig.cpp:2389
 msgid "Wipe tower rotation angle with respect to x-axis."
 msgstr "Angolo di rotazione della torre di spurgo rispetto all'asse X."
 
-#: src/libslic3r/PrintConfig.cpp:2193
+#: src/libslic3r/PrintConfig.cpp:2336
 msgid "Wipe while retracting"
 msgstr "Pulisci durante la retrazione"
 
-#: src/slic3r/GUI/PresetHints.cpp:225
+#: src/slic3r/GUI/PresetHints.cpp:224
 msgid "with a volumetric rate"
 msgstr "con una portata volumetrica"
 
-#: src/libslic3r/PrintConfig.cpp:1530
+#: src/libslic3r/PrintConfig.cpp:1638
 msgid "With bowden extruders, it may be wise to do some amount of quick retract before doing the wipe movement."
 msgstr "Con estrusori bowden, potrebbe essere conveniente effettuare una certa retrazione veloce prima di effettuare un movimento di pulizia."
 
-#: src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2198
 msgid "With sheath around the support"
 msgstr "Con guaina attorno al supporto"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:62
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:105
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:68
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:111
 msgid "World coordinates"
 msgstr "Coordinate reali"
 
 #: src/slic3r/GUI/UpdateDialogs.cpp:92
-msgid "Would you like to install it?\n\nNote that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n\nUpdated configuration bundles:"
-msgstr "Vuoi installarlo?\n\nNota: verrà prima creata un'istantanea della configurazione completa. Potrà essere ripristinata in qualunque momento se dovessero presentarsi problemi con la nuova versione.\n\nGruppo di configurazioni aggiornate:"
+msgid ""
+"Would you like to install it?\n"
+"\n"
+"Note that a full configuration snapshot will be created first. It can then be restored at any time should there be a problem with the new version.\n"
+"\n"
+"Updated configuration bundles:"
+msgstr ""
+"Vuoi installarlo?\n"
+"\n"
+"Nota: verrà prima creata un'istantanea della configurazione completa. Potrà essere ripristinata in qualunque momento se dovessero presentarsi problemi con la nuova versione.\n"
+"\n"
+"Gruppo di configurazioni aggiornate:"
 
-#: src/libslic3r/Zipper.cpp:92
+#: src/libslic3r/miniz_extension.cpp:151
 msgid "write calledback failed"
 msgstr "scrittura richiamo non riuscita"
 
-#: src/libslic3r/PrintConfig.cpp:3382
+#: src/libslic3r/PrintConfig.cpp:3581
 msgid "Write information about the model to the console."
 msgstr "Scrivi informazioni sul modello alla console."
 
-#: src/slic3r/Utils/Duet.cpp:131
+#: src/slic3r/Utils/Duet.cpp:133
 msgid "Wrong password"
 msgstr "Password errata"
 
-#: src/libslic3r/PrintConfig.cpp:2225
+#: src/libslic3r/PrintConfig.cpp:2368
 msgid "X coordinate of the left front corner of a wipe tower"
 msgstr "Coordinata X dell'angolo frontale sinistro di una torre di spurgo"
 
-#: src/libslic3r/PrintConfig.cpp:1879
+#: src/libslic3r/PrintConfig.cpp:2021
 msgid "XY separation between an object and its support"
 msgstr "Separazione XY tra un oggetto e il suo supporto"
 
-#: src/libslic3r/PrintConfig.cpp:1881
+#: src/libslic3r/PrintConfig.cpp:2023
 msgid "XY separation between an object and its support. If expressed as percentage (for example 50%), it will be calculated over external perimeter width."
 msgstr "La separazione XY tra l'oggetto e il suo supporto. Se espresso in percentuale (ad esempio 50%), verrà calcolato sulla larghezza del perimetro esterno."
 
-#: src/libslic3r/PrintConfig.cpp:2275
+#: src/libslic3r/PrintConfig.cpp:2418
 msgid "XY Size Compensation"
 msgstr "Compensazione dimensione XY"
 
-#: src/libslic3r/PrintConfig.cpp:2232
+#: src/libslic3r/PrintConfig.cpp:2375
 msgid "Y coordinate of the left front corner of a wipe tower"
 msgstr "Coordinata Y dell'angolo frontale sinistro  di una torre di spurgo"
 
-#: src/slic3r/GUI/Plater.cpp:1170
+#: src/slic3r/GUI/Plater.cpp:1079
 msgid "Yes"
 msgstr "Si"
 
-#: src/libslic3r/PrintConfig.cpp:1317
+#: src/slic3r/GUI/Plater.cpp:1405
+msgid "You can open only one .gcode file at a time."
+msgstr "È possibile aprire un solo file .gcode alla volta."
+
+#: src/libslic3r/PrintConfig.cpp:1425
 msgid "You can put here your personal notes. This text will be added to the G-code header comments."
 msgstr "È possibile inserire qui le note personali. Questo testo verrà aggiunto nei commenti iniziali del G-code."
 
-#: src/libslic3r/PrintConfig.cpp:589
+#: src/libslic3r/PrintConfig.cpp:625
 msgid "You can put your notes regarding the filament here."
 msgstr "È possibile inserire qui le note riguardanti il filamento."
 
-#: src/libslic3r/PrintConfig.cpp:1473
+#: src/libslic3r/PrintConfig.cpp:1581
 msgid "You can put your notes regarding the printer here."
 msgstr "È possibile inserire qui le note riguardanti la stampante."
 
-#: src/libslic3r/PrintConfig.cpp:2579
+#: src/libslic3r/PrintConfig.cpp:2722
 msgid "You can put your notes regarding the SLA print material here."
 msgstr "È possibile inserire qui le proprie note riguardo il materiale di stampa SLA."
 
-#: src/libslic3r/PrintConfig.cpp:360
+#: src/libslic3r/PrintConfig.cpp:394
 msgid "You can set this to a positive value to disable fan at all during the first layers, so that it does not make adhesion worse."
 msgstr "È possibile impostare un valore positivo per disattivare completamente la ventola durante i primi layer, così da non peggiorare l'adesione."
 
-#: src/libslic3r/PrintConfig.cpp:1364
+#: src/libslic3r/PrintConfig.cpp:1472
 msgid "You can use all configuration options as variables inside this template. For example: [layer_height], [fill_density] etc. You can also use [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename], [input_filename_base]."
 msgstr "È possibile utilizzare tutte le opzioni di configurazione come variabili all'interno di questo modello. Ad esempio: [layer_height], [fill_density] ecc. Puoi anche usare [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename ], [nome_filename_input]."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3546
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4009
 msgid "You can't change a type of the last solid part of the object."
 msgstr "Non è possibile modificare il tipo dell'ultima parte solida dell'oggetto."
 
-#: src/slic3r/GUI/Plater.cpp:2390
-#, possible-c-format
+#: src/slic3r/GUI/Plater.cpp:2352
+#, c-format
 msgid "You can't to add the object(s) from %s because of one or some of them is(are) multi-part"
 msgstr "Non è possibile aggiungere oggetti da %s perché uno o più sono multi-parte"
 
-#: src/slic3r/GUI/Plater.cpp:2311
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2254
 msgid "You cannot load SLA project with a multi-part object on the bed"
 msgstr "Non è possibile caricare un progetto SLA con un oggetto multi-parte sul piano"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:578
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:625
 msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
 msgstr "Non è possibile utilizzare la modalità di ridimensionamento non uniforme per una selezione di più oggetti/parti"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
+#: src/slic3r/GUI/SavePresetDialog.cpp:277
+msgid ""
+"You have selected physical printer \"%1%\" \n"
+"with related printer preset \"%2%\""
+msgstr ""
+"Hai selezionato la stampante fisica \"%1%\" \n"
+"con il relativo preset stampante \"%2%\""
+
+#: src/slic3r/GUI/GUI_App.cpp:1078
+msgid "You have the following presets with saved options for \"Print Host upload\""
+msgstr "Sono disponibili i seguenti preset con le opzioni salvate per \"Caricamento Host di stampa\""
+
+#: src/slic3r/GUI/OpenGLManager.cpp:262
 msgid "You may need to update your graphics card driver."
 msgstr "Dovresti aggiornare i driver della scheda video."
 
@@ -8819,77 +10391,107 @@ msgstr "Dovresti aggiornare i driver della scheda video."
 msgid "You must install a configuration update."
 msgstr "È necessario installare un aggiornamento della configurazione."
 
-#: src/slic3r/GUI/Preferences.cpp:172
-#, possible-c-format
+#: src/slic3r/GUI/Preferences.cpp:299
+#, c-format
 msgid "You need to restart %s to make the changes effective."
 msgstr "È necessario riavviare %s per rendere effettive le modifiche."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3421
-#, possible-c-format
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
+msgid "You should to change a name of your printer device. It can't be saved."
+msgstr "Devi cambiare il nome del dispositivo di stampa. Non può essere salvato."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
+#, c-format
 msgid "You started your selection with %s Item."
 msgstr "Hai iniziato la selezione con %s elementi."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1902
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:664
+msgid "You will not be asked about the unsaved changes the next time you close PrusaSlicer."
+msgstr "La prossima volta che chiuderai PrusaSlicer non ti verrà chiesto nulla sulle modifiche non salvate."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:665
+msgid "You will not be asked about the unsaved changes the next time you switch a preset."
+msgstr "La prossima volta che si passa ad un preset non verrà chiesto nulla sulle modifiche non salvate."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:2121
 msgid "Your current changes will delete all saved color changes."
 msgstr "Le modifiche attuali cancelleranno tutti i cambi colore salvati."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1923
+#: src/slic3r/GUI/DoubleSlider.cpp:2141
 msgid "Your current changes will delete all saved extruder (tool) changes."
 msgstr "Le modifiche attuali cancelleranno tutti i cambi estrusore (attrezzo) salvati."
 
-#: src/slic3r/GUI/MainFrame.cpp:911
+#: src/slic3r/GUI/MainFrame.cpp:1612
 msgid "Your file was repaired."
 msgstr "Il file è stato riparato."
 
-#: src/slic3r/GUI/Plater.cpp:2528
+#: src/slic3r/GUI/Plater.cpp:2490
 msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
 msgstr "L'oggetto sembra essere troppo grande, è stato quindi ridimensionato automaticamente per entrare nel piano di stampa."
 
-#: src/libslic3r/PrintConfig.cpp:2285
+#: src/libslic3r/PrintConfig.cpp:2428
 msgid "Z offset"
 msgstr "Offset Z"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:60
-msgid "Zero first layer height is not valid.\n\nThe first layer height will be reset to 0.01."
-msgstr "Altezza primo layer a zero non è valida.\n\nL'altezza del primo layer verrà reimpostata a 0.01."
+#: src/slic3r/GUI/ConfigManipulation.cpp:59
+msgid ""
+"Zero first layer height is not valid.\n"
+"\n"
+"The first layer height will be reset to 0.01."
+msgstr ""
+"Altezza primo layer a zero non è valida.\n"
+"\n"
+"L'altezza del primo layer verrà reimpostata a 0.01."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:48
-msgid "Zero layer height is not valid.\n\nThe layer height will be reset to 0.01."
-msgstr "Altezza layer zero non valida.\n\nL'altezza layer verrà reimpostata a 0.01."
+#: src/slic3r/GUI/ConfigManipulation.cpp:47
+msgid ""
+"Zero layer height is not valid.\n"
+"\n"
+"The layer height will be reset to 0.01."
+msgstr ""
+"Altezza layer zero non valida.\n"
+"\n"
+"L'altezza layer verrà reimpostata a 0.01."
 
-#: src/libslic3r/PrintConfig.cpp:2667
+#: src/libslic3r/PrintConfig.cpp:2831
 msgid "Zig-Zag"
 msgstr "Zig-Zag"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:308
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:294
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Zoom"
 msgstr "Zoom"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:183
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
 msgid "Zoom in"
 msgstr "Zoom in"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:184
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
 msgid "Zoom out"
 msgstr "Zoom out"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
 msgid "Zoom to Bed"
 msgstr "Zoom sul piano"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
-msgid "Zoom to selected object\nor all objects in scene, if none selected"
-msgstr "Zoom sull'oggetto selezionato\no tutti gli oggetti in scena, se nessuno è selezionato"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
+msgid ""
+"Zoom to selected object\n"
+"or all objects in scene, if none selected"
+msgstr ""
+"Zoom sull'oggetto selezionato\n"
+"o tutti gli oggetti in scena, se nessuno è selezionato"
 
-#: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780
-#: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650
-#: src/libslic3r/PrintConfig.cpp:1894 src/libslic3r/PrintConfig.cpp:2049
-#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2727
-#: src/libslic3r/PrintConfig.cpp:2848
+#: src/libslic3r/PrintConfig.cpp:241 src/libslic3r/PrintConfig.cpp:816
+#: src/libslic3r/PrintConfig.cpp:1748 src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:2036 src/libslic3r/PrintConfig.cpp:2191
+#: src/libslic3r/PrintConfig.cpp:2390 src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3012
 msgid "°"
 msgstr "°"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1038 src/slic3r/GUI/ConfigWizard.cpp:1052
+#: src/slic3r/GUI/ConfigWizard.cpp:1404 src/slic3r/GUI/ConfigWizard.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:180 src/libslic3r/PrintConfig.cpp:912
+#: src/libslic3r/PrintConfig.cpp:956 src/libslic3r/PrintConfig.cpp:2209
 msgid "°C"
 msgstr "°C"
diff --git a/resources/localization/pl/PrusaSlicer.mo b/resources/localization/pl/PrusaSlicer.mo
index b81f880a1b7f27a87a27b309589e72d7f65a65ab..ec53d51df05fbb66a7c093dd7ca22b61029c9090 100644
GIT binary patch
delta 80605
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
IDd(O43nzr)kpKVy

delta 52861
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
UW}VHkTn_4L#_ieJ&3xg107-Tbg8%>k

diff --git a/resources/localization/pl/PrusaSlicer_pl.po b/resources/localization/pl/PrusaSlicer_pl.po
index d360128fc..0daecee82 100644
--- a/resources/localization/pl/PrusaSlicer_pl.po
+++ b/resources/localization/pl/PrusaSlicer_pl.po
@@ -5,82 +5,101 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || n%10 == 1 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 12 && n%100 <= 14)) ? 2 : 3);\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Poedit 2.4.2\n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
 "PO-Revision-Date: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
 
-#: src/slic3r/GUI/MainFrame.cpp:66
-msgid " - Remember to check for updates at http://github.com/prusa3d/PrusaSlicer/releases"
-msgstr " - Pamiętaj, aby sprawdzać aktualizacje na http://github.com/prusa3d/PrusaSlicer/releases"
+#: src/slic3r/GUI/Tab.cpp:4124
+msgid ""
+"\"%1%\" is disabled because \"%2%\" is on in \"%3%\" category.\n"
+"To enable \"%1%\", please switch off \"%2%\""
+msgstr ""
+"\"%1%\" jest wyłączony ponieważ \"%2%\" znajduje się w kategorii \"%3%\".\n"
+"Aby włączyć \"%1%\", wyłącz \"%2%\"."
 
-#: src/slic3r/GUI/MainFrame.cpp:872
-msgid " was successfully sliced."
-msgstr " został pomyślnie pocięty."
-
-#: src/libslic3r/PrintConfig.cpp:215 src/libslic3r/PrintConfig.cpp:792
-#: src/libslic3r/PrintConfig.cpp:1219 src/libslic3r/PrintConfig.cpp:1282
-#: src/libslic3r/PrintConfig.cpp:1532 src/libslic3r/PrintConfig.cpp:2425
-#: src/libslic3r/PrintConfig.cpp:2767
+#: src/libslic3r/PrintConfig.cpp:249 src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:1148 src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1390 src/libslic3r/PrintConfig.cpp:1640
+#: src/libslic3r/PrintConfig.cpp:2568 src/libslic3r/PrintConfig.cpp:2805
+#: src/libslic3r/PrintConfig.cpp:2931
 msgid "%"
 msgstr "%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:963
+#: src/slic3r/GUI/GLCanvas3D.cpp:969
 #, c-format
 msgid "%.2f - %.2f mm"
 msgstr "%.2f - %.2f mm"
 
 #. TRN  Remove/Delete
-#: src/slic3r/GUI/Tab.cpp:3126
+#: src/slic3r/GUI/Tab.cpp:3425
 msgid "%1% Preset"
 msgstr "%1% Zestaw ustawień"
 
-#: src/slic3r/GUI/Plater.cpp:4400
+#: src/slic3r/GUI/Plater.cpp:4423
 msgid "%1% printer was active at the time the target Undo / Redo snapshot was taken. Switching to %1% printer requires reloading of %1% presets."
 msgstr "Drukarka %1% była aktywna podczas Cofnięcia / Powtórzenia zrzutu. Zmiana drukarki na %1% wymaga załadowania zestawów ustawień %1%."
 
-#: src/libslic3r/Print.cpp:1374
+#: src/slic3r/GUI/MainFrame.cpp:1585
+msgid "%1% was successfully sliced."
+msgstr "%1% został pomyślnie pocięty."
+
+#: src/libslic3r/Print.cpp:1400
 msgid "%1%=%2% mm is too low to be printable at a layer height %3% mm"
 msgstr "%1%=%2% mm to zbyt mała wartość, żeby była możliwa do wydrukowania na wysokości warstwy %3% mm"
 
-#: src/slic3r/GUI/PresetHints.cpp:229
+#: src/slic3r/GUI/PresetHints.cpp:228
 #, c-format
 msgid "%3.2f mm³/s at filament speed %3.2f mm/s."
 msgstr "%3.2f mm³/s z prędkością filamentu %3.2f mm/s."
 
-#: src/slic3r/GUI/Plater.cpp:1152
+#: src/slic3r/GUI/Plater.cpp:1061
 #, c-format
 msgid "%d (%d shells)"
 msgstr "%d (%d obrysów)"
 
-#: src/slic3r/GUI/Plater.cpp:1160
+#: src/slic3r/GUI/Plater.cpp:1069
 #, c-format
 msgid "%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d facets reversed, %d backwards edges"
 msgstr "%d nieprawidłowych powierzchni, %d naprawionych krawędzi, %d powierzchni usunięto, %d powierzchni dodano, %d powierzchni odwrócono, %d odwróconych krawędzi"
 
-#: src/slic3r/GUI/PresetHints.cpp:270
+#: src/slic3r/GUI/PresetHints.cpp:269
 #, c-format
 msgid "%d lines: %.2f mm"
 msgstr "%d linii: %.2f mm"
 
-#: src/slic3r/GUI/MainFrame.cpp:1027
+#: src/slic3r/GUI/MainFrame.cpp:1728
 #, c-format
 msgid "%d presets successfully imported."
 msgstr "pomyślnie zaimportowano %d zestawów ustawień."
 
-#: src/slic3r/GUI/MainFrame.cpp:692
+#: src/slic3r/GUI/GUI_App.cpp:718
+#, c-format
+msgid ""
+"%s\n"
+"Do you want to continue?"
+msgstr ""
+"%s\n"
+"Kontynuować?"
+
+#: src/slic3r/GUI/MainFrame.cpp:917 src/slic3r/GUI/MainFrame.cpp:1316
 #, c-format
 msgid "%s &Website"
 msgstr "Strona &WWW %s"
 
+#: src/slic3r/GUI/GUI_App.cpp:394
+#, c-format
+msgid "%s - BREAKING CHANGE"
+msgstr "%s - BREAKING CHANGE"
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:211
 #, c-format
 msgid "%s configuration is incompatible"
 msgstr "Konfiguracja niekompatybilna: %s"
 
-#: src/slic3r/GUI/Field.cpp:175
+#: src/slic3r/GUI/Field.cpp:223
 #, c-format
 msgid "%s doesn't support percentage"
 msgstr "%s nie może być wartością procentową"
@@ -90,7 +109,7 @@ msgstr "%s nie może być wartością procentową"
 msgid "%s error"
 msgstr "błąd %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:481
+#: src/slic3r/GUI/ConfigWizard.cpp:499
 #, c-format
 msgid "%s Family"
 msgstr "Rodzina %s"
@@ -100,7 +119,7 @@ msgstr "Rodzina %s"
 msgid "%s has encountered an error"
 msgstr "%s napotkał błąd"
 
-#: src/slic3r/GUI/GUI_App.cpp:138
+#: src/slic3r/GUI/GUI_App.cpp:528
 #, c-format
 msgid ""
 "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it.\n"
@@ -111,12 +130,12 @@ msgstr ""
 "\n"
 "Aplikacja zostanie zamknięta."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:222
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:62
 #, c-format
 msgid "%s has encountered an error. It was likely caused by running out of memory. If you are sure you have enough RAM on your system, this may also be a bug and we would be glad if you reported it."
 msgstr "Błąd %s . Prawdopodobnie wystąpił przez brak pamięci. Jeśli masz pewność, że ilość RAMu jest wystarczająca, to może to być bug, a którego zgłoszenie będziemy wdzięczni."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:308
+#: src/slic3r/GUI/UpdateDialogs.cpp:309
 #, c-format
 msgid "%s has no configuration updates available."
 msgstr "%s nie ma dostępnych aktualizacji konfiguracji."
@@ -143,7 +162,7 @@ msgstr ""
 "\n"
 "Kontynuuj do %s , które pozwoli ustawić nowe Zestawy i wybrać automatyczną aktualizację wbudowanych Zestawów."
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:1512
 #, c-format
 msgid "%s View Mode"
 msgstr "Tryb %s"
@@ -163,218 +182,248 @@ msgstr ""
 "\n"
 "Zaktualizowane zestawy ustawień:"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
 #, c-format
 msgid "&About %s"
 msgstr "&O %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:908
+#: src/slic3r/GUI/MainFrame.cpp:1297
+msgid "&Collapse sidebar"
+msgstr "S&chowaj pasek narzędzi"
+
+#: src/slic3r/GUI/GUI_App.cpp:1645
 msgid "&Configuration"
 msgstr "&Konfiguracja"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "&Configuration Snapshots"
 msgstr "Zrzuty Konfigura&cji"
 
-#: src/slic3r/GUI/MainFrame.cpp:588
+#: src/slic3r/GUI/MainFrame.cpp:1194
 msgid "&Copy"
 msgstr "&Kopiuj"
 
-#: src/slic3r/GUI/MainFrame.cpp:572
+#: src/slic3r/GUI/MainFrame.cpp:1178
 msgid "&Delete selected"
 msgstr "Usuń &zaznaczone"
 
-#: src/slic3r/GUI/MainFrame.cpp:722
+#: src/slic3r/GUI/MainFrame.cpp:1348 src/slic3r/GUI/MainFrame.cpp:1358
 msgid "&Edit"
 msgstr "&Edytuj"
 
-#: src/slic3r/GUI/MainFrame.cpp:506
+#: src/slic3r/GUI/MainFrame.cpp:1103
 msgid "&Export"
 msgstr "&Eksport"
 
-#: src/slic3r/GUI/MainFrame.cpp:617 src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1224 src/slic3r/GUI/MainFrame.cpp:1451
 msgid "&Filament Settings Tab"
-msgstr "Ustawienia &Filamentu"
+msgstr "Ustawienia &filamentu"
 
-#: src/slic3r/GUI/MainFrame.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:1347 src/slic3r/GUI/MainFrame.cpp:1357
+#: src/slic3r/GUI/MainFrame.cpp:1417
 msgid "&File"
 msgstr "&Plik"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1981
+#: src/slic3r/GUI/ConfigWizard.cpp:2492
 msgid "&Finish"
 msgstr "&Zakończ"
 
-#: src/slic3r/GUI/MainFrame.cpp:727
+#: src/slic3r/GUI/MainFrame.cpp:1141
+msgid "&G-code preview"
+msgstr "Podgląd &G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:1353 src/slic3r/GUI/MainFrame.cpp:1363
+#: src/slic3r/GUI/MainFrame.cpp:1423
 msgid "&Help"
 msgstr "Pomo&c"
 
-#: src/slic3r/GUI/MainFrame.cpp:474
+#: src/slic3r/GUI/MainFrame.cpp:1065
 msgid "&Import"
 msgstr "&Import"
 
-#: src/slic3r/GUI/GUI_App.cpp:822
+#: src/slic3r/GUI/GUI_App.cpp:1517
 msgid "&Language"
 msgstr "Język ap&likacji"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "&New Project"
 msgstr "&Nowy Projekt"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1980
+#: src/slic3r/GUI/ConfigWizard.cpp:2491
 msgid "&Next >"
 msgstr "&Dalej>"
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "&Open G-code"
+msgstr "&Otwórz G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "&Open Project"
 msgstr "&Otwórz Projekt"
 
-#: src/slic3r/GUI/MainFrame.cpp:591
+#: src/slic3r/GUI/MainFrame.cpp:1197
 msgid "&Paste"
 msgstr "Wkle&j"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "&Plater Tab"
 msgstr "&Podgląd Stołu"
 
-#: src/slic3r/GUI/GUI_App.cpp:804
+#: src/slic3r/GUI/GUI_App.cpp:1487
 msgid "&Preferences"
 msgstr "&Preferencje"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
 msgid "&Quit"
 msgstr "Wyjś&cie"
 
-#: src/slic3r/GUI/MainFrame.cpp:583
+#: src/slic3r/GUI/MainFrame.cpp:1189
 msgid "&Redo"
 msgstr "Powtó&rz"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "&Repair STL file"
 msgstr "Nap&rawa pliku STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "&Save Project"
 msgstr "Zapi&sz Projekt"
 
-#: src/slic3r/GUI/MainFrame.cpp:565
+#: src/slic3r/GUI/MainFrame.cpp:1171
 msgid "&Select all"
 msgstr "Zaznacz w&szystko"
 
-#: src/slic3r/GUI/MainFrame.cpp:580
+#: src/slic3r/GUI/MainFrame.cpp:1186
 msgid "&Undo"
 msgstr "Co&fnij"
 
-#: src/slic3r/GUI/MainFrame.cpp:724
+#: src/slic3r/GUI/MainFrame.cpp:1350 src/slic3r/GUI/MainFrame.cpp:1360
+#: src/slic3r/GUI/MainFrame.cpp:1418
 msgid "&View"
 msgstr "&Widok"
 
-#: src/slic3r/GUI/MainFrame.cpp:723
+#: src/slic3r/GUI/MainFrame.cpp:1349 src/slic3r/GUI/MainFrame.cpp:1359
 msgid "&Window"
 msgstr "&Okno"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:603 src/slic3r/GUI/ConfigWizard.cpp:631
+#: src/slic3r/GUI/ConfigWizard.cpp:662 src/slic3r/GUI/ConfigWizard.cpp:812
+#: src/slic3r/GUI/ConfigWizard.cpp:873 src/slic3r/GUI/ConfigWizard.cpp:1007
 msgid "(All)"
 msgstr "(Wszystko)"
 
-#: src/libslic3r/PrintConfig.cpp:1446
+#: src/libslic3r/PrintConfig.cpp:1554
 msgid "(minimum)"
 msgstr "(minimum)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:116
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:109
 msgid "(Re)slice"
 msgstr "(Ponowne) Cięcie"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "(Re)Slice No&w"
 msgstr "(Pono&wne) Cięcie"
 
-#: src/libslic3r/PrintConfig.cpp:771 src/libslic3r/PrintConfig.cpp:2587
+#: src/libslic3r/PrintConfig.cpp:807 src/libslic3r/PrintConfig.cpp:2730
 msgid "(Unknown)"
 msgstr "(Nieznane)"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid ") not found."
 msgstr ") nie znaleziono."
 
-#: src/libslic3r/PrintConfig.cpp:1918
+#: src/libslic3r/PrintConfig.cpp:2060
 msgid "0 (soluble)"
 msgstr "0 (rozpuszczalne)"
 
-#: src/libslic3r/PrintConfig.cpp:1919
+#: src/libslic3r/PrintConfig.cpp:2061
 msgid "0.2 (detachable)"
 msgstr "0.2 (odłączane)"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "3&D"
 msgstr "3&D"
 
-#: src/slic3r/GUI/Plater.cpp:4097
+#: src/slic3r/GUI/Plater.cpp:4044
 msgid "3D editor view"
 msgstr "Edytowanie 3D"
 
-#: src/libslic3r/PrintConfig.cpp:851
+#: src/libslic3r/PrintConfig.cpp:889
 msgid "3D Honeycomb"
 msgstr "Plaster miodu 3D"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:274
+#: src/slic3r/GUI/NotificationManager.hpp:318
+msgid "3D Mouse disconnected."
+msgstr "Odłączono 3D Mouse."
+
+#: src/slic3r/GUI/Mouse3DController.cpp:263
 msgid "3Dconnexion settings"
 msgstr "Ustawienia 3Dconnexion"
 
-#: src/slic3r/GUI/Plater.cpp:5038
+#: src/slic3r/GUI/Plater.cpp:5167
 #, c-format
 msgid "3MF file exported to %s"
 msgstr "Plik 3MF wyeksportowany do %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1979
+#: src/slic3r/GUI/ConfigWizard.cpp:2490
 msgid "< &Back"
 msgstr "<&Wstecz"
 
-#: src/libslic3r/PrintConfig.cpp:287
+#: src/libslic3r/PrintConfig.cpp:321
 msgid "A boolean expression using the configuration values of an active print profile. If this expression evaluates to true, this profile is considered compatible with the active print profile."
 msgstr "Wyrażenie logiczne (Boole'owskie) używające wartości konfiguracji aktywnego profilu druku. Jeśli to wyrażenie jest prawdziwe to znaczy, że aktywny profil jest kompatybilny z aktywnym profilem druku."
 
-#: src/libslic3r/PrintConfig.cpp:272
+#: src/libslic3r/PrintConfig.cpp:306
 msgid "A boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile."
 msgstr "Wyrażenie logiczne (Boole'owskie) używające wartości konfiguracji aktywnego profilu drukarki. Jeśli to wyrażenie jest prawdziwe to znaczy, że aktywny profil jest kompatybilny z drukarką."
 
-#: src/slic3r/GUI/Tab.cpp:975
+#: src/slic3r/GUI/Tab.cpp:1237
 msgid "A copy of the current system preset will be created, which will be detached from the system preset."
 msgstr "Zostanie utworzona kopia obecnego zestawu ustawień i odłączona od ustawień systemowych."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1034
+#: src/slic3r/GUI/ConfigWizard.cpp:1400
 msgid "A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."
 msgstr "Generalną zasadą jest 160 do 230 °C dla PLA i 215 do 250 °C dla ABS."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1048
+#: src/slic3r/GUI/ConfigWizard.cpp:1414
 msgid "A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have no heated bed."
 msgstr "Generalną zasadą jest 60 °C dla PLA i 110 °C dla ABS. Ustaw zero jeśli nie masz podgrzewanego stołu."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:686
-msgid "A toolpath outside the print area was detected"
-msgstr "Wykryto ścieżkę narzędzia poza obszarem roboczym"
+#: src/slic3r/GUI/GLCanvas3D.cpp:634
+msgid "A toolpath outside the print area was detected."
+msgstr "Wykryto ścieżkę narzędzia poza obszarem roboczym."
 
-#: src/slic3r/GUI/AboutDialog.cpp:199
+#: src/slic3r/GUI/AboutDialog.cpp:212 src/slic3r/GUI/AboutDialog.cpp:215
 #, c-format
 msgid "About %s"
 msgstr "O %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:959
+#: src/slic3r/GUI/GCodeViewer.cpp:2189
+msgid "above"
+msgstr "ponad"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:965
 #, c-format
 msgid "above %.2f mm"
 msgstr "powyżej %.2f mm"
 
-#: src/libslic3r/PrintConfig.cpp:1569
+#: src/libslic3r/PrintConfig.cpp:1677
 msgid "Above Z"
 msgstr "Powyżej Z"
 
-#: src/slic3r/GUI/Tab.cpp:1164
+#: src/slic3r/GUI/Tab.cpp:1494
 msgid "Acceleration control (advanced)"
 msgstr "Ustawienia przyspieszeń (zaawansowane)"
 
-#: src/libslic3r/PrintConfig.cpp:2925
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:221
+#: src/libslic3r/PrintConfig.cpp:3089
 msgid "Accuracy"
 msgstr "Dokładność"
 
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:59
+msgid "Accurate"
+msgstr "Dokładna"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:78
 msgid "Activate"
 msgstr "Aktywacja"
@@ -383,67 +432,75 @@ msgstr "Aktywacja"
 msgid "Active"
 msgstr "Aktywny"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1135 src/slic3r/GUI/GUI_ObjectList.cpp:1705
+#: src/slic3r/GUI/DoubleSlider.cpp:1264 src/slic3r/GUI/GUI_ObjectList.cpp:1833
 msgid "active"
 msgstr "aktywny"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:267
+#: src/slic3r/GUI/GLCanvas3D.cpp:254
 msgid "Adaptive"
 msgstr "Adaptacyjny"
 
-#: src/slic3r/GUI/Tab.cpp:241
-msgid "Add a new printer"
-msgstr "Dodaj nową drukarkę"
+#: src/libslic3r/PrintConfig.cpp:894
+msgid "Adaptive Cubic"
+msgstr "Sześcienny adaptacyjny"
 
-#: src/libslic3r/PrintConfig.cpp:2782
+#: src/slic3r/GUI/SavePresetDialog.cpp:314
+msgid "Add \"%1%\" as a next preset for the the physical printer \"%2%\""
+msgstr "Dodaj \"%1%\" jako kolejny zestaw ustawień dla fizycznej drukarki \"%2%\""
+
+#: src/libslic3r/PrintConfig.cpp:2946
 msgid "Add a pad underneath the supported model"
 msgstr "Dodaj podkładkę pod podporami modelu"
 
-#: src/libslic3r/PrintConfig.cpp:2058
+#: src/libslic3r/PrintConfig.cpp:2200
 msgid "Add a sheath (a single perimeter line) around the base support. This makes the support more reliable, but also more difficult to remove."
 msgstr "Dodaj osłonę (pojedynczą linię) wokół podpory bazowej. Sprawi to, że podpory będą stabilniejsze, ale też trudniejsze do usunięcia."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:991
+#: src/slic3r/GUI/DoubleSlider.cpp:1114
 msgid "Add another code - Ctrl + Left click"
 msgstr "Dodaj kolejny kod - Ctrl + kliknij lewym przyciskiem"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:992
+#: src/slic3r/GUI/DoubleSlider.cpp:1115
 msgid "Add another code - Right click"
 msgstr "Dodaj kolejny kod - kliknij prawym przyciskiem"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1477
+#: src/slic3r/GUI/DoubleSlider.cpp:1665
 msgid "Add color change"
 msgstr "Dodaj zmianę koloru"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1180
+#: src/slic3r/GUI/DoubleSlider.cpp:1307
 msgid "Add color change (%1%) for:"
 msgstr "Dodaj zmianę koloru (%1%) dla:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:988
+#: src/slic3r/GUI/DoubleSlider.cpp:1111
 msgid "Add color change - Left click"
 msgstr "Dodaj zmianę koloru - kliknij lewym przyciskiem"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:986
+#: src/slic3r/GUI/DoubleSlider.cpp:1109
 msgid "Add color change - Left click for predefined color or Shift + Left click for custom color selection"
 msgstr "Dodaj zmianę koloru - kliknij lewym przyciskiem dla predefiniowanego koloru lub wciśnij Shift + lewy przycisk dla wyboru własnego koloru"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
 msgid "Add color change marker for current layer"
 msgstr "Dodaj punkt zmiany filamentu na obecnej warstwie"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1490
+#: src/slic3r/GUI/DoubleSlider.cpp:1682
 msgid "Add custom G-code"
 msgstr "Dodaj własny G-code"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:240
+#: src/slic3r/GUI/DoubleSlider.cpp:1679
+msgid "Add custom template"
+msgstr "Dodaj własny szablon"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:235
 msgid "Add detail"
 msgstr "Wyższa szczegółowość"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:421
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:308
 msgid "Add drainage hole"
 msgstr "Dodaj otwór odpływowy"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:984
+#: src/slic3r/GUI/DoubleSlider.cpp:1107
 msgid "Add extruder change - Left click"
 msgstr "Dodaj zmianę ekstrudera - kliknij lewym przyciskiem"
 
@@ -451,30 +508,30 @@ msgstr "Dodaj zmianę ekstrudera - kliknij lewym przyciskiem"
 msgid "Add extruder to sequence"
 msgstr "Dodaj ekstruder do sekwencji"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1993
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
 msgid "Add Generic Subobject"
 msgstr "Dodaj Standardowy Model Podrzędny"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2896
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2925
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2943
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3297
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3325
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3345
 msgid "Add Height Range"
 msgstr "Dodaj zakres wysokości"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4526 src/slic3r/GUI/Plater.cpp:3788
-#: src/slic3r/GUI/Plater.cpp:3800 src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/GLCanvas3D.cpp:4892 src/slic3r/GUI/Plater.cpp:3708
+#: src/slic3r/GUI/Plater.cpp:3720 src/slic3r/GUI/Plater.cpp:3858
 msgid "Add instance"
 msgstr "Dodaj instancję"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:153
 msgid "Add Instance of the selected object"
 msgstr "Dodaj instancję wybranego modelu"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:162
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:165
 msgid "Add layer range"
 msgstr "Dodaj zakres warstw"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2328
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2692
 msgid "Add Layers"
 msgstr "Dodaj Warstwy"
 
@@ -482,12 +539,12 @@ msgstr "Dodaj Warstwy"
 msgid "Add modifier"
 msgstr "Dodaj modyfikator"
 
-#: src/libslic3r/PrintConfig.cpp:479
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:515
+#, c-format
 msgid "Add more perimeters when needed for avoiding gaps in sloping walls. Slic3r keeps adding perimeters, until more than 70% of the loop immediately above is supported."
-msgstr "Dodaj więcej obrysów, aby uniknąć przerw przy pochyłych ścianach. Slic3r będzie dodawał tyle obrysów, ile jest potrzebne aby podeprzeć co najmniej 70% grubości ściany kolejnej warstwy."
+msgstr "Dodaj więcej obrysów, aby uniknąć przerw przy pochyłych ścianach. PrusaSlicer będzie dodawał tyle obrysów, ile jest potrzebne aby podeprzeć co najmniej 70% grubości ściany kolejnej warstwy."
 
-#: src/slic3r/GUI/Plater.cpp:3940
+#: src/slic3r/GUI/Plater.cpp:3858
 msgid "Add one more instance of the selected object"
 msgstr "Dodaj kolejną instancję wybranego modelu"
 
@@ -495,54 +552,63 @@ msgstr "Dodaj kolejną instancję wybranego modelu"
 msgid "Add part"
 msgstr "Dodaj część"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1487
+#: src/slic3r/GUI/DoubleSlider.cpp:1675
 msgid "Add pause print"
-msgstr "Dodaj pauzę podczas druku"
+msgstr "Dodaj pauzę"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
+#: src/slic3r/GUI/PresetComboBoxes.cpp:627
+#: src/slic3r/GUI/PresetComboBoxes.cpp:674
+msgid "Add physical printer"
+msgstr "Dodaj fizyczną drukarkę"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
 msgid "Add point"
 msgstr "Dodaj punkt"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
 msgid "Add point to selection"
 msgstr "Dodaj punkt do zaznaczenia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1509
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:180
+msgid "Add preset for this printer device"
+msgstr "Dodaj zestaw ustawień do tej drukarki"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1640
 msgid "Add settings"
 msgstr "Dodaj ustawienia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1386
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1517
 msgid "Add Settings Bundle for Height range"
-msgstr "Dodaj Paczkę Ustawień dla Zakresu Wysokości"
+msgstr "Dodaj paczkę ustawień dla zakresu wysokości"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1388
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1519
 msgid "Add Settings Bundle for Object"
-msgstr "Dodaj Paczkę Ustawień dla Modelu"
+msgstr "Dodaj paczkę ustawień dla modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1387
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1518
 msgid "Add Settings Bundle for Sub-object"
-msgstr "Dodaj Paczkę Ustawień dla Modelu Podrzędnego"
+msgstr "Dodaj paczkę ustawień dla modelu podrzędnego"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1314
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1445
 msgid "Add Settings for Layers"
-msgstr "Dodaj Ustawienia dla Warstw"
+msgstr "Dodaj ustawienia dla warstw"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1316
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1447
 msgid "Add Settings for Object"
-msgstr "Dodaj Ustawienia dla Modelu"
+msgstr "Dodaj ustawienia dla modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1315
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1446
 msgid "Add Settings for Sub-object"
-msgstr "Dodaj Ustawienia dla Modelu Podrzędnego"
+msgstr "Dodaj ustawienia dla modelu podrzędnego"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2051
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1953
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2210
 msgid "Add Shape"
 msgstr "Dodaj kształt"
 
-#: src/libslic3r/PrintConfig.cpp:409
+#: src/libslic3r/PrintConfig.cpp:443
 msgid "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)."
-msgstr "Dodaj zwarte wypełnienie przy pochyłych powierzchniach aby zagwarantować odpowiednią grubość warstwy (suma górnych i dolnych zwartych warstw)."
+msgstr "Dodaj zwarte wypełnienie przy pochyłych powierzchniach, aby zagwarantować odpowiednią grubość warstwy (suma górnych i dolnych zwartych warstw)."
 
 #: src/slic3r/GUI/GUI_ObjectList.cpp:54
 msgid "Add support blocker"
@@ -552,11 +618,19 @@ msgstr "Dodaj blokadę podpór"
 msgid "Add support enforcer"
 msgstr "Dodaj wymuszenie podpór"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:494
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:374
 msgid "Add support point"
 msgstr "Dodaj punkt podpory"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4467
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:371
+msgid "Add supports"
+msgstr "Dodaj podpory"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:293
+msgid "Add supports by angle"
+msgstr "Dodaj podpory wg kąta"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4833
 msgid "Add..."
 msgstr "Dodaj..."
 
@@ -564,23 +638,29 @@ msgstr "Dodaj..."
 msgid "Add/Remove filaments"
 msgstr "Dodaj/usuń filamenty"
 
-#: src/slic3r/GUI/Preset.cpp:1201
+#: src/slic3r/GUI/PresetComboBoxes.cpp:813
 msgid "Add/Remove materials"
 msgstr "Dodaj/usuń materiały"
 
-#: src/slic3r/GUI/Preset.cpp:1203
+#: src/slic3r/GUI/PresetComboBoxes.cpp:622
+#: src/slic3r/GUI/PresetComboBoxes.cpp:669
+msgid "Add/Remove presets"
+msgstr "Dodaj/usuń zestawy ustawień"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:815
+#: src/slic3r/GUI/PresetComboBoxes.cpp:972
 msgid "Add/Remove printers"
 msgstr "Dodaj/usuń drukarki"
 
-#: src/slic3r/GUI/Tab.cpp:970
+#: src/slic3r/GUI/Tab.cpp:1288
 msgid "Additional information:"
 msgstr "Dodatkowe informacje:"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:59
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:62
 msgid "Additional Settings"
-msgstr "Ustawienia Dodatkowe"
+msgstr "Ustawienia dodatkowe"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:791
+#: src/slic3r/GUI/ConfigWizard.cpp:1150
 msgid "Additionally a backup snapshot of the whole configuration is created before an update is applied."
 msgstr "Dodatkowa kopia zrzutu całej konfiguracji jest tworzona przed zainstalowaniem aktualizacji."
 
@@ -588,23 +668,22 @@ msgstr "Dodatkowa kopia zrzutu całej konfiguracji jest tworzona przed zainstalo
 msgid "Address"
 msgstr "Adres"
 
-#: src/slic3r/GUI/GUI_App.cpp:814 src/slic3r/GUI/GUI_ObjectList.cpp:104
-#: src/slic3r/GUI/GUI_ObjectList.cpp:622 src/slic3r/GUI/Tab.cpp:1087
-#: src/slic3r/GUI/Tab.cpp:1102 src/slic3r/GUI/Tab.cpp:1201
-#: src/slic3r/GUI/Tab.cpp:1204 src/slic3r/GUI/Tab.cpp:1470
-#: src/slic3r/GUI/Tab.cpp:1967 src/slic3r/GUI/Tab.cpp:3661
-#: src/slic3r/GUI/wxExtensions.cpp:754 src/libslic3r/PrintConfig.cpp:88
-#: src/libslic3r/PrintConfig.cpp:119 src/libslic3r/PrintConfig.cpp:223
-#: src/libslic3r/PrintConfig.cpp:1037 src/libslic3r/PrintConfig.cpp:2276
-#: src/libslic3r/PrintConfig.cpp:2448
+#: src/slic3r/GUI/GUI_ObjectList.cpp:102 src/slic3r/GUI/GUI_ObjectList.cpp:661
+#: src/slic3r/GUI/Tab.cpp:1409 src/slic3r/GUI/Tab.cpp:1430
+#: src/slic3r/GUI/Tab.cpp:1531 src/slic3r/GUI/Tab.cpp:1534
+#: src/slic3r/GUI/Tab.cpp:1816 src/slic3r/GUI/Tab.cpp:2152
+#: src/slic3r/GUI/Tab.cpp:4080 src/libslic3r/PrintConfig.cpp:90
+#: src/libslic3r/PrintConfig.cpp:121 src/libslic3r/PrintConfig.cpp:257
+#: src/libslic3r/PrintConfig.cpp:1081 src/libslic3r/PrintConfig.cpp:2419
+#: src/libslic3r/PrintConfig.cpp:2591
 msgid "Advanced"
-msgstr "Zaawansowany"
+msgstr "Zaawansowane"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:821
+#: src/slic3r/GUI/ConfigWizard.cpp:1180
 msgid "Advanced mode"
 msgstr "Tryb Zaawansowany"
 
-#: src/slic3r/GUI/GUI_App.cpp:814
+#: src/slic3r/GUI/GUI_App.cpp:1506
 msgid "Advanced View Mode"
 msgstr "Widok Zaawansowany"
 
@@ -612,124 +691,140 @@ msgstr "Widok Zaawansowany"
 msgid "Advanced: Output log"
 msgstr "Zaawansowane: log wyjściowy"
 
-#: src/libslic3r/PrintConfig.cpp:668
+#: src/libslic3r/PrintConfig.cpp:704
 msgid "After a tool change, the exact position of the newly loaded filament inside the nozzle may not be known, and the filament pressure is likely not yet stable. Before purging the print head into an infill or a sacrificial object, Slic3r will always prime this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."
-msgstr "Po zmianie narzędzia (filamentu), dokładna pozycja końcówki nowo załadowanego filamentu nie jest znana i najprawdopodobniej ciśnienie w ekstruderze nie jest jeszcze ustabilizowane. Przed czyszczeniem dyszy na wypełnieniu lub zbędnym modelu, Slic3r spowoduje wytłoczenie tej ilości filamentu na wieży czyszczącej, aby wydrukować dobre wypełnienie lub zbędny model."
+msgstr "Po zmianie narzędzia (filamentu), dokładna pozycja końcówki nowo załadowanego filamentu nie jest znana i najprawdopodobniej ciśnienie w ekstruderze nie jest jeszcze ustabilizowane. Przed czyszczeniem dyszy na wypełnieniu lub zbędnym modelu, PrusaSlicer spowoduje wytłoczenie tej ilości filamentu na wieży czyszczącej, aby wydrukować dobre wypełnienie lub zbędny model."
 
-#: src/slic3r/GUI/Tab.cpp:1994 src/libslic3r/PrintConfig.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:2182 src/libslic3r/PrintConfig.cpp:1173
 msgid "After layer change G-code"
 msgstr "G-code wykonywany po zmianie warstwy"
 
-#: src/libslic3r/PrintConfig.cpp:3398
+#: src/libslic3r/PrintConfig.cpp:3597
 msgid "Align the model to the given point."
 msgstr "Wyrównaj model z danym punktem."
 
-#: src/libslic3r/PrintConfig.cpp:3397
+#: src/libslic3r/PrintConfig.cpp:3596
 msgid "Align XY"
 msgstr "Wyrównaj XY"
 
-#: src/libslic3r/PrintConfig.cpp:1631
+#: src/libslic3r/PrintConfig.cpp:1739
 msgid "Aligned"
 msgstr "Wyrównany"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:290 src/slic3r/GUI/ConfigWizard.cpp:573
-#: src/slic3r/GUI/Tab.cpp:3174
+#: src/slic3r/GUI/ConfigWizard.cpp:308 src/slic3r/GUI/ConfigWizard.cpp:598
+#: src/slic3r/GUI/Tab.cpp:3507 src/slic3r/GUI/UnsavedChangesDialog.cpp:921
 msgid "All"
 msgstr "Wszystko"
 
-#: src/libslic3r/Print.cpp:1219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
+msgid "All gizmos: Rotate - left mouse button; Pan - right mouse button"
+msgstr "Wszystkie uchwyty: obróć - lewy przycisk, przesuń - prawy przycisk"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:694
+msgid "All installed printers are compatible with the selected filament."
+msgstr "Wszystkie zainstalowane drukarki są kompatybilne z wybranym filamentem."
+
+#: src/libslic3r/Print.cpp:1245
 msgid "All objects are outside of the print volume."
 msgstr "Wszystkie modele znajdują się poza obszarem roboczym."
 
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "All objects will be removed, continue?"
 msgstr "Wszystkie modele zostaną usunięte. Kontynuować?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:737
+msgid "All settings changes will be discarded."
+msgstr "Wszystkie zmiany ustawień zostaną odrzucone."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "All standard"
 msgstr "Wszystkie podstawowe"
 
-#: src/libslic3r/Zipper.cpp:62
+#: src/libslic3r/miniz_extension.cpp:121
 msgid "allocation failed"
 msgstr "niepowodzenie alokacji"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Along X axis"
 msgstr "Wzdłuż osi X"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Along Y axis"
 msgstr "Wzdłuż osi Y"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Along Z axis"
 msgstr "Wzdłuż osi Z"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:222
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:160
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:141
+msgid "Alt + Mouse wheel"
+msgstr "Alt + kółko myszy"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:240
 msgid "Alternate nozzles:"
 msgstr "Inne rozmiary dysz:"
 
-#: src/slic3r/GUI/Plater.cpp:5002
+#: src/slic3r/GUI/Preferences.cpp:163
+msgid "Always ask for unsaved changes when selecting new preset"
+msgstr "Zawsze pytaj o niezapisane zmiany przy wyborze nowego zestawu ustawień"
+
+#: src/slic3r/GUI/Plater.cpp:5135
 #, c-format
 msgid "AMF file exported to %s"
 msgstr "Plik AMF wyeksportowany do %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:690
+#: src/slic3r/GUI/GLCanvas3D.cpp:638
 msgid ""
-"An object outside the print area was detected\n"
-"Resolve the current problem to continue slicing"
+"An object outside the print area was detected.\n"
+"Resolve the current problem to continue slicing."
 msgstr ""
-"Wykryto model poza obszarem roboczym\n"
-"Usuń problem, aby kontynuować cięcie"
+"Wykryto model poza obszarem roboczym.\n"
+"Rozwiąż problem, aby kontynuować cięcie."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:685
-msgid "An object outside the print area was detected"
-msgstr "Wykryto model poza obszarem roboczym"
+#: src/slic3r/GUI/GLCanvas3D.cpp:633
+msgid "An object outside the print area was detected."
+msgstr "Wykryto model poza obszarem roboczym."
 
-#: src/slic3r/GUI/Tab.cpp:2943
-msgid "and it has the following unsaved changes:"
-msgstr "i ma następujące niezapisane zmiany:"
-
-#: src/slic3r/GUI/Plater.cpp:3170
+#: src/slic3r/GUI/Plater.cpp:2972
 msgid "Another export job is currently running."
 msgstr "W tej chwili trwa inny proces eksportu."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Any arrow"
 msgstr "Jakakolwiek strzałka"
 
-#: src/slic3r/GUI/Tab.cpp:965
+#: src/slic3r/GUI/Tab.cpp:1283
 msgid "Any modifications should be saved as a new preset inherited from this one."
 msgstr "Każda modyfikacja powinna zostać zapisana jako nowy zestaw ustawień dziedziczony z obecnego."
 
-#: src/libslic3r/PrintConfig.cpp:104
+#: src/libslic3r/PrintConfig.cpp:106
 msgid "API Key / Password"
 msgstr "Klucz API / hasło"
 
-#: src/slic3r/GUI/GUI_App.cpp:810
+#: src/slic3r/GUI/GUI_App.cpp:1493
 msgid "Application preferences"
 msgstr "Preferencje aplikacji"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1374
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1221
 msgid "Apply changes"
 msgstr "Zastosuj zmiany"
 
-#: src/libslic3r/PrintConfig.cpp:575 src/libslic3r/PrintConfig.cpp:1708
+#: src/libslic3r/PrintConfig.cpp:611 src/libslic3r/PrintConfig.cpp:1823
 msgid "approximate seconds"
 msgstr "szacowane sekundy"
 
-#: src/libslic3r/PrintConfig.cpp:428 src/libslic3r/PrintConfig.cpp:854
+#: src/libslic3r/PrintConfig.cpp:464 src/libslic3r/PrintConfig.cpp:892
 msgid "Archimedean Chords"
 msgstr "Spirala Archimedesa"
 
-#: src/libslic3r/Zipper.cpp:88
+#: src/libslic3r/miniz_extension.cpp:147
 msgid "archive is too large"
 msgstr "archiwum jest zbyt duże"
 
-#. TRN  remove/delete
-#: src/slic3r/GUI/Tab.cpp:3123
+#: src/slic3r/GUI/Tab.cpp:3420
 msgid "Are you sure you want to %1% the selected preset?"
 msgstr "Czy na pewno chcesz %1% ten zestaw ustawień?"
 
@@ -741,97 +836,125 @@ msgstr ""
 "Czy na pewno chcesz przerwać flashowanie firmware?\n"
 "Może to spowodować nieprzewidziane problemy z drukarką!"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1903 src/slic3r/GUI/DoubleSlider.cpp:1924
+#: src/slic3r/GUI/DoubleSlider.cpp:2122 src/slic3r/GUI/DoubleSlider.cpp:2142
 msgid "Are you sure you want to continue?"
 msgstr "Czy na pewno chcesz kontynuować?"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1269
+#: src/slic3r/GUI/Tab.cpp:3392
+msgid "Are you sure you want to delete \"%1%\" preset from the physical printer \"%2%\"?"
+msgstr "Czy na pewno chcesz usunąć zestaw ustawień \"%1%\" z fizycznej drukarki \"%2%\"?"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:658
+msgid "Are you sure you want to delete \"%1%\" printer?"
+msgstr "Czy na pewno chcesz usunąć drukarkę \"%1%\"?"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1128
 msgid "Are you sure you want to do it?"
 msgstr "Czy na pewno chcesz to zrobić?"
 
-#: src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2566
 msgid "Area fill"
 msgstr "Wypełnienie obszaru"
 
-#: src/slic3r/GUI/Plater.cpp:641
+#: src/slic3r/GUI/Plater.cpp:507
 msgid "Around object"
 msgstr "Wokół modelu"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:157
-#: src/slic3r/GUI/Plater.cpp:2754
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/Plater.cpp:1549
 msgid "Arrange"
 msgstr "Rozmieść"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4493 src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/GLCanvas3D.cpp:4859 src/slic3r/GUI/KBShortcutsDialog.cpp:152
 msgid "Arrange selection"
 msgstr "Rozmieść zaznaczone"
 
-#: src/libslic3r/PrintConfig.cpp:3443
+#: src/libslic3r/PrintConfig.cpp:3642
 msgid "Arrange the supplied models in a plate and merge them in a single model in order to perform actions once."
 msgstr "Ułóż modele na stole i połącz je w jedną grupę, aby zastosować ustawienia do wszystkich na raz."
 
-#: src/slic3r/GUI/Plater.cpp:2813
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:149
 msgid "Arranging"
 msgstr "Układanie"
 
-#: src/slic3r/GUI/Plater.cpp:2841
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:182
 msgid "Arranging canceled."
 msgstr "Układanie anulowane."
 
-#: src/slic3r/GUI/Plater.cpp:2842
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:183
 msgid "Arranging done."
 msgstr "Układanie zakończone."
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Arrow Down"
 msgstr "Strzałka w dół"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
 msgid "Arrow Left"
 msgstr "Strzałka w lewo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
 msgid "Arrow Right"
 msgstr "Strzałka w prawo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Arrow Up"
 msgstr "Strzałka w górę"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:290
+#: src/slic3r/GUI/GUI_App.cpp:246
+msgid "Artwork model by Nora Al-Badri and Jan Nikolai Nelles"
+msgstr "Autorzy modelu: Nora Al-Badri oraz Jan Nikolai Nelles"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:265
 msgid "As a workaround, you may run PrusaSlicer with a software rendered 3D graphics by running prusa-slicer.exe with the --sw_renderer parameter."
 msgstr "Jako obejście, możesz uruchomić PrusaSlicer z grafiką 3D renderowaną przez oprogramowanie, dodając parametr --sw_renderer do prusa-slicer.exe."
 
-#: src/slic3r/GUI/GUI_App.cpp:1086 src/slic3r/GUI/Plater.cpp:2313
-#: src/slic3r/GUI/Tab.cpp:2960
+#: src/slic3r/GUI/Preferences.cpp:154
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:659
+msgid "Ask for unsaved changes when closing application"
+msgstr "Pytaj o niezapisane zmiany podczas zamykania programu"
+
+#: src/slic3r/GUI/Preferences.cpp:161
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:660
+msgid "Ask for unsaved changes when selecting new preset"
+msgstr "Pytaj o niezapisane zmiany przy wyborze nowego zestawu ustawień"
+
+#: src/slic3r/GUI/GUI_App.cpp:1878 src/slic3r/GUI/Jobs/SLAImportJob.cpp:210
+#: src/slic3r/GUI/Plater.cpp:2256 src/slic3r/GUI/Tab.cpp:3189
 msgid "Attention!"
 msgstr "Uwaga!"
 
-#: src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:150
+msgid "Authorization Type"
+msgstr "Rodzaj autoryzacji"
+
+#: src/libslic3r/PrintConfig.cpp:2013
 msgid "Auto generated supports"
 msgstr "Automatyczne generowanie podpór"
 
-#: src/slic3r/GUI/Preferences.cpp:47
+#: src/slic3r/GUI/Preferences.cpp:64
 msgid "Auto-center parts"
 msgstr "Rozmieść modele automatycznie"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1377
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1224
 msgid "Auto-generate points"
 msgstr "Generuj punkty automatycznie"
 
-#: src/slic3r/GUI/Plater.cpp:1157
+#: src/slic3r/GUI/Plater.cpp:1066
 #, c-format
 msgid "Auto-repaired (%d errors)"
 msgstr "Naprawiono automatycznie (%d błędów)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:339
+#: src/slic3r/GUI/GUI_ObjectList.cpp:386
 #, c-format
 msgid "Auto-repaired (%d errors):"
 msgstr "Naprawiono automatycznie (%d błędów):"
@@ -840,67 +963,79 @@ msgstr "Naprawiono automatycznie (%d błędów):"
 msgid "Autodetected"
 msgstr "Wykryto automatycznie"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1273
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1134
 msgid "Autogenerate support points"
 msgstr "Automatycznie generuj punkty podpór"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1268
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1127
 msgid "Autogeneration will erase all manually edited points."
 msgstr "Generowanie automatyczne usunie wszystkie ręcznie ustawione punkty."
 
-#: src/slic3r/GUI/Tab.cpp:3632
+#: src/slic3r/GUI/Tab.cpp:4051
 msgid "Automatic generation"
 msgstr "Generowanie automatyczne"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Automatic updates"
 msgstr "Automatyczne aktualizacje"
 
-#: src/slic3r/GUI/MainFrame.cpp:536
+#: src/slic3r/GUI/MainFrame.cpp:1137
 msgid "Automatically repair an STL file"
 msgstr "Automatyczna naprawa pliku STL"
 
-#: src/slic3r/GUI/Tab.cpp:1171
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:129
+msgid "Autoset by angle"
+msgstr "Ustaw automatycznie wg kąta"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:233
+msgid "Autoset custom supports"
+msgstr "Automatyczne ustawienie podpór"
+
+#: src/slic3r/GUI/Tab.cpp:1501
 msgid "Autospeed (advanced)"
 msgstr "Automatyczne dostosowanie prędkości (zaawansowane)"
 
-#: src/libslic3r/PrintConfig.cpp:136
+#: src/libslic3r/PrintConfig.cpp:169
 msgid "Avoid crossing perimeters"
 msgstr "Unikaj ruchów nad obrysami"
 
-#: src/slic3r/GUI/Tab.cpp:3268
+#: src/slic3r/GUI/Tab.cpp:3705
 msgid "BACK ARROW"
 msgstr "STRZAŁKA W TYŁ"
 
-#: src/slic3r/GUI/Tab.cpp:3290
+#: src/slic3r/GUI/Tab.cpp:3727
 msgid ""
 "BACK ARROW icon indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
 "Click to reset all settings for the current option group to the last saved preset."
 msgstr ""
 "STRZAŁKA W TYŁ oznacza, że ustawienia zostały zmodyfikowane i nie odpowiadają tym z ostatnio zapisanego zestawu ustawień dla obecnej grupy opcji.\n"
-"Kliknij aby zresetować wszystkie ustawienia w obecnej grupie opcji do tych z ostatnio zapisanego zestawu ustawień."
+"Kliknij, aby zresetować wszystkie ustawienia w obecnej grupie opcji do tych z ostatnio zapisanego zestawu ustawień."
 
-#: src/slic3r/GUI/Tab.cpp:3304
+#: src/slic3r/GUI/Tab.cpp:3741
 msgid ""
 "BACK ARROW icon indicates that the value was changed and is not equal to the last saved preset.\n"
 "Click to reset current value to the last saved preset."
 msgstr ""
 "STRZAŁKA W TYŁ oznacza, że ustawienia zostały zmodyfikowane i nie odpowiadają tym z ostatnio zapisanego zestawu ustawień.\n"
-"Kliknij aby zresetować wszystkie ustawienia do tych z ostatnio zapisanego zestawu ustawień."
+"Kliknij, aby zresetować wszystkie ustawienia do tych z ostatnio zapisanego zestawu ustawień."
 
-#: src/slic3r/GUI/Preferences.cpp:55
+#: src/slic3r/GUI/Preferences.cpp:72
 msgid "Background processing"
 msgstr "Przetwarzanie w tle"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:351
+#: src/slic3r/GUI/GUI_ObjectList.cpp:398
 msgid "backwards edges"
 msgstr "odwrócone krawędzie"
 
-#: src/slic3r/GUI/MainFrame.cpp:174
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:60
+msgid "Balanced"
+msgstr "Zbalansowana"
+
+#: src/slic3r/GUI/MainFrame.cpp:535 src/slic3r/GUI/MainFrame.cpp:537
 msgid "based on Slic3r"
 msgstr "bazuje na projekcie Slic3r"
 
-#: src/slic3r/GUI/Tab.cpp:1439
+#: src/slic3r/GUI/Tab.cpp:1785
 msgid "Bed"
 msgstr "Stół"
 
@@ -912,7 +1047,7 @@ msgstr "Własny model stołu"
 msgid "Bed custom texture"
 msgstr "Własna tekstura stołu"
 
-#: src/slic3r/GUI/BedShapeDialog.hpp:59 src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/BedShapeDialog.hpp:98 src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape"
 msgstr "Kształt stołu"
 
@@ -920,23 +1055,23 @@ msgstr "Kształt stołu"
 msgid "Bed shape"
 msgstr "Kształt stołu"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:929
+#: src/slic3r/GUI/ConfigWizard.cpp:1295
 msgid "Bed Shape and Size"
 msgstr "Kształt i rozmiar stołu roboczego"
 
-#: src/libslic3r/PrintConfig.cpp:147
+#: src/libslic3r/PrintConfig.cpp:181
 msgid "Bed temperature"
 msgstr "Temperatura stołu"
 
-#: src/libslic3r/PrintConfig.cpp:145
+#: src/libslic3r/PrintConfig.cpp:178
 msgid "Bed temperature for layers after the first one. Set this to zero to disable bed temperature control commands in the output."
-msgstr "Temperatura stołu dla warstw powyżej pierwszej. Ustaw 0 aby wyłączyć kontrolowanie temperatury w pliku wyjściowym."
+msgstr "Temperatura stołu dla warstw powyżej pierwszej. Ustaw 0, aby wyłączyć kontrolowanie temperatury w pliku wyjściowym."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1051
+#: src/slic3r/GUI/ConfigWizard.cpp:1417
 msgid "Bed Temperature:"
 msgstr "Temperatura stołu:"
 
-#: src/slic3r/GUI/Tab.cpp:1988 src/libslic3r/PrintConfig.cpp:153
+#: src/slic3r/GUI/Tab.cpp:2175 src/libslic3r/PrintConfig.cpp:187
 msgid "Before layer change G-code"
 msgstr "G-code wykonywany przed zmianą warstwy"
 
@@ -944,143 +1079,191 @@ msgstr "G-code wykonywany przed zmianą warstwy"
 msgid "Before roll back"
 msgstr "Przez zmianą"
 
-#: src/slic3r/GUI/Plater.cpp:640
+#: src/slic3r/GUI/Plater.cpp:506
 msgid "Below object"
 msgstr "Pod modelem"
 
-#: src/libslic3r/PrintConfig.cpp:1578
+#: src/libslic3r/PrintConfig.cpp:1686
 msgid "Below Z"
 msgstr "Poniżej Z"
 
-#: src/libslic3r/PrintConfig.cpp:164
+#: src/libslic3r/PrintConfig.cpp:198
 msgid "Between objects G-code"
 msgstr "G-code wykonywany przy przejściach pomiędzy modelami"
 
-#: src/slic3r/GUI/Tab.cpp:2006
+#: src/slic3r/GUI/Tab.cpp:2196
 msgid "Between objects G-code (for sequential printing)"
 msgstr "G-code wykonywany przy przejściach pomiędzy modelami (druk sekwencyjny)"
 
-#: src/libslic3r/PrintConfig.cpp:2489 src/libslic3r/PrintConfig.cpp:2490
-msgid "Bottle volume"
-msgstr "Objętość butelki"
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:242
+msgid "Block"
+msgstr "Blokuj"
 
-#: src/libslic3r/PrintConfig.cpp:2496 src/libslic3r/PrintConfig.cpp:2497
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:32
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:383
+msgid "Block seam"
+msgstr "Blokuj szew"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:373
+msgid "Block supports"
+msgstr "Blokuj podpory"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:292
+msgid "Block supports by angle"
+msgstr "Blokuj podpory wg kąta"
+
+#: src/libslic3r/PrintConfig.cpp:2632 src/libslic3r/PrintConfig.cpp:2633
+msgid "Bottle volume"
+msgstr "Pojemność butelki"
+
+#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2640
 msgid "Bottle weight"
 msgstr "Waga butelki"
 
 #. TRN To be shown in the main menu View->Bottom
 #. TRN To be shown in Print Settings "Bottom solid layers"
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:665 src/libslic3r/PrintConfig.cpp:174
-#: src/libslic3r/PrintConfig.cpp:183
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
+#: src/libslic3r/PrintConfig.cpp:208 src/libslic3r/PrintConfig.cpp:217
 msgid "Bottom"
 msgstr "Dolne"
 
-#: src/libslic3r/PrintConfig.cpp:435
+#: src/libslic3r/PrintConfig.cpp:471
 msgid "Bottom fill pattern"
 msgstr "Wzór wypełnienia dolnej warstwy"
 
-#: src/slic3r/GUI/PresetHints.cpp:342
+#: src/slic3r/GUI/PresetHints.cpp:340
 msgid "Bottom is open."
 msgstr "Dół jest otwarty."
 
-#: src/slic3r/GUI/PresetHints.cpp:336
+#: src/slic3r/GUI/PresetHints.cpp:334
 msgid "Bottom shell is %1% mm thick for layer height %2% mm."
 msgstr "Dolna powłoka ma %1% mm grubości dla warstwy o wysokości %2% mm."
 
-#: src/libslic3r/PrintConfig.cpp:177
+#: src/libslic3r/PrintConfig.cpp:211
 msgid "Bottom solid layers"
 msgstr "Zwarte warstwy dolne"
 
-#: src/slic3r/GUI/MainFrame.cpp:665
+#: src/slic3r/GUI/MainFrame.cpp:962 src/slic3r/GUI/MainFrame.cpp:1282
 msgid "Bottom View"
 msgstr "Widok od dołu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1464
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1468
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1595
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
 msgid "Box"
 msgstr "Sześcian"
 
-#: src/libslic3r/PrintConfig.cpp:193
+#: src/libslic3r/PrintConfig.cpp:227
 msgid "Bridge"
 msgstr "Most"
 
-#: src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:256
 msgid "Bridge flow ratio"
 msgstr "Współczynnik przepływu przy mostach"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:243 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/slic3r/GUI/GUI_Preview.cpp:308 src/libslic3r/ExtrusionEntity.cpp:321
+#: src/libslic3r/ExtrusionEntity.cpp:350
 msgid "Bridge infill"
 msgstr "Wypełnienie mostu"
 
-#: src/libslic3r/PrintConfig.cpp:234
+#: src/libslic3r/PrintConfig.cpp:268
 msgid "Bridges"
 msgstr "Mosty"
 
-#: src/libslic3r/PrintConfig.cpp:213
+#: src/libslic3r/PrintConfig.cpp:247
 msgid "Bridges fan speed"
 msgstr "Prędkość wentylatora przy mostach"
 
-#: src/libslic3r/PrintConfig.cpp:202
+#: src/libslic3r/PrintConfig.cpp:236
 msgid "Bridging angle"
 msgstr "Kąt linii mostów"
 
-#: src/libslic3r/PrintConfig.cpp:204
+#: src/libslic3r/PrintConfig.cpp:238
 msgid "Bridging angle override. If left to zero, the bridging angle will be calculated automatically. Otherwise the provided angle will be used for all bridges. Use 180° for zero angle."
 msgstr "Nadpisanie kąta linii mostów. Jeśli zostanie 0 to kąt zostanie obliczony automatycznie. W innym przypadku ustawiony kąt będzie dotyczył wszystkich mostów. Ustaw 180° dla kąta zerowego."
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Bridging volumetric"
-msgstr "Mosty objętościowe"
+msgstr "Mosty objętościowo"
 
-#: src/slic3r/GUI/Plater.cpp:534 src/slic3r/GUI/Tab.cpp:1117
+#: src/slic3r/GUI/Plater.cpp:400 src/slic3r/GUI/Tab.cpp:1446
 msgid "Brim"
 msgstr "Brim"
 
-#: src/libslic3r/PrintConfig.cpp:244
+#: src/libslic3r/PrintConfig.cpp:278
 msgid "Brim width"
 msgstr "Szerokość brim"
 
-#: src/slic3r/GUI/FirmwareDialog.cpp:805 src/slic3r/GUI/Tab.cpp:1658
-#: src/slic3r/GUI/Tab.cpp:1721
+#: src/slic3r/GUI/FirmwareDialog.cpp:805
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:271
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
 msgid "Browse"
 msgstr "Przeglądaj"
 
-#: src/libslic3r/Zipper.cpp:82
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:28
+msgid "Brush shape"
+msgstr "Kształt pędzla"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:44
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:27
+msgid "Brush size"
+msgstr "Rozmiar pędzla"
+
+#: src/libslic3r/miniz_extension.cpp:141
 msgid "buffer too small"
 msgstr "niewystarczający bufor"
 
+#: src/slic3r/GUI/GUI_App.cpp:1152
+msgid ""
+"But since this version of PrusaSlicer we don't show this information in Printer Settings anymore.\n"
+"Settings will be available in physical printers settings."
+msgstr ""
+"Od tej wersji PrusaSlicer nie pokazujemy już tej informacji w Ustawieniach drukarki.\n"
+"Ustawienia będą dostępne w ustawieniach fizycznej drukarki."
+
 #: src/slic3r/GUI/ButtonsDescription.cpp:16
 msgid "Buttons And Text Colors Description"
 msgstr "Opis Przycisków i Kolorów Tekstu"
 
-#: src/slic3r/GUI/PresetHints.cpp:223
+#: src/slic3r/GUI/GUI_App.cpp:1084
+msgid ""
+"By default new Printer devices will be named as \"Printer N\" during its creation.\n"
+"Note: This name can be changed later from the physical printers settings"
+msgstr ""
+"Domyślnie nowe drukarki będą nazywane \"Printer N\" podczas tworzenia.\n"
+"Uwaga: można to zmienić później w ustawieniach fizycznych drukarki."
+
+#: src/slic3r/GUI/PresetHints.cpp:222
 msgid "by the print profile maximum"
 msgstr "maksimum zależny od profilu wydruku"
 
-#: src/slic3r/GUI/Preferences.cpp:113
+#: src/slic3r/GUI/Preferences.cpp:178
 msgid "Camera"
 msgstr "Widok"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:144
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
 msgid "Camera view"
 msgstr "Widok kamery"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1982 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/ConfigWizard.cpp:2493 src/slic3r/GUI/FirmwareDialog.cpp:151
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:245
 #: src/slic3r/GUI/ProgressStatusBar.cpp:26
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:644
 msgid "Cancel"
 msgstr "Anuluj"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:157
+#: src/slic3r/GUI/PrintHostDialogs.cpp:155
 msgid "Cancel selected"
 msgstr "Anuluj wybrane"
 
-#: src/slic3r/GUI/Plater.cpp:3669 src/slic3r/GUI/PrintHostDialogs.cpp:233
+#: src/slic3r/GUI/Plater.cpp:3589 src/slic3r/GUI/PrintHostDialogs.cpp:233
 msgid "Cancelled"
 msgstr "Anulowano"
 
-#: src/slic3r/GUI/Plater.cpp:3153 src/slic3r/GUI/PrintHostDialogs.cpp:232
+#: src/slic3r/GUI/Plater.cpp:2953 src/slic3r/GUI/PrintHostDialogs.cpp:232
 msgid "Cancelling"
 msgstr "Anulowanie"
 
@@ -1092,7 +1275,7 @@ msgstr "Anulowanie..."
 msgid "Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible."
 msgstr "Nie można przeliczyć szerokości ekstruzji dla %1%: zmienna \"%2%\" jest niedostępna."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3017
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3400
 msgid ""
 "Cannot insert a new layer range after the current layer range.\n"
 "Current layer range overlaps with the next layer range."
@@ -1100,7 +1283,7 @@ msgstr ""
 "Nie można wstawić nowego zakresu wysokości po obecnym.\n"
 "Zakres pokrywałby się z kolejnym."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3008
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3391
 msgid ""
 "Cannot insert a new layer range after the current layer range.\n"
 "The next layer range is too thin to be split to two\n"
@@ -1110,7 +1293,7 @@ msgstr ""
 "Kolejny zakres jest zbyt niski, aby można było go podzielić\n"
 "z powodu minimalnej grubości warstwy."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3012
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3395
 msgid ""
 "Cannot insert a new layer range between the current and the next layer range.\n"
 "The gap between the current layer range and the next layer range\n"
@@ -1120,80 +1303,88 @@ msgstr ""
 "Odstęp pomiędzy zakresami jest niższy \n"
 "niż dozwolona minimalna wysokość warstwy."
 
-#: src/slic3r/GUI/Tab.cpp:3073
+#: src/slic3r/GUI/SavePresetDialog.cpp:137
 msgid "Cannot overwrite a system profile."
 msgstr "Nie można nadpisać profilu systemowego."
 
-#: src/slic3r/GUI/Tab.cpp:3077
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
 msgid "Cannot overwrite an external profile."
 msgstr "Nie można nadpisać profilu zewnętrznego."
 
-#: src/libslic3r/SLAPrint.cpp:613
+#: src/libslic3r/SLAPrint.cpp:627
 msgid "Cannot proceed without support points! Add support points or disable support generation."
 msgstr "Nie można kontynuować bez punktów podpór! Dodaj punkty podpór lub wyłącz ich generowanie."
 
-#: src/slic3r/GUI/Tab.cpp:1834
+#: src/slic3r/GUI/Tab.cpp:2068 src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "Capabilities"
 msgstr "Możliwości"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Capture a configuration snapshot"
 msgstr "Zapisz zrzut konfiguracji"
 
-#: src/libslic3r/PrintConfig.cpp:3424
+#: src/slic3r/GUI/ImGuiWrapper.cpp:801 src/slic3r/GUI/Search.cpp:458
+msgid "Category"
+msgstr "Kategoria"
+
+#: src/libslic3r/PrintConfig.cpp:3623
 msgid "Center"
 msgstr "Punkt centralny"
 
-#: src/libslic3r/PrintConfig.cpp:3425
+#: src/libslic3r/PrintConfig.cpp:3624
 msgid "Center the print around the given center."
 msgstr "Wyśrodkuj model wokół podanego punktu centralnego."
 
-#: src/slic3r/GUI/Tab.cpp:1728
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:329
 msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*"
 msgstr "Pliki certyfikatów (*.crt, *.pem)|*.crt;*.pem|Wszystkie pliki|*.*"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+#: src/slic3r/GUI/SavePresetDialog.cpp:313
+msgid "Change \"%1%\" to \"%2%\" for this physical printer \"%3%\""
+msgstr "Zmień \"%1%\" na \"%2%\" dla fizycznej drukarki \"%3%\""
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
 msgid "Change camera type (perspective, orthographic)"
 msgstr "Zmień rodzaj widoku (perspektywiczny/ortograficzny)"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:885
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:693
 msgid "Change drainage hole diameter"
 msgstr "Zmień średnicę otworu odpływowego"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144 src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/DoubleSlider.cpp:1273 src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Change extruder"
 msgstr "Zmiana ekstrudera"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:536
+#: src/slic3r/GUI/GUI_ObjectList.cpp:574
 msgid "Change Extruder"
 msgstr "Zmień Ekstruder"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1145
+#: src/slic3r/GUI/DoubleSlider.cpp:1274
 msgid "Change extruder (N/A)"
 msgstr "Zmień ekstruder (N/A)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3997
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4484
 msgid "Change Extruders"
 msgstr "Zmień Ekstrudery"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:152
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:157
 #, c-format
 msgid "Change Option %s"
 msgstr "Zmień Opcję %s"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3558
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4021
 msgid "Change Part Type"
 msgstr "Zmień Rodzaj Elementu"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:820
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:694
 msgid "Change point head diameter"
 msgstr "Zmień średnicę łącznika"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Change the number of instances of the selected object"
 msgstr "Zmień liczbę kopii wybranego modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1589
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1718
 msgid "Change type"
 msgstr "Zmiana rodzaju"
 
@@ -1201,125 +1392,172 @@ msgstr "Zmiana rodzaju"
 msgid "Changelog && Download"
 msgstr "Pobierz && Listę Zmian"
 
-#: src/slic3r/GUI/GUI_App.cpp:442
+#: src/slic3r/GUI/GUI_App.cpp:1245
 msgid "Changing of an application language"
 msgstr "Zmiana języka aplikacji"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:769 src/slic3r/GUI/Preferences.cpp:64
+#: src/slic3r/GUI/ConfigWizard.cpp:1128 src/slic3r/GUI/Preferences.cpp:81
 msgid "Check for application updates"
 msgstr "Sprawdź aktualizacje aplikacji"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for configuration updates"
 msgstr "Sprawdzaj aktualizacje konfiguracji"
 
-#: src/slic3r/GUI/GUI_App.cpp:802
+#: src/slic3r/GUI/GUI_App.cpp:1482
 msgid "Check for updates"
 msgstr "Sprawdź akt&ualizacje"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:532
+#: src/slic3r/GUI/BedShapeDialog.cpp:608
 msgid "Choose a file to import bed texture from (PNG/SVG):"
 msgstr "Wybierz plik, z którego ma być zaimportowana tekstura stołu (PNG/SVG):"
 
-#: src/slic3r/GUI/MainFrame.cpp:773
+#: src/slic3r/GUI/MainFrame.cpp:1474
 msgid "Choose a file to slice (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Wybierz plik do pocięcia (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:555
+#: src/slic3r/GUI/BedShapeDialog.cpp:631
 msgid "Choose an STL file to import bed model from:"
 msgstr "Wybierz plik STL, z którego ma być zaimportowany  model stołu:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:487
+#: src/slic3r/GUI/BedShapeDialog.cpp:563
 msgid "Choose an STL file to import bed shape from:"
 msgstr "Wybierz plik STL, z którego ma być zaimportowany kształt stołu:"
 
-#: src/slic3r/GUI/GUI_App.cpp:555
+#: src/slic3r/GUI/GUI_App.cpp:1208
 msgid "Choose one file (3MF/AMF):"
 msgstr "Wybierz jeden plik (3MF/AMF):"
 
-#: src/slic3r/GUI/GUI_App.cpp:567
+#: src/slic3r/GUI/GUI_App.cpp:1233
+msgid "Choose one file (GCODE/.GCO/.G/.ngc/NGC):"
+msgstr "Wybierz jeden plik (GCODE/.GCO/.G/.ngc/NGC):"
+
+#: src/slic3r/GUI/GUI_App.cpp:1220
 msgid "Choose one or more files (STL/OBJ/AMF/3MF/PRUSA):"
 msgstr "Wybierz jeden lub więcej plików (STL/OBJ/AMF/3MF/PRUSA):"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:895
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:35
+msgid "Choose SLA archive:"
+msgstr "Wybierz archiwum SLA:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1261
 msgid "Choose the type of firmware used by your printer."
 msgstr "Wybierz rodzaj firmware używanego przez Twoją drukarkę."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:89
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:53
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:36
+msgid "Circle"
+msgstr "Koło"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:142
 msgid "Circular"
 msgstr "Okrągły"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/GLCanvas3D.cpp:4657
-msgid "Click right mouse button to open History"
-msgstr "Kliknij prawym przyciskiem myszy, aby otworzyć Historię"
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/GLCanvas3D.cpp:5067
+msgid "Click right mouse button to open/close History"
+msgstr "Kliknij prawym przyciskiem myszy, aby otworzyć/zamknąć historię"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:404
+#: src/slic3r/GUI/GUI_ObjectList.cpp:451
 msgid "Click the icon to change the object printable property"
 msgstr "Kliknij na ikonę, aby włączyć/wyłączyć drukowanie modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:398
+#: src/slic3r/GUI/GUI_ObjectList.cpp:445
 msgid "Click the icon to change the object settings"
 msgstr "Kliknij na ikonę, aby zmienić ustawienia modelu"
 
-#: src/slic3r/GUI/Plater.cpp:343
+#: src/slic3r/GUI/PresetComboBoxes.cpp:566
 msgid "Click to edit preset"
-msgstr "Kliknij aby edytować zestaw ustawień"
+msgstr "Kliknij, aby edytować zestaw ustawień"
 
-#: src/libslic3r/PrintConfig.cpp:252
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to hide"
+msgstr "Kliknij, aby ukryć"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2071
+msgid "Click to show"
+msgstr "Kliknij, aby pokazać"
+
+#: src/libslic3r/PrintConfig.cpp:286
 msgid "Clip multi-part objects"
 msgstr "Przycinaj modele kilkuczęściowe"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:25
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
 msgid "Clipping of view"
 msgstr "Widok przecinania"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:852
-#: src/slic3r/GUI/Mouse3DController.cpp:364
-#: src/slic3r/GUI/PrintHostDialogs.cpp:161
+#: src/slic3r/GUI/Mouse3DController.cpp:353
+#: src/slic3r/GUI/PrintHostDialogs.cpp:159
 msgid "Close"
 msgstr "Zamknij"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
-#: src/libslic3r/PrintConfig.cpp:2934
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:3098
 msgid "Closing distance"
 msgstr "Dystans domykania"
 
-#: src/slic3r/GUI/Plater.cpp:1260 src/libslic3r/PrintConfig.cpp:582
+#: src/slic3r/GUI/MainFrame.cpp:1297 src/slic3r/GUI/Plater.cpp:2144
+msgid "Collapse sidebar"
+msgstr "Zwiń pasek narzędzi"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:180
+msgid "Collapse/Expand the sidebar"
+msgstr "Zwiń/rozwiń pasek narzędzi"
+
+#: src/slic3r/GUI/Plater.cpp:1198 src/libslic3r/PrintConfig.cpp:618
 msgid "Color"
 msgstr "Kolor"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1005
+#: src/slic3r/GUI/GCodeViewer.cpp:2410 src/slic3r/GUI/GCodeViewer.cpp:2438
+msgid "Color change"
+msgstr "Zmiana koloru"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1130
 msgid "Color change (\"%1%\")"
 msgstr "Zmiana koloru (\"%1%\")"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1006
+#: src/slic3r/GUI/DoubleSlider.cpp:1131
 msgid "Color change (\"%1%\") for Extruder %2%"
 msgstr "Zmiana koloru (\"%1%\") dla ekstrudera %2%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:995
+#: src/slic3r/GUI/GLCanvas3D.cpp:1001
 #, c-format
 msgid "Color change for Extruder %d at %.2f mm"
 msgstr "Zmiana koloru dla ekstrudera %d na wysokości %.2f mm"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:228 src/slic3r/GUI/GUI_Preview.cpp:572
-#: src/libslic3r/GCode/PreviewData.cpp:359
+#: src/slic3r/GUI/Tab.cpp:2203
+msgid "Color Change G-code"
+msgstr "G-code ze zmianą koloru"
+
+#: src/libslic3r/PrintConfig.cpp:1960
+msgid "Color change G-code"
+msgstr "G-code ze zmianą koloru"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2531 src/slic3r/GUI/GUI_Preview.cpp:1475
+msgid "Color changes"
+msgstr "Zmiany koloru"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2242 src/slic3r/GUI/GUI_Preview.cpp:282
+#: src/slic3r/GUI/GUI_Preview.cpp:784 src/libslic3r/GCode/PreviewData.cpp:364
 msgid "Color Print"
 msgstr "Zmiana Koloru"
 
-#: src/libslic3r/PrintConfig.cpp:260
+#: src/libslic3r/PrintConfig.cpp:294
 msgid "Colorprint height"
 msgstr "Wysokość (warstwa) zmiany koloru"
 
-#: src/libslic3r/PrintConfig.cpp:990
+#: src/libslic3r/PrintConfig.cpp:1034
 msgid "Combine infill every"
 msgstr "Scalaj wypełnienie co"
 
-#: src/libslic3r/PrintConfig.cpp:995
+#: src/libslic3r/PrintConfig.cpp:1039
 msgid "Combine infill every n layers"
 msgstr "Scalaj wypełnienie co n warstw"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:148
 msgid "Commands"
 msgstr "Komendy"
 
@@ -1327,23 +1565,23 @@ msgstr "Komendy"
 msgid "Comment:"
 msgstr "Komentarz:"
 
-#: src/slic3r/GUI/Tab.cpp:56 src/libslic3r/PrintConfig.cpp:280
+#: src/slic3r/GUI/Tab.cpp:107 src/libslic3r/PrintConfig.cpp:314
 msgid "Compatible print profiles"
 msgstr "Kompatybilne profile druku"
 
-#: src/libslic3r/PrintConfig.cpp:286
+#: src/libslic3r/PrintConfig.cpp:320
 msgid "Compatible print profiles condition"
 msgstr "Warunki kompatybilności profili druku"
 
-#: src/slic3r/GUI/Tab.cpp:50 src/libslic3r/PrintConfig.cpp:265
+#: src/slic3r/GUI/Tab.cpp:101 src/libslic3r/PrintConfig.cpp:299
 msgid "Compatible printers"
 msgstr "Kompatybilne drukarki"
 
-#: src/libslic3r/PrintConfig.cpp:271
+#: src/libslic3r/PrintConfig.cpp:305
 msgid "Compatible printers condition"
 msgstr "Warunki kompatybilności z drukarką"
 
-#: src/libslic3r/PrintConfig.cpp:304
+#: src/libslic3r/PrintConfig.cpp:338
 msgid "Complete individual objects"
 msgstr "Druk sekwencyjny (model po modelu)"
 
@@ -1351,27 +1589,27 @@ msgstr "Druk sekwencyjny (model po modelu)"
 msgid "Completed"
 msgstr "Zakończono"
 
-#: src/libslic3r/Zipper.cpp:54
+#: src/libslic3r/miniz_extension.cpp:113
 msgid "compression failed"
 msgstr "niepowodzenie kompresji"
 
-#: src/libslic3r/PrintConfig.cpp:426 src/libslic3r/PrintConfig.cpp:849
+#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:887
 msgid "Concentric"
 msgstr "Koncentryczny"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2110
+#: src/slic3r/GUI/ConfigWizard.cpp:2625
 msgid "Configuration &Assistant"
 msgstr "&Asystent Konfiguracji"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2113
+#: src/slic3r/GUI/ConfigWizard.cpp:2628
 msgid "Configuration &Wizard"
 msgstr "Asystent Ko&nfiguracji"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2109
+#: src/slic3r/GUI/ConfigWizard.cpp:2624
 msgid "Configuration Assistant"
 msgstr "Asystent konfiguracji"
 
-#: src/libslic3r/PrintConfig.cpp:1316
+#: src/libslic3r/PrintConfig.cpp:1424
 msgid "Configuration notes"
 msgstr "Notatki konfiguracyjne"
 
@@ -1387,11 +1625,15 @@ msgstr "Aktualizacja konfiguracji"
 msgid "Configuration update is available"
 msgstr "Dostępna jest aktualizacja konfiguracji"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "Configuration update is available."
+msgstr "Dostępna jest aktualizacja konfiguracji."
+
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "Configuration updates"
 msgstr "Aktualizacje konfiguracji"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2112
+#: src/slic3r/GUI/ConfigWizard.cpp:2627
 msgid "Configuration Wizard"
 msgstr "Asystent Konfiguracji"
 
@@ -1399,15 +1641,11 @@ msgstr "Asystent Konfiguracji"
 msgid "Confirmation"
 msgstr "Potwierdzenie"
 
-#: src/slic3r/GUI/Tab.cpp:1931
-msgid "Connection failed."
-msgstr "Błąd połączenia."
-
-#: src/slic3r/GUI/Tab.cpp:3627
+#: src/slic3r/GUI/Tab.cpp:4046
 msgid "Connection of the support sticks and junctions"
 msgstr "Łączenia słupków i skrzyżowań podpór"
 
-#: src/slic3r/Utils/AstroBox.cpp:83
+#: src/slic3r/Utils/AstroBox.cpp:84
 msgid "Connection to AstroBox works correctly."
 msgstr "Połączenie z AstroBox pomyślne."
 
@@ -1423,124 +1661,136 @@ msgstr "Połączenie z FlashAir działa poprawnie a przesyłanie jest włączone
 msgid "Connection to OctoPrint works correctly."
 msgstr "Połączenie z OctoPrint pomyślne."
 
-#: src/slic3r/GUI/Tab.cpp:1928
-msgid "Connection to printer works correctly."
-msgstr "Połączenie z drukarką pomyślne."
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:260
+msgid "Connection to printers connected via the print host failed."
+msgstr "Niepowodzenie połączenia z drukarką podłączoną do serwera druku."
 
-#: src/slic3r/Utils/OctoPrint.cpp:176
+#: src/slic3r/Utils/OctoPrint.cpp:185
 msgid "Connection to Prusa SL1 works correctly."
 msgstr "Połączenie z Prusa SL1 działa prawidłowo."
 
-#: src/libslic3r/PrintConfig.cpp:1909
+#: src/libslic3r/PrintConfig.cpp:2051
 msgid "Contact Z distance"
 msgstr "Odstęp w osi Z"
 
-#: src/slic3r/GUI/AboutDialog.cpp:261
+#: src/slic3r/GUI/AboutDialog.cpp:286
 msgid "Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik and numerous others."
 msgstr "Wkład: Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Vojtech Bubnik i wielu innych."
 
-#: src/libslic3r/PrintConfig.cpp:2659
+#: src/slic3r/GUI/GUI_App.cpp:245
+msgid "Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others."
+msgstr "Swój wkład mają: Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik oraz wielu innych."
+
+#: src/libslic3r/PrintConfig.cpp:2823
 msgid "Controls the bridge type between two neighboring pillars. Can be zig-zag, cross (double zig-zag) or dynamic which will automatically switch between the first two depending on the distance of the two pillars."
 msgstr "Kontroluje typ mostu pomiędzy sąsiadującymi słupkami. Może być zyg-zagowy, krzyżowy (podwójny zyg-zag) lub dynamiczny, który oznacza automatyczne przełączanie się pomiędzy pierwszymi dwoma, w zależności od odstępu pomiędzy słupkami."
 
-#: src/slic3r/GUI/Tab.cpp:1444
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1858 src/slic3r/GUI/Plater.cpp:4886
+msgid "Convert from imperial units"
+msgstr "Konwertuj z jednostek imperialnych"
+
+#: src/slic3r/GUI/Tab.cpp:1790
 msgid "Cooling"
 msgstr "Chłodzenie"
 
-#: src/libslic3r/PrintConfig.cpp:660
+#: src/libslic3r/PrintConfig.cpp:696
 msgid "Cooling moves are gradually accelerating beginning at this speed."
 msgstr "Ruchy chłodzące przyspieszają zaczynając od tej prędkości."
 
-#: src/libslic3r/PrintConfig.cpp:679
+#: src/libslic3r/PrintConfig.cpp:715
 msgid "Cooling moves are gradually accelerating towards this speed."
 msgstr "Ruchy chłodzące przyspieszają kończąc z tą prędkością."
 
-#: src/slic3r/GUI/Tab.cpp:1465
+#: src/slic3r/GUI/Tab.cpp:1811
 msgid "Cooling thresholds"
 msgstr "Progi chłodzenia"
 
-#: src/libslic3r/PrintConfig.cpp:327
+#: src/libslic3r/PrintConfig.cpp:361
 msgid "Cooling tube length"
 msgstr "Długość rurki chłodzącej"
 
-#: src/libslic3r/PrintConfig.cpp:319
+#: src/libslic3r/PrintConfig.cpp:353
 msgid "Cooling tube position"
 msgstr "Pozycja rurki chłodzącej"
 
-#: src/slic3r/GUI/Plater.cpp:4752
+#: src/slic3r/GUI/Plater.cpp:4856
 msgid "Copies of the selected object"
 msgstr "Kopie wybranego modelu"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4505
+#: src/slic3r/GUI/GLCanvas3D.cpp:4871
 msgid "Copy"
 msgstr "Kopiuj"
 
-#: src/slic3r/GUI/MainFrame.cpp:589
+#: src/slic3r/GUI/MainFrame.cpp:1195
 msgid "Copy selection to clipboard"
 msgstr "Skopiuj zaznaczenie do schowka"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
 msgid "Copy to clipboard"
 msgstr "Skopiuj do schowka"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:154
+#: src/slic3r/GUI/SysInfoDialog.cpp:177
 msgid "Copy to Clipboard"
 msgstr "Kopiuj do Schowka"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:121
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:156
 msgid "Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."
 msgstr "Kopiowanie tymczasowego pliku G-code zostało zakończone, ale nie można otworzyć wyeksportowanego pliku w celu weryfikacji kopiowania. Wynikowy G-code znajduje się w lokalizacji %2%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:118
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:153
 msgid "Copying of the temporary G-code has finished but the original code at %1% couldn't be opened during copy check. The output G-code is at %2%.tmp."
 msgstr "Kopiowanie tymczasowego pliku G-code zostało zakończone, ale nie można otworzyć oryginalnego pliku w lokalizacji %1% w celu weryfikacji kopiowania. Wynikowy G-code znajduje się w lokalizacji %2%.tmp."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:480
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:522
 msgid "Copying of the temporary G-code to the output G-code failed"
 msgstr "Kopiowanie tymczasowego G-code do wyjściowego nie powiodło się"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:109
-msgid "Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?"
-msgstr "Kopiowanie tymczasowego G-code do wyjściowego nie powiodło się. Sprawdź, czy karta nie jest zabezpieczona przed zapisem."
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+msgid ""
+"Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\n"
+"Error message: %1%"
+msgstr ""
+"Niepowodzenie kopiowania tymczasowego G-code do pliku wyjściowego G-code. Karta SD zabezpieczona przed zapisem? \n"
+"Kod błędu: %1%"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:112
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:147
 msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
 msgstr "Niepowodzenie kopiowania tymczasowego pliku G-code do pliku docelowego. Może być to spowodowane problemem z urządzeniem docelowym. Spróbuj wyeksportować G-code ponownie lub użyj innego urządzenia. Uszkodzony plik wynikowy G-code znajduje się w lokalizacji %1%.tmp."
 
-#: src/slic3r/GUI/AboutDialog.cpp:127 src/slic3r/GUI/AboutDialog.cpp:256
+#: src/slic3r/GUI/AboutDialog.cpp:139 src/slic3r/GUI/AboutDialog.cpp:281
 msgid "Copyright"
 msgstr "Prawa autorskie"
 
-#: src/libslic3r/PrintConfig.cpp:2571 src/libslic3r/PrintConfig.cpp:2572
+#: src/libslic3r/PrintConfig.cpp:2714 src/libslic3r/PrintConfig.cpp:2715
 msgid "Correction for expansion"
 msgstr "Korekcja rozszerzania"
 
-#: src/slic3r/GUI/Tab.cpp:2100 src/slic3r/GUI/Tab.cpp:3519
+#: src/slic3r/GUI/Tab.cpp:2270 src/slic3r/GUI/Tab.cpp:3935
 msgid "Corrections"
 msgstr "Korekcje"
 
-#: src/slic3r/GUI/Plater.cpp:1243 src/libslic3r/PrintConfig.cpp:760
-#: src/libslic3r/PrintConfig.cpp:2510 src/libslic3r/PrintConfig.cpp:2511
+#: src/slic3r/GUI/Plater.cpp:1158 src/libslic3r/PrintConfig.cpp:796
+#: src/libslic3r/PrintConfig.cpp:2653 src/libslic3r/PrintConfig.cpp:2654
 msgid "Cost"
 msgstr "Koszt"
 
-#: src/slic3r/GUI/Plater.cpp:239
+#: src/slic3r/GUI/Plater.cpp:245
 msgid "Cost (money)"
 msgstr "Koszt (pieniędzy)"
 
-#: src/slic3r/GUI/Plater.cpp:2835
+#: src/slic3r/GUI/Jobs/ArrangeJob.cpp:176
 msgid "Could not arrange model objects! Some geometries may be invalid."
 msgstr "Nie można ułożyć modeli! Niektóre geometrie mogą być nieprawidłowe."
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/Utils/AstroBox.cpp:90
 msgid "Could not connect to AstroBox"
 msgstr "Nie można połączyć się z AstroBox"
 
-#: src/slic3r/Utils/Duet.cpp:54
+#: src/slic3r/Utils/Duet.cpp:55
 msgid "Could not connect to Duet"
 msgstr "Nie można połączyć się z Duet"
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:74
 msgid "Could not connect to FlashAir"
 msgstr "Nie można połączyć z FlashAir"
 
@@ -1548,56 +1798,69 @@ msgstr "Nie można połączyć z FlashAir"
 msgid "Could not connect to OctoPrint"
 msgstr "Nie można połączyć się z OctoPrint"
 
-#: src/slic3r/Utils/OctoPrint.cpp:181
+#: src/slic3r/Utils/OctoPrint.cpp:191
 msgid "Could not connect to Prusa SLA"
 msgstr "Nie można połączyć się z Prusa SLA"
 
-#: src/slic3r/GUI/Tab.cpp:1687
+#: src/slic3r/Utils/Http.cpp:73
+msgid "Could not detect system SSL certificate store. PrusaSlicer will be unable to establish secure network connections."
+msgstr "Nie mogę wykryć magazynu certyfikatów SSL. PrusaSlicer nie będzie w stanie nawiązać bezpiecznego połączenia z siecią."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:289
 msgid "Could not get a valid Printer Host reference"
 msgstr "Brak prawidłowego odwołania do serwera druku"
 
-#: src/slic3r/Utils/Duet.cpp:134
+#: src/slic3r/Utils/Duet.cpp:136
 msgid "Could not get resources to create a new connection"
 msgstr "Brak zasobów do utworzenia nowego połączenia"
 
-#: src/libslic3r/PrintConfig.cpp:1959
+#: src/libslic3r/PrintConfig.cpp:2101
 msgid "Cover the top contact layer of the supports with loops. Disabled by default."
 msgstr "Pokryj pętlą górną warstwę podpór. Domyślnie wyłączone."
 
-#: src/libslic3r/PrintConfig.cpp:89
+#: src/libslic3r/PrintConfig.cpp:91
 msgid "Cracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low."
 msgstr "Szpary mniejsze niż dwukrotność wartości parametru \"promień zamykania szpar\" zostaną zamknięte przy cięciu. Operacja zamykania szpar może zmniejszyć finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej wartości na rozsądnie niskim poziomie."
 
-#: src/libslic3r/Zipper.cpp:58
+#: src/libslic3r/miniz_extension.cpp:117
 msgid "CRC-32 check failed"
 msgstr "Weryfikacja CRC-32 nie powiodła się"
 
-#: src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:3021
 msgid "Create pad around object and ignore the support elevation"
 msgstr "Dodaj podkładkę wokół modelu i zignoruj podniesienie na podporach"
 
-#: src/libslic3r/PrintConfig.cpp:2724
+#: src/libslic3r/PrintConfig.cpp:2888
 msgid "Critical angle"
 msgstr "Kąt krytyczny"
 
-#: src/libslic3r/PrintConfig.cpp:2668
+#: src/libslic3r/PrintConfig.cpp:2832
 msgid "Cross"
 msgstr "Krzyżowy"
 
-#: src/libslic3r/PrintConfig.cpp:847
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:225
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:203
+msgid "Ctrl + Mouse wheel"
+msgstr "Ctrl + kółko myszy"
+
+#: src/libslic3r/PrintConfig.cpp:885
 msgid "Cubic"
 msgstr "Sześcienny"
 
-#: src/slic3r/GUI/wxExtensions.cpp:704
+#: src/slic3r/Utils/Http.cpp:91
+msgid "CURL init has failed. PrusaSlicer will be unable to establish network connections. See logs for additional details."
+msgstr "Niepowodzenie inicjalizacji CURL. PrusaSlicer nie będzie w stanie nawiązać połączenia przez sieć. Szczegóły w logach."
+
+#: src/slic3r/GUI/wxExtensions.cpp:624
 #, c-format
 msgid "Current mode is %s"
 msgstr "Obecny tryb to %s"
 
-#: src/slic3r/GUI/Tab.cpp:959
+#: src/slic3r/GUI/Tab.cpp:1278
 msgid "Current preset is inherited from"
 msgstr "Obecny zestaw ustawień jest dziedziczony z"
 
-#: src/slic3r/GUI/Tab.cpp:957
+#: src/slic3r/GUI/Tab.cpp:1276
 msgid "Current preset is inherited from the default preset."
 msgstr "Obecny zestaw ustawień jest dziedziczony z zestawu domyślnego."
 
@@ -1605,451 +1868,488 @@ msgstr "Obecny zestaw ustawień jest dziedziczony z zestawu domyślnego."
 msgid "Current version:"
 msgstr "Obecna wersja:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:98 src/slic3r/GUI/GUI_Preview.cpp:249
-#: src/libslic3r/ExtrusionEntity.cpp:322
+#: src/slic3r/GUI/BedShapeDialog.cpp:143 src/slic3r/GUI/GUI_Preview.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:327 src/libslic3r/ExtrusionEntity.cpp:362
 msgid "Custom"
 msgstr "Własny"
 
-#: src/libslic3r/PrintConfig.cpp:112
+#: src/libslic3r/PrintConfig.cpp:114
 msgid "Custom CA certificate file can be specified for HTTPS OctoPrint connections, in crt/pem format. If left blank, the default OS CA certificate repository is used."
 msgstr "Dla połączeń HTTPS z OctoPrint może zostać użyty własny plik certyfikatu CA w formacie crt/pem. Jeśli pole zostanie puste, to zostanie użyty plik z systemowego repozytorium CA."
 
-#: src/slic3r/GUI/Tab.cpp:1527 src/slic3r/GUI/Tab.cpp:1975
+#: src/slic3r/GUI/Tab.cpp:1872 src/slic3r/GUI/Tab.cpp:2160
+#: src/libslic3r/PrintConfig.cpp:1978
 msgid "Custom G-code"
 msgstr "Własny G-code"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1619
+#: src/slic3r/GUI/DoubleSlider.cpp:1815
 msgid "Custom G-code on current layer (%1% mm)."
 msgstr "Własny G-code na obecnej warstwie (%1% mm)."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/GCodeViewer.cpp:2580 src/slic3r/GUI/GUI_Preview.cpp:1477
+msgid "Custom G-codes"
+msgstr "Własny G-code"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer"
 msgstr "Własna Drukarka"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:732
+#: src/slic3r/GUI/ConfigWizard.cpp:1091
 msgid "Custom Printer Setup"
 msgstr "Ustawienie Własnej Drukarki"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:736
+#: src/slic3r/GUI/ConfigWizard.cpp:1095
 msgid "Custom profile name:"
 msgstr "Nazwa własnego profilu:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:42
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:144 src/libslic3r/PrintConfig.cpp:3402
+#: src/slic3r/GUI/DoubleSlider.cpp:1135
+msgid "Custom template (\"%1%\")"
+msgstr "Własny szablon (\"%1%\")"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:146 src/libslic3r/PrintConfig.cpp:3601
 msgid "Cut"
 msgstr "Przetnij"
 
-#: src/slic3r/GUI/Plater.cpp:4786
+#: src/slic3r/GUI/Plater.cpp:4921
 msgid "Cut by Plane"
 msgstr "Tnij Płaszczyzną"
 
-#: src/libslic3r/PrintConfig.cpp:3403
+#: src/libslic3r/PrintConfig.cpp:3602
 msgid "Cut model at the given Z."
 msgstr "Przetnij model na wysokości Z."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Cylinder"
 msgstr "Cylinder"
 
-#: src/slic3r/GUI/MainFrame.cpp:568
+#: src/slic3r/GUI/MainFrame.cpp:1174
 msgid "D&eselect all"
 msgstr "&Odznacz wszystko"
 
-#: src/libslic3r/PrintConfig.cpp:3504
+#: src/libslic3r/PrintConfig.cpp:3709
 msgid "Data directory"
 msgstr "Katalog danych"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:313
+#: src/slic3r/GUI/Mouse3DController.cpp:300
 msgid "Deadzone:"
 msgstr "Martwa strefa:"
 
-#: src/libslic3r/Zipper.cpp:52
+#: src/libslic3r/miniz_extension.cpp:111
 msgid "decompression failed or archive is corrupted"
 msgstr "niepowodzenie rozpakowywania lub uszkodzone archiwum"
 
-#: src/slic3r/GUI/Plater.cpp:4720
+#: src/slic3r/GUI/Plater.cpp:4824
 msgid "Decrease Instances"
 msgstr "Zmniejsz ilość instancji"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1704 src/libslic3r/PrintConfig.cpp:335
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1832 src/libslic3r/PrintConfig.cpp:369
 msgid "Default"
 msgstr "Domyślnie"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:457 src/slic3r/GUI/GUI_ObjectList.cpp:469
-#: src/slic3r/GUI/GUI_ObjectList.cpp:917 src/slic3r/GUI/GUI_ObjectList.cpp:3967
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3977
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4012
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:200
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:257
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:282
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:490
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:1753
+#: src/slic3r/GUI/ExtraRenderers.cpp:297 src/slic3r/GUI/GUI_ObjectList.cpp:496
+#: src/slic3r/GUI/GUI_ObjectList.cpp:508 src/slic3r/GUI/GUI_ObjectList.cpp:1015
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4454
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4464
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4499
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:202
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:259
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:284
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:492
 msgid "default"
 msgstr "domyślnie"
 
-#: src/libslic3r/PrintConfig.cpp:777
+#: src/libslic3r/PrintConfig.cpp:813
 msgid "Default base angle for infill orientation. Cross-hatching will be applied to this. Bridges will be infilled using the best direction Slic3r can detect, so this setting does not affect them."
 msgstr "Domyślny kąt linii wypełnienia. Mosty będą wypełniane z użyciem najlepszego kierunku obliczonego przez Slic3r, więc to ustawienie ich nie dotyczy."
 
-#: src/libslic3r/PrintConfig.cpp:554
+#: src/slic3r/GUI/GCodeViewer.cpp:2289
+msgid "Default color"
+msgstr "Domyślny kolor"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2313
+msgid "default color"
+msgstr "domyślny kolor"
+
+#: src/libslic3r/PrintConfig.cpp:590
 msgid "Default extrusion width"
 msgstr "Domyślna szerokość linii"
 
-#: src/slic3r/GUI/Tab.cpp:987
+#: src/slic3r/GUI/Tab.cpp:1305
 msgid "default filament profile"
 msgstr "domyślny profil filamentu"
 
-#: src/libslic3r/PrintConfig.cpp:345
+#: src/libslic3r/PrintConfig.cpp:379
 msgid "Default filament profile"
 msgstr "Domyślny profil filamentu"
 
-#: src/libslic3r/PrintConfig.cpp:346
+#: src/libslic3r/PrintConfig.cpp:380
 msgid "Default filament profile associated with the current printer profile. On selection of the current printer profile, this filament profile will be activated."
 msgstr "Domyślny profil filamentu powiązany z obecnym profilem drukarki. Przy wybraniu obecnego profilu drukarki automatycznie zostanie wybrany ten profil filamentu."
 
-#: src/slic3r/GUI/Tab.cpp:2919
-#, c-format
-msgid "Default preset (%s)"
-msgstr "Domyślny zestaw ustawień (%s)"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:904 src/slic3r/GUI/GLCanvas3D.cpp:933
+#: src/slic3r/GUI/GLCanvas3D.cpp:910 src/slic3r/GUI/GLCanvas3D.cpp:939
 msgid "Default print color"
 msgstr "Domyślny kolor druku"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1302
 msgid "default print profile"
 msgstr "domyślny profil druku"
 
-#: src/libslic3r/PrintConfig.cpp:352
+#: src/libslic3r/PrintConfig.cpp:386
 msgid "Default print profile"
 msgstr "Domyślny profil druku"
 
-#: src/libslic3r/PrintConfig.cpp:353 src/libslic3r/PrintConfig.cpp:2592
-#: src/libslic3r/PrintConfig.cpp:2603
+#: src/libslic3r/PrintConfig.cpp:387 src/libslic3r/PrintConfig.cpp:2735
+#: src/libslic3r/PrintConfig.cpp:2746
 msgid "Default print profile associated with the current printer profile. On selection of the current printer profile, this print profile will be activated."
 msgstr "Domyślny profil druku powiązany z obecnym profilem drukarki. Przy wybraniu obecnego profilu drukarki automatycznie zostanie wybrany ten profil filamentu."
 
-#: src/slic3r/GUI/Tab.cpp:1001
+#: src/slic3r/GUI/Tab.cpp:1319
 msgid "default SLA material profile"
 msgstr "domyślny profil materiału SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2591 src/libslic3r/PrintConfig.cpp:2602
+#: src/libslic3r/PrintConfig.cpp:2734 src/libslic3r/PrintConfig.cpp:2745
 msgid "Default SLA material profile"
 msgstr "Domyślny profil materiału SLA"
 
-#: src/slic3r/GUI/Tab.cpp:1005
+#: src/slic3r/GUI/Tab.cpp:1323
 msgid "default SLA print profile"
 msgstr "domyślny profil druku SLA"
 
-#: src/slic3r/GUI/Field.cpp:136
+#: src/slic3r/GUI/Field.cpp:184
 msgid "default value"
 msgstr "wartość domyślna"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:734
+#: src/slic3r/GUI/ConfigWizard.cpp:1093
 msgid "Define a custom printer profile"
 msgstr "Zdefiniuj własny profil drukarki"
 
-#: src/libslic3r/PrintConfig.cpp:2798
+#: src/libslic3r/PrintConfig.cpp:2962
 msgid "Defines the pad cavity depth. Set to zero to disable the cavity. Be careful when enabling this feature, as some resins may produce an extreme suction effect inside the cavity, which makes peeling the print off the vat foil difficult."
-msgstr "Definiuje wgłębienie podkładki. Ustaw 0 aby je wyłączyć. Zachowaj ostrożność przy ustawianiu wgłębienia, ponieważ niektóre żywice mogą powodować bardzo silny efekt zasysania wewnątrz wgłębienia, co może powodować trudności z oddzieleniem wydruku od folii zbiornika."
+msgstr "Definiuje wgłębienie podkładki. Ustaw 0, aby je wyłączyć. Zachowaj ostrożność przy ustawianiu wgłębienia, ponieważ niektóre żywice mogą powodować bardzo silny efekt zasysania wewnątrz wgłębienia, co może powodować trudności z oddzieleniem wydruku od dna zbiornika."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:346
+#: src/slic3r/GUI/GUI_ObjectList.cpp:393
 msgid "degenerate facets"
 msgstr "ponowne generowanie ścianek"
 
-#: src/libslic3r/PrintConfig.cpp:640
+#: src/libslic3r/PrintConfig.cpp:676
 msgid "Delay after unloading"
 msgstr "Opóźnienie po rozładowaniu"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "delete"
 msgstr "usuń"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4475 src/slic3r/GUI/GUI_ObjectList.cpp:1718
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/GLCanvas3D.cpp:4841 src/slic3r/GUI/GUI_ObjectList.cpp:1846
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Delete"
 msgstr "Usuń"
 
-#: src/slic3r/GUI/MainFrame.cpp:575
+#: src/slic3r/GUI/MainFrame.cpp:1181
 msgid "Delete &all"
 msgstr "Usuń &wszystko"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4484 src/slic3r/GUI/KBShortcutsDialog.cpp:129
-#: src/slic3r/GUI/Plater.cpp:4669
+#: src/slic3r/GUI/GLCanvas3D.cpp:4850 src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/Plater.cpp:4774
 msgid "Delete all"
 msgstr "Usuń wszystko"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2176
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2341
 msgid "Delete All Instances from Object"
 msgstr "Usuń wszystkie kopie modelu"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1516
+#: src/slic3r/GUI/DoubleSlider.cpp:1708
 msgid "Delete color change"
 msgstr "Usuń zmianę koloru"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:219
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:220
 msgid "Delete color change marker for current layer"
 msgstr "Usuń punkt zmiany filamentu na obecnej warstwie"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1519
+#: src/slic3r/GUI/DoubleSlider.cpp:1711
 msgid "Delete custom G-code"
 msgstr "Usuń własny G-code"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:539
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:424
 msgid "Delete drainage hole"
 msgstr "Usuń otwór odpływowy"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2192
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2357
 msgid "Delete Height Range"
 msgstr "Usuń zakres wysokości"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2246
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2412
 msgid "Delete Instance"
 msgstr "Usuń instancję"
 
-#: src/slic3r/GUI/Plater.cpp:2712
+#: src/slic3r/GUI/Plater.cpp:2673
 msgid "Delete Object"
 msgstr "Usuń Model"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:101
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:104
 #, c-format
 msgid "Delete Option %s"
 msgstr "Usuń Opcję %s"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1518
+#: src/slic3r/GUI/DoubleSlider.cpp:1710
 msgid "Delete pause print"
-msgstr "Usuń pauzę wydruku"
+msgstr "Usuń pauzę"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
+#: src/slic3r/GUI/PresetComboBoxes.cpp:652
+msgid "Delete physical printer"
+msgstr "Usuń fizyczną drukarkę"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:659
+msgid "Delete Physical Printer"
+msgstr "Usuń fizyczną drukarkę"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:123
 msgid "Delete selected"
 msgstr "Usuń zaznaczone"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2830
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3221
 msgid "Delete Selected"
 msgstr "Usuń Zaznaczone"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2693
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3083
 msgid "Delete Selected Item"
 msgstr "Usuń Wybrany Obiekt"
 
-#: src/slic3r/GUI/Plater.cpp:4677
+#: src/slic3r/GUI/Plater.cpp:4782
 msgid "Delete Selected Objects"
 msgstr "Usuń Zaznaczone Modele"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2152
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2319
 msgid "Delete Settings"
-msgstr "Usuń Ustawienia"
+msgstr "Usuń ustawienia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2227
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2393
 msgid "Delete Subobject"
 msgstr "Usuń Model Podrzędny"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:631
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:514
 msgid "Delete support point"
 msgstr "Usuń punkt podpory"
 
-#: src/slic3r/GUI/Tab.cpp:134
+#: src/slic3r/GUI/Tab.cpp:204
 msgid "Delete this preset"
 msgstr "Usuń ten zestaw ustawień"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1035
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:55
+msgid "Delete this preset from this printer device"
+msgstr "Usuń ten zestaw ustawień z tej drukarki"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1160
 msgid "Delete tick mark - Left click or press \"-\" key"
 msgstr "Usuń zaznaczenie - kliknij lewym przyciskiem lub wciśnij klawisz \"-\""
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1517
+#: src/slic3r/GUI/DoubleSlider.cpp:1709
 msgid "Delete tool change"
 msgstr "Usuń zmianę narzędzia"
 
-#: src/slic3r/GUI/MainFrame.cpp:576
+#: src/slic3r/GUI/MainFrame.cpp:1182
 msgid "Deletes all objects"
 msgstr "Usuwa wszystkie modele"
 
-#: src/slic3r/GUI/MainFrame.cpp:573
+#: src/slic3r/GUI/MainFrame.cpp:1179
 msgid "Deletes the current selection"
 msgstr "Usuwa zaznaczenie"
 
-#: src/libslic3r/PrintConfig.cpp:717 src/libslic3r/PrintConfig.cpp:2503
-#: src/libslic3r/PrintConfig.cpp:2504
+#: src/libslic3r/PrintConfig.cpp:753 src/libslic3r/PrintConfig.cpp:2646
+#: src/libslic3r/PrintConfig.cpp:2647
 msgid "Density"
 msgstr "Gęstość"
 
-#: src/libslic3r/PrintConfig.cpp:791
+#: src/libslic3r/PrintConfig.cpp:827
 msgid "Density of internal infill, expressed in the range 0% - 100%."
 msgstr "Gęstość wypełnienia wewnętrznego, wyrażana w zakresie 0% - 100%."
 
-#: src/slic3r/GUI/Tab.cpp:1258 src/slic3r/GUI/Tab.cpp:1548
-#: src/slic3r/GUI/Tab.cpp:2019 src/slic3r/GUI/Tab.cpp:2135
-#: src/slic3r/GUI/Tab.cpp:3543 src/slic3r/GUI/Tab.cpp:3671
+#: src/slic3r/GUI/Tab.cpp:1588 src/slic3r/GUI/Tab.cpp:1895
+#: src/slic3r/GUI/Tab.cpp:2228 src/slic3r/GUI/Tab.cpp:2304
+#: src/slic3r/GUI/Tab.cpp:3959 src/slic3r/GUI/Tab.cpp:4090
 msgid "Dependencies"
 msgstr "Zależności"
 
-#: src/libslic3r/PrintConfig.cpp:1612 src/libslic3r/PrintConfig.cpp:1613
+#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1721
 msgid "Deretraction Speed"
 msgstr "Prędkość powrotu retrakcji"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:127
+#: src/slic3r/GUI/GCodeViewer.cpp:2529 src/slic3r/GUI/GUI_Preview.cpp:337
+#: src/slic3r/GUI/GUI_Preview.cpp:1473
+msgid "Deretractions"
+msgstr "Powroty retrakcji"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:172
+msgid "Descriptive name for the printer"
+msgstr "Opisowa nazwa drukarki"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:122
 msgid "Deselect all"
 msgstr "Odznacz wszystko"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Deselect by rectangle"
 msgstr "Odznaczenie prostokątem"
 
-#: src/slic3r/GUI/MainFrame.cpp:569
+#: src/slic3r/GUI/MainFrame.cpp:1175
 msgid "Deselects all objects"
 msgstr "Odznacza wszystkie modele"
 
-#: src/slic3r/GUI/Tab.cpp:963
+#: src/slic3r/GUI/Tab.cpp:1224
 msgid "Detach from system preset"
 msgstr "Odłącz od ustawień systemowych"
 
-#: src/slic3r/GUI/Tab.cpp:984
+#: src/slic3r/GUI/Tab.cpp:1246
 msgid "Detach preset"
 msgstr "Odłącz zestaw ustawień"
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/Tab.cpp:3323
 msgid "Detached"
 msgstr "Odłączono"
 
-#: src/libslic3r/PrintConfig.cpp:1373
+#: src/libslic3r/PrintConfig.cpp:1481
 msgid "Detect bridging perimeters"
 msgstr "Wykrywanie mostów przy obrysach"
 
-#: src/libslic3r/PrintConfig.cpp:2075
+#: src/libslic3r/PrintConfig.cpp:2218
 msgid "Detect single-width walls (parts where two extrusions don't fit and we need to collapse them into a single trace)."
 msgstr "Wykrywaj ściany o grubości jednego obrysu (obszary, gdzie 2 obrysy nie zmieszczą się i trzeba będzie połączyć je w jedną linię)."
 
-#: src/libslic3r/PrintConfig.cpp:2073
+#: src/libslic3r/PrintConfig.cpp:2216
 msgid "Detect thin walls"
 msgstr "Wykrywanie cienkich ścian"
 
-#: src/libslic3r/PrintConfig.cpp:3472
+#: src/libslic3r/PrintConfig.cpp:3671
 msgid "Detect unconnected parts in the given model(s) and split them into separate objects."
 msgstr "Wykryj niepołączone elementy załadowanych modelu i odłącz je, tworząc osobne modele."
 
-#: src/slic3r/GUI/Plater.cpp:2368
+#: src/slic3r/GUI/Plater.cpp:2330
 msgid "Detected advanced data"
 msgstr "Wykryto zaawansowane dane"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:289
+#: src/slic3r/GUI/Mouse3DController.cpp:274
 msgid "Device:"
 msgstr "Urządzenie:"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:93 src/libslic3r/PrintConfig.cpp:709
+#: src/slic3r/GUI/BedShapeDialog.cpp:95 src/libslic3r/PrintConfig.cpp:745
 msgid "Diameter"
 msgstr "Średnica"
 
-#: src/libslic3r/PrintConfig.cpp:2694
+#: src/libslic3r/PrintConfig.cpp:2858
 msgid "Diameter in mm of the pillar base"
 msgstr "Średnica podstawy słupka w mm"
 
-#: src/libslic3r/PrintConfig.cpp:2650
+#: src/libslic3r/PrintConfig.cpp:2793
 msgid "Diameter in mm of the support pillars"
 msgstr "Średnica słupków podpór w mm"
 
-#: src/libslic3r/PrintConfig.cpp:2622
+#: src/libslic3r/PrintConfig.cpp:2765
 msgid "Diameter of the pointing side of the head"
 msgstr "Średnica spiczastej części łącznika"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:94
+#: src/slic3r/GUI/BedShapeDialog.cpp:131
 msgid "Diameter of the print bed. It is assumed that origin (0,0) is located in the center."
 msgstr "Średnica stołu. Z założenia punkt bazowy (0, 0) jest zlokalizowany na środku."
 
-#: src/libslic3r/PrintConfig.cpp:1639
+#: src/libslic3r/PrintConfig.cpp:1747
 msgid "Direction"
 msgstr "Kierunek"
 
-#: src/libslic3r/PrintConfig.cpp:359
+#: src/libslic3r/PrintConfig.cpp:393
 msgid "Disable fan for the first"
 msgstr "Wyłącz wentylator przy pierwszych"
 
-#: src/libslic3r/PrintConfig.cpp:1349
+#: src/libslic3r/PrintConfig.cpp:1457
 msgid "Disables retraction when the travel path does not exceed the upper layer's perimeters (and thus any ooze will be probably invisible)."
 msgstr "Wyłącza retrakcję gdy ruch jałowy nie wykracza poza zewnętrzny obrys górnej warstwy (więc jakiekolwiek wycieki z dyszy prawdopodobnie i tak nie będą widoczne)."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:952
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:641
+msgid "Discard"
+msgstr "Odrzuć"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1066
 msgid "Discard all custom changes"
 msgstr "Odrzuć wszystkie własne zmiany"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1375
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1222
 msgid "Discard changes"
 msgstr "Odrzuć zmiany"
 
-#: src/slic3r/GUI/GUI_App.cpp:932 src/slic3r/GUI/Tab.cpp:2946
-msgid "Discard changes and continue anyway?"
-msgstr "Odrzucić zmiany i kontynuować?"
-
-#: src/slic3r/GUI/Tab.cpp:2078
+#: src/slic3r/GUI/Tab.cpp:2248
 msgid "Display"
 msgstr "Wyświetlacz"
 
-#: src/libslic3r/PrintConfig.cpp:2359
+#: src/libslic3r/PrintConfig.cpp:2502
 msgid "Display height"
 msgstr "Wysokość wyświetlacza"
 
-#: src/libslic3r/PrintConfig.cpp:2378
+#: src/libslic3r/PrintConfig.cpp:2521
 msgid "Display horizontal mirroring"
 msgstr "Pokaż odbicie poziome"
 
-#: src/libslic3r/PrintConfig.cpp:2392
+#: src/libslic3r/PrintConfig.cpp:2535
 msgid "Display orientation"
 msgstr "Pokaż orientację"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Display the Print Host Upload Queue window"
 msgstr "Wyświetl okno kolejki serwera druku"
 
-#: src/libslic3r/PrintConfig.cpp:2385
+#: src/libslic3r/PrintConfig.cpp:2528
 msgid "Display vertical mirroring"
 msgstr "Pokaż odbicie pionowe"
 
-#: src/libslic3r/PrintConfig.cpp:2353
+#: src/libslic3r/PrintConfig.cpp:2496
 msgid "Display width"
 msgstr "Orientacja wyświetlacza"
 
-#: src/libslic3r/PrintConfig.cpp:377
+#: src/libslic3r/PrintConfig.cpp:411
 msgid "Distance between copies"
 msgstr "Odstęp pomiędzy kopiami"
 
-#: src/libslic3r/PrintConfig.cpp:1680
-msgid "Distance between skirt and object(s). Set this to zero to attach the skirt to the object(s) and get a brim for better adhesion."
-msgstr "Odległość skirtu od modelu. Ustaw zero aby dołączyć do modelu i uzyskać obramowanie dla lepszej przyczepności."
+#: src/libslic3r/PrintConfig.cpp:1157
+msgid "Distance between ironing lines"
+msgstr "Odstęp między liniami prasowania"
 
-#: src/libslic3r/PrintConfig.cpp:2882
+#: src/libslic3r/PrintConfig.cpp:1788
+msgid "Distance between skirt and object(s). Set this to zero to attach the skirt to the object(s) and get a brim for better adhesion."
+msgstr "Odległość skirtu od modelu. Ustaw zero, aby dołączyć do modelu i uzyskać obramowanie dla lepszej przyczepności."
+
+#: src/libslic3r/PrintConfig.cpp:3046
 msgid "Distance between two connector sticks which connect the object and the generated pad."
 msgstr "Odstęp pomiędzy dwoma słupkami łączącymi model z wygenerowaną podkładką."
 
-#: src/libslic3r/PrintConfig.cpp:1679
+#: src/libslic3r/PrintConfig.cpp:1787
 msgid "Distance from object"
 msgstr "Odstęp od modelu"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:85
+#: src/slic3r/GUI/BedShapeDialog.cpp:121
 msgid "Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."
 msgstr "Odległość koordynaty punktu zerowego od przedniego lewego rogu prostokąta."
 
-#: src/libslic3r/PrintConfig.cpp:320
+#: src/libslic3r/PrintConfig.cpp:354
 msgid "Distance of the center-point of the cooling tube from the extruder tip."
 msgstr "Odległość punktu centralnego rurki chłodzącej od końcówki ekstrudera."
 
-#: src/libslic3r/PrintConfig.cpp:1382
+#: src/libslic3r/PrintConfig.cpp:1490
 msgid "Distance of the extruder tip from the position where the filament is parked when unloaded. This should match the value in printer firmware."
 msgstr "Odległość końcówki ekstrudera do miejsca zatrzymania filamentu po rozładowaniu. Ta wartość powinna odpowiadać tej ustawionej w firmware drukarki."
 
-#: src/libslic3r/PrintConfig.cpp:378
+#: src/libslic3r/PrintConfig.cpp:412
 msgid "Distance used for the auto-arrange feature of the plater."
 msgstr "Odstęp używany przy automatycznym rozmieszczaniu modeli na stole."
 
-#: src/libslic3r/PrintConfig.cpp:3486
+#: src/libslic3r/PrintConfig.cpp:3685
 msgid "Do not fail if a file supplied to --load does not exist."
 msgstr "Nie przerywaj jeśli plik dołączony do --load nie istnieje."
 
-#: src/libslic3r/PrintConfig.cpp:3430
+#: src/libslic3r/PrintConfig.cpp:3629
 msgid "Do not rearrange the given models before merging and keep their original XY coordinates."
 msgstr "Nie przestawiaj modeli przed łączeniem i zachowaj ich początkowe koordynaty XY."
 
-#: src/slic3r/GUI/Field.cpp:240
+#: src/slic3r/GUI/Field.cpp:288
 #, c-format
 msgid ""
 "Do you mean %s%% instead of %s %s?\n"
@@ -2060,31 +2360,35 @@ msgstr ""
 "Kliknij TAK, jeśli chcesz zmienić wartość na %s %%,\n"
 "lub NIE, jeśli masz pewność, że %s %s jest prawidłową wartością."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1920
+#: src/slic3r/GUI/DoubleSlider.cpp:2138
 msgid "Do you want to delete all saved tool changes?"
 msgstr "Czy chcesz usunąć wszystkie zmiany narzędzi?"
 
-#: src/slic3r/GUI/GUI_App.cpp:884
+#: src/slic3r/GUI/GUI_App.cpp:1610
 msgid "Do you want to proceed?"
 msgstr "Czy chcesz kontynuować?"
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "Do you want to retry"
 msgstr "Czy chcesz spróbować ponownie"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1045
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:911
 msgid "Do you want to save your manually edited support points?"
 msgstr "Czy chcesz zapisać ręcznie edytowane punkty podpór?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1834
+#: src/slic3r/GUI/ConfigWizard.cpp:2261
 msgid "Do you want to select default filaments for these FFF printer models?"
 msgstr "Czy chcesz ustawić domyślne filamenty dla tych modeli drukarek FFF?"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1852
+#: src/slic3r/GUI/ConfigWizard.cpp:2279
 msgid "Do you want to select default SLA materials for these printer models?"
 msgstr "Czy chcesz ustawić domyślne materiały SLA dla tych modeli drukarek?"
 
-#: src/libslic3r/PrintConfig.cpp:3429
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "does not contain valid gcode."
+msgstr "nie zawiera prawidłowego g-code."
+
+#: src/libslic3r/PrintConfig.cpp:3628
 msgid "Don't arrange"
 msgstr "Nie układaj"
 
@@ -2092,7 +2396,7 @@ msgstr "Nie układaj"
 msgid "Don't notify about new releases any more"
 msgstr "Nie powiadamiaj o nowych wersjach"
 
-#: src/libslic3r/PrintConfig.cpp:369
+#: src/libslic3r/PrintConfig.cpp:403
 msgid "Don't support bridges"
 msgstr "Nie używaj podpór pod mostami"
 
@@ -2100,234 +2404,296 @@ msgstr "Nie używaj podpór pod mostami"
 msgid "Downgrade"
 msgstr "Deaktualizacja"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1803
 msgid "Draft shield"
 msgstr "Draft shield"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1369
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1216
 msgid "Drag"
 msgstr "Przeciągnij"
 
-#: src/libslic3r/SLAPrintSteps.cpp:44
+#: src/slic3r/GUI/Plater.cpp:1406
+msgid "Drag and drop G-code file"
+msgstr "Przeciągnij i upuść plik G-code"
+
+#: src/libslic3r/SLAPrintSteps.cpp:45
 msgid "Drilling holes into model."
 msgstr "Wiercenie otworów odpływowych w modelu."
 
-#: src/libslic3r/SLAPrintSteps.cpp:199
+#: src/libslic3r/SLAPrintSteps.cpp:201
 msgid "Drilling holes into the mesh failed. This is usually caused by broken model. Try to fix it first."
 msgstr "Niepowodzenie wiercenia otworów w siatce. Zazwyczaj dzieje się tak przez błędy w modelu. Spróbuj najpierw go naprawić."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:337
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:349
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:345
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:357
 msgid "Drop to bed"
 msgstr "Upuść na stół"
 
-#: src/libslic3r/PrintConfig.cpp:3433
+#: src/libslic3r/PrintConfig.cpp:3632
 msgid "Duplicate"
 msgstr "Duplikuj"
 
-#: src/libslic3r/PrintConfig.cpp:3438
+#: src/libslic3r/PrintConfig.cpp:3637
 msgid "Duplicate by grid"
 msgstr "Duplikuj wg siatki"
 
-#: src/slic3r/GUI/PresetHints.cpp:40
+#: src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Duration"
+msgstr "Czas trwania"
+
+#: src/slic3r/GUI/PresetHints.cpp:39
 msgid "During the other layers, fan"
 msgstr "Na pozostałych warstwach, wentylator"
 
-#: src/libslic3r/PrintConfig.cpp:2669
+#: src/libslic3r/PrintConfig.cpp:2833
 msgid "Dynamic"
 msgstr "Dynamicznie"
 
-#: src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1448
 msgid "E&xport"
 msgstr "&Eksport"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:347
+#: src/slic3r/GUI/GUI_ObjectList.cpp:394
 msgid "edges fixed"
 msgstr "naprawiono krawędzie"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1508
+#: src/slic3r/GUI/DoubleSlider.cpp:1700
 msgid "Edit color"
 msgstr "Edytuj kolor"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:960
+#: src/slic3r/GUI/DoubleSlider.cpp:1083
 msgid "Edit current color - Right click the colored slider segment"
 msgstr "Edytuj kolor - kliknij prawym przyciskiem na kolorowy segment suwaka"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1510
+#: src/slic3r/GUI/DoubleSlider.cpp:1702
 msgid "Edit custom G-code"
 msgstr "Edytuj własny G-code"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3003
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3459
 msgid "Edit Height Range"
 msgstr "Edytuj Zakres Wysokości"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1509
+#: src/slic3r/GUI/DoubleSlider.cpp:1701
 msgid "Edit pause print message"
 msgstr "Edytuj komunikat wstrzymania wydruku"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1037
+#: src/slic3r/GUI/PresetComboBoxes.cpp:645
+msgid "Edit physical printer"
+msgstr "Edytuj fizyczną drukarkę"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:641
+msgid "Edit preset"
+msgstr "Edytuj zestaw ustawień"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1162
 msgid "Edit tick mark - Ctrl + Left click"
 msgstr "Edytuj zaznaczenie - Ctrl + Klik lewym przyciskiem"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1038
+#: src/slic3r/GUI/DoubleSlider.cpp:1163
 msgid "Edit tick mark - Right click"
 msgstr "Edytuj zaznaczenie - kliknij prawym przyciskiem"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:282 src/slic3r/GUI/GUI_ObjectList.cpp:394
+#: src/slic3r/GUI/GUI_ObjectList.cpp:300 src/slic3r/GUI/GUI_ObjectList.cpp:441
 msgid "Editing"
 msgstr "Edytowanie"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Ejec&t SD card / Flash drive"
 msgstr "Wysuń kar&tę SD / pamięć flash"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/NotificationManager.cpp:780
+msgid "Eject drive"
+msgstr "Wysuń nośnik"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
 msgid "Eject SD card / Flash drive"
 msgstr "Wysuń kartę SD / pamięć flash"
 
-#: src/slic3r/GUI/MainFrame.cpp:547
+#: src/slic3r/GUI/MainFrame.cpp:1105
 msgid "Eject SD card / Flash drive after the G-code was exported to it."
 msgstr "Wysuń kartę SD / pamięć flash po wyeksportowaniu na nią G-code."
 
-#: src/slic3r/GUI/Plater.cpp:2202
+#: src/slic3r/GUI/Plater.cpp:2034
 #, c-format
 msgid "Ejecting of device %s(%s) has failed."
 msgstr "Wysuwanie urządzenia %s(%s) nie powiodło się."
 
-#: src/libslic3r/PrintConfig.cpp:118
+#: src/libslic3r/PrintConfig.cpp:120
 msgid "Elephant foot compensation"
 msgstr "Kompensacja \"stopy słonia\""
 
-#: src/libslic3r/PrintConfig.cpp:2447
+#: src/libslic3r/PrintConfig.cpp:2590
 msgid "Elephant foot minimum width"
 msgstr "Minimalna szerokość stopy słonia"
 
-#: src/libslic3r/SLAPrint.cpp:625
+#: src/libslic3r/SLAPrint.cpp:639
 msgid "Elevation is too low for object. Use the \"Pad around object\" feature to print the object without elevation."
 msgstr "Podniesienie zbyt małe dla modelu. Użyj funkcji \"Podkładka wokół modelu\", aby wydrukować model bez podniesienia."
 
-#: src/libslic3r/PrintConfig.cpp:1093
+#: src/libslic3r/PrintConfig.cpp:1186
 msgid "Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute intervals into the G-code to let the firmware show accurate remaining time. As of now only the Prusa i3 MK3 firmware recognizes M73. Also the i3 MK3 firmware supports M73 Qxx Sxx for the silent mode."
 msgstr "Umieść M73 P[postęp w procentach] R[pozostały czas w minutach] co 1 minutę w G-code, aby pozwolić firmware na wyświetlanie dokładnego pozostałego czasu. Na ten moment jedynie firmware drukarki Prusa i3 MK3 rozpoznaje komendę M73. Firmware i3 MK3 wspiera również M73 Qxx Sxx dla trybu Stealth."
 
-#: src/libslic3r/GCode.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1217
+msgid "Emit to G-code"
+msgstr "Przekaż do G-code"
+
+#: src/libslic3r/GCode.cpp:622
 msgid "Empty layers detected, the output would not be printable."
 msgstr "Wykryto puste warstwy - plik wynikowy nie będzie możliwy do wydrukowania."
 
-#: src/slic3r/GUI/Tab.cpp:1445 src/libslic3r/PrintConfig.cpp:1355
-#: src/libslic3r/PrintConfig.cpp:2200
+#: src/slic3r/GUI/Tab.cpp:1791 src/libslic3r/PrintConfig.cpp:1463
+#: src/libslic3r/PrintConfig.cpp:2343
 msgid "Enable"
 msgstr "Włącz"
 
-#: src/libslic3r/PrintConfig.cpp:313
+#: src/libslic3r/PrintConfig.cpp:347
 msgid "Enable auto cooling"
 msgstr "Włącz automatyczne chłodzenie"
 
-#: src/libslic3r/PrintConfig.cpp:572
+#: src/libslic3r/PrintConfig.cpp:608
 msgid "Enable fan if layer print time is below"
 msgstr "Włącz chłodzenie jeśli czas druku warstwy wynosi poniżej"
 
-#: src/libslic3r/PrintConfig.cpp:2908
+#: src/libslic3r/PrintConfig.cpp:3072
 msgid "Enable hollowing"
 msgstr "Włącz drążenie"
 
-#: src/libslic3r/PrintConfig.cpp:2380
+#: src/libslic3r/PrintConfig.cpp:2523
 msgid "Enable horizontal mirroring of output images"
 msgstr "Włącz odbicie poziome dla obrazów wyjściowych"
 
-#: src/libslic3r/PrintConfig.cpp:1867
+#: src/libslic3r/PrintConfig.cpp:1124
+msgid "Enable ironing"
+msgstr "Włącz prasowanie"
+
+#: src/libslic3r/PrintConfig.cpp:1125
+msgid "Enable ironing of the top layers with the hot print head for smooth surface"
+msgstr "Włącz prasowanie górnych warstw gorącą dyszą dla uzyskania gładkiej powierzchni"
+
+#: src/libslic3r/PrintConfig.cpp:2009
 msgid "Enable support material generation."
 msgstr "Włącz generowanie materiału podporowego."
 
-#: src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1010
 msgid "Enable this to add comments into the G-Code labeling print moves with what object they belong to, which is useful for the Octoprint CancelObject plugin. This settings is NOT compatible with Single Extruder Multi Material setup and Wipe into Object / Wipe into Infill."
-msgstr "Włącz tę opcję, aby dodawać komentarze do pliku G-code, przypisujące ruchy drukujące do konkretnych modeli, co pozwala współpracować z wtyczką CancelObject do OctoPrint. To ustawienie NIE jest kompatybilne z trybem Pojedynczym Multi Material i z ustawieniami Czyszczenia na wypełnieniu / modelu."
+msgstr "Włącz tę opcję, aby dodawać komentarze do pliku G-code, przypisujące ruchy drukujące do konkretnych modeli, co pozwala współpracować z wtyczką CancelObject w OctoPrint. To ustawienie NIE jest kompatybilne z trybem Pojedynczym Multi Material i z ustawieniami Czyszczenia na wypełnieniu / modelu."
 
-#: src/libslic3r/PrintConfig.cpp:929
+#: src/libslic3r/PrintConfig.cpp:973
 msgid "Enable this to get a commented G-code file, with each line explained by a descriptive text. If you print from SD card, the additional weight of the file could make your firmware slow down."
-msgstr "Włącz tą opcję aby dodawać komentarz opsiujący do każdej liniki pliku G-code. Przy druku z karty SD dodatkowy rozmiar pliku może sprawiać, że firmware będzie reagować wolniej."
+msgstr "Włącz tą opcję, aby dodawać komentarz opisujący do każdej linijki pliku G-code. Przy druku z karty SD dodatkowy rozmiar pliku może sprawiać, że firmware będzie reagować wolniej."
 
-#: src/libslic3r/PrintConfig.cpp:2186
+#: src/libslic3r/PrintConfig.cpp:2329
 msgid "Enable variable layer height feature"
 msgstr "Zmienna wysokość warstwy"
 
-#: src/libslic3r/PrintConfig.cpp:2387
+#: src/libslic3r/PrintConfig.cpp:2530
 msgid "Enable vertical mirroring of output images"
 msgstr "Włącz odbicie pionowe dla obrazów wyjściowych"
 
-#: src/slic3r/GUI/Tab.cpp:1534 src/slic3r/GUI/Tab.cpp:1982
-#: src/libslic3r/PrintConfig.cpp:385 src/libslic3r/PrintConfig.cpp:395
+#: src/slic3r/GUI/Tab.cpp:1880 src/slic3r/GUI/Tab.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:419 src/libslic3r/PrintConfig.cpp:429
 msgid "End G-code"
 msgstr "G-code końcowy"
 
-#: src/libslic3r/PrintConfig.cpp:1924
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:239
+msgid "Enforce"
+msgstr "Wymuś"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:30
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:381
+msgid "Enforce seam"
+msgstr "Wymuś szew"
+
+#: src/libslic3r/PrintConfig.cpp:2066
 msgid "Enforce support for the first"
 msgstr "Wymuś podpory dla pierwszych"
 
-#: src/libslic3r/PrintConfig.cpp:1931
+#: src/libslic3r/PrintConfig.cpp:2073
 msgid "Enforce support for the first n layers"
 msgstr "Wymuś podpory dla pierwszych n warstw"
 
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:47
+msgid "Enforce supports"
+msgstr "Wymuś podpory"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:198
 #: src/slic3r/GUI/PrintHostDialogs.cpp:229
 msgid "Enqueued"
 msgstr "Zakolejkowano"
 
-#: src/libslic3r/PrintConfig.cpp:407
+#: src/libslic3r/PrintConfig.cpp:441
 msgid "Ensure vertical shell thickness"
 msgstr "Zagwarantuj odpowiednią grubość ścianki"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1618
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4410
+#: src/slic3r/GUI/Search.cpp:433
+msgid "Enter a search term"
+msgstr "Wpisz wyszukiwaną frazę"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1814
 msgid "Enter custom G-code used on current layer"
 msgstr "Wprowadź własny G-code do wykonania na tej warstwie"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Enter new name"
 msgstr "Wprowadź nową nazwę"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1634
+#: src/slic3r/GUI/DoubleSlider.cpp:1830
 msgid "Enter short message shown on Printer display when a print is paused"
 msgstr "Wpisz krótką wiadomość wyświetlaną na ekranie drukarki, gdy druk jest wstrzymany"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1047
+#: src/slic3r/GUI/ConfigWizard.cpp:1413
 msgid "Enter the bed temperature needed for getting your filament to stick to your heated bed."
 msgstr "Wprowadź temperaturę potrzebną do dobrego przylegania filamentu do powierzchni podgrzewanego stołu."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:979
+#: src/slic3r/GUI/ConfigWizard.cpp:1345
 msgid "Enter the diameter of your filament."
 msgstr "Wprowadź średnicę filamentu."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:966
+#: src/slic3r/GUI/ConfigWizard.cpp:1332
 msgid "Enter the diameter of your printer's hot end nozzle."
 msgstr "Wprowadź średnicę dyszy hotendu."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1650
+#: src/slic3r/GUI/DoubleSlider.cpp:1851 src/slic3r/GUI/DoubleSlider.cpp:1855
 msgid "Enter the height you want to jump to"
 msgstr "Wprowadź wysokość, do której chcesz przejść"
 
-#: src/slic3r/GUI/Plater.cpp:4751
+#: src/slic3r/GUI/DoubleSlider.cpp:1851
+msgid "Enter the move you want to jump to"
+msgstr "Wpisz ruch, do którego chcesz przejść"
+
+#: src/slic3r/GUI/Plater.cpp:4855
 msgid "Enter the number of copies:"
 msgstr "Wpisz liczbę kopii:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1033
+#: src/slic3r/GUI/ConfigWizard.cpp:1399
 msgid "Enter the temperature needed for extruding your filament."
 msgstr "Wprowadź temperaturę potrzebną do ekstruzji filamentu."
 
-#: src/libslic3r/PrintConfig.cpp:761
+#: src/libslic3r/PrintConfig.cpp:797
 msgid "Enter your filament cost per kg here. This is only for statistical information."
 msgstr "Wprowadź koszt filamentu za kilogram. Służy tylko statystykom."
 
-#: src/libslic3r/PrintConfig.cpp:718
+#: src/libslic3r/PrintConfig.cpp:754
 msgid "Enter your filament density here. This is only for statistical information. A decent way is to weigh a known length of filament and compute the ratio of the length to volume. Better is to calculate the volume directly through displacement."
 msgstr "Wprowadź gęstość filamentu. Służy tylko statystykom. Dobrą metodą jest zważenie filamentu o zmierzonej długości i przeliczenie stosunku wagi do objętości."
 
-#: src/libslic3r/PrintConfig.cpp:710
+#: src/libslic3r/PrintConfig.cpp:746
 msgid "Enter your filament diameter here. Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
 msgstr "Wprowadź średnicę filamentu. Wymagana jest precyzja, więc użyj suwmiarki i zmierz filament w kilku miejscach, potem oblicz średnią."
 
-#: src/slic3r/GUI/MainFrame.cpp:422 src/slic3r/GUI/MainFrame.cpp:785
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:39
+msgid "Entering Paint-on supports"
+msgstr "Otwieram malowanie podpór"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:40
+msgid "Entering Seam painting"
+msgstr "Otwieram malowanie szwu"
+
+#: src/slic3r/GUI/MainFrame.cpp:1003 src/slic3r/GUI/MainFrame.cpp:1486
 #: src/slic3r/GUI/PrintHostDialogs.cpp:231
 msgid "Error"
 msgstr "Błąd"
@@ -2337,25 +2703,33 @@ msgstr "Błąd"
 msgid "Error accessing port at %s: %s"
 msgstr "Brak dostępu do portu %s: %s"
 
-#: src/slic3r/GUI/Plater.cpp:3433
+#: src/slic3r/GUI/Plater.cpp:3238
 msgid "Error during reload"
 msgstr "Błąd podczas przeładowywania"
 
-#: src/slic3r/GUI/Plater.cpp:5043
+#: src/slic3r/GUI/Plater.cpp:5172
 #, c-format
 msgid "Error exporting 3MF file %s"
 msgstr "Błąd eksportowania pliku 3MF %s"
 
-#: src/slic3r/GUI/Plater.cpp:5005
+#: src/slic3r/GUI/Plater.cpp:5138
 #, c-format
 msgid "Error exporting AMF file %s"
 msgstr "Błąd eksportu pliku AMF %s"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:154
+#: src/slic3r/GUI/OpenGLManager.cpp:276
+msgid "Error loading shaders"
+msgstr "Błąd ładowania modułów cieniujących"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:152
 msgid "Error Message"
 msgstr "Komunikat o błędzie"
 
-#: src/slic3r/GUI/AppConfig.cpp:114
+#: src/slic3r/GUI/GUI_App.cpp:661
+msgid "Error parsing PrusaGCodeViewer config file, it is probably corrupted. Try to manually delete the file to recover from the error."
+msgstr "Błąd przetwarzania pliku konfiguracyjnego PrusaGCodeViewer. Prawdopodobnie jest uszkodzony. Spróbuj ręcznie usunąć plik, aby pozbyć się błędu."
+
+#: src/slic3r/GUI/GUI_App.cpp:655 src/slic3r/GUI/GUI_App.cpp:670
 msgid "Error parsing PrusaSlicer config file, it is probably corrupted. Try to manually delete the file to recover from the error. Your user profiles will not be affected."
 msgstr "Błąd przetwarzania pliku konfiguracyjnego PrusaSlicer. Prawdopodobnie jest uszkodzony. Spróbuj ręcznie usunąć plik, aby pozbyć się błędu. Nie wpłynie to na Twoje profile."
 
@@ -2363,45 +2737,60 @@ msgstr "Błąd przetwarzania pliku konfiguracyjnego PrusaSlicer. Prawdopodobnie
 msgid "Error uploading to print host:"
 msgstr "Błąd wysyłania do serwera druku:"
 
-#: src/libslic3r/Zipper.cpp:102
+#: src/slic3r/GUI/Plater.cpp:4752
+msgid "Error while loading .gcode file"
+msgstr "Błąd wczytywania pliku .gcode"
+
+#: src/libslic3r/Zipper.cpp:27
 msgid "Error with zip archive"
 msgstr "Błąd archiwum .zip"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1918
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2077
 msgid "Error!"
 msgstr "Błąd!"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:505
+#: src/slic3r/GUI/BedShapeDialog.cpp:581
 msgid "Error! Invalid model"
 msgstr "Błąd! Nieprawidłowy model"
 
+#: src/slic3r/GUI/NotificationManager.cpp:667
+#: src/slic3r/GUI/NotificationManager.cpp:683
+#: src/slic3r/GUI/NotificationManager.cpp:694
+msgid "ERROR:"
+msgstr "BŁĄD:"
+
 #: src/slic3r/GUI/FirmwareDialog.cpp:647
 #, c-format
 msgid "Error: %s"
 msgstr "Błąd: %s"
 
-#: src/slic3r/GUI/Job.hpp:123
+#: src/slic3r/GUI/Jobs/Job.cpp:74
 msgid "ERROR: not enough resources to execute a new job."
 msgstr "BŁĄD: brak zasobów do wykonania nowego zadania."
 
-#: src/slic3r/GUI/Plater.cpp:240 src/slic3r/GUI/Plater.cpp:1216
-#: src/slic3r/GUI/Plater.cpp:1258
+#: src/slic3r/GUI/GCodeViewer.cpp:2552 src/slic3r/GUI/GCodeViewer.cpp:2557
+#: src/slic3r/GUI/Plater.cpp:246 src/slic3r/GUI/Plater.cpp:1125
+#: src/slic3r/GUI/Plater.cpp:1175 src/slic3r/GUI/Plater.cpp:1196
 msgid "Estimated printing time"
 msgstr "Szacowany czas druku"
 
-#: src/slic3r/GUI/Plater.cpp:502
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Event"
+msgstr "Wydarzenie"
+
+#: src/slic3r/GUI/Plater.cpp:368
 msgid "Everywhere"
 msgstr "Wszędzie"
 
-#: src/slic3r/GUI/PresetHints.cpp:51
+#: src/slic3r/GUI/PresetHints.cpp:50
 msgid "except for the first %1% layers."
 msgstr "za wyjątkiem pierwszych %1% warstw."
 
-#: src/slic3r/GUI/PresetHints.cpp:53
+#: src/slic3r/GUI/PresetHints.cpp:52
 msgid "except for the first layer."
 msgstr "za wyjątkiem pierwszej warstwy."
 
-#: src/libslic3r/Print.cpp:1377
+#: src/libslic3r/Print.cpp:1403
 msgid "Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm"
 msgstr "Wartość %1%=%2% mm jest zbyt duża, żeby mogła być wydrukowana z dyszą o średnicy %3% mm"
 
@@ -2410,116 +2799,129 @@ msgstr "Wartość %1%=%2% mm jest zbyt duża, żeby mogła być wydrukowana z dy
 msgid "Exit %s"
 msgstr "Wyjście %s"
 
-#: src/libslic3r/PrintConfig.cpp:371
+#: src/slic3r/GUI/Plater.cpp:2143
+msgid "Expand sidebar"
+msgstr "Rozwiń pasek narzędzi"
+
+#: src/libslic3r/PrintConfig.cpp:405
 msgid "Experimental option for preventing support material from being generated under bridged areas."
 msgstr "Funkcja eksperymentalna mająca zapobiegać tworzeniu podpór pod mostami."
 
-#: src/libslic3r/PrintConfig.cpp:1375
+#: src/libslic3r/PrintConfig.cpp:1483
 msgid "Experimental option to adjust flow for overhangs (bridge flow will be used), to apply bridge speed to them and enable fan."
 msgstr "Opcja eksperymentalna dostosowująca przepływ przy zwisach (zostanie zastosowany przepływ taki jak dla mostów), zastosuje również prędkość i chłodzenie takie jak dla mostów."
 
-#: src/slic3r/GUI/GUI_App.cpp:815 src/slic3r/GUI/wxExtensions.cpp:755
+#: src/slic3r/GUI/GUI_App.cpp:1507 src/slic3r/GUI/wxExtensions.cpp:676
 msgid "Expert"
 msgstr "Ekspert"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:822
+#: src/slic3r/GUI/ConfigWizard.cpp:1181
 msgid "Expert mode"
 msgstr "Tryb Eksperta"
 
-#: src/slic3r/GUI/GUI_App.cpp:815
+#: src/slic3r/GUI/GUI_App.cpp:1507
 msgid "Expert View Mode"
 msgstr "Tryb Widoku Eksperta"
 
-#: src/slic3r/GUI/Plater.cpp:5521
+#: src/slic3r/GUI/Plater.cpp:5706
 msgid "Export"
 msgstr "Eksport"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export &Config"
 msgstr "Eksport Konfigura&cji"
 
-#: src/slic3r/GUI/MainFrame.cpp:477 src/slic3r/GUI/MainFrame.cpp:749
+#: src/slic3r/GUI/MainFrame.cpp:1068 src/slic3r/GUI/MainFrame.cpp:1448
 msgid "Export &G-code"
 msgstr "Eksport &G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export &toolpaths as OBJ"
 msgstr "Ekspor&t ścieżek narzędzi jako OBJ"
 
-#: src/libslic3r/PrintConfig.cpp:3338
+#: src/libslic3r/PrintConfig.cpp:3531
 msgid "Export 3MF"
 msgstr "Eksport 3MF"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export all presets including physical printers to file"
+msgstr "Eksport do pliku wszystkich zestawów ustawień wraz z fizycznymi drukarkami"
+
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export all presets to file"
 msgstr "Eksport wszystkich zestawów ustawień do pliku"
 
-#: src/libslic3r/PrintConfig.cpp:3343
+#: src/libslic3r/PrintConfig.cpp:3536
 msgid "Export AMF"
 msgstr "Eksport AMF"
 
-#: src/slic3r/GUI/Plater.cpp:2598
+#: src/slic3r/GUI/Plater.cpp:2560
 msgid "Export AMF file:"
 msgstr "Eksport pliku AMF:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1657 src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1786 src/slic3r/GUI/Plater.cpp:3884
 msgid "Export as STL"
 msgstr "Eksport jako STL"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:124
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:117
 msgid "Export config"
 msgstr "Eksport konfiguracji"
 
-#: src/slic3r/GUI/MainFrame.cpp:503
+#: src/slic3r/GUI/MainFrame.cpp:1097
 msgid "Export Config &Bundle"
 msgstr "Eks&port Paczki Konfiguracyjnej"
 
-#: src/slic3r/GUI/MainFrame.cpp:500
+#: src/slic3r/GUI/MainFrame.cpp:1100
+msgid "Export Config Bundle With Physical Printers"
+msgstr "Eksport paczki konfiguracyjnej z drukarkami fizycznymi"
+
+#: src/slic3r/GUI/MainFrame.cpp:1094
 msgid "Export current configuration to file"
 msgstr "Eksport obecnej konfiguracji do pliku"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export current plate as AMF"
 msgstr "Eksport zawartości stołu jako AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:477
+#: src/slic3r/GUI/MainFrame.cpp:1068
 msgid "Export current plate as G-code"
 msgstr "Eksport zawartości stołu jako G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export current plate as G-code to SD card / Flash drive"
 msgstr "Eksport zawartości stołu jako G-gode na kartę SD / pamięć flash"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export current plate as STL"
 msgstr "Eksport zawartości stołu jako STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export current plate as STL including supports"
 msgstr "Eksport zawartości stołu jako STL wraz z podporami"
 
-#: src/slic3r/GUI/Plater.cpp:3664
-msgid "Export failed"
-msgstr "Niepowodzenie eksportu"
-
-#: src/slic3r/GUI/ConfigWizard.cpp:801
+#: src/slic3r/GUI/ConfigWizard.cpp:1160
 msgid "Export full pathnames of models and parts sources into 3mf and amf files"
 msgstr "Eksport pełnych ścieżek źródłowych modeli i części do plików 3MF i AMF"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:122 src/slic3r/GUI/Plater.cpp:891
-#: src/slic3r/GUI/Plater.cpp:5521 src/libslic3r/PrintConfig.cpp:3353
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:115 src/slic3r/GUI/Plater.cpp:766
+#: src/slic3r/GUI/Plater.cpp:5706 src/libslic3r/PrintConfig.cpp:3546
 msgid "Export G-code"
 msgstr "Eksport G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:521
+#: src/slic3r/GUI/MainFrame.cpp:1076
 msgid "Export G-code to SD card / Flash drive"
 msgstr "Eksport G-gode na kartę SD / pamięć flash"
 
-#: src/libslic3r/PrintConfig.cpp:3320
+#: src/slic3r/GUI/NotificationManager.cpp:631
+#: src/slic3r/GUI/NotificationManager.cpp:748
+msgid "Export G-Code."
+msgstr "Eksport G-code."
+
+#: src/libslic3r/PrintConfig.cpp:3513
 msgid "Export OBJ"
 msgstr "Eksport OBJ"
 
-#: src/slic3r/GUI/Plater.cpp:2610
+#: src/slic3r/GUI/Plater.cpp:2572
 msgid "Export OBJ file:"
 msgstr "Eksport pliku OBJ:"
 
@@ -2527,212 +2929,215 @@ msgstr "Eksport pliku OBJ:"
 msgid "Export of a temporary 3mf file failed"
 msgstr "Niepowodzenie eksportu tymczasowego pliku 3MF"
 
-#: src/slic3r/GUI/MainFrame.cpp:492
+#: src/slic3r/GUI/MainFrame.cpp:1086
 msgid "Export plate as &AMF"
 msgstr "Eksport zawartości stołu jako &AMF"
 
-#: src/slic3r/GUI/MainFrame.cpp:486
+#: src/slic3r/GUI/MainFrame.cpp:1080
 msgid "Export plate as &STL"
 msgstr "Eksport zawartości stołu jako &STL"
 
-#: src/slic3r/GUI/MainFrame.cpp:489
+#: src/slic3r/GUI/MainFrame.cpp:1083
 msgid "Export plate as STL &including supports"
 msgstr "Eksport zawartośc&i stołu z podporami do STL"
 
-#: src/libslic3r/PrintConfig.cpp:3332
+#: src/libslic3r/PrintConfig.cpp:3525
 msgid "Export SLA"
 msgstr "Eksport SLA"
 
-#: src/slic3r/GUI/Preferences.cpp:72
+#: src/slic3r/GUI/Preferences.cpp:89
 msgid "Export sources full pathnames to 3mf and amf"
 msgstr "Eksport pełnych ścieżek do 3MF i AMF"
 
-#: src/libslic3r/PrintConfig.cpp:3348
+#: src/libslic3r/PrintConfig.cpp:3541
 msgid "Export STL"
 msgstr "Eksport STL"
 
-#: src/slic3r/GUI/Plater.cpp:2591
+#: src/slic3r/GUI/Plater.cpp:2553
 msgid "Export STL file:"
 msgstr "Eksport pliku STL:"
 
-#: src/libslic3r/PrintConfig.cpp:3339
+#: src/libslic3r/PrintConfig.cpp:3532
 msgid "Export the model(s) as 3MF."
 msgstr "Eksport model(i) jako 3MF."
 
-#: src/libslic3r/PrintConfig.cpp:3344
+#: src/libslic3r/PrintConfig.cpp:3537
 msgid "Export the model(s) as AMF."
 msgstr "Eksport model(i) jako AMF."
 
-#: src/libslic3r/PrintConfig.cpp:3321
+#: src/libslic3r/PrintConfig.cpp:3514
 msgid "Export the model(s) as OBJ."
 msgstr "Eksport model(i) jako OBJ."
 
-#: src/libslic3r/PrintConfig.cpp:3349
+#: src/libslic3r/PrintConfig.cpp:3542
 msgid "Export the model(s) as STL."
 msgstr "Eksport modeli jako STL."
 
-#: src/slic3r/GUI/Plater.cpp:3966
+#: src/slic3r/GUI/Plater.cpp:3884
 msgid "Export the selected object as STL file"
 msgstr "Eksport wybranego modelu jako plik STL"
 
-#: src/slic3r/GUI/Plater.cpp:880
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:118 src/slic3r/GUI/Plater.cpp:755
 msgid "Export to SD card / Flash drive"
 msgstr "Eksport na kartę SD / pamięć flash"
 
-#: src/slic3r/GUI/MainFrame.cpp:496
+#: src/slic3r/GUI/MainFrame.cpp:1090 src/slic3r/GUI/MainFrame.cpp:1395
 msgid "Export toolpaths as OBJ"
 msgstr "Eksport ścieżek narzędzi jako OBJ"
 
-#: src/libslic3r/Print.cpp:1638
+#: src/slic3r/GUI/NotificationManager.hpp:317
+msgid "Exporting finished."
+msgstr "Eksport zakończony."
+
+#: src/libslic3r/Print.cpp:1676
 msgid "Exporting G-code"
 msgstr "Eksportowanie G-code"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:341
-msgid "Exporting model..."
-msgstr "Eksportowanie modelu..."
+msgid "Exporting model"
+msgstr "Eksportowanie modelu"
 
 #: src/slic3r/Utils/FixModelByWin10.cpp:219
 #: src/slic3r/Utils/FixModelByWin10.cpp:359
 msgid "Exporting source model"
 msgstr "Eksport modelu źródłowego"
 
-#: src/libslic3r/SLAPrint.cpp:646
+#: src/libslic3r/SLAPrint.cpp:660
 msgid "Exposition time is out of printer profile bounds."
 msgstr "Czas naświetlania jest poza zakresem profilu drukarki."
 
-#: src/slic3r/GUI/Tab.cpp:2117 src/slic3r/GUI/Tab.cpp:3515
+#: src/slic3r/GUI/Tab.cpp:2287 src/slic3r/GUI/Tab.cpp:3931
 msgid "Exposure"
 msgstr "Naświetlanie"
 
-#: src/libslic3r/PrintConfig.cpp:2541 src/libslic3r/PrintConfig.cpp:2542
+#: src/libslic3r/PrintConfig.cpp:2684 src/libslic3r/PrintConfig.cpp:2685
 msgid "Exposure time"
 msgstr "Czas naświetlania"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:238 src/libslic3r/ExtrusionEntity.cpp:311
+#: src/slic3r/GUI/GUI_Preview.cpp:302 src/libslic3r/ExtrusionEntity.cpp:315
+#: src/libslic3r/ExtrusionEntity.cpp:338
 msgid "External perimeter"
 msgstr "Obrys zewnętrzny"
 
-#: src/slic3r/GUI/PresetHints.cpp:156
+#: src/slic3r/GUI/PresetHints.cpp:155
 msgid "external perimeters"
 msgstr "obrysów zewnętrznych"
 
-#: src/libslic3r/PrintConfig.cpp:446 src/libslic3r/PrintConfig.cpp:457
+#: src/libslic3r/PrintConfig.cpp:482 src/libslic3r/PrintConfig.cpp:493
 msgid "External perimeters"
 msgstr "Obrysy zewnętrzne"
 
-#: src/libslic3r/PrintConfig.cpp:469
+#: src/libslic3r/PrintConfig.cpp:505
 msgid "External perimeters first"
 msgstr "Najpierw obrysy zewnętrzne"
 
-#: src/libslic3r/PrintConfig.cpp:1588 src/libslic3r/PrintConfig.cpp:1596
+#: src/libslic3r/PrintConfig.cpp:1696 src/libslic3r/PrintConfig.cpp:1704
 msgid "Extra length on restart"
 msgstr "Dodatkowa ilość dla powrotu"
 
-#: src/libslic3r/PrintConfig.cpp:1390
+#: src/libslic3r/PrintConfig.cpp:1498
 msgid "Extra loading distance"
 msgstr "Dodatkowa długość ładowania"
 
-#: src/libslic3r/PrintConfig.cpp:477
+#: src/libslic3r/PrintConfig.cpp:513
 msgid "Extra perimeters if needed"
 msgstr "Dodatkowe obrysy jeśli potrzebne"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:278 src/slic3r/GUI/Tab.cpp:1434
-#: src/slic3r/GUI/wxExtensions.cpp:598 src/libslic3r/PrintConfig.cpp:487
+#: src/slic3r/GUI/GCodeViewer.cpp:2277 src/slic3r/GUI/GCodeViewer.cpp:2313
+#: src/slic3r/GUI/GCodeViewer.cpp:2318 src/slic3r/GUI/GUI_ObjectList.cpp:296
+#: src/slic3r/GUI/Tab.cpp:1780 src/slic3r/GUI/wxExtensions.cpp:515
+#: src/libslic3r/PrintConfig.cpp:523
 msgid "Extruder"
 msgstr "Ekstruder"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1134 src/slic3r/GUI/DoubleSlider.cpp:1170
-#: src/slic3r/GUI/GLCanvas3D.cpp:977 src/slic3r/GUI/GUI_ObjectList.cpp:1704
-#: src/slic3r/GUI/Tab.cpp:2320 src/libslic3r/GCode/PreviewData.cpp:445
+#: src/slic3r/GUI/DoubleSlider.cpp:1263 src/slic3r/GUI/DoubleSlider.cpp:1297
+#: src/slic3r/GUI/GLCanvas3D.cpp:983 src/slic3r/GUI/GUI_ObjectList.cpp:1832
+#: src/slic3r/GUI/Tab.cpp:2489 src/libslic3r/GCode/PreviewData.cpp:450
 #, c-format
 msgid "Extruder %d"
 msgstr "Ekstruder %d"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1011
+#: src/slic3r/GUI/DoubleSlider.cpp:1137
 msgid "Extruder (tool) is changed to Extruder \"%1%\""
 msgstr "Ekstruder został zmieniony na ekstruder \"%1%\""
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
-msgid "Extruder and Bed Temperatures"
-msgstr "Temperatury ekstrudera i stołu"
-
 #: src/slic3r/GUI/WipeTowerDialog.cpp:255
 msgid "Extruder changed to"
 msgstr "Ekstruder zmieniony na"
 
-#: src/slic3r/GUI/Tab.cpp:1233
+#: src/slic3r/GUI/Tab.cpp:1563
 msgid "Extruder clearance (mm)"
 msgstr "Odstęp od ekstrudera (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:522
+#: src/libslic3r/PrintConfig.cpp:558
 msgid "Extruder Color"
 msgstr "Kolor ekstrudera"
 
-#: src/libslic3r/PrintConfig.cpp:529
+#: src/libslic3r/PrintConfig.cpp:565
 msgid "Extruder offset"
 msgstr "Margines ekstrudera"
 
-#: src/libslic3r/PrintConfig.cpp:911
-msgid "Extruder temperature for first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output file."
-msgstr "Temperatura ekstrudera dla pierwszej warstwy. Jeśli chcesz ręcznie kontrolować temperaturę podczas druku to ustaw zero aby wyłączyć komendy kontrolujące temperaturę w pliku wyjściowym."
-
-#: src/libslic3r/PrintConfig.cpp:2065
-msgid "Extruder temperature for layers after the first one. Set this to zero to disable temperature control commands in the output."
-msgstr "Temperatura ekstrudera dla warstw powyżej pierwszej. Ustaw zero aby wyłączyć komendy kontrolujące temperaturę w pliku wyjściowym."
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:99 src/slic3r/GUI/GUI_ObjectList.cpp:617
-#: src/slic3r/GUI/Tab.cpp:1180 src/slic3r/GUI/Tab.cpp:1838
-#: src/libslic3r/PrintConfig.cpp:488 src/libslic3r/PrintConfig.cpp:1002
-#: src/libslic3r/PrintConfig.cpp:1409 src/libslic3r/PrintConfig.cpp:1737
-#: src/libslic3r/PrintConfig.cpp:1938 src/libslic3r/PrintConfig.cpp:1965
+#: src/slic3r/GUI/GUI_ObjectList.cpp:97 src/slic3r/GUI/GUI_ObjectList.cpp:656
+#: src/slic3r/GUI/Tab.cpp:1510 src/slic3r/GUI/Tab.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:524 src/libslic3r/PrintConfig.cpp:1046
+#: src/libslic3r/PrintConfig.cpp:1517 src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:2080 src/libslic3r/PrintConfig.cpp:2107
 msgid "Extruders"
 msgstr "Ekstrudery"
 
-#: src/libslic3r/PrintConfig.cpp:539
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1061
+msgid "Extruders count"
+msgstr "Liczba ekstruderów"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2493
+msgid "Extrusion"
+msgstr "Ekstruzja"
+
+#: src/libslic3r/PrintConfig.cpp:575
 msgid "Extrusion axis"
 msgstr "Oś ekstruzji"
 
-#: src/libslic3r/PrintConfig.cpp:545
+#: src/libslic3r/PrintConfig.cpp:581
 msgid "Extrusion multiplier"
 msgstr "Współczynnik ekstruzji"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1037
+#: src/slic3r/GUI/ConfigWizard.cpp:1403
 msgid "Extrusion Temperature:"
 msgstr "Temperatura ekstrudera:"
 
-#: src/slic3r/GUI/Tab.cpp:1205
+#: src/slic3r/GUI/Tab.cpp:1535
 msgid "Extrusion width"
 msgstr "Szerokość ekstruzji"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:100 src/slic3r/GUI/GUI_ObjectList.cpp:618
-#: src/libslic3r/PrintConfig.cpp:447 src/libslic3r/PrintConfig.cpp:555
-#: src/libslic3r/PrintConfig.cpp:877 src/libslic3r/PrintConfig.cpp:1010
-#: src/libslic3r/PrintConfig.cpp:1418 src/libslic3r/PrintConfig.cpp:1757
-#: src/libslic3r/PrintConfig.cpp:1947 src/libslic3r/PrintConfig.cpp:2106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:657
+#: src/libslic3r/PrintConfig.cpp:483 src/libslic3r/PrintConfig.cpp:591
+#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1054
+#: src/libslic3r/PrintConfig.cpp:1526 src/libslic3r/PrintConfig.cpp:1872
+#: src/libslic3r/PrintConfig.cpp:2089 src/libslic3r/PrintConfig.cpp:2249
 msgid "Extrusion Width"
 msgstr "Szerokość Ekstruzji"
 
-#: src/slic3r/GUI/Plater.cpp:162
+#: src/slic3r/GUI/Plater.cpp:168
 msgid "Facets"
 msgstr "Powierzchnie"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:349
+#: src/slic3r/GUI/GUI_ObjectList.cpp:396
 msgid "facets added"
 msgstr "dodano powierzchnie"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:348
+#: src/slic3r/GUI/GUI_ObjectList.cpp:395
 msgid "facets removed"
 msgstr "usunięto powierzchnie"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:350
+#: src/slic3r/GUI/GUI_ObjectList.cpp:397
 msgid "facets reversed"
 msgstr "odwrócono powierzchnie"
 
-#: src/libslic3r/PrintConfig.cpp:2517
+#: src/libslic3r/PrintConfig.cpp:2660
 msgid "Faded layers"
 msgstr "Warstwy przejściowe"
 
-#: src/libslic3r/Zipper.cpp:44
+#: src/libslic3r/miniz_extension.cpp:103
 msgid "failed finding central directory"
 msgstr "nie odnaleziono katalogu centralnego"
 
@@ -2740,105 +3145,115 @@ msgstr "nie odnaleziono katalogu centralnego"
 msgid "Failed loading the input model."
 msgstr "Niepowodzenie ładowania modelu wejściowego."
 
-#: src/libslic3r/PrintBase.cpp:71
+#: src/libslic3r/PrintBase.cpp:72
 msgid "Failed processing of the output_filename_format template."
 msgstr "Błąd przetwarzania wzoru output_filename_format (format nazwy pliku wyjściowego)."
 
-#: src/slic3r/GUI/PresetHints.cpp:42
+#: src/slic3r/GUI/PresetHints.cpp:41
 msgid "Fan"
 msgstr "Wentylator"
 
-#: src/slic3r/GUI/Tab.cpp:1456
+#: src/slic3r/GUI/Tab.cpp:1802
 msgid "Fan settings"
 msgstr "Ustawienia wentylatora"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:225 src/slic3r/GUI/Tab.cpp:1457
+#: src/slic3r/GUI/GUI_Preview.cpp:279 src/slic3r/GUI/Tab.cpp:1803
 msgid "Fan speed"
 msgstr "Prędkość wentylatora"
 
-#: src/libslic3r/GCode/PreviewData.cpp:353
+#: src/slic3r/GUI/GCodeViewer.cpp:2239 src/libslic3r/GCode/PreviewData.cpp:358
 msgid "Fan Speed (%)"
 msgstr "Prędkość wentylatora (%)"
 
-#: src/libslic3r/PrintConfig.cpp:2405
+#: src/libslic3r/PrintConfig.cpp:2548
 msgid "Fast"
 msgstr "Szybkie"
 
-#: src/libslic3r/PrintConfig.cpp:2406
+#: src/libslic3r/PrintConfig.cpp:2549
 msgid "Fast tilt"
 msgstr "Szybkie przechylanie"
 
-#: src/slic3r/GUI/GUI_App.cpp:141
+#: src/slic3r/GUI/GUI_App.cpp:531
 msgid "Fatal error"
 msgstr "Błąd krytyczny"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:221 src/slic3r/GUI/GUI_Preview.cpp:575
-#: src/libslic3r/GCode/PreviewData.cpp:345
+#: src/slic3r/GUI/GUI_Init.cpp:88
+msgid "Fatal error, exception catched: %1%"
+msgstr "Błąd krytyczny, wyjątek wychwycony: %1%"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
+#: src/slic3r/GUI/GUI_Preview.cpp:275 src/slic3r/GUI/GUI_Preview.cpp:787
+#: src/libslic3r/GCode/PreviewData.cpp:350
 msgid "Feature type"
 msgstr "Rodzaj funkcji"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:234 src/slic3r/GUI/GUI_Preview.cpp:235
+#: src/slic3r/GUI/GUI_Preview.cpp:293 src/slic3r/GUI/GUI_Preview.cpp:295
+#: src/slic3r/GUI/GUI_Preview.cpp:316
 msgid "Feature types"
 msgstr "Rodzaje funkcji"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1525
+#: src/slic3r/GUI/ConfigWizard.cpp:1926
 msgid "FFF Technology Printers"
 msgstr "Drukarki FFF"
 
-#: src/slic3r/GUI/Plater.cpp:816 src/slic3r/GUI/Tab.cpp:1425
-#: src/slic3r/GUI/Tab.cpp:1426
+#: src/slic3r/GUI/Plater.cpp:691 src/slic3r/GUI/Tab.cpp:1770
+#: src/slic3r/GUI/Tab.cpp:1771
 msgid "Filament"
 msgstr "Filament"
 
-#: src/slic3r/GUI/Preset.cpp:1522
+#: src/libslic3r/Preset.cpp:1301
 msgid "filament"
 msgstr "filament"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Filament and Nozzle Diameters"
 msgstr "Średnice filamentu i dyszy"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:983
+#: src/slic3r/GUI/ConfigWizard.cpp:1349
 msgid "Filament Diameter:"
 msgstr "Średnica Filamentu:"
 
-#: src/libslic3r/PrintConfig.cpp:651
+#: src/libslic3r/PrintConfig.cpp:687
 msgid "Filament is cooled by being moved back and forth in the cooling tubes. Specify desired number of these moves."
 msgstr "Filament jest chłodzony przez ruch w tę i z powrotem wewnątrz rurek chłodzących. Określ ilość tych ruchów."
 
-#: src/libslic3r/PrintConfig.cpp:686
+#: src/libslic3r/PrintConfig.cpp:722
 msgid "Filament load time"
 msgstr "Czas ładowania filamentu"
 
-#: src/libslic3r/PrintConfig.cpp:588
+#: src/libslic3r/PrintConfig.cpp:624
 msgid "Filament notes"
 msgstr "Notatki do filamentu"
 
-#: src/slic3r/GUI/Tab.cpp:1323 src/slic3r/GUI/Tab.cpp:1378
+#: src/slic3r/GUI/Tab.cpp:1669
 msgid "Filament Overrides"
 msgstr "Nadpisywane Ustawienia"
 
-#: src/libslic3r/PrintConfig.cpp:1381
+#: src/libslic3r/PrintConfig.cpp:1489
 msgid "Filament parking position"
 msgstr "Pozycja zatrzymania filamentu"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filament Profiles Selection"
 msgstr "Wybór profili filamentu"
 
-#: src/slic3r/GUI/Tab.cpp:1471
+#: src/slic3r/GUI/Tab.cpp:1817
 msgid "Filament properties"
 msgstr "Właściwości filamentu"
 
-#: src/slic3r/GUI/Tab.hpp:355
+#: src/slic3r/GUI/Tab.hpp:409
 msgid "Filament Settings"
 msgstr "Ustawienia Filamentu"
 
-#: src/libslic3r/PrintConfig.cpp:726
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Filament Settings Tab"
+msgstr "Ustawienia filamentu"
+
+#: src/libslic3r/PrintConfig.cpp:762
 msgid "Filament type"
 msgstr "Typ filamentu"
 
-#: src/libslic3r/PrintConfig.cpp:701
+#: src/libslic3r/PrintConfig.cpp:737
 msgid "Filament unload time"
 msgstr "Czas rozładowania filamentu"
 
@@ -2846,75 +3261,79 @@ msgstr "Czas rozładowania filamentu"
 msgid "filaments"
 msgstr "filamenty"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2013
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2524
 msgid "Filaments"
 msgstr "Filamenty"
 
-#: src/libslic3r/Zipper.cpp:72
+#: src/slic3r/GUI/ConfigWizard.cpp:691
+msgid "Filaments marked with <b>*</b> are <b>not</b> compatible with some installed printers."
+msgstr "Filamenty oznaczone <b>*</b> <b>nie są</b> kompatybilne z niektórymi z zainstalowanych drukarek."
+
+#: src/libslic3r/miniz_extension.cpp:131
 msgid "file close failed"
 msgstr "niepowodzenia zamykania pliku"
 
-#: src/libslic3r/Zipper.cpp:66
+#: src/libslic3r/miniz_extension.cpp:125
 msgid "file create failed"
 msgstr "niepowodzenie tworzenia pliku"
 
-#: src/slic3r/GUI/MainFrame.cpp:791
+#: src/slic3r/GUI/MainFrame.cpp:1492
 msgid "File Not Found"
 msgstr "Nie znaleziono pliku"
 
-#: src/libslic3r/Zipper.cpp:86
+#: src/libslic3r/miniz_extension.cpp:145
 msgid "file not found"
 msgstr "nie znaleziono pliku"
 
-#: src/libslic3r/Zipper.cpp:64
+#: src/libslic3r/miniz_extension.cpp:123
 msgid "file open failed"
 msgstr "niepowodzenie otwierania pliku"
 
-#: src/libslic3r/Zipper.cpp:70
+#: src/libslic3r/miniz_extension.cpp:129
 msgid "file read failed"
 msgstr "niepowodzenie odczytu pliku"
 
-#: src/libslic3r/Zipper.cpp:74
+#: src/libslic3r/miniz_extension.cpp:133
 msgid "file seek failed"
 msgstr "niepowodzenie szukania pliku"
 
-#: src/libslic3r/Zipper.cpp:76
+#: src/libslic3r/miniz_extension.cpp:135
 msgid "file stat failed"
 msgstr "niepowodzenie odczytu statystyk pliku"
 
-#: src/libslic3r/Zipper.cpp:36
+#: src/libslic3r/miniz_extension.cpp:95
 msgid "file too large"
 msgstr "plik jest zbyt duży"
 
-#: src/libslic3r/Zipper.cpp:68
+#: src/libslic3r/miniz_extension.cpp:127
 msgid "file write failed"
 msgstr "niepowodzenie zapisywania do pliku"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:153
+#: src/slic3r/GUI/PrintHostDialogs.cpp:151
 msgid "Filename"
 msgstr "Nazwa pliku"
 
-#: src/libslic3r/PrintConfig.cpp:775
+#: src/libslic3r/PrintConfig.cpp:811
 msgid "Fill angle"
 msgstr "Kąt wypełnienia"
 
-#: src/libslic3r/PrintConfig.cpp:789
+#: src/libslic3r/PrintConfig.cpp:825
 msgid "Fill density"
 msgstr "Gęstość wypełnienia"
 
-#: src/libslic3r/PrintConfig.cpp:826
+#: src/libslic3r/PrintConfig.cpp:862
 msgid "Fill pattern"
 msgstr "Wzór wypełnienia"
 
-#: src/libslic3r/PrintConfig.cpp:437
+#: src/libslic3r/PrintConfig.cpp:473
 msgid "Fill pattern for bottom infill. This only affects the bottom external visible layer, and not its adjacent solid shells."
 msgstr "Wzór wypełnienia dolnej warstwy. Ma wpływ jedynie na zewnętrzną widoczną warstwę, nie ma wpływu na przylegające do nich wewnętrzne, zwarte warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:828
+#: src/libslic3r/PrintConfig.cpp:864
 msgid "Fill pattern for general low-density infill."
 msgstr "Wzór dla ogólnego wypełnienia o niskiej gęstości."
 
-#: src/libslic3r/PrintConfig.cpp:417
+#: src/libslic3r/PrintConfig.cpp:451
 msgid "Fill pattern for top infill. This only affects the top visible layer, and not its adjacent solid shells."
 msgstr "Wzór wypełnienia górnej warstwy. Ma wpływ jedynie na zewnętrzne widoczne warstwy, nie ma wpływu na przylegające do nich powłoki zwartego wypełnienia."
 
@@ -2922,7 +3341,7 @@ msgstr "Wzór wypełnienia górnej warstwy. Ma wpływ jedynie na zewnętrzne wid
 msgid "Finished"
 msgstr "Zakończono"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891 src/slic3r/GUI/Tab.cpp:1947
+#: src/slic3r/GUI/ConfigWizard.cpp:1257 src/slic3r/GUI/Tab.cpp:2132
 msgid "Firmware"
 msgstr "Firmware"
 
@@ -2934,44 +3353,52 @@ msgstr "Flasher firmware"
 msgid "Firmware image:"
 msgstr "Obraz firmware:"
 
-#: src/slic3r/GUI/Tab.cpp:2577
+#: src/slic3r/GUI/Tab.cpp:2733
 msgid "Firmware Retraction"
 msgstr "Retrakcja z firmware"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:891
+#: src/slic3r/GUI/ConfigWizard.cpp:1257
 msgid "Firmware Type"
 msgstr "Typ firmware"
 
-#: src/libslic3r/PrintConfig.cpp:859 src/libslic3r/PrintConfig.cpp:868
-#: src/libslic3r/PrintConfig.cpp:876 src/libslic3r/PrintConfig.cpp:910
+#: src/libslic3r/PrintConfig.cpp:899 src/libslic3r/PrintConfig.cpp:908
+#: src/libslic3r/PrintConfig.cpp:918 src/libslic3r/PrintConfig.cpp:952
 msgid "First layer"
 msgstr "Pierwsza warstwa"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:61 src/libslic3r/PrintConfig.cpp:889
+#: src/libslic3r/PrintConfig.cpp:909
+msgid "First layer bed temperature"
+msgstr "Temperatura stołu dla pierwszej warstwy"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:60 src/libslic3r/PrintConfig.cpp:931
 msgid "First layer height"
 msgstr "Wysokość pierwszej warstwy"
 
-#: src/libslic3r/Print.cpp:1422
+#: src/libslic3r/Print.cpp:1448
 msgid "First layer height can't be greater than nozzle diameter"
 msgstr "Wysokość pierwszej warstwy nie może być większa od średnicy dyszy"
 
-#: src/libslic3r/PrintConfig.cpp:900
+#: src/libslic3r/PrintConfig.cpp:960
+msgid "First layer nozzle temperature"
+msgstr "Temperatura dyszy dla pierwszej warstwy"
+
+#: src/libslic3r/PrintConfig.cpp:942
 msgid "First layer speed"
 msgstr "Prędkość pierwszej warstwy"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "First layer volumetric"
 msgstr "Na pierwszej warstwie"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1647
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1776
 msgid "Fix through the Netfabb"
 msgstr "Napraw używając Netfabb"
 
-#: src/slic3r/GUI/Plater.cpp:3473
+#: src/slic3r/GUI/Plater.cpp:3278
 msgid "Fix Throught NetFabb"
 msgstr "Napraw przez NetFabb"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Flash printer &firmware"
 msgstr "Flash &firmware drukarki"
 
@@ -2999,24 +3426,34 @@ msgstr "Flashowanie w toku. Proszę nie odłączać drukarki!"
 msgid "Flashing succeeded!"
 msgstr "Flashowanie pomyślne!"
 
-#: src/slic3r/GUI/Tab.cpp:1218
+#: src/slic3r/GUI/Tab.cpp:1548
 msgid "Flow"
 msgstr "Przepływ"
 
-#: src/slic3r/GUI/PresetHints.cpp:220
+#: src/libslic3r/PrintConfig.cpp:1145
+msgid "Flow rate"
+msgstr "Przepływ"
+
+#: src/slic3r/GUI/PresetHints.cpp:219
 msgid "flow rate is maximized"
 msgstr "przepływ osiąga wartości szczytowe"
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:286
-msgid "For more information please visit our wiki page:"
-msgstr "Aby uzyskać więcej informacji odwiedź naszą wiki:"
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:555
+msgid "Following printer preset(s) is duplicated:%1%The above preset for printer \"%2%\" will be used just once."
+msgstr ""
+"Następujący zestaw ustawień drukarki jest zduplikowany: %1% \n"
+"Powyższy zestaw ustawień dla drukarki \"%2%\" zostanie użyty tylko raz."
 
-#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Plater.cpp:624
+#: src/slic3r/GUI/UpdateDialogs.cpp:287
+msgid "For more information please visit our wiki page:"
+msgstr "Aby uzyskać więcej informacji, odwiedź naszą wiki:"
+
+#: src/slic3r/GUI/Plater.cpp:367 src/slic3r/GUI/Plater.cpp:490
 msgid "For support enforcers only"
 msgstr "Tylko dla wymuszania podpór"
 
 #. TRN Description for "WHITE BULLET"
-#: src/slic3r/GUI/Tab.cpp:3267
+#: src/slic3r/GUI/Tab.cpp:3702
 msgid ""
 "for the left button: indicates a non-system (or non-default) preset,\n"
 "for the right button: indicates that the settings hasn't been modified."
@@ -3024,25 +3461,25 @@ msgstr ""
 "dla lewego przycisku: wskazuje na niesystemowy (lub inny niż domyślny) zestaw ustawień,\n"
 "dla prawego przycisku: wskazuje, że ustawienia nie zostały zmodyfikowane."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:136
+#: src/slic3r/GUI/ConfigManipulation.cpp:135
 msgid ""
 "For the Wipe Tower to work with the soluble supports, the support layers\n"
 "need to be synchronized with the object layers."
 msgstr "Do działania wieży czyszczącej z podporami rozpuszczalnymi konieczna jest synchronizacja wysokości warstw modelu i podpór."
 
-#: src/libslic3r/Print.cpp:1396
+#: src/libslic3r/Print.cpp:1422
 msgid "For the Wipe Tower to work with the soluble supports, the support layers need to be synchronized with the object layers."
 msgstr "Do działania wieży czyszczącej z podporami rozpuszczalnymi konieczna jest synchronizacja wysokości warstw modelu i podpór."
 
-#: src/libslic3r/PrintConfig.cpp:2864
+#: src/libslic3r/PrintConfig.cpp:3028
 msgid "Force pad around object everywhere"
 msgstr "Wymuś podkładkę wokół wszystkich modeli, wszędzie"
 
-#: src/libslic3r/PrintConfig.cpp:1729
+#: src/libslic3r/PrintConfig.cpp:1844
 msgid "Force solid infill for regions having a smaller area than the specified threshold."
 msgstr "Wymuś zwarte wypełnienie dla obszarów mniejszych niż zadany próg."
 
-#: src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1116
 msgid "Force the generation of solid shells between adjacent materials/volumes. Useful for multi-extruder prints with translucent materials or manual soluble support material."
 msgstr "Wymuś generowanie zwartych powłok pomiędzy przylegającymi do siebie materiałami. Przydatne przy druku materiałami przejrzystymi lub przy ręcznych podporach rozpuszczalnych."
 
@@ -3050,27 +3487,31 @@ msgstr "Wymuś generowanie zwartych powłok pomiędzy przylegającymi do siebie
 msgid "From"
 msgstr "Od"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2223
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "from"
+msgstr "z"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2389
 msgid "From Object List You can't delete the last solid part from object."
 msgstr "Nie możesz usunąć ostatniej bryły modelu z Listy Modeli."
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front"
 msgstr "Przód"
 
-#: src/slic3r/GUI/MainFrame.cpp:667
+#: src/slic3r/GUI/MainFrame.cpp:964 src/slic3r/GUI/MainFrame.cpp:1284
 msgid "Front View"
 msgstr "Widok przodu"
 
-#: src/slic3r/GUI/Tab.cpp:1013
+#: src/slic3r/GUI/Tab.cpp:1331
 msgid "full profile name"
 msgstr "pełna nazwa profilu"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "G-code"
 msgstr "G-code"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1021
+#: src/slic3r/GUI/DoubleSlider.cpp:1146
 msgid ""
 "G-code associated to this tick mark is in a conflict with print mode.\n"
 "Editing it will cause changes of Slider data."
@@ -3078,220 +3519,273 @@ msgstr ""
 "G-code powiązany z tym zaznaczeniem powoduje konflikt z obecnym trybem drukowania.\n"
 "Edytowanie go spowoduje zmianę danych suwaka."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:130
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:165
 msgid "G-code file exported to %1%"
 msgstr "Plik G-code wyeksportowany do %1%"
 
-#: src/libslic3r/PrintConfig.cpp:936
+#: src/libslic3r/PrintConfig.cpp:980
 msgid "G-code flavor"
 msgstr "Rodzaj G-code"
 
-#: src/libslic3r/PrintConfig.cpp:721
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:79
+msgid "G-code preview"
+msgstr "Podgląd G-code"
+
+#: src/libslic3r/PrintConfig.cpp:3552
+msgid "G-code viewer"
+msgstr "Przeglądarka G-code"
+
+#: src/libslic3r/PrintConfig.cpp:757
 msgid "g/cm³"
 msgstr "g/cm³"
 
-#: src/libslic3r/PrintConfig.cpp:2505
+#: src/libslic3r/PrintConfig.cpp:2648
 msgid "g/ml"
 msgstr "g/ml"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:244 src/libslic3r/ExtrusionEntity.cpp:317
-#: src/libslic3r/PrintConfig.cpp:918
+#: src/slic3r/GUI/GUI_Preview.cpp:309 src/libslic3r/ExtrusionEntity.cpp:322
+#: src/libslic3r/ExtrusionEntity.cpp:352 src/libslic3r/PrintConfig.cpp:962
 msgid "Gap fill"
 msgstr "Wypełnienie szpar"
 
-#: src/slic3r/GUI/Preferences.cpp:22 src/slic3r/GUI/Tab.cpp:1796
-#: src/slic3r/GUI/Tab.cpp:2040
+#: src/slic3r/GUI/Preferences.cpp:24 src/slic3r/GUI/Tab.cpp:2058
+#: src/slic3r/GUI/Tab.cpp:2240 src/slic3r/GUI/Tab.cpp:2348
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1066
 msgid "General"
 msgstr "Ogólne"
 
-#: src/libslic3r/PrintConfig.cpp:1307
+#: src/libslic3r/PrintConfig.cpp:1415
 msgid "Generate no less than the number of skirt loops required to consume the specified amount of filament on the bottom layer. For multi-extruder machines, this minimum applies to each extruder."
-msgstr "Generuj ilość pętli skirtu nie mniejszą niż określona aby zużyć taką ilość filamentu na dolnej warstwie. Dla drukarek z kilkoma ekstuderami ta wartość jest stosowana dla każdego z nich."
+msgstr "Generuj ilość pętli skirtu nie mniejszą niż określona, aby zużyć taką ilość filamentu na dolnej warstwie. Dla drukarek z kilkoma ekstruderami ta wartość jest stosowana dla każdego z nich."
 
-#: src/libslic3r/PrintConfig.cpp:1865
+#: src/libslic3r/PrintConfig.cpp:2007
 msgid "Generate support material"
 msgstr "Generuj materiał podporowy"
 
-#: src/libslic3r/PrintConfig.cpp:1926
+#: src/libslic3r/PrintConfig.cpp:2068
 msgid "Generate support material for the specified number of layers counting from bottom, regardless of whether normal support material is enabled or not and regardless of any angle threshold. This is useful for getting more adhesion of objects having a very thin or poor footprint on the build plate."
-msgstr "Generuj materiał podporowy dla określonej liczby warstw licząc od dołu, niezależnie od tego czy normalny materiał podporowy jest włączony i niezależnie od progu kąta. Przydaje się aby uzyskać lepszą przyczepność modelu, które mają bardzo małą powierzchnię kontaktu z powierzchnią druku."
+msgstr "Generuj materiał podporowy dla określonej liczby warstw licząc od dołu, niezależnie od tego czy normalny materiał podporowy jest włączony i niezależnie od progu kąta. Przydaje się, aby uzyskać lepszą przyczepność modelu, które mają bardzo małą powierzchnię kontaktu z powierzchnią druku."
 
-#: src/libslic3r/PrintConfig.cpp:2613
+#: src/libslic3r/PrintConfig.cpp:2756
 msgid "Generate supports"
 msgstr "Generowanie podpór"
 
-#: src/libslic3r/PrintConfig.cpp:2615
+#: src/libslic3r/PrintConfig.cpp:2758
 msgid "Generate supports for the models"
 msgstr "Generowanie podpór dla modeli"
 
-#: src/libslic3r/Print.cpp:1614
+#: src/slic3r/GUI/Plater.cpp:3554
+msgid "generated warnings"
+msgstr "wygenerowane ostrzeżenia"
+
+#: src/libslic3r/Print.cpp:1645
 msgid "Generating brim"
 msgstr "Generowanie obramowania (brim)"
 
-#: src/libslic3r/Print.cpp:1642
+#: src/libslic3r/Print.cpp:1680
 msgid "Generating G-code"
 msgstr "Generowanie G-code"
 
-#: src/libslic3r/SLAPrintSteps.cpp:48
+#: src/slic3r/GUI/GCodeViewer.cpp:1392
+msgid "Generating index buffers"
+msgstr "Generowanie buforów indeksujących"
+
+#: src/libslic3r/SLAPrintSteps.cpp:49
 msgid "Generating pad"
 msgstr "Generowanie podkładki"
 
-#: src/libslic3r/PrintObject.cpp:152
+#: src/libslic3r/PrintObject.cpp:158
 msgid "Generating perimeters"
 msgstr "Generowanie obrysów"
 
-#: src/libslic3r/Print.cpp:1606
+#: src/libslic3r/Print.cpp:1636
 msgid "Generating skirt"
 msgstr "Generowanie skirtu"
 
-#: src/libslic3r/PrintObject.cpp:395
+#: src/libslic3r/PrintObject.cpp:422
 msgid "Generating support material"
 msgstr "Generowanie materiału podporowego"
 
-#: src/libslic3r/SLAPrintSteps.cpp:46 src/libslic3r/SLAPrintSteps.cpp:356
+#: src/libslic3r/SLAPrintSteps.cpp:47 src/libslic3r/SLAPrintSteps.cpp:359
 msgid "Generating support points"
 msgstr "Generowanie punktów podpór"
 
-#: src/libslic3r/SLAPrintSteps.cpp:47
+#: src/libslic3r/SLAPrintSteps.cpp:48
 msgid "Generating support tree"
 msgstr "Generowanie drzewa podpór"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2022
+#: src/slic3r/GUI/GCodeViewer.cpp:933
+msgid "Generating toolpaths"
+msgstr "Generowanie ścieżek narzędzi"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:1318
+msgid "Generating vertex buffer"
+msgstr "Generowanie bufora wierzchołków"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2181
 msgid "Generic"
 msgstr "Źródłowy"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
 msgid "Gizmo cut"
 msgstr "Cięcie przy pomocy \"uchwytów\""
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
 msgid "Gizmo move"
 msgstr "Przemieszczanie przy pomocy \"uchwytów\""
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
+msgid "Gizmo move: Press to snap by 1mm"
+msgstr "Przesuwanie uchwytem: naciśnij, aby przyciągać co 1 mm"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
 msgid "Gizmo Place face on bed"
 msgstr "Położenie na płaszczyźnie przy pomocy \"uchwytów\""
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:174
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
 msgid "Gizmo rotate"
 msgstr "Obracanie przy pomocy \"uchwytów\""
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:203
+msgid "Gizmo rotate: Press to rotate selected objects around their own center"
+msgstr "Obracanie uchwytem: naciśnij, aby obrócić wybrane obiekty wokół ich środków"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
 msgid "Gizmo scale"
 msgstr "Skalowanie przy pomocy \"uchwytów\""
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+msgid "Gizmo scale: Press to activate one direction scaling"
+msgstr "Skalowanie uchwytem: naciśnij, aby aktywować skalowanie w jednym kierunku"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:202
+msgid "Gizmo scale: Press to scale selected objects around their own center"
+msgstr "Skalowanie uchwytem: naciśnij, aby skalować wybrane obiekty względem ich środków"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
+msgid "Gizmo scale: Press to snap by 5%"
+msgstr "Skalowanie uchwytem: naciśnij, aby przyciągać co 5%"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:200
+msgid "Gizmo scale: Scale selection to fit print volume"
+msgstr "Skalowanie uchwytem: skaluj wybrane do rozmiarów obszaru roboczego"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
 msgid "Gizmo SLA hollow"
 msgstr "Drążenie SLA z uchwytem"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:172
 msgid "Gizmo SLA support points"
 msgstr "Punkty podpór SLA przy pomocy \"uchwytów\""
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2921
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:562
+#: src/slic3r/GUI/GLCanvas3D.cpp:3165
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:520
 msgid "Gizmo-Move"
 msgstr "Uchwyt-Przesuń"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:489
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:639
 msgid "Gizmo-Place on Face"
 msgstr "Uchwyt-Połóż na Płaszczyźnie"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3001
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:564
+#: src/slic3r/GUI/GLCanvas3D.cpp:3249
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:522
 msgid "Gizmo-Rotate"
 msgstr "Uchwyt-Obróć"
 
-#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:563
+#: src/slic3r/GUI/Gizmos/GLGizmosManager.cpp:521
 msgid "Gizmo-Scale"
 msgstr "Uchwyt-Skaluj"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:201
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:199
 msgid "Gizmos"
 msgstr "Uchwyty"
 
-#: src/slic3r/GUI/AboutDialog.cpp:259
+#: src/slic3r/GUI/AboutDialog.cpp:284 src/slic3r/GUI/GUI_App.cpp:244
 msgid "GNU Affero General Public License, version 3"
 msgstr "Ogólna Licencja Publiczna (GPL) GNU Affero, wersja 3"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:980
+#: src/slic3r/GUI/ConfigWizard.cpp:1346
 msgid "Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."
-msgstr "Wymagana jest spora precyzja, użyj więc suwmiarki i przeprowadź kilka pomiarów w sporych odstępach od siebie i oblicz średnią."
+msgstr "Wymagana jest spora precyzja, użyj więc suwmiarki, przeprowadź kilka pomiarów w sporych odstępach od siebie i oblicz średnią."
 
-#: src/libslic3r/PrintConfig.cpp:844
+#: src/libslic3r/PrintConfig.cpp:882
 msgid "Grid"
 msgstr "Kratka"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2454
+#: src/slic3r/GUI/PrintHostDialogs.cpp:57
+msgid "Group"
+msgstr "Grupa"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2846
 msgid "Group manipulation"
 msgstr "Manipulacja grupą"
 
-#: src/slic3r/GUI/Preferences.cpp:133
+#: src/slic3r/GUI/Preferences.cpp:200
 msgid "GUI"
 msgstr "GUI"
 
-#: src/libslic3r/PrintConfig.cpp:852
+#: src/libslic3r/PrintConfig.cpp:890
 msgid "Gyroid"
 msgstr "Gyroidalny"
 
-#: src/slic3r/GUI/Tab.cpp:2937
-msgid "has the following unsaved changes:"
-msgstr "ma następujące niezapisane zmiany:"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:47
 msgid "Head diameter"
 msgstr "Średnica łącznika"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:317
+#: src/libslic3r/PrintConfig.cpp:2772
+msgid "Head penetration"
+msgstr "Przenikanie łączników"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:322
 msgid "Head penetration should not be greater than the head width."
 msgstr "Przenikanie łączników nie powinno być większe niż ich średnica."
 
-#: src/libslic3r/PrintConfig.cpp:869
+#: src/libslic3r/PrintConfig.cpp:910
 msgid "Heated build plate temperature for the first layer. Set this to zero to disable bed temperature control commands in the output."
-msgstr "Temperatura podgrzewanego stołu dla pierwszej warstwy. Ustaw zero aby wyłączyć komendy kontrolujące temperaturę stołu w pliku wyjściowym."
+msgstr "Temperatura podgrzewanego stołu dla pierwszej warstwy. Ustaw zero, aby wyłączyć komendy kontrolujące temperaturę stołu w pliku wyjściowym."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:222 src/libslic3r/PrintConfig.cpp:500
+#: src/slic3r/GUI/GUI_Preview.cpp:276 src/libslic3r/PrintConfig.cpp:536
 msgid "Height"
 msgstr "Wysokość"
 
-#: src/libslic3r/GCode/PreviewData.cpp:347
+#: src/slic3r/GUI/GCodeViewer.cpp:2236 src/libslic3r/GCode/PreviewData.cpp:352
 msgid "Height (mm)"
 msgstr "Wysokość (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:1688
+#: src/libslic3r/PrintConfig.cpp:1796
 msgid "Height of skirt expressed in layers. Set this to a tall value to use skirt as a shield against drafts."
 msgstr "Wysokość skirtu wyrażona w warstwach. Ustawienie wysokiej wartości spowoduje stworzenie osłony chroniącej przed przeciągami."
 
-#: src/libslic3r/PrintConfig.cpp:2360
+#: src/libslic3r/PrintConfig.cpp:2503
 msgid "Height of the display"
 msgstr "Wysokość wyświetlacza"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1631
 msgid "Height range Modifier"
 msgstr "Modyfikator zakresu wysokości"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Height ranges"
 msgstr "Zakres wysokości"
 
-#: src/libslic3r/PrintConfig.cpp:261
+#: src/libslic3r/PrintConfig.cpp:295
 msgid "Heights at which a filament change is to occur."
 msgstr "Wysokość w osi Z, na której ma nastąpić zmiana filamentu."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:433
+#: src/slic3r/GUI/ConfigWizard.cpp:451
 #, c-format
 msgid "Hello, welcome to %s! This %s helps you with the initial configuration; just a few settings and you will be ready to print."
 msgstr "Witaj w %s! Ten %s pomoże Ci z konfiguracją początkową - wszystko będzie gotowe do drukowania po zaledwie kilku kliknięciach."
 
-#: src/libslic3r/PrintConfig.cpp:3365
+#: src/libslic3r/PrintConfig.cpp:3564
 msgid "Help"
 msgstr "Pomoc"
 
-#: src/libslic3r/PrintConfig.cpp:3371
+#: src/libslic3r/PrintConfig.cpp:3570
 msgid "Help (FFF options)"
 msgstr "Pomoc (opcje FFF)"
 
-#: src/libslic3r/PrintConfig.cpp:3376
+#: src/libslic3r/PrintConfig.cpp:3575
 msgid "Help (SLA options)"
 msgstr "Pomoc (opcje SLA)"
 
@@ -3299,96 +3793,80 @@ msgstr "Pomoc (opcje SLA)"
 msgid "Here you can adjust required purging volume (mm³) for any given pair of tools."
 msgstr "To ustawienie odpowiada za objętość czyszczonego filamentu w (mm³) dla danej pary ekstruderów."
 
-#: src/libslic3r/PrintConfig.cpp:973
+#: src/libslic3r/PrintConfig.cpp:1017
 msgid "High extruder current on filament swap"
 msgstr "Zwiększenie prądu ekstrudera przy zmianie filamentu"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:277
+#: src/slic3r/GUI/GLCanvas3D.cpp:263
 msgid "Higher print quality versus higher print speed."
 msgstr "Wyższa jakość druku vs wyższa prędkość."
 
-#: src/libslic3r/PrintConfig.cpp:427 src/libslic3r/PrintConfig.cpp:853
+#: src/libslic3r/PrintConfig.cpp:463 src/libslic3r/PrintConfig.cpp:891
 msgid "Hilbert Curve"
 msgstr "Krzywa Hilberta"
 
-#: src/slic3r/GUI/Plater.cpp:1042
+#: src/slic3r/GUI/Plater.cpp:916
 msgid "Hold Shift to Slice & Export G-code"
-msgstr "Przytrzymaj Shift aby Pociąć i Wyeksportować G-code"
+msgstr "Przytrzymaj Shift, aby pociąć i wyeksportować G-code"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
 msgid "Hole depth"
 msgstr "Głębokość otworu"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:45
 msgid "Hole diameter"
 msgstr "Średnica otworu"
 
-#: src/slic3r/GUI/Plater.cpp:2760
-msgid "Hollow"
-msgstr "Drążenie"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:977
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:785
 msgid "Hollow and drill"
 msgstr "Drążenie i wiercenie"
 
-#: src/libslic3r/PrintConfig.cpp:2910
+#: src/libslic3r/PrintConfig.cpp:3074
 msgid "Hollow out a model to have an empty interior"
 msgstr "Wydrąż model, aby uzyskać puste wnętrze"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:40
 msgid "Hollow this object"
 msgstr "Wydrąż ten model"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:108 src/slic3r/GUI/Tab.cpp:3654
-#: src/slic3r/GUI/Tab.cpp:3655 src/libslic3r/SLA/Hollowing.cpp:46
-#: src/libslic3r/SLA/Hollowing.cpp:58 src/libslic3r/SLA/Hollowing.cpp:67
-#: src/libslic3r/SLA/Hollowing.cpp:76 src/libslic3r/PrintConfig.cpp:2909
-#: src/libslic3r/PrintConfig.cpp:2916 src/libslic3r/PrintConfig.cpp:2926
-#: src/libslic3r/PrintConfig.cpp:2935
+#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/Tab.cpp:4073
+#: src/slic3r/GUI/Tab.cpp:4074 src/libslic3r/SLA/Hollowing.cpp:45
+#: src/libslic3r/SLA/Hollowing.cpp:57 src/libslic3r/SLA/Hollowing.cpp:66
+#: src/libslic3r/SLA/Hollowing.cpp:75 src/libslic3r/PrintConfig.cpp:3073
+#: src/libslic3r/PrintConfig.cpp:3080 src/libslic3r/PrintConfig.cpp:3090
+#: src/libslic3r/PrintConfig.cpp:3099
 msgid "Hollowing"
 msgstr "Drążenie"
 
-#: src/slic3r/GUI/Plater.cpp:2926
-msgid "Hollowing cancelled."
-msgstr "Drążenie anulowane."
-
-#: src/slic3r/GUI/Plater.cpp:2927
-msgid "Hollowing done."
-msgstr "Drążenie zakończone."
-
-#: src/slic3r/GUI/Plater.cpp:2929
-msgid "Hollowing failed."
-msgstr "Drążenie nie powiodło się."
-
-#: src/libslic3r/PrintConfig.cpp:2937
+#: src/libslic3r/PrintConfig.cpp:3101
 msgid "Hollowing is done in two steps: first, an imaginary interior is calculated deeper (offset plus the closing distance) in the object and then it's inflated back to the specified offset. A greater closing distance makes the interior more rounded. At zero, the interior will resemble the exterior the most."
 msgstr "Drążenie wnętrza odbywa się w dwóch etapach: w pierwszym obliczana jest wewnątrz pusta przestrzeń o rozmiarach równych sumie grubości powłoki i dystansu domykania, a w kolejnym jest \"nadmuchiwane\" z powrotem do zadanej grubości. Większy dystans zamykania tworzy większe promienie we wnętrzu. Wartość \"0\" odda wnętrze najbardziej zbliżone do zewnętrznej powłoki."
 
-#: src/libslic3r/SLAPrintSteps.cpp:43
+#: src/libslic3r/SLAPrintSteps.cpp:44
 msgid "Hollowing model"
 msgstr "Drążenie modelu"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:813
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:624
 msgid "Hollowing parameter change"
 msgstr "Zmiana parametrów drążenia"
 
-#: src/libslic3r/PrintConfig.cpp:850 src/libslic3r/PrintConfig.cpp:2011
+#: src/libslic3r/PrintConfig.cpp:888 src/libslic3r/PrintConfig.cpp:2153
 msgid "Honeycomb"
 msgstr "Plaster miodu"
 
-#: src/slic3r/GUI/Tab.cpp:1064
+#: src/slic3r/GUI/Tab.cpp:1386
 msgid "Horizontal shells"
 msgstr "Powłoka pozioma"
 
-#: src/libslic3r/PrintConfig.cpp:245
+#: src/libslic3r/PrintConfig.cpp:279
 msgid "Horizontal width of the brim that will be printed around each object on the first layer."
 msgstr "Szerokość brim (obramowania), drukowanego wokół każdego z modeli na pierwszej warstwie."
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:152
+#: src/slic3r/GUI/PrintHostDialogs.cpp:150
 msgid "Host"
 msgstr "Host"
 
-#: src/libslic3r/PrintConfig.cpp:1332
+#: src/libslic3r/PrintConfig.cpp:1440
 msgid "Host Type"
 msgstr "Rodzaj serwera"
 
@@ -3396,69 +3874,78 @@ msgstr "Rodzaj serwera"
 msgid "Hostname"
 msgstr "Nazwa hosta"
 
-#: src/libslic3r/PrintConfig.cpp:97
+#: src/libslic3r/PrintConfig.cpp:99
 msgid "Hostname, IP or URL"
 msgstr "Nazwa hosta, IP lub URL"
 
-#: src/slic3r/GUI/Tab.cpp:139
+#: src/slic3r/GUI/Tab.cpp:210
 msgid ""
 "Hover the cursor over buttons to find more information \n"
 "or click this button."
 msgstr ""
-"Umieść kursor nad przyciskiem aby uzyskać więcej informacji\n"
+"Umieść kursor nad przyciskiem, aby uzyskać więcej informacji\n"
 "lub kliknij ten przycisk."
 
-#: src/libslic3r/PrintConfig.cpp:2812
+#: src/libslic3r/PrintConfig.cpp:2976
 msgid "How far should the pad extend around the contained geometry"
 msgstr "Jak daleko poza kształt powinna sięgać podkładka"
 
-#: src/libslic3r/PrintConfig.cpp:2901
+#: src/libslic3r/PrintConfig.cpp:3065
 msgid "How much should the tiny connectors penetrate into the model body."
 msgstr "Głębokość, na którą malutkie łączniki podpór powinny wnikać w powłokę modelu."
 
-#: src/libslic3r/PrintConfig.cpp:2631
+#: src/libslic3r/PrintConfig.cpp:2774
 msgid "How much the pinhead has to penetrate the model surface"
 msgstr "Głębokość, na którą łącznik podpory powinien wnikać w powłokę modelu"
 
-#: src/libslic3r/PrintConfig.cpp:2755
+#: src/libslic3r/PrintConfig.cpp:2919
 msgid "How much the supports should lift up the supported object. If \"Pad around object\" is enabled, this value is ignored."
 msgstr "Odległość, na którą model zostanie podniesiony na podporach. Jeśli opcja \"Podkładka wokół modelu\" jest włączona, to ten parametr zostanie zignorowany."
 
-#: src/libslic3r/PrintConfig.cpp:111
+#: src/libslic3r/PrintConfig.cpp:1209
+msgid "How to apply limits"
+msgstr "Jak stosować limity"
+
+#: src/libslic3r/PrintConfig.cpp:1203
+msgid "How to apply the Machine Limits"
+msgstr "Jak stosować limity maszynowe"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:358
+#: src/libslic3r/PrintConfig.cpp:113
 msgid "HTTPS CA File"
 msgstr "Plik certyfikatu HTTPS CA"
 
-#: src/slic3r/GUI/Tab.cpp:1713
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:319
 msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate."
 msgstr "Plik HTTPS CA jest opcjonalny. Jest potrzebny jedynie w sytuacji, gdy używasz HTTPS z certyfikatem samopodpisanym."
 
-#: src/slic3r/GUI/Preferences.cpp:222
+#: src/slic3r/GUI/Preferences.cpp:376
 msgid "Icon size in a respect to the default size"
 msgstr "Rozmiar ikon w odniesieniu do domyślnego"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:149
+#: src/slic3r/GUI/PrintHostDialogs.cpp:147
 msgid "ID"
 msgstr "ID"
 
-#: src/libslic3r/PrintConfig.cpp:1873
+#: src/libslic3r/PrintConfig.cpp:2015
 msgid "If checked, supports will be generated automatically based on the overhang threshold value. If unchecked, supports will be generated inside the \"Support Enforcer\" volumes only."
 msgstr "Jeśli ta opcja będzie zaznaczona, to podpory zostaną wygenerowane automatycznie, na podstawie ustawionego progu zwisu. Jeśli ją odznaczysz, to podpory będą generowane jedynie w środku modyfikatora wymuszającego podpory."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:773
+#: src/slic3r/GUI/ConfigWizard.cpp:1132
 #, c-format
 msgid "If enabled, %s checks for new application versions online. When a new version becomes available, a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "To ustawienie spowoduje wyszukiwanie nowych wersji aplikacji %s online. Po pojawieniu się nowej wersji, przy kolejnym uruchomieniu zostanie wyświetlone powiadomienie (nie pojawi się, gdy aplikacja będzie uruchomiona). Jest to tylko mechanizm powiadamiania - nie instaluje aktualizacji automatycznie."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:783
+#: src/slic3r/GUI/ConfigWizard.cpp:1142
 #, c-format
 msgid "If enabled, %s downloads updates of built-in system presets in the background.These updates are downloaded into a separate temporary location.When a new preset version becomes available it is offered at application startup."
 msgstr "Jeśli aktywna, to %s będzie pobierać aktualizacje wbudowanych zestawów ustawień w tle. Będą one pobierane do folderu tymczasowego. Opcja aktualizacji ustawień będzie oferowana przy starcie aplikacji."
 
-#: src/libslic3r/PrintConfig.cpp:1852
+#: src/libslic3r/PrintConfig.cpp:1994
 msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
 msgstr "Jeśli ta opcja będzie aktywna, to wszystkie ekstrudery będą czyszczone na przedniej krawędzi stołu na początku wydruku."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:805
+#: src/slic3r/GUI/ConfigWizard.cpp:1164
 msgid ""
 "If enabled, allows the Reload from disk command to automatically find and load the files when invoked.\n"
 "If not enabled, the Reload from disk command will ask to select each file using an open file dialog."
@@ -3466,127 +3953,174 @@ msgstr ""
 "Jeśli włączone, pozwala poleceniu \"Wczytaj ponownie z dysku\" automatycznie odnaleźć i wczytać pliki.\n"
 "Jeśli wyłączone, to polecenie będzie otwierać okno dialogowe, w którym wskażesz plik źródłowy."
 
-#: src/slic3r/GUI/Preferences.cpp:74
+#: src/slic3r/GUI/Preferences.cpp:91
 msgid "If enabled, allows the Reload from disk command to automatically find and load the files when invoked."
 msgstr "Jeśli włączone, pozwala poleceniu Wczytaj ponownie z dysku automatycznie odnaleźć i wczytać pliki."
 
-#: src/slic3r/GUI/Preferences.cpp:66
+#: src/slic3r/GUI/Preferences.cpp:238
+msgid "If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer. If disabled, changes made using the sequential slider, in preview, apply to the whole gcode."
+msgstr ""
+"Jeśli włączone, zmiany stosowane suwakiem sekwencyjnym w podglądzie zostaną zastosowane do górnej warstwy G-code.\n"
+"Jeśli wyłączone, zmiany stosowane suwakiem sekwencyjnym w podglądzie zostaną zastosowane do całego G-code."
+
+#: src/slic3r/GUI/Preferences.cpp:83
 msgid "If enabled, PrusaSlicer will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."
 msgstr "Włączenie automatycznego sprawdzania dostępności nowych wersji PrusaSlicer online. Pojawienie się nowej wersji spowoduje wyświetlenie powiadomienia przy starcie aplikacji (nigdy podczas jej pracy). Ta funkcja służy tylko powiadamianiu, nie instaluje aktualizacji automatycznie."
 
-#: src/slic3r/GUI/Preferences.cpp:82
+#: src/slic3r/GUI/Preferences.cpp:270
+msgid "If enabled, renders object using the environment map."
+msgstr "Jeśli włączone, obiekty będą renderowane przy pomocy mapy środowiskowej."
+
+#: src/slic3r/GUI/Preferences.cpp:200
+msgid "If enabled, reverses the direction of zoom with mouse wheel"
+msgstr "Jeśli włączone, kierunek kółka myszy zostanie odwrócony."
+
+#: src/slic3r/GUI/Preferences.cpp:99
 msgid "If enabled, Slic3r downloads updates of built-in system presets in the background. These updates are downloaded into a separate temporary location. When a new preset version becomes available it is offered at application startup."
 msgstr "Włączenie powoduje pobieranie wbudowanych systemowych zestawów ustawień w tle. Te ustawienia są pobierane do oddzielnej lokalizacji tymczasowej. Jeśli pojawi się nowa wersja to opcja jej instalacji pojawi się przy starcie aplikacji."
 
-#: src/slic3r/GUI/Preferences.cpp:106
+#: src/slic3r/GUI/Preferences.cpp:137
 msgid "If enabled, the 3D scene will be rendered in Retina resolution. If you are experiencing 3D performance problems, disabling this option may help."
 msgstr "Po włączeniu podgląd 3D będzie renderowany w rozdzielczości Retina. Wyłącz tę opcję w przypadku wystąpienia problemów z wydajnością 3D."
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/slic3r/GUI/Preferences.cpp:215
+msgid "If enabled, the button for the collapse sidebar will be appeared in top right corner of the 3D Scene"
+msgstr "Jeśli włączone, na górze podglądu 3D będzie wyświetlany przycisk zwijania bocznego panelu"
+
+#: src/libslic3r/PrintConfig.cpp:3698
+msgid "If enabled, the command line arguments are sent to an existing instance of GUI PrusaSlicer, or an existing PrusaSlicer window is activated. Overrides the \"single_instance\" configuration value from application preferences."
+msgstr "Jeśli włączone, argumenty linii komend zostaną wysłane do istniejącego GUI PrusaSlicer lub aktywnego okna PrusaSlicer. Nadpisuje parametr konfiguracji \"single_instance\" z preferencji aplikacji."
+
+#: src/libslic3r/PrintConfig.cpp:1804
 msgid "If enabled, the skirt will be as tall as a highest printed object. This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."
 msgstr "Po włączeniu, wysokość skirt będzie taka sama, jak najwyższego modelu. Przydaje się podczas druku z ABS lub ASA - chroni wydruk przed podwijaniem się i odklejaniem od stołu przez przeciąg."
 
-#: src/libslic3r/PrintConfig.cpp:1858
+#: src/libslic3r/PrintConfig.cpp:2000
 msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print."
 msgstr "Po włączeniu wieża czyszcząca nie będzie drukowana na warstwach, na których nie ma zmian koloru. Na kolejnych warstwach ze zmianami koloru ekstruder zjedzie w dół, aby kontynuować czyszczenie na wieży. Użytkownik musi upewnić się, że nie nastąpi kolizja głowicy z wydrukiem."
 
-#: src/slic3r/GUI/Preferences.cpp:128
+#: src/slic3r/GUI/Preferences.cpp:193
 msgid "If enabled, use free camera. If not enabled, use constrained camera."
 msgstr "Jeśli włączone, to używany będę wolny widok. Jeśli wyłączone, to widok będzie ograniczony."
 
-#: src/slic3r/GUI/Preferences.cpp:121
+#: src/slic3r/GUI/Preferences.cpp:186
 msgid "If enabled, use perspective camera. If not enabled, use orthographic camera."
 msgstr "Po włączeniu będzie wyświetlony widok perspektywiczny. Po wyłączeniu, ortograficzny."
 
-#: src/slic3r/GUI/Preferences.cpp:145
+#: src/slic3r/GUI/Preferences.cpp:222
 msgid "If enabled, you can change size of toolbar icons manually."
 msgstr "Włączenie umożliwi ręczną zmianę rozmiaru ikon pasków narzędzi."
 
-#: src/slic3r/GUI/PresetHints.cpp:29
+#: src/slic3r/GUI/PresetHints.cpp:28
 msgid "If estimated layer time is below ~%1%s, fan will run at %2%%% and print speed will be reduced so that no less than %3%s are spent on that layer (however, speed will never be reduced below %4%mm/s)."
 msgstr "Jeśli szacowany czas druku warstwy jest niższy niż ~%1%s, wentylator będzie pracował na %2%%% a prędkość druku zostanie obniżona tak, aby warstwa była drukowana przez nie mniej niż %3%s (jednakże prędkość nie zejdzie poniżej %4%mm/s)."
 
-#: src/slic3r/GUI/PresetHints.cpp:36
+#: src/slic3r/GUI/PresetHints.cpp:35
 msgid "If estimated layer time is greater, but still below ~%1%s, fan will run at a proportionally decreasing speed between %2%%% and %3%%%."
 msgstr "Jeśli szacowany czas jest wyższy, ale poniżej ~%1%s, wentylator będzie pracował z proporcjonalnie zmniejszaną prędkością poniędzy %2%%% a %3%%%."
 
-#: src/libslic3r/PrintConfig.cpp:901
+#: src/libslic3r/PrintConfig.cpp:943
 msgid "If expressed as absolute value in mm/s, this speed will be applied to all the print moves of the first layer, regardless of their type. If expressed as a percentage (for example: 40%) it will scale the default speeds."
 msgstr "Jeśli ustawisz wartość bezwzględną wyrażoną w mm/s, taka prędkość będzie zastosowana dla wszystkich ruchów drukujących dla pierwszej warstwy, nie zależnie od ich rodzajów. Jeśli ustawisz wartość procentową (np. 40%), będzie ona skalowana wg domyślnej prędkości."
 
-#: src/libslic3r/PrintConfig.cpp:573
+#: src/libslic3r/PrintConfig.cpp:609
 msgid "If layer print time is estimated below this number of seconds, fan will be enabled and its speed will be calculated by interpolating the minimum and maximum speeds."
 msgstr "Jeśli szacowany czas druku warstwy będzie niższy niż ta wartość to wentylator będzie włączony a jego prędkość będzie interpolowana na podstawie górnego i dolnego limitu prędkości."
 
-#: src/libslic3r/PrintConfig.cpp:1706
+#: src/libslic3r/PrintConfig.cpp:1821
 msgid "If layer print time is estimated below this number of seconds, print moves speed will be scaled down to extend duration to this value."
-msgstr "Jeśli szacowany czas druku warstwy będzie niższy niż ta wartość to prędkość ruchów drukujących będzie zmniejszona aby wydłużyć czas druku."
+msgstr "Jeśli szacowany czas druku warstwy będzie niższy niż ta wartość to prędkość ruchów drukujących będzie zmniejszona, aby wydłużyć czas druku."
 
-#: src/libslic3r/PrintConfig.cpp:567
+#: src/libslic3r/PrintConfig.cpp:603
 msgid "If this is enabled, fan will never be disabled and will be kept running at least at its minimum speed. Useful for PLA, harmful for ABS."
 msgstr "Ta opcja spowoduje, że wentylator nie wyłączy się podczas druku, tzn. zawsze będzie pracował z przynajmniej minimalną prędkością. Przydatne dla PLA, może szkodzić przy ABS."
 
-#: src/slic3r/GUI/Preferences.cpp:49
+#: src/slic3r/GUI/Preferences.cpp:66
 msgid "If this is enabled, Slic3r will auto-center objects around the print bed center."
-msgstr "Spowoduje, że Slic3r będzie automatycznie umieszczał modele wokół centrum stołu."
+msgstr "Spowoduje, że PrusaSlicer będzie automatycznie umieszczał modele wokół centrum stołu."
 
-#: src/slic3r/GUI/Preferences.cpp:57
+#: src/slic3r/GUI/Preferences.cpp:74
 msgid "If this is enabled, Slic3r will pre-process objects as soon as they're loaded in order to save time when exporting G-code."
-msgstr "Spowoduje, że Slic3r będzie automatycznie procesował modele jak tylko zostaną załadowane aby zmniejszyć czas eksportu G-code."
+msgstr "Spowoduje, że Slic3r będzie automatycznie procesował modele jak tylko zostaną załadowane, aby zmniejszyć czas eksportu G-code."
 
-#: src/slic3r/GUI/Preferences.cpp:41
+#: src/slic3r/GUI/Preferences.cpp:54
 msgid "If this is enabled, Slic3r will prompt the last output directory instead of the one containing the input files."
 msgstr "Włączenie spowoduje, że Slic3r będzie za każdym razem pytał gdzie wyeksportować plik zamiast używać katalogu z plikami wejściowymi."
 
-#: src/libslic3r/PrintConfig.cpp:1562
+#: src/slic3r/GUI/Preferences.cpp:125
+msgid "If this is enabled, when starting PrusaSlicer and another instance of the same PrusaSlicer is already running, that instance will be reactivated instead."
+msgstr "Jeśli włączone, uruchomienie PrusaSlicer, gdy uruchomiona jest ta sama wersja PrusaSlicer, spowoduje reaktywację tej instancji."
+
+#: src/libslic3r/PrintConfig.cpp:1670
 msgid "If you set this to a positive value, Z is quickly raised every time a retraction is triggered. When using multiple extruders, only the setting for the first extruder will be considered."
 msgstr "Jeśli ustawisz tu wartość dodatnią to oś Z wykona szybki ruch w górę przy każdej retrakcji. Przy używaniu kilku ekstruderów tylko ustawienia pierwszego z nich będą brane pod uwagę."
 
-#: src/libslic3r/PrintConfig.cpp:1571
+#: src/libslic3r/PrintConfig.cpp:1679
 msgid "If you set this to a positive value, Z lift will only take place above the specified absolute Z. You can tune this setting for skipping lift on the first layers."
 msgstr "Jeśli ustawisz wartość dodatnią, to oś Z (z-hop) będzie podnosić się tylko powyżej ustawionej wartości. Możesz w ten sposób wyłączyć z-hop na pierwszej warstwie."
 
-#: src/libslic3r/PrintConfig.cpp:1580
+#: src/libslic3r/PrintConfig.cpp:1688
 msgid "If you set this to a positive value, Z lift will only take place below the specified absolute Z. You can tune this setting for limiting lift to the first layers."
 msgstr "Jeśli ustawisz wartość dodatnią, to z-hop będzie odbywał się tylko poniżej ustawionej wartości. Możesz w ten sposób ograniczyć działanie funkcji np. tylko dla pierwszych warstw."
 
-#: src/libslic3r/PrintConfig.cpp:1454
+#: src/libslic3r/PrintConfig.cpp:1562
 msgid "If you want to process the output G-code through custom scripts, just list their absolute paths here. Separate multiple scripts with a semicolon. Scripts will be passed the absolute path to the G-code file as the first argument, and they can access the Slic3r config settings by reading environment variables."
 msgstr "Wprowadź ścieżki do własnych skryptów jeśli chcesz dodać je do wyjściowego pliku G-code. Możesz dodać wiele skryptów, rozdzielając je średnikiem ( ; ). Skrypty będą przetwarzane jako pierwsze w kolejności i mają dostęp do ustawień konfiguracyjnych Slic3ra przez zmienne środowiskowe."
 
-#: src/libslic3r/PrintConfig.cpp:530
+#: src/libslic3r/PrintConfig.cpp:566
 msgid "If your firmware doesn't handle the extruder displacement you need the G-code to take it into account. This option lets you specify the displacement of each extruder with respect to the first one. It expects positive coordinates (they will be subtracted from the XY coordinate)."
 msgstr "Jeśli oprogramowanie układowe (firmware) Twojej drukarki nie obsługuje rozmieszczenia ekstruderów to trzeba to określić w G-code. Ta opcja pozwala ustawić rozmieszczenie każdego ekstrudera w relacji do pierwszego. Oczekuje koordynat dodatnich (będą odejmowane od koordynat XY)."
 
-#: src/libslic3r/PrintConfig.cpp:2169
+#: src/libslic3r/PrintConfig.cpp:2312
 msgid "If your firmware requires relative E values, check this, otherwise leave it unchecked. Most firmwares use absolute values."
 msgstr "Jeśli Twój firmware wymaga względnych wartości E, zaznacz to pole. W innym przypadku zostaw puste. Większość układów obsługuje wartości absolutne."
 
-#: src/libslic3r/PrintConfig.cpp:3485
+#: src/libslic3r/PrintConfig.cpp:1219
+msgid "Ignore"
+msgstr "Ignoruj"
+
+#: src/libslic3r/PrintConfig.cpp:3684
 msgid "Ignore non-existent config files"
 msgstr "Ignoruj nieistniejące pliki konfiguracyjne"
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:192
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:173
+msgid "Ignores facets facing away from the camera."
+msgstr "Ignoruje powierzchnie skierowane w przeciwną stronę względem widoku."
+
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Import &Config"
 msgstr "Import Konfigura&cji"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Import Config &Bundle"
 msgstr "Import Paczki Konfi&guracyjnej"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Import Config from &project"
 msgstr "Import Konfiguracji z &projektu"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:119
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
 msgid "Import Config from ini/amf/3mf/gcode"
 msgstr "Importuj konfigurację z ini/amf/3mf/gcode"
 
-#: src/slic3r/GUI/Plater.cpp:4603
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:39
+msgid "Import file"
+msgstr "Import pliku"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:46
+msgid "Import model and profile"
+msgstr "Import modelu i profilu"
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:48
+msgid "Import model only"
+msgstr "Import tylko modelu"
+
+#: src/slic3r/GUI/Plater.cpp:4655
 msgid "Import Object"
 msgstr "Import Modelu"
 
-#: src/slic3r/GUI/Plater.cpp:4607
+#: src/slic3r/GUI/Plater.cpp:4659
 msgid "Import Objects"
 msgstr "Importuj Modele"
 
@@ -3594,15 +4128,50 @@ msgstr "Importuj Modele"
 msgid "Import of the repaired 3mf file failed"
 msgstr "Niepowodzenie importu naprawionego pliku 3MF"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:47
+msgid "Import profile only"
+msgstr "Import tylko profilu"
+
+#: src/slic3r/GUI/MainFrame.cpp:1050
+msgid "Import SL1 archive"
+msgstr "Import archiwum SL1"
+
+#: src/slic3r/GUI/Plater.cpp:1561
+msgid "Import SLA archive"
+msgstr "Import archiwum SLA"
+
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Import STL (imperial units)"
+msgstr "Import STL (jednostki imperialne)"
+
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Import STL/OBJ/AM&F/3MF"
 msgstr "Import STL/OBJ/AM&F/3MF"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:118
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:111
 msgid "Import STL/OBJ/AMF/3MF without config, keep plater"
 msgstr "Otwórz STL/OBJ/AMF/3MF bez konfiguracji, zachowaj zawartość stołu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3422
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:159
+msgid "Importing canceled."
+msgstr "Importowanie anulowane."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:160
+msgid "Importing done."
+msgstr "Importowanie zakończone."
+
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:135
+msgid "Importing SLA archive"
+msgstr "Importowanie archiwum SLA"
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+msgid "in"
+msgstr "cale"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3885
 #, c-format
 msgid "In this mode you can select only other %s Items%s"
 msgstr "W tym trybie możesz wybrać jedynie %s elementów %s"
@@ -3611,25 +4180,25 @@ msgstr "W tym trybie możesz wybrać jedynie %s elementów %s"
 msgid "Incompatible bundles:"
 msgstr "Niekompatybilne zestawy ustawień:"
 
+#: src/slic3r/GUI/PresetComboBoxes.cpp:241
+msgid "Incompatible presets"
+msgstr "Niekompatybilne zestawy ustawień"
+
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:75
 #, c-format
 msgid "Incompatible with this %s"
 msgstr "Brak kompatybilności z %s"
 
-#: src/slic3r/GUI/Plater.cpp:4685
+#: src/slic3r/GUI/Plater.cpp:4790
 msgid "Increase Instances"
 msgstr "Zwiększ ilość instancji"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:264
+#: src/slic3r/GUI/GLCanvas3D.cpp:251
 msgid "Increase/decrease edit area"
 msgstr "Zmniejsz/zwiększ obszar edycji"
 
-#: src/slic3r/GUI/Plater.cpp:2922
-msgid "Indexing hollowed object"
-msgstr "Indeksowanie wydrążonego obiektu"
-
 #. TRN Description for "UNLOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3258
+#: src/slic3r/GUI/Tab.cpp:3695
 msgid ""
 "indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
 "Click the UNLOCKED LOCK icon to reset all settings for current option group to the system (or default) values."
@@ -3638,432 +4207,488 @@ msgstr ""
 "Kliknij ikonę OTWARTEJ KŁÓDKI, aby zresetować wszystkie ustawienia obecnej grupy ustawień do wartości systemowych (lub domyślnych)."
 
 #. TRN Description for "LOCKED LOCK"
-#: src/slic3r/GUI/Tab.cpp:3254
+#: src/slic3r/GUI/Tab.cpp:3691
 msgid "indicates that the settings are the same as the system (or default) values for the current option group"
 msgstr "wskazuje na to, że ustawienia są takie same jak systemowe (lub domyślne) wartości dla danej grupy opcji"
 
 #. TRN Description for "BACK ARROW"
-#: src/slic3r/GUI/Tab.cpp:3270
+#: src/slic3r/GUI/Tab.cpp:3707
 msgid ""
 "indicates that the settings were changed and are not equal to the last saved preset for the current option group.\n"
 "Click the BACK ARROW icon to reset all settings for the current option group to the last saved preset."
 msgstr ""
 "oznacza, że ustawienia zostały zmodyfikowane i nie odpowiadają tym z ostatnio zapisanego zestawu ustawień dla obecnej grupy opcji.\n"
-"Kliknij ikonę STRZAŁKI W TYŁ aby zresetować wszystkie ustawienia w obecnej grupie opcji do tych z ostatnio zapisanego zestawu ustawień."
+"Kliknij ikonę STRZAŁKI W TYŁ, aby zresetować wszystkie ustawienia w obecnej grupie opcji do tych z ostatnio zapisanego zestawu ustawień."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:211
-#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:96
-#: src/slic3r/GUI/GUI_ObjectList.cpp:614 src/slic3r/GUI/Plater.cpp:527
-#: src/slic3r/GUI/Tab.cpp:1091 src/slic3r/GUI/Tab.cpp:1092
-#: src/libslic3r/PrintConfig.cpp:203 src/libslic3r/PrintConfig.cpp:416
-#: src/libslic3r/PrintConfig.cpp:436 src/libslic3r/PrintConfig.cpp:776
-#: src/libslic3r/PrintConfig.cpp:790 src/libslic3r/PrintConfig.cpp:827
-#: src/libslic3r/PrintConfig.cpp:981 src/libslic3r/PrintConfig.cpp:991
-#: src/libslic3r/PrintConfig.cpp:1009 src/libslic3r/PrintConfig.cpp:1028
-#: src/libslic3r/PrintConfig.cpp:1047 src/libslic3r/PrintConfig.cpp:1728
-#: src/libslic3r/PrintConfig.cpp:1745
+#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/GUI_ObjectList.cpp:35 src/slic3r/GUI/GUI_ObjectList.cpp:93
+#: src/slic3r/GUI/GUI_ObjectList.cpp:652 src/slic3r/GUI/Plater.cpp:393
+#: src/slic3r/GUI/Tab.cpp:1413 src/slic3r/GUI/Tab.cpp:1414
+#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:450
+#: src/libslic3r/PrintConfig.cpp:472 src/libslic3r/PrintConfig.cpp:812
+#: src/libslic3r/PrintConfig.cpp:826 src/libslic3r/PrintConfig.cpp:863
+#: src/libslic3r/PrintConfig.cpp:1025 src/libslic3r/PrintConfig.cpp:1035
+#: src/libslic3r/PrintConfig.cpp:1053 src/libslic3r/PrintConfig.cpp:1072
+#: src/libslic3r/PrintConfig.cpp:1091 src/libslic3r/PrintConfig.cpp:1843
+#: src/libslic3r/PrintConfig.cpp:1860
 msgid "Infill"
 msgstr "Wypełnienie"
 
-#: src/slic3r/GUI/PresetHints.cpp:174
+#: src/slic3r/GUI/PresetHints.cpp:173
 msgid "infill"
 msgstr "wypełnienia"
 
-#: src/libslic3r/PrintConfig.cpp:1021
+#: src/libslic3r/PrintConfig.cpp:1065
 msgid "Infill before perimeters"
 msgstr "Wypełnienie przed obrysami"
 
-#: src/libslic3r/PrintConfig.cpp:1001
+#: src/libslic3r/PrintConfig.cpp:1045
 msgid "Infill extruder"
 msgstr "Ekstruder dla wypełnienia"
 
-#: src/libslic3r/PrintConfig.cpp:1036
+#: src/libslic3r/PrintConfig.cpp:1080
 msgid "Infill/perimeters overlap"
 msgstr "Nakładanie wypełnienia na obrysy"
 
-#: src/libslic3r/Print.cpp:1584
+#: src/libslic3r/Print.cpp:1610
 msgid "Infilling layers"
 msgstr "Warstwy wypełniające"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3430
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3505 src/slic3r/GUI/Plater.cpp:141
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3893
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3968 src/slic3r/GUI/Plater.cpp:147
 msgid "Info"
 msgstr "Info"
 
-#: src/libslic3r/PrintConfig.cpp:1057
+#: src/slic3r/GUI/GUI_App.cpp:1087 src/slic3r/GUI/Tab.cpp:3435
+msgid "Information"
+msgstr "Informacje"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:547
+msgid "Infornation"
+msgstr "Informacje"
+
+#: src/libslic3r/PrintConfig.cpp:1101
 msgid "Inherits profile"
 msgstr "Dziedziczy profil"
 
-#: src/libslic3r/SLAPrint.cpp:653
+#: src/libslic3r/SLAPrint.cpp:667
 msgid "Initial exposition time is out of printer profile bounds."
 msgstr "Początkowy czas naświetlania jest poza zakresem profilu drukarki."
 
-#: src/libslic3r/PrintConfig.cpp:2564 src/libslic3r/PrintConfig.cpp:2565
+#: src/libslic3r/PrintConfig.cpp:2707 src/libslic3r/PrintConfig.cpp:2708
 msgid "Initial exposure time"
 msgstr "Początkowy czas naświetlania"
 
-#: src/libslic3r/PrintConfig.cpp:2482 src/libslic3r/PrintConfig.cpp:2483
+#: src/libslic3r/PrintConfig.cpp:2625 src/libslic3r/PrintConfig.cpp:2626
 msgid "Initial layer height"
 msgstr "Wysokość pierwszej warstwy"
 
-#: src/slic3r/GUI/Field.cpp:204
+#: src/slic3r/GUI/Field.cpp:252 src/slic3r/GUI/Field.cpp:1370
 msgid "Input value is out of range"
 msgstr "Wartość poza zakresem"
 
-#: src/slic3r/GUI/GUI_App.cpp:800
+#: src/slic3r/GUI/GUI_App.cpp:1480
 msgid "Inspect / activate configuration snapshots"
 msgstr "Sprawdzenie / aktywacja zrzutów konfiguracji"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:60
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:216
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:62
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:218
 #, c-format
 msgid "Instance %d"
 msgstr "Kopia %d"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2500
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2892
 msgid "Instance manipulation"
 msgstr "Manipulacja kopią modelu"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:56
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:58
 msgid "Instances"
 msgstr "Instancje (kopie)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1091
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3781
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1215
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4244
 msgid "Instances to Separated Objects"
 msgstr "Kopie jako Osobne Modele"
 
-#: src/libslic3r/PrintConfig.cpp:1973
+#: src/libslic3r/PrintConfig.cpp:2115
 msgid "Interface layers"
 msgstr "Warstwy łączące"
 
-#: src/libslic3r/PrintConfig.cpp:1957
+#: src/libslic3r/PrintConfig.cpp:2099
 msgid "Interface loops"
 msgstr "Warstwy łączące (pętle)"
 
-#: src/libslic3r/PrintConfig.cpp:1982
+#: src/libslic3r/PrintConfig.cpp:2124
 msgid "Interface pattern spacing"
 msgstr "Rozstaw wzoru warstw łączących"
 
-#: src/libslic3r/PrintConfig.cpp:1071
+#: src/libslic3r/PrintConfig.cpp:1115
 msgid "Interface shells"
 msgstr "Powłoki łączące"
 
-#: src/libslic3r/Zipper.cpp:84
+#: src/libslic3r/miniz_extension.cpp:143
 msgid "internal error"
 msgstr "błąd wewnętrzny"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:240 src/libslic3r/ExtrusionEntity.cpp:313
+#: src/slic3r/GUI/GUI_Preview.cpp:304 src/libslic3r/ExtrusionEntity.cpp:317
+#: src/libslic3r/ExtrusionEntity.cpp:342
 msgid "Internal infill"
 msgstr "Wypełnienie wewnętrzne"
 
-#: src/slic3r/GUI/Plater.cpp:3106
+#: src/slic3r/GUI/BedShapeDialog.cpp:145
+msgid "Invalid"
+msgstr "Nieprawidłowy"
+
+#: src/slic3r/GUI/Plater.cpp:2906 src/slic3r/GUI/Plater.cpp:3583
 msgid "Invalid data"
 msgstr "Nieprawidłowe dane"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:494 src/slic3r/GUI/BedShapeDialog.cpp:543
-#: src/slic3r/GUI/BedShapeDialog.cpp:566
+#: src/slic3r/GUI/BedShapeDialog.cpp:570 src/slic3r/GUI/BedShapeDialog.cpp:619
+#: src/slic3r/GUI/BedShapeDialog.cpp:642
 msgid "Invalid file format."
 msgstr "Nieprawidłowy format pliku."
 
-#: src/libslic3r/Zipper.cpp:80
+#: src/libslic3r/miniz_extension.cpp:139
 msgid "invalid filename"
 msgstr "nieprawidłowa nazwa"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:319
+#: src/slic3r/GUI/ConfigManipulation.cpp:324
 msgid "Invalid Head penetration"
 msgstr "Nieprawidłowe przenikanie łączników podpór"
 
-#: src/libslic3r/Zipper.cpp:48
+#: src/libslic3r/miniz_extension.cpp:107
 msgid "invalid header or archive is corrupted"
 msgstr "niewłaściwy nagłówek lub uszkodzone archiwum"
 
-#: src/slic3r/GUI/Field.cpp:195 src/slic3r/GUI/Field.cpp:226
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:376
+#: src/slic3r/GUI/Field.cpp:243 src/slic3r/GUI/Field.cpp:274
+#: src/slic3r/GUI/Field.cpp:1358 src/slic3r/GUI/GUI_ObjectLayers.cpp:413
 msgid "Invalid numeric input."
 msgstr "Nieprawidłowa wartość numeryczna."
 
-#: src/libslic3r/Zipper.cpp:78
+#: src/libslic3r/miniz_extension.cpp:137
 msgid "invalid parameter"
 msgstr "nieprawidłowy parametr"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:332
+#: src/slic3r/GUI/ConfigManipulation.cpp:337
 msgid "Invalid pinhead diameter"
 msgstr "Błędna średnica łącznika"
 
+#: src/slic3r/GUI/GUI_ObjectList.cpp:94 src/slic3r/GUI/GUI_ObjectList.cpp:653
+#: src/slic3r/GUI/GUI_Preview.cpp:307 src/slic3r/GUI/Tab.cpp:1420
+#: src/libslic3r/ExtrusionEntity.cpp:320 src/libslic3r/ExtrusionEntity.cpp:348
+#: src/libslic3r/PrintConfig.cpp:1126 src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1146 src/libslic3r/PrintConfig.cpp:1156
+msgid "Ironing"
+msgstr "Prasowanie"
+
+#: src/libslic3r/PrintConfig.cpp:1131 src/libslic3r/PrintConfig.cpp:1133
+msgid "Ironing Type"
+msgstr "Rodzaj prasowania"
+
+#: src/slic3r/GUI/GUI_App.cpp:243
+msgid "is based on Slic3r by Alessandro Ranellucci and the RepRap community."
+msgstr "bazuje na projekcie Slic3r autorstwa Alessandro Ranellucciego i społeczności RepRap."
+
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:258
+#: src/slic3r/GUI/AboutDialog.cpp:283 src/slic3r/GUI/GUI_App.cpp:244
 msgid "is licensed under the"
 msgstr "ma licencję na warunkach"
 
-#: src/slic3r/GUI/Tab.cpp:2941
-msgid "is not compatible with print profile"
-msgstr "nie jest kompatybilne z profilem druku"
-
-#: src/slic3r/GUI/Tab.cpp:2940
-msgid "is not compatible with printer"
-msgstr "nie jest kompatybilne z drukarką"
-
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso"
 msgstr "Izometryczny"
 
-#: src/slic3r/GUI/MainFrame.cpp:658
+#: src/slic3r/GUI/MainFrame.cpp:955 src/slic3r/GUI/MainFrame.cpp:1275
 msgid "Iso View"
 msgstr "Widok izometryczny"
 
-#: src/slic3r/GUI/Tab.cpp:964
+#: src/slic3r/GUI/Tab.cpp:1282
 msgid "It can't be deleted or modified."
 msgstr "Nie można usunąć ani zmodyfikować."
 
-#: src/slic3r/GUI/Plater.cpp:3321
+#: src/slic3r/GUI/Plater.cpp:3124
 msgid "It is not allowed to change the file to reload"
 msgstr "Zmiana modelu do ponownego wczytania jest niemożliwa"
 
-#: src/libslic3r/PrintConfig.cpp:974
+#: src/libslic3r/PrintConfig.cpp:1018
 msgid "It may be beneficial to increase the extruder motor current during the filament exchange sequence to allow for rapid ramming feed rates and to overcome resistance when loading a filament with an ugly shaped tip."
 msgstr "Zwiększenie prądu podawanego do silnika ekstrudera może mieć pozytywny wpływ podczas zmiany filamentu, pomagając kształtować końcówkę przez wyciskanie oraz przepychać filament z nieprawidłowo ukształtowaną końcówką."
 
-#: src/slic3r/GUI/GUI_App.cpp:1084 src/slic3r/GUI/Tab.cpp:2958
+#: src/slic3r/GUI/Tab.cpp:3413
+msgid "It's a last preset for this physical printer."
+msgstr "Jest to ostatni zestaw ustawień dla fizycznej drukarki."
+
+#: src/slic3r/GUI/GUI_App.cpp:1876 src/slic3r/GUI/Tab.cpp:3187
 msgid "It's impossible to print multi-part object(s) with SLA technology."
 msgstr "Drukowanie modeli złożonych z wielu elementów jest niemożliwe w technologii SLA."
 
-#: src/slic3r/GUI/Tab.cpp:2229
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:601
+msgid "It's not possible to delete the last related preset for the printer."
+msgstr "Nie ma możliwości usunięcia ostatniego zestawu ustawień dla drukarki."
+
+#: src/slic3r/GUI/Tab.cpp:2398
 msgid "Jerk limits"
 msgstr "Limity jerku"
 
-#: src/libslic3r/PrintConfig.cpp:1649
+#: src/libslic3r/PrintConfig.cpp:1757
 msgid "Jitter"
 msgstr "Jitter"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:957 src/slic3r/GUI/DoubleSlider.cpp:1529
-#: src/slic3r/GUI/DoubleSlider.cpp:1651
+#: src/slic3r/GUI/DoubleSlider.cpp:1077 src/slic3r/GUI/DoubleSlider.cpp:1721
+#: src/slic3r/GUI/DoubleSlider.cpp:1852 src/slic3r/GUI/DoubleSlider.cpp:1856
 msgid "Jump to height"
 msgstr "Przejdź do wysokości"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:955
+#: src/slic3r/GUI/DoubleSlider.cpp:1075
 #, c-format
 msgid "Jump to height %s or Set extruder sequence for the entire print"
 msgstr "Przejdź na wysokość %s lub ustaw sekwencję ekstruderów dla całego wydruku"
 
-#: src/libslic3r/PrintConfig.cpp:566
+#: src/slic3r/GUI/DoubleSlider.cpp:1071 src/slic3r/GUI/DoubleSlider.cpp:1852
+msgid "Jump to move"
+msgstr "Przeskocz do ruchu"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:315
+msgid "Just switch to \"%1%\" preset"
+msgstr "Przełącz na zestaw ustawień \"%1%\""
+
+#: src/libslic3r/PrintConfig.cpp:602
 msgid "Keep fan always on"
 msgstr "Wentylator zawsze włączony"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:169
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:171
 msgid "Keep lower part"
 msgstr "Zachowaj dolną część"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:304
+#: src/slic3r/GUI/GLCanvas3D.cpp:290
 msgid "Keep min"
 msgstr "Zachowaj min"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:168
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
 msgid "Keep upper part"
 msgstr "Zachowaj górną część"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:41 src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:37
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:39 src/slic3r/GUI/MainFrame.cpp:941
+#: src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Keyboard Shortcuts"
 msgstr "Skróty klawiszowe"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:245
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:259
 msgid "Keyboard shortcuts"
 msgstr "Skróty klawiszowe"
 
-#: src/libslic3r/PrintConfig.cpp:2498
+#: src/libslic3r/PrintConfig.cpp:2641
 msgid "kg"
 msgstr "kg"
 
-#: src/libslic3r/PrintConfig.cpp:965
+#: src/libslic3r/PrintConfig.cpp:1009
 msgid "Label objects"
 msgstr "Oznacz modele"
 
-#: src/libslic3r/PrintConfig.cpp:2399
+#: src/libslic3r/PrintConfig.cpp:2542
 msgid "Landscape"
 msgstr "Tryb krajobrazu"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Language"
 msgstr "Język"
 
-#: src/slic3r/GUI/GUI_App.cpp:885
+#: src/slic3r/GUI/GUI_App.cpp:1605 src/slic3r/GUI/GUI_App.cpp:1614
 msgid "Language selection"
 msgstr "Wybór języka"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2140
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2242
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2307
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2408
 msgid "Last instance of an object cannot be deleted."
 msgstr "Ostatnia kopia modelu nie może zostać usunięta."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
 msgid "Layer"
 msgstr "Warstwa"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:49
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27 src/slic3r/GUI/Tab.cpp:1049
+#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29 src/slic3r/GUI/Tab.cpp:1371
 #: src/libslic3r/PrintConfig.cpp:71
 msgid "Layer height"
 msgstr "Wysokość warstwy"
 
-#: src/libslic3r/Print.cpp:1427
+#: src/libslic3r/Print.cpp:1453
 msgid "Layer height can't be greater than nozzle diameter"
 msgstr "Wysokość pierwszej warstwy nie może być większa od średnicy dyszy"
 
-#: src/slic3r/GUI/Tab.cpp:2362
+#: src/slic3r/GUI/Tab.cpp:2531
 msgid "Layer height limits"
 msgstr "Limit wysokości warstw"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
-msgid "Layer height:"
-msgstr "Wysokość warstwy:"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2488
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2880
 msgid "Layer range Settings to modify"
 msgstr "Zakres warstw dla modyfikacji ustawień"
 
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:52
-#: src/libslic3r/PrintConfig.cpp:362 src/libslic3r/PrintConfig.cpp:994
-#: src/libslic3r/PrintConfig.cpp:1505 src/libslic3r/PrintConfig.cpp:1690
-#: src/libslic3r/PrintConfig.cpp:1750 src/libslic3r/PrintConfig.cpp:1930
-#: src/libslic3r/PrintConfig.cpp:1976
+#: src/libslic3r/PrintConfig.cpp:396 src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1613 src/libslic3r/PrintConfig.cpp:1798
+#: src/libslic3r/PrintConfig.cpp:1865 src/libslic3r/PrintConfig.cpp:2072
+#: src/libslic3r/PrintConfig.cpp:2118
 msgid "layers"
 msgstr "warstwy"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:67 src/slic3r/GUI/Tab.cpp:3512
-#: src/slic3r/GUI/Tab.cpp:3600
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:69 src/slic3r/GUI/Tab.cpp:3928
+#: src/slic3r/GUI/Tab.cpp:4010
 msgid "Layers"
 msgstr "Warstwy"
 
-#: src/slic3r/GUI/Tab.cpp:1048 src/slic3r/GUI/Tab.cpp:3598
+#: src/slic3r/GUI/Tab.cpp:1370 src/slic3r/GUI/Tab.cpp:4008
 msgid "Layers and perimeters"
 msgstr "Warstwy i obrysy"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:95
-#: src/slic3r/GUI/GUI_ObjectList.cpp:613 src/libslic3r/PrintConfig.cpp:72
-#: src/libslic3r/PrintConfig.cpp:175 src/libslic3r/PrintConfig.cpp:184
-#: src/libslic3r/PrintConfig.cpp:408 src/libslic3r/PrintConfig.cpp:470
-#: src/libslic3r/PrintConfig.cpp:478 src/libslic3r/PrintConfig.cpp:890
-#: src/libslic3r/PrintConfig.cpp:1075 src/libslic3r/PrintConfig.cpp:1374
-#: src/libslic3r/PrintConfig.cpp:1441 src/libslic3r/PrintConfig.cpp:1622
-#: src/libslic3r/PrintConfig.cpp:2074 src/libslic3r/PrintConfig.cpp:2133
-#: src/libslic3r/PrintConfig.cpp:2142
+#: src/slic3r/GUI/GUI_ObjectList.cpp:34 src/slic3r/GUI/GUI_ObjectList.cpp:92
+#: src/slic3r/GUI/GUI_ObjectList.cpp:651 src/libslic3r/PrintConfig.cpp:72
+#: src/libslic3r/PrintConfig.cpp:209 src/libslic3r/PrintConfig.cpp:218
+#: src/libslic3r/PrintConfig.cpp:442 src/libslic3r/PrintConfig.cpp:506
+#: src/libslic3r/PrintConfig.cpp:514 src/libslic3r/PrintConfig.cpp:932
+#: src/libslic3r/PrintConfig.cpp:1119 src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1549 src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:2217 src/libslic3r/PrintConfig.cpp:2276
+#: src/libslic3r/PrintConfig.cpp:2285
 msgid "Layers and Perimeters"
 msgstr "Warstwy i Obrysy"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:225
 msgid "Layers Slider"
 msgstr "Suwak warstw"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Bottom"
 msgstr "Spód"
 
-#: src/slic3r/GUI/OptionsGroup.cpp:258
+#: src/slic3r/GUI/OptionsGroup.cpp:293
 msgctxt "Layers"
 msgid "Top"
 msgstr "Góra"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/Preferences.cpp:440
+msgid "Layout Options"
+msgstr "Opcje układu"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:48
+msgid "Leaving Paint-on supports"
+msgstr "Zamykam malowanie podpór"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:47
+msgid "Leaving Seam painting"
+msgstr "Zamykam malowanie szwu"
+
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left"
 msgstr "Lewo"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1363
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1366
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1210
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1213
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Left click"
 msgstr "Lewy przycisk"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:237
-msgid "Left mouse button:"
-msgstr "Lewy przycisk myszki:"
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:46
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:29
+msgid "Left mouse button"
+msgstr "Lewy przycisk myszy"
 
-#: src/slic3r/GUI/MainFrame.cpp:671
+#: src/slic3r/GUI/GLCanvas3D.cpp:233
+msgid "Left mouse button:"
+msgstr "Lewy przycisk myszy:"
+
+#: src/slic3r/GUI/MainFrame.cpp:968 src/slic3r/GUI/MainFrame.cpp:1288
 msgid "Left View"
 msgstr "Widok lewy"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:257
+#: src/slic3r/GUI/GUI_Preview.cpp:339
 msgid "Legend"
 msgstr "Legenda"
 
-#: src/libslic3r/PrintConfig.cpp:1543 src/libslic3r/PrintConfig.cpp:1551
+#: src/slic3r/GUI/GUI_Preview.cpp:1480
+msgid "Legend/Estimated printing time"
+msgstr "Legenda/szacowany czas drukowania"
+
+#: src/libslic3r/PrintConfig.cpp:1651 src/libslic3r/PrintConfig.cpp:1659
 msgid "Length"
 msgstr "Długość"
 
-#: src/libslic3r/PrintConfig.cpp:328
+#: src/libslic3r/PrintConfig.cpp:362
 msgid "Length of the cooling tube to limit space for cooling moves inside it."
 msgstr "Długość rurki chłodzącej ograniczająca ruchy chłodzące do jej zakresu."
 
 #. TRN "Slic3r _is licensed under the_ License"
-#: src/slic3r/GUI/AboutDialog.cpp:129
+#: src/slic3r/GUI/AboutDialog.cpp:141
 msgid "License agreements of all following programs (libraries) are part of application license agreement"
 msgstr "Umowy licencyjne dla wszystkich części programu (bibliotek) są częścią umowy licencyjnej programu"
 
-#: src/libslic3r/PrintConfig.cpp:1561
+#: src/libslic3r/PrintConfig.cpp:1669
 msgid "Lift Z"
 msgstr "Z-hop"
 
-#: src/libslic3r/PrintConfig.cpp:848
+#: src/libslic3r/PrintConfig.cpp:886
 msgid "Line"
 msgstr "Linia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1427
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1558
 msgid "Load"
 msgstr "Załaduj"
 
-#: src/slic3r/GUI/MainFrame.cpp:460
+#: src/slic3r/GUI/MainFrame.cpp:1042
 msgid "Load a model"
 msgstr "Wczytaj model"
 
-#: src/libslic3r/PrintConfig.cpp:3505
+#: src/slic3r/GUI/MainFrame.cpp:1046
+msgid "Load an model saved with imperial units"
+msgstr "Wczytaj model zapisany w jednostkach imperialnych"
+
+#: src/slic3r/GUI/MainFrame.cpp:1058
+msgid "Load an SL1 archive"
+msgstr "Wczytaj archiwum SL1"
+
+#: src/libslic3r/PrintConfig.cpp:3710
 msgid "Load and store settings at the given directory. This is useful for maintaining different profiles or including configurations from a network storage."
 msgstr "Załaduj i przechowuj ustawienia w podanej lokalizacji. Jest to przydatne przy używaniu wielu profili lub konfiguracji z lokalizacji sieciowej."
 
-#: src/libslic3r/PrintConfig.cpp:3489
+#: src/libslic3r/PrintConfig.cpp:3688
 msgid "Load config file"
 msgstr "Wczytaj plik konfiguracyjny"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:120
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
 msgid "Load Config from ini/amf/3mf/gcode and merge"
 msgstr "Wczytaj Konfigurację z ini/amf/3mf/gcode i złącz"
 
-#: src/slic3r/GUI/MainFrame.cpp:467
+#: src/slic3r/GUI/MainFrame.cpp:1058
 msgid "Load configuration from project file"
 msgstr "Wczytaj konfigurację z pliku projektu"
 
-#: src/libslic3r/PrintConfig.cpp:3490
+#: src/libslic3r/PrintConfig.cpp:3689
 msgid "Load configuration from the specified file. It can be used more than once to load options from multiple files."
 msgstr "Wczytaj konfigurację z określonego pliku. Może być użyte więcej niż raz, aby wczytać opcje z wielu plików."
 
-#: src/slic3r/GUI/MainFrame.cpp:464
+#: src/slic3r/GUI/MainFrame.cpp:1055
 msgid "Load exported configuration file"
 msgstr "Wczytaj wyeksportowany plik konfiguracyjny"
 
-#: src/slic3r/GUI/Plater.cpp:1395
-msgid "Load File"
-msgstr "Wczytaj Plik"
-
-#: src/slic3r/GUI/Plater.cpp:1399
-msgid "Load Files"
-msgstr "Wczytaj Pliki"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1879
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2038
 msgid "Load Part"
 msgstr "Wczytaj Element"
 
-#: src/slic3r/GUI/MainFrame.cpp:471
+#: src/slic3r/GUI/MainFrame.cpp:1062
 msgid "Load presets from a bundle"
 msgstr "Wczytaj zestaw ustawień"
 
-#: src/slic3r/GUI/Plater.cpp:4575
+#: src/slic3r/GUI/Plater.cpp:4627
 msgid "Load Project"
 msgstr "Wczytaj Projekt"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:102
+#: src/slic3r/GUI/BedShapeDialog.cpp:243
 msgid "Load shape from STL..."
 msgstr "Wczytaj kształt z STL..."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:182 src/slic3r/GUI/BedShapeDialog.cpp:261
+#: src/slic3r/GUI/BedShapeDialog.cpp:325 src/slic3r/GUI/BedShapeDialog.cpp:405
 msgid "Load..."
 msgstr "Otwórz..."
 
@@ -4071,19 +4696,27 @@ msgstr "Otwórz..."
 msgid "loaded"
 msgstr "załadowano"
 
-#: src/slic3r/GUI/Plater.cpp:2426
+#: src/slic3r/GUI/Plater.cpp:2388
 msgid "Loaded"
 msgstr "Wczytano"
 
-#: src/slic3r/GUI/Plater.cpp:2273
+#: src/slic3r/GUI/Plater.cpp:2216
 msgid "Loading"
 msgstr "Ładowanie"
 
-#: src/slic3r/GUI/GUI_App.cpp:474
+#: src/slic3r/GUI/GUI_App.cpp:797
+msgid "Loading configuration"
+msgstr "Wczytywanie konfiguracji"
+
+#: src/slic3r/GUI/Plater.cpp:2226
+msgid "Loading file"
+msgstr "Wczytywanie pliku"
+
+#: src/slic3r/GUI/GUI_App.cpp:1125
 msgid "Loading of a mode view"
 msgstr "Ładowanie trybu wyświetlania"
 
-#: src/slic3r/GUI/GUI_App.cpp:466
+#: src/slic3r/GUI/GUI_App.cpp:1120
 msgid "Loading of current presets"
 msgstr "Wczytywanie aktualnych zestawów ustawień"
 
@@ -4092,101 +4725,117 @@ msgstr "Wczytywanie aktualnych zestawów ustawień"
 msgid "Loading repaired model"
 msgstr "Ładowanie naprawionego modelu"
 
-#: src/libslic3r/PrintConfig.cpp:607
+#: src/libslic3r/PrintConfig.cpp:643
 msgid "Loading speed"
 msgstr "Prędkość ładowania"
 
-#: src/libslic3r/PrintConfig.cpp:615
+#: src/libslic3r/PrintConfig.cpp:651
 msgid "Loading speed at the start"
 msgstr "Początkowa prędkość ładowania"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:63
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:106
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:69
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:112
 msgid "Local coordinates"
 msgstr "Lokalny układ współrzędnych"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:48
 msgid "Lock supports under new islands"
 msgstr "Zablokuj podpory pod nowymi wyspami"
 
-#: src/slic3r/GUI/Tab.cpp:3252
+#: src/slic3r/GUI/Tab.cpp:3689
 msgid "LOCKED LOCK"
 msgstr "ZAMKNIĘTA KŁÓDKA"
 
-#: src/slic3r/GUI/Tab.cpp:3280
+#: src/slic3r/GUI/Tab.cpp:3717
 msgid "LOCKED LOCK icon indicates that the settings are the same as the system (or default) values for the current option group"
 msgstr "ZAMKNIĘTA KŁÓDKA oznacza, że ustawienia są takie same jak wartości systemowe (lub domyślne) w obecnej grupie ustawień"
 
-#: src/slic3r/GUI/Tab.cpp:3296
+#: src/slic3r/GUI/Tab.cpp:3733
 msgid "LOCKED LOCK icon indicates that the value is the same as the system (or default) value."
 msgstr "ZAMKNIĘTA KŁÓDKA oznacza, że wartości są takie same jak systemowe (lub domyślne)."
 
-#: src/libslic3r/PrintConfig.cpp:3508
+#: src/libslic3r/PrintConfig.cpp:3713
 msgid "Logging level"
 msgstr "Poziom logowania"
 
-#: src/libslic3r/PrintConfig.cpp:1695
+#: src/libslic3r/PrintConfig.cpp:1810
 msgid "Loops (minimum)"
 msgstr "Pętle (minimum)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
 msgid "Lower Layer"
 msgstr "Dolna Warstwa"
 
-#: src/slic3r/GUI/Tab.cpp:2188 src/slic3r/GUI/Tab.cpp:2273
-#: src/libslic3r/PrintConfig.cpp:1129 src/libslic3r/PrintConfig.cpp:1146
-#: src/libslic3r/PrintConfig.cpp:1163 src/libslic3r/PrintConfig.cpp:1179
-#: src/libslic3r/PrintConfig.cpp:1189 src/libslic3r/PrintConfig.cpp:1199
-#: src/libslic3r/PrintConfig.cpp:1209
+#: src/slic3r/GUI/Tab.cpp:2346 src/slic3r/GUI/Tab.cpp:2442
+#: src/libslic3r/PrintConfig.cpp:1202 src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1254 src/libslic3r/PrintConfig.cpp:1271
+#: src/libslic3r/PrintConfig.cpp:1287 src/libslic3r/PrintConfig.cpp:1297
+#: src/libslic3r/PrintConfig.cpp:1307 src/libslic3r/PrintConfig.cpp:1317
 msgid "Machine limits"
 msgstr "Limity maszynowe"
 
-#: src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:3667
+msgid "Machine limits are not set, therefore the print time estimate may not be accurate."
+msgstr "Limity maszynowe nie zostały ustawione, dlatego szacowany czas druku może odbiegać od rzeczywistości."
+
+#: src/slic3r/GUI/Tab.cpp:3660
+msgid "Machine limits will be emitted to G-code and used to estimate print time."
+msgstr "Limity maszynowe zostaną przekazane do G-code i użyte do obliczenia czasu drukowania."
+
+#: src/slic3r/GUI/Tab.cpp:3663
+msgid "Machine limits will NOT be emitted to G-code, however they will be used to estimate print time, which may therefore not be accurate as the printer may apply a different set of machine limits."
+msgstr "Limity maszynowe NIE będą przekazywane do G-code, jednak zostaną użyte do obliczenia czasu drukowania, który może okazać się niedokładny, ponieważ drukarka może zastosować inne."
+
+#: src/slic3r/GUI/Plater.cpp:172
 msgid "Manifold"
 msgstr "Model zamknięty"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:57
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:56
 msgid "Manual editing"
 msgstr "Edycja ręczna"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:180
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:214
 msgid "Masked SLA file exported to %1%"
 msgstr "Maskowany plik SLA wyeksportowany do %1%"
 
-#: src/slic3r/GUI/MainFrame.cpp:752
+#: src/slic3r/GUI/MainFrame.cpp:1451
 msgid "Mate&rial Settings Tab"
-msgstr "Ustawienia Mate&riału"
+msgstr "Ustawienia mate&riału"
 
-#: src/slic3r/GUI/Tab.cpp:3478 src/slic3r/GUI/Tab.cpp:3480
+#: src/slic3r/GUI/Tab.cpp:3894 src/slic3r/GUI/Tab.cpp:3896
 msgid "Material"
 msgstr "Materiał"
 
-#: src/slic3r/GUI/Tab.hpp:416
+#: src/slic3r/GUI/Tab.hpp:486
 msgid "Material Settings"
-msgstr "Ustawienia Materiału"
+msgstr "Ustawienia materiału"
 
-#: src/slic3r/GUI/Plater.cpp:163
+#: src/slic3r/GUI/GLCanvas3D.cpp:4304 src/slic3r/GUI/GLCanvas3D.cpp:4940
+msgid "Material Settings Tab"
+msgstr "Ustawienia materiału"
+
+#: src/slic3r/GUI/Plater.cpp:169
 msgid "Materials"
 msgstr "Materiały"
 
-#: src/libslic3r/PrintConfig.cpp:1217 src/libslic3r/PrintConfig.cpp:1226
+#: src/libslic3r/PrintConfig.cpp:1325 src/libslic3r/PrintConfig.cpp:1334
 msgid "Max"
 msgstr "Max"
 
-#: src/libslic3r/PrintConfig.cpp:2734
+#: src/libslic3r/PrintConfig.cpp:2898
 msgid "Max bridge length"
 msgstr "Maksymalna długość mostu"
 
-#: src/libslic3r/PrintConfig.cpp:2658
+#: src/libslic3r/PrintConfig.cpp:2812
 msgid "Max bridges on a pillar"
 msgstr "Maks. liczba mostków na słupku"
 
-#: src/libslic3r/PrintConfig.cpp:2822
+#: src/libslic3r/PrintConfig.cpp:2986
 msgid "Max merge distance"
 msgstr "Maksymalny dystans łączenia"
 
-#: src/libslic3r/PrintConfig.cpp:2743
+#: src/libslic3r/PrintConfig.cpp:2907
 msgid "Max pillar linking distance"
 msgstr "Maksymalny dystans łączenia słupków"
 
@@ -4194,7 +4843,7 @@ msgstr "Maksymalny dystans łączenia słupków"
 msgid "Max print height"
 msgstr "Maksymalna wysokość wydruku"
 
-#: src/libslic3r/PrintConfig.cpp:1237
+#: src/libslic3r/PrintConfig.cpp:1345
 msgid "Max print speed"
 msgstr "Maksymalna prędkość druku"
 
@@ -4202,171 +4851,189 @@ msgstr "Maksymalna prędkość druku"
 msgid "max PrusaSlicer version"
 msgstr "max wersja PrusaSlicer"
 
-#: src/libslic3r/PrintConfig.cpp:1268
+#: src/libslic3r/PrintConfig.cpp:1376
 msgid "Max volumetric slope negative"
 msgstr "Maksymalny negatywny kąt zwisu"
 
-#: src/libslic3r/PrintConfig.cpp:1257
+#: src/libslic3r/PrintConfig.cpp:1365
 msgid "Max volumetric slope positive"
-msgstr "Maksymalny objętościowo kąt pozytywny"
+msgstr "Pozytywna krzywa natężenia przepływu"
 
-#: src/libslic3r/PrintConfig.cpp:597 src/libslic3r/PrintConfig.cpp:1247
+#: src/libslic3r/PrintConfig.cpp:633 src/libslic3r/PrintConfig.cpp:1355
 msgid "Max volumetric speed"
 msgstr "Maksymalny przepływ"
 
-#: src/libslic3r/PrintConfig.cpp:2268
+#: src/libslic3r/PrintConfig.cpp:2411
 msgid "Maximal bridging distance"
 msgstr "Maksymalna odległość drukowania mostów"
 
-#: src/libslic3r/PrintConfig.cpp:2269
+#: src/libslic3r/PrintConfig.cpp:2412
 msgid "Maximal distance between supports on sparse infill sections."
 msgstr "Minimalny odstęp pomiędzy podporami w sekcjach rzadkiego wypełnienia."
 
-#: src/libslic3r/PrintConfig.cpp:1145
+#: src/libslic3r/PrintConfig.cpp:1253
 msgid "Maximum acceleration E"
 msgstr "Maksymalne przyspieszenie E"
 
-#: src/libslic3r/PrintConfig.cpp:1151
+#: src/libslic3r/PrintConfig.cpp:1259
 msgid "Maximum acceleration of the E axis"
 msgstr "Maksymalne przyspieszenie osi E (ekstrudera)"
 
-#: src/libslic3r/PrintConfig.cpp:1148
+#: src/libslic3r/PrintConfig.cpp:1256
 msgid "Maximum acceleration of the X axis"
 msgstr "Maksymalne przyspieszenie osi X"
 
-#: src/libslic3r/PrintConfig.cpp:1149
+#: src/libslic3r/PrintConfig.cpp:1257
 msgid "Maximum acceleration of the Y axis"
 msgstr "Maksymalne przyspieszenie osi Y"
 
-#: src/libslic3r/PrintConfig.cpp:1150
+#: src/libslic3r/PrintConfig.cpp:1258
 msgid "Maximum acceleration of the Z axis"
 msgstr "Maksymalne przyspieszenie osi Z"
 
-#: src/libslic3r/PrintConfig.cpp:1198
+#: src/libslic3r/PrintConfig.cpp:1306
 msgid "Maximum acceleration when extruding"
 msgstr "Maksymalne przyspieszenie podczas ekstruzji"
 
-#: src/libslic3r/PrintConfig.cpp:1200
+#: src/libslic3r/PrintConfig.cpp:1308
 msgid "Maximum acceleration when extruding (M204 S)"
 msgstr "Maksymalne przyspieszenie podczas ekstrudowania (M204 S)"
 
-#: src/libslic3r/PrintConfig.cpp:1208
+#: src/libslic3r/PrintConfig.cpp:1316
 msgid "Maximum acceleration when retracting"
 msgstr "Maksymalne przyspieszenie podczas retrakcji"
 
-#: src/libslic3r/PrintConfig.cpp:1210
+#: src/libslic3r/PrintConfig.cpp:1318
 msgid "Maximum acceleration when retracting (M204 T)"
 msgstr "Maksymalne przyspieszenie podczas retrakcji (M204 T)"
 
-#: src/libslic3r/PrintConfig.cpp:1142
+#: src/libslic3r/PrintConfig.cpp:1250
 msgid "Maximum acceleration X"
 msgstr "Maksymalne przyspieszenie X"
 
-#: src/libslic3r/PrintConfig.cpp:1143
+#: src/libslic3r/PrintConfig.cpp:1251
 msgid "Maximum acceleration Y"
 msgstr "Maksymalne przyspieszenie Y"
 
-#: src/libslic3r/PrintConfig.cpp:1144
+#: src/libslic3r/PrintConfig.cpp:1252
 msgid "Maximum acceleration Z"
 msgstr "Maksymalne przyspieszenie Z"
 
-#: src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2391
 msgid "Maximum accelerations"
 msgstr "Maksymalne przyspieszenia"
 
-#: src/libslic3r/PrintConfig.cpp:2533 src/libslic3r/PrintConfig.cpp:2534
+#: src/libslic3r/PrintConfig.cpp:2676 src/libslic3r/PrintConfig.cpp:2677
 msgid "Maximum exposure time"
 msgstr "Maksymalny czas naświetlania"
 
-#: src/libslic3r/PrintConfig.cpp:1128
+#: src/libslic3r/PrintConfig.cpp:1236
 msgid "Maximum feedrate E"
 msgstr "Maksymalny posuw E"
 
-#: src/libslic3r/PrintConfig.cpp:1134
+#: src/libslic3r/PrintConfig.cpp:1242
 msgid "Maximum feedrate of the E axis"
 msgstr "Maksymalny posuw (prędkość ruchu) osi E (ekstrudera)"
 
-#: src/libslic3r/PrintConfig.cpp:1131
+#: src/libslic3r/PrintConfig.cpp:1239
 msgid "Maximum feedrate of the X axis"
 msgstr "Maksymalny posuw (prędkość ruchu) osi X"
 
-#: src/libslic3r/PrintConfig.cpp:1132
+#: src/libslic3r/PrintConfig.cpp:1240
 msgid "Maximum feedrate of the Y axis"
 msgstr "Maksymalny posuw (prędkość ruchu) osi Y"
 
-#: src/libslic3r/PrintConfig.cpp:1133
+#: src/libslic3r/PrintConfig.cpp:1241
 msgid "Maximum feedrate of the Z axis"
 msgstr "Maksymalny posuw (prędkość ruchu) osi Z"
 
-#: src/libslic3r/PrintConfig.cpp:1125
+#: src/libslic3r/PrintConfig.cpp:1233
 msgid "Maximum feedrate X"
 msgstr "Maksymalny posuw osi X"
 
-#: src/libslic3r/PrintConfig.cpp:1126
+#: src/libslic3r/PrintConfig.cpp:1234
 msgid "Maximum feedrate Y"
 msgstr "Maksymalny posuw Y"
 
-#: src/libslic3r/PrintConfig.cpp:1127
+#: src/libslic3r/PrintConfig.cpp:1235
 msgid "Maximum feedrate Z"
 msgstr "Maksymalny posuw Z"
 
-#: src/slic3r/GUI/Tab.cpp:2217
+#: src/slic3r/GUI/Tab.cpp:2386
 msgid "Maximum feedrates"
 msgstr "Maksymalne prędkości posuwu"
 
-#: src/libslic3r/PrintConfig.cpp:2556 src/libslic3r/PrintConfig.cpp:2557
+#: src/libslic3r/PrintConfig.cpp:2699 src/libslic3r/PrintConfig.cpp:2700
 msgid "Maximum initial exposure time"
 msgstr "Maksymalny początkowy czas naświetlania"
 
-#: src/libslic3r/PrintConfig.cpp:1162
+#: src/libslic3r/PrintConfig.cpp:1270
 msgid "Maximum jerk E"
 msgstr "Maksymalny jerk E"
 
-#: src/libslic3r/PrintConfig.cpp:1168
+#: src/libslic3r/PrintConfig.cpp:1276
 msgid "Maximum jerk of the E axis"
 msgstr "Maksymalny jerk dla osi E (ekstrudera)"
 
-#: src/libslic3r/PrintConfig.cpp:1165
+#: src/libslic3r/PrintConfig.cpp:1273
 msgid "Maximum jerk of the X axis"
 msgstr "Maksymalny jerk osi X"
 
-#: src/libslic3r/PrintConfig.cpp:1166
+#: src/libslic3r/PrintConfig.cpp:1274
 msgid "Maximum jerk of the Y axis"
 msgstr "Maksymalny jerk osi Y"
 
-#: src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1275
 msgid "Maximum jerk of the Z axis"
 msgstr "Maksymalny jerk dla osi Z"
 
-#: src/libslic3r/PrintConfig.cpp:1159
+#: src/libslic3r/PrintConfig.cpp:1267
 msgid "Maximum jerk X"
 msgstr "Maksymalny jerk X"
 
-#: src/libslic3r/PrintConfig.cpp:1160
+#: src/libslic3r/PrintConfig.cpp:1268
 msgid "Maximum jerk Y"
 msgstr "Maksymalny jerk Y"
 
-#: src/libslic3r/PrintConfig.cpp:1161
+#: src/libslic3r/PrintConfig.cpp:1269
 msgid "Maximum jerk Z"
 msgstr "Maksymalny jerk Z"
 
-#: src/libslic3r/PrintConfig.cpp:2660
+#: src/libslic3r/PrintConfig.cpp:2814
 msgid "Maximum number of bridges that can be placed on a pillar. Bridges hold support point pinheads and connect to pillars as small branches."
 msgstr "Maksymalna liczba mostków, która zostanie umieszczona na słupku podpory. Mostki wspierają łączniki podpór i łączą słupki podpór."
 
-#: src/libslic3r/PrintConfig.cpp:598
+#: src/libslic3r/PrintConfig.cpp:634
 msgid "Maximum volumetric speed allowed for this filament. Limits the maximum volumetric speed of a print to the minimum of print and filament volumetric speed. Set to zero for no limit."
-msgstr "Maksymalna prędkość objętościowa dla tego filamentu.  Ogranicza maksymalną prędkość objętościową do minimum objętościowej prędkości druku i filamentu. Ustaw zero aby usunąć ograniczenie."
+msgstr "Maksymalne objętościowe natężenie przepływu dla tego filamentu.  Ogranicza maksymalne natężenie przepływu do minimum objętościowej prędkości druku i filamentu. Ustaw zero aby usunąć ograniczenie."
 
-#: src/libslic3r/PrintConfig.cpp:3442
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2569 src/libslic3r/PrintConfig.cpp:3641
 msgid "Merge"
 msgstr "Łączenie"
 
-#: src/libslic3r/PrintConfig.cpp:2683
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2660
+msgid "Merge all parts to the one single object"
+msgstr "Scal wszystkie części w jeden model"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1868
+msgid "Merge objects to the one multipart object"
+msgstr "Scal modele w jeden model wieloczęściowy"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1876
+msgid "Merge objects to the one single object"
+msgstr "Scal modele w jeden model pojedynczy"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2576
+msgid "Merged"
+msgstr "Scalono"
+
+#: src/libslic3r/PrintConfig.cpp:2847
 msgid "Merging bridges or pillars into another pillars can increase the radius. Zero means no increase, one means full increase."
 msgstr "Łączenie mostów lub słupków podpór z innymi może zwiększyć ich promień. 0 oznacza brak zmiany, 1 oznacza zmianę w całości."
 
-#: src/libslic3r/SLAPrintSteps.cpp:64
+#: src/libslic3r/SLAPrintSteps.cpp:65
 msgid "Merging slices and calculating statistics"
 msgstr "Łączenie cięć i obliczanie statystyk"
 
@@ -4374,15 +5041,15 @@ msgstr "Łączenie cięć i obliczanie statystyk"
 msgid "Mesh repair failed."
 msgstr "Niepowodzenie naprawy siatki."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1635
+#: src/slic3r/GUI/DoubleSlider.cpp:1831
 msgid "Message for pause print on current layer (%1% mm)."
 msgstr "Komenda pauzująca wydruk na danej warstwie (%1% mm)."
 
-#: src/libslic3r/PrintConfig.cpp:1280 src/libslic3r/PrintConfig.cpp:1289
+#: src/libslic3r/PrintConfig.cpp:1388 src/libslic3r/PrintConfig.cpp:1397
 msgid "Min"
 msgstr "Min"
 
-#: src/libslic3r/PrintConfig.cpp:1298
+#: src/libslic3r/PrintConfig.cpp:1406
 msgid "Min print speed"
 msgstr "Minimalna prędkość druku"
 
@@ -4390,232 +5057,237 @@ msgstr "Minimalna prędkość druku"
 msgid "min PrusaSlicer version"
 msgstr "min wersja PrusaSlicer"
 
-#: src/libslic3r/PrintConfig.cpp:2772
+#: src/libslic3r/PrintConfig.cpp:2936
 msgid "Minimal distance of the support points"
 msgstr "Minimalne rozmieszczenie punktów podpór"
 
-#: src/libslic3r/PrintConfig.cpp:1306
+#: src/libslic3r/PrintConfig.cpp:1414
 msgid "Minimal filament extrusion length"
 msgstr "Minimalna długość ekstruzji"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:53
 msgid "Minimal points distance"
 msgstr "Minimalny dystans pomiędzy punktami"
 
-#: src/libslic3r/PrintConfig.cpp:667
+#: src/libslic3r/PrintConfig.cpp:703
 msgid "Minimal purge on wipe tower"
 msgstr "Minimalna objętość czyszczenia"
 
-#: src/libslic3r/PrintConfig.cpp:187
+#: src/libslic3r/PrintConfig.cpp:221
 msgid "Minimum bottom shell thickness"
 msgstr "Minimalna grubość dolnej powłoki"
 
-#: src/slic3r/GUI/PresetHints.cpp:339
+#: src/slic3r/GUI/PresetHints.cpp:337
 msgid "Minimum bottom shell thickness is %1% mm."
 msgstr "Minimalna grubość dolnej powłoki to %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1512
+#: src/libslic3r/PrintConfig.cpp:1620
 msgid "Minimum detail resolution, used to simplify the input file for speeding up the slicing job and reducing memory usage. High-resolution models often carry more detail than printers can render. Set to zero to disable any simplification and use full resolution from input."
-msgstr "Minimalna rozdzielczość, używana do uproszczenia modelu wejściowego, co prowadzi do przyspieszenia procesu cięcia. Modele w wysokiej rozdzielczości mogą zawierać więcej szczegółów niż drukarka jest w stanie przetworzyć. Ustaw zero aby wyłączyć upraszczanie i użyć pełnej rozdzielczości pliku wejściowego."
+msgstr "Minimalna rozdzielczość, używana do uproszczenia modelu wejściowego, co prowadzi do przyspieszenia procesu cięcia. Modele w wysokiej rozdzielczości mogą zawierać więcej szczegółów niż drukarka jest w stanie przetworzyć. Ustaw zero, aby wyłączyć upraszczanie i użyć pełnej rozdzielczości pliku wejściowego."
 
-#: src/libslic3r/PrintConfig.cpp:2525 src/libslic3r/PrintConfig.cpp:2526
+#: src/libslic3r/PrintConfig.cpp:2668 src/libslic3r/PrintConfig.cpp:2669
 msgid "Minimum exposure time"
 msgstr "Minimalny czas naświetlania"
 
-#: src/libslic3r/PrintConfig.cpp:1178
+#: src/libslic3r/PrintConfig.cpp:1286
 msgid "Minimum feedrate when extruding"
 msgstr "Minimalna prędkość posuwu z ekstruzją"
 
-#: src/libslic3r/PrintConfig.cpp:1180
+#: src/libslic3r/PrintConfig.cpp:1288
 msgid "Minimum feedrate when extruding (M205 S)"
 msgstr "Minimalna prędkość posuwu z ekstruzją (M205 S)"
 
-#: src/slic3r/GUI/Tab.cpp:2234
+#: src/slic3r/GUI/Tab.cpp:2403
 msgid "Minimum feedrates"
 msgstr "Minimalna prędkość posuwu"
 
-#: src/libslic3r/PrintConfig.cpp:2548 src/libslic3r/PrintConfig.cpp:2549
+#: src/libslic3r/PrintConfig.cpp:2691 src/libslic3r/PrintConfig.cpp:2692
 msgid "Minimum initial exposure time"
 msgstr "Minimalny początkowy czas naświetlania"
 
-#: src/slic3r/GUI/Tab.cpp:1069
+#: src/slic3r/GUI/Tab.cpp:1391
 msgid "Minimum shell thickness"
 msgstr "Minimalna grubość powłoki"
 
-#: src/libslic3r/PrintConfig.cpp:1787 src/libslic3r/PrintConfig.cpp:1788
+#: src/libslic3r/PrintConfig.cpp:1902 src/libslic3r/PrintConfig.cpp:1903
 msgid "Minimum thickness of a top / bottom shell"
 msgstr "Minimalna grubość górnej/dolnej powłoki"
 
-#: src/libslic3r/PrintConfig.cpp:2146
+#: src/libslic3r/PrintConfig.cpp:2289
 msgid "Minimum top shell thickness"
 msgstr "Minimalna grubość górnej powłoki"
 
-#: src/slic3r/GUI/PresetHints.cpp:320
+#: src/slic3r/GUI/PresetHints.cpp:318
 msgid "Minimum top shell thickness is %1% mm."
 msgstr "Minimalna grubość górnej powłoki to %1% mm."
 
-#: src/libslic3r/PrintConfig.cpp:1522
+#: src/libslic3r/PrintConfig.cpp:1630
 msgid "Minimum travel after retraction"
 msgstr "Minimalny ruch jałowy po retrakcji"
 
-#: src/libslic3r/PrintConfig.cpp:1188
+#: src/libslic3r/PrintConfig.cpp:1296
 msgid "Minimum travel feedrate"
 msgstr "Minimalna prędkość posuwu ruchu jałowego"
 
-#: src/libslic3r/PrintConfig.cpp:1190
+#: src/libslic3r/PrintConfig.cpp:1298
 msgid "Minimum travel feedrate (M205 T)"
 msgstr "Minimalna prędkość posuwu ruchu jałowego (M205 T)"
 
-#: src/libslic3r/PrintConfig.cpp:2917
+#: src/libslic3r/PrintConfig.cpp:3081
 msgid "Minimum wall thickness of a hollowed model."
 msgstr "Minimalna grubość ścianki drążonego modelu."
 
-#: src/libslic3r/PrintConfig.cpp:2449
+#: src/libslic3r/PrintConfig.cpp:2592
 msgid "Minimum width of features to maintain when doing elephant foot compensation."
 msgstr "Minimalna szerokość detali do zachowania podczas kompensacji stopy słonia."
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror"
 msgstr "Lustrzane"
 
-#: src/libslic3r/PrintConfig.cpp:2379
+#: src/libslic3r/PrintConfig.cpp:2522
 msgid "Mirror horizontally"
 msgstr "Odbij w poziomie"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:2053
+#: src/slic3r/GUI/GLCanvas3D.cpp:2226
 msgid "Mirror Object"
 msgstr "Odbicie Lustrzane"
 
-#: src/slic3r/GUI/Plater.cpp:4002
+#: src/slic3r/GUI/Plater.cpp:3922
 msgid "Mirror the selected object"
 msgstr "Odbicie lustrzane wybranego modelu"
 
-#: src/slic3r/GUI/Plater.cpp:3995
+#: src/slic3r/GUI/Plater.cpp:3915
 msgid "Mirror the selected object along the X axis"
 msgstr "Odbicie lustrzane wybranego modelu w osi X"
 
-#: src/slic3r/GUI/Plater.cpp:3997
+#: src/slic3r/GUI/Plater.cpp:3917
 msgid "Mirror the selected object along the Y axis"
 msgstr "Odbicie lustrzane wybranego modelu w osi Y"
 
-#: src/slic3r/GUI/Plater.cpp:3999
+#: src/slic3r/GUI/Plater.cpp:3919
 msgid "Mirror the selected object along the Z axis"
 msgstr "Odbicie lustrzane wybranego modelu w osi Z"
 
-#: src/libslic3r/PrintConfig.cpp:2386
+#: src/libslic3r/PrintConfig.cpp:2529
 msgid "Mirror vertically"
 msgstr "Odbij w poziomie"
 
-#: src/slic3r/Utils/AstroBox.cpp:68 src/slic3r/Utils/OctoPrint.cpp:68
+#: src/slic3r/Utils/AstroBox.cpp:69 src/slic3r/Utils/OctoPrint.cpp:68
 #, c-format
 msgid "Mismatched type of print host: %s"
 msgstr "Niepasujący typ serwera wydruku: %s"
 
-#: src/libslic3r/ExtrusionEntity.cpp:323
+#: src/libslic3r/ExtrusionEntity.cpp:328 src/libslic3r/ExtrusionEntity.cpp:364
 msgid "Mixed"
 msgstr "Mieszane"
 
-#: src/libslic3r/PrintConfig.cpp:2491
+#: src/libslic3r/PrintConfig.cpp:2634
 msgid "ml"
 msgstr "ml"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:92 src/slic3r/GUI/ConfigWizard.cpp:218
-#: src/slic3r/GUI/ConfigWizard.cpp:970 src/slic3r/GUI/ConfigWizard.cpp:984
+#: src/slic3r/GUI/BedShapeDialog.cpp:129 src/slic3r/GUI/ConfigWizard.cpp:236
+#: src/slic3r/GUI/ConfigWizard.cpp:1336 src/slic3r/GUI/ConfigWizard.cpp:1350
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:87
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:135
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:333
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/GCodeViewer.cpp:2183 src/slic3r/GUI/GCodeViewer.cpp:2189
+#: src/slic3r/GUI/GCodeViewer.cpp:2197 src/slic3r/GUI/GUI_ObjectLayers.cpp:145
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:341
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:418
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:486
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:487
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 #: src/slic3r/GUI/WipeTowerDialog.cpp:85 src/libslic3r/PrintConfig.cpp:75
-#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:91
-#: src/libslic3r/PrintConfig.cpp:122 src/libslic3r/PrintConfig.cpp:188
-#: src/libslic3r/PrintConfig.cpp:246 src/libslic3r/PrintConfig.cpp:321
-#: src/libslic3r/PrintConfig.cpp:329 src/libslic3r/PrintConfig.cpp:379
-#: src/libslic3r/PrintConfig.cpp:505 src/libslic3r/PrintConfig.cpp:516
-#: src/libslic3r/PrintConfig.cpp:534 src/libslic3r/PrintConfig.cpp:712
-#: src/libslic3r/PrintConfig.cpp:1231 src/libslic3r/PrintConfig.cpp:1292
-#: src/libslic3r/PrintConfig.cpp:1310 src/libslic3r/PrintConfig.cpp:1328
-#: src/libslic3r/PrintConfig.cpp:1384 src/libslic3r/PrintConfig.cpp:1394
-#: src/libslic3r/PrintConfig.cpp:1516 src/libslic3r/PrintConfig.cpp:1524
-#: src/libslic3r/PrintConfig.cpp:1565 src/libslic3r/PrintConfig.cpp:1573
-#: src/libslic3r/PrintConfig.cpp:1583 src/libslic3r/PrintConfig.cpp:1591
-#: src/libslic3r/PrintConfig.cpp:1599 src/libslic3r/PrintConfig.cpp:1682
-#: src/libslic3r/PrintConfig.cpp:1914 src/libslic3r/PrintConfig.cpp:1985
-#: src/libslic3r/PrintConfig.cpp:2019 src/libslic3r/PrintConfig.cpp:2147
-#: src/libslic3r/PrintConfig.cpp:2226 src/libslic3r/PrintConfig.cpp:2233
-#: src/libslic3r/PrintConfig.cpp:2240 src/libslic3r/PrintConfig.cpp:2270
-#: src/libslic3r/PrintConfig.cpp:2280 src/libslic3r/PrintConfig.cpp:2290
-#: src/libslic3r/PrintConfig.cpp:2450 src/libslic3r/PrintConfig.cpp:2484
-#: src/libslic3r/PrintConfig.cpp:2623 src/libslic3r/PrintConfig.cpp:2632
-#: src/libslic3r/PrintConfig.cpp:2641 src/libslic3r/PrintConfig.cpp:2651
-#: src/libslic3r/PrintConfig.cpp:2695 src/libslic3r/PrintConfig.cpp:2705
-#: src/libslic3r/PrintConfig.cpp:2717 src/libslic3r/PrintConfig.cpp:2737
-#: src/libslic3r/PrintConfig.cpp:2747 src/libslic3r/PrintConfig.cpp:2757
-#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2790
-#: src/libslic3r/PrintConfig.cpp:2804 src/libslic3r/PrintConfig.cpp:2815
-#: src/libslic3r/PrintConfig.cpp:2828 src/libslic3r/PrintConfig.cpp:2873
-#: src/libslic3r/PrintConfig.cpp:2883 src/libslic3r/PrintConfig.cpp:2892
-#: src/libslic3r/PrintConfig.cpp:2902 src/libslic3r/PrintConfig.cpp:2918
-#: src/libslic3r/PrintConfig.cpp:2942
+#: src/libslic3r/PrintConfig.cpp:82 src/libslic3r/PrintConfig.cpp:93
+#: src/libslic3r/PrintConfig.cpp:124 src/libslic3r/PrintConfig.cpp:222
+#: src/libslic3r/PrintConfig.cpp:280 src/libslic3r/PrintConfig.cpp:355
+#: src/libslic3r/PrintConfig.cpp:363 src/libslic3r/PrintConfig.cpp:413
+#: src/libslic3r/PrintConfig.cpp:541 src/libslic3r/PrintConfig.cpp:552
+#: src/libslic3r/PrintConfig.cpp:570 src/libslic3r/PrintConfig.cpp:748
+#: src/libslic3r/PrintConfig.cpp:1158 src/libslic3r/PrintConfig.cpp:1339
+#: src/libslic3r/PrintConfig.cpp:1400 src/libslic3r/PrintConfig.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:1436 src/libslic3r/PrintConfig.cpp:1492
+#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1624
+#: src/libslic3r/PrintConfig.cpp:1632 src/libslic3r/PrintConfig.cpp:1673
+#: src/libslic3r/PrintConfig.cpp:1681 src/libslic3r/PrintConfig.cpp:1691
+#: src/libslic3r/PrintConfig.cpp:1699 src/libslic3r/PrintConfig.cpp:1707
+#: src/libslic3r/PrintConfig.cpp:1790 src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2127 src/libslic3r/PrintConfig.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:2290 src/libslic3r/PrintConfig.cpp:2369
+#: src/libslic3r/PrintConfig.cpp:2376 src/libslic3r/PrintConfig.cpp:2383
+#: src/libslic3r/PrintConfig.cpp:2413 src/libslic3r/PrintConfig.cpp:2423
+#: src/libslic3r/PrintConfig.cpp:2433 src/libslic3r/PrintConfig.cpp:2593
+#: src/libslic3r/PrintConfig.cpp:2627 src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2775 src/libslic3r/PrintConfig.cpp:2784
+#: src/libslic3r/PrintConfig.cpp:2794 src/libslic3r/PrintConfig.cpp:2859
+#: src/libslic3r/PrintConfig.cpp:2869 src/libslic3r/PrintConfig.cpp:2881
+#: src/libslic3r/PrintConfig.cpp:2901 src/libslic3r/PrintConfig.cpp:2911
+#: src/libslic3r/PrintConfig.cpp:2921 src/libslic3r/PrintConfig.cpp:2939
+#: src/libslic3r/PrintConfig.cpp:2954 src/libslic3r/PrintConfig.cpp:2968
+#: src/libslic3r/PrintConfig.cpp:2979 src/libslic3r/PrintConfig.cpp:2992
+#: src/libslic3r/PrintConfig.cpp:3037 src/libslic3r/PrintConfig.cpp:3047
+#: src/libslic3r/PrintConfig.cpp:3056 src/libslic3r/PrintConfig.cpp:3066
+#: src/libslic3r/PrintConfig.cpp:3082 src/libslic3r/PrintConfig.cpp:3106
 msgid "mm"
 msgstr "mm"
 
-#: src/libslic3r/PrintConfig.cpp:1547 src/libslic3r/PrintConfig.cpp:1556
+#: src/libslic3r/PrintConfig.cpp:1655 src/libslic3r/PrintConfig.cpp:1664
 msgid "mm (zero to disable)"
-msgstr "mm (zero aby wyłączyć)"
+msgstr "mm (zero, aby wyłączyć)"
 
-#: src/libslic3r/PrintConfig.cpp:451 src/libslic3r/PrintConfig.cpp:560
-#: src/libslic3r/PrintConfig.cpp:882 src/libslic3r/PrintConfig.cpp:895
-#: src/libslic3r/PrintConfig.cpp:1015 src/libslic3r/PrintConfig.cpp:1041
-#: src/libslic3r/PrintConfig.cpp:1423 src/libslic3r/PrintConfig.cpp:1761
-#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:1951
-#: src/libslic3r/PrintConfig.cpp:2111
+#: src/libslic3r/PrintConfig.cpp:487 src/libslic3r/PrintConfig.cpp:596
+#: src/libslic3r/PrintConfig.cpp:924 src/libslic3r/PrintConfig.cpp:937
+#: src/libslic3r/PrintConfig.cpp:1059 src/libslic3r/PrintConfig.cpp:1085
+#: src/libslic3r/PrintConfig.cpp:1531 src/libslic3r/PrintConfig.cpp:1876
+#: src/libslic3r/PrintConfig.cpp:2025 src/libslic3r/PrintConfig.cpp:2093
+#: src/libslic3r/PrintConfig.cpp:2254
 msgid "mm or %"
 msgstr "mm lub %"
 
-#: src/libslic3r/PrintConfig.cpp:237 src/libslic3r/PrintConfig.cpp:609
-#: src/libslic3r/PrintConfig.cpp:617 src/libslic3r/PrintConfig.cpp:626
-#: src/libslic3r/PrintConfig.cpp:634 src/libslic3r/PrintConfig.cpp:661
-#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:922
-#: src/libslic3r/PrintConfig.cpp:1050 src/libslic3r/PrintConfig.cpp:1135
-#: src/libslic3r/PrintConfig.cpp:1169 src/libslic3r/PrintConfig.cpp:1181
-#: src/libslic3r/PrintConfig.cpp:1191 src/libslic3r/PrintConfig.cpp:1241
-#: src/libslic3r/PrintConfig.cpp:1300 src/libslic3r/PrintConfig.cpp:1433
-#: src/libslic3r/PrintConfig.cpp:1607 src/libslic3r/PrintConfig.cpp:1616
-#: src/libslic3r/PrintConfig.cpp:2028 src/libslic3r/PrintConfig.cpp:2154
+#: src/libslic3r/PrintConfig.cpp:271 src/libslic3r/PrintConfig.cpp:645
+#: src/libslic3r/PrintConfig.cpp:653 src/libslic3r/PrintConfig.cpp:662
+#: src/libslic3r/PrintConfig.cpp:670 src/libslic3r/PrintConfig.cpp:697
+#: src/libslic3r/PrintConfig.cpp:716 src/libslic3r/PrintConfig.cpp:966
+#: src/libslic3r/PrintConfig.cpp:1094 src/libslic3r/PrintConfig.cpp:1167
+#: src/libslic3r/PrintConfig.cpp:1243 src/libslic3r/PrintConfig.cpp:1277
+#: src/libslic3r/PrintConfig.cpp:1289 src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1349 src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1541 src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1724 src/libslic3r/PrintConfig.cpp:2170
+#: src/libslic3r/PrintConfig.cpp:2297
 msgid "mm/s"
 msgstr "mm/s"
 
-#: src/libslic3r/PrintConfig.cpp:462 src/libslic3r/PrintConfig.cpp:904
-#: src/libslic3r/PrintConfig.cpp:1720 src/libslic3r/PrintConfig.cpp:1772
-#: src/libslic3r/PrintConfig.cpp:1995 src/libslic3r/PrintConfig.cpp:2124
+#: src/libslic3r/PrintConfig.cpp:498 src/libslic3r/PrintConfig.cpp:946
+#: src/libslic3r/PrintConfig.cpp:1835 src/libslic3r/PrintConfig.cpp:1887
+#: src/libslic3r/PrintConfig.cpp:2137 src/libslic3r/PrintConfig.cpp:2267
 msgid "mm/s or %"
 msgstr "mm/s lub %"
 
-#: src/libslic3r/PrintConfig.cpp:196 src/libslic3r/PrintConfig.cpp:339
-#: src/libslic3r/PrintConfig.cpp:862 src/libslic3r/PrintConfig.cpp:984
-#: src/libslic3r/PrintConfig.cpp:1152 src/libslic3r/PrintConfig.cpp:1201
-#: src/libslic3r/PrintConfig.cpp:1211 src/libslic3r/PrintConfig.cpp:1403
+#: src/libslic3r/PrintConfig.cpp:230 src/libslic3r/PrintConfig.cpp:373
+#: src/libslic3r/PrintConfig.cpp:902 src/libslic3r/PrintConfig.cpp:1028
+#: src/libslic3r/PrintConfig.cpp:1260 src/libslic3r/PrintConfig.cpp:1309
+#: src/libslic3r/PrintConfig.cpp:1319 src/libslic3r/PrintConfig.cpp:1511
 msgid "mm/s²"
 msgstr "mm/s²"
 
-#: src/libslic3r/PrintConfig.cpp:1730
+#: src/libslic3r/PrintConfig.cpp:1845
 msgid "mm²"
 msgstr "mm²"
 
-#: src/libslic3r/PrintConfig.cpp:672
+#: src/libslic3r/PrintConfig.cpp:708
 msgid "mm³"
 msgstr "mm³"
 
-#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:601
-#: src/libslic3r/PrintConfig.cpp:1250
+#: src/slic3r/GUI/RammingChart.cpp:81 src/libslic3r/PrintConfig.cpp:637
+#: src/libslic3r/PrintConfig.cpp:1358
 msgid "mm³/s"
 msgstr "mm³/s"
 
-#: src/libslic3r/PrintConfig.cpp:1262 src/libslic3r/PrintConfig.cpp:1273
+#: src/libslic3r/PrintConfig.cpp:1370 src/libslic3r/PrintConfig.cpp:1381
 msgid "mm³/s²"
 msgstr "mm³/s²"
 
-#: src/slic3r/GUI/GUI_App.cpp:820
+#: src/slic3r/GUI/GUI_App.cpp:1512
 msgid "Mode"
 msgstr "&Tryb"
 
@@ -4623,7 +5295,7 @@ msgstr "&Tryb"
 msgid "model"
 msgstr "model"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:251
+#: src/slic3r/GUI/BedShapeDialog.cpp:395
 msgid "Model"
 msgstr "Model"
 
@@ -4652,99 +5324,125 @@ msgstr "Ukończono naprawę modelu"
 msgid "Model repaired successfully"
 msgstr "Model naprawiono pomyślnie"
 
-#: src/slic3r/GUI/Tab.cpp:979
+#: src/slic3r/GUI/GUI_App.cpp:1506 src/slic3r/GUI/wxExtensions.cpp:675
+msgctxt "Mode"
+msgid "Advanced"
+msgstr "Zaawansowany"
+
+#: src/slic3r/GUI/Tab.cpp:1241
 msgid "Modifications to the current profile will be saved."
 msgstr "Modyfikacje zostaną zapisane na obecnym profilu."
 
-#: src/slic3r/GUI/Preset.cpp:247
+#: src/slic3r/GUI/GUI_App.cpp:1425
 msgid "modified"
 msgstr "zmodyfikowano"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Modifier"
 msgstr "Modyfikator"
 
-#: src/slic3r/GUI/Tab.cpp:1161
+#: src/slic3r/GUI/Tab.cpp:1491
 msgid "Modifiers"
 msgstr "Modyfikatory"
 
-#: src/libslic3r/PrintConfig.cpp:2512
+#: src/libslic3r/PrintConfig.cpp:2655
 msgid "money/bottle"
 msgstr "pieniędzy/butelkę"
 
-#: src/libslic3r/PrintConfig.cpp:762
+#: src/libslic3r/PrintConfig.cpp:798
 msgid "money/kg"
 msgstr "pieniędzy/kg"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/libslic3r/PrintConfig.cpp:461
+msgid "Monotonic"
+msgstr "Monotoniczny"
+
+#: src/slic3r/GUI/NotificationManager.cpp:305
+#: src/slic3r/GUI/NotificationManager.cpp:315
+msgid "More"
+msgstr "Więcej"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Mouse wheel"
 msgstr "Kółko myszy"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:261
+#: src/slic3r/GUI/GLCanvas3D.cpp:249
 msgid "Mouse wheel:"
 msgstr "Kółko myszy:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoMove.cpp:64
 msgid "Move"
 msgstr "Przesuń"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1372
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1219
 msgid "Move clipping plane"
 msgstr "Przesunięcie płaszczyzny przecinania"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
 msgid "Move current slider thumb Down"
 msgstr "Przesuń suwak w dół"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:214
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:229
+msgid "Move current slider thumb Left"
+msgstr "Przesuń suwak w lewo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:230
+msgid "Move current slider thumb Right"
+msgstr "Przesuń suwak w prawo"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:215
 msgid "Move current slider thumb Up"
 msgstr "Przesuń suwak w górę"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:1059
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:835
 msgid "Move drainage hole"
 msgstr "Przesuń otwór odpływowy"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:3505
+#: src/slic3r/GUI/GLCanvas3D.cpp:3810
 msgid "Move Object"
 msgstr "Przesuń Model"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1365
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1212
 msgid "Move point"
 msgstr "Przesuń punkt"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:166
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
 msgid "Move selection 10 mm in negative X direction"
 msgstr "Przesuń zaznaczenie o -10 mm w osi X"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:159
 msgid "Move selection 10 mm in negative Y direction"
 msgstr "Przesuń zaznaczenie o -10 mm w osi Y"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:167
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
 msgid "Move selection 10 mm in positive X direction"
 msgstr "Przesuń zaznaczenie o +10 mm w osi X"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:158
 msgid "Move selection 10 mm in positive Y direction"
 msgstr "Przesuń zaznaczenie o +10 mm w osi Y"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1097
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:955
 msgid "Move support point"
 msgstr "Przenieś plik podpory"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:169
+#: src/slic3r/GUI/GCodeViewer.cpp:2492
+msgid "Movement"
+msgstr "Ruch"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
 msgid "Movement in camera space"
 msgstr "Ruch w przestrzeni widoku"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:168
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
 msgid "Movement step set to 1 mm"
 msgstr "Krok przesunięcia ustawiony na 1 mm"
 
-#: src/libslic3r/PrintConfig.cpp:2201
+#: src/libslic3r/PrintConfig.cpp:2344
 msgid "Multi material printers may need to prime or purge extruders on tool changes. Extrude the excess material into the wipe tower."
 msgstr "Drukarki pracujące z kilkoma filamentami na raz (multi-material) mogą wymagać czyszczenia głowicy przy zmianie filamentu. Nadmiar materiału jest wytłaczany w formie wieży czyszczącej."
 
-#: src/slic3r/GUI/Plater.cpp:2360 src/slic3r/GUI/Plater.cpp:2413
+#: src/slic3r/GUI/Plater.cpp:2322 src/slic3r/GUI/Plater.cpp:2375
 msgid "Multi-part object detected"
 msgstr "Wykryto obiekt wieloczęściowy"
 
@@ -4753,11 +5451,11 @@ msgstr "Wykryto obiekt wieloczęściowy"
 msgid "Multiple %s devices found. Please only connect one at a time for flashing."
 msgstr "Wiele urządzeń %s znaleziono. Proszę zostawić tylko jedno podłączone podczas flashowania."
 
-#: src/slic3r/GUI/Tab.cpp:1179
+#: src/slic3r/GUI/Tab.cpp:1509
 msgid "Multiple Extruders"
 msgstr "Kilka ekstruderów"
 
-#: src/slic3r/GUI/Plater.cpp:2410
+#: src/slic3r/GUI/Plater.cpp:2372
 msgid ""
 "Multiple objects were loaded for a multi-material printer.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -4766,36 +5464,41 @@ msgstr ""
 "Kilka obiektów zostało załadowanych dla drukarki typu multi-material.\n"
 "Traktować je jako jeden model zawierający kilka części?"
 
-#: src/libslic3r/PrintConfig.cpp:3439
+#: src/libslic3r/PrintConfig.cpp:3638
 msgid "Multiply copies by creating a grid."
 msgstr "Pomnóż ilość kopii przez stworzenie siatki."
 
-#: src/libslic3r/PrintConfig.cpp:3434
+#: src/libslic3r/PrintConfig.cpp:3633
 msgid "Multiply copies by this factor."
 msgstr "Pomnóż ilość kopii przez tę wartość."
 
-#: src/slic3r/GUI/Field.cpp:150 src/slic3r/GUI/OptionsGroup.cpp:580
+#: src/slic3r/GUI/Field.cpp:198 src/slic3r/GUI/OptionsGroup.cpp:715
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:874
 msgid "N/A"
 msgstr "N/D"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:270
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:153
+#: src/slic3r/GUI/GUI_ObjectList.cpp:284
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:161
 msgid "Name"
 msgstr "Nazwa"
 
-#: src/libslic3r/PrintConfig.cpp:1488
+#: src/libslic3r/PrintConfig.cpp:114
+msgid "Name of the printer"
+msgstr "Nazwa drukarki"
+
+#: src/libslic3r/PrintConfig.cpp:1596
 msgid "Name of the printer variant. For example, the printer variants may be differentiated by a nozzle diameter."
 msgstr "Nazwa wersji drukarki. Możesz np. tworzyć warianty wg średnicy dyszy."
 
-#: src/libslic3r/PrintConfig.cpp:1482
+#: src/libslic3r/PrintConfig.cpp:1590
 msgid "Name of the printer vendor."
 msgstr "Nazwa dostawcy drukarki."
 
-#: src/libslic3r/PrintConfig.cpp:1058
+#: src/libslic3r/PrintConfig.cpp:1102
 msgid "Name of the profile, from which this profile inherits."
 msgstr "Nazwa profilu, z którego dziedziczy ten profil."
 
-#: src/libslic3r/PrintConfig.cpp:1630
+#: src/libslic3r/PrintConfig.cpp:1738
 msgid "Nearest"
 msgstr "Najbliższy"
 
@@ -4803,14 +5506,30 @@ msgstr "Najbliższy"
 msgid "Network lookup"
 msgstr "Podgląd sieci"
 
-#: src/slic3r/GUI/Plater.cpp:2151
+#: src/slic3r/GUI/Preferences.cpp:430
+msgid "New layout, access via settings button in the top menu"
+msgstr "Nowy układ z dostępem przez przycisk ustawień w górnym menu"
+
+#: src/slic3r/GUI/Plater.cpp:2056
 msgid "New Project"
 msgstr "Nowy Projekt"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:112
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:105
 msgid "New project, clear plater"
 msgstr "Nowy projekt, wyczyść stół"
 
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:609
+msgid "New Value"
+msgstr "Nowa wartość"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1178
+msgid "New value"
+msgstr "Nowa wartość"
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "New version is available."
+msgstr "Dostępna jest nowa wersja."
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:38
 #, c-format
 msgid "New version of %s is available"
@@ -4820,23 +5539,23 @@ msgstr "Dostępna jest nowa wersja: %s"
 msgid "New version:"
 msgstr "Nowa wersja:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4673
+#: src/slic3r/GUI/GLCanvas3D.cpp:5089
 msgid "Next Redo action: %1%"
 msgstr "Następna akcja do powtórzenia: %1%"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4641
+#: src/slic3r/GUI/GLCanvas3D.cpp:5051
 msgid "Next Undo action: %1%"
 msgstr "Następna akcja do cofnięcia: %1%"
 
-#: src/libslic3r/PrintConfig.cpp:960
+#: src/libslic3r/PrintConfig.cpp:1004
 msgid "No extrusion"
 msgstr "Brak ekstruzji"
 
-#: src/libslic3r/SLAPrintSteps.cpp:453
+#: src/libslic3r/SLAPrintSteps.cpp:451
 msgid "No pad can be generated for this model with the current configuration"
 msgstr "Nie ma możliwości wygenerowania podkładki dla tego modelu przy obecnych ustawieniach"
 
-#: src/slic3r/GUI/MainFrame.cpp:784
+#: src/slic3r/GUI/MainFrame.cpp:1485
 msgid "No previously sliced file."
 msgstr "Brak poprzednio pociętych plików."
 
@@ -4844,175 +5563,221 @@ msgstr "Brak poprzednio pociętych plików."
 msgid "NO RAMMING AT ALL"
 msgstr "BRAK WYCISKANIA"
 
-#: src/libslic3r/PrintConfig.cpp:1857
+#: src/libslic3r/PrintConfig.cpp:1999
 msgid "No sparse layers (EXPERIMENTAL)"
 msgstr "Brak warstw bez czyszczenia (EKSPERYMENTALNE)"
 
-#: src/libslic3r/PrintConfig.cpp:2774
+#: src/libslic3r/PrintConfig.cpp:2938
 msgid "No support points will be placed closer than this threshold."
 msgstr "Punkty nie zostaną umieszczone bliżej siebie niż ustawiona wartość."
 
-#: src/slic3r/GUI/UpdateDialogs.cpp:303
+#: src/slic3r/GUI/UpdateDialogs.cpp:304
 msgid "No updates available"
 msgstr "Brak dostępnych aktualizacji"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:291 src/slic3r/GUI/ConfigWizard.cpp:574
-#: src/slic3r/GUI/Plater.cpp:499 src/slic3r/GUI/Plater.cpp:639
-#: src/libslic3r/ExtrusionEntity.cpp:309
+#: src/slic3r/GUI/ConfigWizard.cpp:309 src/slic3r/GUI/ConfigWizard.cpp:599
+#: src/slic3r/GUI/Plater.cpp:365 src/slic3r/GUI/Plater.cpp:505
+#: src/libslic3r/ExtrusionEntity.cpp:312
 msgid "None"
 msgstr "Brak"
 
-#: src/slic3r/GUI/Tab.cpp:2203
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2372
 msgid "Normal"
 msgstr "Normalny"
 
-#: src/slic3r/GUI/Plater.cpp:1286
+#: src/slic3r/GUI/Plater.cpp:1177 src/slic3r/GUI/Plater.cpp:1224
 msgid "normal mode"
 msgstr "tryb normalny"
 
-#: src/libslic3r/Zipper.cpp:46
+#: src/slic3r/GUI/GCodeViewer.cpp:2552
+msgid "Normal mode"
+msgstr "Tryb normalny"
+
+#: src/libslic3r/miniz_extension.cpp:105
 msgid "not a ZIP archive"
 msgstr "nie jest archiwum ZIP"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:223 src/slic3r/GUI/BedShapeDialog.cpp:302
+#: src/slic3r/GUI/BedShapeDialog.cpp:366 src/slic3r/GUI/BedShapeDialog.cpp:446
 msgid "Not found:"
 msgstr "Nie znaleziono:"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1019
+#: src/slic3r/GUI/DoubleSlider.cpp:1144
 msgid "Note"
 msgstr "Uwaga"
 
-#: src/slic3r/Utils/AstroBox.cpp:89
+#: src/slic3r/GUI/Tab.cpp:3408
+msgid "Note, that selected preset will be deleted from this/those printer(s) too."
+msgstr "Zwróć uwagę, że wybrany zestaw ustawień zostanie również usunięty z tej drukarki (lub tych drukarek)."
+
+#: src/slic3r/GUI/Tab.cpp:3416
+msgid "Note, that this/those printer(s) will be deleted after deleting of the selected preset."
+msgstr "Zwróć uwagę, że usunięcie wybranego zestawu ustawień spowoduje również usunięcie tej drukarki (lub drukarek)."
+
+#: src/slic3r/GUI/Tab.cpp:2039
+msgid ""
+"Note: All parameters from this group are moved to the Physical Printer settings (see changelog).\n"
+"\n"
+"A new Physical Printer profile is created by clicking on the \"cog\" icon right of the Printer profiles combo box, by selecting the \"Add physical printer\" item in the Printer combo box. The Physical Printer profile editor opens also when clicking on the \"cog\" icon in the Printer settings tab. The Physical Printer profiles are being stored into PrusaSlicer/physical_printer directory."
+msgstr ""
+"Uwaga: wszystkie parametry z tej grupy zostały przeniesione do ustawień fizycznej drukarki (szczegóły na liście zmian).\n"
+"\n"
+"Nowy profil fizycznej drukarki tworzysz klikając ikonkę \"koła zębatego\" na liście rozwijanej z profilami drukarek lub wybierając \"Dodaj fizyczną drukarkę\" na tej samej liście. Edytor profilu fizycznej drukarki pojawi się również po kliknięciu na ikonkę \"koła zębatego\" w zakładce \"Ustawienia drukarki\". Profile fizycznych drukarek są przechowywane w katalogu PrusaSlicer/physical_printer."
+
+#: src/slic3r/Utils/AstroBox.cpp:92
 msgid "Note: AstroBox version at least 1.1.0 is required."
 msgstr "Uwaga: Wymagany jest AstroBox w wersji co najmniej 1.1.0."
 
-#: src/slic3r/Utils/FlashAir.cpp:73
+#: src/slic3r/Utils/FlashAir.cpp:76
 msgid "Note: FlashAir with firmware 2.00.02 or newer and activated upload function is required."
 msgstr "Uwaga: Wymagana jest karta FlashAir z FW 2.00.02 lub nowszym z włączoną funkcją przesyłania."
 
-#: src/slic3r/Utils/OctoPrint.cpp:89
+#: src/slic3r/Utils/OctoPrint.cpp:91
 msgid "Note: OctoPrint version at least 1.1.0 is required."
 msgstr "Uwaga: wymagany jest OctoPrint w wersji 1.1.0 lub wyższej."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1345
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1192
 msgid "Note: some shortcuts work in (non)editing mode only."
 msgstr "Uwaga: niektóre skróty działają tylko poza trybem edycji."
 
-#: src/slic3r/GUI/Tab.cpp:1251 src/slic3r/GUI/Tab.cpp:1252
-#: src/slic3r/GUI/Tab.cpp:1540 src/slic3r/GUI/Tab.cpp:1541
-#: src/slic3r/GUI/Tab.cpp:2012 src/slic3r/GUI/Tab.cpp:2013
-#: src/slic3r/GUI/Tab.cpp:2128 src/slic3r/GUI/Tab.cpp:2129
-#: src/slic3r/GUI/Tab.cpp:3535 src/slic3r/GUI/Tab.cpp:3536
+#: src/slic3r/GUI/SavePresetDialog.cpp:151
+msgid "Note: This preset will be replaced after saving"
+msgstr "Uwaga: ten zestaw ustawień zostanie zastąpiony po zapisaniu"
+
+#: src/slic3r/GUI/Tab.cpp:1581 src/slic3r/GUI/Tab.cpp:1582
+#: src/slic3r/GUI/Tab.cpp:1887 src/slic3r/GUI/Tab.cpp:1888
+#: src/slic3r/GUI/Tab.cpp:2221 src/slic3r/GUI/Tab.cpp:2222
+#: src/slic3r/GUI/Tab.cpp:2297 src/slic3r/GUI/Tab.cpp:2298
+#: src/slic3r/GUI/Tab.cpp:3951 src/slic3r/GUI/Tab.cpp:3952
 msgid "Notes"
 msgstr "Notatki"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1751 src/slic3r/GUI/DoubleSlider.cpp:1905
-#: src/slic3r/GUI/DoubleSlider.cpp:1926 src/slic3r/GUI/GUI.cpp:245
+#: src/slic3r/GUI/ConfigWizard.cpp:2237 src/slic3r/GUI/DoubleSlider.cpp:2124
+#: src/slic3r/GUI/DoubleSlider.cpp:2144 src/slic3r/GUI/GUI.cpp:244
 msgid "Notice"
 msgstr "Uwaga"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:218
+#: src/slic3r/GUI/ConfigWizard.cpp:236
 msgid "nozzle"
 msgstr "dysza"
 
-#: src/slic3r/GUI/Tab.cpp:1870 src/slic3r/GUI/Tab.cpp:2340
-#: src/libslic3r/PrintConfig.cpp:1326
+#: src/slic3r/GUI/Tab.cpp:1790
+msgid "Nozzle"
+msgstr "Dysza"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1392
+msgid "Nozzle and Bed Temperatures"
+msgstr "Temperatury dyszy oraz stołu"
+
+#: src/slic3r/GUI/Tab.cpp:2104 src/slic3r/GUI/Tab.cpp:2509
+#: src/libslic3r/PrintConfig.cpp:1434
 msgid "Nozzle diameter"
 msgstr "Średnica dyszy"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:969
+#: src/slic3r/GUI/ConfigWizard.cpp:1335
 msgid "Nozzle Diameter:"
 msgstr "Średnica dyszy:"
 
-#: src/libslic3r/PrintConfig.cpp:650
+#: src/libslic3r/PrintConfig.cpp:2201
+msgid "Nozzle temperature"
+msgstr "Temperatura dyszy"
+
+#: src/libslic3r/PrintConfig.cpp:2198
+msgid "Nozzle temperature for layers after the first one. Set this to zero to disable temperature control commands in the output G-code."
+msgstr "Temperatura dyszy dla warstw powyżej pierwszej. Ustaw 0, aby wyłączyć kontrolowanie temperatury w pliku G-code."
+
+#: src/libslic3r/PrintConfig.cpp:961
+msgid "Nozzle temperature for the first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output G-code."
+msgstr "Temperatura dyszy dla pierwszej warstwy. Jeśli chcesz kontrolować temperaturę ręcznie podczas drukowania, ustaw 0, aby wyłączyć kontrolowanie temperatury w pliku G-code."
+
+#: src/libslic3r/PrintConfig.cpp:686
 msgid "Number of cooling moves"
 msgstr "Ilość ruchów chłodzących"
 
-#: src/slic3r/GUI/Tab.cpp:1839
+#: src/slic3r/GUI/Tab.cpp:2073
 msgid "Number of extruders of the printer."
 msgstr "Liczba ekstruderów drukarki."
 
-#: src/libslic3r/PrintConfig.cpp:1975
+#: src/libslic3r/PrintConfig.cpp:2117
 msgid "Number of interface layers to insert between the object(s) and support material."
 msgstr "Liczba warstw łączących materiał podporowy z modelem właściwym."
 
-#: src/libslic3r/PrintConfig.cpp:1697
+#: src/libslic3r/PrintConfig.cpp:1812
 msgid "Number of loops for the skirt. If the Minimum Extrusion Length option is set, the number of loops might be greater than the one configured here. Set this to zero to disable skirt completely."
-msgstr "Liczba pętli skirt. Jeśli włączona jest opcja \"Minimalna długość ekstruzji\", to może ona nadpisać wartość wprowadzoną w tym polu. Ustaw zero aby całkowicie wyłączyć skirt."
+msgstr "Liczba pętli skirt. Jeśli włączona jest opcja \"Minimalna długość ekstruzji\", to może ona nadpisać wartość wprowadzoną w tym polu. Ustaw zero, aby całkowicie wyłączyć skirt."
 
-#: src/libslic3r/PrintConfig.cpp:2365
+#: src/libslic3r/PrintConfig.cpp:2508
 msgid "Number of pixels in"
 msgstr "Liczba pikseli"
 
-#: src/libslic3r/PrintConfig.cpp:2367
+#: src/libslic3r/PrintConfig.cpp:2510
 msgid "Number of pixels in X"
 msgstr "Liczba pikseli w osi X"
 
-#: src/libslic3r/PrintConfig.cpp:2373
+#: src/libslic3r/PrintConfig.cpp:2516
 msgid "Number of pixels in Y"
 msgstr "Liczba pikseli w osi Y"
 
-#: src/libslic3r/PrintConfig.cpp:176
+#: src/libslic3r/PrintConfig.cpp:210
 msgid "Number of solid layers to generate on bottom surfaces."
 msgstr "Liczba zwartych warstw dolnych."
 
-#: src/libslic3r/PrintConfig.cpp:1781
+#: src/libslic3r/PrintConfig.cpp:1896
 msgid "Number of solid layers to generate on top and bottom surfaces."
 msgstr "Liczba zwartych warstw górnych i dolnych."
 
-#: src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2277
 msgid "Number of solid layers to generate on top surfaces."
 msgstr "Liczba zwartych warstw górnych."
 
-#: src/libslic3r/PrintConfig.cpp:2518
+#: src/libslic3r/PrintConfig.cpp:2661
 msgid "Number of the layers needed for the exposure time fade from initial exposure time to the exposure time"
 msgstr "Liczba warstw potrzebnych, aby zmienić czas naświetlania z początkowego do stałego"
 
-#: src/slic3r/GUI/Plater.cpp:241
+#: src/slic3r/GUI/Plater.cpp:247
 msgid "Number of tool changes"
 msgstr "Ilość zmian narzędzi"
 
-#: src/libslic3r/PrintConfig.cpp:2753
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:2917
 msgid "Object elevation"
 msgstr "Podniesienie modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2466
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2858
 msgid "Object manipulation"
 msgstr "Manipulowanie modelem"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:155 src/libslic3r/GCode.cpp:638
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:163 src/libslic3r/GCode.cpp:623
 msgid "Object name"
 msgstr "Nazwa modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3417
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3880
 msgid "Object or Instance"
 msgstr "Model lub Kopia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Object reordered"
 msgstr "Model przeorganizowany"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2479
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2871
 msgid "Object Settings to modify"
-msgstr "Ustawienia Modelu do modyfikacji"
+msgstr "Ustawienia modelu do modyfikacji"
 
-#: src/slic3r/GUI/Plater.cpp:2529
+#: src/slic3r/GUI/Plater.cpp:2491
 msgid "Object too large?"
 msgstr "Model zbyt duży?"
 
-#: src/libslic3r/PrintConfig.cpp:2262
+#: src/libslic3r/PrintConfig.cpp:2405
 msgid "Object will be used to purge the nozzle after a toolchange to save material that would otherwise end up in the wipe tower and decrease print time. Colours of the objects will be mixed as a result."
-msgstr "Modele zostaną użyte do czyszczenia dyszy po zmianie narzędzia (filamentu) aby oszczędzić materiał, który inaczej zostałby wyekstrudowany do wieży czyszczącej i aby skrócić czas wydruku. W rezultacie kolor tego modelu będzie niejednolity."
+msgstr "Modele zostaną użyte do czyszczenia dyszy po zmianie narzędzia (filamentu), aby oszczędzić materiał, który inaczej zostałby wyekstrudowany do wieży czyszczącej i aby skrócić czas wydruku. W rezultacie kolor tego modelu będzie niejednolity."
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "object(s)"
 msgstr "model(e)"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "objects"
 msgstr "modele"
 
-#: src/libslic3r/PrintConfig.cpp:429 src/libslic3r/PrintConfig.cpp:855
+#: src/libslic3r/PrintConfig.cpp:465 src/libslic3r/PrintConfig.cpp:893
 msgid "Octagram Spiral"
 msgstr "Spirala ośmiokątna"
 
@@ -5020,64 +5785,97 @@ msgstr "Spirala ośmiokątna"
 msgid "OctoPrint version"
 msgstr "Wersja OctoPrint"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3425
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3888
 msgid "of a current Object"
 msgstr "obecnego Modelu"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
 msgid "Offset"
 msgstr "Offset"
 
-#: src/slic3r/GUI/Tab.cpp:1755
+#: src/slic3r/GUI/Preferences.cpp:422
+msgid "Old regular layout with the tab bar"
+msgstr "Poprzedni układ z paskiem kart"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:608
+msgid "Old Value"
+msgstr "Poprzednia wartość"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1177
+msgid "Old value"
+msgstr "Poprzednia wartość"
+
+#: src/slic3r/GUI/Preferences.cpp:123
+msgid "On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances of same app from the command line. In such case this settings will allow only one instance."
+msgstr "Na OSX domyślnie zawsze jest uruchomiona jedna instancja aplikacji. Dozwolone jest jednak uruchomienie wielu instancji tej samej aplikacji z linii komend. Ustawienie to spowoduje dopuszczenie tylko jednej instancji do działania."
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:359
 #, c-format
 msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain."
 msgstr "W tym systemie, %s używa certyfikatu HTTPS z magazynu systemowego (Certificate Store) lub Keychain."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:950
+#: src/slic3r/GUI/DoubleSlider.cpp:1064
 msgid "One layer mode"
 msgstr "Tryb jednej warstwy"
 
-#: src/libslic3r/Print.cpp:1365
+#: src/libslic3r/Print.cpp:1391
 msgid "One or more object were assigned an extruder that the printer does not have."
 msgstr "Jeden lub więcej modeli zostało przypisanych do ekstrudera, którego drukarka nie posiada."
 
-#: src/libslic3r/PrintConfig.cpp:1903 src/libslic3r/PrintConfig.cpp:2676
+#: src/libslic3r/PrintConfig.cpp:2045 src/libslic3r/PrintConfig.cpp:2840
 msgid "Only create support if it lies on a build plate. Don't create support on a print."
 msgstr "Tworzenie podpór tylko na stole. Nie będą tworzone na wydruku."
 
-#: src/libslic3r/PrintConfig.cpp:1027
+#: src/libslic3r/PrintConfig.cpp:1071
 msgid "Only infill where needed"
 msgstr "Tylko potrzebne wypełnienie"
 
-#: src/slic3r/GUI/Tab.cpp:2373
+#: src/slic3r/GUI/Tab.cpp:2542
 msgid "Only lift Z"
 msgstr "Z-hop tylko"
 
-#: src/libslic3r/PrintConfig.cpp:1570
+#: src/libslic3r/PrintConfig.cpp:1678
 msgid "Only lift Z above"
 msgstr "Z-hop tylko powyżej"
 
-#: src/libslic3r/PrintConfig.cpp:1579
+#: src/libslic3r/PrintConfig.cpp:1687
 msgid "Only lift Z below"
 msgstr "Z-hop tylko poniżej"
 
-#: src/libslic3r/PrintConfig.cpp:1348
+#: src/libslic3r/PrintConfig.cpp:1456
 msgid "Only retract when crossing perimeters"
 msgstr "Retrakcja tylko przy przechodzeniu nad obrysami"
 
-#: src/slic3r/GUI/Tab.cpp:1187
+#: src/slic3r/GUI/ConfigWizard.cpp:714
+msgid "Only the following installed printers are compatible with the selected filament:"
+msgstr "Tylko te zainstalowane drukarki są kompatybilne z wybranym filamentem:"
+
+#: src/slic3r/GUI/Tab.cpp:1517
 msgid "Ooze prevention"
 msgstr "Zapobieganie wyciekom (ooze)"
 
-#: src/libslic3r/Print.cpp:1266
+#: src/libslic3r/Print.cpp:1292
 msgid "Ooze prevention is currently not supported with the wipe tower enabled."
 msgstr "Zapobieganie wyciekom jest obecnie niedostępne przy włączonej wieży czyszczącej."
 
-#: src/slic3r/GUI/MainFrame.cpp:408
+#: src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open &PrusaSlicer"
+msgstr "Otwórz &PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:1391
+msgid "Open a G-code file"
+msgstr "Otwórz plik G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:77
+#: src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open a new PrusaSlicer instance"
+msgstr "Otwórz nową instancję PrusaSlicer"
+
+#: src/slic3r/GUI/MainFrame.cpp:989
 msgid "Open a project file"
 msgstr "Otwórz plik projektu"
 
-#: src/slic3r/GUI/Tab.cpp:1729
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:330
 msgid "Open CA certificate file"
 msgstr "Otwórz plik certyfikatu CA"
 
@@ -5090,116 +5888,150 @@ msgstr "Otwórz stronę z listami zmian"
 msgid "Open download page"
 msgstr "Otwórz stronę pobierania"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:113
+#: src/slic3r/GUI/NotificationManager.cpp:742
+msgid "Open Folder."
+msgstr "Otwórz folder."
+
+#: src/slic3r/Utils/Process.cpp:151
+msgid "Open G-code file:"
+msgstr "Otwórz plik G-code:"
+
+#: src/slic3r/GUI/MainFrame.cpp:66 src/slic3r/GUI/MainFrame.cpp:1141
+msgid "Open G-code viewer"
+msgstr "Otwórz przeglądarkę G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:79
+msgid "Open new G-code viewer"
+msgstr "Otwórz nową przeglądarkę G-code"
+
+#: src/slic3r/GUI/MainFrame.cpp:63 src/slic3r/GUI/MainFrame.cpp:1262
+msgid "Open new instance"
+msgstr "Otwórz nową instancję"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:106
 msgid "Open project STL/OBJ/AMF/3MF with config, clear plater"
 msgstr "Otwórz projekt STL/OBJ/AMF/3MF z konfiguracją, wyczyść stół"
 
-#: src/slic3r/GUI/MainFrame.cpp:693
+#: src/slic3r/GUI/MainFrame.cpp:77 src/slic3r/GUI/MainFrame.cpp:1398
+msgid "Open PrusaSlicer"
+msgstr "Otwórz PrusaSlicer "
+
+#: src/slic3r/GUI/MainFrame.cpp:918 src/slic3r/GUI/MainFrame.cpp:1317
 #, c-format
 msgid "Open the %s website in your browser"
 msgstr "Otwórz stronę %s w przeglądarce"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Open the Prusa3D drivers download page in your browser"
 msgstr "Otwórz stronę Prusa3D ze sterownikami w przeglądarce"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Open the software releases page in your browser"
 msgstr "Otwórz stronę z wersjami oprogramowania w przeglądarce"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:220 src/slic3r/GUI/Plater.cpp:3961
 msgid "Optimize orientation"
 msgstr "Optymalizuj orientację"
 
-#: src/slic3r/GUI/Plater.cpp:2767
+#: src/slic3r/GUI/Plater.cpp:1555
 msgid "Optimize Rotation"
 msgstr "Optymalizuj obrót"
 
-#: src/slic3r/GUI/Plater.cpp:4040
+#: src/slic3r/GUI/Plater.cpp:3962
 msgid "Optimize the rotation of the object for better print results."
 msgstr "Optymalizuj obrót modelu dla lepszych efektów."
 
-#: src/libslic3r/PrintConfig.cpp:137
+#: src/libslic3r/PrintConfig.cpp:170
 msgid "Optimize travel moves in order to minimize the crossing of perimeters. This is mostly useful with Bowden extruders which suffer from oozing. This feature slows down both the print and the G-code generation."
-msgstr "Optymalizuj ruchy jałowe aby zminimalizować przejeżdżanie nad obrysami. Ta funkcja jest przydatna szczególne przy ekstruderach typu bowden, podatnych na wyciekanie filamentu z dyszy. Włączenie tej funkcji wydłuża zarówno czas druku jak i czas generowania G-code."
+msgstr "Optymalizuj ruchy jałowe, aby zminimalizować przejeżdżanie nad obrysami. Ta funkcja jest przydatna szczególne przy ekstruderach typu Bowden, podatnych na wyciekanie filamentu z dyszy. Włączenie tej funkcji wydłuża zarówno czas druku, jak i czas generowania G-code."
 
-#: src/slic3r/GUI/Tab.cpp:1131
+#: src/slic3r/GUI/GCodeViewer.cpp:2525 src/slic3r/GUI/GUI_Preview.cpp:320
+#: src/slic3r/GUI/GUI_Preview.cpp:333
+msgid "Options"
+msgstr "Opcje"
+
+#: src/slic3r/GUI/Tab.cpp:1460
 msgid "Options for support material and raft"
 msgstr "Opcje materiału podporowego i tratwy (raft)"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:989
+#: src/slic3r/GUI/Mouse3DController.cpp:315
+msgid "Options:"
+msgstr "Opcje:"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1112
 msgid "or press \"+\" key"
 msgstr "lub naciśnij klawisz \"+\""
 
-#: src/slic3r/GUI/Plater.cpp:2892
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:74
 msgid "Orientation found."
 msgstr "Znaleziono orientację."
 
-#: src/slic3r/GUI/Plater.cpp:2891
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:73
 msgid "Orientation search canceled."
 msgstr "Anulowano ustawianie orientacji."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:84
+#: src/slic3r/GUI/BedShapeDialog.cpp:94
 msgid "Origin"
 msgstr "Punkt zerowy"
 
-#: src/slic3r/GUI/Tab.cpp:1227
+#: src/slic3r/GUI/Tab.cpp:1557
 msgid "Other"
 msgstr "Inne"
 
-#: src/libslic3r/PrintConfig.cpp:144 src/libslic3r/PrintConfig.cpp:2064
+#: src/libslic3r/PrintConfig.cpp:177 src/libslic3r/PrintConfig.cpp:2206
 msgid "Other layers"
 msgstr "Inne warstwy"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:856
+#: src/slic3r/GUI/ConfigWizard.cpp:1222
 msgid "Other Vendors"
 msgstr "Inni dostawcy"
 
-#: src/slic3r/GUI/Tab.cpp:1238 src/slic3r/GUI/Tab.cpp:3666
+#: src/slic3r/GUI/Tab.cpp:1568 src/slic3r/GUI/Tab.cpp:4085
 msgid "Output file"
 msgstr "Plik wyjściowy"
 
-#: src/libslic3r/PrintConfig.cpp:3493
+#: src/libslic3r/PrintConfig.cpp:3692
 msgid "Output File"
 msgstr "Plik Wyjściowy"
 
-#: src/libslic3r/PrintConfig.cpp:1363
+#: src/libslic3r/PrintConfig.cpp:1471
 msgid "Output filename format"
 msgstr "Format pliku wyjściowego"
 
-#: src/libslic3r/PrintConfig.cpp:3381
+#: src/libslic3r/PrintConfig.cpp:3580
 msgid "Output Model Info"
 msgstr "Informacje o Modelu wyjściowym"
 
-#: src/slic3r/GUI/Tab.cpp:1230 src/slic3r/GUI/Tab.cpp:3665
+#: src/slic3r/GUI/Tab.cpp:1560 src/slic3r/GUI/Tab.cpp:4084
 msgid "Output options"
 msgstr "Opcje wyjściowe"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/ExtrusionEntity.cpp:312
+#: src/slic3r/GUI/GUI_Preview.cpp:303 src/libslic3r/ExtrusionEntity.cpp:316
+#: src/libslic3r/ExtrusionEntity.cpp:340
 msgid "Overhang perimeter"
 msgstr "Obrys zwisu"
 
-#: src/libslic3r/PrintConfig.cpp:2042
+#: src/libslic3r/PrintConfig.cpp:2184
 msgid "Overhang threshold"
 msgstr "Próg zwisu"
 
-#: src/slic3r/GUI/Tab.cpp:1215
+#: src/slic3r/GUI/Tab.cpp:1545
 msgid "Overlap"
 msgstr "Nakładanie"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "P&rint Settings Tab"
-msgstr "Ustawienia D&ruku"
+msgstr "Ustawienia d&ruku"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:107 src/slic3r/GUI/GUI_ObjectList.cpp:625
-#: src/slic3r/GUI/Plater.cpp:635 src/slic3r/GUI/Tab.cpp:3636
-#: src/slic3r/GUI/Tab.cpp:3637 src/libslic3r/PrintConfig.cpp:2781
-#: src/libslic3r/PrintConfig.cpp:2788 src/libslic3r/PrintConfig.cpp:2802
-#: src/libslic3r/PrintConfig.cpp:2813 src/libslic3r/PrintConfig.cpp:2823
-#: src/libslic3r/PrintConfig.cpp:2845 src/libslic3r/PrintConfig.cpp:2856
-#: src/libslic3r/PrintConfig.cpp:2863 src/libslic3r/PrintConfig.cpp:2870
-#: src/libslic3r/PrintConfig.cpp:2881 src/libslic3r/PrintConfig.cpp:2890
-#: src/libslic3r/PrintConfig.cpp:2899
+#: src/slic3r/GUI/GUI_ObjectList.cpp:105 src/slic3r/GUI/GUI_ObjectList.cpp:664
+#: src/slic3r/GUI/Plater.cpp:501 src/slic3r/GUI/Tab.cpp:4055
+#: src/slic3r/GUI/Tab.cpp:4056 src/slic3r/GUI/Tab.cpp:4127
+#: src/libslic3r/PrintConfig.cpp:2945 src/libslic3r/PrintConfig.cpp:2952
+#: src/libslic3r/PrintConfig.cpp:2966 src/libslic3r/PrintConfig.cpp:2977
+#: src/libslic3r/PrintConfig.cpp:2987 src/libslic3r/PrintConfig.cpp:3009
+#: src/libslic3r/PrintConfig.cpp:3020 src/libslic3r/PrintConfig.cpp:3027
+#: src/libslic3r/PrintConfig.cpp:3034 src/libslic3r/PrintConfig.cpp:3045
+#: src/libslic3r/PrintConfig.cpp:3054 src/libslic3r/PrintConfig.cpp:3063
 msgid "Pad"
 msgstr "Podkładka"
 
@@ -5207,150 +6039,186 @@ msgstr "Podkładka"
 msgid "Pad and Support"
 msgstr "Podkładka i Podpory"
 
-#: src/libslic3r/PrintConfig.cpp:2855
+#: src/slic3r/GUI/Tab.cpp:4127 src/libslic3r/PrintConfig.cpp:3019
 msgid "Pad around object"
 msgstr "Podkładka wokół modelu"
 
-#: src/libslic3r/PrintConfig.cpp:2862
+#: src/libslic3r/PrintConfig.cpp:3026
 msgid "Pad around object everywhere"
 msgstr "Podkładka wokół wszystkich modeli"
 
-#: src/libslic3r/PrintConfig.cpp:2811
+#: src/libslic3r/PrintConfig.cpp:2975
 msgid "Pad brim size"
 msgstr "Rozmiar brimu dla podkładki"
 
-#: src/libslic3r/SLA/Pad.cpp:691
+#: src/libslic3r/SLA/Pad.cpp:532
 msgid "Pad brim size is too small for the current configuration."
 msgstr "Rozmiar brimu podkładki jest zbyt mały dla obecnej konfiguracji."
 
-#: src/libslic3r/PrintConfig.cpp:2898
+#: src/libslic3r/PrintConfig.cpp:3062
 msgid "Pad object connector penetration"
 msgstr "Przenikanie łącznika podkładki z modelem"
 
-#: src/libslic3r/PrintConfig.cpp:2880
+#: src/libslic3r/PrintConfig.cpp:3044
 msgid "Pad object connector stride"
 msgstr "Rozmieszczenie łączników podkładki z modelem"
 
-#: src/libslic3r/PrintConfig.cpp:2889
+#: src/libslic3r/PrintConfig.cpp:3053
 msgid "Pad object connector width"
 msgstr "Szerokość łącznika podkładki z modelem"
 
-#: src/libslic3r/PrintConfig.cpp:2869
+#: src/libslic3r/PrintConfig.cpp:3033
 msgid "Pad object gap"
 msgstr "Odstęp modelu od podkładki"
 
-#: src/libslic3r/PrintConfig.cpp:2797
+#: src/libslic3r/PrintConfig.cpp:2961
 msgid "Pad wall height"
 msgstr "Wysokość ścianki podkładki"
 
-#: src/libslic3r/PrintConfig.cpp:2844
+#: src/libslic3r/PrintConfig.cpp:3008
 msgid "Pad wall slope"
 msgstr "Kąt pochylenia ścianki podkładki"
 
-#: src/libslic3r/PrintConfig.cpp:2787
+#: src/libslic3r/PrintConfig.cpp:2951
 msgid "Pad wall thickness"
 msgstr "Grubość ścianki podkładki"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Page Down"
 msgstr "Page Down"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Page Up"
 msgstr "Page Up"
 
-#: src/slic3r/GUI/Field.cpp:139
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:33
+msgid "Paint-on supports"
+msgstr "Malowanie podpór"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:178
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:159
+msgid "Paints all facets inside, regardless of their orientation."
+msgstr "Maluje wszystkie powierzchnie wewnątrz, bez względu na ich kierunek."
+
+#: src/slic3r/GUI/Field.cpp:187
 msgid "parameter name"
 msgstr "nazwa parametru"
 
-#: src/slic3r/GUI/Field.cpp:243
+#: src/slic3r/GUI/Field.cpp:291
 msgid "Parameter validation"
 msgstr "Weryfikacja parametru"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3418
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3881
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Part"
 msgstr "Część"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2494
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2886
 msgid "Part manipulation"
 msgstr "Manipulacja częścią"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2483
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2875
 msgid "Part Settings to modify"
-msgstr "Ustawienia Części do modyfikacji"
+msgstr "Ustawienia części do modyfikacji"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4514
+#: src/libslic3r/PrintConfig.cpp:138
+msgid "Password"
+msgstr "Hasło"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4880
 msgid "Paste"
 msgstr "Wklej"
 
-#: src/slic3r/GUI/MainFrame.cpp:592
+#: src/slic3r/GUI/MainFrame.cpp:1198
 msgid "Paste clipboard"
 msgstr "Wklej zawartość schowka"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:128
 msgid "Paste from clipboard"
 msgstr "Wklej ze schowka"
 
-#: src/slic3r/GUI/Plater.cpp:5606
+#: src/slic3r/GUI/Plater.cpp:5803
 msgid "Paste From Clipboard"
 msgstr "Wklej Ze Schowka"
 
-#: src/libslic3r/PrintConfig.cpp:2002
+#: src/libslic3r/PrintConfig.cpp:2144
 msgid "Pattern"
 msgstr "Wzór"
 
-#: src/libslic3r/PrintConfig.cpp:1891
+#: src/libslic3r/PrintConfig.cpp:2033
 msgid "Pattern angle"
 msgstr "Kąt wzoru"
 
-#: src/libslic3r/PrintConfig.cpp:2016
+#: src/libslic3r/PrintConfig.cpp:2158
 msgid "Pattern spacing"
 msgstr "Rozstaw wzoru"
 
-#: src/libslic3r/PrintConfig.cpp:2004
+#: src/libslic3r/PrintConfig.cpp:2146
 msgid "Pattern used to generate support material."
 msgstr "Wzór podpór."
 
-#: src/slic3r/GUI/Plater.cpp:1261
+#: src/slic3r/GUI/GCodeViewer.cpp:2437 src/slic3r/GUI/GCodeViewer.cpp:2460
+#: src/slic3r/GUI/Plater.cpp:1199
 msgid "Pause"
 msgstr "Pauza"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1009
+#: src/slic3r/GUI/DoubleSlider.cpp:1133
 msgid "Pause print (\"%1%\")"
 msgstr "Wstrzymaj wydruk (\"%1%\")"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:934 src/slic3r/GUI/GLCanvas3D.cpp:943
-#: src/slic3r/GUI/GLCanvas3D.cpp:982
+#: src/slic3r/GUI/Tab.cpp:2209 src/libslic3r/PrintConfig.cpp:1969
+msgid "Pause Print G-code"
+msgstr "G-code dla pauzy drukowania"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:940 src/slic3r/GUI/GLCanvas3D.cpp:949
+#: src/slic3r/GUI/GLCanvas3D.cpp:988
 msgid "Pause print or custom G-code"
 msgstr "Pauza wydruku lub własny G-code"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:175
+#: src/libslic3r/PrintConfig.cpp:1147
+msgid "Percent of a flow rate relative to object's normal layer height."
+msgstr "Procentowy udział przepływu w stosunku do normalnej wysokości warstwy modelu."
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2233
+msgid "Percentage"
+msgstr "Procentowo"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:177
 msgid "Perform cut"
 msgstr "Przetnij"
 
-#: src/libslic3r/PrintConfig.cpp:2927
+#: src/libslic3r/PrintConfig.cpp:3091
 msgid "Performance vs accuracy of calculation. Lower values may produce unwanted artifacts."
 msgstr "Kalkulacja prędkości względem dokładności. Niższe wartości mogą powodować artefakty."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:237 src/libslic3r/ExtrusionEntity.cpp:310
+#: src/slic3r/GUI/GUI_Preview.cpp:301 src/libslic3r/ExtrusionEntity.cpp:314
+#: src/libslic3r/ExtrusionEntity.cpp:336
 msgid "Perimeter"
 msgstr "Obrys"
 
-#: src/libslic3r/PrintConfig.cpp:1408
+#: src/libslic3r/PrintConfig.cpp:1516
 msgid "Perimeter extruder"
 msgstr "Ekstruder dla obrysów"
 
-#: src/slic3r/GUI/PresetHints.cpp:165
+#: src/slic3r/GUI/PresetHints.cpp:164
 msgid "perimeters"
 msgstr "obrysy"
 
-#: src/libslic3r/PrintConfig.cpp:1399 src/libslic3r/PrintConfig.cpp:1417
-#: src/libslic3r/PrintConfig.cpp:1430 src/libslic3r/PrintConfig.cpp:1440
+#: src/libslic3r/PrintConfig.cpp:1507 src/libslic3r/PrintConfig.cpp:1525
+#: src/libslic3r/PrintConfig.cpp:1538 src/libslic3r/PrintConfig.cpp:1548
 msgid "Perimeters"
 msgstr "Obrysy"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:860
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:159
+msgid "Physical Printer"
+msgstr "Drukarka fizyczna"
+
+#: src/slic3r/GUI/PresetComboBoxes.cpp:789
+#: src/slic3r/GUI/PresetComboBoxes.cpp:948
+msgid "Physical printers"
+msgstr "Drukarki fizyczne"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1226
 #, c-format
 msgid "Pick another vendor supported by %s"
 msgstr "Wybierz innego producenta obsługiwanego przez %s"
@@ -5359,291 +6227,338 @@ msgstr "Wybierz innego producenta obsługiwanego przez %s"
 msgid "Picture sizes to be stored into a .gcode and .sl1 files"
 msgstr "Rozmiary obrazów będą przechowywane w plikach .gcode i .sl1"
 
-#: src/libslic3r/PrintConfig.cpp:2681
+#: src/libslic3r/PrintConfig.cpp:2822
+msgid "Pillar connection mode"
+msgstr "Tryb łączenia słupków"
+
+#: src/libslic3r/PrintConfig.cpp:2791
+msgid "Pillar diameter"
+msgstr "Średnica słupka"
+
+#: src/libslic3r/PrintConfig.cpp:2845
 msgid "Pillar widening factor"
 msgstr "Współczynnik rozszerzania słupka"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:330
+#: src/slic3r/GUI/ConfigManipulation.cpp:335
 msgid "Pinhead diameter should be smaller than the pillar diameter."
 msgstr "Średnica łączników podpór powinna być mniejsza niż średnica słupków."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:79
+#: src/libslic3r/PrintConfig.cpp:2763
+msgid "Pinhead front diameter"
+msgstr "Przednia średnica łącznika"
+
+#: src/libslic3r/PrintConfig.cpp:2781
+msgid "Pinhead width"
+msgstr "Szerokość łącznika"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:110
 msgid "Place bearings in slots and resume printing"
 msgstr "Umieść łożyska w gniazdach i wznów drukowanie"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:45
+#: src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp:41
 msgid "Place on face"
 msgstr "Połóż na płaszczyźnie"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:192 src/slic3r/GUI/MainFrame.cpp:204
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:190 src/slic3r/GUI/MainFrame.cpp:340
+#: src/slic3r/GUI/MainFrame.cpp:352
 msgid "Plater"
 msgstr "Zawartość Stołu"
 
-#: src/slic3r/GUI/GUI_App.cpp:1085
+#: src/slic3r/GUI/GUI_App.cpp:1877
 msgid "Please check and fix your object list."
 msgstr "Sprawdź i popraw listę modeli."
 
-#: src/slic3r/GUI/Plater.cpp:2312 src/slic3r/GUI/Tab.cpp:2959
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:209 src/slic3r/GUI/Plater.cpp:2255
+#: src/slic3r/GUI/Tab.cpp:3188
 msgid "Please check your object list before preset changing."
 msgstr "Sprawdź listę modeli przed zmianą zestawu ustawień."
 
-#: src/slic3r/GUI/Plater.cpp:3286
+#: src/slic3r/GUI/Plater.cpp:3089
 msgid "Please select the file to reload"
 msgstr "Wybierz plik do przeładowania"
 
-#: src/slic3r/GUI/AboutDialog.cpp:39 src/slic3r/GUI/AboutDialog.cpp:291
+#: src/slic3r/GUI/AboutDialog.cpp:43 src/slic3r/GUI/AboutDialog.cpp:48
+#: src/slic3r/GUI/AboutDialog.cpp:317
 msgid "Portions copyright"
 msgstr "Częściowe prawa autorskie"
 
-#: src/libslic3r/PrintConfig.cpp:2400
+#: src/libslic3r/PrintConfig.cpp:2543
 msgid "Portrait"
 msgstr "Tryb Portretowy"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:215
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:457
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:223
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:505
 msgid "Position"
 msgstr "Pozycja"
 
-#: src/slic3r/GUI/Tab.cpp:2367
+#: src/slic3r/GUI/Tab.cpp:2536
 msgid "Position (for multi-extruder printers)"
 msgstr "Pozycja (dla drukarek z kilkoma ekstruderami)"
 
-#: src/libslic3r/PrintConfig.cpp:1623
+#: src/libslic3r/PrintConfig.cpp:1731
 msgid "Position of perimeters starting points."
 msgstr "Pozycja startowa druku obrysów."
 
-#: src/libslic3r/PrintConfig.cpp:2224
+#: src/libslic3r/PrintConfig.cpp:2367
 msgid "Position X"
 msgstr "Pozycja X"
 
-#: src/libslic3r/PrintConfig.cpp:2231
+#: src/libslic3r/PrintConfig.cpp:2374
 msgid "Position Y"
 msgstr "Pozycja Y"
 
-#: src/slic3r/GUI/Tab.cpp:1245 src/libslic3r/PrintConfig.cpp:1453
+#: src/slic3r/GUI/Tab.cpp:1575 src/libslic3r/PrintConfig.cpp:1561
 msgid "Post-processing scripts"
 msgstr "Skrypty do przetwarzania końcowego"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Pre&view"
 msgstr "Pod&gląd"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:149 src/slic3r/GUI/Preferences.cpp:10
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:143 src/slic3r/GUI/Preferences.cpp:12
 msgid "Preferences"
 msgstr "Preferencje"
 
-#: src/libslic3r/PrintConfig.cpp:1641
+#: src/libslic3r/PrintConfig.cpp:1749
 msgid "Preferred direction of the seam"
 msgstr "Preferowane ustawienie szwu"
 
-#: src/libslic3r/PrintConfig.cpp:1652
+#: src/libslic3r/PrintConfig.cpp:1760
 msgid "Preferred direction of the seam - jitter"
 msgstr "Preferowany kierunek szwu - jitter"
 
-#: src/libslic3r/PrintObject.cpp:255
+#: src/libslic3r/PrintObject.cpp:261
 msgid "Preparing infill"
 msgstr "Przygotowywanie wypełnienia"
 
-#: src/slic3r/GUI/Tab.cpp:2920
-#, c-format
-msgid "Preset (%s)"
-msgstr "Zestaw ustawień (%s)"
+#: src/slic3r/GUI/GUI_App.cpp:855
+msgid "Preparing settings tabs"
+msgstr "Przygotowuję zakładkę ustawień"
 
-#: src/slic3r/GUI/Tab.cpp:3082
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1009
+msgid "Preset \"%1%\" has the following unsaved changes:"
+msgstr "Zestaw ustawień \"%1%\" ma następujące niezapisane zmiany:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1014
+msgid "Preset \"%1%\" is not compatible with the new print profile and it has the following unsaved changes:"
+msgstr "Zestaw ustawień \"%1%\" jest niekompatybilny z nowym profilem druku i ma następujące niezapisane zmiany:"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1013
+msgid "Preset \"%1%\" is not compatible with the new printer profile and it has the following unsaved changes:"
+msgstr "Zestaw ustawień \"%1%\" jest niekompatybilny z nowym profilem drukarki i ma następujące niezapisane zmiany:"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:136
+msgid "Preset with name \"%1%\" already exists and is imcopatible with selected printer."
+msgstr "Zestaw ustawień o nazwie \"%1%\" już istnieje i jest niekompatybilny z wybraną drukarką."
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:148
 msgid "Preset with name \"%1%\" already exists."
 msgstr "Zestaw ustawień o nazwie \"%1%\" już istnieje."
 
-#: src/slic3r/GUI/Tab.cpp:3029
+#: src/slic3r/GUI/SavePresetDialog.cpp:219
 msgctxt "PresetName"
 msgid "Copy"
 msgstr "Kopia"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:163
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:157
 msgid "Press to activate deselection rectangle"
-msgstr "Naciśnij aby aktywować prostokąt odznaczający"
+msgstr "Naciśnij, aby aktywować prostokąt odznaczający"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:197
-msgid "Press to activate one direction scaling in Gizmo scale"
-msgstr "Naciśnij aby aktywować skalowanie uchwytem w jednym kierunku"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:162
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:156
 msgid "Press to activate selection rectangle"
 msgstr "Naciśnij, aby aktywować prostokąt zaznaczający"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:198
-msgid ""
-"Press to scale (in Gizmo scale) or rotate (in Gizmo rotate)\n"
-"selected objects around their own center"
-msgstr ""
-"Naciśnij, aby skalować (z uchwytem) lub obracać (z uchwytem)\n"
-"zaznaczone modele wokół ich środków"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:161
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:155
 msgid ""
 "Press to select multiple objects\n"
 "or move multiple objects with mouse"
 msgstr ""
-"Kliknij aby wybrać wiele modeli\n"
-"lub przesunąć je przy pomocy myszki"
+"Kliknij, aby wybrać wiele modeli\n"
+"lub przesunąć je przy pomocy myszy"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:195
-#, no-c-format
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:221
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:222
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:231
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:232
 msgid ""
-"Press to snap by 5% in Gizmo scale\n"
-"or to snap by 1mm in Gizmo move"
+"Press to speed up 5 times while moving thumb\n"
+"with arrow keys or mouse wheel"
 msgstr ""
-"Naciśnij, aby a przyciągać co 5% podczas skalowania z uchwytem\n"
-"lub przyciągać co 1 mm podczas przemieszczania z uchwytem"
+"Naciśnij, aby przyspieszyć suwak 5-krotnie\n"
+"podczas ruchu strzałkami lub kółkiem myszy"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:211 src/slic3r/GUI/Plater.cpp:4105
-#: src/slic3r/GUI/Tab.cpp:2390
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:212 src/slic3r/GUI/Plater.cpp:4052
+#: src/slic3r/GUI/Tab.cpp:2559
 msgid "Preview"
 msgstr "Podgląd cięcia"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:42
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:41
 msgid "Preview hollowed and drilled model"
-msgstr "Podgląd wydrążonego modelu z otworem"
+msgstr "Podgląd drążenia/wiercenia"
 
-#: src/slic3r/GUI/MainFrame.cpp:790
+#: src/slic3r/GUI/MainFrame.cpp:1491
 msgid "Previously sliced file ("
 msgstr "Poprzednio pocięty plik ("
 
-#: src/libslic3r/PrintConfig.cpp:1851
+#: src/libslic3r/PrintConfig.cpp:1993
 msgid "Prime all printing extruders"
 msgstr "Wyczyść wszystkie używane ekstrudery"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/slic3r/GUI/Preset.cpp:1521
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:51 src/libslic3r/Preset.cpp:1300
 msgid "print"
 msgstr "druk"
 
-#: src/slic3r/GUI/MainFrame.cpp:648
+#: src/slic3r/GUI/GCodeViewer.cpp:2436 src/slic3r/GUI/GCodeViewer.cpp:2451
+msgid "Print"
+msgstr "Druk"
+
+#: src/slic3r/GUI/MainFrame.cpp:1258
 msgid "Print &Host Upload Queue"
 msgstr "Kolej&ka zadań serwera druku"
 
-#: src/libslic3r/PrintConfig.cpp:471
+#: src/libslic3r/PrintConfig.cpp:507
 msgid "Print contour perimeters from the outermost one to the innermost one instead of the default inverse order."
 msgstr "Drukuj obrysy od zewnątrz do wewnątrz zamiast domyślnego ustawienia węwnątrz-zewnątrz."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:952
+#: src/slic3r/GUI/ConfigWizard.cpp:1318
 msgid "Print Diameters"
-msgstr "Średnice wydruku"
+msgstr "Średnice"
 
-#: src/slic3r/GUI/Tab.cpp:1944 src/slic3r/GUI/Tab.cpp:2123
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:209 src/slic3r/GUI/Tab.cpp:2024
 msgid "Print Host upload"
 msgstr "Wysyłanie do serwera druku"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:142
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
 #: src/slic3r/GUI/PrintHostDialogs.cpp:136
 msgid "Print host upload queue"
 msgstr "Kolejka serwera druku"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:970
+#: src/slic3r/GUI/DoubleSlider.cpp:1093
 msgid "Print mode"
 msgstr "Tryb drukowania"
 
-#: src/slic3r/GUI/Tab.hpp:328 src/slic3r/GUI/Tab.hpp:431
+#: src/slic3r/GUI/GCodeViewer.cpp:2579 src/slic3r/GUI/GUI_Preview.cpp:1476
+msgid "Print pauses"
+msgstr "Pauzuje wydruk"
+
+#: src/slic3r/GUI/Tab.hpp:378 src/slic3r/GUI/Tab.hpp:502
 msgid "Print Settings"
 msgstr "Ustawienia Druku"
 
-#: src/slic3r/GUI/Plater.cpp:815
+#: src/slic3r/GUI/Plater.cpp:690
 msgid "Print settings"
 msgstr "Ustawienia druku"
 
-#: src/slic3r/GUI/Tab.cpp:1478
+#: src/slic3r/GUI/GLCanvas3D.cpp:4303 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Print Settings Tab"
+msgstr "Ustawienia druku"
+
+#: src/slic3r/GUI/Tab.cpp:1824
 msgid "Print speed override"
 msgstr "Nadpisanie prędkości druku"
 
-#: src/libslic3r/GCode.cpp:638
+#: src/libslic3r/GCode.cpp:623
 msgid "Print z"
 msgstr "Druk z"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Print&er Settings Tab"
-msgstr "Ustawi&enia Drukarki"
+msgstr "Ustawi&enia drukarki"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1621
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1750
 msgid "Printable"
 msgstr "Do druku"
 
-#: src/slic3r/GUI/Plater.cpp:819
+#: src/slic3r/GUI/Plater.cpp:694
 msgid "Printer"
 msgstr "Drukarka"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/slic3r/GUI/Preset.cpp:1525
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:53 src/libslic3r/Preset.cpp:1304
 msgid "printer"
 msgstr "drukarka"
 
-#: src/libslic3r/PrintConfig.cpp:2439 src/libslic3r/PrintConfig.cpp:2440
+#: src/libslic3r/PrintConfig.cpp:2582 src/libslic3r/PrintConfig.cpp:2583
 msgid "Printer absolute correction"
 msgstr "Korekcje bezwzględne drukarki"
 
-#: src/libslic3r/PrintConfig.cpp:2456 src/libslic3r/PrintConfig.cpp:2457
+#: src/libslic3r/PrintConfig.cpp:2599 src/libslic3r/PrintConfig.cpp:2600
 msgid "Printer gamma correction"
 msgstr "Korekcja gamma drukarki"
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1294
 msgid "printer model"
 msgstr "model drukarki"
 
-#: src/libslic3r/PrintConfig.cpp:1472
+#: src/libslic3r/PrintConfig.cpp:1580
 msgid "Printer notes"
 msgstr "Notatki o drukarce"
 
-#: src/libslic3r/PrintConfig.cpp:2431 src/libslic3r/PrintConfig.cpp:2432
-#: src/libslic3r/PrintConfig.cpp:2433
+#: src/libslic3r/PrintConfig.cpp:144
+msgid "Printer preset name"
+msgstr "Nazwa zestawu ustawień drukarki"
+
+#: src/libslic3r/PrintConfig.cpp:2574 src/libslic3r/PrintConfig.cpp:2575
+#: src/libslic3r/PrintConfig.cpp:2576
 msgid "Printer scaling correction"
 msgstr "Korekcja skalowania drukarki"
 
-#: src/slic3r/GUI/Tab.hpp:391
+#: src/slic3r/GUI/Tab.hpp:453
 msgid "Printer Settings"
 msgstr "Ustawienia Drukarki"
 
+#: src/slic3r/GUI/GLCanvas3D.cpp:4305 src/slic3r/GUI/GLCanvas3D.cpp:4941
+msgid "Printer Settings Tab"
+msgstr "Ustawienia drukarki"
+
 #: src/libslic3r/PrintConfig.cpp:43 src/libslic3r/PrintConfig.cpp:44
 msgid "Printer technology"
 msgstr "Technologia druku"
 
-#: src/libslic3r/PrintConfig.cpp:1466
+#: src/libslic3r/PrintConfig.cpp:1574
 msgid "Printer type"
 msgstr "Rodzaj drukarki"
 
-#: src/libslic3r/PrintConfig.cpp:1487
+#: src/libslic3r/PrintConfig.cpp:1595
 msgid "Printer variant"
 msgstr "Wariant drukarki"
 
-#: src/libslic3r/PrintConfig.cpp:1481
+#: src/libslic3r/PrintConfig.cpp:1589
 msgid "Printer vendor"
 msgstr "Dostawca drukarki"
 
-#: src/libslic3r/Print.cpp:1388
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:476
+msgid "Printer with name \"%1%\" already exists."
+msgstr "Drukarka o nazwie \"%1%\" już istnieje."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:587
+msgid "Printer:"
+msgstr "Drukarka:"
+
+#: src/libslic3r/Print.cpp:1414
 msgid "Printing with multiple extruders of differing nozzle diameters. If support is to be printed with the current extruder (support_material_extruder == 0 or support_material_interface_extruder == 0), all nozzles have to be of the same diameter."
 msgstr "Druk ekstruderami o różnych średnicach dysz. Jeśli podpory mają być drukowane obecnie ustawionym ekstruderem (support_material_extruder == 0 lub support_material_interface_extruder == 0) to wszystkie dysze muszą mieć taką samą średnicę."
 
 #. TRN "Processing input_file_basename"
-#: src/slic3r/GUI/MainFrame.cpp:849
+#: src/slic3r/GUI/MainFrame.cpp:1550
 #, c-format
 msgid "Processing %s"
 msgstr "Przetwarzanie %s"
 
-#: src/slic3r/GUI/Plater.cpp:2283
-#, c-format
-msgid "Processing input file %s"
-msgstr "Przetwarzanie pliku wejściowego %s"
-
-#: src/libslic3r/PrintObject.cpp:108
+#: src/libslic3r/PrintObject.cpp:114
 msgid "Processing triangulated mesh"
 msgstr "Przetwarzanie siatki trójkątów"
 
-#: src/slic3r/GUI/Tab.cpp:1259 src/slic3r/GUI/Tab.cpp:1549
-#: src/slic3r/GUI/Tab.cpp:2020 src/slic3r/GUI/Tab.cpp:2136
-#: src/slic3r/GUI/Tab.cpp:3544 src/slic3r/GUI/Tab.cpp:3672
+#: src/slic3r/GUI/Tab.cpp:1589 src/slic3r/GUI/Tab.cpp:1896
+#: src/slic3r/GUI/Tab.cpp:2229 src/slic3r/GUI/Tab.cpp:2305
+#: src/slic3r/GUI/Tab.cpp:3960 src/slic3r/GUI/Tab.cpp:4091
 msgid "Profile dependencies"
 msgstr "Zależności profilowe"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:566
+#: src/slic3r/GUI/ConfigWizard.cpp:590
 msgid "Profile:"
 msgstr "Profil:"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:150
+#: src/slic3r/GUI/PrintHostDialogs.cpp:148
 msgid "Progress"
 msgstr "Postęp"
 
@@ -5651,23 +6566,35 @@ msgstr "Postęp"
 msgid "Progress:"
 msgstr "Postęp:"
 
-#: src/slic3r/GUI/MainFrame.cpp:684
+#: src/slic3r/GUI/MainFrame.cpp:909 src/slic3r/GUI/MainFrame.cpp:1308
 msgid "Prusa 3D &Drivers"
 msgstr "Sterowniki Prusa 3&D"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1995
+#: src/slic3r/GUI/ConfigWizard.cpp:2506
 msgid "Prusa FFF Technology Printers"
 msgstr "Drukarki Prusa w technologii FFF"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1998
+#: src/slic3r/GUI/ConfigWizard.cpp:2509
 msgid "Prusa MSLA Technology Printers"
 msgstr "Drukarki Prusa w technologii MSLA"
 
-#: src/slic3r/GUI/AboutDialog.cpp:260
-msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
-msgstr "PrusaSlicer bazuje na projekcie Slic3r autorstwa Alessandro Ranelucciego i społeczności RepRap."
+#: src/slic3r/Utils/Http.cpp:78
+msgid "PrusaSlicer detected system SSL certificate store in: %1%"
+msgstr "PrusaSlicer wykrył systemowy magazyn certyfikatów SSL w: %1%"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:284
+#: src/slic3r/GUI/GUI_Init.cpp:85 src/slic3r/GUI/GUI_Init.cpp:88
+msgid "PrusaSlicer GUI initialization failed"
+msgstr "Niepowodzenie inicjalizacji PrusaSlicer GUI"
+
+#: src/slic3r/GUI/AboutDialog.cpp:285
+msgid "PrusaSlicer is based on Slic3r by Alessandro Ranellucci and the RepRap community."
+msgstr "PrusaSlicer bazuje na projekcie Slic3r autorstwa Alessandro Ranellucciego i społeczności RepRap."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:525
+msgid "PrusaSlicer is closing: Unsaved Changes"
+msgstr "Zamykanie PrusaSlicer: niezapisane zmiany"
+
+#: src/slic3r/GUI/OpenGLManager.cpp:259
 #, c-format
 msgid ""
 "PrusaSlicer requires OpenGL 2.0 capable graphics driver to run correctly, \n"
@@ -5680,7 +6607,11 @@ msgstr ""
 msgid "PrusaSlicer version"
 msgstr "wersja PrusaSlicer"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:815
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:662
+msgid "PrusaSlicer will remember your action."
+msgstr "PrusaSlicer zapamięta tą czynność."
+
+#: src/slic3r/GUI/ConfigWizard.cpp:1174
 msgid ""
 "PrusaSlicer's user interfaces comes in three variants:\n"
 "Simple, Advanced, and Expert.\n"
@@ -5690,64 +6621,80 @@ msgstr ""
 "Prosty, Zaawansowany i Ekspercki.\n"
 "Tryb Prosty wyświetla tylko najczęściej używane ustawienia potrzebne w codziennym druku 3D. Pozostałe dwa oferują coraz większe możliwości konfiguracji i są przeznaczone odpowiednio dla użytkowników zaawansowanych i ekspertów."
 
-#: src/libslic3r/PrintConfig.cpp:2254
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:668
+msgid "PrusaSlicer: Don't ask me again"
+msgstr "PrusaSlicer: nie pytaj ponownie"
+
+#: src/libslic3r/PrintConfig.cpp:2397
 msgid "Purging after toolchange will done inside this object's infills. This lowers the amount of waste but may result in longer print time  due to additional travel moves."
 msgstr "Czyszczenie po zmianie filamentu następować wewnątrz wypełnienia tego modelu. Obniża to ilość zużywanego materiału, jednak może skutkować wydłużeniem czasu druku przez dodatkowe ruchy jałowe."
 
-#: src/slic3r/GUI/Plater.cpp:544
+#: src/slic3r/GUI/Plater.cpp:410
 msgid "Purging volumes"
 msgstr "Objętości czyszczenia"
 
-#: src/libslic3r/PrintConfig.cpp:2207
+#: src/libslic3r/PrintConfig.cpp:2350
 msgid "Purging volumes - load/unload volumes"
 msgstr "Objętość czyszczenia - objętość ładowania/rozładowania"
 
-#: src/libslic3r/PrintConfig.cpp:2214
+#: src/libslic3r/PrintConfig.cpp:2357
 msgid "Purging volumes - matrix"
 msgstr "Objętości czyszczenia - formuła"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:44
+#: src/libslic3r/PrintConfig.cpp:1201
+msgid "Purpose of Machine Limits"
+msgstr "Cel limitów maszynowych"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:43
 msgid "Quality"
 msgstr "Jakość"
 
-#: src/slic3r/GUI/Tab.cpp:1080
+#: src/slic3r/GUI/Tab.cpp:1402
 msgid "Quality (slower slicing)"
 msgstr "Jakość (wolniejsze cięcie)"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:273
+#: src/slic3r/GUI/GLCanvas3D.cpp:260
 msgid "Quality / Speed"
 msgstr "Jakość / Prędkość"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1182
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1530
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1536
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1849
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:61
+msgid "Quick"
+msgstr "Szybka"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1306
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1661
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1667
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2008
 #, c-format
 msgid "Quick Add Settings (%s)"
-msgstr "Szybkie Dodanie Ustawień (%s)"
+msgstr "Szybkie dodanie ustawień (%s)"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Quick Slice"
 msgstr "Szybkie Cięcie"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Quick Slice and Save As"
 msgstr "Szybkie cięcie i Zapis jako"
 
-#: src/slic3r/GUI/MainFrame.cpp:540
+#: src/slic3r/GUI/MainFrame.cpp:1144 src/slic3r/GUI/MainFrame.cpp:1402
 #, c-format
 msgid "Quit %s"
 msgstr "Wyjście z %s"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:294 src/libslic3r/PrintConfig.cpp:511
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Quit, I will move my data now"
+msgstr "Zamknij, przeniosę teraz swoje dane"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:280 src/libslic3r/PrintConfig.cpp:547
 msgid "Radius"
 msgstr "Promień"
 
-#: src/slic3r/GUI/Tab.cpp:1127
+#: src/slic3r/GUI/Tab.cpp:1456
 msgid "Raft"
 msgstr "Tratwa (raft)"
 
-#: src/libslic3r/PrintConfig.cpp:1501
+#: src/libslic3r/PrintConfig.cpp:1609
 msgid "Raft layers"
 msgstr "Warstwy tratwy"
 
@@ -5761,7 +6708,7 @@ msgid ""
 "\n"
 "This is an expert-level setting, incorrect adjustment will likely lead to jams, extruder wheel grinding into filament etc."
 msgstr ""
-"Wyciskanie oznacza szybką ekstruzję bezpośrednio przed zmianą narzędzia w drukarce typu MultiMaterial z jednym ekstruderem (narzędzie w tym przypadku oznacza filament). Jego zadaniem jest odpowiednie ukształtowanie końcówki rozładowywanego filamentu, aby jego ponowne załadowanie mogło odbyć się bez przeszkód. Ta faza procesu zmiany filamentu jest bardzo ważna a różne filamenty mogą potrzebować różnej prędkości wyciskania aby uzyskać odpowiedni kształt końcówki. Z tego powodu można edytować jego parametry.\n"
+"Wyciskanie oznacza szybką ekstruzję bezpośrednio przed zmianą narzędzia w drukarce typu MultiMaterial z jednym ekstruderem (narzędzie w tym przypadku oznacza filament). Jego zadaniem jest odpowiednie ukształtowanie końcówki rozładowywanego filamentu, aby jego ponowne załadowanie mogło odbyć się bez przeszkód. Ta faza procesu zmiany filamentu jest bardzo ważna, a różne filamenty mogą potrzebować różnej prędkości wyciskania aby uzyskać odpowiedni kształt końcówki. Z tego powodu można edytować jego parametry.\n"
 "\n"
 "To jest ustawienie dla zaawansowanych użytkowników. Nieprawidłowe wartości mogą powodować blokady, ścieranie filamentu przez radełko itp."
 
@@ -5773,27 +6720,27 @@ msgstr "Rozstaw linii wyciskania"
 msgid "Ramming line width"
 msgstr "Szerokość linii wyciskania"
 
-#: src/libslic3r/PrintConfig.cpp:694
+#: src/libslic3r/PrintConfig.cpp:730
 msgid "Ramming parameters"
 msgstr "Parametry wyciskania"
 
-#: src/slic3r/GUI/Tab.cpp:1505
+#: src/slic3r/GUI/Tab.cpp:1850
 msgid "Ramming settings"
 msgstr "Ustawienia wyciskania"
 
-#: src/libslic3r/PrintConfig.cpp:1629
+#: src/libslic3r/PrintConfig.cpp:1737
 msgid "Random"
 msgstr "Dowolny"
 
-#: src/slic3r/GUI/ObjectDataViewModel.cpp:94
+#: src/slic3r/GUI/ObjectDataViewModel.cpp:96
 msgid "Range"
 msgstr "Zakres"
 
-#: src/libslic3r/SLAPrintSteps.cpp:65
+#: src/libslic3r/SLAPrintSteps.cpp:66
 msgid "Rasterizing layers"
 msgstr "Rasteryzowanie warstw"
 
-#: src/slic3r/GUI/MainFrame.cpp:596
+#: src/slic3r/GUI/MainFrame.cpp:1202
 msgid "Re&load from disk"
 msgstr "Wczytaj ponownie z d&ysku"
 
@@ -5805,58 +6752,59 @@ msgstr "Ponowna konfiguracja"
 msgid "Ready"
 msgstr "Gotowe"
 
-#: src/slic3r/GUI/Plater.cpp:3115
+#: src/slic3r/GUI/Plater.cpp:2915
 msgid "Ready to slice"
 msgstr "Gotowość do cięcia"
 
-#: src/slic3r/GUI/MainFrame.cpp:669 src/libslic3r/PrintConfig.cpp:1632
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
+#: src/libslic3r/PrintConfig.cpp:1740
 msgid "Rear"
 msgstr "Tył"
 
-#: src/slic3r/GUI/MainFrame.cpp:669
+#: src/slic3r/GUI/MainFrame.cpp:966 src/slic3r/GUI/MainFrame.cpp:1286
 msgid "Rear View"
 msgstr "Widok z tyłu"
 
-#: src/slic3r/GUI/MainFrame.cpp:413
+#: src/slic3r/GUI/MainFrame.cpp:994
 msgid "Recent projects"
 msgstr "Ostatni&e projekty"
 
-#: src/slic3r/GUI/PresetHints.cpp:263
+#: src/slic3r/GUI/PresetHints.cpp:262
 #, c-format
 msgid "Recommended object thin wall thickness for layer height %.2f and"
 msgstr "Zalecana grubość ściany modelu dla wysokości warstwy %.2f i"
 
-#: src/slic3r/GUI/PresetHints.cpp:274
+#: src/slic3r/GUI/PresetHints.cpp:273
 msgid "Recommended object thin wall thickness: Not available due to excessively small extrusion width."
 msgstr "Zalecana grubość ścian dla modelu: niedostępna ze względu na zbyt małą szerokość ścieżki."
 
-#: src/slic3r/GUI/PresetHints.cpp:247
+#: src/slic3r/GUI/PresetHints.cpp:246
 msgid "Recommended object thin wall thickness: Not available due to invalid layer height."
 msgstr "Zalecana grubość ścian dla modelu: niedostępna ze względu na niewłaściwą wysokość warstwy."
 
-#: src/slic3r/GUI/GUI_App.cpp:450 src/slic3r/GUI/GUI_App.cpp:459
+#: src/slic3r/GUI/GUI_App.cpp:1102 src/slic3r/GUI/GUI_App.cpp:1115
 msgid "Recreating"
 msgstr "Odtwarzanie"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:73
+#: src/slic3r/GUI/BedShapeDialog.cpp:141
 msgid "Rectangular"
 msgstr "Prostokątny"
 
-#: src/libslic3r/PrintConfig.cpp:425 src/libslic3r/PrintConfig.cpp:843
-#: src/libslic3r/PrintConfig.cpp:2009
+#: src/libslic3r/PrintConfig.cpp:460 src/libslic3r/PrintConfig.cpp:881
+#: src/libslic3r/PrintConfig.cpp:2151
 msgid "Rectilinear"
 msgstr "Linie równoległe"
 
-#: src/libslic3r/PrintConfig.cpp:2010
+#: src/libslic3r/PrintConfig.cpp:2152
 msgid "Rectilinear grid"
 msgstr "Linie równoległe - kratka"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4657 src/slic3r/GUI/KBShortcutsDialog.cpp:131
-#: src/slic3r/GUI/MainFrame.cpp:584
+#: src/slic3r/GUI/GLCanvas3D.cpp:5067 src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/MainFrame.cpp:1190
 msgid "Redo"
 msgstr "Powtórz"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Redo %1$d Action"
 msgid_plural "Redo %1$d Actions"
@@ -5865,152 +6813,184 @@ msgstr[1] "Powtórz %1$d akcje"
 msgstr[2] "Powtórz %1$d akcji"
 msgstr[3] "Powtórz %1$d akcji"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Redo History"
 msgstr "Historia Powtórzeń"
 
-#: src/slic3r/GUI/Tab.cpp:1098
+#: src/slic3r/GUI/Tab.cpp:1426
 msgid "Reducing printing time"
 msgstr "Obniżanie czasu wydruku"
 
-#: src/slic3r/GUI/Plater.cpp:3452
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:327
+msgid "Refresh Printers"
+msgstr "Odśwież drukarki"
+
+#: src/libslic3r/PrintConfig.cpp:145
+msgid "Related printer preset name"
+msgstr "Nazwa powiązanego zestawu ustawień drukarki"
+
+#: src/slic3r/GUI/Plater.cpp:3257
 msgid "Reload all from disk"
 msgstr "Wczytaj ponownie wszystko z dysku"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:798 src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3225
-#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/ConfigWizard.cpp:1157 src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3028
+#: src/slic3r/GUI/Plater.cpp:3852 src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload from disk"
 msgstr "Wczytaj ponownie z dysku"
 
-#: src/slic3r/GUI/Plater.cpp:3339
+#: src/slic3r/GUI/Plater.cpp:3142
 msgid "Reload from:"
 msgstr "Wczytaj z:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:129
 msgid "Reload plater from disk"
 msgstr "Przeładuj wirtualny stół z dysku"
 
-#: src/slic3r/GUI/MainFrame.cpp:597
+#: src/slic3r/GUI/MainFrame.cpp:1203
 msgid "Reload the plater from disk"
 msgstr "Przeładuj wirtualny stół z dysku"
 
-#: src/slic3r/GUI/Plater.cpp:3963
+#: src/slic3r/GUI/Plater.cpp:3881
 msgid "Reload the selected object from disk"
 msgstr "Wczytaj wybrany model ponownie z dysku"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1664
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3956 src/slic3r/GUI/Plater.cpp:3934
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1793
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4439 src/slic3r/GUI/Plater.cpp:3852
 msgid "Reload the selected volumes from disk"
 msgstr "Wczytaj wybrane kształty ponownie z dysku"
 
-#: src/slic3r/GUI/Preferences.cpp:39
+#: src/slic3r/GUI/GCodeViewer.cpp:2442 src/slic3r/GUI/GCodeViewer.cpp:2445
+msgid "Remaining time"
+msgstr "Pozostały czas"
+
+#: src/slic3r/GUI/GUI_App.cpp:720 src/slic3r/GUI/UnsavedChangesDialog.cpp:653
+msgid "Remember my choice"
+msgstr "Zapamiętaj mój wybór"
+
+#: src/slic3r/GUI/Preferences.cpp:52
 msgid "Remember output directory"
 msgstr "Zapamiętaj katalog wyjściowy"
 
-#: src/slic3r/GUI/Tab.cpp:3121
+#: src/slic3r/GUI/MainFrame.cpp:166
+msgid "Remember to check for updates at https://github.com/prusa3d/PrusaSlicer/releases"
+msgstr "Pamiętaj, aby sprawdzać aktualizacje na https://github.com/prusa3d/PrusaSlicer/releases"
+
+#: src/slic3r/GUI/Tab.cpp:3386
 msgid "remove"
 msgstr "usuń"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:190 src/slic3r/GUI/BedShapeDialog.cpp:269
-#: src/slic3r/GUI/Tab.cpp:3124
+#: src/slic3r/GUI/BedShapeDialog.cpp:333 src/slic3r/GUI/BedShapeDialog.cpp:413
+#: src/slic3r/GUI/Tab.cpp:3423
 msgid "Remove"
 msgstr "Usuń"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
 msgid "Remove all holes"
 msgstr "Usuń wszystkie otwory"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
 msgid "Remove all points"
 msgstr "Usuń wszystkie punkty"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:246
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:52
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:35
+msgid "Remove all selection"
+msgstr "Usuń całe zaznaczenie"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:239
 msgid "Remove detail"
 msgstr "Niższa szczegółowość"
 
-#: src/slic3r/GUI/Plater.cpp:879
-msgid "Remove device"
-msgstr "Odłącz urządzenie"
-
 #: src/slic3r/GUI/ExtruderSequenceDialog.cpp:182
 msgid "Remove extruder from sequence"
 msgstr "Usuń ekstruder z sekwencji"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4537 src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/GLCanvas3D.cpp:4903 src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove instance"
 msgstr "Usuń instancję"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:160
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:154
 msgid "Remove Instance of the selected object"
 msgstr "Usuń instancję zaznaczonego modelu"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:153
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:161
 msgid "Remove layer range"
 msgstr "Usuń zakres warstw"
 
-#: src/slic3r/GUI/Plater.cpp:3942
+#: src/slic3r/GUI/Plater.cpp:3860
 msgid "Remove one instance of the selected object"
 msgstr "Usuń jedną instancję zaznaczonego modelu"
 
-#: src/slic3r/GUI/GUI_ObjectSettings.cpp:95
+#: src/slic3r/GUI/GUI_ObjectSettings.cpp:98
 msgid "Remove parameter"
 msgstr "Usuń parametr"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Remove point"
 msgstr "Usuń punkt"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1367
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1214
 msgid "Remove point from selection"
 msgstr "Usuń punkt z zaznaczenia"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:47
 msgid "Remove selected holes"
 msgstr "Usuń zaznaczone otwory"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:50
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1371
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:49
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1218
 msgid "Remove selected points"
 msgstr "Usuń zaznaczone punkty"
 
-#: src/slic3r/GUI/Plater.cpp:3931 src/slic3r/GUI/Plater.cpp:3953
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:51
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:34
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:368
+#: src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp:378
+msgid "Remove selection"
+msgstr "Usuń zaznaczenie"
+
+#: src/slic3r/GUI/Plater.cpp:3849 src/slic3r/GUI/Plater.cpp:3871
 msgid "Remove the selected object"
 msgstr "Usuń wybrany model"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:453
+#: src/slic3r/GUI/ConfigWizard.cpp:456
 msgid "Remove user profiles (a snapshot will be taken beforehand)"
 msgstr "Usuń profile użytkownika (zostanie wykonany zrzut)"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1636
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1765
 msgid "Rename"
 msgstr "Zmień nazwę"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Object"
 msgstr "Zmień Nazwę Modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:589
 msgid "Rename Sub-object"
 msgstr "Zmień Nazwę Modelu Podrzędnego"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3803
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4266
 msgid "Renaming"
 msgstr "Zmiana nazwy"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:115
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:150
 msgid "Renaming of the G-code after copying to the selected destination folder has failed. Current path is %1%.tmp. Please try exporting again."
 msgstr "Niepowodzenie zmiany nazwy pliku G-code po skopiowaniu do folderu docelowego. Obecna ścieżka to %1%.tmp. Spróbuj wyeksportować G-code ponownie."
 
-#: src/libslic3r/PrintConfig.cpp:3515
+#: src/slic3r/GUI/Preferences.cpp:255
+msgid "Render"
+msgstr "Render"
+
+#: src/libslic3r/PrintConfig.cpp:3720
 msgid "Render with a software renderer"
 msgstr "Renderuj programowo"
 
-#: src/libslic3r/PrintConfig.cpp:3516
+#: src/libslic3r/PrintConfig.cpp:3721
 msgid "Render with a software renderer. The bundled MESA software renderer is loaded instead of the default OpenGL driver."
 msgstr "Renderowanie software'owe. Dołączony silnik MESA zostanie użyty zamiast domyślnego OpenGL."
 
-#: src/slic3r/GUI/MainFrame.cpp:911 src/libslic3r/PrintConfig.cpp:3447
+#: src/slic3r/GUI/MainFrame.cpp:1612 src/libslic3r/PrintConfig.cpp:3646
 msgid "Repair"
 msgstr "Naprawa"
 
@@ -6034,38 +7014,38 @@ msgstr "Naprawiony plik 3MF nie zawiera żadnej objętości"
 msgid "Repairing model by the Netfabb service"
 msgstr "Naprawianie modelu przez usługę Netfabb"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat last quick slice"
 msgstr "Powtórz ostatnie szybkie cięcie"
 
-#: src/slic3r/GUI/MainFrame.cpp:524
+#: src/slic3r/GUI/MainFrame.cpp:1125
 msgid "Repeat Last Quick Slice"
 msgstr "Powtórz Ostatnie Szybkie Cięcie"
 
-#: src/slic3r/GUI/Tab.cpp:3083
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:477
 msgid "Replace?"
 msgstr "Zamienić?"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
 msgid "Report an I&ssue"
 msgstr "Zgło&szenie problemu"
 
-#: src/slic3r/GUI/MainFrame.cpp:703
+#: src/slic3r/GUI/MainFrame.cpp:928 src/slic3r/GUI/MainFrame.cpp:1327
 #, c-format
 msgid "Report an issue on %s"
 msgstr "Zgłoś problem z %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:713
+#: src/slic3r/Utils/PresetUpdater.cpp:733
 #, c-format
 msgid "requires max. %s"
 msgstr "wymaga max %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:710
+#: src/slic3r/Utils/PresetUpdater.cpp:730
 #, c-format
 msgid "requires min. %s"
 msgstr "wymaga min. %s"
 
-#: src/slic3r/Utils/PresetUpdater.cpp:705
+#: src/slic3r/Utils/PresetUpdater.cpp:726
 #, c-format
 msgid "requires min. %s and max. %s"
 msgstr "wymaga min. %s i max. %s"
@@ -6074,270 +7054,300 @@ msgstr "wymaga min. %s i max. %s"
 msgid "Rescan"
 msgstr "Skanuj ponownie"
 
-#: src/slic3r/GUI/Tab.cpp:1906
-msgid "Rescan serial ports"
-msgstr "Przeskanuj porty szeregowe"
-
-#: src/slic3r/GUI/GLCanvas3D.cpp:313
+#: src/slic3r/GUI/GLCanvas3D.cpp:299
 msgid "Reset"
 msgstr "Reset"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1373
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1220
 msgid "Reset clipping plane"
 msgstr "Reset płaszczyzny przecinania"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:59
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:43
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:26
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:58
 msgid "Reset direction"
 msgstr "Reset kierunku"
 
-#: src/slic3r/GUI/Plater.cpp:2723
+#: src/slic3r/GUI/Plater.cpp:2684
 msgid "Reset Project"
 msgstr "Resetuj Projekt"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:363
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:372
 msgid "Reset rotation"
 msgstr "Resetuj obrót"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:385
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:394
 msgid "Reset Rotation"
 msgstr "Resetuj Obrót"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:397
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:399
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:407
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:409
 msgid "Reset scale"
 msgstr "Resetuj skalę"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:252
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:136
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:118
+msgid "Reset selection"
+msgstr "Reset zaznaczenia"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:243
 msgid "Reset to base"
 msgstr "Resetuj do bazowego ust"
 
-#: src/slic3r/GUI/Tab.cpp:2394
+#: src/slic3r/GUI/Tab.cpp:2564
 msgid "Reset to Filament Color"
 msgstr "Zresetuj do koloru filamentu"
 
-#: src/libslic3r/PrintConfig.cpp:1511
+#: src/libslic3r/PrintConfig.cpp:1619
 msgid "Resolution"
 msgstr "Rozdzielczość"
 
-#: src/libslic3r/PrintConfig.cpp:1529
+#: src/libslic3r/PrintConfig.cpp:1637
 msgid "Retract amount before wipe"
 msgstr "Długość retrakcji przed ruchem czyszczącym"
 
-#: src/libslic3r/PrintConfig.cpp:1537
+#: src/libslic3r/PrintConfig.cpp:1645
 msgid "Retract on layer change"
 msgstr "Retrakcja przy zmianie warstwy"
 
-#: src/slic3r/GUI/Tab.cpp:1324 src/slic3r/GUI/Tab.cpp:1383
-#: src/slic3r/GUI/Tab.cpp:2370
+#: src/slic3r/GUI/GCodeViewer.cpp:2494 src/slic3r/GUI/Tab.cpp:1670
+#: src/slic3r/GUI/Tab.cpp:2539
 msgid "Retraction"
 msgstr "Retrakcja"
 
-#: src/libslic3r/PrintConfig.cpp:1523
+#: src/libslic3r/PrintConfig.cpp:1631
 msgid "Retraction is not triggered when travel moves are shorter than this length."
 msgstr "Retrakcja nie zostanie wykonana przy ruchu jałowym krótszym niż ta wartość."
 
-#: src/libslic3r/PrintConfig.cpp:1544
+#: src/libslic3r/PrintConfig.cpp:1652
 msgid "Retraction Length"
 msgstr "Długość retrakcji"
 
-#: src/libslic3r/PrintConfig.cpp:1552
+#: src/libslic3r/PrintConfig.cpp:1660
 msgid "Retraction Length (Toolchange)"
 msgstr "Długość Retrakcji (zmiana narzędzia)"
 
-#: src/libslic3r/PrintConfig.cpp:1604 src/libslic3r/PrintConfig.cpp:1605
+#: src/libslic3r/PrintConfig.cpp:1712 src/libslic3r/PrintConfig.cpp:1713
 msgid "Retraction Speed"
 msgstr "Prędkość retrakcji"
 
-#: src/slic3r/GUI/Tab.cpp:2386
+#: src/slic3r/GUI/Tab.cpp:2555
 msgid "Retraction when tool is disabled (advanced settings for multi-extruder setups)"
 msgstr "Retrakcja gdy dany ekstruder nie jest w użyciu (funkcja zaawansowana dla drukarek z kilkoma ekstruderami)"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:254
+#: src/slic3r/GUI/GCodeViewer.cpp:2528 src/slic3r/GUI/GUI_Preview.cpp:336
+#: src/slic3r/GUI/GUI_Preview.cpp:1472
 msgid "Retractions"
 msgstr "Retrakcje"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/Preferences.cpp:198
+msgid "Reverse direction of zoom with mouse wheel"
+msgstr "Odwróć kierunek zoomu kółkiem myszy"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1861 src/slic3r/GUI/Plater.cpp:4886
+msgid "Revert conversion from imperial units"
+msgstr "Odwróć konwersję z jednostek imperialnych"
+
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right"
 msgstr "Prawo"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:402
+#: src/slic3r/GUI/GUI_ObjectList.cpp:449
 msgid "Right button click the icon to change the object printable property"
 msgstr "Kliknij na ikonę prawym przyciskiem, aby włączyć/wyłączyć drukowanie modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:396
+#: src/slic3r/GUI/GUI_ObjectList.cpp:443
 msgid "Right button click the icon to change the object settings"
 msgstr "Kliknij na ikonę prawym przyciskiem, aby zmienić ustawienia modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:359
+#: src/slic3r/GUI/GUI_ObjectList.cpp:406
 msgid "Right button click the icon to fix STL through Netfabb"
 msgstr "Kliknij prawym przyciskiem myszy na ikonę, aby naprawić plik STL przez serwis Netfabb"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1364
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1211
 msgid "Right click"
 msgstr "Prawy przycisk"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:243
-msgid "Right mouse button:"
-msgstr "Prawy przycisk myszki:"
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:48
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:31
+msgid "Right mouse button"
+msgstr "Prawy przycisk myszy"
 
-#: src/slic3r/GUI/MainFrame.cpp:673
+#: src/slic3r/GUI/GLCanvas3D.cpp:237
+msgid "Right mouse button:"
+msgstr "Prawy przycisk myszy:"
+
+#: src/slic3r/GUI/MainFrame.cpp:970 src/slic3r/GUI/MainFrame.cpp:1290
 msgid "Right View"
 msgstr "Widok prawy"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:449
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:480
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:499
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:517
-#: src/libslic3r/PrintConfig.cpp:3451
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:513
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:527
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:546
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:562
+#: src/libslic3r/PrintConfig.cpp:3650
 msgid "Rotate"
 msgstr "Obróć"
 
-#: src/libslic3r/PrintConfig.cpp:3456
+#: src/libslic3r/PrintConfig.cpp:3655
 msgid "Rotate around X"
 msgstr "Obróć wokół osi X"
 
-#: src/libslic3r/PrintConfig.cpp:3461
+#: src/libslic3r/PrintConfig.cpp:3660
 msgid "Rotate around Y"
 msgstr "Obróć wokół osi Y"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:170
+#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:172
 msgid "Rotate lower part upwards"
 msgstr "Obróć dolną część do góry nogami"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:170
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:164
 msgid "Rotate selection 45 degrees CCW"
 msgstr "Obróć zaznaczone o 45 stopni w lewo"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:171
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:165
 msgid "Rotate selection 45 degrees CW"
 msgstr "Obróć zaznaczone o 45 stopni w prawo"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:216
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:458
-#: src/slic3r/GUI/Mouse3DController.cpp:304
-#: src/slic3r/GUI/Mouse3DController.cpp:321
+#: src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp:210
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:224
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:506
+#: src/slic3r/GUI/Mouse3DController.cpp:288
+#: src/slic3r/GUI/Mouse3DController.cpp:309
 msgid "Rotation"
 msgstr "Obrót"
 
-#: src/libslic3r/PrintConfig.cpp:3457
+#: src/libslic3r/PrintConfig.cpp:3656
 msgid "Rotation angle around the X axis in degrees."
 msgstr "Kąt obrotu w stopniach wokół osi X."
 
-#: src/libslic3r/PrintConfig.cpp:3462
+#: src/libslic3r/PrintConfig.cpp:3661
 msgid "Rotation angle around the Y axis in degrees."
 msgstr "Kąt obrotu w stopniach wokół osi Y."
 
-#: src/libslic3r/PrintConfig.cpp:3452
+#: src/libslic3r/PrintConfig.cpp:3651
 msgid "Rotation angle around the Z axis in degrees."
 msgstr "Kąt obrotu w stopniach wokół osi Z."
 
-#: src/slic3r/GUI/GUI_App.cpp:797
+#: src/slic3r/GUI/GUI_App.cpp:1474
 #, c-format
 msgid "Run %s"
 msgstr "Uruchom %s"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:128
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:478
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:163
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:520
 msgid "Running post-processing scripts"
 msgstr "Wykonywanie skryptów przetwarzania końcowego (post-processing)"
 
 #: src/slic3r/GUI/RammingChart.cpp:76 src/slic3r/GUI/WipeTowerDialog.cpp:83
-#: src/libslic3r/PrintConfig.cpp:644 src/libslic3r/PrintConfig.cpp:688
-#: src/libslic3r/PrintConfig.cpp:703 src/libslic3r/PrintConfig.cpp:2408
-#: src/libslic3r/PrintConfig.cpp:2417 src/libslic3r/PrintConfig.cpp:2527
-#: src/libslic3r/PrintConfig.cpp:2535 src/libslic3r/PrintConfig.cpp:2543
-#: src/libslic3r/PrintConfig.cpp:2550 src/libslic3r/PrintConfig.cpp:2558
-#: src/libslic3r/PrintConfig.cpp:2566
+#: src/libslic3r/PrintConfig.cpp:680 src/libslic3r/PrintConfig.cpp:724
+#: src/libslic3r/PrintConfig.cpp:739 src/libslic3r/PrintConfig.cpp:2551
+#: src/libslic3r/PrintConfig.cpp:2560 src/libslic3r/PrintConfig.cpp:2670
+#: src/libslic3r/PrintConfig.cpp:2678 src/libslic3r/PrintConfig.cpp:2686
+#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2701
+#: src/libslic3r/PrintConfig.cpp:2709
 msgid "s"
 msgstr ""
 
-#: src/slic3r/GUI/MainFrame.cpp:481 src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1072 src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end G-code"
 msgstr "Wyślij G-cod&e"
 
-#: src/slic3r/GUI/MainFrame.cpp:750
+#: src/slic3r/GUI/MainFrame.cpp:1449
 msgid "S&end to print"
 msgstr "W&yślij do druku"
 
-#. TRN Preset
-#: src/slic3r/GUI/Tab.cpp:3417
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:642
+msgid "Save"
+msgstr "Zapisz"
+
+#: src/slic3r/GUI/SavePresetDialog.cpp:72
 #, c-format
 msgid "Save %s as:"
 msgstr "Zapisz %s jako:"
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 #, c-format
 msgid "Save %s file as:"
 msgstr "Zapisz plik %s jako:"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1046
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:912
 msgid "Save changes?"
 msgstr "Zapisać zmiany?"
 
-#: src/libslic3r/PrintConfig.cpp:3386
+#: src/libslic3r/PrintConfig.cpp:3585
 msgid "Save config file"
 msgstr "Zapisz plik konfiguracyjny"
 
-#: src/slic3r/GUI/MainFrame.cpp:925
+#: src/slic3r/GUI/MainFrame.cpp:1626
 msgid "Save configuration as:"
 msgstr "Zapisz konfigurację jako:"
 
-#: src/libslic3r/PrintConfig.cpp:3387
+#: src/libslic3r/PrintConfig.cpp:3586
 msgid "Save configuration to the specified file."
 msgstr "Zapisz konfigurację jako wskazany plik."
 
 #. TRN "Save current Settings"
-#: src/slic3r/GUI/Tab.cpp:133
+#: src/slic3r/GUI/Tab.cpp:203
 #, c-format
 msgid "Save current %s"
 msgstr "Zapisz bieżące %s"
 
-#: src/slic3r/GUI/MainFrame.cpp:446
+#: src/slic3r/GUI/MainFrame.cpp:1028
 msgid "Save current project file"
 msgstr "Zapisz obecny projekt"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save current project file as"
 msgstr "Zapisz obecny projekt jako"
 
-#: src/slic3r/GUI/Plater.cpp:2604
+#: src/slic3r/GUI/Plater.cpp:2566
 msgid "Save file as:"
 msgstr "Zapisz plik jako:"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save G-code file as:"
 msgstr "Zapisz plik G-code jako:"
 
-#: src/slic3r/GUI/MainFrame.cpp:899
+#: src/slic3r/GUI/MainFrame.cpp:1600
 msgid "Save OBJ file (less prone to coordinate errors than STL) as:"
 msgstr "Zapisz plik OBJ (mniej podatny na błędy współrzędnych niż STL) jako:"
 
-#: src/slic3r/GUI/Tab.hpp:443
+#: src/slic3r/GUI/SavePresetDialog.cpp:190
+#: src/slic3r/GUI/SavePresetDialog.cpp:196
 msgid "Save preset"
 msgstr "Zapisz zestaw ustawień"
 
-#: src/slic3r/GUI/MainFrame.cpp:980
+#: src/slic3r/GUI/MainFrame.cpp:1681
 msgid "Save presets bundle as:"
 msgstr "Zapisz paczkę ustawień jako:"
 
-#: src/slic3r/GUI/MainFrame.cpp:450 src/slic3r/GUI/MainFrame.cpp:452
+#: src/slic3r/GUI/MainFrame.cpp:1032 src/slic3r/GUI/MainFrame.cpp:1034
 msgid "Save Project &as"
 msgstr "Zapisz Projekt j&ako"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:114
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:107
 msgid "Save project (3mf)"
 msgstr "Zapisz Projekt (3mf)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:115
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:108
 msgid "Save project as (3mf)"
 msgstr "Zapisz Projekt jako (3mf)"
 
-#: src/slic3r/GUI/Plater.cpp:4839
+#: src/slic3r/GUI/Plater.cpp:4975
 msgid "Save SL1 file as:"
 msgstr "Zapisz plik SL1 jako:"
 
-#: src/slic3r/GUI/MainFrame.cpp:838
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:744
+msgid "Save the selected options to preset \"%1%\"."
+msgstr "Zapisz wybrane opcje w zestawie ustawień \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Save the selected options."
+msgstr "Zapisz wybrane opcje."
+
+#: src/slic3r/GUI/MainFrame.cpp:1539
 msgid "Save zip file as:"
 msgstr "Zapisz plik .zip jako:"
 
@@ -6347,159 +7357,184 @@ msgstr "Zapisz plik .zip jako:"
 msgid "Saving mesh into the 3MF container failed."
 msgstr "Niepowodzenie zapisywania siatki jako 3MF."
 
-#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:47
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:230
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:500
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:518
-#: src/libslic3r/PrintConfig.cpp:3466
+#: src/slic3r/GUI/Gizmos/GLGizmoScale.cpp:78
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:238
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:547
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:563
+#: src/libslic3r/PrintConfig.cpp:3665
 msgid "Scale"
 msgstr "Skaluj"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:459
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:507
 msgid "Scale factors"
 msgstr "Współczynnik skalowania"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:196
-msgid ""
-"Scale selection to fit print volume\n"
-"in Gizmo scale"
-msgstr ""
-"Skaluj zaznaczenie do wielkości przestrzeni roboczej\n"
-"w skalowaniu z uchwytem"
-
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale the selected object to fit the print volume"
 msgstr "Skaluj wybrany model, aby zmieścił się w przestrzeni roboczej"
 
-#: src/libslic3r/PrintConfig.cpp:3475
+#: src/libslic3r/PrintConfig.cpp:3674
 msgid "Scale to Fit"
 msgstr "Skaluj, aby dopasować"
 
-#: src/slic3r/GUI/Selection.cpp:939
+#: src/slic3r/GUI/Selection.cpp:988
 msgid "Scale To Fit"
-msgstr "Skaluj aby zmieścić"
+msgstr "Skaluj, aby zmieścić"
 
-#: src/libslic3r/PrintConfig.cpp:3476
+#: src/libslic3r/PrintConfig.cpp:3675
 msgid "Scale to fit the given volume."
 msgstr "Skaluj, aby wypełnić zadaną objętość."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1724
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1852
 msgid "Scale to print volume"
 msgstr "Skaluj do obszaru roboczego"
 
-#: src/libslic3r/PrintConfig.cpp:3467
+#: src/libslic3r/PrintConfig.cpp:3666
 msgid "Scaling factor or percentage."
 msgstr "Współczynnik lub procent skalowania."
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:505
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:545
 msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"
 msgstr "Ustawianie harmonogramu przesyłania do `%1%`. Zobacz okno -> Kolejka serwera druku"
 
-#: src/libslic3r/PrintConfig.cpp:1621
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:46
+msgid "Seam painting"
+msgstr "Malowanie szwu"
+
+#: src/libslic3r/PrintConfig.cpp:1729
 msgid "Seam position"
 msgstr "Pozycja szwu"
 
-#: src/libslic3r/PrintConfig.cpp:1642
+#: src/libslic3r/PrintConfig.cpp:1750
 msgid "Seam preferred direction"
 msgstr "Preferowany kierunek szwu"
 
-#: src/libslic3r/PrintConfig.cpp:1651
+#: src/libslic3r/PrintConfig.cpp:1759
 msgid "Seam preferred direction jitter"
 msgstr "Kierunek jitter wyznaczany przez szew"
 
+#: src/slic3r/GUI/MainFrame.cpp:1207
+msgid "Searc&h"
+msgstr "Szu&kaj"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:4402 src/slic3r/GUI/GLCanvas3D.cpp:4957
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:130 src/slic3r/GUI/Search.cpp:426
+msgid "Search"
+msgstr "Szukaj"
+
+#: src/slic3r/GUI/ImGuiWrapper.cpp:803 src/slic3r/GUI/Search.cpp:460
+msgid "Search in English"
+msgstr "Szukaj po angielsku"
+
+#: src/slic3r/GUI/MainFrame.cpp:1216
+msgid "Search in settings"
+msgstr "Szukaj w ustawieniach"
+
+#: src/slic3r/GUI/Tab.cpp:222
+msgid "Search in settings [%1%]"
+msgstr "Szukaj w ustawieniach [%1%]"
+
 #: src/slic3r/GUI/BonjourDialog.cpp:218
 msgid "Searching for devices"
 msgstr "Wyszukiwanie urządzeń"
 
-#: src/slic3r/GUI/Plater.cpp:2858
+#: src/slic3r/GUI/Jobs/RotoptimizeJob.cpp:41
 msgid "Searching for optimal orientation"
 msgstr "Wyszukiwanie optymalnej orientacji"
 
-#: src/slic3r/GUI/GUI_App.cpp:1103
+#: src/slic3r/GUI/NotificationManager.hpp:321
+msgid "See more."
+msgstr "Zobacz więcej."
+
+#: src/slic3r/GUI/NotificationManager.hpp:322
+msgid "See Releases page."
+msgstr "Zobacz stronę z wydaniami (\"Releases\")."
+
+#: src/slic3r/GUI/GUI_App.cpp:1895
 msgid "Select a gcode file:"
 msgstr "Wybierz plik gcode:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:126
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:121
 msgid "Select all objects"
 msgstr "Zaznacz wszystkie modele"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1370
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1217
 msgid "Select all points"
 msgstr "Zaznacz wszystkie punkty"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1976
+#: src/slic3r/GUI/ConfigWizard.cpp:2487
 msgid "Select all standard printers"
 msgstr "Zaznacz wszystkie podstawowe drukarki"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1368
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1215
 msgid "Select by rectangle"
 msgstr "Zaznaczenie prostokątem"
 
-#: src/slic3r/GUI/MainFrame.cpp:944 src/slic3r/GUI/MainFrame.cpp:1006
+#: src/slic3r/GUI/MainFrame.cpp:1645 src/slic3r/GUI/MainFrame.cpp:1707
 msgid "Select configuration to load:"
 msgstr "Wybierz konfigurację do wczytania:"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:82
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:88
 msgid "Select coordinate space, in which the transformation will be performed."
 msgstr "Wybierz płaszczyznę, w której ma nastąpić przekształcenie."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3971
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4458
 msgid "Select extruder number:"
 msgstr "Wybierz numer ekstrudera:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:138
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:134
 msgid "Select Filament Settings Tab"
-msgstr "Wybierz Zakładkę Ustawień Filamentu"
+msgstr "Wybierz ustawienia filamentu"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:132
 msgid "Select Plater Tab"
 msgstr "Wybierz Zakładkę Podglądu Stołu"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:133
 msgid "Select Print Settings Tab"
-msgstr "Wybierz Zakładkę Ustawień Druku"
+msgstr "Wybierz ustawienia druku"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:139
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:135
 msgid "Select Printer Settings Tab"
-msgstr "Wybierz Zakładkę Ustawień Drukarki"
+msgstr "Wybierz ustawienia drukarki"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1265
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1396
 msgid "Select showing settings"
 msgstr "Wybierz widok ustawień"
 
-#: src/slic3r/GUI/GUI_App.cpp:629
+#: src/slic3r/GUI/GUI_App.cpp:1295
 msgid "Select the language"
 msgstr "Wybierz język"
 
-#: src/slic3r/GUI/Tab.cpp:57
+#: src/slic3r/GUI/Tab.cpp:108
 msgid "Select the print profiles this profile is compatible with."
 msgstr "Wybierz profile druku, z którymi kompatybilny jest ten profil."
 
-#: src/slic3r/GUI/Tab.cpp:51
+#: src/slic3r/GUI/Tab.cpp:102
 msgid "Select the printers this profile is compatible with."
 msgstr "Wybierz drukarki kompatybilne z tym profilem."
 
-#: src/slic3r/GUI/MainFrame.cpp:889
+#: src/slic3r/GUI/MainFrame.cpp:1590
 msgid "Select the STL file to repair:"
 msgstr "Wybierz plik STL do naprawy:"
 
-#: src/slic3r/GUI/Preferences.cpp:237
+#: src/slic3r/GUI/Preferences.cpp:391
 msgid "Select toolbar icon size in respect to the default one."
 msgstr "Wybierz rozmiar ikon w odniesieniu do domyślnego."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Select type of part"
 msgstr "Wybierz rodzaj części"
 
-#: src/slic3r/GUI/Plater.cpp:638
+#: src/slic3r/GUI/Plater.cpp:504
 msgid "Select what kind of pad do you need"
 msgstr "Wybierz rodzaj wymaganej podkładki"
 
-#: src/slic3r/GUI/Plater.cpp:498
+#: src/slic3r/GUI/Plater.cpp:364
 msgid "Select what kind of support do you need"
 msgstr "Wybierz rodzaj potrzebnych podpór"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1917
+#: src/slic3r/GUI/DoubleSlider.cpp:2135
 msgid ""
 "Select YES if you want to delete all saved tool changes, \n"
 "NO if you want all tool changes switch to color changes, \n"
@@ -6509,59 +7544,59 @@ msgstr ""
 "NIE, jeśli chcesz przełączyć zmiany narzędzi na zmiany koloru lub\n"
 "ANULUJ, aby pozostawić bez zmian."
 
-#: src/slic3r/GUI/Selection.cpp:146
+#: src/slic3r/GUI/Selection.cpp:191
 msgid "Selection-Add"
 msgstr "Zaznaczenie-Dodaj"
 
-#: src/slic3r/GUI/Selection.cpp:376
+#: src/slic3r/GUI/Selection.cpp:421
 msgid "Selection-Add All"
 msgstr "Zaznaczenie-Dodaj wszystko"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3299
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3762
 msgid "Selection-Add from list"
 msgstr "Zaznaczenie-Dodaj z listy"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6598
+#: src/slic3r/GUI/GLCanvas3D.cpp:7193
 msgid "Selection-Add from rectangle"
 msgstr "Zaznaczenie-Dodaj z prostokąta"
 
-#: src/slic3r/GUI/Selection.cpp:256
+#: src/slic3r/GUI/Selection.cpp:301
 msgid "Selection-Add Instance"
 msgstr "Zaznaczenie-Dodaj instancję"
 
-#: src/slic3r/GUI/Selection.cpp:219
+#: src/slic3r/GUI/Selection.cpp:264
 msgid "Selection-Add Object"
 msgstr "Zaznaczenie-Dodaj Model"
 
-#: src/slic3r/GUI/Selection.cpp:187
+#: src/slic3r/GUI/Selection.cpp:232
 msgid "Selection-Remove"
 msgstr "Zaznaczenie-Usuń"
 
-#: src/slic3r/GUI/Selection.cpp:402
+#: src/slic3r/GUI/Selection.cpp:447
 msgid "Selection-Remove All"
 msgstr "Zaznaczenie-Usuń Wszystko"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3291
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3754
 msgid "Selection-Remove from list"
 msgstr "Zaznaczenie-Usunięcie z listy"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:6617
+#: src/slic3r/GUI/GLCanvas3D.cpp:7212
 msgid "Selection-Remove from rectangle"
 msgstr "Zaznaczenie-Usuń z prostokąta"
 
-#: src/slic3r/GUI/Selection.cpp:275
+#: src/slic3r/GUI/Selection.cpp:320
 msgid "Selection-Remove Instance"
 msgstr "Zaznaczenie-Usuń kopię"
 
-#: src/slic3r/GUI/Selection.cpp:238
+#: src/slic3r/GUI/Selection.cpp:283
 msgid "Selection-Remove Object"
 msgstr "Zaznaczenie-Usuń model"
 
-#: src/slic3r/GUI/MainFrame.cpp:566
+#: src/slic3r/GUI/MainFrame.cpp:1172
 msgid "Selects all objects"
 msgstr "Zaznacza wszystkie modele"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:123 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:116 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send G-code"
 msgstr "Wyślij G-code"
 
@@ -6569,29 +7604,29 @@ msgstr "Wyślij G-code"
 msgid "Send G-Code to printer host"
 msgstr "Wyślij G-code do serwera druku"
 
-#: src/slic3r/GUI/MainFrame.cpp:481
+#: src/slic3r/GUI/MainFrame.cpp:1072
 msgid "Send to print current plate as G-code"
 msgstr "Wyślij zawartość stołu do druku jako G-code"
 
-#: src/slic3r/GUI/Plater.cpp:878 src/slic3r/GUI/Plater.cpp:5522
+#: src/slic3r/GUI/Plater.cpp:753 src/slic3r/GUI/Plater.cpp:5707
 msgid "Send to printer"
 msgstr "Wyślij do drukarki"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1305
+#: src/slic3r/GUI/GLCanvas3D.cpp:1312
 msgid "Seq."
 msgstr "Sekw."
 
-#: src/slic3r/GUI/Tab.cpp:1231
+#: src/slic3r/GUI/Tab.cpp:1561
 msgid "Sequential printing"
 msgstr "Drukowanie sekwencyjne (model po modelu)"
 
-#: src/slic3r/GUI/Tab.cpp:1901 src/libslic3r/PrintConfig.cpp:1661
-msgid "Serial port"
-msgstr "Port szeregowy"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:235
+msgid "Sequential Slider"
+msgstr "Suwak sekwencyjny"
 
-#: src/libslic3r/PrintConfig.cpp:1669
-msgid "Serial port speed"
-msgstr "Szybkość portu szeregowego"
+#: src/slic3r/GUI/Preferences.cpp:230
+msgid "Sequential slider applied only to top layer"
+msgstr "Suwak sekwencyjny stosowany tylko do górnej warstwy"
 
 #: src/slic3r/GUI/FirmwareDialog.cpp:807
 msgid "Serial port:"
@@ -6601,17 +7636,16 @@ msgstr "Port szeregowy:"
 msgid "Service name"
 msgstr "Nazwa usługi"
 
-#: src/slic3r/GUI/Tab.cpp:1802 src/slic3r/GUI/Tab.cpp:2046
-#: src/slic3r/GUI/Tab.cpp:3176
+#: src/slic3r/GUI/Tab.cpp:3509 src/slic3r/GUI/Tab.cpp:3588
 msgid "Set"
 msgstr "Ustaw"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1599
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1728
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Object"
 msgstr "Ustaw jako osobny model"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1611
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1740
 msgid "Set as a Separated Objects"
 msgstr "Ustaw jako Osobne Modele"
 
@@ -6619,7 +7653,7 @@ msgstr "Ustaw jako Osobne Modele"
 msgid "Set extruder change for every"
 msgstr "Ustaw zmianę ekstrudera dla każdej"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1671
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1800
 msgid "Set extruder for selected items"
 msgstr "Ustaw ekstruder dla wybranych elementów"
 
@@ -6627,7 +7661,7 @@ msgstr "Ustaw ekstruder dla wybranych elementów"
 msgid "Set extruder sequence"
 msgstr "Ustaw sekwencję ekstruderów"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1532
+#: src/slic3r/GUI/DoubleSlider.cpp:1728
 msgid "Set extruder sequence for the entire print"
 msgstr "Ustaw sekwencję ekstruderów dla całego wydruku"
 
@@ -6635,84 +7669,84 @@ msgstr "Ustaw sekwencję ekstruderów dla całego wydruku"
 msgid "Set extruder(tool) sequence"
 msgstr "Ustaw sekwencję ekstruderów (narzędzi)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:218
 msgid "Set lower thumb to current slider thumb"
 msgstr "Ustaw punkt zmiany koloru na poziomie dolnego suwaka"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:297
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:305
 msgid "Set Mirror"
 msgstr "Ustaw Odbicie"
 
-#: src/slic3r/GUI/Plater.cpp:3944
+#: src/slic3r/GUI/Plater.cpp:3862
 msgid "Set number of instances"
 msgstr "Ustaw liczbę kopii"
 
-#: src/slic3r/GUI/Plater.cpp:4756
+#: src/slic3r/GUI/Plater.cpp:4860
 #, c-format
 msgid "Set numbers of copies to %d"
 msgstr "Ustaw ilość instancji na %d"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:781
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:828
 msgid "Set Orientation"
 msgstr "Ustaw Orientację"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:750
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:797
 msgid "Set Position"
 msgstr "Ustaw Pozycję"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Printable"
 msgstr "Zaznacz do drukowania"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Printable Instance"
 msgstr "Włącz drukowanie kopii"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:846
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:893
 msgid "Set Scale"
 msgstr "Ustaw Skalę"
 
-#: src/libslic3r/PrintConfig.cpp:2393
+#: src/libslic3r/PrintConfig.cpp:2536
 msgid "Set the actual LCD display orientation inside the SLA printer. Portrait mode will flip the meaning of display width and height parameters and the output images will be rotated by 90 degrees."
 msgstr "Ustaw właściwą orientację ekranu LCD wewnątrz drukarki SLA. Tryb portretowy spowoduje zamianę parametrów szerokości i wysokości a obrazek wyjściowy będzie obrócony o 90 stopni."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:932
+#: src/slic3r/GUI/ConfigWizard.cpp:1298
 msgid "Set the shape of your printer's bed."
 msgstr "Ustaw kształt stołu roboczego drukarki."
 
-#: src/libslic3r/PrintConfig.cpp:556
+#: src/libslic3r/PrintConfig.cpp:592
 msgid "Set this to a non-zero value to allow a manual extrusion width. If left to zero, Slic3r derives extrusion widths from the nozzle diameter (see the tooltips for perimeter extrusion width, infill extrusion width etc). If expressed as percentage (for example: 230%), it will be computed over layer height."
-msgstr "Ustaw tą wartość jako niezerową aby pozwolić na ręczne ustawienie szerokości ekstrudowanej linii. Jeśli ustawisz zero, Slic3r obliczy szerokość ekstruzji na podstawie średnicy dyszy (zobacz wskazówki dla szerokości ekstruzji obrysów, wypełnienia itp). Jeśli ustawisz wartość procentową (np. 230%) to zostanie obliczona z wysokości warstwy."
+msgstr "Ustaw tą wartość jako niezerową, aby pozwolić na ręczne ustawienie szerokości ekstrudowanej linii. Jeśli ustawisz zero, PrusaSlicer obliczy szerokość ekstruzji na podstawie średnicy dyszy (zobacz wskazówki dla szerokości ekstruzji obrysów, wypełnienia itp). Jeśli ustawisz wartość procentową (np. 230%) to zostanie obliczona z wysokości warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:448
+#: src/libslic3r/PrintConfig.cpp:484
 msgid "Set this to a non-zero value to set a manual extrusion width for external perimeters. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%), it will be computed over layer height."
-msgstr "Ustaw tą wartość jako niezerową aby pozwolić na ręczne ustawienie szerokości ekstruzji obrysów zewnętrznych. Jeśli ustawisz zero, szerokość będzie miała wartość domyślną, czyli 1.125x średnicy dyszy. Jeśli ustawisz wartość procentową (np. 200%) to zostanie obliczona z wysokości warstwy."
+msgstr "Ustaw tą wartość jako niezerową, aby pozwolić na ręczne ustawienie szerokości ekstruzji obrysów zewnętrznych. Jeśli ustawisz zero, szerokość będzie miała wartość domyślną, czyli 1.125x średnicy dyszy. Jeśli ustawisz wartość procentową (np. 200%) to zostanie obliczona z wysokości warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:878
+#: src/libslic3r/PrintConfig.cpp:920
 msgid "Set this to a non-zero value to set a manual extrusion width for first layer. You can use this to force fatter extrudates for better adhesion. If expressed as percentage (for example 120%) it will be computed over first layer height. If set to zero, it will use the default extrusion width."
-msgstr "Ustaw tą wartość jako niezerową aby pozwolić na ręczne ustawienie szerokości ekstruzji pierwszej warstwy. Dzięki tej funkcji możesz wymusić grubsze linie dla lepszej przyczepności. Jeśli ustawisz wartość procentową (np. 120%) to będzie oliczona z wysokości pierwszej warstwy. Ustaw zero dla wartości domyślnej."
+msgstr "Ustaw tą wartość jako niezerową, aby pozwolić na ręczne ustawienie szerokości ekstruzji pierwszej warstwy. Dzięki tej funkcji możesz wymusić grubsze linie dla lepszej przyczepności. Jeśli ustawisz wartość procentową (np. 120%), to będzie obliczona z wysokości pierwszej warstwy. Ustaw zero dla wartości domyślnej."
 
-#: src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:1873
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
-msgstr "Ustaw tą wartość jako niezerową aby pozwolić na ręczne ustawienie szerokości ekstruzji wypełnienia powierzchni zwartych. Jeśli ustawisz zero, szerokość będzie miała wartość domyślną, czyli 1.125x średnicy dyszy. Jeśli ustawisz wartość procentową (np. 90%) to zostanie obliczona z wysokości warstwy."
+msgstr "Ustaw tą wartość jako niezerową, aby pozwolić na ręczne ustawienie szerokości ekstruzji wypełnienia powierzchni zwartych. Jeśli ustawisz zero, szerokość będzie miała wartość domyślną, czyli 1.125x średnicy dyszy. Jeśli ustawisz wartość procentową (np. 90%), to zostanie obliczona z wysokości warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:2107
+#: src/libslic3r/PrintConfig.cpp:2250
 msgid "Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
-msgstr "Ustaw tą wartość jako niezerową aby pozwolić na ręczne ustawienie szerokości ekstruzji zwartego wypełnienia górnych warstw. Możesz ustawić mniejszą szerokość aby wypełnić szczeliny i uzyskać gładsze wykończenie. Jeśli ustawisz zero, szerokość będzie miała wartość domyślną, czyli będzie równa średnicy dyszy. Jeśli ustawisz wartość procentową (np. 90%) to zostanie obliczona z wysokości warstwy."
+msgstr "Ustaw tą wartość jako niezerową, aby pozwolić na ręczne ustawienie szerokości ekstruzji zwartego wypełnienia górnych warstw. Możesz ustawić mniejszą szerokość, aby wypełnić szczeliny i uzyskać gładsze wykończenie. Jeśli ustawisz zero, szerokość będzie miała wartość domyślną, czyli będzie równa średnicy dyszy. Jeśli ustawisz wartość procentową (np. 90%), to zostanie obliczona z wysokości warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:1011
+#: src/libslic3r/PrintConfig.cpp:1055
 msgid "Set this to a non-zero value to set a manual extrusion width for infill. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. You may want to use fatter extrudates to speed up the infill and make your parts stronger. If expressed as percentage (for example 90%) it will be computed over layer height."
-msgstr "Ustaw tą wartość jako niezerową aby pozwolić na ręczne ustawienie szerokości ekstruzji wypełnienia. Jeśli ustawisz zero to szerokość będzie miała wartość domyślną, czyli 1.125x średnicy dyszy. Możesz ustawić większą szerokość aby przyspieszyć druk wypełnienia i zwiększyć wytrzymałość wydruków. Jeśli ustawisz wartość procentową (np. 90%) to zostanie obliczona z wysokości warstwy."
+msgstr "Ustaw tą wartość jako niezerową, aby pozwolić na ręczne ustawienie szerokości ekstruzji wypełnienia. Jeśli ustawisz zero, to szerokość będzie miała wartość domyślną, czyli 1.125x średnicy dyszy. Możesz ustawić większą szerokość, aby przyspieszyć druk wypełnienia i zwiększyć wytrzymałość wydruków. Jeśli ustawisz wartość procentową (np. 90%), to zostanie obliczona z wysokości warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:1419
+#: src/libslic3r/PrintConfig.cpp:1527
 msgid "Set this to a non-zero value to set a manual extrusion width for perimeters. You may want to use thinner extrudates to get more accurate surfaces. If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. If expressed as percentage (for example 200%) it will be computed over layer height."
-msgstr "Ustaw tą wartość jako niezerową aby pozwolić na ręczne ustawienie szerokości ekstruzji obrysów. Możesz ustawić większą szerokość aby uzyskać dokładniejsze wykończenie powierzchni. Jeśli ustawisz zero to szerokość będzie miała wartość domyślną, czyli 1.125x średnicy dyszy. Jeśli ustawisz wartość procentową (np. 200%) to zostanie obliczona z wysokości warstwy."
+msgstr "Ustaw tą wartość jako niezerową, aby pozwolić na ręczne ustawienie szerokości ekstruzji obrysów. Możesz ustawić większą szerokość, aby uzyskać dokładniejsze wykończenie powierzchni. Jeśli ustawisz zero to szerokość będzie miała wartość domyślną, czyli 1.125x średnicy dyszy. Jeśli ustawisz wartość procentową (np. 200%), to zostanie obliczona z wysokości warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:1948
+#: src/libslic3r/PrintConfig.cpp:2090
 msgid "Set this to a non-zero value to set a manual extrusion width for support material. If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. If expressed as percentage (for example 90%) it will be computed over layer height."
-msgstr "Ustaw tą wartość jako niezerową aby pozwolić na ręczne ustawienie szerokości ekstruzji materiału podporowego. Jeśli ustawisz zero to szerokość będzie miała wartość domyślną, czyli będzie równa średnicy dyszy. Jeśli ustawisz wartość procentową (np. 90%) to zostanie obliczona z wysokości warstwy."
+msgstr "Ustaw tą wartość jako niezerową, aby pozwolić na ręczne ustawienie szerokości ekstruzji materiału podporowego. Jeśli ustawisz zero, to szerokość będzie miała wartość domyślną, czyli będzie równa średnicy dyszy. Jeśli ustawisz wartość procentową (np. 90%), to zostanie obliczona z wysokości warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:512
+#: src/libslic3r/PrintConfig.cpp:548
 msgid "Set this to the clearance radius around your extruder. If the extruder is not centered, choose the largest value for safety. This setting is used to check for collisions and to display the graphical preview in the plater."
 msgstr "Określa promień okręgu opisanego na całym zespole ekstrudera (matematycznie - wyobraź sobie, że chcesz narysować okrąg opisany na zespole ekstrudera patrząc na niego z góry). Jeśli sam ekstruder nie jest dokładnie na środku, użyj największego promienia. Ta wartość jest używana do wykrywania możliwych kolizji z wydrukowanymi modelami i jako graficzna reprezentacja na wirtualnym stole."
 
@@ -6720,23 +7754,23 @@ msgstr "Określa promień okręgu opisanego na całym zespole ekstrudera (matema
 msgid "Set this to the maximum height that can be reached by your extruder while printing."
 msgstr "Ustaw tutaj maksymalną wysokość, jaką może osiągnąć Twój ekstruder podczas drukowania."
 
-#: src/libslic3r/PrintConfig.cpp:501
+#: src/libslic3r/PrintConfig.cpp:537
 msgid "Set this to the vertical distance between your nozzle tip and (usually) the X carriage rods. In other words, this is the height of the clearance cylinder around your extruder, and it represents the maximum depth the extruder can peek before colliding with other printed objects."
-msgstr "Określa pionową odległość końcówki dyszy od (zazwyczaj) prętów osi X. Inaczej mówiąc (matematycznie), jest to wysokość cylindra opisanego na zespole ekstrudera i określa maksymalną głębokość, na którą może opuścić się ekstruder aby nie uderzyć w obiekt znajdujący się bezpośrednio pod prętami osi X."
+msgstr "Określa pionową odległość końcówki dyszy od (zazwyczaj) prętów osi X. Inaczej mówiąc (matematycznie), jest to wysokość cylindra opisanego na zespole ekstrudera i określa maksymalną głębokość, na którą może opuścić się ekstruder, aby nie uderzyć w obiekt znajdujący się bezpośrednio pod prętami osi X."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:4094 src/slic3r/GUI/Selection.cpp:1474
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4581 src/slic3r/GUI/Selection.cpp:1513
 msgid "Set Unprintable"
 msgstr "Zaznacz do ignorowania przy drukowaniu"
 
-#: src/slic3r/GUI/Selection.cpp:1475
+#: src/slic3r/GUI/Selection.cpp:1515
 msgid "Set Unprintable Instance"
 msgstr "Ignoruj drukowanie kopii"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:217
 msgid "Set upper thumb to current slider thumb"
 msgstr "Ustaw punkt zmiany koloru na poziomie górnego suwaka"
 
-#: src/libslic3r/PrintConfig.cpp:3509
+#: src/libslic3r/PrintConfig.cpp:3714
 msgid ""
 "Sets logging sensitivity. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:trace\n"
 "For example. loglevel=2 logs fatal, error and warning level messages."
@@ -6744,63 +7778,74 @@ msgstr ""
 "Ustawia czułość logowania. 0:krytyczne, 1:błędy, 2:ostrzeżenia, 3:info, 4:debug, 5:trace\n"
 "Np: loglevel=2 loguje krytyczne, błędy i ostrzeżenia."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:155
+#: src/slic3r/GUI/BedShapeDialog.cpp:292 src/slic3r/GUI/MainFrame.cpp:1969
 msgid "Settings"
 msgstr "Ustawienia"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2507
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2899
 msgid "Settings for height range"
 msgstr "Ustawienie zakresu wysokości"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:162
+#: src/slic3r/GUI/Preferences.cpp:431
+msgid "Settings in non-modal window"
+msgstr "Ustawienia w osobnym okienku"
+
+#: src/slic3r/GUI/ConfigManipulation.cpp:161
 msgid "Shall I adjust those settings for supports?"
 msgstr "Czy chcesz zmienić te ustawienia dla podpór?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:89
+#: src/slic3r/GUI/ConfigManipulation.cpp:88
 msgid "Shall I adjust those settings in order to enable Spiral Vase?"
 msgstr "Czy chcesz zmienić te ustawienia, aby włączyć tryb wazy?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:118
 msgid "Shall I adjust those settings in order to enable the Wipe Tower?"
 msgstr "Czy chcesz zmienić te ustawienia, aby włączyć wieżę czyszczącą?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:210
+#: src/slic3r/GUI/ConfigManipulation.cpp:209
 msgid "Shall I switch to rectilinear fill pattern?"
 msgstr "Czy chcesz zmienić wzór wypełnienia na linie równoległe?"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:139
+#: src/slic3r/GUI/ConfigManipulation.cpp:138
 msgid "Shall I synchronize support layers in order to enable the Wipe Tower?"
 msgstr "Czy chcesz zsynchronizować warstwy podporowe, aby włączyć wieżę czyszczącą?"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:66 src/slic3r/GUI/GUI_ObjectList.cpp:2059
+#: src/slic3r/GUI/BedShapeDialog.cpp:156 src/slic3r/GUI/BedShapeDialog.cpp:222
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2215
 msgid "Shape"
 msgstr "Kształt"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:256
+#: src/slic3r/GUI/GUI_Preview.cpp:338 src/slic3r/GUI/GUI_Preview.cpp:1478
 msgid "Shells"
 msgstr "Powłoki"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:249
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:50
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:33
+msgid "Shift + Left mouse button"
+msgstr "Shift + lewy przycisk myszy"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:241
 msgid "Shift + Left mouse button:"
-msgstr "Shift + lewy przycisk myszki:"
+msgstr "Shift + lewy przycisk myszy:"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:255
+#: src/slic3r/GUI/GLCanvas3D.cpp:245
 msgid "Shift + Right mouse button:"
-msgstr "Shift + Prawy przycisk myszki:"
+msgstr "Shift + Prawy przycisk myszy:"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:231
+#: src/slic3r/GUI/GUI_Preview.cpp:286 src/slic3r/GUI/GUI_Preview.cpp:288
 msgid "Show"
 msgstr "Pokaż"
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show &Configuration Folder"
 msgstr "Pokaż folder Konfigura&cyjny"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show &labels"
 msgstr "Pokaż &etykiety"
 
-#: src/slic3r/GUI/MainFrame.cpp:705
+#: src/slic3r/GUI/MainFrame.cpp:933 src/slic3r/GUI/MainFrame.cpp:937
+#: src/slic3r/GUI/MainFrame.cpp:1329
 msgid "Show about dialog"
 msgstr "Pokaż okienko"
 
@@ -6808,111 +7853,127 @@ msgstr "Pokaż okienko"
 msgid "Show advanced settings"
 msgstr "Pokaż ustawienia zaawansowane"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:159
+#: src/slic3r/GUI/PrintHostDialogs.cpp:157
 msgid "Show error message"
 msgstr "Pokaż komunikat błędu"
 
-#: src/slic3r/GUI/Preferences.cpp:95
+#: src/slic3r/GUI/Preferences.cpp:112
 msgid "Show incompatible print and filament presets"
 msgstr "Pokaż niekompatybilne ustawienia druku i filamentów"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:151
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:145
 msgid "Show keyboard shortcuts list"
 msgstr "Pokaż listę skrótów klawiszowych"
 
-#: src/slic3r/GUI/MainFrame.cpp:676
+#: src/slic3r/GUI/GCodeViewer.cpp:2591
+msgid "Show normal mode"
+msgstr "Pokaż tryb normalny"
+
+#: src/slic3r/GUI/MainFrame.cpp:1294
 msgid "Show object/instance labels in 3D scene"
 msgstr "Pokaż etykiety modelu/kopii w widoku edycji 3D"
 
+#: src/slic3r/GUI/Preferences.cpp:213
+msgid "Show sidebar collapse/expand button"
+msgstr "Pokaż przycisk zwijania/rozwijania bocznego panelu"
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:377
 msgid "Show simplified settings"
 msgstr "Pokaż ustawienia uproszczone"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:52
+#: src/slic3r/GUI/Preferences.cpp:169 src/slic3r/GUI/Preferences.cpp:171
+msgid "Show splash screen"
+msgstr "Pokaż ekran startowy"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:2586
+msgid "Show stealth mode"
+msgstr "Pokaż dla trybu stealth"
+
+#: src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp:51
 msgid "Show supports"
 msgstr "Pokaż podpory"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "Show system information"
 msgstr "Pokaż informacje o systemie"
 
-#: src/slic3r/GUI/MainFrame.cpp:626
+#: src/slic3r/GUI/MainFrame.cpp:1234
 msgid "Show the 3D editing view"
 msgstr "Pokaż widok edycji 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:629
+#: src/slic3r/GUI/MainFrame.cpp:1237
 msgid "Show the 3D slices preview"
 msgstr "Pokaż podgląd cięcia 3D"
 
-#: src/slic3r/GUI/MainFrame.cpp:617
+#: src/slic3r/GUI/MainFrame.cpp:1224
 msgid "Show the filament settings"
 msgstr "Pokaż ustawienia filamentu"
 
-#: src/libslic3r/PrintConfig.cpp:3372
+#: src/libslic3r/PrintConfig.cpp:3571
 msgid "Show the full list of print/G-code configuration options."
 msgstr "Pokaż pełną listę opcji konfiguracji druku/G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3377
+#: src/libslic3r/PrintConfig.cpp:3576
 msgid "Show the full list of SLA print configuration options."
 msgstr "Pokaż pełną listę opcji konfiguracji druku SLA."
 
-#: src/slic3r/GUI/MainFrame.cpp:708
+#: src/slic3r/GUI/MainFrame.cpp:941 src/slic3r/GUI/MainFrame.cpp:1332
 msgid "Show the list of the keyboard shortcuts"
 msgstr "Pokaż listę skrótów klawiszowych"
 
-#: src/slic3r/GUI/MainFrame.cpp:606
+#: src/slic3r/GUI/MainFrame.cpp:1216
 msgid "Show the plater"
 msgstr "Pokaż zawartość stołu"
 
-#: src/slic3r/GUI/MainFrame.cpp:614
+#: src/slic3r/GUI/MainFrame.cpp:1221
 msgid "Show the print settings"
 msgstr "Pokaż ustawienia druku"
 
-#: src/slic3r/GUI/MainFrame.cpp:621
+#: src/slic3r/GUI/MainFrame.cpp:1228
 msgid "Show the printer settings"
 msgstr "Pokaż ustawienia drukarki"
 
-#: src/libslic3r/PrintConfig.cpp:3366
+#: src/libslic3r/PrintConfig.cpp:3565
 msgid "Show this help."
 msgstr "Pokaż tą wskazówkę pomocy."
 
-#: src/slic3r/GUI/MainFrame.cpp:701
+#: src/slic3r/GUI/MainFrame.cpp:926 src/slic3r/GUI/MainFrame.cpp:1325
 msgid "Show user configuration folder (datadir)"
 msgstr "Pokaż folder z konfiguracjami użytkownika (datadir)"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:185
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
 msgid "Show/Hide 3Dconnexion devices settings dialog"
 msgstr "Pokaż/ukryj ustawienia urządzeń 3Dconnexion"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:208
-msgid "Show/Hide Legend"
-msgstr "Pokaż/ukryj legendę"
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:216
+msgid "Show/Hide Legend & Estimated printing time"
+msgstr "Pokaż/ukryj legendę i szacowany czas druku"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:146
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
 msgid "Show/Hide object/instance labels"
 msgstr "Ukryj/pokaż etykiety modelu/kopii"
 
-#: src/slic3r/GUI/GUI_App.cpp:813 src/slic3r/GUI/wxExtensions.cpp:753
+#: src/slic3r/GUI/GUI_App.cpp:1504 src/slic3r/GUI/wxExtensions.cpp:673
 msgid "Simple"
 msgstr "Prosty"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:820
+#: src/slic3r/GUI/ConfigWizard.cpp:1179
 msgid "Simple mode"
 msgstr "Tryb Prosty"
 
-#: src/slic3r/GUI/GUI_App.cpp:813
+#: src/slic3r/GUI/GUI_App.cpp:1504
 msgid "Simple View Mode"
 msgstr "Tryb Widoku Prostego"
 
-#: src/slic3r/GUI/Tab.cpp:2298 src/slic3r/GUI/Tab.cpp:2306
+#: src/slic3r/GUI/Tab.cpp:2467 src/slic3r/GUI/Tab.cpp:2475
 msgid "Single extruder MM setup"
 msgstr "Ustawienia MM dla jednego ekstrudera"
 
-#: src/libslic3r/PrintConfig.cpp:1845
+#: src/libslic3r/PrintConfig.cpp:1987
 msgid "Single Extruder Multi Material"
 msgstr "Multi Material z jednym ekstruderem"
 
-#: src/slic3r/GUI/Tab.cpp:1867
+#: src/slic3r/GUI/Tab.cpp:2101
 msgid ""
 "Single Extruder Multi Material is selected, \n"
 "and all extruders must have the same diameter.\n"
@@ -6922,435 +7983,463 @@ msgstr ""
 "więc wszystkie ekstrudery muszą mieć taką samą średnicę dyszy.\n"
 "Czy chcesz zmienić średnicę dyszy dla wszystkich ekstruderów na wartość z pierwszego?"
 
-#: src/slic3r/GUI/Tab.cpp:2307
+#: src/slic3r/GUI/Tab.cpp:2476
 msgid "Single extruder multimaterial parameters"
 msgstr "Parametry multimaterial przy jednym ekstruderze"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:77
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:232 src/slic3r/GUI/Plater.cpp:160
-#: src/slic3r/GUI/Tab.cpp:2324
+#: src/slic3r/GUI/Preferences.cpp:120 src/libslic3r/PrintConfig.cpp:3689
+msgid "Single instance mode"
+msgstr "Tryb jednej instancji"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:93
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:240 src/slic3r/GUI/Plater.cpp:166
+#: src/slic3r/GUI/Tab.cpp:2493
 msgid "Size"
 msgstr "Rozmiar"
 
-#: src/slic3r/GUI/Tab.cpp:1797 src/slic3r/GUI/Tab.cpp:2041
+#: src/slic3r/GUI/Tab.cpp:2059 src/slic3r/GUI/Tab.cpp:2241
 msgid "Size and coordinates"
 msgstr "Rozmiar i koordynaty"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:78
+#: src/slic3r/GUI/BedShapeDialog.cpp:110
 msgid "Size in X and Y of the rectangular plate."
 msgstr "Rozmiar X i Y stołu prostokątnego."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:245 src/slic3r/GUI/Tab.cpp:1111
-#: src/libslic3r/ExtrusionEntity.cpp:318
+#: src/slic3r/GUI/GUI_Preview.cpp:310 src/slic3r/GUI/Tab.cpp:1439
+#: src/libslic3r/ExtrusionEntity.cpp:323 src/libslic3r/ExtrusionEntity.cpp:354
 msgid "Skirt"
 msgstr "Skirt"
 
-#: src/slic3r/GUI/Tab.cpp:1110
+#: src/slic3r/GUI/Tab.cpp:1438
 msgid "Skirt and brim"
 msgstr "Skirt i brim"
 
-#: src/libslic3r/PrintConfig.cpp:1687
+#: src/libslic3r/PrintConfig.cpp:1795
 msgid "Skirt height"
 msgstr "Wysokość skirt"
 
-#: src/libslic3r/PrintConfig.cpp:1696
+#: src/libslic3r/PrintConfig.cpp:1811
 msgid "Skirt Loops"
 msgstr "Liczba obrysów skirt"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1334
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1181
 msgid "SLA gizmo keyboard shortcuts"
 msgstr "Skróty klawiszowe \"uchwytów\" SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1058
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:924
 msgid "SLA gizmo turned off"
 msgstr "Uchwyt SLA wyłączony"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1017
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:897
 msgid "SLA gizmo turned on"
 msgstr "Uchwyt SLA włączony"
 
-#: src/slic3r/GUI/Plater.cpp:818 src/slic3r/GUI/Preset.cpp:1524
+#: src/slic3r/GUI/Plater.cpp:693 src/libslic3r/Preset.cpp:1303
 msgid "SLA material"
 msgstr "Materiał SLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Material Profiles Selection"
 msgstr "Wybór profili materiałów SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2470 src/libslic3r/PrintConfig.cpp:2471
+#: src/libslic3r/PrintConfig.cpp:2613 src/libslic3r/PrintConfig.cpp:2614
 msgid "SLA material type"
 msgstr "Rodzaj materiału SLA"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1471 src/slic3r/GUI/ConfigWizard.cpp:2015
+#: src/slic3r/GUI/ConfigWizard.cpp:1872 src/slic3r/GUI/ConfigWizard.cpp:2526
 msgid "SLA Materials"
 msgstr "Materiały SLA"
 
-#: src/slic3r/GUI/Preset.cpp:1523
+#: src/libslic3r/Preset.cpp:1302
 msgid "SLA print"
 msgstr "Druk SLA"
 
-#: src/libslic3r/PrintConfig.cpp:2578
+#: src/libslic3r/PrintConfig.cpp:2721
 msgid "SLA print material notes"
 msgstr "Notatki dla materiału SLA"
 
-#: src/slic3r/GUI/Plater.cpp:817
+#: src/slic3r/GUI/Plater.cpp:692
 msgid "SLA print settings"
-msgstr "Ustawienia Druku SLA"
+msgstr "Ustawienia druku SLA"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:996
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:869
 msgid "SLA Support Points"
 msgstr "Punkty podpór SLA"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:687
-msgid "SLA supports outside the print area were detected"
-msgstr "Wykryto podpory SLA poza obszarem roboczym"
+#: src/slic3r/GUI/GLCanvas3D.cpp:635
+msgid "SLA supports outside the print area were detected."
+msgstr "Wykryto podpory SLA poza obszarem roboczym."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1530
+#: src/slic3r/GUI/ConfigWizard.cpp:1931
 msgid "SLA Technology Printers"
 msgstr "Drukarki SLA"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Slab"
 msgstr "Tafla"
 
-#: src/libslic3r/PrintConfig.cpp:1333
+#: src/libslic3r/PrintConfig.cpp:1441
 msgid "Slic3r can upload G-code files to a printer host. This field must contain the kind of the host."
-msgstr "Slic3r może przesyłać pliki G-code do serwera druku. To pole powinno zawierać rodzaj serwera."
+msgstr "PrusaSlicer może przesyłać pliki G-code do serwera druku. To pole powinno zawierać rodzaj serwera."
 
-#: src/libslic3r/PrintConfig.cpp:105
+#: src/libslic3r/PrintConfig.cpp:107
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication."
 msgstr "Slic3r może przesyłać pliki G-code do serwera druku. To pole powinno zawierać klucz API lub hasło niezbędne do uwierzytelnienia."
 
-#: src/libslic3r/PrintConfig.cpp:98
+#: src/libslic3r/PrintConfig.cpp:100
 msgid "Slic3r can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance."
 msgstr "Slic3r może przesyłać pliki G-code do serwera druku. Ta sekcja powinna zawierać nazwę hosta, adres IP lub adres URL serwera."
 
-#: src/libslic3r/PrintConfig.cpp:1299
+#: src/libslic3r/PrintConfig.cpp:1407
 msgid "Slic3r will not scale speed down below this speed."
-msgstr "Slic3r nie będzie skalował prędkości poniżej tej wartości."
+msgstr "PrusaSlicer nie będzie skalował prędkości poniżej tej wartości."
 
-#: src/libslic3r/PrintConfig.cpp:3359
+#: src/libslic3r/PrintConfig.cpp:3558
 msgid "Slice"
 msgstr "Cięcie"
 
-#: src/slic3r/GUI/MainFrame.cpp:512
+#: src/slic3r/GUI/MainFrame.cpp:1113
 msgid "Slice a file into a G-code"
 msgstr "Cięcie jako G-code"
 
-#: src/slic3r/GUI/MainFrame.cpp:518
+#: src/slic3r/GUI/MainFrame.cpp:1119
 msgid "Slice a file into a G-code, save as"
 msgstr "Cięcie jako G-code, zapisz jako"
 
-#: src/libslic3r/PrintConfig.cpp:87
+#: src/libslic3r/PrintConfig.cpp:89
 msgid "Slice gap closing radius"
 msgstr "Promień zamykania szpar"
 
-#: src/slic3r/GUI/Plater.cpp:892 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5110
+#: src/slic3r/GUI/Plater.cpp:767 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5237
 msgid "Slice now"
 msgstr "Cięcie"
 
-#: src/libslic3r/PrintConfig.cpp:3333
+#: src/libslic3r/PrintConfig.cpp:3526
 msgid "Slice the model and export SLA printing layers as PNG."
 msgstr "Cięcie modelu i eksport warstw SLA jako PNG."
 
-#: src/libslic3r/PrintConfig.cpp:3354
+#: src/libslic3r/PrintConfig.cpp:3547
 msgid "Slice the model and export toolpaths as G-code."
 msgstr "Cięcie modelu i eksport ścieżek narzędzi jako G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3360
+#: src/libslic3r/PrintConfig.cpp:3559
 msgid "Slice the model as FFF or SLA based on the printer_technology configuration value."
 msgstr "Cięcie modelu jako FFF lub SLA oparte o ustawienie konfiguracji printer_technology."
 
-#: src/slic3r/GUI/Plater.cpp:216
+#: src/slic3r/GUI/Plater.cpp:222
 msgid "Sliced Info"
 msgstr "Informacje o cięciu"
 
-#: src/slic3r/GUI/MainFrame.cpp:847 src/slic3r/GUI/Plater.cpp:3121
-#: src/slic3r/GUI/Plater.cpp:5107 src/slic3r/GUI/Tab.cpp:1221
-#: src/slic3r/GUI/Tab.cpp:3662
+#: src/slic3r/GUI/MainFrame.cpp:1548 src/slic3r/GUI/Plater.cpp:2921
+#: src/slic3r/GUI/Plater.cpp:5234 src/slic3r/GUI/Tab.cpp:1551
+#: src/slic3r/GUI/Tab.cpp:4081
 msgid "Slicing"
 msgstr "Cięcie"
 
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:134
-#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:184
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:170
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:219
 msgid "Slicing complete"
 msgstr "Cięcie zakończone"
 
-#: src/libslic3r/SLAPrint.cpp:760
+#: src/libslic3r/SLAPrint.cpp:780
 msgid "Slicing done"
 msgstr "Cięcie zakończone"
 
-#: src/slic3r/GUI/MainFrame.cpp:874
+#: src/slic3r/GUI/MainFrame.cpp:1575
 msgid "Slicing Done!"
 msgstr "Cięcie zakończone!"
 
-#: src/libslic3r/SLAPrintSteps.cpp:245
+#: src/slic3r/GUI/NotificationManager.cpp:751
+msgid "Slicing finished."
+msgstr "Cięcie zakończone."
+
+#: src/libslic3r/SLAPrintSteps.cpp:247
 msgid "Slicing had to be stopped due to an internal error: Inconsistent slice index."
 msgstr "Cięcie zostało zatrzymane z powodu błędu wewnętrznego: nieciągły indeks cięcia."
 
-#: src/libslic3r/SLAPrintSteps.cpp:45
+#: src/libslic3r/SLAPrintSteps.cpp:46
 msgid "Slicing model"
 msgstr "Cięcie modelu"
 
-#: src/libslic3r/SLAPrintSteps.cpp:49
+#: src/libslic3r/SLAPrintSteps.cpp:50
 msgid "Slicing supports"
 msgstr "Cięcie podpór"
 
-#: src/libslic3r/PrintConfig.cpp:2414
+#: src/libslic3r/PrintConfig.cpp:2557
 msgid "Slow"
 msgstr "Wolne"
 
-#: src/libslic3r/PrintConfig.cpp:1705
+#: src/libslic3r/PrintConfig.cpp:1820
 msgid "Slow down if layer print time is below"
 msgstr "Zwolnij jeśli czas warstwy wynosi mniej niż"
 
-#: src/libslic3r/PrintConfig.cpp:2415
+#: src/libslic3r/PrintConfig.cpp:2558
 msgid "Slow tilt"
 msgstr "Wolne przechylanie"
 
-#: src/libslic3r/PrintConfig.cpp:1715
+#: src/libslic3r/PrintConfig.cpp:1830
 msgid "Small perimeters"
 msgstr "Małe obrysy"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:288
-msgid "Smooth"
-msgstr "Gładki"
+#: src/libslic3r/PrintConfig.cpp:2801
+msgid "Small pillar diameter percent"
+msgstr "Procent średnicy małego słupka"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:258
+#: src/slic3r/GUI/GLCanvas3D.cpp:274
+msgid "Smooth"
+msgstr "Wygładzanie"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:247
 msgid "Smoothing"
 msgstr "Wygładzanie"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Snapshot name"
 msgstr "Nazwa zrzutu"
 
-#: src/slic3r/GUI/MainFrame.cpp:686
+#: src/slic3r/GUI/MainFrame.cpp:911 src/slic3r/GUI/MainFrame.cpp:1310
 msgid "Software &Releases"
 msgstr "Wersje oprog&ramowania"
 
-#: src/slic3r/GUI/PresetHints.cpp:184
+#: src/slic3r/GUI/PresetHints.cpp:183
 msgid "solid infill"
 msgstr "zwarte wypełnienie"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/ExtrusionEntity.cpp:314
-#: src/libslic3r/PrintConfig.cpp:1756 src/libslic3r/PrintConfig.cpp:1767
+#: src/slic3r/GUI/GUI_Preview.cpp:305 src/libslic3r/ExtrusionEntity.cpp:318
+#: src/libslic3r/ExtrusionEntity.cpp:344 src/libslic3r/PrintConfig.cpp:1871
+#: src/libslic3r/PrintConfig.cpp:1882
 msgid "Solid infill"
 msgstr "Zwarte wypełnienie"
 
-#: src/libslic3r/PrintConfig.cpp:1744
+#: src/libslic3r/PrintConfig.cpp:1859
 msgid "Solid infill every"
 msgstr "Zwarte wypełnienie co"
 
-#: src/libslic3r/PrintConfig.cpp:1736
+#: src/libslic3r/PrintConfig.cpp:1851
 msgid "Solid infill extruder"
 msgstr "Ekstruder do zwartego wypełnienia"
 
-#: src/libslic3r/PrintConfig.cpp:1727
+#: src/libslic3r/PrintConfig.cpp:1842
 msgid "Solid infill threshold area"
 msgstr "Min. powierzchnia zwartego wypełnienia"
 
-#: src/slic3r/GUI/Tab.cpp:1065 src/libslic3r/PrintConfig.cpp:1780
+#: src/slic3r/GUI/Tab.cpp:1387 src/libslic3r/PrintConfig.cpp:1895
 msgid "Solid layers"
 msgstr "Zwarte warstwy"
 
-#: src/libslic3r/PrintConfig.cpp:754
+#: src/libslic3r/PrintConfig.cpp:790
 msgid "Soluble material"
 msgstr "Materiał rozpuszczalny"
 
-#: src/libslic3r/PrintConfig.cpp:755
+#: src/libslic3r/PrintConfig.cpp:791
 msgid "Soluble material is most likely used for a soluble support."
 msgstr "Materiał rozpuszczalny jest używany zazwyczaj do rozpuszczalnych podpór."
 
-#: src/libslic3r/PrintConfig.cpp:937
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:735
+msgid "Some fields are too long to fit. Right mouse click reveals the full text."
+msgstr "Niektóre opisy są zbyt długie, aby mogły się zmieścić. Kliknij prawym przyciskiem, aby pokazać cały tekst."
+
+#: src/libslic3r/PrintConfig.cpp:981
 msgid "Some G/M-code commands, including temperature control and others, are not universal. Set this option to your printer's firmware to get a compatible output. The \"No extrusion\" flavor prevents PrusaSlicer from exporting any extrusion value at all."
 msgstr "Niektóre komendy kodu G/M, wliczając kontrolę temperatury i inne, nie są uniwersalne. Ustaw tą opcję w firmware Twojej drukarki, aby uzyskać kompatybilny plik wyjściowy. Wariant \"no extrusion\" wyłączy generowanie jakichkolwiek wartości ekstruzji."
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:688
-msgid "Some objects are not visible"
-msgstr "Niektóre obiekty są niewidoczne"
+#: src/slic3r/GUI/Plater.cpp:2309
+#, c-format
+msgid ""
+"Some object(s) in file %s looks like saved in inches.\n"
+"Should I consider them as a saved in inches and convert them?"
+msgstr ""
+"Niektóre modele w pliku %s wyglądają, jak zapisane w calach.\n"
+"Czy traktować je jako zapisane w calach i przekonwertować?"
 
-#: src/libslic3r/Print.cpp:1226
+#: src/slic3r/GUI/GLCanvas3D.cpp:636
+msgid "Some objects are not visible."
+msgstr "Niektóre modele są niewidoczne."
+
+#: src/libslic3r/Print.cpp:1252
 msgid "Some objects are too close; your extruder will collide with them."
 msgstr "Niektóre modele są zbyt blisko; ekstruder zderzy się z którymś z nich."
 
-#: src/libslic3r/Print.cpp:1228
+#: src/libslic3r/Print.cpp:1254
 msgid "Some objects are too tall and cannot be printed without extruder collisions."
-msgstr "Niektóre modele są zbyt wysokie aby można było wydrukować je bez kolizji."
+msgstr "Niektóre modele są zbyt wysokie, aby można było wydrukować je bez kolizji."
 
-#: src/libslic3r/PrintConfig.cpp:2824
+#: src/libslic3r/PrintConfig.cpp:2988
 msgid "Some objects can get along with a few smaller pads instead of a single big one. This parameter defines how far the center of two smaller pads should be. If theyare closer, they will get merged into one pad."
 msgstr "Niektóre modele można wydrukować z kilkoma mniejszymi podkładkami, zamiast jednej dużej. Ten parametr określa jak daleko od siebie powinny znajdować się dwie mniejsze podkładki. Jeśli znajdą się zbyt blisko, to zostaną złączone w jedną, dużą podkładkę."
 
-#: src/libslic3r/PrintConfig.cpp:2187
+#: src/libslic3r/PrintConfig.cpp:2330
 msgid "Some printers or printer setups may have difficulties printing with a variable layer height. Enabled by default."
 msgstr "Niektóre drukarki mogą mieć trudności z drukiem ze zmienną wysokością warstwy. Domyślnie włączone."
 
-#: src/libslic3r/PrintConfig.cpp:1984
+#: src/libslic3r/PrintConfig.cpp:2126
 msgid "Spacing between interface lines. Set zero to get a solid interface."
 msgstr "Rozstaw linii warstwy łączącej. Ustaw zero dla zwartej warstwy łączącej."
 
-#: src/libslic3r/PrintConfig.cpp:2018
+#: src/libslic3r/PrintConfig.cpp:1155
+msgid "Spacing between ironing passes"
+msgstr "Odstęp między ścieżkami prasowania"
+
+#: src/libslic3r/PrintConfig.cpp:2160
 msgid "Spacing between support material lines."
 msgstr "Rozstaw linii materiału podporowego."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:98 src/slic3r/GUI/GUI_ObjectList.cpp:616
-#: src/slic3r/GUI/GUI_Preview.cpp:224 src/slic3r/GUI/Tab.cpp:1145
-#: src/libslic3r/PrintConfig.cpp:235 src/libslic3r/PrintConfig.cpp:458
-#: src/libslic3r/PrintConfig.cpp:919 src/libslic3r/PrintConfig.cpp:1048
-#: src/libslic3r/PrintConfig.cpp:1431 src/libslic3r/PrintConfig.cpp:1668
-#: src/libslic3r/PrintConfig.cpp:1716 src/libslic3r/PrintConfig.cpp:1768
-#: src/libslic3r/PrintConfig.cpp:2118
+#: src/slic3r/GUI/GUI_ObjectList.cpp:96 src/slic3r/GUI/GUI_ObjectList.cpp:655
+#: src/slic3r/GUI/GUI_Preview.cpp:278 src/slic3r/GUI/Tab.cpp:1474
+#: src/libslic3r/PrintConfig.cpp:269 src/libslic3r/PrintConfig.cpp:494
+#: src/libslic3r/PrintConfig.cpp:963 src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1165 src/libslic3r/PrintConfig.cpp:1539
+#: src/libslic3r/PrintConfig.cpp:1776 src/libslic3r/PrintConfig.cpp:1831
+#: src/libslic3r/PrintConfig.cpp:1883 src/libslic3r/PrintConfig.cpp:2261
 msgid "Speed"
 msgstr "Prędkość"
 
-#: src/libslic3r/PrintConfig.cpp:1670
-msgid "Speed (baud) of USB/serial port for printer connection."
-msgstr "Szybkość transmisji portu USB/portu szeregowego do połączenia z drukarką."
-
-#: src/libslic3r/GCode/PreviewData.cpp:351
+#: src/slic3r/GUI/GCodeViewer.cpp:2238 src/libslic3r/GCode/PreviewData.cpp:356
 msgid "Speed (mm/s)"
 msgstr "Prędkość (mm/s)"
 
-#: src/libslic3r/PrintConfig.cpp:920
+#: src/libslic3r/PrintConfig.cpp:964
 msgid "Speed for filling small gaps using short zigzag moves. Keep this reasonably low to avoid too much shaking and resonance issues. Set zero to disable gaps filling."
-msgstr "Prędkość wypełniania szczelin krótkimi ruchami typu zygzak. Ustaw tą wartość na tyle nisko aby uniknąć wibracji i rezonansu. Ustaw 0 aby wyłączyć wypełnianie szczelin."
+msgstr "Prędkość wypełniania szczelin krótkimi ruchami typu zygzak. Ustaw tą wartość na tyle nisko, aby uniknąć wibracji i rezonansu. Ustaw 0, aby wyłączyć wypełnianie szczelin."
 
-#: src/slic3r/GUI/Tab.cpp:1158
+#: src/slic3r/GUI/Tab.cpp:1488
 msgid "Speed for non-print moves"
 msgstr "Prędkość ruchów jałowych"
 
-#: src/libslic3r/PrintConfig.cpp:1432
+#: src/libslic3r/PrintConfig.cpp:1540
 msgid "Speed for perimeters (contours, aka vertical shells). Set to zero for auto."
 msgstr "Prędkość obrysów (inaczej powłoki pionowej). Ustaw 0 dla prędkości automatycznej."
 
-#: src/slic3r/GUI/Tab.cpp:1146
+#: src/slic3r/GUI/Tab.cpp:1475
 msgid "Speed for print moves"
 msgstr "Prędkość ruchów drukujących"
 
-#: src/libslic3r/PrintConfig.cpp:236
+#: src/libslic3r/PrintConfig.cpp:270
 msgid "Speed for printing bridges."
 msgstr "Prędkość drukowania mostów."
 
-#: src/libslic3r/PrintConfig.cpp:1769
+#: src/libslic3r/PrintConfig.cpp:1884
 msgid "Speed for printing solid regions (top/bottom/internal horizontal shells). This can be expressed as a percentage (for example: 80%) over the default infill speed above. Set to zero for auto."
 msgstr "Prędkość druku zwartych obszarów (góra/dół/poziome powłoki wewnętrzne). Może być wyrażona procentowo (np. 80%) ponad domyślną prędkość wypełnienia. Wpisz zero dla automatycznego ustawienia."
 
-#: src/libslic3r/PrintConfig.cpp:1993
+#: src/libslic3r/PrintConfig.cpp:2135
 msgid "Speed for printing support material interface layers. If expressed as percentage (for example 50%) it will be calculated over support material speed."
 msgstr "Prędkość druku warstw łączących materiału podporowego. Jeśli ustawisz wartość procentową (np. 50%) to zostanie obliczona z prędkości druku materiału podporowego."
 
-#: src/libslic3r/PrintConfig.cpp:2027
+#: src/libslic3r/PrintConfig.cpp:2169
 msgid "Speed for printing support material."
 msgstr "Prędkość druku materiału podporowego."
 
-#: src/libslic3r/PrintConfig.cpp:1049
+#: src/libslic3r/PrintConfig.cpp:1093
 msgid "Speed for printing the internal fill. Set to zero for auto."
 msgstr "Prędkość druku wewnętrznego wypełnienia. Ustaw 0 dla prędkości automatycznej."
 
-#: src/libslic3r/PrintConfig.cpp:2119
+#: src/libslic3r/PrintConfig.cpp:2262
 msgid "Speed for printing top solid layers (it only applies to the uppermost external layers and not to their internal solid layers). You may want to slow down this to get a nicer surface finish. This can be expressed as a percentage (for example: 80%) over the solid infill speed above. Set to zero for auto."
 msgstr "Prędkość druku najwyższych warstw zwartych (dotyczy tylko najwyższych, zewnętrznych warstw i nie obejmuje zwartych warstw umieszczonych niżej). Warto obniżyć tą wartość dla ładniejszego wykończenia powierzchni. Jeśli ustawisz wartość procentową (np. 80%) to zosttanie obliczona z prędkości druku zwartego wypełnienia. Ustaw zero dla prędkości automatycznej."
 
-#: src/libslic3r/PrintConfig.cpp:2153
+#: src/libslic3r/PrintConfig.cpp:2296
 msgid "Speed for travel moves (jumps between distant extrusion points)."
 msgstr "Prędkość ruchów jałowych (przeskoków pomiędzy punktami ekstruzji)."
 
-#: src/libslic3r/PrintConfig.cpp:659
+#: src/libslic3r/PrintConfig.cpp:695
 msgid "Speed of the first cooling move"
 msgstr "Prędkość pierwszego ruchu chłodzącego"
 
-#: src/libslic3r/PrintConfig.cpp:678
+#: src/libslic3r/PrintConfig.cpp:714
 msgid "Speed of the last cooling move"
 msgstr "Prędkość ostatniego ruchu chłodzącego"
 
-#: src/libslic3r/PrintConfig.cpp:616
+#: src/libslic3r/PrintConfig.cpp:652
 msgid "Speed used at the very beginning of loading phase."
 msgstr "Prędkość używana podczas początkowej fazy ładowania filamentu."
 
-#: src/libslic3r/PrintConfig.cpp:608
+#: src/libslic3r/PrintConfig.cpp:644
 msgid "Speed used for loading the filament on the wipe tower."
 msgstr "Prędkość ładowania filamentu podczas drukowania wieży czyszczącej."
 
-#: src/libslic3r/PrintConfig.cpp:624
+#: src/libslic3r/PrintConfig.cpp:660
 msgid "Speed used for unloading the filament on the wipe tower (does not affect  initial part of unloading just after ramming)."
 msgstr "Prędkość rozładowywania filamentu dla wieży czyszczącej (nie wpływa na początkową fazę rozładowywania zaraz po wyciskaniu)."
 
-#: src/libslic3r/PrintConfig.cpp:633
+#: src/libslic3r/PrintConfig.cpp:669
 msgid "Speed used for unloading the tip of the filament immediately after ramming."
 msgstr "Prędkość wycofywania (rozładowywania) końcówki filamentu bezpośrednio po wyciskaniu."
 
-#: src/slic3r/GUI/Mouse3DController.cpp:296
+#: src/slic3r/GUI/Mouse3DController.cpp:279
 msgid "Speed:"
 msgstr "Prędkość:"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1432
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:54
+#: src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp:37
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1563
 msgid "Sphere"
 msgstr "Kula"
 
-#: src/libslic3r/PrintConfig.cpp:1794
+#: src/libslic3r/PrintConfig.cpp:1909
 msgid "Spiral vase"
 msgstr "Tryb wazy"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:90
+#: src/slic3r/GUI/ConfigManipulation.cpp:89
 msgid "Spiral Vase"
 msgstr "Tryb wazy"
 
-#: src/slic3r/GUI/Plater.cpp:4019 src/slic3r/GUI/Plater.cpp:4034
-#: src/slic3r/GUI/Plater.cpp:4048 src/libslic3r/PrintConfig.cpp:3471
+#: src/slic3r/GUI/Plater.cpp:3939 src/slic3r/GUI/Plater.cpp:3954
+#: src/slic3r/GUI/Plater.cpp:3972 src/libslic3r/PrintConfig.cpp:3670
 msgid "Split"
 msgstr "Podziel"
 
-#: src/slic3r/GUI/Plater.cpp:4019
+#: src/slic3r/GUI/Plater.cpp:3939
 msgid "Split the selected object"
 msgstr "Podziel zaznaczony model"
 
-#: src/slic3r/GUI/Plater.cpp:4014 src/slic3r/GUI/Plater.cpp:4034
+#: src/slic3r/GUI/Plater.cpp:3934 src/slic3r/GUI/Plater.cpp:3954
 msgid "Split the selected object into individual objects"
 msgstr "Podziel wybrany model na osobne modele"
 
-#: src/slic3r/GUI/Plater.cpp:4016 src/slic3r/GUI/Plater.cpp:4048
+#: src/slic3r/GUI/Plater.cpp:3936 src/slic3r/GUI/Plater.cpp:3972
 msgid "Split the selected object into individual sub-parts"
 msgstr "Podziel wybrany model na części"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4550
+#: src/slic3r/GUI/GLCanvas3D.cpp:4916
 msgid "Split to objects"
 msgstr "Podziel na osobne modele"
 
-#: src/slic3r/GUI/Plater.cpp:2981
+#: src/slic3r/GUI/Plater.cpp:2774
 msgid "Split to Objects"
 msgstr "Podziel na modele"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4560 src/slic3r/GUI/GUI_ObjectList.cpp:1487
+#: src/slic3r/GUI/GLCanvas3D.cpp:4926 src/slic3r/GUI/GUI_ObjectList.cpp:1618
 msgid "Split to parts"
 msgstr "Podziel na części"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2274
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2440
 msgid "Split to Parts"
 msgstr "Podziel na części"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:289
+#: src/slic3r/GUI/ConfigWizard.cpp:307
 msgid "Standard"
 msgstr "Standard"
 
-#: src/libslic3r/PrintConfig.cpp:846
+#: src/libslic3r/PrintConfig.cpp:884
 msgid "Stars"
 msgstr "Gwiazdki"
 
-#: src/slic3r/GUI/MainFrame.cpp:405
+#: src/slic3r/GUI/MainFrame.cpp:986
 msgid "Start a new project"
 msgstr "Rozpocznij nowy projekt"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Start at height"
 msgstr "Zakres od"
 
-#: src/slic3r/GUI/Tab.cpp:1528 src/slic3r/GUI/Tab.cpp:1976
-#: src/libslic3r/PrintConfig.cpp:1813 src/libslic3r/PrintConfig.cpp:1828
+#: src/slic3r/GUI/Tab.cpp:1873 src/slic3r/GUI/Tab.cpp:2161
+#: src/libslic3r/PrintConfig.cpp:1928 src/libslic3r/PrintConfig.cpp:1943
 msgid "Start G-code"
 msgstr "G-code startowy"
 
-#: src/slic3r/GUI/MainFrame.cpp:532
+#: src/slic3r/GUI/MainFrame.cpp:1133
 msgid "Start new slicing process"
 msgstr "Uruchom nowy proces cięcia"
 
@@ -7358,7 +8447,37 @@ msgstr "Uruchom nowy proces cięcia"
 msgid "Start printing after upload"
 msgstr "Zacznij druk po przesłaniu"
 
-#: src/slic3r/GUI/PrintHostDialogs.cpp:151
+#: src/slic3r/GUI/GUI_App.cpp:396
+msgid "Start the application"
+msgstr "Uruchom aplikację"
+
+#: src/slic3r/GUI/GUI_App.cpp:386
+msgid ""
+"Starting with %1% 2.3, configuration directory on Linux has changed (according to XDG Base Directory Specification) to \n"
+"%2%.\n"
+"\n"
+"This directory did not exist yet (maybe you run the new version for the first time).\n"
+"However, an old %1% configuration directory was detected in \n"
+"%3%.\n"
+"\n"
+"Consider moving the contents of the old directory to the new location in order to access your profiles, etc.\n"
+"Note that if you decide to downgrade %1% in future, it will use the old location again.\n"
+"\n"
+"What do you want to do now?"
+msgstr ""
+"Zaczynając od %1% 2.3, konfiguracje na Linuxie zostały przeniesione (zgodnie ze specyfikacją XDG Base Directory) do\n"
+"%2%.\n"
+"\n"
+"Ten katalog jeszcze nie istnieje (powodem może być pierwsze uruchomienie nowej wersji).\n"
+"Jednak poprzedni katalog konfiguracji %1% został wykryty w\n"
+"%3%.\n"
+"\n"
+"Rozważ przeniesienie zawartości poprzedniego katalogu do nowej lokalizacji, aby mieć dostęp do swoich profili itd.\n"
+"Weź pod uwagę, że jeśli zdecyduje się w przyszłości zainstalować starszą wersję %1%, z powrotem zostanie użyty poprzedni katalog.\n"
+"\n"
+"Czy chcesz to teraz zrobić?"
+
+#: src/slic3r/GUI/PrintHostDialogs.cpp:149
 msgid "Status"
 msgstr "Stan"
 
@@ -7366,166 +8485,160 @@ msgstr "Stan"
 msgid "Status:"
 msgstr "Stan:"
 
-#: src/slic3r/GUI/Tab.cpp:2209
+#: src/slic3r/GUI/Search.cpp:77 src/slic3r/GUI/Tab.cpp:2378
 msgid "Stealth"
 msgstr "Stealth"
 
-#: src/slic3r/GUI/Plater.cpp:1291
+#: src/slic3r/GUI/Plater.cpp:1187 src/slic3r/GUI/Plater.cpp:1235
 msgid "stealth mode"
 msgstr "tryb stealth"
 
-#: src/slic3r/GUI/Plater.cpp:4985
+#: src/slic3r/GUI/GCodeViewer.cpp:2557
+msgid "Stealth mode"
+msgstr "Tryb stealth"
+
+#: src/slic3r/GUI/Plater.cpp:5118
 #, c-format
 msgid "STL file exported to %s"
 msgstr "Plik STL wyeksportowany do %s"
 
-#: src/slic3r/GUI/GUI_ObjectLayers.cpp:27
+#: src/slic3r/GUI/GUI_ObjectLayers.cpp:29
 msgid "Stop at height"
 msgstr "Zakres do"
 
-#: src/slic3r/GUI/Tab.cpp:1693 src/slic3r/GUI/Tab.cpp:1928
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:295
 msgid "Success!"
 msgstr "Powodzenie!"
 
-#: src/slic3r/GUI/PresetHints.cpp:203
+#: src/slic3r/GUI/Plater.cpp:2047
+#, c-format
+msgid "Successfully unmounted. The device %s(%s) can now be safely removed from the computer."
+msgstr "Wysunięto pomyślnie. Urządzenie %s(%s) można teraz bezpiecznie odłączyć od komputera."
+
+#: src/slic3r/GUI/PresetHints.cpp:202
 msgid "support"
 msgstr "podpora"
 
-#: src/libslic3r/PrintConfig.cpp:2692
+#: src/libslic3r/PrintConfig.cpp:2856
 msgid "Support base diameter"
 msgstr "Średnica stopy podpory"
 
-#: src/libslic3r/PrintConfig.cpp:2702
+#: src/libslic3r/PrintConfig.cpp:2866
 msgid "Support base height"
 msgstr "Wysokość stopy podpory"
 
-#: src/libslic3r/PrintConfig.cpp:2711
+#: src/libslic3r/PrintConfig.cpp:2875
 msgid "Support base safety distance"
 msgstr "Bezpieczna odległość stopy podpory"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Blocker"
 msgstr "Blokada podpór"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3551
+#: src/libslic3r/PrintConfig.cpp:895
+msgid "Support Cubic"
+msgstr "Sześcienny podpierający"
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4014
 msgid "Support Enforcer"
 msgstr "Wymuszenie podpór"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:163
+#: src/slic3r/GUI/ConfigManipulation.cpp:162
 msgid "Support Generator"
 msgstr "Generator podpór"
 
-#: src/slic3r/GUI/Tab.cpp:3608
+#: src/slic3r/GUI/Tab.cpp:4018
 msgid "Support head"
 msgstr "Łącznik podpory"
 
-#: src/libslic3r/PrintConfig.cpp:2620
-msgid "Support head front diameter"
-msgstr "Średnica początku łącznika"
-
-#: src/libslic3r/PrintConfig.cpp:2629
-msgid "Support head penetration"
-msgstr "Przenikanie łączników podpór"
-
-#: src/libslic3r/PrintConfig.cpp:2638
-msgid "Support head width"
-msgstr "Szerokość łączników podpór"
-
-#: src/slic3r/GUI/PresetHints.cpp:213
+#: src/slic3r/GUI/PresetHints.cpp:212
 msgid "support interface"
 msgstr "warstwa łącząca podpory z modelem"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:97
-#: src/slic3r/GUI/GUI_ObjectList.cpp:615 src/slic3r/GUI/GUI_Preview.cpp:246
-#: src/slic3r/GUI/Tab.cpp:1120 src/slic3r/GUI/Tab.cpp:1121
-#: src/libslic3r/ExtrusionEntity.cpp:319 src/libslic3r/PrintConfig.cpp:370
-#: src/libslic3r/PrintConfig.cpp:1502 src/libslic3r/PrintConfig.cpp:1866
-#: src/libslic3r/PrintConfig.cpp:1872 src/libslic3r/PrintConfig.cpp:1880
-#: src/libslic3r/PrintConfig.cpp:1892 src/libslic3r/PrintConfig.cpp:1902
-#: src/libslic3r/PrintConfig.cpp:1910 src/libslic3r/PrintConfig.cpp:1925
-#: src/libslic3r/PrintConfig.cpp:1946 src/libslic3r/PrintConfig.cpp:1958
-#: src/libslic3r/PrintConfig.cpp:1974 src/libslic3r/PrintConfig.cpp:1983
-#: src/libslic3r/PrintConfig.cpp:1992 src/libslic3r/PrintConfig.cpp:2003
-#: src/libslic3r/PrintConfig.cpp:2017 src/libslic3r/PrintConfig.cpp:2025
-#: src/libslic3r/PrintConfig.cpp:2026 src/libslic3r/PrintConfig.cpp:2035
-#: src/libslic3r/PrintConfig.cpp:2043 src/libslic3r/PrintConfig.cpp:2057
+#: src/slic3r/GUI/GUI_ObjectList.cpp:36 src/slic3r/GUI/GUI_ObjectList.cpp:95
+#: src/slic3r/GUI/GUI_ObjectList.cpp:654 src/slic3r/GUI/GUI_Preview.cpp:311
+#: src/slic3r/GUI/Tab.cpp:1449 src/slic3r/GUI/Tab.cpp:1450
+#: src/libslic3r/ExtrusionEntity.cpp:324 src/libslic3r/ExtrusionEntity.cpp:356
+#: src/libslic3r/PrintConfig.cpp:404 src/libslic3r/PrintConfig.cpp:1610
+#: src/libslic3r/PrintConfig.cpp:2008 src/libslic3r/PrintConfig.cpp:2014
+#: src/libslic3r/PrintConfig.cpp:2022 src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2044 src/libslic3r/PrintConfig.cpp:2052
+#: src/libslic3r/PrintConfig.cpp:2067 src/libslic3r/PrintConfig.cpp:2088
+#: src/libslic3r/PrintConfig.cpp:2100 src/libslic3r/PrintConfig.cpp:2116
+#: src/libslic3r/PrintConfig.cpp:2125 src/libslic3r/PrintConfig.cpp:2134
+#: src/libslic3r/PrintConfig.cpp:2145 src/libslic3r/PrintConfig.cpp:2159
+#: src/libslic3r/PrintConfig.cpp:2167 src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2177 src/libslic3r/PrintConfig.cpp:2185
+#: src/libslic3r/PrintConfig.cpp:2199
 msgid "Support material"
 msgstr "Materiał podporowy"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:247 src/libslic3r/ExtrusionEntity.cpp:320
-#: src/libslic3r/PrintConfig.cpp:1991
+#: src/slic3r/GUI/GUI_Preview.cpp:312 src/libslic3r/ExtrusionEntity.cpp:325
+#: src/libslic3r/ExtrusionEntity.cpp:358 src/libslic3r/PrintConfig.cpp:2133
 msgid "Support material interface"
 msgstr "Warstwa łącząca podpory z modelem"
 
-#: src/libslic3r/PrintConfig.cpp:2044
+#: src/libslic3r/PrintConfig.cpp:2186
 msgid "Support material will not be generated for overhangs whose slope angle (90° = vertical) is above the given threshold. In other words, this value represent the most horizontal slope (measured from the horizontal plane) that you can print without support material. Set to zero for automatic detection (recommended)."
 msgstr "Podpory nie będą generowane dla zwisów, których kąt przekracza zadany próg (90° = pion). Inaczej mówiąc, ta wartość określa największy kąt od poziomu (kąt mierzony od płaszczyzny poziomej), który będzie drukowany bez podpór."
 
-#: src/libslic3r/PrintConfig.cpp:1964
+#: src/libslic3r/PrintConfig.cpp:2106
 msgid "Support material/raft interface extruder"
 msgstr "Ekstruder dla podpór/warstw łączących raft z modelem"
 
-#: src/libslic3r/PrintConfig.cpp:1937
+#: src/libslic3r/PrintConfig.cpp:2079
 msgid "Support material/raft/skirt extruder"
 msgstr "Ekstruder dla podpór/tratwy (raft)/skirtu"
 
-#: src/slic3r/GUI/Plater.cpp:500 src/libslic3r/PrintConfig.cpp:1901
-#: src/libslic3r/PrintConfig.cpp:2674
+#: src/slic3r/GUI/Plater.cpp:366 src/libslic3r/PrintConfig.cpp:2043
+#: src/libslic3r/PrintConfig.cpp:2838
 msgid "Support on build plate only"
 msgstr "Podpory tylko na stole"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:888
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:762
 msgid "Support parameter change"
 msgstr "Zmiana parametrów podpór"
 
-#: src/slic3r/GUI/Tab.cpp:3613
+#: src/slic3r/GUI/Tab.cpp:4023
 msgid "Support pillar"
 msgstr "Słupek podpory"
 
-#: src/libslic3r/PrintConfig.cpp:2658
-msgid "Support pillar connection mode"
-msgstr "Tryb łączenia słupków podpór"
-
-#: src/libslic3r/PrintConfig.cpp:2648
-msgid "Support pillar diameter"
-msgstr "Średnica słupków podpór"
-
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:55
-#: src/libslic3r/PrintConfig.cpp:2764
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:54
+#: src/libslic3r/PrintConfig.cpp:2928
 msgid "Support points density"
 msgstr "Gęstość punktów podpór"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1196
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1048
 msgid "Support points edit"
 msgstr "Edycja punktów podpór"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:106 src/slic3r/GUI/GUI_ObjectList.cpp:624
-#: src/slic3r/GUI/Plater.cpp:495 src/slic3r/GUI/Tab.cpp:3604
-#: src/slic3r/GUI/Tab.cpp:3605 src/libslic3r/PrintConfig.cpp:2614
-#: src/libslic3r/PrintConfig.cpp:2621 src/libslic3r/PrintConfig.cpp:2630
-#: src/libslic3r/PrintConfig.cpp:2639 src/libslic3r/PrintConfig.cpp:2649
-#: src/libslic3r/PrintConfig.cpp:2675 src/libslic3r/PrintConfig.cpp:2682
-#: src/libslic3r/PrintConfig.cpp:2693 src/libslic3r/PrintConfig.cpp:2703
-#: src/libslic3r/PrintConfig.cpp:2712 src/libslic3r/PrintConfig.cpp:2725
-#: src/libslic3r/PrintConfig.cpp:2735 src/libslic3r/PrintConfig.cpp:2744
-#: src/libslic3r/PrintConfig.cpp:2754 src/libslic3r/PrintConfig.cpp:2765
-#: src/libslic3r/PrintConfig.cpp:2773
+#: src/slic3r/GUI/GUI_ObjectList.cpp:104 src/slic3r/GUI/GUI_ObjectList.cpp:663
+#: src/slic3r/GUI/Plater.cpp:361 src/slic3r/GUI/Tab.cpp:4014
+#: src/slic3r/GUI/Tab.cpp:4015 src/libslic3r/PrintConfig.cpp:2757
+#: src/libslic3r/PrintConfig.cpp:2764 src/libslic3r/PrintConfig.cpp:2773
+#: src/libslic3r/PrintConfig.cpp:2782 src/libslic3r/PrintConfig.cpp:2792
+#: src/libslic3r/PrintConfig.cpp:2802 src/libslic3r/PrintConfig.cpp:2839
+#: src/libslic3r/PrintConfig.cpp:2846 src/libslic3r/PrintConfig.cpp:2857
+#: src/libslic3r/PrintConfig.cpp:2867 src/libslic3r/PrintConfig.cpp:2876
+#: src/libslic3r/PrintConfig.cpp:2889 src/libslic3r/PrintConfig.cpp:2899
+#: src/libslic3r/PrintConfig.cpp:2908 src/libslic3r/PrintConfig.cpp:2918
+#: src/libslic3r/PrintConfig.cpp:2929 src/libslic3r/PrintConfig.cpp:2937
 msgid "Supports"
 msgstr "Podpory"
 
-#: src/slic3r/GUI/Plater.cpp:1194
+#: src/slic3r/GUI/Plater.cpp:1103
 msgid "supports and pad"
 msgstr "podpory i podkładka"
 
-#: src/libslic3r/PrintConfig.cpp:1092
+#: src/libslic3r/PrintConfig.cpp:1185
 msgid "Supports remaining times"
 msgstr "Obsługa pozostałego czasu druku"
 
-#: src/libslic3r/PrintConfig.cpp:1101
+#: src/libslic3r/PrintConfig.cpp:1194
 msgid "Supports stealth mode"
 msgstr "Wspiera tryb Stealth"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:159
+#: src/slic3r/GUI/ConfigManipulation.cpp:158
 msgid ""
 "Supports work better, if the following feature is enabled:\n"
 "- Detect bridging perimeters"
@@ -7533,44 +8646,60 @@ msgstr ""
 "Podpory działają lepiej, jeśli włączone jest poniższe ustawienie:\n"
 "- Wykrywanie mostów przy obrysach"
 
-#: src/slic3r/GUI/Preferences.cpp:87
+#: src/slic3r/GUI/Preferences.cpp:104
 msgid "Suppress \" - default - \" presets"
 msgstr "Ukryj \" - domyślne - \" zestawy ustawień"
 
-#: src/slic3r/GUI/Preferences.cpp:89
+#: src/slic3r/GUI/Preferences.cpp:106
 msgid "Suppress \" - default - \" presets in the Print / Filament / Printer selections once there are any other valid presets available."
 msgstr "Ukryj \" - domyślne - \" zestawy ustawień w zakładkach Druk / Filament / Drukarka gdy dostępne są inne kompatybilne ustawienia."
 
-#: src/slic3r/GUI/MainFrame.cpp:826
+#: src/slic3r/GUI/MainFrame.cpp:1527
 msgid "SVG"
 msgstr "SVG"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1144
+#: src/slic3r/GUI/Mouse3DController.cpp:318
+msgid "Swap Y/Z axes"
+msgstr "Zamień osie Y/Z"
+
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+msgid "Switch between Editor/Preview"
+msgstr "Przełącz między edytorem/podglądem"
+
+#: src/slic3r/GUI/DoubleSlider.cpp:1273
 msgid "Switch code to Change extruder"
 msgstr "Przełącz kod na zmianę ekstrudera"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1179
+#: src/slic3r/GUI/DoubleSlider.cpp:1306
 msgid "Switch code to Color change (%1%) for:"
 msgstr "Zmień kod na zmianę koloru (%1%) dla:"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:140
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:136
 msgid "Switch to 3D"
 msgstr "Przełącz na 3D"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1376
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1223
 msgid "Switch to editing mode"
 msgstr "Tryb edycji"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:141
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:137
 msgid "Switch to Preview"
 msgstr "Przełącz na Podgląd cięcia"
 
-#: src/slic3r/GUI/wxExtensions.cpp:703
+#: src/slic3r/GUI/GLCanvas3D.cpp:4302 src/slic3r/GUI/GLCanvas3D.cpp:4939
+msgid "Switch to Settings"
+msgstr "Przełącz na ustawienia"
+
+#: src/slic3r/GUI/wxExtensions.cpp:623
 #, c-format
 msgid "Switch to the %s mode"
 msgstr "Przełącz na tryb %s"
 
-#: src/slic3r/GUI/GUI_App.cpp:882
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:542
+msgid "Switching Presets: Unsaved Changes"
+msgstr "Przełączanie zestawu ustawień: niezapisane zmiany"
+
+#: src/slic3r/GUI/GUI_App.cpp:1608
 msgid ""
 "Switching the language will trigger application restart.\n"
 "You will lose content of the plater."
@@ -7585,65 +8714,72 @@ msgid ""
 "Do you want to proceed?"
 msgstr "Włączenie trybu prostego spowoduje odrzucenie zmian wprowadzonych w trybie zaawansowanym! Czy chcesz kontynować?"
 
-#: src/slic3r/GUI/Tab.cpp:1014
+#: src/slic3r/GUI/Tab.cpp:1332
 msgid "symbolic profile name"
 msgstr "skrócona nazwa profilu"
 
-#: src/libslic3r/PrintConfig.cpp:2036
+#: src/libslic3r/PrintConfig.cpp:2178
 msgid "Synchronize support layers with the object print layers. This is useful with multi-material printers, where the extruder switch is expensive."
 msgstr "Synchronizuj warstwy podporowe z warstwami modelu. Przydaje się przy drukarkach typu multi-material gdy zmiana używanego materiału jest kosztowna."
 
-#: src/libslic3r/PrintConfig.cpp:2034
+#: src/libslic3r/PrintConfig.cpp:2176
 msgid "Synchronize with object layers"
 msgstr "Synchronizuj z warstwami modelu"
 
-#: src/slic3r/GUI/MainFrame.cpp:699
+#: src/slic3r/GUI/MainFrame.cpp:924 src/slic3r/GUI/MainFrame.cpp:1323
 msgid "System &Info"
 msgstr "&Informacje o Systemie"
 
-#: src/slic3r/GUI/SysInfoDialog.cpp:78
+#: src/slic3r/GUI/SysInfoDialog.cpp:90 src/slic3r/GUI/SysInfoDialog.cpp:92
 msgid "System Information"
 msgstr "Informacje o systemie"
 
-#: src/slic3r/GUI/Preset.cpp:1109 src/slic3r/GUI/Preset.cpp:1164
-#: src/slic3r/GUI/Preset.cpp:1242 src/slic3r/GUI/Preset.cpp:1284
-#: src/slic3r/GUI/PresetBundle.cpp:1583 src/slic3r/GUI/PresetBundle.cpp:1672
+#: src/slic3r/GUI/PresetComboBoxes.cpp:188
+#: src/slic3r/GUI/PresetComboBoxes.cpp:226
+#: src/slic3r/GUI/PresetComboBoxes.cpp:724
+#: src/slic3r/GUI/PresetComboBoxes.cpp:774
+#: src/slic3r/GUI/PresetComboBoxes.cpp:886
+#: src/slic3r/GUI/PresetComboBoxes.cpp:930
 msgid "System presets"
 msgstr "Ustawienia systemowe"
 
-#: src/slic3r/GUI/GUI_App.cpp:801
+#: src/slic3r/GUI/GUI_App.cpp:1481
 msgid "Take Configuration &Snapshot"
 msgstr "Wykonaj Zrzu&t Konfiguracji"
 
-#: src/slic3r/GUI/GUI_App.cpp:839
+#: src/slic3r/GUI/GUI_App.cpp:1540
 msgid "Taking configuration snapshot"
 msgstr "Zrzucanie konfiguracji"
 
-#: src/slic3r/GUI/Tab.cpp:1433 src/libslic3r/PrintConfig.cpp:2067
+#: src/slic3r/GUI/Tab.cpp:1779
 msgid "Temperature"
 msgstr "Temperatura"
 
-#: src/libslic3r/PrintConfig.cpp:1804
+#: src/libslic3r/PrintConfig.cpp:1919
 msgid "Temperature difference to be applied when an extruder is not active. Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped."
 msgstr "Różnica temperatur mająca zastosowanie gdy ekstruder nie jest używany. Włącza druk skirtu o wysokości równej wysokości modelu, dzięki której dysze będą co jakiś czas czyszczone."
 
-#: src/libslic3r/PrintConfig.cpp:1803
+#: src/libslic3r/PrintConfig.cpp:1918
 msgid "Temperature variation"
 msgstr "Zmiana temperatury"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1017
+#: src/slic3r/GUI/ConfigWizard.cpp:1383
 msgid "Temperatures"
 msgstr "Temperatury"
 
-#: src/slic3r/GUI/Tab.cpp:1677 src/slic3r/GUI/Tab.cpp:1915
+#: src/slic3r/GUI/Tab.cpp:2215
+msgid "Template Custom G-code"
+msgstr "Szablon niestandardowego G-code"
+
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:284
 msgid "Test"
 msgstr "Test"
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:172
+#: src/slic3r/GUI/BedShapeDialog.cpp:315
 msgid "Texture"
 msgstr "Tekstura"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:208
+#: src/slic3r/GUI/ConfigManipulation.cpp:207
 msgid "The %1% infill pattern is not supposed to work at 100%% density."
 msgstr "Wzór wypełnienia %1% nie działa z gęstością ustawioną na 100%%."
 
@@ -7661,11 +8797,11 @@ msgstr ""
 "Nie znaleziono urządzenia %s .\n"
 "Jeśli urządzenie jest podłączone, to naciśnij przycisk Reset obok złącza USB ..."
 
-#: src/slic3r/GUI/Tab.cpp:976
+#: src/slic3r/GUI/Tab.cpp:1238
 msgid "The current custom preset will be detached from the parent system preset."
 msgstr "Obecny niestandardowy zestaw ustawień zostanie odłączony od dziedziczącego zestawu systemowego."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:875
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:925
 msgid ""
 "The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n"
 "Non-uniform scaling of tilted objects is only possible in the World coordinate system,\n"
@@ -7674,120 +8810,137 @@ msgstr ""
 "Obecnie przekształcany model jest przechylony (kąty obrotu nie są wielokrotnością 90°).\n"
 "Nierównomierne skalowanie przechylonych modeli jest możliwe tylko w globalnym systemie koordynat, po osadzeniu kątów obrotu w koordynatach modelu."
 
-#: src/libslic3r/PrintConfig.cpp:2726
+#: src/libslic3r/PrintConfig.cpp:2890
 msgid "The default angle for connecting support sticks and junctions."
 msgstr "Domyślny kąt łączenia słupków i \"skrzyżowań\" podpór."
 
-#: src/libslic3r/SLAPrint.cpp:631
+#: src/libslic3r/SLAPrint.cpp:645
 msgid "The endings of the support pillars will be deployed on the gap between the object and the pad. 'Support base safety distance' has to be greater than the 'Pad object gap' parameter to avoid this."
-msgstr "Końcówki słupków podpór będą rozmieszczone w przestrzeni pomiędzy modelem a podkładką. Aby tego uniknąć, parametr \"Bezpieczna odległość stopy podpory\" powinien być większy niż \"Odstęp modelu od podkładki\"."
+msgstr "Końcówki słupków podpór będą rozmieszczone w przestrzeni pomiędzy modelem, a podkładką. Aby tego uniknąć, parametr \"Bezpieczna odległość stopy podpory\" powinien być większy niż \"Odstęp modelu od podkładki\"."
 
-#: src/libslic3r/PrintConfig.cpp:489
+#: src/libslic3r/PrintConfig.cpp:525
 msgid "The extruder to use (unless more specific extruder settings are specified). This value overrides perimeter and infill extruders, but not the support extruders."
 msgstr "Używany ekstruder (jeśli nie są określone dokładniejsze ustawienia ekstuderów). To ustawienie nadpisuje ustawienia ekstruderów dla obrysów i wypełnienia, ale nie tych dla podpór."
 
-#: src/libslic3r/PrintConfig.cpp:1003
+#: src/libslic3r/PrintConfig.cpp:1047
 msgid "The extruder to use when printing infill."
 msgstr "Ekstruder używany do druku wypełnienia."
 
-#: src/libslic3r/PrintConfig.cpp:1410
+#: src/libslic3r/PrintConfig.cpp:1518
 msgid "The extruder to use when printing perimeters and brim. First extruder is 1."
 msgstr "Ekstruder używany przy druku obrysów i brim. Pierwszy ekstruder ma nr 1."
 
-#: src/libslic3r/PrintConfig.cpp:1738
+#: src/libslic3r/PrintConfig.cpp:1853
 msgid "The extruder to use when printing solid infill."
 msgstr "Ekstruder używany do druku zwartego wypełnienia."
 
-#: src/libslic3r/PrintConfig.cpp:1966
+#: src/libslic3r/PrintConfig.cpp:2108
 msgid "The extruder to use when printing support material interface (1+, 0 to use the current extruder to minimize tool changes). This affects raft too."
-msgstr "Ekstruder używany przy druku warstw łączących podpory z modelem (1+, zero aby użyć obecnie wybranego ekstrudera i zminimalizować zmiany filamentu). Ma wpływ również na druk tratwy (raftu)."
+msgstr "Ekstruder używany przy druku warstw łączących podpory z modelem (1+, zero, aby użyć obecnie wybranego ekstrudera i zminimalizować zmiany filamentu). Ma wpływ również na druk tratwy (raftu)."
 
-#: src/libslic3r/PrintConfig.cpp:1939
+#: src/libslic3r/PrintConfig.cpp:2081
 msgid "The extruder to use when printing support material, raft and skirt (1+, 0 to use the current extruder to minimize tool changes)."
 msgstr "Ekstruder używany przy druku podpór, tratwy (raft) i skirtu (1+, zero aby użyć obecnie wybranego ekstrudera i zminimalizować zmiany filamentu)."
 
-#: src/libslic3r/PrintConfig.cpp:727
+#: src/libslic3r/PrintConfig.cpp:763
 msgid "The filament material type for use in custom G-codes."
 msgstr "Rodzaj filamentu używanego przy własnym G-code."
 
-#: src/libslic3r/PrintConfig.cpp:3494
+#: src/libslic3r/PrintConfig.cpp:3693
 msgid "The file where the output will be written (if not specified, it will be based on the input file)."
 msgstr "Plik, w którym będzie zapisany efekt wyjściowy (jeśli nie zostanie określony, to będzie bazować na pliku wejściowym)."
 
-#: src/libslic3r/PrintConfig.cpp:1102
+#: src/libslic3r/PrintConfig.cpp:1195
 msgid "The firmware supports stealth mode"
 msgstr "Firmware wspiera tryb Stealth"
 
-#: src/libslic3r/PrintConfig.cpp:120
+#: src/libslic3r/PrintConfig.cpp:122
 msgid "The first layer will be shrunk in the XY plane by the configured value to compensate for the 1st layer squish aka an Elephant Foot effect."
-msgstr "Pierwsza warstwa zostanie zmniejszona o tą wartość w osiach X i Y aby zniwelować efekt stopy słonia (Elephant Foot - gdy pierwsza warstwa \"rozjeżdża\" się na boki)."
+msgstr "Pierwsza warstwa zostanie zmniejszona o tą wartość w osiach X i Y, aby zniwelować efekt stopy słonia (Elephant Foot - gdy pierwsza warstwa \"rozjeżdża\" się na boki)."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3820
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3927 src/slic3r/GUI/Tab.cpp:3457
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4283
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4410
+#: src/slic3r/GUI/SavePresetDialog.cpp:117
 msgid "the following characters are not allowed:"
 msgstr "następujące znaki nie są dozwolone:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1830
+#: src/slic3r/GUI/ConfigWizard.cpp:2257
 msgid "The following FFF printer models have no filament selected:"
 msgstr "Następujące modele drukarek FFF nie mają przypisanych filamentów:"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1848
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:1004
+msgid "The following presets were modified:"
+msgstr "Następujące zestawy ustawień zostały zmodyfikowane:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:2275
 msgid "The following SLA printer models have no materials selected:"
 msgstr "Następujące modele drukarek SLA nie mają przypisanych materiałów:"
 
-#: src/slic3r/GUI/Tab.cpp:3461
+#: src/slic3r/GUI/SavePresetDialog.cpp:125
 msgid "the following suffix is not allowed:"
 msgstr "następujący sufiks nie jest dozwolony:"
 
-#: src/libslic3r/PrintConfig.cpp:2871
+#: src/libslic3r/PrintConfig.cpp:3035
 msgid "The gap between the object bottom and the generated pad in zero elevation mode."
 msgstr "Odstęp między najniższą częścią modelu a wygenerowaną podkładką w trybie zerowego podniesienia."
 
-#: src/libslic3r/PrintConfig.cpp:2704
+#: src/libslic3r/PrintConfig.cpp:2868
 msgid "The height of the pillar base cone"
 msgstr "Wysokość stożka bazowego podpory"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1922
+#: src/slic3r/GUI/DoubleSlider.cpp:2140
 msgid "The last color change data was saved for a multi extruder printing with tool changes for whole print."
 msgstr "Dane ostatniej zmiany koloru zostały zapisane dla drukarki wielomateriałowej ze zmianami narzędzi dla całego wydruku."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1900 src/slic3r/GUI/DoubleSlider.cpp:1916
+#: src/slic3r/GUI/DoubleSlider.cpp:2119 src/slic3r/GUI/DoubleSlider.cpp:2134
 msgid "The last color change data was saved for a multi extruder printing."
 msgstr "Dane ostatniej zmiany koloru zostały zapisane dla druku wielomateriałowego."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1899
+#: src/slic3r/GUI/DoubleSlider.cpp:2118
 msgid "The last color change data was saved for a single extruder printing."
 msgstr "Dane ostatniej zmiany koloru zostały zapisane dla druku z jednym ekstruderem."
 
-#: src/libslic3r/PrintConfig.cpp:2745
+#: src/libslic3r/PrintConfig.cpp:2909
 msgid "The max distance of two pillars to get linked with each other. A zero value will prohibit pillar cascading."
 msgstr "Maksymalny dystans pomiędzy słupkami podpór, które powinny zostać połączone. Wartość 0 zapobiegnie łączeniu słupków podpór."
 
-#: src/libslic3r/PrintConfig.cpp:2736
+#: src/libslic3r/PrintConfig.cpp:2900
 msgid "The max length of a bridge"
 msgstr "Maksymalna długość mostu"
 
-#: src/libslic3r/PrintConfig.cpp:2714
+#: src/libslic3r/PrintConfig.cpp:2878
 msgid "The minimum distance of the pillar base from the model in mm. Makes sense in zero elevation mode where a gap according to this parameter is inserted between the model and the pad."
 msgstr "Minimalny odstęp stopy słupka od modelu, wyrażony w mm. Ma zastosowanie w trybie zerowego podniesienia, gdy odstęp określony tym parametrem będzie oddzielał model od podkładki."
 
-#: src/libslic3r/PrintConfig.cpp:185
+#: src/slic3r/GUI/SavePresetDialog.cpp:142
+msgid "The name cannot be empty."
+msgstr "Nazwa nie może być pusta."
+
+#: src/libslic3r/PrintConfig.cpp:219
 msgid "The number of bottom solid layers is increased above bottom_solid_layers if necessary to satisfy minimum thickness of bottom shell."
 msgstr "Liczba dolnych warstw jest zwiększona ponad bottom_solid_layers, jeśli to konieczne, aby spełnić warunek minimalnej grubości powłoki."
 
-#: src/libslic3r/PrintConfig.cpp:2143
+#: src/libslic3r/PrintConfig.cpp:2286
 msgid "The number of top solid layers is increased above top_solid_layers if necessary to satisfy minimum thickness of top shell. This is useful to prevent pillowing effect when printing with variable layer height."
 msgstr "Liczba górnych warstw jest zwiększona ponad top_solid_layers, jeśli to konieczne, aby spełnić warunek minimalnej grubości powłoki. Przydaje się do uniknięcia efektu \"pillowingu\" (wypychania górnych warstw) podczas drukowania ze zmienną wysokością warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:2277
+#: src/slic3r/GUI/Plater.cpp:2326
+msgid "The object appears to be saved in inches"
+msgstr "Model wygląda na zapisany w calach"
+
+#: src/libslic3r/PrintConfig.cpp:2420
 msgid "The object will be grown/shrunk in the XY plane by the configured value (negative = inwards, positive = outwards). This might be useful for fine-tuning hole sizes."
 msgstr "Model zostanie zmniejszony lub zwiększony w osiach X i Y o zadaną wartość (ujemna = zmniejszenie, dotatnia = zwiększenie). Może być przydatne przy kalibracji średnic otworów."
 
-#: src/libslic3r/PrintConfig.cpp:1503
+#: src/libslic3r/PrintConfig.cpp:1611
 msgid "The object will be raised by this number of layers, and support material will be generated under it."
 msgstr "Model zostanie podniesiony o zadaną ilość warstw i umieszczony na podporach."
 
-#: src/libslic3r/PrintConfig.cpp:2424
+#: src/libslic3r/PrintConfig.cpp:2803
+msgid "The percentage of smaller pillars compared to the normal pillar diameter which are used in problematic areas where a normal pilla cannot fit."
+msgstr "Udział procentowy mniejszych słupków w stosunku do normalnych w problematycznych obszarach, gdzie normalne słupki nie mieszczą się."
+
+#: src/libslic3r/PrintConfig.cpp:2567
 msgid ""
 "The percentage of the bed area. \n"
 "If the print area exceeds the specified value, \n"
@@ -7797,39 +8950,51 @@ msgstr ""
 "Jeśli gabaryty wydruku przekraczają zadaną wartość,\n"
 "to zostanie użyte wolne przechylanie, w innym przypadku - szybkie"
 
-#: src/slic3r/GUI/GUI_App.cpp:932
-msgid "The presets on the following tabs were modified"
-msgstr "Ustawienia na następujących kartach zostały zmodyfikowane"
+#: src/slic3r/GUI/Tab.cpp:3430
+msgid "The physical printer(s) below is based on the preset, you are going to delete."
+msgstr "Na zestawie ustawień, który chcesz usunąć, bazuje poniższa fizyczna drukarka (lub fizyczne drukarki)."
 
-#: src/libslic3r/PrintConfig.cpp:1846
+#: src/slic3r/GUI/Tab.cpp:3438
+msgid "The physical printer(s) below is based only on the preset, you are going to delete."
+msgstr "Tylko na zestawie ustawień, który chcesz usunąć, bazuje poniższa fizyczna drukarka (lub fizyczne drukarki)."
+
+#: src/slic3r/GUI/GUI_App.cpp:1676
+msgid "The preset(s) modifications are successfully saved"
+msgstr "Modyfikacje zestawu (lub zestawów) ustawień zapisane pomyślnie"
+
+#: src/libslic3r/PrintConfig.cpp:1988
 msgid "The printer multiplexes filaments into a single hot end."
 msgstr "Drukarka przechodzi pomiędzy filamentami używając jednego hotendu."
 
-#: src/libslic3r/Format/3mf.cpp:1630
+#: src/libslic3r/Format/3mf.cpp:1667
 msgid "The selected 3mf file has been saved with a newer version of %1% and is not compatible."
 msgstr "Wybrany plik 3mf został zapisany przy pomocy nowszej wersji %1% i nie jest kompatybilny."
 
-#: src/libslic3r/Format/AMF.cpp:934
+#: src/libslic3r/Format/AMF.cpp:955
 msgid "The selected amf file has been saved with a newer version of %1% and is not compatible."
 msgstr "Wybrany plik amf został zapisany przy pomocy nowszej wersji %1% i nie jest kompatybilny."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:513
+#: src/slic3r/GUI/Plater.cpp:4751
+msgid "The selected file"
+msgstr "Wybrany plik"
+
+#: src/slic3r/GUI/BedShapeDialog.cpp:589
 msgid "The selected file contains no geometry."
 msgstr "Wybrany plik nie zawiera żadnego kształtu."
 
-#: src/slic3r/GUI/BedShapeDialog.cpp:517
+#: src/slic3r/GUI/BedShapeDialog.cpp:593
 msgid "The selected file contains several disjoint areas. This is not supported."
 msgstr "Wybrany plik zawiera kilka rozłączonych obszarów. Taki plik nie jest obsługiwany."
 
-#: src/slic3r/GUI/Plater.cpp:2970
+#: src/slic3r/GUI/Plater.cpp:2763
 msgid "The selected object can't be split because it contains more than one volume/material."
 msgstr "Wybrany model nie może być podzielony ponieważ składa się z więcej niż jednej części lub zawiera więcej niż jeden materiał."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:2270 src/slic3r/GUI/Plater.cpp:2978
+#: src/slic3r/GUI/GUI_ObjectList.cpp:2436 src/slic3r/GUI/Plater.cpp:2771
 msgid "The selected object couldn't be split because it contains only one part."
 msgstr "Wybrany model nie może być rozdzielony ponieważ zawiera tylko jedną część."
 
-#: src/slic3r/GUI/MainFrame.cpp:461
+#: src/slic3r/GUI/MainFrame.cpp:1003
 msgid ""
 "The selected project is no longer available.\n"
 "Do you want to remove it from the recent projects list?"
@@ -7837,7 +9002,7 @@ msgstr ""
 "Wybrany obiekt nie jest już dostępny.\n"
 "Czy chcesz usunąć go z listy niedawno używanych projektów?"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:998
+#: src/slic3r/GUI/DoubleSlider.cpp:1121
 msgid ""
 "The sequential print is on.\n"
 "It's impossible to apply any custom G-code for objects printing sequentually.\n"
@@ -7847,20 +9012,24 @@ msgstr ""
 "Niemożliwe jest dodawanie własnego G-code do modeli drukowanych sekwencyjnie.\n"
 "Ten kod nie będzie przetwarzany podczas generowania pliku G-code."
 
-#: src/libslic3r/PrintConfig.cpp:2846
+#: src/slic3r/GUI/ConfigWizard.cpp:1187
+msgid "The size of the object can be specified in inches"
+msgstr "Rozmiar modelu może być wyrażony w calach"
+
+#: src/libslic3r/PrintConfig.cpp:3010
 msgid "The slope of the pad wall relative to the bed plane. 90 degrees means straight walls."
 msgstr "Kąt pochylenia ścian podkładki względem powierzchni stołu. 90 stopni oznacza proste ściany."
 
-#: src/libslic3r/PrintConfig.cpp:1614
+#: src/libslic3r/PrintConfig.cpp:1722
 msgid "The speed for loading of a filament into extruder after retraction (it only applies to the extruder motor). If left to zero, the retraction speed is used."
-msgstr "Prędkość powrotu filamentu do ekstrudera po retrakcji (dotyczy tylko silnika ekstrudera). Ustaw zero aby użyć prędkości retrakcji."
+msgstr "Prędkość powrotu filamentu do ekstrudera po retrakcji (dotyczy tylko silnika ekstrudera). Ustaw zero, aby użyć prędkości retrakcji."
 
-#: src/libslic3r/PrintConfig.cpp:1606
+#: src/libslic3r/PrintConfig.cpp:1714
 msgid "The speed for retractions (it only applies to the extruder motor)."
 msgstr "Prędkość retrakcji (stosowana tylko dla silnika ekstrudera)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:81
-#, no-c-format
+#: src/slic3r/GUI/ConfigManipulation.cpp:80
+#, c-format
 msgid ""
 "The Spiral Vase mode requires:\n"
 "- one perimeter\n"
@@ -7878,106 +9047,111 @@ msgstr ""
 "- wyłączone ustawienie \"Zagwarantuj grubość ścianki\"\n"
 "- wyłączone wykrywanie cienkich ścian"
 
-#: src/libslic3r/Print.cpp:1237
+#: src/libslic3r/Print.cpp:1263
 msgid "The Spiral Vase option can only be used when printing a single object."
 msgstr "Tryb Wazy może być aktywny tylko podczas druku pojedynczego modelu."
 
-#: src/libslic3r/Print.cpp:1244
+#: src/libslic3r/Print.cpp:1270
 msgid "The Spiral Vase option can only be used when printing single material objects."
 msgstr "Tryb Wazy może być używany jedynie podczas druku z jednego materiału."
 
-#: src/slic3r/GUI/Tab.cpp:3068
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:464
 msgid "The supplied name is empty. It can't be saved."
 msgstr "Podana nazwa jest pusta. Nie można zapisać."
 
-#: src/slic3r/GUI/Tab.cpp:3465
+#: src/slic3r/GUI/SavePresetDialog.cpp:131
 msgid "The supplied name is not available."
 msgstr "Podana nazwa jest niedostępna."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3819
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3926 src/slic3r/GUI/Tab.cpp:3456
-#: src/slic3r/GUI/Tab.cpp:3460
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4282
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4409
+#: src/slic3r/GUI/SavePresetDialog.cpp:116
+#: src/slic3r/GUI/SavePresetDialog.cpp:124
 msgid "The supplied name is not valid;"
 msgstr "Podana nazwa nie jest prawidłowa;"
 
-#: src/libslic3r/Print.cpp:1222
+#: src/libslic3r/Print.cpp:1248
 msgid "The supplied settings will cause an empty print."
 msgstr "Wprowadzone ustawienia spowodują pusty wydruk."
 
-#: src/libslic3r/PrintConfig.cpp:2789
+#: src/libslic3r/PrintConfig.cpp:2953
 msgid "The thickness of the pad and its optional cavity walls."
 msgstr "Grubość podkładki i opcjonalnie wydrążenie ścianek."
 
-#: src/libslic3r/PrintConfig.cpp:1911
+#: src/libslic3r/PrintConfig.cpp:2053
 msgid "The vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from using bridge flow and speed for the first object layer."
 msgstr "Dystans w pionie między modelem a warstwą łączącą materiału podporowego. Ustawienie na 0 wyłączy ustawienie mostu (prędkości i przepływu) dla pierwszej warstwy modelu nad warstwą łączącą."
 
-#: src/slic3r/GUI/Tab.cpp:2575
+#: src/slic3r/GUI/Tab.cpp:2731
 msgid ""
 "The Wipe option is not available when using the Firmware Retraction mode.\n"
 "\n"
 "Shall I disable it in order to enable Firmware Retraction?"
 msgstr ""
-"Opcja czyszczenia dyszy nie jest dostępna z funkcją Retrakcji w Firmware (Firmware Retraction).\n"
+"Opcja czyszczenia dyszy nie jest dostępna z funkcją retrakcji w firmware (Firmware Retraction).\n"
 "\n"
-"Wyłączyć ją aby włączyć Firmware Retraction?"
+"Wyłączyć ją, aby włączyć Firmware Retraction?"
 
-#: src/libslic3r/Print.cpp:1268
+#: src/libslic3r/Print.cpp:1294
 msgid "The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)."
 msgstr "Wieża czyszcząca obecnie nie obsługuje wolumetrycznego parametru E (use_volumetric_e=0)."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:115
+#: src/slic3r/GUI/ConfigManipulation.cpp:114
 msgid ""
 "The Wipe Tower currently supports the non-soluble supports only\n"
 "if they are printed with the current extruder without triggering a tool change.\n"
 "(both support_material_extruder and support_material_interface_extruder need to be set to 0)."
 msgstr "Wieża czyszcząca obsługuje podpory nierozpuszczalne jedynie, gdy są drukowane tym samym ekstruderem - bez wywoływania zmiany narzędzia (zarówno support_material_extruder i support_material_interface_extruder muszą być ustawione na 0)."
 
-#: src/libslic3r/Print.cpp:1400
+#: src/libslic3r/Print.cpp:1426
 msgid "The Wipe Tower currently supports the non-soluble supports only if they are printed with the current extruder without triggering a tool change. (both support_material_extruder and support_material_interface_extruder need to be set to 0)."
 msgstr "Wieża Czyszcząca obsługuje podpory nierozpuszczalne jedynie, gdy są drukowane tym samym ekstruderem - bez wywoływania zmiany narzędzia (zarówno support_material_extruder i support_material_interface_extruder muszą być ustawione na 0)."
 
-#: src/libslic3r/Print.cpp:1270
+#: src/libslic3r/Print.cpp:1296
 msgid "The Wipe Tower is currently not supported for multimaterial sequential prints."
 msgstr "Wieża czyszcząca jest obecnie niedostępna dla wielomateriałowego druku sekwencyjnego."
 
-#: src/libslic3r/Print.cpp:1262
-msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors."
-msgstr "Wieża Czyszcząca jest obecnie dostępna tylko dla G-code w stylu Marlin, RepRap/Sprinter i Repetier."
+#: src/libslic3r/Print.cpp:1290
+msgid "The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors."
+msgstr "Wieża czyszcząca jest obecnie wspierana tylko dla G-code w stylu Marlin, RepRap/Sprinter, RepRapFirmware oraz Repetier."
 
-#: src/libslic3r/Print.cpp:1264
+#: src/libslic3r/Print.cpp:1290
 msgid "The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."
 msgstr "Wieża Czyszcząca jest obecnie dostępna tylko przy relatywnym adresowaniu ekstrudera (use_relative_e_distances=1)."
 
-#: src/libslic3r/Print.cpp:1293
+#: src/libslic3r/Print.cpp:1319
 msgid "The Wipe Tower is only supported for multiple objects if they are printed over an equal number of raft layers"
 msgstr "Wieża Czyszcząca jest dostępna dla wielu modeli tylko gdy są drukowane na takiej samej ilości warstw tratwy (raft)"
 
-#: src/libslic3r/Print.cpp:1295
+#: src/libslic3r/Print.cpp:1321
 msgid "The Wipe Tower is only supported for multiple objects if they are printed with the same support_material_contact_distance"
 msgstr "Wieża czyszcząca jest dostępna dla wielu modeli pod warunkiem, że ustawienie support_material_contact_distance jest jednakowe dla każdego z nich"
 
-#: src/libslic3r/Print.cpp:1297
+#: src/libslic3r/Print.cpp:1323
 msgid "The Wipe Tower is only supported for multiple objects if they are sliced equally."
 msgstr "Wieża Czyszcząca jest dostępna dla kilku modeli tylko jeśli są cięte z taką samą wysokością warstwy."
 
-#: src/libslic3r/Print.cpp:1291
+#: src/libslic3r/Print.cpp:1317
 msgid "The Wipe Tower is only supported for multiple objects if they have equal layer heights"
 msgstr "Wieża czyszcząca jest dostępna dla wielu modeli pod warunkiem, że mają one równą wysokość warstwy"
 
-#: src/libslic3r/Print.cpp:1257
+#: src/libslic3r/Print.cpp:1283
 msgid "The wipe tower is only supported if all extruders have the same nozzle diameter and use filaments of the same diameter."
 msgstr "Wieża Czyszcząca jest dostępna tylko, gdy wszystkie ekstrudery mają taką samą średnicę dyszy i używają filamentów i takiej samej średnicy."
 
-#: src/libslic3r/Print.cpp:1339
+#: src/libslic3r/Print.cpp:1365
 msgid "The Wipe tower is only supported if all objects have the same variable layer height"
 msgstr "Wieża czyszcząca jest dostępna dla wielu modeli pod warunkiem, że mają one taką samą wysokość warstwy"
 
-#: src/libslic3r/SLAPrintSteps.cpp:621
+#: src/slic3r/GUI/Plater.cpp:3563
+msgid "There are active warnings concerning sliced models:"
+msgstr "Istnieją aktywne ostrzeżenia dotyczące ciętych modeli:"
+
+#: src/libslic3r/SLAPrintSteps.cpp:619
 msgid "There are unprintable objects. Try to adjust support settings to make the objects printable."
 msgstr "Na stole są modele niemożliwe do wydrukowania. Spróbuj zmienić ustawienia podpór, aby możliwe było ich drukowanie."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1030
+#: src/slic3r/GUI/DoubleSlider.cpp:1155
 msgid ""
 "There is a color change for extruder that has not been used before.\n"
 "Check your settings to avoid redundant color changes."
@@ -7985,7 +9159,7 @@ msgstr ""
 "Występuje zmiana koloru dla ekstrudera, który nie był jeszcze używany.\n"
 "Sprawdź ustawienia, aby uniknąć niepotrzebnych zmian koloru."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1024
+#: src/slic3r/GUI/DoubleSlider.cpp:1149
 msgid ""
 "There is a color change for extruder that won't be used till the end of print job.\n"
 "This code won't be processed during G-code generation."
@@ -7993,7 +9167,7 @@ msgstr ""
 "Występuje zmiana koloru dla ekstrudera, który nie będzie używany do końca tego wydruku.\n"
 "Ten kod nie będzie przetwarzany podczas generowania G-code."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1027
+#: src/slic3r/GUI/DoubleSlider.cpp:1152
 msgid ""
 "There is an extruder change set to the same extruder.\n"
 "This code won't be processed during G-code generation."
@@ -8001,12 +9175,16 @@ msgstr ""
 "Występuje zmiana koloru na używany przez ten sam ekstruder.\n"
 "Ten kod nie będzie przetwarzany podczas generowania G-code."
 
+#: src/libslic3r/GCode.cpp:604
+msgid "There is an object with no extrusions on the first layer."
+msgstr "Istnieje model bez ekstruzji na pierwszej warstwie."
+
 #: src/slic3r/GUI/UpdateDialogs.cpp:225
 #, c-format
 msgid "This %s version: %s"
 msgstr "%s wersja: %s"
 
-#: src/slic3r/GUI/Tab.cpp:982
+#: src/slic3r/GUI/Tab.cpp:1244
 msgid ""
 "This action is not revertable.\n"
 "Do you want to proceed?"
@@ -8014,79 +9192,79 @@ msgstr ""
 "Tej czynności nie można odwrócić.\n"
 "Czy chcesz kontynuować?"
 
-#: src/libslic3r/PrintConfig.cpp:165
+#: src/libslic3r/PrintConfig.cpp:199
 msgid "This code is inserted between objects when using sequential printing. By default extruder and bed temperature are reset using non-wait command; however if M104, M109, M140 or M190 are detected in this custom code, Slic3r will not add temperature commands. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Ten kod jest wykonywany pomiędzy drukiem poszczególnych modeli w trybie druku sekwencyjnego. Domyślnie przy komendzie non-wait temperatury dyszy i stołu są resetowane; jednakże jeśli przy tej opcji zostaną użyte komendy M104, M109, M140 lub M190 to Slic3r nie doda własnych komend do kontroli temperatury. Pamiętaj, że możesz używać zmiennych typu placeholder, więc np. komendę \"M109 S[first_layer_temperature]\" (temperatura pierwszej warstwy) możesz umieścić gdzie chcesz."
 
-#: src/libslic3r/PrintConfig.cpp:1081
+#: src/libslic3r/PrintConfig.cpp:1174
 msgid "This custom code is inserted at every layer change, right after the Z move and before the extruder moves to the first layer point. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Ten kod jest wykonywany przy każdej zmianie warstwy - zaraz po podniesieniu głowicy na wysokość kolejnej warstwy ale zanim ekstruder przejdzie do pierwszego punktu nowej warstwy. Pamiętaj, że możesz użyć zmiennych typu placeholder dla wszystkich ustawień Slic3r, jak np. [layer_num] (numer warstwy) i [layer_z] (położenie warstwy w osi Z)."
 
-#: src/libslic3r/PrintConfig.cpp:154
+#: src/libslic3r/PrintConfig.cpp:188
 msgid "This custom code is inserted at every layer change, right before the Z move. Note that you can use placeholder variables for all Slic3r settings as well as [layer_num] and [layer_z]."
 msgstr "Ten kod jest wykonywany przy każdej zmianie warstwy, zaraz przed podniesieniem ekstrudera na wysokość nowej warstwy. Pamiętaj, że możesz użyć zmiennych typu placeholder dla wszystkich ustawień PrusaSlicer, jak np. [layer_num] (numer warstwy) i [layer_z] (położenie warstwy w osi Z)."
 
-#: src/libslic3r/PrintConfig.cpp:2094
+#: src/libslic3r/PrintConfig.cpp:2237
 msgid "This custom code is inserted before every toolchange. Placeholder variables for all PrusaSlicer settings as well as {previous_extruder} and {next_extruder} can be used. When a tool-changing command which changes to the correct extruder is included (such as T{next_extruder}), PrusaSlicer will emit no other such command. It is therefore possible to script custom behaviour both before and after the toolchange."
 msgstr "Ten kod jest wykonywany przy każdej zmianie narzędzia (filamentu). Możesz użyć zmiennych dla wszystkich ustawień PrusaSlicer, jak i również {previous_extruder} i {next_extruder}. Po wysłaniu komendy zmiany narzędzia, która zmienia obecny ekstruder (np. T{next_extruder}), PrusaSlicer nie powtórzy tej komendy. Możliwe jest więc zdefiniowanie własnego zachowania zarówno przed jak i po zmianie narzędzia."
 
-#: src/libslic3r/PrintConfig.cpp:396
+#: src/libslic3r/PrintConfig.cpp:430
 msgid "This end procedure is inserted at the end of the output file, before the printer end gcode (and before any toolchange from this filament in case of multimaterial printers). Note that you can use placeholder variables for all PrusaSlicer settings. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Ta procedura końcowa jest dodawana na końcu pliku wyjściowego, przed kodem końcowym (jak i również przed każdą zmianą z tego filamentu na kolejny w przypadku drukarek wielomateriałowych). Zauważ, że możesz używać zmiennych dla wszystkich ustawień PrusaSlicer. Jeśli masz kilka ekstruderów, to G-code jest wykonywany w ich kolejności."
 
-#: src/libslic3r/PrintConfig.cpp:386
+#: src/libslic3r/PrintConfig.cpp:420
 msgid "This end procedure is inserted at the end of the output file. Note that you can use placeholder variables for all PrusaSlicer settings."
 msgstr "Ta procedura końcowa jest dodawana na końcu pliku wyjściowego. Zauważ, że możesz używać zmiennych dla wszystkich ustawień PrusaSlicer."
 
-#: src/libslic3r/PrintConfig.cpp:1258 src/libslic3r/PrintConfig.cpp:1269
+#: src/libslic3r/PrintConfig.cpp:1366 src/libslic3r/PrintConfig.cpp:1377
 msgid "This experimental setting is used to limit the speed of change in extrusion rate. A value of 1.8 mm³/s² ensures, that a change from the extrusion rate of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."
 msgstr "To ustawienie eksperymentalne jest używane do ograniczania szybkości zmian ilości ekstrudowanego materiału. Wartość 1.8 mm³/s² oznacza, że zmiana z ilości ekstrudowanego materiału z poziomu 1.8 mm³/s (czyli 0.45 mm szerokości ekstruzji, 0.2 mm wysokości warstwy przy prędkości 20 mm/s) na 5.4 mm³/s (prędkość 60 mm/s) zajmie co najmniej 2 sekundy."
 
-#: src/libslic3r/PrintConfig.cpp:1248
+#: src/libslic3r/PrintConfig.cpp:1356
 msgid "This experimental setting is used to set the maximum volumetric speed your extruder supports."
-msgstr "Ta eksperymentalna funkcja określa maksymalną prędkość objętościową, którą jest w stanie wytłoczyć Twój ekstruder."
+msgstr "Ta eksperymentalna funkcja określa maksymalne natężenie przepływu (strumień objętości), które jest w stanie wytłoczyć Twój ekstruder."
 
-#: src/libslic3r/PrintConfig.cpp:2162
+#: src/libslic3r/PrintConfig.cpp:2305
 msgid "This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin."
-msgstr "Ta eksperymentalna funkcja używa komend G10 i G11 aby przerzucić kontrolę retrakcji na firmware. Jest wspierana jedynie przez najnowsze wersje Marlina."
+msgstr "Ta eksperymentalna funkcja używa komend G10 i G11, aby przerzucić kontrolę retrakcji na firmware. Jest wspierana jedynie przez najnowsze wersje Marlina."
 
-#: src/libslic3r/PrintConfig.cpp:2176
+#: src/libslic3r/PrintConfig.cpp:2319
 msgid "This experimental setting uses outputs the E values in cubic millimeters instead of linear millimeters. If your firmware doesn't already know filament diameter(s), you can put commands like 'M200 D[filament_diameter_0] T0' in your start G-code in order to turn volumetric mode on and use the filament diameter associated to the filament selected in Slic3r. This is only supported in recent Marlin."
-msgstr "Ta eksperymentalna funkcja określa wyjściowe dane E (ilość ekstruzji) w milimetrach sześciennych zamiast długości. Jeśli średnica filamentu nie została jeszcze ustawiona w firmware, możesz użyć komendy \"M200 D[filament_diameter_0] T0\" w skrypcie startowym aby włączyć tryb objętościowy i użyć filamentu powiązanego z ustawionym w Slic3r. Ta funkcja jest wspierana jedynie przez najnowsze wersje Marlina."
+msgstr "Ta eksperymentalna funkcja określa wyjściowe dane E (ilość ekstruzji) w milimetrach sześciennych zamiast długości. Jeśli średnica filamentu nie została jeszcze ustawiona w firmware, możesz użyć komendy \"M200 D[filament_diameter_0] T0\" w skrypcie startowym, aby włączyć tryb objętościowy i użyć filamentu powiązanego z ustawionym w Slic3r. Ta funkcja jest wspierana jedynie przez najnowsze wersje Marlina."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3972
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4459
 msgid "This extruder will be set for selected items"
 msgstr "Ten ekstruder zostanie ustawiony dla wybranych elementów"
 
-#: src/libslic3r/PrintConfig.cpp:224
+#: src/libslic3r/PrintConfig.cpp:258
 msgid "This factor affects the amount of plastic for bridging. You can decrease it slightly to pull the extrudates and prevent sagging, although default settings are usually good and you should experiment with cooling (use a fan) before tweaking this."
-msgstr "Ten współczynnik określa ilość plastiku wytłaczaną przy drukowaniu mostów. Możesz delikatnie zmniejszyć tą wartość aby zapobiec opadaniu drukowanej linii, jednakże standardowe ustawienia są zazwyczaj dobrze dobrane i najpierw poeksperymentuj z chłodzeniem wydruku."
+msgstr "Ten współczynnik określa ilość plastiku wytłaczaną przy drukowaniu mostów. Możesz delikatnie zmniejszyć tą wartość, aby zapobiec opadaniu drukowanej linii, jednakże standardowe ustawienia są zazwyczaj dobrze dobrane i najpierw poeksperymentuj z chłodzeniem wydruku."
 
-#: src/libslic3r/PrintConfig.cpp:546
+#: src/libslic3r/PrintConfig.cpp:582
 msgid "This factor changes the amount of flow proportionally. You may need to tweak this setting to get nice surface finish and correct single wall widths. Usual values are between 0.9 and 1.1. If you think you need to change this more, check filament diameter and your firmware E steps."
-msgstr "Ten współczynnik określa proporcjonalną ilość przepływu plastiku. Możesz zmienić tą wartość aby uzyskać gładsze powierzchnie i poprawną szerokość ścian drukowanych z 1 linii. Ten współczynnik waha się zazwyczaj od 0.9 do 1.1. Jeśli musisz wykroczyć poza ten zakres to najpierw zmierz średnicę filamentu i kroki ekstrudera (E steps)."
+msgstr "Ten współczynnik określa proporcjonalną ilość przepływu plastiku. Możesz zmienić tą wartość, aby uzyskać gładsze powierzchnie i poprawną szerokość ścian drukowanych z 1 linii. Ten współczynnik waha się zazwyczaj od 0.9 do 1.1. Jeśli musisz wykroczyć poza ten zakres to najpierw zmierz średnicę filamentu i kroki ekstrudera (E steps)."
 
-#: src/libslic3r/PrintConfig.cpp:214
+#: src/libslic3r/PrintConfig.cpp:248
 msgid "This fan speed is enforced during all bridges and overhangs."
 msgstr "Ta prędkość wentylatora zostanie zastosowana przy druku mostów i zwisów."
 
-#: src/libslic3r/PrintConfig.cpp:992
+#: src/libslic3r/PrintConfig.cpp:1036
 msgid "This feature allows to combine infill and speed up your print by extruding thicker infill layers while preserving thin perimeters, thus accuracy."
 msgstr "Ta funkcja pozwala ustawić oddzielne wysokości dla wypełnienia i obrysów modelu i przyspieszyć wydruk ustawiając np. wyższą warstwę wypełnienia zachowując nominalną wysokość obrysów, co pozwoli zachować wysoką jakość i dokładność wydruku."
 
-#: src/libslic3r/PrintConfig.cpp:1746
+#: src/libslic3r/PrintConfig.cpp:1861
 msgid "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height."
-msgstr "Ta funkcja pozwoli wstawić zwartą warstwę wypełnienia pomiędzy określoną liczbą warstw. Ustaw zero aby wyłączyć. Możesz ustawić tu dowolną wartość (np. 9999) a Slic3r automatycznie wybierze maksymalną możliwą liczbę warstw biorąc pod uwagę średnicę dyszy i wysokość warstwy."
+msgstr "Ta funkcja pozwoli wstawić zwartą warstwę wypełnienia pomiędzy określoną liczbą warstw. Ustaw zero, aby wyłączyć. Możesz ustawić tu dowolną wartość (np. 9999) a PrusaSlicer automatycznie wybierze maksymalną możliwą liczbę warstw biorąc pod uwagę średnicę dyszy i wysokość warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:1795
+#: src/libslic3r/PrintConfig.cpp:1910
 msgid "This feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. This option requires a single perimeter, no infill, no top solid layers and no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object."
 msgstr "Ta funkcja pozwala drukować modele z 1 zewnętrzną ścianką z ciągłym podnoszeniem Z, aby uniknąć widocznego szwu (czyli ekstruder nie będzie drukował po 1 warstwie na 1 wysokości, lecz będzie podnosił się płynnie w formie spirali). Wymaga użycia 1 obrysu, zerowego wypełnienia, braku warstw górnych i braku podpór. Możesz ustawić dowolną ilość dolnych warstw jak i obrysów skirt/brim. Nie zadziała przy druku więcej niż jednego modelu."
 
-#: src/slic3r/GUI/Plater.cpp:2367
+#: src/slic3r/GUI/Plater.cpp:2329
 msgid "This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?"
 msgstr "Ten plik nie może zostać wczytany w Trybie Prostym. Czy chcesz przełączyć na Tryb Zaawansowany?"
 
-#: src/slic3r/GUI/Plater.cpp:2357
+#: src/slic3r/GUI/Plater.cpp:2319
 msgid ""
 "This file contains several objects positioned at multiple heights.\n"
 "Instead of considering them as multiple objects, should I consider\n"
@@ -8113,84 +9291,96 @@ msgstr ""
 "Czy chcesz kontynuować i mimo wszystko wgrać ten plik .hex?\n"
 "Kontynuuj tylko, jeśli wiesz, że tak powinno być."
 
-#: src/libslic3r/PrintConfig.cpp:314
+#: src/libslic3r/PrintConfig.cpp:348
 msgid "This flag enables the automatic cooling logic that adjusts print speed and fan speed according to layer printing time."
 msgstr "Ta flaga umożliwia automatyczne sterowanie chłodzeniem przez zmianę prędkości druku i wentylatora względem czasu druku jednej warstwy."
 
-#: src/slic3r/GUI/Plater.cpp:536
+#: src/slic3r/GUI/Plater.cpp:402
 msgid "This flag enables the brim that will be printed around each object on the first layer."
 msgstr "Ta flaga włącza brim, który zostanie wydrukowany na pierwszej warstwie wokół każdego modelu."
 
-#: src/libslic3r/PrintConfig.cpp:1538
+#: src/libslic3r/PrintConfig.cpp:1646
 msgid "This flag enforces a retraction whenever a Z move is done."
 msgstr "Ta flaga wymusza retrakcję przy każdej zmianie wysokości Z."
 
-#: src/libslic3r/PrintConfig.cpp:2194
+#: src/libslic3r/PrintConfig.cpp:2337
 msgid "This flag will move the nozzle while retracting to minimize the possible blob on leaky extruders."
-msgstr "Ta flaga włączy ruch dyszy przy retrakcji aby zminimalizować formowanie się kropli filamentu wokół końcówki dyszy przy ekstruderach, które mają tendencję do wyciekania filamentu."
+msgstr "Ta flaga włączy ruch dyszy przy retrakcji, aby zminimalizować formowanie się kropli filamentu wokół końcówki dyszy przy ekstruderach, które mają tendencję do wyciekania filamentu."
 
-#: src/slic3r/GUI/Tab.cpp:953
+#: src/libslic3r/PrintConfig.cpp:1961
+msgid "This G-code will be used as a code for the color change"
+msgstr "Ten G-code zostanie użyty przy zmianie koloru"
+
+#: src/libslic3r/PrintConfig.cpp:1970
+msgid "This G-code will be used as a code for the pause print"
+msgstr "Ten G-code zostanie użyty przy pauzie wydruku"
+
+#: src/libslic3r/PrintConfig.cpp:1979
+msgid "This G-code will be used as a custom code"
+msgstr "Ten G-code zostanie użyty jako niestandardowy"
+
+#: src/slic3r/GUI/Tab.cpp:1272
 msgid "This is a default preset."
 msgstr "To jest domyślny zestaw ustawień."
 
-#: src/libslic3r/PrintConfig.cpp:2766
+#: src/libslic3r/PrintConfig.cpp:2930
 msgid "This is a relative measure of support points density."
 msgstr "To jest względna miara gęstości punktów podpór."
 
-#: src/slic3r/GUI/Tab.cpp:2338
+#: src/slic3r/GUI/Tab.cpp:2507
 msgid "This is a single extruder multimaterial printer, diameters of all extruders will be set to the new value. Do you want to proceed?"
 msgstr "To jest drukarka wielomateriałowa z jednym ekstruderem, więc średnice wszystkich ekstruderów zostaną zastąpione nową wartością. Kontynuować?"
 
-#: src/slic3r/GUI/Tab.cpp:955
+#: src/slic3r/GUI/Tab.cpp:1274
 msgid "This is a system preset."
 msgstr "To jest systemowy zestaw ustawień."
 
-#: src/libslic3r/PrintConfig.cpp:523 src/libslic3r/PrintConfig.cpp:583
+#: src/libslic3r/PrintConfig.cpp:559 src/libslic3r/PrintConfig.cpp:619
 msgid "This is only used in the Slic3r interface as a visual help."
-msgstr "Ta funkcja jest używana jedynie w interfejsie Slic3ra jako pomoc wizualna."
+msgstr "Ta funkcja jest używana jedynie w interfejsie PrusaSlicer jako pomoc wizualna."
 
-#: src/libslic3r/PrintConfig.cpp:336
+#: src/libslic3r/PrintConfig.cpp:370
 msgid "This is the acceleration your printer will be reset to after the role-specific acceleration values are used (perimeter/infill). Set zero to prevent resetting acceleration at all."
-msgstr "Do tej wartości przyspieszenia drukarka wróci gdy ustawione zostaną przyspieszenia dla określonych ruchów (obrysy/wypełnienie). Ustaw zero aby wyłączyć resetowanie przyspieszeń."
+msgstr "Do tej wartości przyspieszenia drukarka wróci gdy ustawione zostaną przyspieszenia dla określonych ruchów (obrysy/wypełnienie). Ustaw zero, aby wyłączyć resetowanie przyspieszeń."
 
-#: src/libslic3r/PrintConfig.cpp:194
+#: src/libslic3r/PrintConfig.cpp:228
 msgid "This is the acceleration your printer will use for bridges. Set zero to disable acceleration control for bridges."
-msgstr "To jest przyspieszenie stosowane przy druku mostów. Ustaw zero aby wyłączyć osobne ustawienia przyspieszenia dla mostów."
+msgstr "To jest przyspieszenie stosowane przy druku mostów. Ustaw zero, aby wyłączyć osobne ustawienia przyspieszenia dla mostów."
 
-#: src/libslic3r/PrintConfig.cpp:860
+#: src/libslic3r/PrintConfig.cpp:900
 msgid "This is the acceleration your printer will use for first layer. Set zero to disable acceleration control for first layer."
-msgstr "To jest przyspieszenie stosowane przy druku pierwszej warstwy. Ustaw zero aby wyłączyć osobne ustawienia przyspieszenia dla pierwszej warstwy."
+msgstr "To jest przyspieszenie stosowane przy druku pierwszej warstwy. Ustaw zero, aby wyłączyć osobne ustawienia przyspieszenia dla pierwszej warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:982
+#: src/libslic3r/PrintConfig.cpp:1026
 msgid "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill."
-msgstr "To jest przyspieszenie stosowane przy druku wypełnienia. Ustaw zero aby wyłączyć osobne ustawienia przyspieszenia dla wypełnienia."
+msgstr "To jest przyspieszenie stosowane przy druku wypełnienia. Ustaw zero aby, wyłączyć osobne ustawienia przyspieszenia dla wypełnienia."
 
-#: src/libslic3r/PrintConfig.cpp:1400
+#: src/libslic3r/PrintConfig.cpp:1508
 msgid "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters."
-msgstr "To jest przyspieszenie stosowane przy druku obrysów. Wysoka wartość, np. 9000 zazwyczaj daje dobre rezultaty - pod warunkiem, że Twój sprzęt się do tego nadaje. Ustaw zero aby wyłączyć osobne ustawienia przyspieszenia dla obrysów."
+msgstr "To jest przyspieszenie stosowane przy druku obrysów. Wysoka wartość, np. 9000 zazwyczaj daje dobre rezultaty - pod warunkiem, że Twój sprzęt się do tego nadaje. Ustaw zero, aby wyłączyć osobne ustawienia przyspieszenia dla obrysów."
 
-#: src/libslic3r/PrintConfig.cpp:1327
+#: src/libslic3r/PrintConfig.cpp:1435
 msgid "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)"
 msgstr "To jest średnica dyszy ekstrudera (np. 0.5, 0.35 itp.)"
 
-#: src/libslic3r/PrintConfig.cpp:1227
-#, no-c-format
+#: src/libslic3r/PrintConfig.cpp:1335
+#, c-format
 msgid "This is the highest printable layer height for this extruder, used to cap the variable layer height and support layer height. Maximum recommended layer height is 75% of the extrusion width to achieve reasonable inter-layer adhesion. If set to 0, layer height is limited to 75% of the nozzle diameter."
-msgstr "To jest najwyższa możliwa do wydrukowania wysokość warstwy dla tego ekstrudera i jednocześnie górny limit dla funkcji zmiennej wysokości warstwy i materiału podporowego. Zalecana jest wartość nie większa niż 75% szerokości ekstruzji aby zapewnić dobrą przyczepność warstw do siebie. Jeśli ustawisz zero, wysokość warstwy zostanie ograniczona do 75% średnicy dyszy."
+msgstr "To jest najwyższa możliwa do wydrukowania wysokość warstwy dla tego ekstrudera i jednocześnie górny limit dla funkcji zmiennej wysokości warstwy i materiału podporowego. Zalecana jest wartość nie większa niż 75% szerokości ekstruzji, aby zapewnić dobrą przyczepność warstw do siebie. Jeśli ustawisz zero, wysokość warstwy zostanie ograniczona do 75% średnicy dyszy."
 
-#: src/libslic3r/PrintConfig.cpp:1290
+#: src/libslic3r/PrintConfig.cpp:1398
 msgid "This is the lowest printable layer height for this extruder and limits the resolution for variable layer height. Typical values are between 0.05 mm and 0.1 mm."
 msgstr "To jest najniższa możliwa do wydrukowania wysokość warstwy dla tego ekstrudera i jednocześnie dolny limit dla funkcji zmiennej wysokości warstwy. Zazwyczaj jest to 0.05 lub 0.1 mm."
 
-#: src/libslic3r/GCode.cpp:639
+#: src/libslic3r/GCode.cpp:624
 msgid "This is usually caused by negligibly small extrusions or by a faulty model. Try to repair the model or change its orientation on the bed."
 msgstr "Dzieje się to zazwyczaj z powodu zbyt małych odcinków ekstruzji (są one pomijane) lub uszkodzenia modelu. Spróbuj naprawić model lub zmienić jego orientację na stole."
 
-#: src/libslic3r/PrintConfig.cpp:2215
+#: src/libslic3r/PrintConfig.cpp:2358
 msgid "This matrix describes volumes (in cubic milimetres) required to purge the new filament on the wipe tower for any given pair of tools."
 msgstr "Ta formuła określa objętość (w milimetrach sześciennych) wymaganą do wyczyszczenia filamentu na wieży czyszczącej dla danej pary narzędzi (filamentów)."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:878
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:928
 msgid ""
 "This operation is irreversible.\n"
 "Do you want to proceed?"
@@ -8198,31 +9388,35 @@ msgstr ""
 "Tej czynności nie można cofnąć.\n"
 "Czy chcesz kontynuować?"
 
-#: src/libslic3r/PrintConfig.cpp:1442
+#: src/libslic3r/PrintConfig.cpp:1550
 msgid "This option sets the number of perimeters to generate for each layer. Note that Slic3r may increase this number automatically when it detects sloping surfaces which benefit from a higher number of perimeters if the Extra Perimeters option is enabled."
 msgstr "To ustawienie określa ilość obrysów, które będą generowane dla każdej warstwy. Weź po uwagę, że Slic3r może zwiększyć tą liczbę automatycznie gdy wykryje zwisy, w których wydruku pomoże dodatkowa ilość obrysów przy jednocześnie włączonej opcji \"Dodatkowe obrysy jeśli potrzebne\"."
 
-#: src/libslic3r/PrintConfig.cpp:1356
+#: src/libslic3r/PrintConfig.cpp:1464
 msgid "This option will drop the temperature of the inactive extruders to prevent oozing. It will enable a tall skirt automatically and move extruders outside such skirt when changing temperatures."
 msgstr "Ta funkcja obniży temperatury nieużywanych ekstruderów aby zapobiec wyciekaniu filamentu z dyszy. Równocześnie włączy wysoki skirt i przesunie ekstrudery poza jego obrys przy zmianie temperatury."
 
-#: src/libslic3r/PrintConfig.cpp:1029
+#: src/libslic3r/PrintConfig.cpp:1073
 msgid "This option will limit infill to the areas actually needed for supporting ceilings (it will act as internal support material). If enabled, slows down the G-code generation due to the multiple checks involved."
 msgstr "Ta opcja wygeneruje wypełnienie jedynie w miejscach, gdzie jest potrzebne do podparcia górnych warstw (zadziała na zasadzie wewnętrznych podpór). Włączenie jej spowolni generowanie G-code ze względu na konieczność kilkukrotnej weryfikacji."
 
-#: src/libslic3r/PrintConfig.cpp:1022
+#: src/libslic3r/PrintConfig.cpp:1066
 msgid "This option will switch the print order of perimeters and infill, making the latter first."
 msgstr "Ta opcja zamieni kolejność druku obrysów i wypełnienia, aby te drugie były drukowane jako pierwsze."
 
-#: src/libslic3r/PrintConfig.cpp:459
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:85
+msgid "This printer will be shown in the presets list as"
+msgstr "Ta drukarka będzie widnieć na liście zestawów ustawień jako"
+
+#: src/libslic3r/PrintConfig.cpp:495
 msgid "This separate setting will affect the speed of external perimeters (the visible ones). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
-msgstr "To ustawienie steruje prędkością zewnętrznych (widocznych) obrysów. Jeśli ustawisz wartość procentową (np. 80%) to zostanie obliczona z prędkości obrysów ustawionej powyżej. Ustaw zero aby pozwolić na sterowanie automatyczne."
+msgstr "To ustawienie steruje prędkością zewnętrznych (widocznych) obrysów. Jeśli ustawisz wartość procentową (np. 80%) to zostanie obliczona z prędkości obrysów ustawionej powyżej. Ustaw zero, aby pozwolić na sterowanie automatyczne."
 
-#: src/libslic3r/PrintConfig.cpp:1717
+#: src/libslic3r/PrintConfig.cpp:1832
 msgid "This separate setting will affect the speed of perimeters having radius <= 6.5mm (usually holes). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above. Set to zero for auto."
-msgstr "To ustawienie reguluje prędkość obrysów posiadających promień mniejszy lub równy 6.5 mm (zazwyczaj chodzi o otwory). Jeśli ustawisz wartość procentową (np. 80%) to zostanie obliczona z prędkości obrysów ustawionej powyżej. Ustaw zero aby użyć nastawów automatycznych."
+msgstr "To ustawienie reguluje prędkość obrysów posiadających promień mniejszy lub równy 6.5 mm (zazwyczaj chodzi o otwory). Jeśli ustawisz wartość procentową (np. 80%) to zostanie obliczona z prędkości obrysów ustawionej powyżej. Ustaw zero, aby użyć ustawień automatycznych."
 
-#: src/libslic3r/PrintConfig.cpp:1038
+#: src/libslic3r/PrintConfig.cpp:1082
 msgid "This setting applies an additional overlap between infill and perimeters for better bonding. Theoretically this shouldn't be needed, but backlash might cause gaps. If expressed as percentage (example: 15%) it is calculated over perimeter extrusion width."
 msgstr "To ustawienie odpowiada za dodatkowe nakładanie na siebie linii obrysów i wypełnienia dla lepszego spojenia. Teoretycznie nie powinno być potrzebne ale luz może powodować szczeliny. Jeśli ustawisz wartość procentową (np. 15%) to zostanie obliczona z szerokości ekstruzji obrysów."
 
@@ -8230,31 +9424,31 @@ msgstr "To ustawienie odpowiada za dodatkowe nakładanie na siebie linii obrysó
 msgid "This setting controls the height (and thus the total number) of the slices/layers. Thinner layers give better accuracy but take more time to print."
 msgstr "To ustawienie odpowiada za wysokość warstwy (czyli cięcia), a w konsekwencji za ich liczbę. Niższe warstwy zapewniają lepszą dokładność i jakość, ale wydłużają ogólny czas wydruku."
 
-#: src/libslic3r/PrintConfig.cpp:1218
+#: src/libslic3r/PrintConfig.cpp:1326
 msgid "This setting represents the maximum speed of your fan."
 msgstr "To ustawienie odpowiada za maksymalną prędkość wentylatora."
 
-#: src/libslic3r/PrintConfig.cpp:1281
+#: src/libslic3r/PrintConfig.cpp:1389
 msgid "This setting represents the minimum PWM your fan needs to work."
 msgstr "To ustawienie wyraża minimalny PWM (Pulse Width Modulation), który jest niezbędny dla wentylatora."
 
-#: src/libslic3r/PrintConfig.cpp:1829
+#: src/libslic3r/PrintConfig.cpp:1944
 msgid "This start procedure is inserted at the beginning, after any printer start gcode (and after any toolchange to this filament in case of multi-material printers). This is used to override settings for a specific filament. If PrusaSlicer detects M104, M109, M140 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want. If you have multiple extruders, the gcode is processed in extruder order."
 msgstr "Ta procedura startowa jest dodawana po kodzie startowym drukarki (i po zmianie filamentu w przypadku drukarek wielomateriałowych). Jest używana, aby nadpisać ustawienia dla konkretnego filamentu. Jeśli PrusaSlicer wykryje M104, M109, M140 lub M190 w Twoich kodach, to takie komendy nie będą automatycznie poprzedzane, więc możesz dowolnie ustawić kolejność nagrzewania i inne skonfigurowane przez siebie akcje. Zauważ, że możesz używać zmiennych dla wszystkich ustawień PrusaSlicer, więc możesz umieścić komendę \"M109 S[first_layer_temperature]\" gdzie tylko zechcesz. Jeśli masz kilka ekstruderów, to ten G-code jest wykonywany zgodnie z kolejnością ekstruderów."
 
-#: src/libslic3r/PrintConfig.cpp:1814
+#: src/libslic3r/PrintConfig.cpp:1929
 msgid "This start procedure is inserted at the beginning, after bed has reached the target temperature and extruder just started heating, and before extruder has finished heating. If PrusaSlicer detects M104 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all PrusaSlicer settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want."
 msgstr "Ta procedura startowa jest dodawana na początku, po osiągnięciu przez stół zadanej temperatury i rozpoczęciu nagrzewania ekstrudera, ale przed zakończeniem tego procesu. Jeśli PrusaSlicer wykryje M140 lub M190 w Twoich kodach, to takie komendy nie będą automatycznie poprzedzane, więc możesz dowolnie ustawić kolejność nagrzewania i inne skonfigurowane przez siebie akcje. Zauważ, że możesz używać zmiennych dla wszystkich ustawień PrusaSlicer, więc możesz umieścić komendę \"M109 S[first_layer_temperature]\" gdzie tylko zechcesz."
 
-#: src/libslic3r/PrintConfig.cpp:695
+#: src/libslic3r/PrintConfig.cpp:731
 msgid "This string is edited by RammingDialog and contains ramming specific parameters."
 msgstr "Ten ciąg jest edytowany przez RammingDialog i zawiera parametry właściwe dla wyciskania."
 
-#: src/libslic3r/PrintConfig.cpp:2286
+#: src/libslic3r/PrintConfig.cpp:2429
 msgid "This value will be added (or subtracted) from all the Z coordinates in the output G-code. It is used to compensate for bad Z endstop position: for example, if your endstop zero actually leaves the nozzle 0.3mm far from the print bed, set this to -0.3 (or fix your endstop)."
 msgstr "Wartość tego ustawienia zostanie dodana (lub odjęta) od wszystkich koordynat w osi Z w pliku wyjściowym G-code. Jest używana dla korekcji złego położenia wyłącznika krańcowego osi Z. Np. jeśli końcówka dyszy znajduje się 0.3 mm ponad położeniem zerowym, ustaw tutaj -0.3 (lub napraw krańcówkę)."
 
-#: src/libslic3r/PrintConfig.cpp:2208
+#: src/libslic3r/PrintConfig.cpp:2351
 msgid "This vector saves required volumes to change from/to each tool used on the wipe tower. These values are used to simplify creation of the full purging volumes below."
 msgstr "To ustawienie określa wymaganą objętość wieży czyszczącej przy zmianie danego narzędzia. Te wartości używane są do uproszczenia określenia pełnych wartości czyszczenia poniżej."
 
@@ -8271,82 +9465,96 @@ msgstr ""
 "\n"
 "Możesz zamknąć %s i spróbować ponownie z nowszą wersją, lub możesz też uruchomić ponownie konfigurację początkową. Spowoduje to stworzenie kopii istniejącej konfiguracji przed zainstalowaniem plików kompatybilnych z %s ."
 
-#: src/libslic3r/PrintConfig.cpp:2458
+#: src/libslic3r/PrintConfig.cpp:2601
 msgid "This will apply a gamma correction to the rasterized 2D polygons. A gamma value of zero means thresholding with the threshold in the middle. This behaviour eliminates antialiasing without losing holes in polygons."
 msgstr "To ustawienie zastosuje korekcję gamma do zrasteryzowanych wielokątów 2D. Wartość 0 oznacza ustawienie progu w środku zakresu. Spowoduje to wyeliminowanie antaliasing bez utraty otworów w wielokątach."
 
-#: src/libslic3r/PrintConfig.cpp:2081
+#: src/libslic3r/PrintConfig.cpp:2224
 msgid "Threads"
 msgstr "Wątki"
 
-#: src/libslic3r/PrintConfig.cpp:2082
+#: src/libslic3r/PrintConfig.cpp:2225
 msgid "Threads are used to parallelize long-running tasks. Optimal threads number is slightly above the number of available cores/processors."
 msgstr "Wątki są używane do równoległego przetwarzania zadań wymagających używa wielu zasobów. Optymalna liczba wątków powinna być odrobinę większa od dostępnej liczby rdzeni lub procesorów."
 
-#: src/slic3r/GUI/Tab.cpp:2093
+#: src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp:235
+msgid "Threshold:"
+msgstr "Próg:"
+
+#: src/slic3r/GUI/Tab.cpp:2263
 msgid "Tilt"
 msgstr "Przechylanie"
 
-#: src/slic3r/GUI/Tab.cpp:2094
+#: src/slic3r/GUI/Tab.cpp:2264
 msgid "Tilt time"
 msgstr "Czas przechylania"
 
+#: src/slic3r/GUI/GCodeViewer.cpp:2225 src/slic3r/GUI/GCodeViewer.cpp:2233
 #: src/slic3r/GUI/RammingChart.cpp:76
 msgid "Time"
 msgstr "Czas"
 
-#: src/libslic3r/PrintConfig.cpp:687
+#: src/libslic3r/PrintConfig.cpp:723
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Czas, który drukarka (lub dodatek Multi Material 2.0) poświęca na ładowanie nowego filamentu podczas zmiany narzędzia (przy wykonywaniu kodu T). Ten czas jest dodawany do szacowanego czasu druku."
 
-#: src/libslic3r/PrintConfig.cpp:702
+#: src/libslic3r/PrintConfig.cpp:738
 msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."
 msgstr "Czas, który drukarka (lub dodatek Multi Material 2.0) poświęca na rozładowanie nowego filamentu podczas zmiany narzędzia (przy wykonywaniu kodu T). Ten czas jest dodawany do szacowanego czasu druku."
 
-#: src/libslic3r/PrintConfig.cpp:2407
+#: src/libslic3r/PrintConfig.cpp:2550
 msgid "Time of the fast tilt"
 msgstr "Czas szybkiego przechylania"
 
-#: src/libslic3r/PrintConfig.cpp:2416
+#: src/libslic3r/PrintConfig.cpp:2559
 msgid "Time of the slow tilt"
 msgstr "Czas wolnego przechylania"
 
-#: src/libslic3r/PrintConfig.cpp:641
+#: src/libslic3r/PrintConfig.cpp:677
 msgid "Time to wait after the filament is unloaded. May help to get reliable toolchanges with flexible materials that may need more time to shrink to original dimensions."
 msgstr "Czas bezczynności po rozładowaniu filamentu. Może pomóc w bezproblemowej zmianie narzędzia podczas druku z materiałami elastycznymi, które mogą potrzebować więcej czasu na skurcz termiczny wracając do nominalnego rozmiaru."
 
-#: src/slic3r/GUI/Tab.cpp:966
-msgid "To do that please specify a new name for the preset."
-msgstr "Aby to zrobić ustaw nową nazwę zestawu ustawień."
+#: src/slic3r/GUI/GCodeViewer.cpp:2197
+msgid "to"
+msgstr "do"
 
-#: src/slic3r/GUI/Plater.cpp:4014
+#: src/slic3r/GUI/Tab.cpp:1284
+msgid "To do that please specify a new name for the preset."
+msgstr "Aby to zrobić, ustaw nową nazwę zestawu ustawień."
+
+#: src/slic3r/GUI/Plater.cpp:3934
 msgid "To objects"
 msgstr "Do modeli"
 
-#: src/slic3r/GUI/Plater.cpp:4016
+#: src/slic3r/GUI/Plater.cpp:3936
 msgid "To parts"
 msgstr "Na części"
 
-#: src/slic3r/GUI/Tab.cpp:1756
-msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain."
-msgstr "Aby użyć własnego certyfikatu, zaimportuj plik do Certificate Store / Keychain."
+#: src/slic3r/Utils/Http.cpp:82
+msgid "To specify the system certificate store manually, please set the %1% environment variable to the correct CA bundle and restart the application."
+msgstr "Aby ręcznie ustawić systemowy magazyn certyfikatów, ustaw %1% jako zmienną środowiskową pakietu i zrestartuj aplikację."
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:263
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:360
+msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain."
+msgstr "Aby użyć własnego certyfikatu, zaimportuj plik do magazynu (Certificate Store / Keychain)."
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:271
 #, c-format
 msgid "Toggle %c axis mirroring"
 msgstr "Włącz odbicie w osi %c"
 
-#: src/libslic3r/Zipper.cpp:34
+#: src/libslic3r/miniz_extension.cpp:93
 msgid "too many files"
 msgstr "zbyt wiele plików"
 
-#: src/libslic3r/SLAPrintSteps.cpp:190
-msgid "Too much overlapping holes."
+#: src/libslic3r/SLAPrintSteps.cpp:192
+msgid "Too many overlapping holes."
 msgstr "Zbyt wiele nakładających się otworów."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:227 src/slic3r/GUI/GUI_Preview.cpp:335
-#: src/slic3r/GUI/GUI_Preview.cpp:519 src/slic3r/GUI/GUI_Preview.cpp:574
-#: src/slic3r/GUI/GUI_Preview.cpp:835 src/libslic3r/GCode/PreviewData.cpp:357
+#: src/slic3r/GUI/GCodeViewer.cpp:2241 src/slic3r/GUI/GUI_Preview.cpp:281
+#: src/slic3r/GUI/GUI_Preview.cpp:453 src/slic3r/GUI/GUI_Preview.cpp:693
+#: src/slic3r/GUI/GUI_Preview.cpp:786 src/slic3r/GUI/GUI_Preview.cpp:1270
+#: src/libslic3r/GCode/PreviewData.cpp:362
 msgid "Tool"
 msgstr "Narzędzie"
 
@@ -8354,51 +9562,64 @@ msgstr "Narzędzie"
 msgid "Tool #"
 msgstr "Narzędzie #"
 
-#: src/slic3r/GUI/Tab.cpp:2000 src/libslic3r/PrintConfig.cpp:2093
+#: src/slic3r/GUI/Tab.cpp:2189 src/libslic3r/PrintConfig.cpp:2236
 msgid "Tool change G-code"
 msgstr "G-code wykonywany przy zmianie narzędzia"
 
-#: src/slic3r/GUI/Tab.cpp:1491
+#: src/slic3r/GUI/GCodeViewer.cpp:2530 src/slic3r/GUI/GUI_Preview.cpp:1474
+msgid "Tool changes"
+msgstr "Zmiany narzędzi"
+
+#: src/slic3r/GUI/GUI_Preview.cpp:1479
+msgid "Tool marker"
+msgstr "Oznaczenie narzędzia"
+
+#: src/slic3r/GUI/GCodeViewer.cpp:223
+msgid "Tool position"
+msgstr "Pozycja narzędzia"
+
+#: src/slic3r/GUI/Tab.cpp:1837
 msgid "Toolchange parameters with single extruder MM printers"
 msgstr "Parametry zmiany narzędzia dla drukarek MM z jednym ekstruderem"
 
 #. TRN To be shown in the main menu View->Top
 #. TRN To be shown in Print Settings "Top solid layers"
-#: src/slic3r/GUI/MainFrame.cpp:662 src/libslic3r/PrintConfig.cpp:2132
-#: src/libslic3r/PrintConfig.cpp:2141
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
+#: src/libslic3r/PrintConfig.cpp:2275 src/libslic3r/PrintConfig.cpp:2284
 msgid "Top"
 msgstr "Górne"
 
-#: src/slic3r/GUI/PresetHints.cpp:304
+#: src/slic3r/GUI/PresetHints.cpp:302
 msgid "Top / bottom shell thickness hint: Not available due to invalid layer height."
 msgstr "Porada dot. grubości dolnej / górnej powłoki: niedostępne z powodu nieprawidłowej wysokości warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:415
+#: src/libslic3r/PrintConfig.cpp:449
 msgid "Top fill pattern"
 msgstr "Wzór wypełnienia górnej warstwy"
 
-#: src/slic3r/GUI/PresetHints.cpp:323
+#: src/slic3r/GUI/PresetHints.cpp:321
 msgid "Top is open."
 msgstr "Góra jest otwarta."
 
-#: src/slic3r/GUI/PresetHints.cpp:317
+#: src/slic3r/GUI/PresetHints.cpp:315
 msgid "Top shell is %1% mm thick for layer height %2% mm."
 msgstr "Górna powłoka ma %1% mm grubości dla warstwy o wysokości %2% mm."
 
-#: src/slic3r/GUI/PresetHints.cpp:192
+#: src/slic3r/GUI/PresetHints.cpp:191
 msgid "top solid infill"
 msgstr "zwarte wypełnienie na szczycie"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:242 src/libslic3r/ExtrusionEntity.cpp:315
-#: src/libslic3r/PrintConfig.cpp:2105 src/libslic3r/PrintConfig.cpp:2117
+#: src/slic3r/GUI/GUI_Preview.cpp:306 src/libslic3r/ExtrusionEntity.cpp:319
+#: src/libslic3r/ExtrusionEntity.cpp:346 src/libslic3r/PrintConfig.cpp:2248
+#: src/libslic3r/PrintConfig.cpp:2260
 msgid "Top solid infill"
 msgstr "Zwarte wypełnienie górne"
 
-#: src/libslic3r/PrintConfig.cpp:2135
+#: src/libslic3r/PrintConfig.cpp:2278
 msgid "Top solid layers"
 msgstr "Zwarte warstwy górne"
 
-#: src/slic3r/GUI/MainFrame.cpp:662
+#: src/slic3r/GUI/MainFrame.cpp:959 src/slic3r/GUI/MainFrame.cpp:1279
 msgid "Top View"
 msgstr "Widok z góry"
 
@@ -8414,49 +9635,82 @@ msgstr "Całkowita objętość wyciskania"
 msgid "Total ramming time"
 msgstr "Całkowity czas wyciskania"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:516
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:640
+msgid "Transfer"
+msgstr "Transfer"
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:745
+msgid "Transfer the selected options to the newly selected preset \"%1%\"."
+msgstr "Przenieś wybrane opcje do nowo wybranego zestawu ustawień \"%1%\"."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:740
+msgid "Transfer the selected settings to the newly selected preset."
+msgstr "Przenieś wybrane ustawienia do nowo wybranego zestawu ustawień."
+
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:561
 msgid "Translate"
 msgstr "Konwersja"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:300
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:282
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Translation"
 msgstr "Tłumaczenie"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:253 src/libslic3r/PrintConfig.cpp:2152
+#: src/slic3r/GUI/GCodeViewer.cpp:2489 src/slic3r/GUI/GUI_Preview.cpp:335
+#: src/slic3r/GUI/GUI_Preview.cpp:1471 src/libslic3r/PrintConfig.cpp:2295
 msgid "Travel"
 msgstr "Jałowy"
 
-#: src/libslic3r/PrintConfig.cpp:845
+#: src/libslic3r/PrintConfig.cpp:883
 msgid "Triangles"
 msgstr "Trójkąty"
 
-#: src/libslic3r/PrintConfig.cpp:3448
+#: src/libslic3r/PrintConfig.cpp:3647
 msgid "Try to repair any non-manifold meshes (this option is implicitly added whenever we need to slice the model to perform the requested action)."
 msgstr "Podejmij próbę naprawienia wszystkich niezamkniętych obszarów siatki (ta opcja jest dodana w przypadku, w którym potrzebujemy pociąć model, aby przeprowadzić jakieś zadanie)."
 
-#: src/libslic3r/PrintConfig.cpp:1467
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:165
+msgid "Type here the name of your printer device"
+msgstr "Wpisz tutaj nazwę drukarki"
+
+#: src/libslic3r/PrintConfig.cpp:1575
 msgid "Type of the printer."
 msgstr "Rodzaj drukarki."
 
-#: src/slic3r/GUI/ConfigWizard.cpp:2013 src/slic3r/GUI/GUI_ObjectList.cpp:3553
+#: src/slic3r/GUI/ConfigWizard.cpp:2524 src/slic3r/GUI/ConfigWizard.cpp:2526
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4016
 msgid "Type:"
 msgstr "Typ:"
 
-#: src/slic3r/GUI/Plater.cpp:3428
+#: src/slic3r/GUI/OpenGLManager.cpp:275
+#, c-format
+msgid ""
+"Unable to load the following shaders:\n"
+"%s"
+msgstr ""
+"Niepowodzenie wczytywania następujących modułów cieniujących:\n"
+"%s"
+
+#: src/slic3r/GUI/Plater.cpp:3233
 msgid "Unable to reload:"
 msgstr "Nie można wczytać:"
 
-#: src/libslic3r/Zipper.cpp:32
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:137
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:146
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:845
+msgid "Undef"
+msgstr "Undef"
+
+#: src/libslic3r/miniz_extension.cpp:91
 msgid "undefined error"
 msgstr "nieznany błąd"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4624 src/slic3r/GUI/KBShortcutsDialog.cpp:130
-#: src/slic3r/GUI/MainFrame.cpp:581
+#: src/slic3r/GUI/GLCanvas3D.cpp:5028 src/slic3r/GUI/KBShortcutsDialog.cpp:125
+#: src/slic3r/GUI/MainFrame.cpp:1187
 msgid "Undo"
 msgstr "Cofnij"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4065
+#: src/slic3r/GUI/GLCanvas3D.cpp:4382
 #, c-format
 msgid "Undo %1$d Action"
 msgid_plural "Undo %1$d Actions"
@@ -8465,106 +9719,98 @@ msgstr[1] "Cofnij %1$d akcji"
 msgstr[2] "Cofnij %1$d akcji"
 msgstr[3] "Cofnij %1$d akcji"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:4047
+#: src/slic3r/GUI/GLCanvas3D.cpp:4361
 msgid "Undo History"
 msgstr "Historia Cofnięć"
 
-#: src/libslic3r/Zipper.cpp:56
+#: src/libslic3r/miniz_extension.cpp:115
 msgid "unexpected decompressed size"
 msgstr "nieoczekiwany rozmiar po rozpakowaniu"
 
 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:27
+#: src/slic3r/GUI/GUI_Preview.cpp:299 src/libslic3r/ExtrusionEntity.cpp:310
 msgid "Unknown"
 msgstr "Nieznane"
 
-#: src/slic3r/Utils/Duet.cpp:82 src/slic3r/Utils/Duet.cpp:137
-#: src/slic3r/Utils/FlashAir.cpp:119 src/slic3r/Utils/FlashAir.cpp:140
-#: src/slic3r/Utils/FlashAir.cpp:156
+#: src/slic3r/Utils/Duet.cpp:84 src/slic3r/Utils/Duet.cpp:139
+#: src/slic3r/Utils/FlashAir.cpp:122 src/slic3r/Utils/FlashAir.cpp:143
+#: src/slic3r/Utils/FlashAir.cpp:159
 msgid "Unknown error occured"
 msgstr "Wystąpił nieznany błąd"
 
+#: src/slic3r/GUI/BackgroundSlicingProcess.cpp:178
+msgid "Unknown error occured during exporting G-code."
+msgstr "Wystąpił nieznany błąd podczas eksportowania G-code."
+
 #: src/slic3r/GUI/WipeTowerDialog.cpp:263
 msgid "unloaded"
 msgstr "rozładowano"
 
-#: src/libslic3r/PrintConfig.cpp:623
+#: src/libslic3r/PrintConfig.cpp:659
 msgid "Unloading speed"
 msgstr "Prędkość rozładowania"
 
-#: src/libslic3r/PrintConfig.cpp:632
+#: src/libslic3r/PrintConfig.cpp:668
 msgid "Unloading speed at the start"
 msgstr "Początkowa prędkość rozładowania"
 
-#: src/slic3r/GUI/Tab.cpp:3256
+#: src/slic3r/GUI/Tab.cpp:3693
 msgid "UNLOCKED LOCK"
 msgstr "OTWARTA KŁÓDKA"
 
-#: src/slic3r/GUI/Tab.cpp:3282
+#: src/slic3r/GUI/Tab.cpp:3719
 msgid ""
 "UNLOCKED LOCK icon indicates that some settings were changed and are not equal to the system (or default) values for the current option group.\n"
 "Click to reset all settings for current option group to the system (or default) values."
 msgstr ""
 "OTWARTA KŁÓDKA oznacza, że niektóre ustawienia zostały zmodyfikowane i nie odpowiadają wartościom systemowym (lub domyślnym) w obecnej grupie opcji.\n"
-"Kliknij aby zresetować wszystkie ustawienia obecnej grupy ustawień do wartości systemowych (lub domyślnych)."
+"Kliknij, aby zresetować wszystkie ustawienia obecnej grupy ustawień do wartości systemowych (lub domyślnych)."
 
-#: src/slic3r/GUI/Tab.cpp:3297
+#: src/slic3r/GUI/Tab.cpp:3734
 msgid ""
 "UNLOCKED LOCK icon indicates that the value was changed and is not equal to the system (or default) value.\n"
 "Click to reset current value to the system (or default) value."
 msgstr ""
 "OTWARTA KŁÓDKA oznacza, że niektóre wartości zostały zmodyfikowane i nie odpowiadają systemowym (lub domyślnym).\n"
-"Kliknij ikonę aby zresetować do wartości systemowej (lub domyślnej)."
+"Kliknij ikonę, aby zresetować do wartości systemowej (lub domyślnej)."
 
-#: src/slic3r/GUI/Plater.cpp:5203
-#, c-format
-msgid "Unmounting successful. The device %s(%s) can now be safely removed from the computer."
-msgstr "Wysuwanie nośnika zakończone. Urządzenie %s (%s) może być teraz bezpiecznie odłączone od komputera."
-
-#: src/slic3r/GUI/GUI_Preview.cpp:255
-msgid "Unretractions"
-msgstr "Powrót retrakcji"
-
-#: src/slic3r/GUI/Tab.cpp:2947
-msgid "Unsaved Changes"
-msgstr "Niezapisane zmiany"
-
-#: src/slic3r/GUI/GUI_App.cpp:935
-msgid "Unsaved Presets"
-msgstr "Niezapisane zestawy ustawień"
-
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:179
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:173
 msgid "Unselect gizmo or clear selection"
 msgstr "Odznacz uchwyt lub wyczyść zaznaczenie"
 
-#: src/libslic3r/Zipper.cpp:60
+#: src/libslic3r/miniz_extension.cpp:119
 msgid "unsupported central directory size"
 msgstr "nieobsługiwany rozmiar katalogu centralnego"
 
-#: src/libslic3r/Zipper.cpp:40
+#: src/libslic3r/miniz_extension.cpp:99
 msgid "unsupported encryption"
 msgstr "nieobsługiwane szyfrowanie"
 
-#: src/libslic3r/Zipper.cpp:42
+#: src/libslic3r/miniz_extension.cpp:101
 msgid "unsupported feature"
 msgstr "nieobsługiwana funkcja"
 
-#: src/libslic3r/Zipper.cpp:38
+#: src/libslic3r/miniz_extension.cpp:97
 msgid "unsupported method"
 msgstr "nieobsługiwana metoda"
 
-#: src/libslic3r/Zipper.cpp:50
+#: src/libslic3r/miniz_extension.cpp:109
 msgid "unsupported multidisk archive"
 msgstr "nieobsługiwane archiwum wielodyskowe"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:292
+#: src/slic3r/GUI/OpenGLManager.cpp:267
 msgid "Unsupported OpenGL version"
 msgstr "Nieobsługiwana wersja OpenGL"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3420
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3883
 msgid "Unsupported selection"
 msgstr "Niewłaściwy wybór"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:955
+#: src/slic3r/GUI/GCodeViewer.cpp:2183
+msgid "up to"
+msgstr "do"
+
+#: src/slic3r/GUI/GLCanvas3D.cpp:961
 #, c-format
 msgid "up to %.2f mm"
 msgstr "do %.2f mm"
@@ -8573,15 +9819,15 @@ msgstr "do %.2f mm"
 msgid "Update available"
 msgstr "Dostępna jest aktualizacja"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:779 src/slic3r/GUI/Preferences.cpp:80
+#: src/slic3r/GUI/ConfigWizard.cpp:1138 src/slic3r/GUI/Preferences.cpp:97
 msgid "Update built-in Presets automatically"
 msgstr "Automatyczna aktualizacja wbudowanych zestawów ustawień"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:761
+#: src/slic3r/GUI/ConfigWizard.cpp:1120
 msgid "Updates"
 msgstr "Aktualizacje"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:786
+#: src/slic3r/GUI/ConfigWizard.cpp:1145
 msgid "Updates are never applied without user's consent and never overwrite user's customized settings."
 msgstr "Aktualizacje nie są stosowane bez wiedzy użytkownika i nigdy nie nadpisują zapisanych ustawień własnych."
 
@@ -8589,7 +9835,7 @@ msgstr "Aktualizacje nie są stosowane bez wiedzy użytkownika i nigdy nie nadpi
 msgid "Upgrade"
 msgstr "Aktualizacja"
 
-#: src/slic3r/GUI/GUI_App.cpp:824
+#: src/slic3r/GUI/GUI_App.cpp:1522
 msgid "Upload a firmware image into an Arduino based printer"
 msgstr "Wgraj obraz firmware do drukarki opartej na Adruino"
 
@@ -8605,101 +9851,118 @@ msgstr "Prześlij do serwera druku z następującą nazwą pliku:"
 msgid "Uploading"
 msgstr "Przesyłanie"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:204
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:206
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:205
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:207
 msgid "Upper Layer"
 msgstr "Górna Warstwa"
 
-#: src/slic3r/GUI/Tab.cpp:1900
-msgid "USB/Serial connection"
-msgstr "Połączenie USB/szeregowe"
-
-#: src/libslic3r/PrintConfig.cpp:1662
-msgid "USB/serial port for printer connection."
-msgstr "Port USB/szeregowy do połączenia z drukarką."
-
-#: src/slic3r/GUI/DoubleSlider.cpp:1147
+#: src/slic3r/GUI/DoubleSlider.cpp:1276
 msgid "Use another extruder"
 msgstr "Użyj innego ekstrudera"
 
-#: src/slic3r/GUI/Preferences.cpp:143
+#: src/slic3r/GUI/Preferences.cpp:220
 msgid "Use custom size for toolbar icons"
 msgstr "Użyj własnego rozmiaru ikon pasków narzędzi"
 
-#: src/libslic3r/PrintConfig.cpp:2161
+#: src/slic3r/GUI/Preferences.cpp:268
+msgid "Use environment map"
+msgstr "Użyj mapy środowiskowej"
+
+#: src/libslic3r/PrintConfig.cpp:2304
 msgid "Use firmware retraction"
 msgstr "Użyj retrakcji z firmware"
 
+#: src/slic3r/GUI/ImGuiWrapper.cpp:800 src/slic3r/GUI/Search.cpp:464
+msgid "Use for search"
+msgstr "Użyj do wyszukiwania"
+
+#: src/libslic3r/PrintConfig.cpp:1218
+msgid "Use for time estimate"
+msgstr "Użyj do obliczenia czasu"
+
 #: src/slic3r/GUI/PrintHostDialogs.cpp:42
 msgid "Use forward slashes ( / ) as a directory separator if needed."
 msgstr "Użyj prawego ukośnika ( / ) jako separatora katalogu w razie potrzeby."
 
-#: src/slic3r/GUI/Preferences.cpp:126
+#: src/slic3r/GUI/Preferences.cpp:191
 msgid "Use free camera"
 msgstr "Użyj wolnego widoku"
 
-#: src/libslic3r/PrintConfig.cpp:2780
+#: src/slic3r/GUI/ConfigWizard.cpp:1188
+msgid "Use inches"
+msgstr "Użyj cali"
+
+#: src/libslic3r/PrintConfig.cpp:2944
 msgid "Use pad"
 msgstr "Użyj podkładki"
 
-#: src/slic3r/GUI/Preferences.cpp:119
+#: src/slic3r/GUI/Preferences.cpp:184
 msgid "Use perspective camera"
 msgstr "Użyj widoku perspektywicznego"
 
-#: src/libslic3r/PrintConfig.cpp:2168
+#: src/libslic3r/PrintConfig.cpp:2311
 msgid "Use relative E distances"
 msgstr "Użyj względnych wartości E (ekstruzji)"
 
-#: src/slic3r/GUI/Preferences.cpp:104
+#: src/slic3r/GUI/Preferences.cpp:135
 msgid "Use Retina resolution for the 3D scene"
 msgstr "Użyj rozdzielczości Retina dla generowania podglądu 3D"
 
-#: src/libslic3r/PrintConfig.cpp:540
+#: src/libslic3r/PrintConfig.cpp:576
 msgid "Use this option to set the axis letter associated to your printer's extruder (usually E but some printers use A)."
 msgstr "Ta opcja określa literę, którą Twoja drukarka opisuje oś ekstrudera (zazwyczaj jest to E ale niektóre drukarki używają A)."
 
-#: src/libslic3r/PrintConfig.cpp:1893
+#: src/libslic3r/PrintConfig.cpp:2035
 msgid "Use this setting to rotate the support material pattern on the horizontal plane."
 msgstr "To ustawienie odpowiada za obrót materiału podporowego w płaszczyźnie poziomej."
 
-#: src/libslic3r/PrintConfig.cpp:2175
+#: src/libslic3r/PrintConfig.cpp:2318
 msgid "Use volumetric E"
 msgstr "Użyj wolumetrycznej wartości E"
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1171
+#: src/slic3r/GUI/DoubleSlider.cpp:1298
 msgid "used"
 msgstr "używany"
 
-#: src/slic3r/GUI/Plater.cpp:237
+#: src/slic3r/GUI/Plater.cpp:243
 msgid "Used Filament (g)"
 msgstr "Użyty filament (g)"
 
-#: src/slic3r/GUI/Plater.cpp:235 src/slic3r/GUI/Plater.cpp:1229
+#: src/slic3r/GUI/Plater.cpp:1141
+msgid "Used Filament (in)"
+msgstr "Użyty filament (cale)"
+
+#: src/slic3r/GUI/Plater.cpp:1153
+msgid "Used Filament (in³)"
+msgstr "Użyty filament (cale³)"
+
+#: src/slic3r/GUI/Plater.cpp:241 src/slic3r/GUI/Plater.cpp:1141
 msgid "Used Filament (m)"
 msgstr "Użyty filament (m)"
 
-#: src/slic3r/GUI/Plater.cpp:236
+#: src/slic3r/GUI/Plater.cpp:242 src/slic3r/GUI/Plater.cpp:1153
 msgid "Used Filament (mm³)"
 msgstr "Użyty filament (mm³)"
 
-#: src/slic3r/GUI/Plater.cpp:1191
+#: src/slic3r/GUI/Plater.cpp:1100
 msgid "Used Material (ml)"
 msgstr "Używany materiał (ml)"
 
-#: src/slic3r/GUI/Plater.cpp:238
+#: src/slic3r/GUI/Plater.cpp:244
 msgid "Used Material (unit)"
 msgstr "Używany materiał (jednostka)"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:24 src/libslic3r/PrintConfig.cpp:132
 msgid "User"
 msgstr "Użytkownik"
 
-#: src/slic3r/GUI/Preset.cpp:1168 src/slic3r/GUI/Preset.cpp:1288
-#: src/slic3r/GUI/PresetBundle.cpp:1677
+#: src/slic3r/GUI/PresetComboBoxes.cpp:230
+#: src/slic3r/GUI/PresetComboBoxes.cpp:778
+#: src/slic3r/GUI/PresetComboBoxes.cpp:934
 msgid "User presets"
 msgstr "Zestawy użytkownika"
 
-#: src/libslic3r/Zipper.cpp:90
+#: src/libslic3r/miniz_extension.cpp:149
 msgid "validation failed"
 msgstr "niepowodzenie weryfikacji"
 
@@ -8711,31 +9974,31 @@ msgstr "Wartość jest taka sama jak systemowa"
 msgid "Value was changed and is not equal to the system value or the last saved preset"
 msgstr "Wartość została zmieniona i nie równa się wartości systemowej lub tej z ostatnio zapisanego zestawu ustawień"
 
-#: src/slic3r/GUI/Tab.cpp:2202
+#: src/slic3r/GUI/Tab.cpp:2371
 msgid "Values in this column are for Normal mode"
 msgstr "Wartości w tej kolumnie dotyczą trybu Normal"
 
-#: src/slic3r/GUI/Tab.cpp:2208
+#: src/slic3r/GUI/Tab.cpp:2377
 msgid "Values in this column are for Stealth mode"
 msgstr "Wartości w tej kolumnie dotyczą trybu Stealth"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:234 src/slic3r/GUI/GLCanvas3D.cpp:4573
+#: src/slic3r/GUI/GLCanvas3D.cpp:231 src/slic3r/GUI/GLCanvas3D.cpp:4978
 msgid "Variable layer height"
 msgstr "Zmienna wysokość warstwy"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1709
+#: src/slic3r/GUI/GLCanvas3D.cpp:1786
 msgid "Variable layer height - Adaptive"
 msgstr "Zmienna wysokość warstwy - Adaptacyjna"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:599
+#: src/slic3r/GUI/GLCanvas3D.cpp:565
 msgid "Variable layer height - Manual edit"
 msgstr "Zmienna wysokość warstwy - ręczna edycja"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1701
+#: src/slic3r/GUI/GLCanvas3D.cpp:1778
 msgid "Variable layer height - Reset"
 msgstr "Zmienna wysokość warstwy - Reset"
 
-#: src/slic3r/GUI/GLCanvas3D.cpp:1717
+#: src/slic3r/GUI/GLCanvas3D.cpp:1794
 msgid "Variable layer height - Smooth all"
 msgstr "Zmienna wysokość warstwy - Wygładź wszystko"
 
@@ -8743,19 +10006,20 @@ msgstr "Zmienna wysokość warstwy - Wygładź wszystko"
 msgid "variants"
 msgstr "warianty"
 
-#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:971
+#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:57 src/slic3r/GUI/Tab.cpp:1289
 msgid "vendor"
 msgstr "dostawca"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:565
+#: src/slic3r/GUI/ConfigWizard.cpp:589
 msgid "Vendor:"
 msgstr "Producent:"
 
-#: src/libslic3r/PrintConfig.cpp:928
+#: src/libslic3r/PrintConfig.cpp:972
 msgid "Verbose G-code"
 msgstr "G-code rozszerzony"
 
-#: src/slic3r/GUI/AboutDialog.cpp:231 src/slic3r/GUI/MainFrame.cpp:64
+#: src/slic3r/GUI/AboutDialog.cpp:256 src/slic3r/GUI/GUI_App.cpp:239
+#: src/slic3r/GUI/MainFrame.cpp:164
 msgid "Version"
 msgstr "Wersja"
 
@@ -8763,24 +10027,36 @@ msgstr "Wersja"
 msgid "version"
 msgstr "wersja"
 
-#: src/slic3r/GUI/Tab.cpp:1053
+#: src/slic3r/GUI/Tab.cpp:1375
 msgid "Vertical shells"
 msgstr "Powłoka pionowa"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:218
+#: src/slic3r/GUI/GUI_Preview.cpp:265 src/slic3r/GUI/GUI_Preview.cpp:271
 msgid "View"
 msgstr "Widok"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:813
+#: src/slic3r/GUI/ConfigWizard.cpp:1172
 msgid "View mode"
 msgstr "Widok"
 
-#: src/libslic3r/SLAPrintSteps.cpp:413 src/libslic3r/SLAPrintSteps.cpp:422
-#: src/libslic3r/SLAPrintSteps.cpp:461
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:666
+msgid ""
+"Visit \"Preferences\" and check \"%1%\"\n"
+"to be asked about unsaved changes again."
+msgstr ""
+"Otwórz Preferencje i sprawdź \"%1%\",\n"
+"aby włączyć potwierdzanie niezapisanych zmian."
+
+#: src/libslic3r/PrintConfig.cpp:3553
+msgid "Visualize an already sliced and saved G-code"
+msgstr "Wizualizacja pociętego i zapisanego G-code"
+
+#: src/libslic3r/SLAPrintSteps.cpp:411 src/libslic3r/SLAPrintSteps.cpp:420
+#: src/libslic3r/SLAPrintSteps.cpp:459
 msgid "Visualizing supports"
 msgstr "Wizualizacja podpór"
 
-#: src/slic3r/GUI/Plater.cpp:161
+#: src/slic3r/GUI/Plater.cpp:167
 msgid "Volume"
 msgstr "Objętość"
 
@@ -8788,175 +10064,190 @@ msgstr "Objętość"
 msgid "Volume to purge (mm³) when the filament is being"
 msgstr "Objętość do wyczyszczenia (mm³), gdy filament jest"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:1106
+#: src/slic3r/GUI/GUI_ObjectList.cpp:1230
 msgid "Volumes in Object reordered"
 msgstr "Części modelu przeorganizowane"
 
-#: src/slic3r/GUI/PresetHints.cpp:219
+#: src/slic3r/GUI/PresetHints.cpp:218
 msgid "Volumetric"
 msgstr "Objętościowy"
 
-#: src/slic3r/GUI/Tab.cpp:1591
+#: src/slic3r/GUI/Tab.cpp:1930
 msgid "Volumetric flow hints not available"
 msgstr "Podpowiedzi dot. objętości przepływu są niedostępne"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:226
+#: src/slic3r/GUI/GUI_Preview.cpp:280
 msgid "Volumetric flow rate"
-msgstr "Objętościowa wartość przepływu"
+msgstr "Objętościowe natężenie przepływu"
 
-#: src/libslic3r/GCode/PreviewData.cpp:355
+#: src/slic3r/GUI/GCodeViewer.cpp:2240 src/libslic3r/GCode/PreviewData.cpp:360
 msgid "Volumetric flow rate (mm³/s)"
-msgstr "Objętościowy współczynnik przepływu (mm³/s)"
+msgstr "Natężenie przepływu (mm³/s)"
 
 #: src/slic3r/GUI/RammingChart.cpp:81
 msgid "Volumetric speed"
-msgstr "Prędkość objętościowa"
+msgstr "Natężenie przepływu"
 
-#: src/libslic3r/PrintConfig.cpp:2915
+#: src/libslic3r/PrintConfig.cpp:3079
 msgid "Wall thickness"
 msgstr "Grubość ścianki"
 
-#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1270 src/slic3r/GUI/GUI.cpp:251
-#: src/slic3r/GUI/Tab.cpp:3084 src/slic3r/GUI/WipeTowerDialog.cpp:45
-#: src/slic3r/GUI/WipeTowerDialog.cpp:366
+#: src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp:1129 src/slic3r/GUI/GUI.cpp:256
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:478
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:502
+#: src/slic3r/GUI/WipeTowerDialog.cpp:45 src/slic3r/GUI/WipeTowerDialog.cpp:366
 msgid "Warning"
 msgstr "Ostrzeżenie"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:431
+#: src/slic3r/GUI/NotificationManager.cpp:672
+#: src/slic3r/GUI/NotificationManager.cpp:687
+#: src/slic3r/GUI/NotificationManager.cpp:702
+msgid "WARNING:"
+msgstr "OSTRZEŻENIE:"
+
+#: src/slic3r/GUI/ConfigWizard.cpp:449
 msgid "Welcome"
 msgstr "Witaj"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:427
+#: src/slic3r/GUI/ConfigWizard.cpp:445
 #, c-format
 msgid "Welcome to the %s Configuration Assistant"
 msgstr "Witamy w Asystencie Konfiguracji %s"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:429
+#: src/slic3r/GUI/ConfigWizard.cpp:447
 #, c-format
 msgid "Welcome to the %s Configuration Wizard"
 msgstr "Witamy w Asystencie Konfiguracji %s"
 
-#: src/slic3r/GUI/Preferences.cpp:97
+#: src/slic3r/GUI/SavePresetDialog.cpp:310
+msgid "What would you like to do with \"%1%\" preset after saving?"
+msgstr "Co chcesz zrobić z zestawem ustawień \"%1%\" po zapisaniu?"
+
+#: src/slic3r/GUI/Preferences.cpp:114
 msgid "When checked, the print and filament presets are shown in the preset editor even if they are marked as incompatible with the active printer"
 msgstr "Zaznaczenie tej opcji spowoduje wyświetlanie wszystkich ustawień druku i filamentów w edytorze zestawów ustawień, nawet jeśli są oznaczone jak niekompatybilne z wybraną drukarką"
 
-#: src/slic3r/GUI/PresetHints.cpp:224
+#: src/slic3r/GUI/Preferences.cpp:156
+msgid "When closing the application, always ask for unsaved changes"
+msgstr "Zawsze pytaj o niezapisane zmiany podczas zamykania aplikacji"
+
+#: src/slic3r/GUI/PresetHints.cpp:223
 msgid "when printing"
 msgstr "podczas druku"
 
-#: src/libslic3r/PrintConfig.cpp:253
+#: src/libslic3r/PrintConfig.cpp:287
 msgid "When printing multi-material objects, this settings will make Slic3r to clip the overlapping object parts one by the other (2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc)."
 msgstr "To ustawienie sprawi, że podczas druku modeli z wielu materiałów, PrusaSlicer przytnie nachodzące na siebie części (druga część zostanie przycięta przez pierwszą, trzecia przez pierwszą i drugą itd.)"
 
-#: src/libslic3r/PrintConfig.cpp:305
+#: src/libslic3r/PrintConfig.cpp:339
 msgid "When printing multiple objects or copies, this feature will complete each object before moving onto next one (and starting it from its bottom layer). This feature is useful to avoid the risk of ruined prints. Slic3r should warn and prevent you from extruder collisions, but beware."
-msgstr "Włączenie tej opcji sprawi, że przy druku kilku modeli drukarka wydrukuje jeden model w całości zanim przejdzie do następnego (zaczynając od najniższej warstwy). Przydaje się aby uniknąć ryzyka niepowodzenia wydruku kilku części. Slic3r powinien ostrzec przed możliwością kolizji z ekstruderem, ale zachowaj ostrożność."
+msgstr "Włączenie tej opcji sprawi, że przy druku kilku modeli drukarka wydrukuje jeden model w całości zanim przejdzie do następnego (zaczynając od najniższej warstwy). Przydaje się, aby uniknąć ryzyka niepowodzenia wydruku kilku części. PrusaSlicer powinien ostrzec przed możliwością kolizji z ekstruderem, ale zachowaj ostrożność."
 
-#: src/libslic3r/PrintConfig.cpp:891
+#: src/libslic3r/PrintConfig.cpp:933
 msgid "When printing with very low layer heights, you might still want to print a thicker bottom layer to improve adhesion and tolerance for non perfect build plates. This can be expressed as an absolute value or as a percentage (for example: 150%) over the default layer height."
-msgstr "Podczas druku z bardzo małą wysokością warstwy warto mimo wszystko wydrukować najniższą warstwę o większej wysokości aby zwiększyć przyczepność i tolerancję na niedoskonałości powierzchni druki. Może być wyrażona jako wartość bezwzględna lub procentowa (np. 150%) nominalnej wysokości warstwy."
+msgstr "Podczas druku z bardzo małą wysokością warstwy warto mimo wszystko wydrukować najniższą warstwę o większej wysokości, aby zwiększyć przyczepność i tolerancję na niedoskonałości powierzchni druki. Może być wyrażona jako wartość bezwzględna lub procentowa (np. 150%) nominalnej wysokości warstwy."
 
-#: src/libslic3r/PrintConfig.cpp:1553
+#: src/libslic3r/PrintConfig.cpp:1661
 msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Kiedy retrakcja zostaje wykonana przed zmianą ekstrudera, filament o określonej długości jest wciągany z powrotem (mierzona jest długość nieprzetworzonego filamentu, zanim wejdzie do ekstrudera)."
 
-#: src/libslic3r/PrintConfig.cpp:1545
+#: src/libslic3r/PrintConfig.cpp:1653
 msgid "When retraction is triggered, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)."
 msgstr "Kiedy zostaje wykonana retrakcja to filament o określonej długości jest wciągany z powrotem (mierzona jest długość nieprzetworzonego filamentu, zanim wejdzie do ekstrudera)."
 
-#: src/libslic3r/PrintConfig.cpp:1391
+#: src/libslic3r/PrintConfig.cpp:1499
 msgid "When set to zero, the distance the filament is moved from parking position during load is exactly the same as it was moved back during unload. When positive, it is loaded further,  if negative, the loading move is shorter than unloading."
 msgstr "Gdy ta wartość wynosi zero, to długość ładowania filamentu z pozycji zaparkowanej jest dokładnie taka sama, jak podczas rozładowywania. Jeśli jest dodatnia to jest większa (więcej filamentu zostanie załadowane), jeśli ujemna to jest mniejsza niż przy rozładowywaniu."
 
-#: src/libslic3r/PrintConfig.cpp:1238
+#: src/libslic3r/PrintConfig.cpp:1346
 msgid "When setting other speed settings to 0 Slic3r will autocalculate the optimal speed in order to keep constant extruder pressure. This experimental setting is used to set the highest print speed you want to allow."
 msgstr "Ustawienie pozostałych prędkości na 0 spowoduje, ze Slic3r będzie automatycznie przeliczał optymalną prędkość dla utrzymania stałego ciśnienia materiału w ekstruderze. To eksperymentalne ustawienie określa maksymalną dozwoloną prędkość druku."
 
-#: src/libslic3r/PrintConfig.cpp:1597
+#: src/libslic3r/PrintConfig.cpp:1705
 msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament."
 msgstr "Jeśli retrakcja jest korygowana po zmianie narzędzia, ekstruder przepchnie taką dodatkową ilość filamentu."
 
-#: src/libslic3r/PrintConfig.cpp:1589
+#: src/libslic3r/PrintConfig.cpp:1697
 msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed."
 msgstr "Jeśli retrakcja jest korygowana po ruchu jałowym, ekstruder przepchnie taką dodatkową ilość filamentu. Ta opcja jest rzadko potrzebna."
 
-#: src/slic3r/GUI/Tab.cpp:3263
+#: src/slic3r/GUI/Tab.cpp:3700
 msgid "WHITE BULLET"
 msgstr "BIAŁA KROPKA"
 
-#: src/slic3r/GUI/Tab.cpp:3285
+#: src/slic3r/GUI/Tab.cpp:3722
 msgid "WHITE BULLET icon indicates a non system (or non default) preset."
 msgstr "BIAŁA KROPKA oznacza niesystemowy (lub inny niż domyślny) zestaw ustawień."
 
-#: src/slic3r/GUI/Tab.cpp:3288
+#: src/slic3r/GUI/Tab.cpp:3725
 msgid "WHITE BULLET icon indicates that the settings are the same as in the last saved preset for the current option group."
 msgstr "BIAŁA KROPKA oznacza, że ustawienia są takie same jak w ostatnio zapisanym zestawie ustawień dla obecnej grupy opcji."
 
-#: src/slic3r/GUI/Tab.cpp:3303
+#: src/slic3r/GUI/Tab.cpp:3740
 msgid "WHITE BULLET icon indicates that the value is the same as in the last saved preset."
 msgstr "BIAŁA KROPKA oznacza, że wartość jest taka sama jak w ostatnio zapisanym zestawie ustawień."
 
-#: src/slic3r/GUI/GUI_Preview.cpp:223 src/libslic3r/PrintConfig.cpp:2238
+#: src/slic3r/GUI/GUI_Preview.cpp:277 src/libslic3r/PrintConfig.cpp:2381
 msgid "Width"
 msgstr "Szerokość"
 
-#: src/libslic3r/GCode/PreviewData.cpp:349
+#: src/slic3r/GUI/GCodeViewer.cpp:2237 src/libslic3r/GCode/PreviewData.cpp:354
 msgid "Width (mm)"
 msgstr "Szerokość (mm)"
 
-#: src/libslic3r/PrintConfig.cpp:2640
+#: src/libslic3r/PrintConfig.cpp:2783
 msgid "Width from the back sphere center to the front sphere center"
 msgstr "Odstęp pomiędzy środkami przedniej i tylnej części łącznika podpory"
 
-#: src/libslic3r/PrintConfig.cpp:2239
+#: src/libslic3r/PrintConfig.cpp:2382
 msgid "Width of a wipe tower"
 msgstr "Szerokość wieży czyszczącej"
 
-#: src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3055
 msgid "Width of the connector sticks which connect the object and the generated pad."
 msgstr "Średnica słupków łączących model z wygenerowaną podkładką."
 
-#: src/libslic3r/PrintConfig.cpp:2354
+#: src/libslic3r/PrintConfig.cpp:2497
 msgid "Width of the display"
 msgstr "Szerokość wyświetlacza"
 
-#: src/slic3r/GUI/PresetHints.cpp:48
+#: src/slic3r/GUI/PresetHints.cpp:47
 msgid "will always run at %1%%%"
 msgstr "będzie zawsze pracować w %1%%%"
 
-#: src/slic3r/GUI/PresetHints.cpp:55
+#: src/slic3r/GUI/PresetHints.cpp:54
 msgid "will be turned off."
 msgstr "będzie wyłączony."
 
-#: src/libslic3r/PrintConfig.cpp:2441
+#: src/libslic3r/PrintConfig.cpp:2584
 msgid "Will inflate or deflate the sliced 2D polygons according to the sign of the correction."
 msgstr "Trójkąty 2D zostaną rozciągnięte lub ściśnięte zgodnie z kierunkiem korekcji."
 
-#: src/libslic3r/PrintConfig.cpp:2261
+#: src/libslic3r/PrintConfig.cpp:2404
 msgid "Wipe into this object"
 msgstr "Czyszczenie na tym modelu"
 
-#: src/libslic3r/PrintConfig.cpp:2253
+#: src/libslic3r/PrintConfig.cpp:2396
 msgid "Wipe into this object's infill"
 msgstr "Czyszczenie na wypełnieniu modelu"
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:101
-#: src/slic3r/GUI/GUI_ObjectList.cpp:619 src/libslic3r/PrintConfig.cpp:2252
-#: src/libslic3r/PrintConfig.cpp:2260
+#: src/slic3r/GUI/GUI_ObjectList.cpp:39 src/slic3r/GUI/GUI_ObjectList.cpp:99
+#: src/slic3r/GUI/GUI_ObjectList.cpp:658 src/libslic3r/PrintConfig.cpp:2395
+#: src/libslic3r/PrintConfig.cpp:2403
 msgid "Wipe options"
 msgstr "Opcje czyszczenia"
 
-#: src/slic3r/GUI/GUI_Preview.cpp:248 src/slic3r/GUI/Tab.cpp:1191
-#: src/libslic3r/ExtrusionEntity.cpp:321
+#: src/slic3r/GUI/GUI_Preview.cpp:313 src/slic3r/GUI/Tab.cpp:1521
+#: src/libslic3r/ExtrusionEntity.cpp:326 src/libslic3r/ExtrusionEntity.cpp:360
 msgid "Wipe tower"
 msgstr "Wieża czyszcząca"
 
-#: src/slic3r/GUI/Plater.cpp:1231 src/slic3r/GUI/Plater.cpp:1245
+#: src/slic3r/GUI/Plater.cpp:1143 src/slic3r/GUI/Plater.cpp:1160
 msgid "wipe tower"
 msgstr "wieża czyszcząca"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:120
-#: src/slic3r/GUI/ConfigManipulation.cpp:140
+#: src/slic3r/GUI/ConfigManipulation.cpp:119
+#: src/slic3r/GUI/ConfigManipulation.cpp:139
 msgid "Wipe Tower"
 msgstr "Wieża czyszcząca"
 
@@ -8964,36 +10255,36 @@ msgstr "Wieża czyszcząca"
 msgid "Wipe tower - Purging volume adjustment"
 msgstr "Wieża czyszcząca - dostosowanie objętości czyszczenia"
 
-#: src/slic3r/GUI/Tab.cpp:1488
+#: src/slic3r/GUI/Tab.cpp:1834
 msgid "Wipe tower parameters"
 msgstr "Parametry wieży czyszczącej"
 
-#: src/libslic3r/PrintConfig.cpp:2245
+#: src/libslic3r/PrintConfig.cpp:2388
 msgid "Wipe tower rotation angle"
 msgstr "Kąt obrotu wieży czyszczącej"
 
-#: src/libslic3r/PrintConfig.cpp:2246
+#: src/libslic3r/PrintConfig.cpp:2389
 msgid "Wipe tower rotation angle with respect to x-axis."
 msgstr "Obrót wieży czyszczącej względem osi X."
 
-#: src/libslic3r/PrintConfig.cpp:2193
+#: src/libslic3r/PrintConfig.cpp:2336
 msgid "Wipe while retracting"
 msgstr "Czyszczenie przy retrakcji"
 
-#: src/slic3r/GUI/PresetHints.cpp:225
+#: src/slic3r/GUI/PresetHints.cpp:224
 msgid "with a volumetric rate"
 msgstr "ze współczynnikiem objętościowym"
 
-#: src/libslic3r/PrintConfig.cpp:1530
+#: src/libslic3r/PrintConfig.cpp:1638
 msgid "With bowden extruders, it may be wise to do some amount of quick retract before doing the wipe movement."
 msgstr "Przy ekstruderze typu bowden warto wykonać szybką retrakcję przed ruchem czyszczącym."
 
-#: src/libslic3r/PrintConfig.cpp:2056
+#: src/libslic3r/PrintConfig.cpp:2198
 msgid "With sheath around the support"
 msgstr "Osłona wokół podpór"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:62
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:105
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:68
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:111
 msgid "World coordinates"
 msgstr "Globalny układ współrzędnych"
 
@@ -9011,84 +10302,100 @@ msgstr ""
 "\n"
 "Zaktualizowane paczki konfiguracyjne:"
 
-#: src/libslic3r/Zipper.cpp:92
+#: src/libslic3r/miniz_extension.cpp:151
 msgid "write calledback failed"
 msgstr "błąd write calledback"
 
-#: src/libslic3r/PrintConfig.cpp:3382
+#: src/libslic3r/PrintConfig.cpp:3581
 msgid "Write information about the model to the console."
 msgstr "Zapis informacji o modelu do konsoli."
 
-#: src/slic3r/Utils/Duet.cpp:131
+#: src/slic3r/Utils/Duet.cpp:133
 msgid "Wrong password"
 msgstr "Nieprawidłowe hasło"
 
-#: src/libslic3r/PrintConfig.cpp:2225
+#: src/libslic3r/PrintConfig.cpp:2368
 msgid "X coordinate of the left front corner of a wipe tower"
 msgstr "Koordynata X wieży czyszczącej od przedniego lewego narożnika"
 
-#: src/libslic3r/PrintConfig.cpp:1879
+#: src/libslic3r/PrintConfig.cpp:2021
 msgid "XY separation between an object and its support"
 msgstr "Odstęp materiału podporowego od modelu w osiach XY"
 
-#: src/libslic3r/PrintConfig.cpp:1881
+#: src/libslic3r/PrintConfig.cpp:2023
 msgid "XY separation between an object and its support. If expressed as percentage (for example 50%), it will be calculated over external perimeter width."
 msgstr "Odstęp materiału podporowego od modelu w osiach XY. Jeśli ustawisz wartość procentową (np. 15%) to zostanie obliczona z szerokości ekstruzji obrysów zewnętrznych."
 
-#: src/libslic3r/PrintConfig.cpp:2275
+#: src/libslic3r/PrintConfig.cpp:2418
 msgid "XY Size Compensation"
 msgstr "Korekta wymiarów XY"
 
-#: src/libslic3r/PrintConfig.cpp:2232
+#: src/libslic3r/PrintConfig.cpp:2375
 msgid "Y coordinate of the left front corner of a wipe tower"
 msgstr "Koordynata wieży czyszczącej w osi Y od przedniego lewego narożnika"
 
-#: src/slic3r/GUI/Plater.cpp:1170
+#: src/slic3r/GUI/Plater.cpp:1079
 msgid "Yes"
 msgstr "Tak"
 
-#: src/libslic3r/PrintConfig.cpp:1317
+#: src/slic3r/GUI/Plater.cpp:1405
+msgid "You can open only one .gcode file at a time."
+msgstr "Możesz mieć otwarty tylko jeden plik .gcode w tym samym czasie."
+
+#: src/libslic3r/PrintConfig.cpp:1425
 msgid "You can put here your personal notes. This text will be added to the G-code header comments."
 msgstr "Tutaj możesz umieścić notatki, które zostaną dodane do nagłówka pliku G-code."
 
-#: src/libslic3r/PrintConfig.cpp:589
+#: src/libslic3r/PrintConfig.cpp:625
 msgid "You can put your notes regarding the filament here."
 msgstr "Tutaj możesz umieścić notatki dotyczące filamentu."
 
-#: src/libslic3r/PrintConfig.cpp:1473
+#: src/libslic3r/PrintConfig.cpp:1581
 msgid "You can put your notes regarding the printer here."
 msgstr "Tutaj możesz umieścić notatki dotyczące drukarki."
 
-#: src/libslic3r/PrintConfig.cpp:2579
+#: src/libslic3r/PrintConfig.cpp:2722
 msgid "You can put your notes regarding the SLA print material here."
 msgstr "Tutaj możesz umieścić notatki dotyczące materiału druku SLA."
 
-#: src/libslic3r/PrintConfig.cpp:360
+#: src/libslic3r/PrintConfig.cpp:394
 msgid "You can set this to a positive value to disable fan at all during the first layers, so that it does not make adhesion worse."
 msgstr "Wpisując tutaj wartość dodatnią możesz wyłączyć wentylator podczas druku pierwszych warstw, aby nie pogarszać przyczepności do stołu."
 
-#: src/libslic3r/PrintConfig.cpp:1364
+#: src/libslic3r/PrintConfig.cpp:1472
 msgid "You can use all configuration options as variables inside this template. For example: [layer_height], [fill_density] etc. You can also use [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename], [input_filename_base]."
 msgstr "Możesz użyć wszystkich opcji konfiguracjnych jako zmiennych w tym szablonie, takich jak np: [layer_height] - wysokość warstwy, [fill_density] - gęstość wypełnienia, itp. Możesz również użyć [timestamp] - czas, [year] - rok, [month] - miesiąc, [day] - dzień, [hour] - godzina, [minute] - minuta, [second] - sekunda, [version] - wersja, [input_filename] - pełna nazwa pliku wejściowego, [input_filename_base] - nazwa pliku wejściowego bez rozszerzenia."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3546
+#: src/slic3r/GUI/GUI_ObjectList.cpp:4009
 msgid "You can't change a type of the last solid part of the object."
 msgstr "Nie możesz zmienić typu ostatniej zwartej części modelu."
 
-#: src/slic3r/GUI/Plater.cpp:2390
+#: src/slic3r/GUI/Plater.cpp:2352
 #, c-format
 msgid "You can't to add the object(s) from %s because of one or some of them is(are) multi-part"
 msgstr "Nie możesz dodać obiektu/ów z %s, ponieważ jeden lub więcej modeli składa się z wielu części"
 
-#: src/slic3r/GUI/Plater.cpp:2311
+#: src/slic3r/GUI/Jobs/SLAImportJob.cpp:208 src/slic3r/GUI/Plater.cpp:2254
 msgid "You cannot load SLA project with a multi-part object on the bed"
 msgstr "Nie możesz wczytać projektu SLA mając na stole wieloczęściowy model"
 
-#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:578
+#: src/slic3r/GUI/GUI_ObjectManipulation.cpp:625
 msgid "You cannot use non-uniform scaling mode for multiple objects/parts selection"
 msgstr "Nie możesz używać skalowania nierównomiernego dla kliku modeli/części"
 
-#: src/slic3r/GUI/GLCanvas3DManager.cpp:287
+#: src/slic3r/GUI/SavePresetDialog.cpp:277
+msgid ""
+"You have selected physical printer \"%1%\" \n"
+"with related printer preset \"%2%\""
+msgstr ""
+"Wybrana została fizyczna drukarka \"%1%\"\n"
+"z powiązanym zestawem ustawień drukarki \"%2%\""
+
+#: src/slic3r/GUI/GUI_App.cpp:1078
+msgid "You have the following presets with saved options for \"Print Host upload\""
+msgstr "Masz następujące zestawy ustawień z zapisaną opcją \"Wysyłania do serwera druku\""
+
+#: src/slic3r/GUI/OpenGLManager.cpp:262
 msgid "You may need to update your graphics card driver."
 msgstr "Może być wymagana aktualizacja sterowników karty graficznej."
 
@@ -9096,37 +10403,49 @@ msgstr "Może być wymagana aktualizacja sterowników karty graficznej."
 msgid "You must install a configuration update."
 msgstr "Do instalacji jest wymagana aktualizacja konfiguracji."
 
-#: src/slic3r/GUI/Preferences.cpp:172
+#: src/slic3r/GUI/Preferences.cpp:299
 #, c-format
 msgid "You need to restart %s to make the changes effective."
 msgstr "Wymagany jest restart %s, aby wprowadzić zmiany."
 
-#: src/slic3r/GUI/GUI_ObjectList.cpp:3421
+#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:468
+msgid "You should to change a name of your printer device. It can't be saved."
+msgstr "Należy zmienić nazwę drukarki. Nie można jej zapisać."
+
+#: src/slic3r/GUI/GUI_ObjectList.cpp:3884
 #, c-format
 msgid "You started your selection with %s Item."
 msgstr "Wybór rozpoczęty przez %s."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1902
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:664
+msgid "You will not be asked about the unsaved changes the next time you close PrusaSlicer."
+msgstr "Podczas kolejnego zamknięcia PrusaSlicer nie dostaniesz pytania o niezapisane zmiany."
+
+#: src/slic3r/GUI/UnsavedChangesDialog.cpp:665
+msgid "You will not be asked about the unsaved changes the next time you switch a preset."
+msgstr "Podczas kolejnej zmiany zestawu ustawień nie dostaniesz pytania o niezapisane zmiany."
+
+#: src/slic3r/GUI/DoubleSlider.cpp:2121
 msgid "Your current changes will delete all saved color changes."
 msgstr "Wprowadzane zmiany usuną wszystkie zmiany kolorów."
 
-#: src/slic3r/GUI/DoubleSlider.cpp:1923
+#: src/slic3r/GUI/DoubleSlider.cpp:2141
 msgid "Your current changes will delete all saved extruder (tool) changes."
 msgstr "Obecne zmiany spowodują usunięcie wszystkich zapisanych zmian ekstruderów (narzędzi)."
 
-#: src/slic3r/GUI/MainFrame.cpp:911
+#: src/slic3r/GUI/MainFrame.cpp:1612
 msgid "Your file was repaired."
 msgstr "Twój plik został naprawiony."
 
-#: src/slic3r/GUI/Plater.cpp:2528
+#: src/slic3r/GUI/Plater.cpp:2490
 msgid "Your object appears to be too large, so it was automatically scaled down to fit your print bed."
 msgstr "Importowany model przekracza wymiary przestrzeni roboczej i został przeskalowany do odpowiednich rozmiarów."
 
-#: src/libslic3r/PrintConfig.cpp:2285
+#: src/libslic3r/PrintConfig.cpp:2428
 msgid "Z offset"
 msgstr "Z offset"
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:60
+#: src/slic3r/GUI/ConfigManipulation.cpp:59
 msgid ""
 "Zero first layer height is not valid.\n"
 "\n"
@@ -9136,7 +10455,7 @@ msgstr ""
 "\n"
 "Wysokość pierwszej warstwy zostanie ustawiona na 0,01."
 
-#: src/slic3r/GUI/ConfigManipulation.cpp:48
+#: src/slic3r/GUI/ConfigManipulation.cpp:47
 msgid ""
 "Zero layer height is not valid.\n"
 "\n"
@@ -9146,28 +10465,28 @@ msgstr ""
 "\n"
 "Wysokość warstwy zostanie ustawiona na 0,01."
 
-#: src/libslic3r/PrintConfig.cpp:2667
+#: src/libslic3r/PrintConfig.cpp:2831
 msgid "Zig-Zag"
 msgstr "Zig-Zag"
 
-#: src/slic3r/GUI/Mouse3DController.cpp:308
-#: src/slic3r/GUI/Mouse3DController.cpp:317
+#: src/slic3r/GUI/Mouse3DController.cpp:294
+#: src/slic3r/GUI/Mouse3DController.cpp:303
 msgid "Zoom"
 msgstr "Zoom"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:183
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:177
 msgid "Zoom in"
 msgstr "Przybliżenie"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:184
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:178
 msgid "Zoom out"
 msgstr "Oddalenie"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:181
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:175
 msgid "Zoom to Bed"
 msgstr "Zbliżenie na Stół"
 
-#: src/slic3r/GUI/KBShortcutsDialog.cpp:182
+#: src/slic3r/GUI/KBShortcutsDialog.cpp:176
 msgid ""
 "Zoom to selected object\n"
 "or all objects in scene, if none selected"
@@ -9175,14 +10494,16 @@ msgstr ""
 "Ustaw zbliżenie na wybrany model\n"
 "lub wszystkie na stole, jeśli żaden nie został wybrany"
 
-#: src/libslic3r/PrintConfig.cpp:207 src/libslic3r/PrintConfig.cpp:780
-#: src/libslic3r/PrintConfig.cpp:1640 src/libslic3r/PrintConfig.cpp:1650
-#: src/libslic3r/PrintConfig.cpp:1894 src/libslic3r/PrintConfig.cpp:2049
-#: src/libslic3r/PrintConfig.cpp:2247 src/libslic3r/PrintConfig.cpp:2727
-#: src/libslic3r/PrintConfig.cpp:2848
+#: src/libslic3r/PrintConfig.cpp:241 src/libslic3r/PrintConfig.cpp:816
+#: src/libslic3r/PrintConfig.cpp:1748 src/libslic3r/PrintConfig.cpp:1758
+#: src/libslic3r/PrintConfig.cpp:2036 src/libslic3r/PrintConfig.cpp:2191
+#: src/libslic3r/PrintConfig.cpp:2390 src/libslic3r/PrintConfig.cpp:2891
+#: src/libslic3r/PrintConfig.cpp:3012
 msgid "°"
 msgstr "°"
 
-#: src/slic3r/GUI/ConfigWizard.cpp:1038 src/slic3r/GUI/ConfigWizard.cpp:1052
+#: src/slic3r/GUI/ConfigWizard.cpp:1404 src/slic3r/GUI/ConfigWizard.cpp:1418
+#: src/libslic3r/PrintConfig.cpp:180 src/libslic3r/PrintConfig.cpp:912
+#: src/libslic3r/PrintConfig.cpp:956 src/libslic3r/PrintConfig.cpp:2209
 msgid "°C"
 msgstr "°C"
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp
index 48af11a8a..8f2703faa 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp
@@ -45,7 +45,7 @@ bool GLGizmoFdmSupports::on_init()
     m_desc["cursor_type"]      = _L("Brush shape") + ": ";
     m_desc["enforce_caption"]  = _L("Left mouse button") + ": ";
     m_desc["enforce"]          = _L("Enforce supports");
-    m_desc["block_caption"]    = _L("Right mouse button") + " ";
+    m_desc["block_caption"]    = _L("Right mouse button") + ": ";
     m_desc["block"]            = _L("Block supports");
     m_desc["remove_caption"]   = _L("Shift + Left mouse button") + ": ";
     m_desc["remove"]           = _L("Remove selection");
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp
index 266230f11..6c3a8ddd3 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp
@@ -28,7 +28,7 @@ bool GLGizmoSeam::on_init()
     m_desc["cursor_type"]      = _L("Brush shape") + ": ";
     m_desc["enforce_caption"]  = _L("Left mouse button") + ": ";
     m_desc["enforce"]          = _L("Enforce seam");
-    m_desc["block_caption"]    = _L("Right mouse button") + " ";
+    m_desc["block_caption"]    = _L("Right mouse button") + ": ";
     m_desc["block"]            = _L("Block seam");
     m_desc["remove_caption"]   = _L("Shift + Left mouse button") + ": ";
     m_desc["remove"]           = _L("Remove selection");

From 32345b9e755da8f588ded92be4d05d18eb2b2218 Mon Sep 17 00:00:00 2001
From: Pascal de Bruijn <pmjdebruijn@pcode.nl>
Date: Wed, 18 Nov 2020 18:40:20 +0100
Subject: [PATCH 050/138] creality.ini: make start_gcode robust for absolute_e

---
 resources/profiles/Creality.ini | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini
index 1270b6f08..e911edb32 100644
--- a/resources/profiles/Creality.ini
+++ b/resources/profiles/Creality.ini
@@ -666,14 +666,14 @@ deretract_speed = 40
 retract_before_wipe = 70%
 default_print_profile = 0.16mm OPTIMAL @CREALITY
 default_filament_profile = Creality PLA @CREALITY
-start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0.0\nG1 Y190 E15.0 F1500.0 ; intro line\nG1 X2.3 F5000\nG1 Y10 E15.0 F1200.0 ; intro line\nG92 E0.0
+start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0\nG1 Y190 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0
 end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+5, max_print_height)} F600{endif} ; Move print head up\nG1 X5 Y170 F3000 ; present print\n{if layer_z < max_print_height-10}G1 Z{z_offset+min(layer_z+70, max_print_height-10)} F600{endif} ; Move print head up\nM84 X Y E ; disable motors
 
 [printer:*fastabl*]
-start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set extruder temp for auto bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set extruder temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0.0\nG1 Y190 E15.0 F1500.0 ; intro line\nG1 X2.3 F5000\nG1 Y10 E15.0 F1200.0 ; intro line\nG92 E0.0
+start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set extruder temp for auto bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set extruder temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0\nG1 Y190 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0
 
 [printer:*slowabl*]
-start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set extruder temp for auto bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; home all\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set extruder temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0.0\nG1 Y190 E15.0 F1500.0 ; intro line\nG1 X2.3 F5000\nG1 Y10 E15.0 F1200.0 ; intro line\nG92 E0.0
+start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set extruder temp for auto bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; home all\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set extruder temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0\nG1 Y190 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0
 
 [printer:*invertedz*]
 end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+5, max_print_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F3000 ; present print\n{if layer_z < max_print_height-10}G1 Z{z_offset+max_print_height-10} F600{endif} ; Move print bed down\nM84 X Y E ; disable motors
@@ -706,7 +706,7 @@ bed_shape = 0x0,150x0,150x150,0x150
 printer_model = ENDER2
 printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER2\nPRINTER_HAS_BOWDEN
 max_print_height = 200
-start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0.0\nG1 X15 Y135 E15.0 F1500.0 ; intro line\nG1 X2.3 F5000\nG1 Y10 E15.0 F1200.0 ; intro line\nG92 E0.0
+start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0\nG1 X15 Y135 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0
 end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+5, max_print_height)} F600{endif} ; Move print head up\nG1 X5 Y140 F3000 ; present print\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)} F600{endif} ; Move print head up\nM84 X Y E ; disable motors
 
 [printer:Creality CR-10 Mini]

From ef9cea76c2639e7ad8ebbbed9e6f85c18a272308 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Thu, 19 Nov 2020 12:29:19 +0100
Subject: [PATCH 051/138] ENABLE_GCODE_VIEWER set as default in:

GLCanvas3D hpp/cpp

GUI_Preview hpp/cpp
---
 src/slic3r/GUI/GLCanvas3D.cpp  | 1183 ++------------------------------
 src/slic3r/GUI/GLCanvas3D.hpp  |  119 ----
 src/slic3r/GUI/GUI_Preview.cpp |  525 +-------------
 src/slic3r/GUI/GUI_Preview.hpp |   78 +--
 4 files changed, 70 insertions(+), 1835 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index f6ec0bd58..cd82878c2 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -352,20 +352,16 @@ bool GLCanvas3D::LayersEditing::is_initialized() const
 std::string GLCanvas3D::LayersEditing::get_tooltip(const GLCanvas3D& canvas) const
 {
     std::string ret;
-    if (m_enabled && (m_layer_height_profile.size() >= 4))
-    {
+    if (m_enabled && m_layer_height_profile.size() >= 4) {
         float z = get_cursor_z_relative(canvas);
-        if (z != -1000.0f)
-        {
+        if (z != -1000.0f) {
             z *= m_object_max_z;
 
             float h = 0.0f;
-            for (size_t i = m_layer_height_profile.size() - 2; i >= 2; i -= 2)
-            {
+            for (size_t i = m_layer_height_profile.size() - 2; i >= 2; i -= 2) {
                 float zi = m_layer_height_profile[i];
                 float zi_1 = m_layer_height_profile[i - 2];
-                if ((zi_1 <= z) && (z <= zi))
-                {
+                if (zi_1 <= z && z <= zi) {
                     float dz = zi - zi_1;
                     h = (dz != 0.0f) ? lerp(m_layer_height_profile[i - 1], m_layer_height_profile[i + 1], (z - zi_1) / dz) : m_layer_height_profile[i + 1];
                     break;
@@ -809,11 +805,9 @@ bool GLCanvas3D::WarningTexture::generate(const std::string& msg_utf8, const GLC
     // prepare buffer
     std::vector<unsigned char> data(4 * m_width * m_height, 0);
     const unsigned char *src = image.GetData();
-    for (int h = 0; h < m_height; ++h)
-    {
+    for (int h = 0; h < m_height; ++h) {
         unsigned char* dst = data.data() + 4 * h * m_width;
-        for (int w = 0; w < m_width; ++w)
-        {
+        for (int w = 0; w < m_width; ++w) {
             *dst++ = 255;
             if (red_colored) {
                 *dst++ = 72; // 204
@@ -848,8 +842,7 @@ void GLCanvas3D::WarningTexture::render(const GLCanvas3D& canvas) const
     if (m_warnings.empty())
         return;
 
-    if ((m_id > 0) && (m_original_width > 0) && (m_original_height > 0) && (m_width > 0) && (m_height > 0))
-    {
+    if (m_id > 0 && m_original_width > 0 && m_original_height > 0 && m_width > 0 && m_height > 0) {
         const Size& cnv_size = canvas.get_canvas_size();
         float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom();
         float left = (-0.5f * (float)m_original_width) * inv_zoom;
@@ -880,367 +873,6 @@ void GLCanvas3D::WarningTexture::msw_rescale(const GLCanvas3D& canvas)
     generate(m_msg_text, canvas, true, m_is_colored_red);
 }
 
-#if !ENABLE_GCODE_VIEWER
-const unsigned char GLCanvas3D::LegendTexture::Squares_Border_Color[3] = { 64, 64, 64 };
-const unsigned char GLCanvas3D::LegendTexture::Default_Background_Color[3] = { (unsigned char)(DEFAULT_BG_LIGHT_COLOR[0] * 255.0f), (unsigned char)(DEFAULT_BG_LIGHT_COLOR[1] * 255.0f), (unsigned char)(DEFAULT_BG_LIGHT_COLOR[2] * 255.0f) };
-const unsigned char GLCanvas3D::LegendTexture::Error_Background_Color[3] = { (unsigned char)(ERROR_BG_LIGHT_COLOR[0] * 255.0f), (unsigned char)(ERROR_BG_LIGHT_COLOR[1] * 255.0f), (unsigned char)(ERROR_BG_LIGHT_COLOR[2] * 255.0f) };
-const unsigned char GLCanvas3D::LegendTexture::Opacity = 255;
-
-GLCanvas3D::LegendTexture::LegendTexture()
-    : GUI::GLTexture()
-    , m_original_width(0)
-    , m_original_height(0)
-{
-}
-
-void GLCanvas3D::LegendTexture::fill_color_print_legend_items(  const GLCanvas3D& canvas,
-                                                                const std::vector<float>& colors_in,
-                                                                std::vector<float>& colors,
-                                                                std::vector<std::string>& cp_legend_items)
-{
-    std::vector<CustomGCode::Item> custom_gcode_per_print_z = wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes;
-
-    const int extruders_cnt = wxGetApp().extruders_edited_cnt();
-    if (extruders_cnt == 1) 
-    {
-        if (custom_gcode_per_print_z.empty()) {
-            cp_legend_items.emplace_back(I18N::translate_utf8(L("Default print color")));
-            colors = colors_in;
-            return;
-        }
-        std::vector<std::pair<double, double>> cp_values;
-        cp_values.reserve(custom_gcode_per_print_z.size());
-        
-        std::vector<double> print_zs = canvas.get_current_print_zs(true);
-        for (auto custom_code : custom_gcode_per_print_z)
-        {
-            if (custom_code.type != CustomGCode::ColorChange)
-                continue;
-            auto lower_b = std::lower_bound(print_zs.begin(), print_zs.end(), custom_code.print_z - Slic3r::DoubleSlider::epsilon());
-
-            if (lower_b == print_zs.end())
-                continue;
-
-            double current_z = *lower_b;
-            double previous_z = lower_b == print_zs.begin() ? 0.0 : *(--lower_b);
-
-            // to avoid duplicate values, check adding values
-            if (cp_values.empty() ||
-                !(cp_values.back().first == previous_z && cp_values.back().second == current_z))
-                cp_values.emplace_back(std::pair<double, double>(previous_z, current_z));
-        }
-
-        const auto items_cnt = (int)cp_values.size();
-        if (items_cnt == 0) // There is no one color change, but there is/are some pause print or custom Gcode
-        {
-            cp_legend_items.emplace_back(I18N::translate_utf8(L("Default print color")));
-            cp_legend_items.emplace_back(I18N::translate_utf8(L("Pause print or custom G-code")));
-            colors = colors_in;
-            return;
-        }
-
-        const int color_cnt = (int)colors_in.size() / 4;
-        colors.resize(colors_in.size(), 0.0);
-                
-        ::memcpy((void*)(colors.data()), (const void*)(colors_in.data() + (color_cnt - 1) * 4), 4 * sizeof(float));
-        cp_legend_items.emplace_back(I18N::translate_utf8(L("Pause print or custom G-code")));
-        size_t color_pos = 4;
-
-        for (int i = items_cnt; i >= 0; --i, color_pos+=4)
-        {
-            // update colors for color print item
-            ::memcpy((void*)(colors.data() + color_pos), (const void*)(colors_in.data() + i * 4), 4 * sizeof(float));
-
-            // create label for color print item
-            std::string id_str = std::to_string(i + 1) + ": ";
-
-            if (i == 0) {
-                cp_legend_items.emplace_back(id_str + (boost::format(I18N::translate_utf8(L("up to %.2f mm"))) % cp_values[0].first).str());
-                break;
-            }
-            if (i == items_cnt) {
-                cp_legend_items.emplace_back(id_str + (boost::format(I18N::translate_utf8(L("above %.2f mm"))) % cp_values[i - 1].second).str());
-                continue;
-            }
-
-            cp_legend_items.emplace_back(id_str + (boost::format(I18N::translate_utf8(L("%.2f - %.2f mm"))) % cp_values[i - 1].second % cp_values[i].first).str());
-        }
-    }
-    else
-    {
-        // colors = colors_in;
-        const int color_cnt = (int)colors_in.size() / 4;
-        colors.resize(colors_in.size(), 0.0);
-
-        ::memcpy((void*)(colors.data()), (const void*)(colors_in.data()), 4 * extruders_cnt * sizeof(float));
-        size_t color_pos = 4 * extruders_cnt;
-        size_t color_in_pos = 4 * (color_cnt - 1);
-        
-        for (unsigned int i = 0; i < (unsigned int)extruders_cnt; ++i)
-            cp_legend_items.emplace_back((boost::format(I18N::translate_utf8(L("Extruder %d"))) % (i + 1)).str());
-
-        ::memcpy((void*)(colors.data() + color_pos), (const void*)(colors_in.data() + color_in_pos), 4 * sizeof(float));
-        color_pos += 4;
-        color_in_pos -= 4;
-        cp_legend_items.emplace_back(I18N::translate_utf8(L("Pause print or custom G-code")));
-
-        int cnt = custom_gcode_per_print_z.size();
-        int color_change_idx = color_cnt - extruders_cnt;
-        for (int i = cnt-1; i >= 0; --i)
-            if (custom_gcode_per_print_z[i].type == CustomGCode::ColorChange) {
-                ::memcpy((void*)(colors.data() + color_pos), (const void*)(colors_in.data() + color_in_pos), 4 * sizeof(float));
-                color_pos += 4;
-                color_in_pos -= 4;
-
-                // create label for color change item
-                std::string id_str = std::to_string(color_change_idx--) + ": ";
-
-                cp_legend_items.emplace_back(id_str + (boost::format(I18N::translate_utf8(L("Color change for Extruder %d at %.2f mm"))) % custom_gcode_per_print_z[i].extruder % custom_gcode_per_print_z[i].print_z).str());
-            }
-    }
-}
-
-bool GLCanvas3D::LegendTexture::generate(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors_in, const GLCanvas3D& canvas, bool compress)
-{
-    reset();
-
-    // collects items to render
-    auto title = _(preview_data.get_legend_title());
-
-    std::vector<std::string> cp_legend_items;
-    std::vector<float> cp_colors;
-
-    if (preview_data.extrusion.view_type == GCodePreviewData::Extrusion::ColorPrint)
-    {
-        cp_legend_items.reserve(cp_colors.size());
-        fill_color_print_legend_items(canvas, tool_colors_in, cp_colors, cp_legend_items);
-    }
-
-    const std::vector<float>& tool_colors = preview_data.extrusion.view_type == GCodePreviewData::Extrusion::ColorPrint ? cp_colors : tool_colors_in;
-    const GCodePreviewData::LegendItemsList& items = preview_data.get_legend_items(tool_colors, cp_legend_items);
-
-    unsigned int items_count = (unsigned int)items.size();
-    if (items_count == 0)
-        // nothing to render, return
-        return false;
-
-    wxMemoryDC memDC;
-    wxMemoryDC mask_memDC;
-
-    // calculate scaling
-    const float scale_gl = canvas.get_canvas_size().get_scale_factor();
-#if ENABLE_RETINA_GL
-    // For non-visible or non-created window getBackingScaleFactor function return 0.0 value.
-    // And using of the zero scale causes a crash, when we trying to draw text to the (0,0) rectangle
-    if (scale_gl <= 0.0f)
-        return false;
-#endif
-    const float scale = scale_gl * wxGetApp().em_unit()*0.1; // get scale from em_unit() value, because of get_scale_factor() return 1 
-    const int scaled_square = std::floor((float)Px_Square * scale);
-    const int scaled_title_offset = Px_Title_Offset * scale;
-    const int scaled_text_offset = Px_Text_Offset * scale;
-    const int scaled_square_contour = Px_Square_Contour * scale;
-    const int scaled_border = Px_Border * scale;
-
-#ifdef __WXMSW__
-    // set scaled application normal font as default font 
-    wxFont font = wxGetApp().normal_font();
-
-    // Disabling ClearType works, but the font returned is very different (much thicker) from the default.
-//    msw_disable_cleartype(font);
-//    bool cleartype = is_font_cleartype(font);
-#else
-    // select default font
-    wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Scale(scale_gl);
-//    bool cleartype = false;
-#endif /* __WXMSW__ */
-
-    memDC.SetFont(font);
-    mask_memDC.SetFont(font);
-
-    // calculates texture size
-    wxCoord w, h;
-    memDC.GetTextExtent(title, &w, &h);
-    int title_width = (int)w;
-    int title_height = (int)h;
-
-    int max_text_width = 0;
-    int max_text_height = 0;
-    for (const GCodePreviewData::LegendItem& item : items)
-    {
-        memDC.GetTextExtent(GUI::from_u8(item.text), &w, &h);
-        max_text_width = std::max(max_text_width, (int)w);
-        max_text_height = std::max(max_text_height, (int)h);
-    }
-
-    m_original_width = std::max(2 * scaled_border + title_width, 2 * (scaled_border + scaled_square_contour) + scaled_square + scaled_text_offset + max_text_width);
-    m_original_height = 2 * (scaled_border + scaled_square_contour) + title_height + scaled_title_offset + items_count * scaled_square;
-    if (items_count > 1)
-        m_original_height += (items_count - 1) * scaled_square_contour;
-
-    m_width = (int)next_highest_power_of_2((uint32_t)m_original_width);
-    m_height = (int)next_highest_power_of_2((uint32_t)m_original_height);
-
-    // generates bitmap
-    wxBitmap bitmap(m_width, m_height);
-    wxBitmap mask(m_width, m_height);
-
-    memDC.SelectObject(bitmap);
-    mask_memDC.SelectObject(mask);
-
-    memDC.SetBackground(wxBrush(*wxBLACK));
-    mask_memDC.SetBackground(wxBrush(*wxBLACK));
-
-    memDC.Clear();
-    mask_memDC.Clear();
-
-    // draw title
-    memDC.SetTextForeground(*wxWHITE);
-	mask_memDC.SetTextForeground(*wxRED);
-
-    int title_x = scaled_border;
-    int title_y = scaled_border;
-    memDC.DrawText(title, title_x, title_y);
-    mask_memDC.DrawText(title, title_x, title_y);
-
-    // draw icons contours as background
-    int squares_contour_x = scaled_border;
-    int squares_contour_y = scaled_border + title_height + scaled_title_offset;
-    int squares_contour_width = scaled_square + 2 * scaled_square_contour;
-    int squares_contour_height = items_count * scaled_square + 2 * scaled_square_contour;
-    if (items_count > 1)
-        squares_contour_height += (items_count - 1) * scaled_square_contour;
-
-    wxColour color(Squares_Border_Color[0], Squares_Border_Color[1], Squares_Border_Color[2]);
-    wxPen pen(color);
-    wxBrush brush(color);
-    memDC.SetPen(pen);
-    memDC.SetBrush(brush);
-    memDC.DrawRectangle(wxRect(squares_contour_x, squares_contour_y, squares_contour_width, squares_contour_height));
-
-    // draw items (colored icon + text)
-    int icon_x = squares_contour_x + scaled_square_contour;
-    int icon_x_inner = icon_x + 1;
-    int icon_y = squares_contour_y + scaled_square_contour;
-    int icon_y_step = scaled_square + scaled_square_contour;
-
-    int text_x = icon_x + scaled_square + scaled_text_offset;
-    int text_y_offset = (scaled_square - max_text_height) / 2;
-
-    int px_inner_square = scaled_square - 2;
-
-    for (const GCodePreviewData::LegendItem& item : items)
-    {
-        // draw darker icon perimeter
-        const std::vector<unsigned char>& item_color_bytes = item.color.as_bytes();
-        wxImage::HSVValue dark_hsv = wxImage::RGBtoHSV(wxImage::RGBValue(item_color_bytes[0], item_color_bytes[1], item_color_bytes[2]));
-        dark_hsv.value *= 0.75;
-        wxImage::RGBValue dark_rgb = wxImage::HSVtoRGB(dark_hsv);
-        color.Set(dark_rgb.red, dark_rgb.green, dark_rgb.blue, item_color_bytes[3]);
-        pen.SetColour(color);
-        brush.SetColour(color);
-        memDC.SetPen(pen);
-        memDC.SetBrush(brush);
-        memDC.DrawRectangle(wxRect(icon_x, icon_y, scaled_square, scaled_square));
-
-        // draw icon interior
-        color.Set(item_color_bytes[0], item_color_bytes[1], item_color_bytes[2], item_color_bytes[3]);
-        pen.SetColour(color);
-        brush.SetColour(color);
-        memDC.SetPen(pen);
-        memDC.SetBrush(brush);
-        memDC.DrawRectangle(wxRect(icon_x_inner, icon_y + 1, px_inner_square, px_inner_square));
-
-        // draw text
-        mask_memDC.DrawText(GUI::from_u8(item.text), text_x, icon_y + text_y_offset);
-
-        // update y
-        icon_y += icon_y_step;
-    }
-
-    memDC.SelectObject(wxNullBitmap);
-    mask_memDC.SelectObject(wxNullBitmap);
-
-    // Convert the bitmap into a linear data ready to be loaded into the GPU.
-    wxImage image = bitmap.ConvertToImage();
-    wxImage mask_image = mask.ConvertToImage();
-
-    // prepare buffer
-    std::vector<unsigned char> data(4 * m_width * m_height, 0);
-	const unsigned char *src_image = image.GetData();
-    const unsigned char *src_mask  = mask_image.GetData();
-	for (int h = 0; h < m_height; ++h)
-    {
-        int hh = h * m_width;
-        unsigned char* px_ptr = data.data() + 4 * hh;
-        for (int w = 0; w < m_width; ++w)
-        {
-			if (w >= squares_contour_x && w < squares_contour_x + squares_contour_width &&
-				h >= squares_contour_y && h < squares_contour_y + squares_contour_height) {
-				// Color palette, use the color verbatim.
-				*px_ptr++ = *src_image++;
-				*px_ptr++ = *src_image++;
-				*px_ptr++ = *src_image++;
-				*px_ptr++ = 255;
-			} else {
-				// Text or background
-				unsigned char alpha = *src_mask;
-				// Compensate the white color for the 50% opacity reduction at the character edges.
-                //unsigned char color = (unsigned char)floor(alpha * 255.f / (128.f + 0.5f * alpha));
-                unsigned char color = alpha;
-				*px_ptr++ = color;
-				*px_ptr++ = color; // *src_mask ++;
-				*px_ptr++ = color; // *src_mask ++;
-				*px_ptr++ = 128 + (alpha / 2); // (alpha > 0) ? 255 : 128;
-				src_image += 3;
-			}
-            src_mask += 3;
-        }
-    }
-
-    // sends buffer to gpu
-    glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
-    glsafe(::glGenTextures(1, &m_id));
-    glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)m_id));
-    if (compress && GLEW_EXT_texture_compression_s3tc)
-        glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
-    else
-        glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
-    glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
-    glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
-    glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0));
-    glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
-
-    return true;
-}
-
-void GLCanvas3D::LegendTexture::render(const GLCanvas3D& canvas) const
-{
-    if ((m_id > 0) && (m_original_width > 0) && (m_original_height > 0) && (m_width > 0) && (m_height > 0))
-    {
-        const Size& cnv_size = canvas.get_canvas_size();
-        float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom();
-        float left = (-0.5f * (float)cnv_size.get_width()) * inv_zoom;
-        float top = (0.5f * (float)cnv_size.get_height()) * inv_zoom;
-        float right = left + (float)m_original_width * inv_zoom;
-        float bottom = top - (float)m_original_height * inv_zoom;
-
-        float uv_left = 0.0f;
-        float uv_top = 0.0f;
-        float uv_right = (float)m_original_width / (float)m_width;
-        float uv_bottom = (float)m_original_height / (float)m_height;
-
-        GLTexture::Quad_UVs uvs;
-        uvs.left_top = { uv_left, uv_top };
-        uvs.left_bottom = { uv_left, uv_bottom };
-        uvs.right_bottom = { uv_right, uv_bottom };
-        uvs.right_top = { uv_right, uv_top };
-
-        GLTexture::render_sub_texture(m_id, left, right, bottom, top, uvs);
-    }
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 void GLCanvas3D::Labels::render(const std::vector<const ModelInstance*>& sorted_instances) const
 {
     if (!m_enabled || !is_shown())
@@ -1355,8 +987,7 @@ void GLCanvas3D::Labels::render(const std::vector<const ModelInstance*>& sorted_
         ImGui::AlignTextToFramePadding();
         imgui.text(owner.label);
 
-        if (!owner.print_order.empty())
-        {
+        if (!owner.print_order.empty()) {
             ImGui::Separator();
             float po_len = imgui.calc_text_size(owner.print_order).x;
             ImGui::SetCursorPosX(0.5f * (win_w - po_len));
@@ -1378,8 +1009,7 @@ void GLCanvas3D::Tooltip::set_text(const std::string& text)
 {
     // If the mouse is inside an ImGUI dialog, then the tooltip is suppressed.
 	const std::string &new_text = m_in_imgui ? std::string() : text;
-    if (m_text != new_text)
-    {
+    if (m_text != new_text) {
         if (m_text.empty())
             m_start_time = std::chrono::steady_clock::now();
 
@@ -1448,11 +1078,7 @@ wxDEFINE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
-#if ENABLE_GCODE_VIEWER
 wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent);
-#else
-wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, wxKeyEvent);
-#endif // ENABLE_GCODE_VIEWER
 wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
@@ -1484,9 +1110,6 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas)
     , m_dirty(true)
     , m_initialized(false)
     , m_apply_zoom_to_volumes_filter(false)
-#if !ENABLE_GCODE_VIEWER
-    , m_legend_texture_enabled(false)
-#endif // !ENABLE_GCODE_VIEWER
     , m_picking_enabled(false)
     , m_moving_enabled(false)
     , m_dynamic_background_enabled(false)
@@ -1684,12 +1307,10 @@ void GLCanvas3D::toggle_model_objects_visibility(bool visible, const ModelObject
 void GLCanvas3D::update_instance_printable_state_for_object(const size_t obj_idx)
 {
     ModelObject* model_object = m_model->objects[obj_idx];
-    for (int inst_idx = 0; inst_idx < (int)model_object->instances.size(); ++inst_idx)
-    {
+    for (int inst_idx = 0; inst_idx < (int)model_object->instances.size(); ++inst_idx) {
         ModelInstance* instance = model_object->instances[inst_idx];
 
-        for (GLVolume* volume : m_volumes.volumes)
-        {
+        for (GLVolume* volume : m_volumes.volumes) {
             if ((volume->object_idx() == (int)obj_idx) && (volume->instance_idx() == inst_idx))
                 volume->printable = instance->printable;
         }
@@ -1739,8 +1360,7 @@ void GLCanvas3D::refresh_camera_scene_box()
 BoundingBoxf3 GLCanvas3D::volumes_bounding_box() const
 {
     BoundingBoxf3 bb;
-    for (const GLVolume* volume : m_volumes.volumes)
-    {
+    for (const GLVolume* volume : m_volumes.volumes) {
         if (!m_apply_zoom_to_volumes_filter || ((volume != nullptr) && volume->zoom_to_volumes))
             bb.merge(volume->transformed_bounding_box());
     }
@@ -1751,8 +1371,7 @@ BoundingBoxf3 GLCanvas3D::scene_bounding_box() const
 {
     BoundingBoxf3 bb = volumes_bounding_box();
     bb.merge(wxGetApp().plater()->get_bed().get_bounding_box(true));
-    if (m_config != nullptr)
-    {
+    if (m_config != nullptr) {
         double h = m_config->opt_float("max_print_height");
         bb.min(2) = std::min(bb.min(2), -h);
         bb.max(2) = std::max(bb.max(2), h);
@@ -1773,7 +1392,7 @@ bool GLCanvas3D::is_layers_editing_allowed() const
 
 void GLCanvas3D::reset_layer_height_profile()
 {
-    wxGetApp().plater()->take_snapshot(_(L("Variable layer height - Reset")));
+    wxGetApp().plater()->take_snapshot(_L("Variable layer height - Reset"));
     m_layers_editing.reset_layer_height_profile(*this);
     m_layers_editing.state = LayersEditing::Completed;
     m_dirty = true;
@@ -1781,7 +1400,7 @@ void GLCanvas3D::reset_layer_height_profile()
 
 void GLCanvas3D::adaptive_layer_height_profile(float quality_factor)
 {
-    wxGetApp().plater()->take_snapshot(_(L("Variable layer height - Adaptive")));
+    wxGetApp().plater()->take_snapshot(_L("Variable layer height - Adaptive"));
     m_layers_editing.adaptive_layer_height_profile(*this, quality_factor);
     m_layers_editing.state = LayersEditing::Completed;
     m_dirty = true;
@@ -1789,7 +1408,7 @@ void GLCanvas3D::adaptive_layer_height_profile(float quality_factor)
 
 void GLCanvas3D::smooth_layer_height_profile(const HeightProfileSmoothingParams& smoothing_params)
 {
-    wxGetApp().plater()->take_snapshot(_(L("Variable layer height - Smooth all")));
+    wxGetApp().plater()->take_snapshot(_L("Variable layer height - Smooth all"));
     m_layers_editing.smooth_layer_height_profile(*this, smoothing_params);
     m_layers_editing.state = LayersEditing::Completed;
     m_dirty = true;
@@ -1804,8 +1423,7 @@ void GLCanvas3D::enable_layers_editing(bool enable)
 {
     m_layers_editing.set_enabled(enable);
     const Selection::IndicesList& idxs = m_selection.get_volume_idxs();
-    for (unsigned int idx : idxs)
-    {
+    for (unsigned int idx : idxs) {
         GLVolume* v = m_volumes.volumes[idx];
         if (v->is_modifier)
             v->force_transparent = enable;
@@ -1816,11 +1434,7 @@ void GLCanvas3D::enable_layers_editing(bool enable)
 
 void GLCanvas3D::enable_legend_texture(bool enable)
 {
-#if ENABLE_GCODE_VIEWER
     m_gcode_viewer.enable_legend(enable);
-#else
-    m_legend_texture_enabled = enable;
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void GLCanvas3D::enable_picking(bool enable)
@@ -1882,12 +1496,10 @@ void GLCanvas3D::zoom_to_selection()
         _zoom_to_box(m_selection.get_bounding_box());
 }
 
-#if ENABLE_GCODE_VIEWER
 void GLCanvas3D::zoom_to_gcode()
 {
     _zoom_to_box(m_gcode_viewer.get_paths_bounding_box(), 1.05);
 }
-#endif // ENABLE_GCODE_VIEWER
 
 void GLCanvas3D::select_view(const std::string& direction)
 {
@@ -1904,8 +1516,7 @@ void GLCanvas3D::update_volumes_colors_by_extruder()
 
 void GLCanvas3D::render()
 {
-    if (m_in_render)
-    {
+    if (m_in_render) {
         // if called recursively, return
         m_dirty = true;
         return;
@@ -1929,17 +1540,14 @@ void GLCanvas3D::render()
     auto start_time = std::chrono::high_resolution_clock::now();
 #endif // ENABLE_RENDER_STATISTICS
 
-    if (wxGetApp().plater()->get_bed().get_shape().empty())
-    {
+    if (wxGetApp().plater()->get_bed().get_shape().empty()) {
         // this happens at startup when no data is still saved under <>\AppData\Roaming\Slic3rPE
         post_event(SimpleEvent(EVT_GLCANVAS_UPDATE_BED_SHAPE));
         return;
     }
 
 #if ENABLE_ENVIRONMENT_MAP
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor())
-#endif // ENABLE_GCODE_VIEWER
         wxGetApp().plater()->init_environment_texture();
 #endif // ENABLE_ENVIRONMENT_MAP
 
@@ -1951,8 +1559,7 @@ void GLCanvas3D::render()
     Camera& camera = wxGetApp().plater()->get_camera();
     camera.apply_viewport(0, 0, std::max(10u, (unsigned int)cnv_size.get_width()), std::max(10u, (unsigned int)cnv_size.get_height()));
 
-    if (camera.requires_zoom_to_bed)
-    {
+    if (camera.requires_zoom_to_bed) {
         zoom_to_bed();
         _resize((unsigned int)cnv_size.get_width(), (unsigned int)cnv_size.get_height());
         camera.requires_zoom_to_bed = false;
@@ -1968,8 +1575,7 @@ void GLCanvas3D::render()
 
     wxGetApp().imgui()->new_frame();
 
-    if (m_picking_enabled)
-    {
+    if (m_picking_enabled) {
         if (m_rectangle_selection.is_dragging())
             // picking pass using rectangle selection
             _rectangular_selection_picking_pass();
@@ -1979,18 +1585,15 @@ void GLCanvas3D::render()
     }
 
 #if ENABLE_RENDER_PICKING_PASS
-    if (!m_picking_enabled || !m_show_picking_texture)
-    {
+    if (!m_picking_enabled || !m_show_picking_texture) {
 #endif // ENABLE_RENDER_PICKING_PASS
     // draw scene
     glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
     _render_background();
 
     _render_objects();
-#if ENABLE_GCODE_VIEWER
     if (!m_main_toolbar.is_enabled())
         _render_gcode();
-#endif // ENABLE_GCODE_VIEWER
     _render_sla_slices();
     _render_selection();
     _render_bed(!camera.is_looking_downward(), true);
@@ -2002,10 +1605,8 @@ void GLCanvas3D::render()
     // we need to set the mouse's scene position here because the depth buffer
     // could be invalidated by the following gizmo render methods
     // this position is used later into on_mouse() to drag the objects
-#if ENABLE_GCODE_VIEWER
     if (m_picking_enabled)
-#endif // ENABLE_GCODE_VIEWER
-    m_mouse.scene_position = _mouse_to_3d(m_mouse.position.cast<coord_t>());
+        m_mouse.scene_position = _mouse_to_3d(m_mouse.position.cast<coord_t>());
 
     _render_current_gizmo();
     _render_selection_sidebar_hints();
@@ -2051,8 +1652,7 @@ void GLCanvas3D::render()
 
 	// Negative coordinate means out of the window, likely because the window was deactivated.
 	// In that case the tooltip should be hidden.
-    if (m_mouse.position.x() >= 0. && m_mouse.position.y() >= 0.) 
-    {
+    if (m_mouse.position.x() >= 0. && m_mouse.position.y() >= 0.) {
 	    if (tooltip.empty())
 	        tooltip = m_layers_editing.get_tooltip(*this);
 
@@ -2126,10 +1726,8 @@ void GLCanvas3D::ensure_on_bed(unsigned int object_idx)
     typedef std::map<std::pair<int, int>, double> InstancesToZMap;
     InstancesToZMap instances_min_z;
 
-    for (GLVolume* volume : m_volumes.volumes)
-    {
-        if ((volume->object_idx() == (int)object_idx) && !volume->is_modifier)
-        {
+    for (GLVolume* volume : m_volumes.volumes) {
+        if (volume->object_idx() == (int)object_idx && !volume->is_modifier) {
             double min_z = volume->transformed_convex_hull_bounding_box().min(2);
             std::pair<int, int> instance = std::make_pair(volume->object_idx(), volume->instance_idx());
             InstancesToZMap::iterator it = instances_min_z.find(instance);
@@ -2140,8 +1738,7 @@ void GLCanvas3D::ensure_on_bed(unsigned int object_idx)
         }
     }
 
-    for (GLVolume* volume : m_volumes.volumes)
-    {
+    for (GLVolume* volume : m_volumes.volumes) {
         std::pair<int, int> instance = std::make_pair(volume->object_idx(), volume->instance_idx());
         InstancesToZMap::iterator it = instances_min_z.find(instance);
         if (it != instances_min_z.end())
@@ -2150,7 +1747,6 @@ void GLCanvas3D::ensure_on_bed(unsigned int object_idx)
 }
 
 
-#if ENABLE_GCODE_VIEWER
 const std::vector<double>& GLCanvas3D::get_gcode_layers_zs() const
 {
     return m_gcode_viewer.get_layers_zs();
@@ -2186,24 +1782,11 @@ void GLCanvas3D::set_toolpaths_z_range(const std::array<unsigned int, 2>& range)
     if (m_gcode_viewer.has_data())
         m_gcode_viewer.set_layers_z_range(range);
 }
-#else
-std::vector<double> GLCanvas3D::get_current_print_zs(bool active_only) const
-{
-    return m_volumes.get_current_print_zs(active_only);
-}
-
-void GLCanvas3D::set_toolpaths_range(double low, double high)
-{
-    m_volumes.set_range(low, high);
-}
-#endif // ENABLE_GCODE_VIEWER
 
 std::vector<int> GLCanvas3D::load_object(const ModelObject& model_object, int obj_idx, std::vector<int> instance_idxs)
 {
-    if (instance_idxs.empty())
-    {
-        for (unsigned int i = 0; i < model_object.instances.size(); ++i)
-        {
+    if (instance_idxs.empty()) {
+        for (unsigned int i = 0; i < model_object.instances.size(); ++i) {
             instance_idxs.emplace_back(i);
         }
     }
@@ -2212,8 +1795,7 @@ std::vector<int> GLCanvas3D::load_object(const ModelObject& model_object, int ob
 
 std::vector<int> GLCanvas3D::load_object(const Model& model, int obj_idx)
 {
-    if ((0 <= obj_idx) && (obj_idx < (int)model.objects.size()))
-    {
+    if (0 <= obj_idx && obj_idx < (int)model.objects.size()) {
         const ModelObject* model_object = model.objects[obj_idx];
         if (model_object != nullptr)
             return load_object(*model_object, obj_idx, std::vector<int>());
@@ -2237,7 +1819,7 @@ void GLCanvas3D::mirror_selection(Axis axis)
 // 5) Out of bed collision status & message overlay (texture)
 void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_refresh)
 {
-    if ((m_canvas == nullptr) || (m_config == nullptr) || (m_model == nullptr))
+    if (m_canvas == nullptr || m_config == nullptr || m_model == nullptr)
         return;
 
     if (!m_initialized)
@@ -2536,16 +2118,14 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
 				volume->set_sla_shift_z(shift_zs[volume->object_idx()]);
     }
 
-    if (printer_technology == ptFFF && m_config->has("nozzle_diameter"))
-    {
+    if (printer_technology == ptFFF && m_config->has("nozzle_diameter")) {
         // Should the wipe tower be visualized ?
         unsigned int extruders_count = (unsigned int)dynamic_cast<const ConfigOptionFloats*>(m_config->option("nozzle_diameter"))->values.size();
 
         bool wt = dynamic_cast<const ConfigOptionBool*>(m_config->option("wipe_tower"))->value;
         bool co = dynamic_cast<const ConfigOptionBool*>(m_config->option("complete_objects"))->value;
 
-        if ((extruders_count > 1) && wt && !co)
-        {
+        if ((extruders_count > 1) && wt && !co) {
             // Height of a print (Show at least a slab)
             double height = std::max(m_model->bounding_box().max(2), 10.0);
 
@@ -2586,8 +2166,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
 		post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT));
 
     // checks for geometry outside the print volume to render it accordingly
-    if (!m_volumes.empty())
-    {
+    if (!m_volumes.empty()) {
         ModelInstanceEPrintVolumeState state;
 
         const bool contained_min_one = m_volumes.check_outside_state(m_config, &state);
@@ -2600,8 +2179,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
         post_event(Event<bool>(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, 
                                contained_min_one && !m_model->objects.empty() && state != ModelInstancePVS_Partly_Outside));
     }
-    else
-    {
+    else {
         _set_warning_texture(WarningTexture::ObjectOutside, false);
         _set_warning_texture(WarningTexture::ObjectClashed, false);
         _set_warning_texture(WarningTexture::SlaSupportsOutside, false);
@@ -2610,8 +2188,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
 
     refresh_camera_scene_box();
 
-    if (m_selection.is_empty())
-    {
+    if (m_selection.is_empty()) {
         // If no object is selected, deactivate the active gizmo, if any
         // Otherwise it may be shown after cleaning the scene (if it was active while the objects were deleted)
         m_gizmos.reset_all_states();
@@ -2642,40 +2219,6 @@ static void reserve_new_volume_finalize_old_volume(GLVolume& vol_new, GLVolume&
 	vol_old.finalize_geometry(gl_initialized);
 }
 
-#if !ENABLE_GCODE_VIEWER
-static void load_gcode_retractions(const GCodePreviewData::Retraction& retractions, GLCanvas3D::GCodePreviewVolumeIndex::EType extrusion_type, GLVolumeCollection &volumes, GLCanvas3D::GCodePreviewVolumeIndex &volume_index, bool gl_initialized)
-{
-	// nothing to render, return
-	if (retractions.positions.empty())
-		return;
-
-	volume_index.first_volumes.emplace_back(extrusion_type, 0, (unsigned int)volumes.volumes.size());
-
-	GLVolume *volume = volumes.new_nontoolpath_volume(retractions.color.rgba.data(), VERTEX_BUFFER_RESERVE_SIZE);
-
-	GCodePreviewData::Retraction::PositionsList copy(retractions.positions);
-	std::sort(copy.begin(), copy.end(), [](const GCodePreviewData::Retraction::Position& p1, const GCodePreviewData::Retraction::Position& p2) { return p1.position(2) < p2.position(2); });
-
-	for (const GCodePreviewData::Retraction::Position& position : copy)
-	{
-		volume->print_zs.emplace_back(unscale<double>(position.position(2)));
-		volume->offsets.emplace_back(volume->indexed_vertex_array.quad_indices.size());
-		volume->offsets.emplace_back(volume->indexed_vertex_array.triangle_indices.size());
-
-		_3DScene::point3_to_verts(position.position, position.width, position.height, *volume);
-
-		// Ensure that no volume grows over the limits. If the volume is too large, allocate a new one.
-		if (volume->indexed_vertex_array.vertices_and_normals_interleaved.size() > MAX_VERTEX_BUFFER_SIZE) {
-			GLVolume &vol = *volume;
-			volume = volumes.new_nontoolpath_volume(vol.color);
-			reserve_new_volume_finalize_old_volume(*volume, vol, gl_initialized);
-		}
-	}
-	volume->indexed_vertex_array.finalize_geometry(gl_initialized);
-}
-#endif // !ENABLE_GCODE_VIEWER
-
-#if ENABLE_GCODE_VIEWER
 void GLCanvas3D::load_gcode_preview(const GCodeProcessor::Result& gcode_result)
 {
     m_gcode_viewer.load(gcode_result, *this->fff_print(), m_initialized);
@@ -2689,82 +2232,11 @@ void GLCanvas3D::refresh_gcode_preview(const GCodeProcessor::Result& gcode_resul
     set_as_dirty();
     request_extra_frame();
 }
-#else
-void GLCanvas3D::load_gcode_preview(const GCodePreviewData& preview_data, const std::vector<std::string>& str_tool_colors)
-{
-    const Print *print = this->fff_print();
-    if ((m_canvas != nullptr) && (print != nullptr))
-    {
-        _set_current();
-
-        std::vector<float> tool_colors = _parse_colors(str_tool_colors);
-
-        if (m_volumes.empty())
-        {
-            m_gcode_preview_volume_index.reset();
-            
-            _load_gcode_extrusion_paths(preview_data, tool_colors);
-            _load_gcode_travel_paths(preview_data, tool_colors);
-			load_gcode_retractions(preview_data.retraction,   GCodePreviewVolumeIndex::Retraction,   m_volumes, m_gcode_preview_volume_index, m_initialized);
-			load_gcode_retractions(preview_data.unretraction, GCodePreviewVolumeIndex::Unretraction, m_volumes, m_gcode_preview_volume_index, m_initialized);
-            
-            if (!m_volumes.empty())
-            {
-                // Remove empty volumes from both m_volumes, update m_gcode_preview_volume_index.
-                {
-	                size_t idx_volume_src = 0;
-	                size_t idx_volume_dst = 0;
-	                size_t idx_volume_index_src = 0;
-	                size_t idx_volume_index_dst = 0;
-	                size_t idx_volume_of_this_type_last = (idx_volume_index_src + 1 == m_gcode_preview_volume_index.first_volumes.size()) ? m_volumes.volumes.size() : m_gcode_preview_volume_index.first_volumes[idx_volume_index_src + 1].id;
-	                size_t idx_volume_of_this_type_first_new = 0;
-	                for (;;) {
-	                	if (idx_volume_src == idx_volume_of_this_type_last) {
-	                		if (idx_volume_of_this_type_first_new < idx_volume_dst) {
-	                			// There are some volumes of this type left, therefore their entry in the index has to be maintained.
-	                			if (idx_volume_index_dst < idx_volume_index_src)
-	                				m_gcode_preview_volume_index.first_volumes[idx_volume_index_dst] = m_gcode_preview_volume_index.first_volumes[idx_volume_index_src];
-	                			m_gcode_preview_volume_index.first_volumes[idx_volume_index_dst].id = idx_volume_of_this_type_first_new;
-		                		++ idx_volume_index_dst;
-		                	}
-	                		if (idx_volume_of_this_type_last == m_volumes.volumes.size())
-	                			break;
-	                		++ idx_volume_index_src;
-	                		idx_volume_of_this_type_last = (idx_volume_index_src + 1 == m_gcode_preview_volume_index.first_volumes.size()) ? m_volumes.volumes.size() : m_gcode_preview_volume_index.first_volumes[idx_volume_index_src + 1].id;
-	                		idx_volume_of_this_type_first_new = idx_volume_dst;
-	                		if (idx_volume_src == idx_volume_of_this_type_last)
-	                			// Empty sequence of volumes for the current index item.
-	                			continue;
-	                	}
-	                	if (! m_volumes.volumes[idx_volume_src]->print_zs.empty())
-                			m_volumes.volumes[idx_volume_dst ++] = m_volumes.volumes[idx_volume_src];
-	                	++ idx_volume_src;
-	                }
-	                m_volumes.volumes.erase(m_volumes.volumes.begin() + idx_volume_dst, m_volumes.volumes.end());
-	                m_gcode_preview_volume_index.first_volumes.erase(m_gcode_preview_volume_index.first_volumes.begin() + idx_volume_index_dst, m_gcode_preview_volume_index.first_volumes.end());
-	            }
-
-                _load_fff_shells();
-            }
-            _update_toolpath_volumes_outside_state();
-        }
-        
-        _update_gcode_volumes_visibility(preview_data);
-        _show_warning_texture_if_needed(WarningTexture::ToolpathOutside);
-
-        if (m_volumes.empty())
-            reset_legend_texture();
-        else
-            _generate_legend_texture(preview_data, tool_colors);
-    }
-}
-#endif // ENABLE_GCODE_VIEWER
 
 void GLCanvas3D::load_sla_preview()
 {
     const SLAPrint* print = this->sla_print();
-    if ((m_canvas != nullptr) && (print != nullptr))
-    {
+    if (m_canvas != nullptr && print != nullptr) {
         _set_current();
 	    // Release OpenGL data before generating new data.
 	    this->reset_volumes();
@@ -2792,16 +2264,6 @@ void GLCanvas3D::load_preview(const std::vector<std::string>& str_tool_colors, c
 
     _update_toolpath_volumes_outside_state();
     _show_warning_texture_if_needed(WarningTexture::ToolpathOutside);
-#if !ENABLE_GCODE_VIEWER
-    if (color_print_values.empty())
-        reset_legend_texture();
-    else {
-        auto preview_data = GCodePreviewData();
-        preview_data.extrusion.view_type = GCodePreviewData::Extrusion::ColorPrint;
-        const std::vector<float> tool_colors = _parse_colors(str_tool_colors);
-        _generate_legend_texture(preview_data, tool_colors);
-    }
-#endif // !ENABLE_GCODE_VIEWER
 }
 
 void GLCanvas3D::bind_event_handlers()
@@ -3061,7 +2523,6 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
         case 'i': { _update_camera_zoom(1.0); break; }
         case 'K':
         case 'k': { wxGetApp().plater()->get_camera().select_next_type(); m_dirty = true; break; }
-#if ENABLE_GCODE_VIEWER
         case 'L':
         case 'l': {
                     if (!m_main_toolbar.is_enabled()) {
@@ -3071,7 +2532,6 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
                     }
                     break;
                   }
-#endif // ENABLE_GCODE_VIEWER
         case 'O':
         case 'o': { _update_camera_zoom(-1.0); break; }
 #if ENABLE_RENDER_PICKING_PASS
@@ -3083,7 +2543,6 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
         }
 #endif // ENABLE_RENDER_PICKING_PASS
         case 'Z':
-#if ENABLE_GCODE_VIEWER
         case 'z':
         {
             if (!m_selection.is_empty())
@@ -3097,9 +2556,6 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
 
             break;
         }
-#else
-        case 'z': { m_selection.is_empty() ? zoom_to_volumes() : zoom_to_selection(); break; }
-#endif // ENABLE_GCODE_VIEWER
         default:  { evt.Skip(); break; }
         }
     }
@@ -3212,8 +2668,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
             double multiplier = slow ? 1.0 : 10.0;
 
             Vec3d displacement;
-            if (camera_space)
-            {
+            if (camera_space) {
                 Eigen::Matrix<double, 3, 3, Eigen::DontAlign> inv_view_3x3 = wxGetApp().plater()->get_camera().get_view_matrix().inverse().matrix().block(0, 0, 3, 3);
                 displacement = multiplier * (inv_view_3x3 * direction);
                 displacement(2) = 0.0;
@@ -3234,8 +2689,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
     }
     else
     {
-        if (!m_gizmos.on_key(evt))
-        {
+        if (!m_gizmos.on_key(evt)) {
             if (evt.GetEventType() == wxEVT_KEY_UP) {
                 if (m_tab_down && keyCode == WXK_TAB && !evt.HasAnyModifiers()) {
                     // Enable switching between 3D and Preview with Tab
@@ -3246,12 +2700,10 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
                     // Collapse side-panel with Shift+Tab
                     post_event(SimpleEvent(EVT_GLCANVAS_COLLAPSE_SIDEBAR));
                 }
-                else if (keyCode == WXK_SHIFT)
-                {
+                else if (keyCode == WXK_SHIFT) {
                     translationProcessor.process(evt);
 
-                    if (m_picking_enabled && m_rectangle_selection.is_dragging())
-                    {
+                    if (m_picking_enabled && m_rectangle_selection.is_dragging()) {
                         _update_selection_from_hover();
                         m_rectangle_selection.stop_dragging();
                         m_mouse.ignore_left_up = true;
@@ -3259,10 +2711,8 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
                     }
 //                    set_cursor(Standard);
                 }
-                else if (keyCode == WXK_ALT)
-                {
-                    if (m_picking_enabled && m_rectangle_selection.is_dragging())
-                    {
+                else if (keyCode == WXK_ALT) {
+                    if (m_picking_enabled && m_rectangle_selection.is_dragging()) {
                         _update_selection_from_hover();
                         m_rectangle_selection.stop_dragging();
                         m_mouse.ignore_left_up = true;
@@ -3299,8 +2749,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
             }
             else if (evt.GetEventType() == wxEVT_KEY_DOWN) {
                 m_tab_down = keyCode == WXK_TAB && !evt.HasAnyModifiers();
-                if (keyCode == WXK_SHIFT)
-                {
+                if (keyCode == WXK_SHIFT) {
                     translationProcessor.process(evt);
 
                     if (m_picking_enabled && (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports))
@@ -3309,8 +2758,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
 //                        set_cursor(Cross);
                     }
                 }
-                else if (keyCode == WXK_ALT)
-                {
+                else if (keyCode == WXK_ALT) {
                     if (m_picking_enabled && (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports))
                     {
                         m_mouse.ignore_left_up = false;
@@ -3319,8 +2767,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
                 }
                 else if (keyCode == WXK_CONTROL)
                     m_dirty = true;
-                else if (m_gizmos.is_enabled() && !m_selection.is_empty())
-                {
+                else if (m_gizmos.is_enabled() && !m_selection.is_empty()) {
                     auto do_rotate = [this](double angle_z_rad) {
                         m_selection.start_dragging();
                         m_selection.rotate(Vec3d(0.0, 0.0, angle_z_rad), TransformationType(TransformationType::World_Relative_Joint));
@@ -3337,20 +2784,14 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
                     default: { break; }
                     }
                 }
-                else if (!m_gizmos.is_enabled())
-                {
+                else if (!m_gizmos.is_enabled()) {
                     // DoubleSlider navigation in Preview
                     if (keyCode == WXK_LEFT ||
                         keyCode == WXK_RIGHT ||
                         keyCode == WXK_UP ||
-                        keyCode == WXK_DOWN)
-                    {
+                        keyCode == WXK_DOWN) {
                         if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
-#if ENABLE_GCODE_VIEWER
                             post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, evt));
-#else
-                            post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, evt));
-#endif // ENABLE_GCODE_VIEWER
                     }
                 }
             }
@@ -3400,14 +2841,11 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt)
 #endif /* __WXMSW__ */
 
     // Performs layers editing updates, if enabled
-    if (is_layers_editing_enabled())
-    {
+    if (is_layers_editing_enabled()) {
         int object_idx_selected = m_selection.get_object_idx();
-        if (object_idx_selected != -1)
-        {
+        if (object_idx_selected != -1) {
             // A volume is selected. Test, whether hovering over a layer thickness bar.
-            if (m_layers_editing.bar_rect_contains(*this, (float)evt.GetX(), (float)evt.GetY()))
-            {
+            if (m_layers_editing.bar_rect_contains(*this, (float)evt.GetX(), (float)evt.GetY())) {
                 // Adjust the width of the selection.
                 m_layers_editing.band_width = std::max(std::min(m_layers_editing.band_width * (1.0f + 0.1f * (float)evt.GetWheelRotation() / (float)evt.GetWheelDelta()), 10.0f), 1.5f);
                 if (m_canvas != nullptr)
@@ -3868,13 +3306,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
         if (m_selection.is_empty())
             m_gizmos.reset_all_states();
 
-#if ENABLE_GCODE_VIEWER
         m_dirty = true;
-#else
-        // Only refresh if picking is enabled, in that case the objects may get highlighted if the mouse cursor hovers over.
-        //if (m_picking_enabled)
-            m_dirty = true;
-#endif // ENABLE_GCODE_VIEWER
     }
     else
         evt.Skip();
@@ -3935,17 +3367,6 @@ Vec2d GLCanvas3D::get_local_mouse_position() const
     return Vec2d(factor * mouse_pos.x, factor * mouse_pos.y);
 }
 
-#if !ENABLE_GCODE_VIEWER
-void GLCanvas3D::reset_legend_texture()
-{
-    if (m_legend_texture.get_id() != 0)
-    {
-        _set_current();
-        m_legend_texture.reset();
-    }
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 void GLCanvas3D::set_tooltip(const std::string& tooltip) const
 {
     if (m_canvas != nullptr)
@@ -4234,13 +3655,8 @@ void GLCanvas3D::update_ui_from_settings()
     }
 #endif // ENABLE_RETINA_GL
 
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor())
         wxGetApp().plater()->enable_collapse_toolbar(wxGetApp().app_config->get("show_collapse_button") == "1");
-#else
-    bool enable_collapse = wxGetApp().app_config->get("show_collapse_button") == "1";
-    wxGetApp().plater()->get_collapse_toolbar().set_enabled(enable_collapse);
-#endif // ENABLE_GCODE_VIEWER
 }
 
 GLCanvas3D::WipeTowerInfo GLCanvas3D::get_wipe_tower_info() const
@@ -4304,20 +3720,12 @@ void GLCanvas3D::update_tooltip_for_settings_item_in_main_toolbar()
 
 bool GLCanvas3D::has_toolpaths_to_export() const
 {
-#if ENABLE_GCODE_VIEWER
     return m_gcode_viewer.has_data();
-#else
-    return m_volumes.has_toolpaths_to_export();
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void GLCanvas3D::export_toolpaths_to_obj(const char* filename) const
 {
-#if ENABLE_GCODE_VIEWER
     m_gcode_viewer.export_toolpaths_to_obj(filename);
-#else
-    m_volumes.export_toolpaths_to_obj(filename);
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void GLCanvas3D::mouse_up_cleanup()
@@ -5150,10 +4558,8 @@ BoundingBoxf3 GLCanvas3D::_max_bounding_box(bool include_gizmos, bool include_be
 
     bb.merge(wxGetApp().plater()->get_bed().get_bounding_box(include_bed_model));
 
-#if ENABLE_GCODE_VIEWER
     if (!m_main_toolbar.is_enabled())
         bb.merge(m_gcode_viewer.get_max_bounding_box());
-#endif // ENABLE_GCODE_VIEWER
 
     return bb;
 }
@@ -5314,7 +4720,6 @@ void GLCanvas3D::_rectangular_selection_picking_pass() const
     _update_volumes_hover_state();
 }
 
-#if ENABLE_GCODE_VIEWER
 static BoundingBoxf3 print_volume(const DynamicPrintConfig& config)
 {
     // tolerance to avoid false detection at bed edges
@@ -5331,11 +4736,9 @@ static BoundingBoxf3 print_volume(const DynamicPrintConfig& config)
     }
     return ret;
 }
-#endif // ENABLE_GCODE_VIEWER
 
 void GLCanvas3D::_render_background() const
 {
-#if ENABLE_GCODE_VIEWER
     bool use_error_color = false;
     if (wxGetApp().is_editor()) {
         use_error_color = m_dynamic_background_enabled &&
@@ -5348,7 +4751,6 @@ void GLCanvas3D::_render_background() const
             use_error_color &= (test_volume.radius() > 0.0) ? !test_volume.contains(m_gcode_viewer.get_paths_bounding_box()) : false;
         }
     }
-#endif // ENABLE_GCODE_VIEWER
 
     glsafe(::glPushMatrix());
     glsafe(::glLoadIdentity());
@@ -5360,11 +4762,7 @@ void GLCanvas3D::_render_background() const
     glsafe(::glDisable(GL_DEPTH_TEST));
 
     ::glBegin(GL_QUADS);
-#if ENABLE_GCODE_VIEWER
     if (use_error_color)
-#else
-    if (m_dynamic_background_enabled && _is_any_volume_outside())
-#endif // ENABLE_GCODE_VIEWER
         ::glColor3fv(ERROR_BG_DARK_COLOR);
     else
         ::glColor3fv(DEFAULT_BG_DARK_COLOR);
@@ -5372,12 +4770,8 @@ void GLCanvas3D::_render_background() const
     ::glVertex2f(-1.0f, -1.0f);
     ::glVertex2f(1.0f, -1.0f);
 
-#if ENABLE_GCODE_VIEWER
     if (use_error_color)
-#else
-    if (m_dynamic_background_enabled && _is_any_volume_outside())
-#endif // ENABLE_GCODE_VIEWER
-::glColor3fv(ERROR_BG_LIGHT_COLOR);
+        ::glColor3fv(ERROR_BG_LIGHT_COLOR);
     else
         ::glColor3fv(DEFAULT_BG_LIGHT_COLOR);
 
@@ -5475,12 +4869,10 @@ void GLCanvas3D::_render_objects() const
     m_camera_clipping_plane = ClippingPlane::ClipsNothing();
 }
 
-#if ENABLE_GCODE_VIEWER
 void GLCanvas3D::_render_gcode() const
 {
     m_gcode_viewer.render();
 }
-#endif // ENABLE_GCODE_VIEWER
 
 void GLCanvas3D::_render_selection() const
 {
@@ -5562,9 +4954,6 @@ void GLCanvas3D::_render_overlays() const
 
     _render_gizmos_overlay();
     _render_warning_texture();
-#if !ENABLE_GCODE_VIEWER
-    _render_legend_texture();
-#endif // !ENABLE_GCODE_VIEWER
 
     // main toolbar and undoredo toolbar need to be both updated before rendering because both their sizes are needed
     // to correctly place them
@@ -5607,16 +4996,6 @@ void GLCanvas3D::_render_warning_texture() const
     m_warning_texture.render(*this);
 }
 
-#if !ENABLE_GCODE_VIEWER
-void GLCanvas3D::_render_legend_texture() const
-{
-    if (!m_legend_texture_enabled)
-        return;
-
-    m_legend_texture.render(*this);
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 void GLCanvas3D::_render_volumes_for_picking() const
 {
     static const GLfloat INV_255 = 1.0f / 255.0f;
@@ -6563,336 +5942,6 @@ void GLCanvas3D::_load_wipe_tower_toolpaths(const std::vector<std::string>& str_
     BOOST_LOG_TRIVIAL(debug) << "Loading wipe tower toolpaths in parallel - end" << m_volumes.log_memory_info() << log_memory_info();
 }
 
-#if !ENABLE_GCODE_VIEWER
-static inline int hex_digit_to_int(const char c)
-{
-    return
-        (c >= '0' && c <= '9') ? int(c - '0') :
-        (c >= 'A' && c <= 'F') ? int(c - 'A') + 10 :
-        (c >= 'a' && c <= 'f') ? int(c - 'a') + 10 : -1;
-}
-
-void GLCanvas3D::_load_gcode_extrusion_paths(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors)
-{
-    BOOST_LOG_TRIVIAL(debug) << "Loading G-code extrusion paths - start" << m_volumes.log_memory_info() << log_memory_info();
-
-    // helper functions to select data in dependence of the extrusion view type
-    struct Helper
-    {
-        static float path_filter(GCodePreviewData::Extrusion::EViewType type, const GCodePreviewData::Extrusion::Path& path)
-        {
-            switch (type)
-            {
-            case GCodePreviewData::Extrusion::FeatureType:
-            	// The role here is used for coloring.
-                return (float)path.extrusion_role;
-            case GCodePreviewData::Extrusion::Height:
-                return path.height;
-            case GCodePreviewData::Extrusion::Width:
-                return path.width;
-            case GCodePreviewData::Extrusion::Feedrate:
-                return path.feedrate;
-            case GCodePreviewData::Extrusion::FanSpeed:
-                return path.fan_speed;
-            case GCodePreviewData::Extrusion::VolumetricRate:
-                return path.feedrate * path.mm3_per_mm;
-            case GCodePreviewData::Extrusion::Tool:
-                return (float)path.extruder_id;
-            case GCodePreviewData::Extrusion::ColorPrint:
-                return (float)path.cp_color_id;
-            default:
-                return 0.0f;
-            }
-
-            return 0.0f;
-        }
-
-        static Color path_color(const GCodePreviewData& data, const std::vector<float>& tool_colors, float value)
-        {
-            switch (data.extrusion.view_type)
-            {
-            case GCodePreviewData::Extrusion::FeatureType:
-                return data.get_extrusion_role_color((ExtrusionRole)(int)value);
-            case GCodePreviewData::Extrusion::Height:
-                return data.get_height_color(value);
-            case GCodePreviewData::Extrusion::Width:
-                return data.get_width_color(value);
-            case GCodePreviewData::Extrusion::Feedrate:
-                return data.get_feedrate_color(value);
-            case GCodePreviewData::Extrusion::FanSpeed:
-                return data.get_fan_speed_color(value);
-            case GCodePreviewData::Extrusion::VolumetricRate:
-                return data.get_volumetric_rate_color(value);
-            case GCodePreviewData::Extrusion::Tool:
-            {
-                Color color;
-                ::memcpy((void*)color.rgba.data(), (const void*)(tool_colors.data() + (unsigned int)value * 4), 4 * sizeof(float));
-                return color;
-            }
-            case GCodePreviewData::Extrusion::ColorPrint:
-            {
-                int color_cnt = (int)tool_colors.size() / 4;
-                int val = value > color_cnt ? color_cnt - 1 : value;
-
-                Color color;
-                ::memcpy((void*)color.rgba.data(), (const void*)(tool_colors.data() + val * 4), 4 * sizeof(float));
-
-                return color;
-            }
-            default:
-                return Color{};
-            }
-
-            return Color{};
-        }
-    };
-
-    size_t initial_volumes_count = m_volumes.volumes.size();
-    size_t initial_volume_index_count = m_gcode_preview_volume_index.first_volumes.size();
-
-    try 
-    {
-	    BOOST_LOG_TRIVIAL(debug) << "Loading G-code extrusion paths - create volumes" << m_volumes.log_memory_info() << log_memory_info();
-
-	    // detects filters
-	    size_t vertex_buffer_prealloc_size = 0;
-	    std::vector<std::vector<std::pair<float, GLVolume*>>> roles_filters;
-	    {
-		    std::vector<size_t> num_paths_per_role(size_t(erCount), 0);
-		    for (const GCodePreviewData::Extrusion::Layer &layer : preview_data.extrusion.layers)
-		        for (const GCodePreviewData::Extrusion::Path &path : layer.paths)
-		        	++ num_paths_per_role[size_t(path.extrusion_role)];
-            std::vector<std::vector<float>> roles_values;
-			roles_values.assign(size_t(erCount), std::vector<float>());
-		    for (size_t i = 0; i < roles_values.size(); ++ i)
-		    	roles_values[i].reserve(num_paths_per_role[i]);
-            for (const GCodePreviewData::Extrusion::Layer& layer : preview_data.extrusion.layers)
-		        for (const GCodePreviewData::Extrusion::Path &path : layer.paths)
-		        	roles_values[size_t(path.extrusion_role)].emplace_back(Helper::path_filter(preview_data.extrusion.view_type, path));
-            roles_filters.reserve(size_t(erCount));
-			size_t num_buffers = 0;
-		    for (std::vector<float> &values : roles_values) {
-		    	sort_remove_duplicates(values);
-		    	num_buffers += values.size();
-		    }
-		    if (num_buffers == 0)
-			    // nothing to render, return
-		        return;
-		    vertex_buffer_prealloc_size = (uint64_t(num_buffers) * uint64_t(VERTEX_BUFFER_RESERVE_SIZE) < VERTEX_BUFFER_RESERVE_SIZE_SUM_MAX) ? 
-	    		VERTEX_BUFFER_RESERVE_SIZE : next_highest_power_of_2(VERTEX_BUFFER_RESERVE_SIZE_SUM_MAX / num_buffers) / 2;
-		    for (std::vector<float> &values : roles_values) {
-		    	size_t role = &values - &roles_values.front();
-				roles_filters.emplace_back();
-		    	if (! values.empty()) {
-		        	m_gcode_preview_volume_index.first_volumes.emplace_back(GCodePreviewVolumeIndex::Extrusion, role, (unsigned int)m_volumes.volumes.size());
-					for (const float value : values)
-						roles_filters.back().emplace_back(value, m_volumes.new_toolpath_volume(Helper::path_color(preview_data, tool_colors, value).rgba.data(), vertex_buffer_prealloc_size));
-				}
-			}
-		}
-
-	    BOOST_LOG_TRIVIAL(debug) << "Loading G-code extrusion paths - populate volumes" << m_volumes.log_memory_info() << log_memory_info();
-
-	    // populates volumes
-        const bool is_selected_separate_extruder = m_selected_extruder > 0 && preview_data.extrusion.view_type == GCodePreviewData::Extrusion::ColorPrint;
-		for (const GCodePreviewData::Extrusion::Layer& layer : preview_data.extrusion.layers)
-		{
-			for (const GCodePreviewData::Extrusion::Path& path : layer.paths)
-			{
-                if (is_selected_separate_extruder && path.extruder_id != m_selected_extruder - 1)
-                    continue;
-				std::vector<std::pair<float, GLVolume*>> &filters = roles_filters[size_t(path.extrusion_role)];
-				auto key = std::make_pair<float, GLVolume*>(Helper::path_filter(preview_data.extrusion.view_type, path), nullptr);
-				auto it_filter = std::lower_bound(filters.begin(), filters.end(), key);
-				assert(it_filter != filters.end() && key.first == it_filter->first);
-
-				GLVolume& vol = *it_filter->second;
-				vol.print_zs.emplace_back(layer.z);
-				vol.offsets.emplace_back(vol.indexed_vertex_array.quad_indices.size());
-				vol.offsets.emplace_back(vol.indexed_vertex_array.triangle_indices.size());
-
-				_3DScene::extrusionentity_to_verts(path.polyline, path.width, path.height, layer.z, vol);
-			}
-			// Ensure that no volume grows over the limits. If the volume is too large, allocate a new one.
-		    for (std::vector<std::pair<float, GLVolume*>> &filters : roles_filters) {
-		    	unsigned int role = (unsigned int)(&filters - &roles_filters.front());
-			    for (std::pair<float, GLVolume*> &filter : filters)
-					if (filter.second->indexed_vertex_array.vertices_and_normals_interleaved.size() > MAX_VERTEX_BUFFER_SIZE) {
-						if (m_gcode_preview_volume_index.first_volumes.back().type != GCodePreviewVolumeIndex::Extrusion || m_gcode_preview_volume_index.first_volumes.back().flag != role)
-			        		m_gcode_preview_volume_index.first_volumes.emplace_back(GCodePreviewVolumeIndex::Extrusion, role, (unsigned int)m_volumes.volumes.size());
-						GLVolume& vol = *filter.second;
-						filter.second = m_volumes.new_toolpath_volume(vol.color);
-						reserve_new_volume_finalize_old_volume(*filter.second, vol, m_initialized, vertex_buffer_prealloc_size);
-					}
-		    }
-	    }
-
-	    // Finalize volumes and sends geometry to gpu
-	    for (std::vector<std::pair<float, GLVolume*>> &filters : roles_filters)
-		    for (std::pair<float, GLVolume*> &filter : filters)
-	    		filter.second->indexed_vertex_array.finalize_geometry(m_initialized);
-
-	    BOOST_LOG_TRIVIAL(debug) << "Loading G-code extrusion paths - end" << m_volumes.log_memory_info() << log_memory_info();
-	} 
-	catch (const std::bad_alloc & /* err */)
-	{
-        // an error occourred - restore to previous state and return
-        GLVolumePtrs::iterator begin = m_volumes.volumes.begin() + initial_volumes_count;
-        GLVolumePtrs::iterator end = m_volumes.volumes.end();
-        for (GLVolumePtrs::iterator it = begin; it < end; ++it)
-            delete *it;
-        m_volumes.volumes.erase(begin, end);
-        m_gcode_preview_volume_index.first_volumes.erase(m_gcode_preview_volume_index.first_volumes.begin() + initial_volume_index_count, m_gcode_preview_volume_index.first_volumes.end());
-	    BOOST_LOG_TRIVIAL(debug) << "Loading G-code extrusion paths - failed on low memory" << m_volumes.log_memory_info() << log_memory_info();
-        //FIXME rethrow bad_alloc?
-	}
-}
-
-template<typename TYPE, typename FUNC_VALUE, typename FUNC_COLOR>
-inline void travel_paths_internal(
-	// input
-	const GCodePreviewData &preview_data, 
-	// accessors
-	FUNC_VALUE func_value, FUNC_COLOR func_color,
-	// output
-	GLVolumeCollection &volumes, bool gl_initialized)
-
-{
-	// colors travels by type
-	std::vector<std::pair<TYPE, GLVolume*>> by_type;
-	{
-		std::vector<TYPE> values;
-		values.reserve(preview_data.travel.polylines.size());
-		for (const GCodePreviewData::Travel::Polyline& polyline : preview_data.travel.polylines)
-			values.emplace_back(func_value(polyline));
-		sort_remove_duplicates(values);
-		by_type.reserve(values.size());
-		// creates a new volume for each feedrate
-		for (TYPE type : values)
-			by_type.emplace_back(type, volumes.new_nontoolpath_volume(func_color(type).rgba.data(), VERTEX_BUFFER_RESERVE_SIZE));
-	}
-
-	// populates volumes
-	std::pair<TYPE, GLVolume*> key(0.f, nullptr);
-	for (const GCodePreviewData::Travel::Polyline& polyline : preview_data.travel.polylines)
-	{
-		key.first = func_value(polyline);
-		auto it = std::lower_bound(by_type.begin(), by_type.end(), key, [](const std::pair<TYPE, GLVolume*>& l, const std::pair<TYPE, GLVolume*>& r) { return l.first < r.first; });
-		assert(it != by_type.end() && it->first == func_value(polyline));
-
-		GLVolume& vol = *it->second;
-		vol.print_zs.emplace_back(unscale<double>(polyline.polyline.bounding_box().min(2)));
-		vol.offsets.emplace_back(vol.indexed_vertex_array.quad_indices.size());
-		vol.offsets.emplace_back(vol.indexed_vertex_array.triangle_indices.size());
-
-		_3DScene::polyline3_to_verts(polyline.polyline, preview_data.travel.width, preview_data.travel.height, vol);
-
-		// Ensure that no volume grows over the limits. If the volume is too large, allocate a new one.
-		if (vol.indexed_vertex_array.vertices_and_normals_interleaved.size() > MAX_VERTEX_BUFFER_SIZE) {
-			it->second = volumes.new_nontoolpath_volume(vol.color);
-			reserve_new_volume_finalize_old_volume(*it->second, vol, gl_initialized);
-		}
-	}
-
-	for (auto &feedrate : by_type)
-		feedrate.second->finalize_geometry(gl_initialized);
-}
-
-void GLCanvas3D::_load_gcode_travel_paths(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors)
-{
-	// nothing to render, return
-	if (preview_data.travel.polylines.empty())
-		return;
-
-    size_t initial_volumes_count = m_volumes.volumes.size();
-    size_t volume_index_allocated = false;
-
-    try {
-    	m_gcode_preview_volume_index.first_volumes.emplace_back(GCodePreviewVolumeIndex::Travel, 0, (unsigned int)initial_volumes_count);
-    	volume_index_allocated = true;
-
-	    switch (preview_data.extrusion.view_type)
-	    {
-	    case GCodePreviewData::Extrusion::Feedrate:
-			travel_paths_internal<float>(preview_data,
-				[](const GCodePreviewData::Travel::Polyline &polyline) { return polyline.feedrate; }, 
-				[&preview_data](const float feedrate) -> const Color { return preview_data.get_feedrate_color(feedrate); },
-				m_volumes, m_initialized);
-	        break;
-	    case GCodePreviewData::Extrusion::Tool:
-	    	travel_paths_internal<unsigned int>(preview_data,
-				[](const GCodePreviewData::Travel::Polyline &polyline) { return polyline.extruder_id; }, 
-				[&tool_colors](const unsigned int extruder_id) -> const Color { assert((extruder_id + 1) * 4 <= tool_colors.size()); return Color(tool_colors.data() + extruder_id * 4); },
-				m_volumes, m_initialized);
-	        break;
-	    default:
-	    	travel_paths_internal<unsigned int>(preview_data,
-				[](const GCodePreviewData::Travel::Polyline &polyline) { return polyline.type; }, 
-				[&preview_data](const unsigned int type) -> const Color& { return preview_data.travel.type_colors[type]; },
-				m_volumes, m_initialized);
-	        break;
-	    }
-	} catch (const std::bad_alloc & /* ex */) {
-        // an error occourred - restore to previous state and return
-        GLVolumePtrs::iterator begin = m_volumes.volumes.begin() + initial_volumes_count;
-        GLVolumePtrs::iterator end   = m_volumes.volumes.end();
-        for (GLVolumePtrs::iterator it = begin; it < end; ++it)
-            delete *it;
-        m_volumes.volumes.erase(begin, end);
-        if (volume_index_allocated)
-        	m_gcode_preview_volume_index.first_volumes.pop_back();
-        //FIXME report the memory issue?
-    }
-}
-
-void GLCanvas3D::_load_fff_shells()
-{
-    size_t initial_volumes_count = m_volumes.volumes.size();
-    m_gcode_preview_volume_index.first_volumes.emplace_back(GCodePreviewVolumeIndex::Shell, 0, (unsigned int)initial_volumes_count);
-
-    const Print *print = this->fff_print();
-    if (print->objects().empty())
-        // nothing to render, return
-        return;
-
-    // adds objects' volumes 
-    int object_id = 0;
-    for (const PrintObject* obj : print->objects())
-    {
-        const ModelObject* model_obj = obj->model_object();
-
-        std::vector<int> instance_ids(model_obj->instances.size());
-        for (int i = 0; i < (int)model_obj->instances.size(); ++i)
-        {
-            instance_ids[i] = i;
-        }
-
-        m_volumes.load_object(model_obj, object_id, instance_ids, "object", m_initialized);
-
-        ++object_id;
-    }
-
-    if (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptFFF) {
-        // adds wipe tower's volume
-        double max_z = print->objects()[0]->model_object()->get_model()->bounding_box().max(2);
-        const PrintConfig& config = print->config();
-        size_t extruders_count = config.nozzle_diameter.size();
-        if ((extruders_count > 1) && config.wipe_tower && !config.complete_objects) {
-
-            const DynamicPrintConfig &print_config  = wxGetApp().preset_bundle->prints.get_edited_preset().config;
-            double layer_height                     = print_config.opt_float("layer_height");
-            double first_layer_height               = print_config.get_abs_value("first_layer_height", layer_height);
-            double nozzle_diameter                  = print->config().nozzle_diameter.values[0];
-            float depth = print->wipe_tower_data(extruders_count, first_layer_height, nozzle_diameter).depth;
-            float brim_width = print->wipe_tower_data(extruders_count, first_layer_height, nozzle_diameter).brim_width;
-
-            m_volumes.load_wipe_tower_preview(1000, config.wipe_tower_x, config.wipe_tower_y, config.wipe_tower_width, depth, max_z, config.wipe_tower_rotation_angle,
-                !print->is_step_done(psWipeTower), brim_width, m_initialized);
-        }
-    }
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 // While it looks like we can call 
 // this->reload_scene(true, true)
 // the two functions are quite different:
@@ -6949,136 +5998,25 @@ void GLCanvas3D::_load_sla_shells()
     update_volumes_colors_by_extruder();
 }
 
-#if !ENABLE_GCODE_VIEWER
-void GLCanvas3D::_update_gcode_volumes_visibility(const GCodePreviewData& preview_data)
-{
-    unsigned int size = (unsigned int)m_gcode_preview_volume_index.first_volumes.size();
-    for (unsigned int i = 0; i < size; ++i)
-    {
-        GLVolumePtrs::iterator begin = m_volumes.volumes.begin() + m_gcode_preview_volume_index.first_volumes[i].id;
-        GLVolumePtrs::iterator end = (i + 1 < size) ? m_volumes.volumes.begin() + m_gcode_preview_volume_index.first_volumes[i + 1].id : m_volumes.volumes.end();
-
-        for (GLVolumePtrs::iterator it = begin; it != end; ++it)
-        {
-            GLVolume* volume = *it;
-
-            switch (m_gcode_preview_volume_index.first_volumes[i].type)
-            {
-            case GCodePreviewVolumeIndex::Extrusion:
-            {
-                if ((ExtrusionRole)m_gcode_preview_volume_index.first_volumes[i].flag == erCustom)
-                    volume->zoom_to_volumes = false;
-
-                volume->is_active = preview_data.extrusion.is_role_flag_set((ExtrusionRole)m_gcode_preview_volume_index.first_volumes[i].flag);
-                break;
-            }
-            case GCodePreviewVolumeIndex::Travel:
-            {
-                volume->is_active = preview_data.travel.is_visible;
-                volume->zoom_to_volumes = false;
-                break;
-            }
-            case GCodePreviewVolumeIndex::Retraction:
-            {
-                volume->is_active = preview_data.retraction.is_visible;
-                volume->zoom_to_volumes = false;
-                break;
-            }
-            case GCodePreviewVolumeIndex::Unretraction:
-            {
-                volume->is_active = preview_data.unretraction.is_visible;
-                volume->zoom_to_volumes = false;
-                break;
-            }
-            case GCodePreviewVolumeIndex::Shell:
-            {
-                volume->is_active = preview_data.shell.is_visible;
-                volume->color[3] = 0.25f;
-                volume->zoom_to_volumes = false;
-                break;
-            }
-            default:
-            {
-                volume->is_active = false;
-                volume->zoom_to_volumes = false;
-                break;
-            }
-            }
-        }
-    }
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 void GLCanvas3D::_update_toolpath_volumes_outside_state()
 {
-#if ENABLE_GCODE_VIEWER
     BoundingBoxf3 test_volume = (m_config != nullptr) ? print_volume(*m_config) : BoundingBoxf3();
-#else
-    // tolerance to avoid false detection at bed edges
-    static const double tolerance_x = 0.05;
-    static const double tolerance_y = 0.05;
-
-    BoundingBoxf3 print_volume;
-    if (m_config != nullptr)
-    {
-        const ConfigOptionPoints* opt = dynamic_cast<const ConfigOptionPoints*>(m_config->option("bed_shape"));
-        if (opt != nullptr)
-        {
-            BoundingBox bed_box_2D = get_extents(Polygon::new_scale(opt->values));
-            print_volume = BoundingBoxf3(Vec3d(unscale<double>(bed_box_2D.min(0)) - tolerance_x, unscale<double>(bed_box_2D.min(1)) - tolerance_y, 0.0), Vec3d(unscale<double>(bed_box_2D.max(0)) + tolerance_x, unscale<double>(bed_box_2D.max(1)) + tolerance_y, m_config->opt_float("max_print_height")));
-            // Allow the objects to protrude below the print bed
-            print_volume.min(2) = -1e10;
-        }
-    }
-#endif // ENABLE_GCODE_VIEWER
-
-    for (GLVolume* volume : m_volumes.volumes)
-    {
-#if ENABLE_GCODE_VIEWER
+    for (GLVolume* volume : m_volumes.volumes) {
         volume->is_outside = ((test_volume.radius() > 0.0) && volume->is_extrusion_path) ? !test_volume.contains(volume->bounding_box()) : false;
-#else
-        volume->is_outside = ((print_volume.radius() > 0.0) && volume->is_extrusion_path) ? !print_volume.contains(volume->bounding_box()) : false;
-#endif // ENABLE_GCODE_VIEWER
     }
 }
 
 void GLCanvas3D::_update_sla_shells_outside_state()
 {
-#if ENABLE_GCODE_VIEWER
     BoundingBoxf3 test_volume = (m_config != nullptr) ? print_volume(*m_config) : BoundingBoxf3();
-#else
-    // tolerance to avoid false detection at bed edges
-    static const double tolerance_x = 0.05;
-    static const double tolerance_y = 0.05;
-
-    BoundingBoxf3 print_volume;
-    if (m_config != nullptr)
-    {
-        const ConfigOptionPoints* opt = dynamic_cast<const ConfigOptionPoints*>(m_config->option("bed_shape"));
-        if (opt != nullptr)
-        {
-            BoundingBox bed_box_2D = get_extents(Polygon::new_scale(opt->values));
-            print_volume = BoundingBoxf3(Vec3d(unscale<double>(bed_box_2D.min(0)) - tolerance_x, unscale<double>(bed_box_2D.min(1)) - tolerance_y, 0.0), Vec3d(unscale<double>(bed_box_2D.max(0)) + tolerance_x, unscale<double>(bed_box_2D.max(1)) + tolerance_y, m_config->opt_float("max_print_height")));
-            // Allow the objects to protrude below the print bed
-            print_volume.min(2) = -1e10;
-        }
-    }
-#endif // ENABLE_GCODE_VIEWER
-
-    for (GLVolume* volume : m_volumes.volumes)
-    {
-#if ENABLE_GCODE_VIEWER
+    for (GLVolume* volume : m_volumes.volumes) {
         volume->is_outside = ((test_volume.radius() > 0.0) && volume->shader_outside_printer_detection_enabled) ? !test_volume.contains(volume->transformed_convex_hull_bounding_box()) : false;
-#else
-        volume->is_outside = ((print_volume.radius() > 0.0) && volume->shader_outside_printer_detection_enabled) ? !print_volume.contains(volume->transformed_convex_hull_bounding_box()) : false;
-#endif // ENABLE_GCODE_VIEWER
     }
 }
 
 void GLCanvas3D::_show_warning_texture_if_needed(WarningTexture::Warning warning)
 {
     _set_current();
-#if ENABLE_GCODE_VIEWER
     bool show = false;
     if (!m_volumes.empty())
         show = _is_any_volume_outside();
@@ -7091,9 +6029,6 @@ void GLCanvas3D::_show_warning_texture_if_needed(WarningTexture::Warning warning
         }
     }
     _set_warning_texture(warning, show);
-#else
-    _set_warning_texture(warning, _is_any_volume_outside());
-#endif // ENABLE_GCODE_VIEWER
 }
 
 std::vector<float> GLCanvas3D::_parse_colors(const std::vector<std::string>& colors)
@@ -7121,13 +6056,6 @@ std::vector<float> GLCanvas3D::_parse_colors(const std::vector<std::string>& col
     return output;
 }
 
-#if !ENABLE_GCODE_VIEWER
-void GLCanvas3D::_generate_legend_texture(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors)
-{
-    m_legend_texture.generate(preview_data, tool_colors, *this, true);
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 void GLCanvas3D::_set_warning_texture(WarningTexture::Warning warning, bool state)
 {
     m_warning_texture.activate(warning, state, *this);
@@ -7135,8 +6063,7 @@ void GLCanvas3D::_set_warning_texture(WarningTexture::Warning warning, bool stat
 
 bool GLCanvas3D::_is_any_volume_outside() const
 {
-    for (const GLVolume* volume : m_volumes.volumes)
-    {
+    for (const GLVolume* volume : m_volumes.volumes) {
         if ((volume != nullptr) && volume->is_outside)
             return true;
     }
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index cc3971c17..0975e59a0 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -12,10 +12,8 @@
 #include "GUI_ObjectLayers.hpp"
 #include "GLSelectionRectangle.hpp"
 #include "MeshUtils.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "libslic3r/GCode/GCodeProcessor.hpp"
 #include "GCodeViewer.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 #include "libslic3r/Slicing.hpp"
 
@@ -39,9 +37,6 @@ namespace Slic3r {
 
 struct Camera;
 class BackgroundSlicingProcess;
-#if !ENABLE_GCODE_VIEWER
-class GCodePreviewData;
-#endif // !ENABLE_GCODE_VIEWER
 struct ThumbnailData;
 class ModelObject;
 class ModelInstance;
@@ -108,11 +103,7 @@ wxDECLARE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
-#if ENABLE_GCODE_VIEWER
 wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent);
-#else
-wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, wxKeyEvent);
-#endif // ENABLE_GCODE_VIEWER
 wxDECLARE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
 wxDECLARE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
@@ -127,37 +118,6 @@ class GLCanvas3D
 {
     static const double DefaultCameraZoomToBoxMarginFactor;
 
-public:
-#if !ENABLE_GCODE_VIEWER
-    struct GCodePreviewVolumeIndex
-    {
-        enum EType
-        {
-            Extrusion,
-            Travel,
-            Retraction,
-            Unretraction,
-            Shell,
-            Num_Geometry_Types
-        };
-
-        struct FirstVolume
-        {
-            EType type;
-            unsigned int flag;
-            // Index of the first volume in a GLVolumeCollection.
-            unsigned int id;
-
-            FirstVolume(EType type, unsigned int flag, unsigned int id) : type(type), flag(flag), id(id) {}
-        };
-
-        std::vector<FirstVolume> first_volumes;
-
-        void reset() { first_volumes.clear(); }
-    };
-#endif // !ENABLE_GCODE_VIEWER
-
-private:
     class LayersEditing
     {
     public:
@@ -355,35 +315,6 @@ private:
         bool generate(const std::string& msg, const GLCanvas3D& canvas, bool compress, bool red_colored = false);
     };
 
-#if !ENABLE_GCODE_VIEWER
-    class LegendTexture : public GUI::GLTexture
-    {
-        static const int Px_Title_Offset = 5;
-        static const int Px_Text_Offset = 5;
-        static const int Px_Square = 20;
-        static const int Px_Square_Contour = 1;
-        static const int Px_Border = Px_Square / 2;
-        static const unsigned char Squares_Border_Color[3];
-        static const unsigned char Default_Background_Color[3];
-        static const unsigned char Error_Background_Color[3];
-        static const unsigned char Opacity;
-
-        int m_original_width;
-        int m_original_height;
-
-    public:
-        LegendTexture();
-        void fill_color_print_legend_items(const GLCanvas3D& canvas,
-                                           const std::vector<float>& colors_in,
-                                           std::vector<float>& colors,
-                                           std::vector<std::string>& cp_legend_items);
-
-        bool generate(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors, const GLCanvas3D& canvas, bool compress);
-
-        void render(const GLCanvas3D& canvas) const;
-    };
-#endif // !ENABLE_GCODE_VIEWER
-
 #if ENABLE_RENDER_STATISTICS
     struct RenderStats
     {
@@ -457,9 +388,6 @@ private:
     std::unique_ptr<RetinaHelper> m_retina_helper;
 #endif
     bool m_in_render;
-#if !ENABLE_GCODE_VIEWER
-    LegendTexture m_legend_texture;
-#endif // !ENABLE_GCODE_VIEWER
     WarningTexture m_warning_texture;
     wxTimer m_timer;
     LayersEditing m_layers_editing;
@@ -478,9 +406,7 @@ private:
     bool m_event_handlers_bound{ false };
 
     mutable GLVolumeCollection m_volumes;
-#if ENABLE_GCODE_VIEWER
     GCodeViewer m_gcode_viewer;
-#endif // ENABLE_GCODE_VIEWER
 
     Selection m_selection;
     const DynamicPrintConfig* m_config;
@@ -492,9 +418,6 @@ private:
     bool m_initialized;
     bool m_apply_zoom_to_volumes_filter;
     mutable std::vector<int> m_hover_volume_idxs;
-#if !ENABLE_GCODE_VIEWER
-    bool m_legend_texture_enabled;
-#endif // !ENABLE_GCODE_VIEWER
     bool m_picking_enabled;
     bool m_moving_enabled;
     bool m_dynamic_background_enabled;
@@ -512,10 +435,6 @@ private:
 
     bool m_reload_delayed;
 
-#if !ENABLE_GCODE_VIEWER
-    GCodePreviewVolumeIndex m_gcode_preview_volume_index;
-#endif // !ENABLE_GCODE_VIEWER
-
 #if ENABLE_RENDER_PICKING_PASS
     bool m_show_picking_texture;
 #endif // ENABLE_RENDER_PICKING_PASS
@@ -554,11 +473,9 @@ public:
     void reset_volumes();
     int check_volumes_outside_state() const;
 
-#if ENABLE_GCODE_VIEWER
     void reset_gcode_toolpaths() { m_gcode_viewer.reset(); }
     const GCodeViewer::SequentialView& get_gcode_sequential_view() const { return m_gcode_viewer.get_sequential_view(); }
     void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); }
-#endif // ENABLE_GCODE_VIEWER
 
     void toggle_sla_auxiliaries_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1);
     void toggle_model_objects_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1);
@@ -622,9 +539,7 @@ public:
     void zoom_to_bed();
     void zoom_to_volumes();
     void zoom_to_selection();
-#if ENABLE_GCODE_VIEWER
     void zoom_to_gcode();
-#endif // ENABLE_GCODE_VIEWER
     void select_view(const std::string& direction);
 
     void update_volumes_colors_by_extruder();
@@ -641,7 +556,6 @@ public:
     void delete_selected();
     void ensure_on_bed(unsigned int object_idx);
 
-#if ENABLE_GCODE_VIEWER
     bool is_gcode_legend_enabled() const { return m_gcode_viewer.is_legend_enabled(); }
     GCodeViewer::EViewType get_gcode_view_type() const { return m_gcode_viewer.get_view_type(); }
     const std::vector<double>& get_gcode_layers_zs() const;
@@ -653,9 +567,6 @@ public:
     void set_toolpath_view_type(GCodeViewer::EViewType type);
     void set_volumes_z_range(const std::array<double, 2>& range);
     void set_toolpaths_z_range(const std::array<unsigned int, 2>& range);
-#else
-    std::vector<double> get_current_print_zs(bool active_only) const;
-#endif // ENABLE_GCODE_VIEWER
     void set_toolpaths_range(double low, double high);
 
     std::vector<int> load_object(const ModelObject& model_object, int obj_idx, std::vector<int> instance_idxs);
@@ -665,14 +576,10 @@ public:
 
     void reload_scene(bool refresh_immediately, bool force_full_scene_refresh = false);
 
-#if ENABLE_GCODE_VIEWER
     void load_gcode_preview(const GCodeProcessor::Result& gcode_result);
     void refresh_gcode_preview(const GCodeProcessor::Result& gcode_result, const std::vector<std::string>& str_tool_colors);
     void set_gcode_view_preview_type(GCodeViewer::EViewType type) { return m_gcode_viewer.set_view_type(type); }
     GCodeViewer::EViewType get_gcode_view_preview_type() const { return m_gcode_viewer.get_view_type(); }
-#else
-    void load_gcode_preview(const GCodePreviewData& preview_data, const std::vector<std::string>& str_tool_colors);
-#endif // ENABLE_GCODE_VIEWER
     void load_sla_preview();
     void load_preview(const std::vector<std::string>& str_tool_colors, const std::vector<CustomGCode::Item>& color_print_values);
     void bind_event_handlers();
@@ -691,10 +598,6 @@ public:
     Size get_canvas_size() const;
     Vec2d get_local_mouse_position() const;
 
-#if !ENABLE_GCODE_VIEWER
-    void reset_legend_texture();
-#endif // !ENABLE_GCODE_VIEWER
-
     void set_tooltip(const std::string& tooltip) const;
 
     // the following methods add a snapshot to the undo/redo stack, unless the given string is empty
@@ -792,9 +695,7 @@ private:
     void _render_background() const;
     void _render_bed(bool bottom, bool show_axes) const;
     void _render_objects() const;
-#if ENABLE_GCODE_VIEWER
     void _render_gcode() const;
-#endif // ENABLE_GCODE_VIEWER
     void _render_selection() const;
 #if ENABLE_RENDER_SELECTION_CENTER
     void _render_selection_center() const;
@@ -802,9 +703,6 @@ private:
     void _check_and_update_toolbar_icon_scale() const;
     void _render_overlays() const;
     void _render_warning_texture() const;
-#if !ENABLE_GCODE_VIEWER
-    void _render_legend_texture() const;
-#endif // !ENABLE_GCODE_VIEWER
     void _render_volumes_for_picking() const;
     void _render_current_gizmo() const;
     void _render_gizmos_overlay() const;
@@ -852,29 +750,12 @@ private:
     // Create 3D thick extrusion lines for wipe tower extrusions
     void _load_wipe_tower_toolpaths(const std::vector<std::string>& str_tool_colors);
 
-#if !ENABLE_GCODE_VIEWER
-    // generates gcode extrusion paths geometry
-    void _load_gcode_extrusion_paths(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors);
-    // generates gcode travel paths geometry
-    void _load_gcode_travel_paths(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors);
-    // generates objects and wipe tower geometry
-    void _load_fff_shells();
-#endif // !ENABLE_GCODE_VIEWER
     // Load SLA objects and support structures for objects, for which the slaposSliceSupports step has been finished.
 	void _load_sla_shells();
-#if !ENABLE_GCODE_VIEWER
-    // sets gcode geometry visibility according to user selection
-    void _update_gcode_volumes_visibility(const GCodePreviewData& preview_data);
-#endif // !ENABLE_GCODE_VIEWER
     void _update_toolpath_volumes_outside_state();
     void _update_sla_shells_outside_state();
     void _show_warning_texture_if_needed(WarningTexture::Warning warning);
 
-#if !ENABLE_GCODE_VIEWER
-    // generates the legend texture in dependence of the current shown view type
-    void _generate_legend_texture(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors);
-#endif // !ENABLE_GCODE_VIEWER
-
     // generates a warning texture containing the given message
     void _set_warning_texture(WarningTexture::Warning warning, bool state);
 
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index 637231aae..8091792e0 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -10,9 +10,7 @@
 #include "libslic3r/PresetBundle.hpp"
 #include "DoubleSlider.hpp"
 #include "Plater.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "MainFrame.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 #include <wx/notebook.h>
 #include <wx/glcanvas.h>
@@ -168,62 +166,33 @@ void View3D::render()
         m_canvas->set_as_dirty();
 }
 
-#if ENABLE_GCODE_VIEWER
 Preview::Preview(
     wxWindow* parent, Model* model, DynamicPrintConfig* config,
     BackgroundSlicingProcess* process, GCodeProcessor::Result* gcode_result, std::function<void()> schedule_background_process_func)
-#else
-Preview::Preview(
-    wxWindow* parent, Model* model, DynamicPrintConfig* config,
-    BackgroundSlicingProcess* process, GCodePreviewData* gcode_preview_data, std::function<void()> schedule_background_process_func)
-#endif // ENABLE_GCODE_VIEWER
     : m_canvas_widget(nullptr)
     , m_canvas(nullptr)
-#if ENABLE_GCODE_VIEWER
     , m_left_sizer(nullptr)
     , m_layers_slider_sizer(nullptr)
     , m_bottom_toolbar_panel(nullptr)
-#else
-    , m_double_slider_sizer(nullptr)
-#endif // ENABLE_GCODE_VIEWER
     , m_label_view_type(nullptr)
     , m_choice_view_type(nullptr)
     , m_label_show(nullptr)
     , m_combochecklist_features(nullptr)
-#if ENABLE_GCODE_VIEWER
     , m_combochecklist_features_pos(0)
     , m_combochecklist_options(nullptr)
-#else
-    , m_checkbox_travel(nullptr)
-    , m_checkbox_retractions(nullptr)
-    , m_checkbox_unretractions(nullptr)
-    , m_checkbox_shells(nullptr)
-    , m_checkbox_legend(nullptr)
-#endif // ENABLE_GCODE_VIEWER
     , m_config(config)
     , m_process(process)
-#if ENABLE_GCODE_VIEWER
     , m_gcode_result(gcode_result)
-#else
-    , m_gcode_preview_data(gcode_preview_data)
-#endif // ENABLE_GCODE_VIEWER
     , m_number_extruders(1)
     , m_preferred_color_mode("feature")
     , m_loaded(false)
-#if !ENABLE_GCODE_VIEWER
-    , m_enabled(false)
-#endif // !ENABLE_GCODE_VIEWER
     , m_schedule_background_process(schedule_background_process_func)
 #ifdef __linux__
     , m_volumes_cleanup_required(false)
 #endif // __linux__
 {
-    if (init(parent, model)) {
-#if !ENABLE_GCODE_VIEWER
-        show_hide_ui_elements("none");
-#endif // !ENABLE_GCODE_VIEWER
+    if (init(parent, model))
         load_print();
-    }
 }
 
 bool Preview::init(wxWindow* parent, Model* model)
@@ -231,14 +200,12 @@ bool Preview::init(wxWindow* parent, Model* model)
     if (!Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 /* disable wxTAB_TRAVERSAL */))
         return false;
 
-#if ENABLE_GCODE_VIEWER
     // to match the background of the sliders
 #ifdef _WIN32 
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
 #else
     SetBackgroundColour(GetParent()->GetBackgroundColour());
 #endif // _WIN32 
-#endif // ENABLE_GCODE_VIEWER
 
     m_canvas_widget = OpenGLManager::create_wxglcanvas(*this);
     if (m_canvas_widget == nullptr)
@@ -253,20 +220,11 @@ bool Preview::init(wxWindow* parent, Model* model)
     m_canvas->enable_legend_texture(true);
     m_canvas->enable_dynamic_background(true);
 
-#if ENABLE_GCODE_VIEWER
     m_layers_slider_sizer = create_layers_slider_sizer();
 
     m_bottom_toolbar_panel = new wxPanel(this);
     m_label_view_type = new wxStaticText(m_bottom_toolbar_panel, wxID_ANY, _L("View"));
     m_choice_view_type = new wxChoice(m_bottom_toolbar_panel, wxID_ANY);
-#else
-    m_double_slider_sizer = new wxBoxSizer(wxHORIZONTAL);
-    create_double_slider();
-
-    m_label_view_type = new wxStaticText(this, wxID_ANY, _L("View"));
-
-    m_choice_view_type = new wxChoice(this, wxID_ANY);
-#endif // ENABLE_GCODE_VIEWER
     m_choice_view_type->Append(_L("Feature type"));
     m_choice_view_type->Append(_L("Height"));
     m_choice_view_type->Append(_L("Width"));
@@ -277,22 +235,12 @@ bool Preview::init(wxWindow* parent, Model* model)
     m_choice_view_type->Append(_L("Color Print"));
     m_choice_view_type->SetSelection(0);
 
-#if ENABLE_GCODE_VIEWER
     m_label_show = new wxStaticText(m_bottom_toolbar_panel, wxID_ANY, _L("Show"));
-#else
-    m_label_show = new wxStaticText(this, wxID_ANY, _L("Show"));
-#endif // ENABLE_GCODE_VIEWER
 
     m_combochecklist_features = new wxComboCtrl();
-#if ENABLE_GCODE_VIEWER
     m_combochecklist_features->Create(m_bottom_toolbar_panel, wxID_ANY, _L("Feature types"), wxDefaultPosition, wxDefaultSize, wxCB_READONLY);
-#else
-    m_combochecklist_features->Create(this, wxID_ANY, _L("Feature types"), wxDefaultPosition, wxDefaultSize, wxCB_READONLY);
-#endif // ENABLE_GCODE_VIEWER
     std::string feature_items = GUI::into_u8(
-#if ENABLE_GCODE_VIEWER
         _L("Unknown") + "|1|" +
-#endif // ENABLE_GCODE_VIEWER
         _L("Perimeter") + "|1|" +
         _L("External perimeter") + "|1|" +
         _L("Overhang perimeter") + "|1|" +
@@ -310,7 +258,6 @@ bool Preview::init(wxWindow* parent, Model* model)
     );
     Slic3r::GUI::create_combochecklist(m_combochecklist_features, GUI::into_u8(_L("Feature types")), feature_items);
 
-#if ENABLE_GCODE_VIEWER
     m_combochecklist_options = new wxComboCtrl();
     m_combochecklist_options->Create(m_bottom_toolbar_panel, wxID_ANY, _L("Options"), wxDefaultPosition, wxDefaultSize, wxCB_READONLY);
     std::string options_items = GUI::into_u8(
@@ -324,18 +271,9 @@ bool Preview::init(wxWindow* parent, Model* model)
         get_option_type_string(OptionType::Shells) + "|0|" +
         get_option_type_string(OptionType::ToolMarker) + "|1|" +
         get_option_type_string(OptionType::Legend) + "|1"
-);
+    );
     Slic3r::GUI::create_combochecklist(m_combochecklist_options, GUI::into_u8(_L("Options")), options_items);
-#else
-    m_checkbox_travel = new wxCheckBox(this, wxID_ANY, _L("Travel"));
-    m_checkbox_retractions = new wxCheckBox(this, wxID_ANY, _L("Retractions"));
-    m_checkbox_unretractions = new wxCheckBox(this, wxID_ANY, _L("Deretractions"));
-    m_checkbox_shells = new wxCheckBox(this, wxID_ANY, _L("Shells"));
-    m_checkbox_legend = new wxCheckBox(this, wxID_ANY, _L("Legend"));
-    m_checkbox_legend->SetValue(true);
-#endif // ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
     m_left_sizer = new wxBoxSizer(wxVERTICAL);
     m_left_sizer->Add(m_canvas_widget, 1, wxALL | wxEXPAND, 0);
 
@@ -366,32 +304,6 @@ bool Preview::init(wxWindow* parent, Model* model)
     wxBoxSizer* main_sizer = new wxBoxSizer(wxHORIZONTAL);
     main_sizer->Add(m_left_sizer, 1, wxALL | wxEXPAND, 0);
     main_sizer->Add(right_sizer, 0, wxALL | wxEXPAND, 0);
-#else
-    wxBoxSizer* top_sizer = new wxBoxSizer(wxHORIZONTAL);
-    top_sizer->Add(m_canvas_widget, 1, wxALL | wxEXPAND, 0);
-    top_sizer->Add(m_double_slider_sizer, 0, wxEXPAND, 0);
-
-    wxBoxSizer* bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
-    bottom_sizer->Add(m_label_view_type, 0, wxALIGN_CENTER_VERTICAL, 5);
-    bottom_sizer->Add(m_choice_view_type, 0, wxEXPAND | wxALL, 5);
-    bottom_sizer->AddSpacer(10);
-    bottom_sizer->Add(m_label_show, 0, wxALIGN_CENTER_VERTICAL, 5);
-    bottom_sizer->Add(m_combochecklist_features, 0, wxEXPAND | wxALL, 5);
-    bottom_sizer->AddSpacer(20);
-    bottom_sizer->Add(m_checkbox_travel, 0, wxEXPAND | wxALL, 5);
-    bottom_sizer->AddSpacer(10);
-    bottom_sizer->Add(m_checkbox_retractions, 0, wxEXPAND | wxALL, 5);
-    bottom_sizer->AddSpacer(10);
-    bottom_sizer->Add(m_checkbox_unretractions, 0, wxEXPAND | wxALL, 5);
-    bottom_sizer->AddSpacer(10);
-    bottom_sizer->Add(m_checkbox_shells, 0, wxEXPAND | wxALL, 5);
-    bottom_sizer->AddSpacer(20);
-    bottom_sizer->Add(m_checkbox_legend, 0, wxEXPAND | wxALL, 5);
-
-    wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL);
-    main_sizer->Add(top_sizer, 1, wxALL | wxEXPAND, 0);
-    main_sizer->Add(bottom_sizer, 0, wxALL | wxEXPAND, 0);
-#endif // ENABLE_GCODE_VIEWER
 
     SetSizer(main_sizer);
     SetMinSize(GetSize());
@@ -399,26 +311,6 @@ bool Preview::init(wxWindow* parent, Model* model)
 
     bind_event_handlers();
     
-#if !ENABLE_GCODE_VIEWER
-    // sets colors for gcode preview extrusion roles
-    std::vector<std::string> extrusion_roles_colors = {
-        "Perimeter", "FFFF66",
-        "External perimeter", "FFA500",
-        "Overhang perimeter", "0000FF",
-        "Internal infill", "B1302A",
-        "Solid infill", "D732D7",
-        "Top solid infill", "FF1A1A",
-        "Bridge infill", "9999FF",
-        "Gap fill", "FFFFFF",
-        "Skirt", "845321",
-        "Support material", "00FF00",
-        "Support material interface", "008000",
-        "Wipe tower", "B3E3AB",
-        "Custom", "28CC94"
-    };
-    m_gcode_preview_data->set_extrusion_paths_colors(extrusion_roles_colors);
-#endif // !ENABLE_GCODE_VIEWER
-
     return true;
 }
 
@@ -441,31 +333,18 @@ void Preview::set_as_dirty()
 
 void Preview::set_number_extruders(unsigned int number_extruders)
 {
-    if (m_number_extruders != number_extruders)
-    {
+    if (m_number_extruders != number_extruders) {
         m_number_extruders = number_extruders;
         int tool_idx = m_choice_view_type->FindString(_(L("Tool")));
         int type = (number_extruders > 1) ? tool_idx /* color by a tool number */  : 0; // color by a feature type
         m_choice_view_type->SetSelection(type);
-#if ENABLE_GCODE_VIEWER
-        if ((0 <= type) && (type < static_cast<int>(GCodeViewer::EViewType::Count)))
+        if (0 <= type && (type < static_cast<int>(GCodeViewer::EViewType::Count)))
             m_canvas->set_gcode_view_preview_type(static_cast<GCodeViewer::EViewType>(type));
-#else
-        if ((0 <= type) && (type < (int)GCodePreviewData::Extrusion::Num_View_Types))
-            m_gcode_preview_data->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type;
-#endif // ENABLE_GCODE_VIEWER
 
         m_preferred_color_mode = (type == tool_idx) ? "tool_or_feature" : "feature";
     }
 }
 
-#if !ENABLE_GCODE_VIEWER
-void Preview::set_enabled(bool enabled)
-{
-    m_enabled = enabled;
-}
-#endif // !ENABLE_GCODE_VIEWER
-
 void Preview::bed_shape_changed()
 {
     if (m_canvas != nullptr)
@@ -491,9 +370,7 @@ void Preview::load_print(bool keep_z_range)
     else if (tech == ptSLA)
         load_print_as_sla();
 
-#if ENABLE_GCODE_VIEWER
     update_bottom_toolbar();
-#endif // ENABLE_GCODE_VIEWER
     Layout();
 }
 
@@ -515,9 +392,6 @@ void Preview::reload_print(bool keep_volumes)
         !keep_volumes)
     {
         m_canvas->reset_volumes();
-#if !ENABLE_GCODE_VIEWER
-        m_canvas->reset_legend_texture();
-#endif // !ENABLE_GCODE_VIEWER
         m_loaded = false;
 #ifdef __linux__
         m_volumes_cleanup_required = false;
@@ -540,12 +414,8 @@ void Preview::refresh_print()
 void Preview::msw_rescale()
 {
     // rescale slider
-#if ENABLE_GCODE_VIEWER
     if (m_layers_slider != nullptr) m_layers_slider->msw_rescale();
     if (m_moves_slider != nullptr) m_moves_slider->msw_rescale();
-#else
-    if (m_slider) m_slider->msw_rescale();
-#endif // ENABLE_GCODE_VIEWER
 
     // rescale warning legend on the canvas
     get_canvas3d()->msw_rescale();
@@ -556,55 +426,26 @@ void Preview::msw_rescale()
 
 void Preview::jump_layers_slider(wxKeyEvent& evt)
 {
-#if ENABLE_GCODE_VIEWER
     if (m_layers_slider) m_layers_slider->OnChar(evt);
-#else
-    if (m_slider)
-        m_slider->OnKeyDown(evt);
-#endif // ENABLE_GCODE_VIEWER
 }
 
-#if ENABLE_GCODE_VIEWER
 void Preview::move_layers_slider(wxKeyEvent& evt)
 {
     if (m_layers_slider != nullptr) m_layers_slider->OnKeyDown(evt);
 }
-#else
-void Preview::move_double_slider(wxKeyEvent& evt)
-{
-    if (m_slider)
-        m_slider->OnKeyDown(evt);
-}
-#endif // ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
 void Preview::edit_layers_slider(wxKeyEvent& evt)
 {
     if (m_layers_slider != nullptr) m_layers_slider->OnChar(evt);
 }
-#else
-void Preview::edit_double_slider(wxKeyEvent& evt)
-{
-    if (m_slider)
-        m_slider->OnChar(evt);
-}
-#endif // ENABLE_GCODE_VIEWER
 
 void Preview::bind_event_handlers()
 {
     this->Bind(wxEVT_SIZE, &Preview::on_size, this);
     m_choice_view_type->Bind(wxEVT_CHOICE, &Preview::on_choice_view_type, this);
     m_combochecklist_features->Bind(wxEVT_CHECKLISTBOX, &Preview::on_combochecklist_features, this);
-#if ENABLE_GCODE_VIEWER
     m_combochecklist_options->Bind(wxEVT_CHECKLISTBOX, &Preview::on_combochecklist_options, this);
     m_moves_slider->Bind(wxEVT_SCROLL_CHANGED, &Preview::on_moves_slider_scroll_changed, this);
-#else
-    m_checkbox_travel->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_travel, this);
-    m_checkbox_retractions->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_retractions, this);
-    m_checkbox_unretractions->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_unretractions, this);
-    m_checkbox_shells->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_shells, this);
-    m_checkbox_legend->Bind(wxEVT_CHECKBOX, &Preview::on_checkbox_legend, this);
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void Preview::unbind_event_handlers()
@@ -612,76 +453,15 @@ void Preview::unbind_event_handlers()
     this->Unbind(wxEVT_SIZE, &Preview::on_size, this);
     m_choice_view_type->Unbind(wxEVT_CHOICE, &Preview::on_choice_view_type, this);
     m_combochecklist_features->Unbind(wxEVT_CHECKLISTBOX, &Preview::on_combochecklist_features, this);
-#if ENABLE_GCODE_VIEWER
     m_combochecklist_options->Unbind(wxEVT_CHECKLISTBOX, &Preview::on_combochecklist_options, this);
     m_moves_slider->Unbind(wxEVT_SCROLL_CHANGED, &Preview::on_moves_slider_scroll_changed, this);
-#else
-    m_checkbox_travel->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_travel, this);
-    m_checkbox_retractions->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_retractions, this);
-    m_checkbox_unretractions->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_unretractions, this);
-    m_checkbox_shells->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_shells, this);
-    m_checkbox_legend->Unbind(wxEVT_CHECKBOX, &Preview::on_checkbox_legend, this);
-#endif // ENABLE_GCODE_VIEWER
 }
 
-#if !ENABLE_GCODE_VIEWER
-void Preview::show_hide_ui_elements(const std::string& what)
-{
-    bool enable = (what == "full");
-    m_label_show->Enable(enable);
-    m_combochecklist_features->Enable(enable);
-    m_checkbox_travel->Enable(enable);
-    m_checkbox_retractions->Enable(enable);
-    m_checkbox_unretractions->Enable(enable);
-    m_checkbox_shells->Enable(enable);
-    m_checkbox_legend->Enable(enable);
-
-    enable = (what != "none");
-    m_label_view_type->Enable(enable);
-    m_choice_view_type->Enable(enable);
-
-    bool visible = (what != "none");
-    m_label_show->Show(visible);
-    m_combochecklist_features->Show(visible);
-    m_checkbox_travel->Show(visible);
-    m_checkbox_retractions->Show(visible);
-    m_checkbox_unretractions->Show(visible);
-    m_checkbox_shells->Show(visible);
-    m_checkbox_legend->Show(visible);
-    m_label_view_type->Show(visible);
-    m_choice_view_type->Show(visible);
-}
-#endif // !ENABLE_GCODE_VIEWER
-
-#if ENABLE_GCODE_VIEWER
 void Preview::hide_layers_slider()
 {
     m_layers_slider_sizer->Hide((size_t)0);
     Layout();
 }
-#else
-void Preview::reset_sliders(bool reset_all)
-{
-    m_enabled = false;
-    //    reset_double_slider();
-    if (reset_all)
-        m_double_slider_sizer->Hide((size_t)0);
-    else
-        m_double_slider_sizer->GetItem(size_t(0))->GetSizer()->Hide(1);
-}
-#endif // ENABLE_GCODE_VIEWER
-
-#if !ENABLE_GCODE_VIEWER
-void Preview::update_sliders(const std::vector<double>& layers_z, bool keep_z_range)
-{
-    m_enabled = true;
-    update_double_slider(layers_z, keep_z_range);
-
-    m_double_slider_sizer->Show((size_t)0);
-
-    Layout();
-}
-#endif // !ENABLE_GCODE_VIEWER
 
 void Preview::on_size(wxSizeEvent& evt)
 {
@@ -693,31 +473,19 @@ void Preview::on_choice_view_type(wxCommandEvent& evt)
 {
     m_preferred_color_mode = (m_choice_view_type->GetStringSelection() == L("Tool")) ? "tool" : "feature";
     int selection = m_choice_view_type->GetCurrentSelection();
-#if ENABLE_GCODE_VIEWER
     if (0 <= selection && selection < static_cast<int>(GCodeViewer::EViewType::Count))
         m_canvas->set_toolpath_view_type(static_cast<GCodeViewer::EViewType>(selection));
 
     refresh_print();
-#else
-    if ((0 <= selection) && (selection < (int)GCodePreviewData::Extrusion::Num_View_Types))
-        m_gcode_preview_data->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)selection;
-
-    reload_print();
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void Preview::on_combochecklist_features(wxCommandEvent& evt)
 {
     unsigned int flags = Slic3r::GUI::combochecklist_get_flags(m_combochecklist_features);
-#if ENABLE_GCODE_VIEWER
     m_canvas->set_toolpath_role_visibility_flags(flags);
-#else
-    m_gcode_preview_data->extrusion.role_flags = flags;
-#endif // ENABLE_GCODE_VIEWER
     refresh_print();
 }
 
-#if ENABLE_GCODE_VIEWER
 void Preview::on_combochecklist_options(wxCommandEvent& evt)
 {
     auto xored = [](unsigned int flags1, unsigned int flags2, unsigned int flag) {
@@ -742,39 +510,6 @@ void Preview::on_combochecklist_options(wxCommandEvent& evt)
     else
         m_canvas->set_as_dirty();
 }
-#else
-void Preview::on_checkbox_travel(wxCommandEvent& evt)
-{
-    m_gcode_preview_data->travel.is_visible = m_checkbox_travel->IsChecked();
-    m_gcode_preview_data->ranges.feedrate.set_mode(GCodePreviewData::FeedrateKind::TRAVEL, m_gcode_preview_data->travel.is_visible);
-    // Rather than refresh, reload print so that speed color ranges get recomputed (affected by travel visibility)
-    reload_print();
-}
-
-void Preview::on_checkbox_retractions(wxCommandEvent& evt)
-{
-    m_gcode_preview_data->retraction.is_visible = m_checkbox_retractions->IsChecked();
-    refresh_print();
-}
-
-void Preview::on_checkbox_unretractions(wxCommandEvent& evt)
-{
-    m_gcode_preview_data->unretraction.is_visible = m_checkbox_unretractions->IsChecked();
-    refresh_print();
-}
-
-void Preview::on_checkbox_shells(wxCommandEvent& evt)
-{
-    m_gcode_preview_data->shell.is_visible = m_checkbox_shells->IsChecked();
-    refresh_print();
-}
-
-void Preview::on_checkbox_legend(wxCommandEvent& evt)
-{
-    m_canvas->enable_legend_texture(m_checkbox_legend->IsChecked());
-    m_canvas_widget->Refresh();
-}
-#endif // ENABLE_GCODE_VIEWER
 
 void Preview::update_view_type(bool keep_volumes)
 {
@@ -790,49 +525,34 @@ void Preview::update_view_type(bool keep_volumes)
     int type = m_choice_view_type->FindString(choice);
     if (m_choice_view_type->GetSelection() != type) {
         m_choice_view_type->SetSelection(type);
-#if ENABLE_GCODE_VIEWER
-        if ((0 <= type) && (type < static_cast<int>(GCodeViewer::EViewType::Count)))
+        if (0 <= type && type < static_cast<int>(GCodeViewer::EViewType::Count))
             m_canvas->set_gcode_view_preview_type(static_cast<GCodeViewer::EViewType>(type));
-#else
-        if (0 <= type && type < (int)GCodePreviewData::Extrusion::Num_View_Types)
-            m_gcode_preview_data->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type;
-#endif // ENABLE_GCODE_VIEWER
         m_preferred_color_mode = "feature";
     }
 
-#if ENABLE_GCODE_VIEWER
     reload_print(keep_volumes);
-#else
-    reload_print();
-#endif // ENABLE_GCODE_VIEWER
 }
 
-#if ENABLE_GCODE_VIEWER
 void Preview::update_bottom_toolbar()
 {
     combochecklist_set_flags(m_combochecklist_features, m_canvas->get_toolpath_role_visibility_flags());
     combochecklist_set_flags(m_combochecklist_options, m_canvas->get_gcode_options_visibility_flags());
 
     // updates visibility of features combobox
-    if (m_bottom_toolbar_panel->IsShown())
-    {
+    if (m_bottom_toolbar_panel->IsShown()) {
         wxSizer* sizer = m_bottom_toolbar_panel->GetSizer();
         bool show = !m_canvas->is_gcode_legend_enabled() || m_canvas->get_gcode_view_type() != GCodeViewer::EViewType::FeatureType;
 
-        if (show)
-        {
-            if (sizer->GetItem(m_combochecklist_features) == nullptr)
-            {
+        if (show) {
+            if (sizer->GetItem(m_combochecklist_features) == nullptr) {
                 sizer->Insert(m_combochecklist_features_pos, m_combochecklist_features, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 5);
                 sizer->Show(m_combochecklist_features);
                 sizer->Layout();
                 Refresh();
             }
         }
-        else
-        {
-            if (sizer->GetItem(m_combochecklist_features) != nullptr)
-            {
+        else {
+            if (sizer->GetItem(m_combochecklist_features) != nullptr) {
                 sizer->Hide(m_combochecklist_features);
                 sizer->Detach(m_combochecklist_features);
                 sizer->Layout();
@@ -841,9 +561,7 @@ void Preview::update_bottom_toolbar()
         }
     }
 }
-#endif // ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
 wxBoxSizer* Preview::create_layers_slider_sizer()
 {
     wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
@@ -875,37 +593,6 @@ wxBoxSizer* Preview::create_layers_slider_sizer()
 
     return sizer;
 }
-#else
-void Preview::create_double_slider()
-{
-    m_slider = new DoubleSlider::Control(this, wxID_ANY, 0, 0, 0, 100);
-
-    bool sla_print_technology = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA;
-    bool sequential_print = wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_bool("complete_objects");
-    m_slider->SetDrawMode(sla_print_technology, sequential_print);
-
-    m_double_slider_sizer->Add(m_slider, 0, wxEXPAND, 0);
-
-
-    // sizer, m_canvas_widget
-    m_canvas_widget->Bind(wxEVT_KEY_DOWN, &Preview::update_double_slider_from_canvas, this);
-    m_canvas_widget->Bind(wxEVT_KEY_UP, [this](wxKeyEvent& event) {
-        if (event.GetKeyCode() == WXK_SHIFT)
-            m_slider->UseDefaultColors(true);
-        event.Skip();
-        });
-
-    m_slider->Bind(wxEVT_SCROLL_CHANGED, &Preview::on_sliders_scroll_changed, this);
-
-    Bind(DoubleSlider::wxCUSTOMEVT_TICKSCHANGED, [this](wxEvent&) {
-        Model& model = wxGetApp().plater()->model();
-        model.custom_gcode_per_print_z = m_slider->GetTicksValues();
-        m_schedule_background_process();
-
-        update_view_type(false);
-    });
-}
-#endif // ENABLE_GCODE_VIEWER
 
 // Find an index of a value in a sorted vector, which is in <z-eps, z+eps>.
 // Returns -1 if there is no such member.
@@ -934,12 +621,7 @@ static int find_close_layer_idx(const std::vector<double>& zs, double &z, double
     return -1;
 }
 
-#if ENABLE_GCODE_VIEWER
 void Preview::check_layers_slider_values(std::vector<CustomGCode::Item>& ticks_from_model, const std::vector<double>& layers_z)
-#else
-void Preview::check_slider_values(std::vector<CustomGCode::Item>& ticks_from_model,
-                                  const std::vector<double>& layers_z)
-#endif // ENABLE_GCODE_VIEWER
 {
     // All ticks that would end up outside the slider range should be erased.
     // TODO: this should be placed into more appropriate part of code,
@@ -956,7 +638,6 @@ void Preview::check_slider_values(std::vector<CustomGCode::Item>& ticks_from_mod
         m_schedule_background_process();
 }
 
-#if ENABLE_GCODE_VIEWER
 void Preview::update_layers_slider(const std::vector<double>& layers_z, bool keep_z_range)
 {
     // Save the initial slider span.
@@ -1009,64 +690,8 @@ void Preview::update_layers_slider(const std::vector<double>& layers_z, bool kee
     m_layers_slider_sizer->Show((size_t)0);
     Layout();
 }
-#else
-void Preview::update_double_slider(const std::vector<double> & layers_z, bool keep_z_range)
-{
-    // Save the initial slider span.
-    double z_low        = m_slider->GetLowerValueD();
-    double z_high       = m_slider->GetHigherValueD();
-    bool   was_empty    = m_slider->GetMaxValue() == 0;
 
-    bool force_sliders_full_range = was_empty;
-    if (!keep_z_range)
-    {
-        bool span_changed = layers_z.empty() || std::abs(layers_z.back() - m_slider->GetMaxValueD()) > DoubleSlider::epsilon()/*1e-6*/;
-        force_sliders_full_range |= span_changed;
-    }
-    bool   snap_to_min = force_sliders_full_range || m_slider->is_lower_at_min();
-    bool   snap_to_max = force_sliders_full_range || m_slider->is_higher_at_max();
-
-    // Detect and set manipulation mode for double slider
-    update_double_slider_mode();
-
-    CustomGCode::Info& ticks_info_from_model = wxGetApp().plater()->model().custom_gcode_per_print_z;
-    check_slider_values(ticks_info_from_model.gcodes, layers_z);
-
-    m_slider->SetSliderValues(layers_z);
-    assert(m_slider->GetMinValue() == 0);
-    m_slider->SetMaxValue(layers_z.empty() ? 0 : layers_z.size() - 1);
-
-    int idx_low = 0;
-    int idx_high = m_slider->GetMaxValue();
-    if (!layers_z.empty()) {
-        if (!snap_to_min) {
-            int idx_new = find_close_layer_idx(layers_z, z_low, DoubleSlider::epsilon()/*1e-6*/);
-            if (idx_new != -1)
-                idx_low = idx_new;
-        }
-        if (!snap_to_max) {
-            int idx_new = find_close_layer_idx(layers_z, z_high, DoubleSlider::epsilon()/*1e-6*/);
-            if (idx_new != -1)
-                idx_high = idx_new;
-        }
-    }
-    m_slider->SetSelectionSpan(idx_low, idx_high);
-
-    m_slider->SetTicksValues(ticks_info_from_model);
-
-    bool sla_print_technology = wxGetApp().plater()->printer_technology() == ptSLA;
-    bool sequential_print = wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_bool("complete_objects");
-    m_slider->SetDrawMode(sla_print_technology, sequential_print);
-
-    m_slider->SetExtruderColors(wxGetApp().plater()->get_extruder_colors_from_plater_config());
-}
-#endif // ENABLE_GCODE_VIEWER
-
-#if ENABLE_GCODE_VIEWER
 void Preview::update_layers_slider_mode()
-#else
-void Preview::update_double_slider_mode()
-#endif // ENABLE_GCODE_VIEWER
 {
     //    true  -> single-extruder printer profile OR 
     //             multi-extruder printer profile , but whole model is printed by only one extruder
@@ -1115,28 +740,15 @@ void Preview::update_double_slider_mode()
         }
     }
 
-#if ENABLE_GCODE_VIEWER
     m_layers_slider->SetModeAndOnlyExtruder(one_extruder_printed_model, only_extruder);
-#else
-    m_slider->SetModeAndOnlyExtruder(one_extruder_printed_model, only_extruder);
-#endif // ENABLE_GCODE_VIEWER
 }
 
-#if ENABLE_GCODE_VIEWER
 void Preview::reset_layers_slider()
 {
     m_layers_slider->SetHigherValue(0);
     m_layers_slider->SetLowerValue(0);
 }
-#else
-void Preview::reset_double_slider()
-{
-    m_slider->SetHigherValue(0);
-    m_slider->SetLowerValue(0);
-}
-#endif // ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
 void Preview::update_layers_slider_from_canvas(wxKeyEvent& event)
 {
     if (event.HasModifiers()) {
@@ -1185,42 +797,12 @@ void Preview::enable_moves_slider(bool enable)
         m_moves_slider->Refresh();
     }
 }
-#else
-void Preview::update_double_slider_from_canvas(wxKeyEvent & event)
-{
-    if (event.HasModifiers()) {
-        event.Skip();
-        return;
-    }
-
-    const auto key = event.GetKeyCode();
-
-    if (key == 'U' || key == 'D') {
-        const int new_pos = key == 'U' ? m_slider->GetHigherValue() + 1 : m_slider->GetHigherValue() - 1;
-        m_slider->SetHigherValue(new_pos);
-		if (event.ShiftDown() || m_slider->is_one_layer()) m_slider->SetLowerValue(m_slider->GetHigherValue());
-    }
-    else if (key == 'L') {
-        m_checkbox_legend->SetValue(!m_checkbox_legend->GetValue());
-        auto evt = wxCommandEvent();
-        on_checkbox_legend(evt);
-    }
-    else if (key == 'S')
-        m_slider->ChangeOneLayerLock();
-    else if (key == WXK_SHIFT)
-        m_slider->UseDefaultColors(false);
-    else
-        event.Skip();
-}
-#endif // ENABLE_GCODE_VIEWER
 
 void Preview::load_print_as_fff(bool keep_z_range)
 {
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().mainframe == nullptr || wxGetApp().is_recreating_gui())
         // avoid processing while mainframe is being constructed
         return;
-#endif // ENABLE_GCODE_VIEWER
 
     if (m_loaded || m_process->current_printer_technology() != ptFFF)
         return;
@@ -1245,17 +827,11 @@ void Preview::load_print_as_fff(bool keep_z_range)
             }
     }
 
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor() && !has_layers) {
         hide_layers_slider();
         m_left_sizer->Hide(m_bottom_toolbar_panel);
         m_left_sizer->Layout();
         Refresh();
-#else
-    if (! has_layers) {
-        reset_sliders(true);
-        m_canvas->reset_legend_texture();
-#endif // ENABLE_GCODE_VIEWER
         m_canvas_widget->Refresh();
         return;
     }
@@ -1267,100 +843,58 @@ void Preview::load_print_as_fff(bool keep_z_range)
         int tool_idx = m_choice_view_type->FindString(_L("Tool"));
         int type = (number_extruders > 1) ? tool_idx /* color by a tool number */ : 0; // color by a feature type
         m_choice_view_type->SetSelection(type);
-#if ENABLE_GCODE_VIEWER
         if (0 <= type && type < static_cast<int>(GCodeViewer::EViewType::Count))
             m_canvas->set_gcode_view_preview_type(static_cast<GCodeViewer::EViewType>(type));
-#else
-        if ((0 <= type) && (type < (int)GCodePreviewData::Extrusion::Num_View_Types))
-            m_gcode_preview_data->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type;
-#endif // ENABLE_GCODE_VIEWER
         // If the->SetSelection changed the following line, revert it to "decide yourself".
         m_preferred_color_mode = "tool_or_feature";
     }
 
-#if ENABLE_GCODE_VIEWER
     GCodeViewer::EViewType gcode_view_type = m_canvas->get_gcode_view_preview_type();
     bool gcode_preview_data_valid = !m_gcode_result->moves.empty();
-#else
-    bool gcode_preview_data_valid = print->is_step_done(psGCodeExport) && ! m_gcode_preview_data->empty();
-#endif // ENABLE_GCODE_VIEWER
     // Collect colors per extruder.
     std::vector<std::string> colors;
     std::vector<CustomGCode::Item> color_print_values = {};
     // set color print values, if it si selected "ColorPrint" view type
-#if ENABLE_GCODE_VIEWER
     if (gcode_view_type == GCodeViewer::EViewType::ColorPrint) {
         colors = wxGetApp().plater()->get_colors_for_color_print(m_gcode_result);
-#else
-    if (m_gcode_preview_data->extrusion.view_type == GCodePreviewData::Extrusion::ColorPrint) {
-        colors = wxGetApp().plater()->get_colors_for_color_print();
-        colors.push_back("#808080"); // gray color for pause print or custom G-code 
-#endif // ENABLE_GCODE_VIEWER
 
         if (!gcode_preview_data_valid) {
             color_print_values = wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes;
-#if ENABLE_GCODE_VIEWER
             colors.push_back("#808080"); // gray color for pause print or custom G-code 
-#endif // ENABLE_GCODE_VIEWER
         }
     }
-#if ENABLE_GCODE_VIEWER
     else if (gcode_preview_data_valid || gcode_view_type == GCodeViewer::EViewType::Tool) {
         colors = wxGetApp().plater()->get_extruder_colors_from_plater_config(m_gcode_result);
-#else
-    else if (gcode_preview_data_valid || (m_gcode_preview_data->extrusion.view_type == GCodePreviewData::Extrusion::Tool) ) {
-        colors = wxGetApp().plater()->get_extruder_colors_from_plater_config();
-#endif // ENABLE_GCODE_VIEWER
         color_print_values.clear();
     }
 
     if (IsShown()) {
-#if ENABLE_GCODE_VIEWER
         std::vector<double> zs;
-#endif // ENABLE_GCODE_VIEWER
 
         m_canvas->set_selected_extruder(0);
         if (gcode_preview_data_valid) {
             // Load the real G-code preview.
-#if ENABLE_GCODE_VIEWER
             m_canvas->load_gcode_preview(*m_gcode_result);
             m_canvas->refresh_gcode_preview(*m_gcode_result, colors);
             m_left_sizer->Show(m_bottom_toolbar_panel);
             m_left_sizer->Layout();
             Refresh();
             zs = m_canvas->get_gcode_layers_zs();
-#else
-            m_canvas->load_gcode_preview(*m_gcode_preview_data, colors);
-#endif // ENABLE_GCODE_VIEWER
             m_loaded = true;
         } else {
             // Load the initial preview based on slices, not the final G-code.
             m_canvas->load_preview(colors, color_print_values);
-#if ENABLE_GCODE_VIEWER
             m_left_sizer->Hide(m_bottom_toolbar_panel);
             m_left_sizer->Layout();
             Refresh();
             zs = m_canvas->get_volumes_print_zs(true);
-#endif // ENABLE_GCODE_VIEWER
         }
-#if !ENABLE_GCODE_VIEWER
-        show_hide_ui_elements(gcode_preview_data_valid ? "full" : "simple");
-        std::vector<double> zs = m_canvas->get_current_print_zs(true);
-#endif // !ENABLE_GCODE_VIEWER
         if (zs.empty()) {
             // all layers filtered out
-#if ENABLE_GCODE_VIEWER
             hide_layers_slider();
-#else
-            reset_sliders(true);
-#endif // ENABLE_GCODE_VIEWER
             m_canvas_widget->Refresh();
         } else
-#if ENABLE_GCODE_VIEWER
             update_layers_slider(zs, keep_z_range);
-#else
-            update_sliders(zs, keep_z_range);
-#endif // ENABLE_GCODE_VIEWER
     }
 }
 
@@ -1375,8 +909,7 @@ void Preview::load_print_as_sla()
     std::vector<double> zs;
     double initial_layer_height = print->material_config().initial_layer_height.value;
     for (const SLAPrintObject* obj : print->objects())
-        if (obj->is_step_done(slaposSliceSupports) && !obj->get_slice_index().empty())
-        {
+        if (obj->is_step_done(slaposSliceSupports) && !obj->get_slice_index().empty()) {
             auto low_coord = obj->get_slice_index().front().print_level();
             for (auto& rec : obj->get_slice_index())
                 zs.emplace_back(initial_layer_height + (rec.print_level() - low_coord) * SCALING_FACTOR);
@@ -1386,74 +919,43 @@ void Preview::load_print_as_sla()
     m_canvas->reset_clipping_planes_cache();
 
     n_layers = (unsigned int)zs.size();
-    if (n_layers == 0)
-    {
-#if ENABLE_GCODE_VIEWER
+    if (n_layers == 0) {
         hide_layers_slider();
-#else
-        reset_sliders(true);
-#endif // ENABLE_GCODE_VIEWER
         m_canvas_widget->Refresh();
     }
 
-    if (IsShown())
-    {
+    if (IsShown()) {
         m_canvas->load_sla_preview();
-#if ENABLE_GCODE_VIEWER
         m_left_sizer->Hide(m_bottom_toolbar_panel);
         m_left_sizer->Hide(m_bottom_toolbar_panel);
         m_left_sizer->Layout();
         Refresh();
-#else
-        show_hide_ui_elements("none");
-#endif // ENABLE_GCODE_VIEWER
 
         if (n_layers > 0)
-#if ENABLE_GCODE_VIEWER
             update_layers_slider(zs);
-#else
-            update_sliders(zs);
-#endif // ENABLE_GCODE_VIEWER
 
         m_loaded = true;
     }
 }
 
-#if ENABLE_GCODE_VIEWER
 void Preview::on_layers_slider_scroll_changed(wxCommandEvent& event)
-#else
-void Preview::on_sliders_scroll_changed(wxCommandEvent& event)
-#endif // ENABLE_GCODE_VIEWER
 {
     if (IsShown()) {
         PrinterTechnology tech = m_process->current_printer_technology();
         if (tech == ptFFF) {
-#if ENABLE_GCODE_VIEWER
             m_canvas->set_volumes_z_range({ m_layers_slider->GetLowerValueD(), m_layers_slider->GetHigherValueD() });
             m_canvas->set_toolpaths_z_range({ static_cast<unsigned int>(m_layers_slider->GetLowerValue()), static_cast<unsigned int>(m_layers_slider->GetHigherValue()) });
             m_canvas->set_as_dirty();
-#else
-            m_canvas->set_toolpaths_range(m_slider->GetLowerValueD() - 1e-6, m_slider->GetHigherValueD() + 1e-6);
-            m_canvas->render();
-            m_canvas->set_use_clipping_planes(false);
-#endif // ENABLE_GCODE_VIEWER
         }
         else if (tech == ptSLA) {
-#if ENABLE_GCODE_VIEWER
             m_canvas->set_clipping_plane(0, ClippingPlane(Vec3d::UnitZ(), -m_layers_slider->GetLowerValueD()));
             m_canvas->set_clipping_plane(1, ClippingPlane(-Vec3d::UnitZ(), m_layers_slider->GetHigherValueD()));
             m_canvas->set_use_clipping_planes(m_layers_slider->GetHigherValue() != 0);
-#else
-            m_canvas->set_clipping_plane(0, ClippingPlane(Vec3d::UnitZ(), -m_slider->GetLowerValueD()));
-            m_canvas->set_clipping_plane(1, ClippingPlane(-Vec3d::UnitZ(), m_slider->GetHigherValueD()));
-            m_canvas->set_use_clipping_planes(m_slider->GetHigherValue() != 0);
-#endif // ENABLE_GCODE_VIEWER
             m_canvas->render();
         }
     }
 }
 
-#if ENABLE_GCODE_VIEWER
 void Preview::on_moves_slider_scroll_changed(wxCommandEvent& event)
 {
     m_canvas->update_gcode_sequential_view_current(static_cast<unsigned int>(m_moves_slider->GetLowerValueD() - 1.0), static_cast<unsigned int>(m_moves_slider->GetHigherValueD() - 1.0));
@@ -1477,7 +979,6 @@ wxString Preview::get_option_type_string(OptionType type) const
     default:                        { return ""; }
     }
 }
-#endif // ENABLE_GCODE_VIEWER
 
 } // namespace GUI
 } // namespace Slic3r
diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp
index 5ad70a1ac..76fef117e 100644
--- a/src/slic3r/GUI/GUI_Preview.hpp
+++ b/src/slic3r/GUI/GUI_Preview.hpp
@@ -7,9 +7,7 @@
 #include "libslic3r/CustomGCode.hpp"
 
 #include <string>
-#if ENABLE_GCODE_VIEWER
 #include "libslic3r/GCode/GCodeProcessor.hpp"
-#endif // ENABLE_GCODE_VIEWER
 
 class wxNotebook;
 class wxGLCanvas;
@@ -25,9 +23,6 @@ namespace Slic3r {
 class DynamicPrintConfig;
 class Print;
 class BackgroundSlicingProcess;
-#if !ENABLE_GCODE_VIEWER
-class GCodePreviewData;
-#endif // !ENABLE_GCODE_VIEWER
 class Model;
 
 namespace DoubleSlider {
@@ -83,35 +78,19 @@ class Preview : public wxPanel
 {
     wxGLCanvas* m_canvas_widget;
     GLCanvas3D* m_canvas;
-#if ENABLE_GCODE_VIEWER
     wxBoxSizer* m_left_sizer;
     wxBoxSizer* m_layers_slider_sizer;
     wxPanel* m_bottom_toolbar_panel;
-#else
-    wxBoxSizer* m_double_slider_sizer;
-#endif // ENABLE_GCODE_VIEWER
     wxStaticText* m_label_view_type;
     wxChoice* m_choice_view_type;
     wxStaticText* m_label_show;
     wxComboCtrl* m_combochecklist_features;
-#if ENABLE_GCODE_VIEWER
     size_t m_combochecklist_features_pos;
     wxComboCtrl* m_combochecklist_options;
-#else
-    wxCheckBox* m_checkbox_travel;
-    wxCheckBox* m_checkbox_retractions;
-    wxCheckBox* m_checkbox_unretractions;
-    wxCheckBox* m_checkbox_shells;
-    wxCheckBox* m_checkbox_legend;
-#endif // ENABLE_GCODE_VIEWER
 
     DynamicPrintConfig* m_config;
     BackgroundSlicingProcess* m_process;
-#if ENABLE_GCODE_VIEWER
     GCodeProcessor::Result* m_gcode_result;
-#else
-    GCodePreviewData* m_gcode_preview_data;
-#endif // ENABLE_GCODE_VIEWER
 
 #ifdef __linux__
     // We are getting mysterious crashes on Linux in gtk due to OpenGL context activation GH #1874 #1955.
@@ -126,19 +105,11 @@ class Preview : public wxPanel
     std::string m_preferred_color_mode;
 
     bool m_loaded;
-#if !ENABLE_GCODE_VIEWER
-    bool m_enabled;
-#endif // !ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
     DoubleSlider::Control* m_layers_slider{ nullptr };
     DoubleSlider::Control* m_moves_slider{ nullptr };
-#else
-    DoubleSlider::Control*       m_slider {nullptr};
-#endif // ENABLE_GCODE_VIEWER
 
 public:
-#if ENABLE_GCODE_VIEWER
     enum class OptionType : unsigned int
     {
         Travel,
@@ -153,12 +124,8 @@ public:
         Legend
     };
 
-Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process, 
-    GCodeProcessor::Result* gcode_result, std::function<void()> schedule_background_process = []() {});
-#else
-Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config,
-        BackgroundSlicingProcess* process, GCodePreviewData* gcode_preview_data, std::function<void()> schedule_background_process = []() {});
-#endif // ENABLE_GCODE_VIEWER
+    Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process, 
+        GCodeProcessor::Result* gcode_result, std::function<void()> schedule_background_process = []() {});
     virtual ~Preview();
 
     wxGLCanvas* get_wxglcanvas() { return m_canvas_widget; }
@@ -167,9 +134,6 @@ Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config,
     void set_as_dirty();
 
     void set_number_extruders(unsigned int number_extruders);
-#if !ENABLE_GCODE_VIEWER
-    void set_enabled(bool enabled);
-#endif // !ENABLE_GCODE_VIEWER
     void bed_shape_changed();
     void select_view(const std::string& direction);
     void set_drop_target(wxDropTarget* target);
@@ -180,24 +144,17 @@ Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config,
 
     void msw_rescale();
     void jump_layers_slider(wxKeyEvent& evt);
-#if ENABLE_GCODE_VIEWER
     void move_layers_slider(wxKeyEvent& evt);
     void edit_layers_slider(wxKeyEvent& evt);
-#else
-    void move_double_slider(wxKeyEvent& evt);
-    void edit_double_slider(wxKeyEvent& evt);
-#endif // ENABLE_GCODE_VIEWER
 
     void update_view_type(bool keep_volumes);
 
     bool is_loaded() const { return m_loaded; }
 
-#if ENABLE_GCODE_VIEWER
     void update_bottom_toolbar();
     void update_moves_slider();
     void enable_moves_slider(bool enable);
     void hide_layers_slider();
-#endif // ENABLE_GCODE_VIEWER
 
 private:
     bool init(wxWindow* parent, Model* model);
@@ -205,27 +162,11 @@ private:
     void bind_event_handlers();
     void unbind_event_handlers();
 
-#if !ENABLE_GCODE_VIEWER
-    void show_hide_ui_elements(const std::string& what);
-
-    void reset_sliders(bool reset_all);
-    void update_sliders(const std::vector<double>& layers_z, bool keep_z_range = false);
-#endif // !ENABLE_GCODE_VIEWER
-
     void on_size(wxSizeEvent& evt);
     void on_choice_view_type(wxCommandEvent& evt);
     void on_combochecklist_features(wxCommandEvent& evt);
-#if ENABLE_GCODE_VIEWER
     void on_combochecklist_options(wxCommandEvent& evt);
-#else
-    void on_checkbox_travel(wxCommandEvent& evt);
-    void on_checkbox_retractions(wxCommandEvent& evt);
-    void on_checkbox_unretractions(wxCommandEvent& evt);
-    void on_checkbox_shells(wxCommandEvent& evt);
-    void on_checkbox_legend(wxCommandEvent& evt);
-#endif // ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
     // Create/Update/Reset double slider on 3dPreview
     wxBoxSizer* create_layers_slider_sizer();
     void check_layers_slider_values(std::vector<CustomGCode::Item>& ticks_from_model,
@@ -235,28 +176,13 @@ private:
     void update_layers_slider_mode();
     // update vertical DoubleSlider after keyDown in canvas
     void update_layers_slider_from_canvas(wxKeyEvent& event);
-#else
-    // Create/Update/Reset double slider on 3dPreview
-    void create_double_slider();
-    void check_slider_values(std::vector<CustomGCode::Item>& ticks_from_model,
-        const std::vector<double>& layers_z);
-    void reset_double_slider();
-    void update_double_slider(const std::vector<double>& layers_z, bool keep_z_range = false);
-    void update_double_slider_mode();
-    // update DoubleSlider after keyDown in canvas
-    void update_double_slider_from_canvas(wxKeyEvent& event);
-#endif // ENABLE_GCODE_VIEWER
 
     void load_print_as_fff(bool keep_z_range = false);
     void load_print_as_sla();
 
-#if ENABLE_GCODE_VIEWER
     void on_layers_slider_scroll_changed(wxCommandEvent& event);
     void on_moves_slider_scroll_changed(wxCommandEvent& event);
     wxString get_option_type_string(OptionType type) const;
-#else
-    void on_sliders_scroll_changed(wxCommandEvent& event);
-#endif // ENABLE_GCODE_VIEWER
 };
 
 } // namespace GUI

From a1905d9b9e9871815899a72029d5f52df7f6eb32 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Thu, 19 Nov 2020 14:59:46 +0100
Subject: [PATCH 052/138] ENABLE_GCODE_VIEWER set as default in:

MainFrame hpp/cpp

Plater hpp/cpp
---
 src/slic3r/GUI/MainFrame.cpp | 174 +-------------------------------
 src/slic3r/GUI/MainFrame.hpp |   8 --
 src/slic3r/GUI/Plater.cpp    | 188 +----------------------------------
 src/slic3r/GUI/Plater.hpp    |  27 +----
 4 files changed, 5 insertions(+), 392 deletions(-)

diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index 67f7db55f..32443c7d5 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -117,7 +117,6 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
     // Load the icon either from the exe, or from the ico file.
 #if _WIN32
     {
-#if ENABLE_GCODE_VIEWER
         wxString src_path;
         wxFileName::SplitPath(wxStandardPaths::Get().GetExecutablePath(), &src_path, nullptr, nullptr, wxPATH_NATIVE);
         switch (wxGetApp().get_app_mode()) {
@@ -128,22 +127,14 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
         wxIconLocation icon_location;
         icon_location.SetFileName(src_path);
         SetIcon(icon_location);
-#else
-        TCHAR szExeFileName[MAX_PATH];
-        GetModuleFileName(nullptr, szExeFileName, MAX_PATH);
-        SetIcon(wxIcon(szExeFileName, wxBITMAP_TYPE_ICO));
-#endif // ENABLE_GCODE_VIEWER
     }
 #else
-#if ENABLE_GCODE_VIEWER
     switch (wxGetApp().get_app_mode())
     {
     default:
     case GUI_App::EAppMode::Editor:
     {
-#endif // ENABLE_GCODE_VIEWER
         SetIcon(wxIcon(Slic3r::var("PrusaSlicer_128px.png"), wxBITMAP_TYPE_PNG));
-#if ENABLE_GCODE_VIEWER
         break;
     }
     case GUI_App::EAppMode::GCodeViewer:
@@ -152,15 +143,12 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
         break;
     }
     }
-#endif // ENABLE_GCODE_VIEWER
 #endif // _WIN32
 
 	// initialize status bar
     m_statusbar = std::make_shared<ProgressStatusBar>(this);
     m_statusbar->set_font(GUI::wxGetApp().normal_font());
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor())
-#endif // ENABLE_GCODE_VIEWER
         m_statusbar->embed(this);
     m_statusbar->set_status_text(_L("Version") + " " +
         SLIC3R_VERSION + " - " +
@@ -168,7 +156,6 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
 
     // initialize tabpanel and menubar
     init_tabpanel();
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_gcode_viewer())
         init_menubar_as_gcodeviewer();
     else
@@ -186,9 +173,6 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
     wxAcceleratorTable accel(6, entries);
     SetAcceleratorTable(accel);
 #endif // _WIN32
-#else
-    init_menubar();
-#endif // ENABLE_GCODE_VIEWER
 
     // set default tooltip timer in msec
     // SetAutoPop supposedly accepts long integers but some bug doesn't allow for larger values
@@ -256,9 +240,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
     update_ui_from_settings();    // FIXME (?)
 
     if (m_plater != nullptr) {
-#if ENABLE_GCODE_VIEWER
         m_plater->get_collapse_toolbar().set_enabled(wxGetApp().app_config->get("show_collapse_button") == "1");
-#endif // ENABLE_GCODE_VIEWER
         m_plater->show_action_buttons(true);
     }
 }
@@ -301,16 +283,10 @@ void MainFrame::update_layout()
         Layout();
     };
 
-#if ENABLE_GCODE_VIEWER
     ESettingsLayout layout = wxGetApp().is_gcode_viewer() ? ESettingsLayout::GCodeViewer :
         (wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old :
             wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New :
             wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old);
-#else
-    ESettingsLayout layout = wxGetApp().app_config->get("old_settings_layout_mode") == "1" ? ESettingsLayout::Old :
-        wxGetApp().app_config->get("new_settings_layout_mode") == "1" ? ESettingsLayout::New :
-        wxGetApp().app_config->get("dlg_settings_layout_mode") == "1" ? ESettingsLayout::Dlg : ESettingsLayout::Old;
-#endif // ENABLE_GCODE_VIEWER
 
     if (m_layout == layout)
         return;
@@ -374,7 +350,6 @@ void MainFrame::update_layout()
         m_plater->Show();
         break;
     }
-#if ENABLE_GCODE_VIEWER
     case ESettingsLayout::GCodeViewer:
     {
         m_main_sizer->Add(m_plater, 1, wxEXPAND);
@@ -384,7 +359,6 @@ void MainFrame::update_layout()
         m_plater->Show();
         break;
     }
-#endif // ENABLE_GCODE_VIEWER
     }
 
 #ifdef __WXMSW__
@@ -453,7 +427,6 @@ void MainFrame::shutdown()
  	}
 #endif // _WIN32
 
-#if ENABLE_GCODE_VIEWER
     if (m_plater != nullptr) {
         m_plater->stop_jobs();
 
@@ -466,19 +439,6 @@ void MainFrame::shutdown()
         // see: https://github.com/prusa3d/PrusaSlicer/issues/3964
         m_plater->reset_canvas_volumes();
     }
-#else
-    if (m_plater)
-    	m_plater->stop_jobs();
-
-    // Unbinding of wxWidgets event handling in canvases needs to be done here because on MAC,
-    // when closing the application using Command+Q, a mouse event is triggered after this lambda is completed,
-    // causing a crash
-    if (m_plater) m_plater->unbind_canvas_event_handlers();
-
-    // Cleanup of canvases' volumes needs to be done here or a crash may happen on some Linux Debian flavours
-    // see: https://github.com/prusa3d/PrusaSlicer/issues/3964
-    if (m_plater) m_plater->reset_canvas_volumes();
-#endif // ENABLE_GCODE_VIEWER
 
     // Weird things happen as the Paint messages are floating around the windows being destructed.
     // Avoid the Paint messages by hiding the main window.
@@ -526,11 +486,7 @@ void MainFrame::update_title()
             title += (project + " - ");
     }
 
-#if ENABLE_GCODE_VIEWER
     std::string build_id = wxGetApp().is_editor() ? SLIC3R_BUILD_ID : GCODEVIEWER_BUILD_ID;
-#else
-    std::string build_id = SLIC3R_BUILD_ID;
-#endif // ENABLE_GCODE_VIEWER
     size_t 		idx_plus = build_id.find('+');
     if (idx_plus != build_id.npos) {
     	// Parse what is behind the '+'. If there is a number, then it is a build number after the label, and full build ID is shown.
@@ -545,13 +501,10 @@ void MainFrame::update_title()
 #endif
     	}
     }
-#if ENABLE_GCODE_VIEWER
+
     title += wxString(build_id);
     if (wxGetApp().is_editor())
         title += (" " + _L("based on Slic3r"));
-#else
-    title += (wxString(build_id) + " " + _L("based on Slic3r"));
-#endif // ENABLE_GCODE_VIEWER
 
     SetTitle(title);
 }
@@ -600,9 +553,7 @@ void MainFrame::init_tabpanel()
     // or when the preset's "modified" status changes.
     Bind(EVT_TAB_PRESETS_CHANGED, &MainFrame::on_presets_changed, this); // #ys_FIXME_to_delete
 
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor())
-#endif // ENABLE_GCODE_VIEWER
         create_preset_tabs();
 
     if (m_plater) {
@@ -811,9 +762,7 @@ bool MainFrame::can_change_view() const
         int page_id = m_tabpanel->GetSelection();
         return page_id != wxNOT_FOUND && dynamic_cast<const Slic3r::GUI::Plater*>(m_tabpanel->GetPage((size_t)page_id)) != nullptr;
     }
-#if ENABLE_GCODE_VIEWER
     case ESettingsLayout::GCodeViewer: { return true; }
-#endif // ENABLE_GCODE_VIEWER
     }
 }
 
@@ -905,7 +854,6 @@ void MainFrame::on_sys_color_changed()
         msw_rescale_menu(menu_bar->GetMenu(id));
 }
 
-#if ENABLE_GCODE_VIEWER
 #ifdef _MSC_VER
     // \xA0 is a non-breaking space. It is entered here to spoil the automatic accelerators,
     // as the simple numeric accelerators spoil all numeric data entry.
@@ -940,17 +888,13 @@ static wxMenu* generate_help_menu()
         [](wxCommandEvent&) { Slic3r::GUI::desktop_open_datadir_folder(); });
     append_menu_item(helpMenu, wxID_ANY, _L("Report an I&ssue"), wxString::Format(_L("Report an issue on %s"), SLIC3R_APP_NAME),
         [](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/prusa3d/slic3r/issues/new"); });
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor())
-#endif // ENABLE_GCODE_VIEWER
         append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("&About %s"), SLIC3R_APP_NAME), _L("Show about dialog"),
             [](wxCommandEvent&) { Slic3r::GUI::about(); });
-#if ENABLE_GCODE_VIEWER
     else
         append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("&About %s"), GCODEVIEWER_APP_NAME), _L("Show about dialog"),
             [](wxCommandEvent&) { Slic3r::GUI::about(); });
-#endif // ENABLE_GCODE_VIEWER
-        helpMenu->AppendSeparator();
+    helpMenu->AppendSeparator();
     append_menu_item(helpMenu, wxID_ANY, _L("Keyboard Shortcuts") + sep + "&?", _L("Show the list of the keyboard shortcuts"),
         [](wxCommandEvent&) { wxGetApp().keyboard_shortcuts(); });
 #if ENABLE_THUMBNAIL_GENERATOR_DEBUG
@@ -985,9 +929,6 @@ static void add_common_view_menu_items(wxMenu* view_menu, MainFrame* mainFrame,
 }
 
 void MainFrame::init_menubar_as_editor()
-#else
-void MainFrame::init_menubar()
-#endif // ENABLE_GCODE_VIEWER
 {
 #ifdef __APPLE__
     wxMenuBar::SetAutoWindowMenu(false);
@@ -1158,18 +1099,6 @@ void MainFrame::init_menubar()
             [this](wxCommandEvent&) { Close(false); }, "exit");
     }
 
-#if !ENABLE_GCODE_VIEWER
-#ifdef _MSC_VER
-    // \xA0 is a non-breaking space. It is entered here to spoil the automatic accelerators,
-    // as the simple numeric accelerators spoil all numeric data entry.
-    wxString sep = "\t\xA0";
-    wxString sep_space = "\xA0";
-#else
-    wxString sep = " - ";
-    wxString sep_space = "";
-#endif
-#endif // !ENABLE_GCODE_VIEWER
-
     // Edit menu
     wxMenu* editMenu = nullptr;
     if (m_plater != nullptr)
@@ -1252,21 +1181,6 @@ void MainFrame::init_menubar()
                 [this](){return can_change_view(); }, this);
         }
 
-#if !ENABLE_GCODE_VIEWER
-#if _WIN32
-        // This is needed on Windows to fake the CTRL+# of the window menu when using the numpad
-        wxAcceleratorEntry entries[6];
-        entries[0].Set(wxACCEL_CTRL, WXK_NUMPAD1, wxID_HIGHEST + 1);
-        entries[1].Set(wxACCEL_CTRL, WXK_NUMPAD2, wxID_HIGHEST + 2);
-        entries[2].Set(wxACCEL_CTRL, WXK_NUMPAD3, wxID_HIGHEST + 3);
-        entries[3].Set(wxACCEL_CTRL, WXK_NUMPAD4, wxID_HIGHEST + 4);
-        entries[4].Set(wxACCEL_CTRL, WXK_NUMPAD5, wxID_HIGHEST + 5);
-        entries[5].Set(wxACCEL_CTRL, WXK_NUMPAD6, wxID_HIGHEST + 6);
-        wxAcceleratorTable accel(6, entries);
-        SetAcceleratorTable(accel);
-#endif // _WIN32
-#endif // !ENABLE_GCODE_VIEWER
-
         windowMenu->AppendSeparator();
         append_menu_item(windowMenu, wxID_ANY, _L("Print &Host Upload Queue") + "\tCtrl+J", _L("Display the Print Host Upload Queue window"),
             [this](wxCommandEvent&) { m_printhost_queue_dlg->Show(); }, "upload_queue", nullptr, []() {return true; }, this);
@@ -1281,28 +1195,7 @@ void MainFrame::init_menubar()
     wxMenu* viewMenu = nullptr;
     if (m_plater) {
         viewMenu = new wxMenu();
-#if ENABLE_GCODE_VIEWER
         add_common_view_menu_items(viewMenu, this, std::bind(&MainFrame::can_change_view, this));
-#else
-        // The camera control accelerators are captured by GLCanvas3D::on_char().
-        append_menu_item(viewMenu, wxID_ANY, _L("Iso") + sep + "&0", _L("Iso View"), [this](wxCommandEvent&) { select_view("iso"); }, 
-            "", nullptr, [this](){return can_change_view(); }, this);
-        viewMenu->AppendSeparator();
-        //TRN To be shown in the main menu View->Top 
-        append_menu_item(viewMenu, wxID_ANY, _L("Top") + sep + "&1", _L("Top View"), [this](wxCommandEvent&) { select_view("top"); },
-            "", nullptr, [this](){return can_change_view(); }, this);
-		//TRN To be shown in the main menu View->Bottom 
-        append_menu_item(viewMenu, wxID_ANY, _L("Bottom") + sep + "&2", _L("Bottom View"), [this](wxCommandEvent&) { select_view("bottom"); },
-            "", nullptr, [this](){return can_change_view(); }, this);
-        append_menu_item(viewMenu, wxID_ANY, _L("Front") + sep + "&3", _L("Front View"), [this](wxCommandEvent&) { select_view("front"); },
-            "", nullptr, [this](){return can_change_view(); }, this);
-        append_menu_item(viewMenu, wxID_ANY, _L("Rear") + sep + "&4", _L("Rear View"), [this](wxCommandEvent&) { select_view("rear"); },
-            "", nullptr, [this](){return can_change_view(); }, this);
-        append_menu_item(viewMenu, wxID_ANY, _L("Left") + sep + "&5", _L("Left View"), [this](wxCommandEvent&) { select_view("left"); },
-            "", nullptr, [this](){return can_change_view(); }, this);
-        append_menu_item(viewMenu, wxID_ANY, _L("Right") + sep + "&6", _L("Right View"), [this](wxCommandEvent&) { select_view("right"); },
-            "", nullptr, [this](){return can_change_view(); }, this);
-#endif // ENABLE_GCODE_VIEWER
         viewMenu->AppendSeparator();
         append_menu_check_item(viewMenu, wxID_ANY, _L("Show &labels") + sep + "E", _L("Show object/instance labels in 3D scene"),
             [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); }, this,
@@ -1313,49 +1206,11 @@ void MainFrame::init_menubar()
     }
 
     // Help menu
-#if ENABLE_GCODE_VIEWER
     auto helpMenu = generate_help_menu();
-#else
-    auto helpMenu = new wxMenu();
-    {
-        append_menu_item(helpMenu, wxID_ANY, _L("Prusa 3D &Drivers"), _L("Open the Prusa3D drivers download page in your browser"), 
-            [this](wxCommandEvent&) { wxGetApp().open_web_page_localized("https://www.prusa3d.com/downloads"); }); 
-        append_menu_item(helpMenu, wxID_ANY, _L("Software &Releases"), _L("Open the software releases page in your browser"), 
-            [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/prusa3d/PrusaSlicer/releases"); });
-//#        my $versioncheck = $self->_append_menu_item($helpMenu, "Check for &Updates...", "Check for new Slic3r versions", sub{
-//#            wxTheApp->check_version(1);
-//#        });
-//#        $versioncheck->Enable(wxTheApp->have_version_check);
-        append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("%s &Website"), SLIC3R_APP_NAME), 
-                                             wxString::Format(_L("Open the %s website in your browser"), SLIC3R_APP_NAME),
-            [this](wxCommandEvent&) { wxGetApp().open_web_page_localized("https://www.prusa3d.com/slicerweb"); });
-//        append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("%s &Manual"), SLIC3R_APP_NAME),
-//                                             wxString::Format(_L("Open the %s manual in your browser"), SLIC3R_APP_NAME),
-//            [this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://manual.slic3r.org/"); });
-        helpMenu->AppendSeparator();
-        append_menu_item(helpMenu, wxID_ANY, _L("System &Info"), _L("Show system information"), 
-            [this](wxCommandEvent&) { wxGetApp().system_info(); });
-        append_menu_item(helpMenu, wxID_ANY, _L("Show &Configuration Folder"), _L("Show user configuration folder (datadir)"),
-            [this](wxCommandEvent&) { Slic3r::GUI::desktop_open_datadir_folder(); });
-        append_menu_item(helpMenu, wxID_ANY, _L("Report an I&ssue"), wxString::Format(_L("Report an issue on %s"), SLIC3R_APP_NAME), 
-            [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/prusa3d/slic3r/issues/new"); });
-        append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("&About %s"), SLIC3R_APP_NAME), _L("Show about dialog"),
-            [this](wxCommandEvent&) { Slic3r::GUI::about(); });
-        helpMenu->AppendSeparator();
-        append_menu_item(helpMenu, wxID_ANY, _L("Keyboard Shortcuts") + sep + "&?", _L("Show the list of the keyboard shortcuts"),
-            [this](wxCommandEvent&) { wxGetApp().keyboard_shortcuts(); });
-#if ENABLE_THUMBNAIL_GENERATOR_DEBUG
-        helpMenu->AppendSeparator();
-        append_menu_item(helpMenu, wxID_ANY, "DEBUG gcode thumbnails", "DEBUG ONLY - read the selected gcode file and generates png for the contained thumbnails",
-            [this](wxCommandEvent&) { wxGetApp().gcode_thumbnails_debug(); });
-#endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG
-    }
-#endif // ENABLE_GCODE_VIEWER
 
     // menubar
     // assign menubar to frame after appending items, otherwise special items
     // will not be handled correctly
-#if ENABLE_GCODE_VIEWER
     m_menubar = new wxMenuBar();
     m_menubar->Append(fileMenu, _L("&File"));
     if (editMenu) m_menubar->Append(editMenu, _L("&Edit"));
@@ -1365,26 +1220,11 @@ void MainFrame::init_menubar()
     wxGetApp().add_config_menu(m_menubar);
     m_menubar->Append(helpMenu, _L("&Help"));
     SetMenuBar(m_menubar);
-#else
-    auto menubar = new wxMenuBar();
-    menubar->Append(fileMenu, _L("&File"));
-    if (editMenu) menubar->Append(editMenu, _L("&Edit"));
-    menubar->Append(windowMenu, _L("&Window"));
-    if (viewMenu) menubar->Append(viewMenu, _L("&View"));
-    // Add additional menus from C++
-    wxGetApp().add_config_menu(menubar);
-    menubar->Append(helpMenu, _L("&Help"));
-    SetMenuBar(menubar);
-#endif // ENABLE_GCODE_VIEWER
 
 #ifdef __APPLE__
     // This fixes a bug on Mac OS where the quit command doesn't emit window close events
     // wx bug: https://trac.wxwidgets.org/ticket/18328
-#if ENABLE_GCODE_VIEWER
     wxMenu* apple_menu = m_menubar->OSXGetAppleMenu();
-#else
-    wxMenu *apple_menu = menubar->OSXGetAppleMenu();
-#endif // ENABLE_GCODE_VIEWER
     if (apple_menu != nullptr) {
         apple_menu->Bind(wxEVT_MENU, [this](wxCommandEvent &) {
             Close();
@@ -1396,7 +1236,6 @@ void MainFrame::init_menubar()
         update_menubar();
 }
 
-#if ENABLE_GCODE_VIEWER
 void MainFrame::init_menubar_as_gcodeviewer()
 {
     wxMenu* fileMenu = new wxMenu;
@@ -1429,10 +1268,8 @@ void MainFrame::init_menubar_as_gcodeviewer()
     m_menubar = new wxMenuBar();
     m_menubar->Append(fileMenu, _L("&File"));
     if (viewMenu != nullptr) m_menubar->Append(viewMenu, _L("&View"));
-#if ENABLE_GCODE_VIEWER
     // Add additional menus from C++
     wxGetApp().add_config_menu(m_menubar);
-#endif // ENABLE_GCODE_VIEWER
     m_menubar->Append(helpMenu, _L("&Help"));
     SetMenuBar(m_menubar);
 
@@ -1447,14 +1284,11 @@ void MainFrame::init_menubar_as_gcodeviewer()
     }
 #endif // __APPLE__
 }
-#endif // ENABLE_GCODE_VIEWER
 
 void MainFrame::update_menubar()
 {
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_gcode_viewer())
         return;
-#endif // ENABLE_GCODE_VIEWER
 
     const bool is_fff = plater()->printer_technology() == ptFFF;
 
@@ -1983,10 +1817,8 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe)
         wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX, "settings_dialog"),
     m_main_frame(mainframe)
 {
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_gcode_viewer())
         return;
-#endif // ENABLE_GCODE_VIEWER
 
 #if ENABLE_WX_3_1_3_DPI_CHANGED_EVENT && defined(__WXMSW__)
     // ys_FIXME! temporary workaround for correct font scaling
@@ -2059,10 +1891,8 @@ SettingsDialog::SettingsDialog(MainFrame* mainframe)
 
 void SettingsDialog::on_dpi_changed(const wxRect& suggested_rect)
 {
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_gcode_viewer())
         return;
-#endif // ENABLE_GCODE_VIEWER
 
     const int& em = em_unit();
     const wxSize& size = wxSize(85 * em, 50 * em);
diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp
index 611ea7991..fb393f619 100644
--- a/src/slic3r/GUI/MainFrame.hpp
+++ b/src/slic3r/GUI/MainFrame.hpp
@@ -71,9 +71,7 @@ class MainFrame : public DPIFrame
     wxString    m_qs_last_input_file = wxEmptyString;
     wxString    m_qs_last_output_file = wxEmptyString;
     wxString    m_last_config = wxEmptyString;
-#if ENABLE_GCODE_VIEWER
     wxMenuBar*  m_menubar{ nullptr };
-#endif // ENABLE_GCODE_VIEWER
 
 #if 0
     wxMenuItem* m_menu_item_repeat { nullptr }; // doesn't used now
@@ -128,9 +126,7 @@ class MainFrame : public DPIFrame
         Old,
         New,
         Dlg,
-#if ENABLE_GCODE_VIEWER
         GCodeViewer
-#endif // ENABLE_GCODE_VIEWER
     };
     
     ESettingsLayout m_layout{ ESettingsLayout::Unknown };
@@ -159,12 +155,8 @@ public:
     // Register Win32 RawInput callbacks (3DConnexion) and removable media insert / remove callbacks.
     // Called from wxEVT_ACTIVATE, as wxEVT_CREATE was not reliable (bug in wxWidgets?).
     void        register_win32_callbacks();
-#if ENABLE_GCODE_VIEWER
     void        init_menubar_as_editor();
     void        init_menubar_as_gcodeviewer();
-#else
-    void        init_menubar();
-#endif // ENABLE_GCODE_VIEWER
     void        update_menubar();
 
     void        update_ui_from_settings(bool apply_free_camera_correction = true);
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 6ba1d7f7a..16e55db63 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1169,7 +1169,6 @@ void Sidebar::update_sliced_info_sizer()
                         wxString::Format("%.2f", ps.total_cost);
             p->sliced_info->SetTextAndShow(siCost, info_text,      new_label);
 
-#if ENABLE_GCODE_VIEWER
             if (ps.estimated_normal_print_time == "N/A" && ps.estimated_silent_print_time == "N/A")
                 p->sliced_info->SetTextAndShow(siEstimatedTime, "N/A");
             else {
@@ -1191,56 +1190,6 @@ void Sidebar::update_sliced_info_sizer()
                 }
                 p->sliced_info->SetTextAndShow(siEstimatedTime, info_text, new_label);
             }
-#else
-            if (ps.estimated_normal_print_time == "N/A" && ps.estimated_silent_print_time == "N/A")
-                p->sliced_info->SetTextAndShow(siEstimatedTime, "N/A");
-            else {
-                new_label = _L("Estimated printing time") + ":";
-                info_text = "";
-                wxString str_color = _L("Color");
-                wxString str_pause = _L("Pause");
-
-                auto fill_labels = [str_color, str_pause](const std::vector<std::pair<CustomGCode::Type, std::string>>& times,
-                    wxString& new_label, wxString& info_text)
-                    {
-                        int color_change_count = 0;
-                        for (auto time : times)
-                            if (time.first == CustomGCode::ColorChange)
-                                color_change_count++;
-
-                        for (int i = (int)times.size() - 1; i >= 0; --i)
-                        {
-                            if (i == 0 || times[i - 1].first == CustomGCode::PausePrint)
-                                new_label += format_wxstr("\n      - %1%%2%", str_color + " ", color_change_count);
-                            else if (times[i - 1].first == CustomGCode::ColorChange)
-                                new_label += format_wxstr("\n      - %1%%2%", str_color + " ", color_change_count--);
-
-                            if (i != (int)times.size() - 1 && times[i].first == CustomGCode::PausePrint)
-                                new_label += format_wxstr(" -> %1%", str_pause);
-
-                            info_text += format_wxstr("\n%1%", times[i].second);
-                        }
-                    };
-
-                if (ps.estimated_normal_print_time != "N/A") {
-                    new_label += format_wxstr("\n   - %1%", _L("normal mode"));
-                    info_text += format_wxstr("\n%1%", ps.estimated_normal_print_time);
-                    fill_labels(ps.estimated_normal_custom_gcode_print_times, new_label, info_text);
-
-					// uncomment next line to not disappear slicing finished notif when colapsing sidebar before time estimate
-					//if (p->plater->is_sidebar_collapsed())
-					p->plater->get_notification_manager()->set_slicing_complete_large(p->plater->is_sidebar_collapsed());
-					p->plater->get_notification_manager()->set_slicing_complete_print_time("Estimated printing time: " + ps.estimated_normal_print_time);
-
-                }
-                if (ps.estimated_silent_print_time != "N/A") {
-                    new_label += format_wxstr("\n   - %1%", _L("stealth mode"));
-                    info_text += format_wxstr("\n%1%", ps.estimated_silent_print_time);
-                    fill_labels(ps.estimated_silent_custom_gcode_print_times, new_label, info_text);
-                }
-                p->sliced_info->SetTextAndShow(siEstimatedTime, info_text, new_label);
-            }
-#endif // !ENABLE_GCODE_VIEWER
 
             // if there is a wipe tower, insert number of toolchanges info into the array:
             p->sliced_info->SetTextAndShow(siWTNumbetOfToolchanges, is_wipe_tower ? wxString::Format("%.d", ps.total_toolchanges) : "N/A");
@@ -1333,9 +1282,7 @@ void Sidebar::collapse(bool collapse)
     p->plater->Layout();
 
     // save collapsing state to the AppConfig
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor())
-#endif // ENABLE_GCODE_VIEWER
         wxGetApp().app_config->set("collapsed_sidebar", collapse ? "1" : "0");
 }
 
@@ -1375,15 +1322,11 @@ private:
     Plater *plater;
 
     static const std::regex pattern_drop;
-#if ENABLE_GCODE_VIEWER
     static const std::regex pattern_gcode_drop;
-#endif // ENABLE_GCODE_VIEWER
 };
 
 const std::regex PlaterDropTarget::pattern_drop(".*[.](stl|obj|amf|3mf|prusa)", std::regex::icase);
-#if ENABLE_GCODE_VIEWER
 const std::regex PlaterDropTarget::pattern_gcode_drop(".*[.](gcode|g)", std::regex::icase);
-#endif // ENABLE_GCODE_VIEWER
 
 enum class LoadType : unsigned char
 {
@@ -1453,7 +1396,6 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi
 {
     std::vector<fs::path> paths;
 
-#if ENABLE_GCODE_VIEWER
 #ifdef WIN32
     // hides the system icon
     this->MSWUpdateDragImageOnLeave();
@@ -1478,17 +1420,14 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi
         } 
         return false;
     }
-#endif // ENABLE_GCODE_VIEWER
 
     // editor section
     for (const auto &filename : filenames) {
         fs::path path(into_path(filename));
         if (std::regex_match(path.string(), pattern_drop))
             paths.push_back(std::move(path));
-#if ENABLE_GCODE_VIEWER
         else if (std::regex_match(path.string(), pattern_gcode_drop))
             start_new_gcodeviewer(&filename);
-#endif // ENABLE_GCODE_VIEWER
         else
             return false;
     }
@@ -1605,11 +1544,7 @@ struct Plater::priv
     Slic3r::SLAPrint            sla_print;
     Slic3r::Model               model;
     PrinterTechnology           printer_technology = ptFFF;
-#if ENABLE_GCODE_VIEWER
     Slic3r::GCodeProcessor::Result gcode_result;
-#else
-    Slic3r::GCodePreviewData    gcode_preview_data;
-#endif // ENABLE_GCODE_VIEWER
 
     // GUI elements
     wxSizer* panel_sizer{ nullptr };
@@ -1717,13 +1652,11 @@ struct Plater::priv
     bool init_view_toolbar();
     bool init_collapse_toolbar();
 
-#if ENABLE_GCODE_VIEWER
     void update_preview_bottom_toolbar();
     void update_preview_moves_slider();
     void enable_preview_moves_slider(bool enable);
 
     void reset_gcode_toolpaths();
-#endif // ENABLE_GCODE_VIEWER
 
     void reset_all_gizmos();
     void update_ui_from_settings(bool apply_free_camera_correction = true);
@@ -1945,11 +1878,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
 
     background_process.set_fff_print(&fff_print);
     background_process.set_sla_print(&sla_print);
-#if ENABLE_GCODE_VIEWER
     background_process.set_gcode_result(&gcode_result);
-#else
-    background_process.set_gcode_preview_data(&gcode_preview_data);
-#endif // ENABLE_GCODE_VIEWER
     background_process.set_thumbnail_cb([this](ThumbnailsList& thumbnails, const Vec2ds& sizes, bool printable_only, bool parts_only, bool show_bed, bool transparent_background)
         {
             std::packaged_task<void(ThumbnailsList&, const Vec2ds&, bool, bool, bool, bool)> task([this](ThumbnailsList& thumbnails, const Vec2ds& sizes, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) {
@@ -1974,11 +1903,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     this->q->Bind(EVT_SLICING_UPDATE, &priv::on_slicing_update, this);
 
     view3D = new View3D(q, &model, config, &background_process);
-#if ENABLE_GCODE_VIEWER
     preview = new Preview(q, &model, config, &background_process, &gcode_result, [this]() { schedule_background_process(); });
-#else
-    preview = new Preview(q, &model, config, &background_process, &gcode_preview_data, [this]() { schedule_background_process(); });
-#endif // ENABLE_GCODE_VIEWER
 
 #ifdef __APPLE__
     // set default view_toolbar icons size equal to GLGizmosManager::Default_Icons_Size
@@ -2009,22 +1934,16 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
 
     // Events:
 
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         // Preset change event
         sidebar->Bind(wxEVT_COMBOBOX, &priv::on_select_preset, this);
         sidebar->Bind(EVT_OBJ_LIST_OBJECT_SELECT, [this](wxEvent&) { priv::selection_changed(); });
         sidebar->Bind(EVT_SCHEDULE_BACKGROUND_PROCESS, [this](SimpleEvent&) { this->schedule_background_process(); });
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 
      wxGLCanvas* view3D_canvas = view3D->get_wxglcanvas();
 
-#if ENABLE_GCODE_VIEWER
      if (wxGetApp().is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         // 3DScene events:
         view3D_canvas->Bind(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, [this](SimpleEvent&) { this->schedule_background_process(); });
         view3D_canvas->Bind(EVT_GLCANVAS_OBJECT_SELECT, &priv::on_object_select, this);
@@ -2066,10 +1985,8 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
         view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_OBJECTS, &priv::on_action_split_objects, this);
         view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_VOLUMES, &priv::on_action_split_volumes, this);
         view3D_canvas->Bind(EVT_GLTOOLBAR_LAYERSEDITING, &priv::on_action_layersediting, this);
-#if ENABLE_GCODE_VIEWER
-    }
-#endif // ENABLE_GCODE_VIEWER
-    view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [q](SimpleEvent&) { q->set_bed_shape(); });
+     }
+     view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [q](SimpleEvent&) { q->set_bed_shape(); });
 
     // Preview events:
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_QUESTION_MARK, [this](SimpleEvent&) { wxGetApp().keyboard_shortcuts(); });
@@ -2077,37 +1994,24 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); });
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed());  });
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_JUMP_TO, [this](wxKeyEvent& evt) { preview->jump_layers_slider(evt); });
-#if ENABLE_GCODE_VIEWER
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, [this](wxKeyEvent& evt) { preview->move_layers_slider(evt); });
     preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_EDIT_COLOR_CHANGE, [this](wxKeyEvent& evt) { preview->edit_layers_slider(evt); });
-#else
-    preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, [this](wxKeyEvent& evt) { preview->move_double_slider(evt); });
-    preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_EDIT_COLOR_CHANGE, [this](wxKeyEvent& evt) { preview->edit_double_slider(evt); });
-#endif // ENABLE_GCODE_VIEWER
 
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         q->Bind(EVT_SLICING_COMPLETED, &priv::on_slicing_completed, this);
         q->Bind(EVT_PROCESS_COMPLETED, &priv::on_process_completed, this);
         q->Bind(EVT_EXPORT_BEGAN, &priv::on_export_began, this);
         q->Bind(EVT_GLVIEWTOOLBAR_3D, [q](SimpleEvent&) { q->select_view_3D("3D"); });
         q->Bind(EVT_GLVIEWTOOLBAR_PREVIEW, [q](SimpleEvent&) { q->select_view_3D("Preview"); });
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 
     // Drop target:
     q->SetDropTarget(new PlaterDropTarget(q));   // if my understanding is right, wxWindow takes the owenership
     q->Layout();
 
-#if ENABLE_GCODE_VIEWER
     set_current_panel(wxGetApp().is_editor() ? (wxPanel*)view3D : (wxPanel*)preview);
     if (wxGetApp().is_gcode_viewer())
         preview->hide_layers_slider();
-#else
-    set_current_panel(view3D);
-#endif // ENABLE_GCODE_VIEWER
 
     // updates camera type from .ini file
     camera.enable_update_config_on_type_change(true);
@@ -2133,9 +2037,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
 #endif /* _WIN32 */
 
 	notification_manager = new NotificationManager(this->q);
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); });
         this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); });
         this->q->Bind(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, [this](PresetUpdateAvailableClickedEvent&) {  wxGetApp().get_preset_updater()->on_update_notification_confirm(); });
@@ -2161,9 +2063,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
         this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); });
         this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); });
 #endif /* _WIN32 */
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 
     // Initialize the Undo / Redo stack with a first snapshot.
     this->take_snapshot(_L("New Project"));
@@ -2178,14 +2078,10 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
 	wxGetApp().other_instance_message_handler()->init(this->q);
 
     // collapse sidebar according to saved value
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_editor()) {
-#endif // ENABLE_GCODE_VIEWER
         bool is_collapsed = wxGetApp().app_config->get("collapsed_sidebar") == "1";
         sidebar->collapse(is_collapsed);
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 }
 
 Plater::priv::~priv()
@@ -2234,9 +2130,7 @@ void Plater::priv::select_view_3D(const std::string& name)
     else if (name == "Preview")
         set_current_panel(preview);
 
-#if ENABLE_GCODE_VIEWER
     wxGetApp().update_ui_from_settings(false);
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void Plater::priv::select_next_view_3D()
@@ -2765,11 +2659,6 @@ void Plater::priv::deselect_all()
 
 void Plater::priv::remove(size_t obj_idx)
 {
-#if !ENABLE_GCODE_VIEWER
-    // Prevent toolpaths preview from rendering while we modify the Print object
-    preview->set_enabled(false);
-#endif // !ENABLE_GCODE_VIEWER
-
     if (view3D->is_layers_editing_enabled())
         view3D->enable_layers_editing(false);
 
@@ -2800,18 +2689,11 @@ void Plater::priv::reset()
 
     set_project_filename(wxEmptyString);
 
-#if !ENABLE_GCODE_VIEWER
-    // Prevent toolpaths preview from rendering while we modify the Print object
-    preview->set_enabled(false);
-#endif // !ENABLE_GCODE_VIEWER
-
     if (view3D->is_layers_editing_enabled())
         view3D->enable_layers_editing(false);
 
-#if ENABLE_GCODE_VIEWER
     reset_gcode_toolpaths();
     gcode_result.reset();
-#endif // ENABLE_GCODE_VIEWER
 
     // Stop and reset the Print content.
     this->background_process.reset();
@@ -2958,19 +2840,12 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool
         this->sidebar->show_sliced_info_sizer(false);
         // Reset preview canvases. If the print has been invalidated, the preview canvases will be cleared.
         // Otherwise they will be just refreshed.
-#if ENABLE_GCODE_VIEWER
         if (this->preview != nullptr) {
             // If the preview is not visible, the following line just invalidates the preview,
             // but the G-code paths or SLA preview are calculated first once the preview is made visible.
             reset_gcode_toolpaths();
             this->preview->reload_print();
         }
-#else
-        if (this->preview != nullptr)
-            // If the preview is not visible, the following line just invalidates the preview,
-            // but the G-code paths or SLA preview are calculated first once the preview is made visible.
-            this->preview->reload_print();
-#endif // ENABLE_GCODE_VIEWER
         // In FDM mode, we need to reload the 3D scene because of the wipe tower preview box.
         // In SLA mode, we need to reload the 3D scene every time to show the support structures.
         if (this->printer_technology == ptSLA || (this->printer_technology == ptFFF && this->config->opt_bool("wipe_tower")))
@@ -4136,10 +4011,8 @@ void Plater::priv::reset_canvas_volumes()
 
 bool Plater::priv::init_view_toolbar()
 {
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_gcode_viewer())
         return true;
-#endif // ENABLE_GCODE_VIEWER
 
     if (view_toolbar.get_items_count() > 0)
         // already initialized
@@ -4186,10 +4059,8 @@ bool Plater::priv::init_view_toolbar()
 
 bool Plater::priv::init_collapse_toolbar()
 {
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_gcode_viewer())
         return true;
-#endif // ENABLE_GCODE_VIEWER
 
     if (collapse_toolbar.get_items_count() > 0)
         // already initialized
@@ -4230,7 +4101,6 @@ bool Plater::priv::init_collapse_toolbar()
     return true;
 }
 
-#if ENABLE_GCODE_VIEWER
 void Plater::priv::update_preview_bottom_toolbar()
 {
     preview->update_bottom_toolbar();
@@ -4250,7 +4120,6 @@ void Plater::priv::reset_gcode_toolpaths()
 {
     preview->get_canvas3d()->reset_gcode_toolpaths();
 }
-#endif // ENABLE_GCODE_VIEWER
 
 bool Plater::priv::can_set_instance_to_object() const
 {
@@ -4807,7 +4676,6 @@ void Plater::extract_config_from_project()
     load_files(input_paths, false, true);
 }
 
-#if ENABLE_GCODE_VIEWER
 void Plater::load_gcode()
 {
     // Ask user for a gcode file name.
@@ -4858,7 +4726,6 @@ void Plater::refresh_print()
 {
     p->preview->refresh_print();
 }
-#endif // ENABLE_GCODE_VIEWER
 
 std::vector<size_t> Plater::load_files(const std::vector<fs::path>& input_files, bool load_model, bool load_config, bool imperial_units /*= false*/) { return p->load_files(input_files, load_model, load_config, imperial_units); }
 
@@ -5363,9 +5230,7 @@ void Plater::reslice()
     if ((state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) != 0)
         return;
 
-#if ENABLE_GCODE_VIEWER
     bool clean_gcode_toolpaths = true;
-#endif // ENABLE_GCODE_VIEWER
     if (p->background_process.running())
     {
         if (wxGetApp().get_mode() == comSimple)
@@ -5378,7 +5243,6 @@ void Plater::reslice()
     }
     else if (!p->background_process.empty() && !p->background_process.idle())
         p->show_action_buttons(true);
-#if ENABLE_GCODE_VIEWER
     else
         clean_gcode_toolpaths = false;
 
@@ -5387,10 +5251,6 @@ void Plater::reslice()
 
     // update type of preview
     p->preview->update_view_type(!clean_gcode_toolpaths);
-#else
-    // update type of preview
-    p->preview->update_view_type(true);
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void Plater::reslice_SLA_supports(const ModelObject &object, bool postpone_error_messages)
@@ -5607,9 +5467,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config)
             // print technology is changed, so we should to update a search list
             p->sidebar->update_searcher();
             p->sidebar->show_sliced_info_sizer(false);
-#if ENABLE_GCODE_VIEWER
             p->reset_gcode_toolpaths();
-#endif // ENABLE_GCODE_VIEWER
         }
         else if (opt_key == "bed_shape" || opt_key == "bed_custom_texture" || opt_key == "bed_custom_model") {
             bed_shape_changed = true;
@@ -5652,23 +5510,15 @@ void Plater::on_config_change(const DynamicPrintConfig &config)
 
 void Plater::set_bed_shape() const
 {
-#if ENABLE_GCODE_VIEWER
     set_bed_shape(p->config->option<ConfigOptionPoints>("bed_shape")->values,
         p->config->option<ConfigOptionString>("bed_custom_texture")->value,
         p->config->option<ConfigOptionString>("bed_custom_model")->value);
-#else
-    p->set_bed_shape(p->config->option<ConfigOptionPoints>("bed_shape")->values,
-		p->config->option<ConfigOptionString>("bed_custom_texture")->value,
-		p->config->option<ConfigOptionString>("bed_custom_model")->value);
-#endif // ENABLE_GCODE_VIEWER
 }
 
-#if ENABLE_GCODE_VIEWER
 void Plater::set_bed_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom) const
 {
     p->set_bed_shape(shape, custom_texture, custom_model, force_as_custom);
 }
-#endif // ENABLE_GCODE_VIEWER
 
 void Plater::force_filament_colors_update()
 {
@@ -5724,17 +5574,11 @@ void Plater::on_activate()
 }
 
 // Get vector of extruder colors considering filament color, if extruder color is undefined.
-#if ENABLE_GCODE_VIEWER
 std::vector<std::string> Plater::get_extruder_colors_from_plater_config(const GCodeProcessor::Result* const result) const
-#else
-std::vector<std::string> Plater::get_extruder_colors_from_plater_config() const
-#endif // ENABLE_GCODE_VIEWER
 {
-#if ENABLE_GCODE_VIEWER
     if (wxGetApp().is_gcode_viewer() && result != nullptr)
         return result->extruder_colors;
     else {
-#endif // ENABLE_GCODE_VIEWER
         const Slic3r::DynamicPrintConfig* config = &wxGetApp().preset_bundle->printers.get_edited_preset().config;
         std::vector<std::string> extruder_colors;
         if (!config->has("extruder_colour")) // in case of a SLA print
@@ -5750,23 +5594,15 @@ std::vector<std::string> Plater::get_extruder_colors_from_plater_config() const
                 extruder_colors[i] = filament_colours[i];
 
         return extruder_colors;
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 }
 
 /* Get vector of colors used for rendering of a Preview scene in "Color print" mode
  * It consists of extruder colors and colors, saved in model.custom_gcode_per_print_z
  */
-#if ENABLE_GCODE_VIEWER
 std::vector<std::string> Plater::get_colors_for_color_print(const GCodeProcessor::Result* const result) const
 {
     std::vector<std::string> colors = get_extruder_colors_from_plater_config(result);
-#else
-std::vector<std::string> Plater::get_colors_for_color_print() const
-{
-    std::vector<std::string> colors = get_extruder_colors_from_plater_config();
-#endif // ENABLE_GCODE_VIEWER
     colors.reserve(colors.size() + p->model.custom_gcode_per_print_z.gcodes.size());
 
     for (const CustomGCode::Item& code : p->model.custom_gcode_per_print_z.gcodes)
@@ -5848,23 +5684,13 @@ PrinterTechnology Plater::printer_technology() const
 
 const DynamicPrintConfig * Plater::config() const { return p->config; }
 
-#if ENABLE_GCODE_VIEWER
 bool Plater::set_printer_technology(PrinterTechnology printer_technology)
-#else
-void Plater::set_printer_technology(PrinterTechnology printer_technology)
-#endif // ENABLE_GCODE_VIEWER
 {
     p->printer_technology = printer_technology;
-#if ENABLE_GCODE_VIEWER
     bool ret = p->background_process.select_technology(printer_technology);
     if (ret) {
         // Update the active presets.
     }
-#else
-    if (p->background_process.select_technology(printer_technology)) {
-        // Update the active presets.
-    }
-#endif // ENABLE_GCODE_VIEWER
     //FIXME for SLA synchronize
     //p->background_process.apply(Model)!
 
@@ -5878,9 +5704,7 @@ void Plater::set_printer_technology(PrinterTechnology printer_technology)
 
     p->sidebar->get_searcher().set_printer_technology(printer_technology);
 
-#if ENABLE_GCODE_VIEWER
     return ret;
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void Plater::changed_object(int obj_idx)
@@ -6028,24 +5852,20 @@ bool Plater::init_view_toolbar()
     return p->init_view_toolbar();
 }
 
-#if ENABLE_GCODE_VIEWER
 void Plater::enable_view_toolbar(bool enable)
 {
     p->view_toolbar.set_enabled(enable);
 }
-#endif // ENABLE_GCODE_VIEWER
 
 bool Plater::init_collapse_toolbar()
 {
     return p->init_collapse_toolbar();
 }
 
-#if ENABLE_GCODE_VIEWER
 void Plater::enable_collapse_toolbar(bool enable)
 {
     p->collapse_toolbar.set_enabled(enable);
 }
-#endif // ENABLE_GCODE_VIEWER
 
 const Camera& Plater::get_camera() const
 {
@@ -6100,7 +5920,6 @@ GLToolbar& Plater::get_collapse_toolbar()
     return p->collapse_toolbar;
 }
 
-#if ENABLE_GCODE_VIEWER
 void Plater::update_preview_bottom_toolbar()
 {
     p->update_preview_bottom_toolbar();
@@ -6120,7 +5939,6 @@ void Plater::reset_gcode_toolpaths()
 {
     p->reset_gcode_toolpaths();
 }
-#endif // ENABLE_GCODE_VIEWER
 
 const Mouse3DController& Plater::get_mouse3d_controller() const
 {
@@ -6189,9 +6007,7 @@ bool Plater::can_undo() const { return p->undo_redo_stack().has_undo_snapshot();
 bool Plater::can_redo() const { return p->undo_redo_stack().has_redo_snapshot(); }
 bool Plater::can_reload_from_disk() const { return p->can_reload_from_disk(); }
 const UndoRedo::Stack& Plater::undo_redo_stack_main() const { return p->undo_redo_stack_main(); }
-#if ENABLE_GCODE_VIEWER
 void Plater::clear_undo_redo_stack_main() { p->undo_redo_stack_main().clear(); }
-#endif // ENABLE_GCODE_VIEWER
 void Plater::enter_gizmos_stack() { p->enter_gizmos_stack(); }
 void Plater::leave_gizmos_stack() { p->leave_gizmos_stack(); }
 bool Plater::inside_snapshot_capture() { return p->inside_snapshot_capture(); }
diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp
index b40548bde..9a286c424 100644
--- a/src/slic3r/GUI/Plater.hpp
+++ b/src/slic3r/GUI/Plater.hpp
@@ -11,9 +11,7 @@
 
 #include "libslic3r/Preset.hpp"
 #include "libslic3r/BoundingBox.hpp"
-#if ENABLE_GCODE_VIEWER
 #include "libslic3r/GCode/GCodeProcessor.hpp"
-#endif // ENABLE_GCODE_VIEWER
 #include "Jobs/Job.hpp"
 #include "Search.hpp"
 
@@ -144,11 +142,9 @@ public:
     void add_model(bool imperial_units = false);
     void import_sl1_archive();
     void extract_config_from_project();
-#if ENABLE_GCODE_VIEWER
     void load_gcode();
     void load_gcode(const wxString& filename);
     void refresh_print();
-#endif // ENABLE_GCODE_VIEWER
 
     std::vector<size_t> load_files(const std::vector<boost::filesystem::path>& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false);
     // To be called when providing a list of files to the GUI slic3r on command line.
@@ -223,9 +219,7 @@ public:
     bool search_string_getter(int idx, const char** label, const char** tooltip);
     // For the memory statistics. 
     const Slic3r::UndoRedo::Stack& undo_redo_stack_main() const;
-#if ENABLE_GCODE_VIEWER
     void clear_undo_redo_stack_main();
-#endif // ENABLE_GCODE_VIEWER
     // Enter / leave the Gizmos specific Undo / Redo stack. To be used by the SLA support point editing gizmo.
     void enter_gizmos_stack();
     void leave_gizmos_stack();
@@ -236,13 +230,8 @@ public:
     void force_print_bed_update();
     // On activating the parent window.
     void on_activate();
-#if ENABLE_GCODE_VIEWER
     std::vector<std::string> get_extruder_colors_from_plater_config(const GCodeProcessor::Result* const result = nullptr) const;
     std::vector<std::string> get_colors_for_color_print(const GCodeProcessor::Result* const result = nullptr) const;
-#else
-    std::vector<std::string> get_extruder_colors_from_plater_config() const;
-    std::vector<std::string> get_colors_for_color_print() const;
-#endif // ENABLE_GCODE_VIEWER
 
     void update_object_menu();
     void show_action_buttons(const bool is_ready_to_slice) const;
@@ -268,11 +257,7 @@ public:
 
     PrinterTechnology   printer_technology() const;
     const DynamicPrintConfig * config() const;
-#if ENABLE_GCODE_VIEWER
     bool                set_printer_technology(PrinterTechnology printer_technology);
-#else
-    void                set_printer_technology(PrinterTechnology printer_technology);
-#endif // ENABLE_GCODE_VIEWER
 
     void copy_selection_to_clipboard();
     void paste_from_clipboard();
@@ -298,13 +283,9 @@ public:
     void sys_color_changed();
 
     bool init_view_toolbar();
-#if ENABLE_GCODE_VIEWER
     void enable_view_toolbar(bool enable);
-#endif // ENABLE_GCODE_VIEWER
     bool init_collapse_toolbar();
-#if ENABLE_GCODE_VIEWER
     void enable_collapse_toolbar(bool enable);
-#endif // ENABLE_GCODE_VIEWER
 
     const Camera& get_camera() const;
     Camera& get_camera();
@@ -323,23 +304,19 @@ public:
     const GLToolbar& get_collapse_toolbar() const;
     GLToolbar& get_collapse_toolbar();
 
-#if ENABLE_GCODE_VIEWER
     void update_preview_bottom_toolbar();
     void update_preview_moves_slider();
     void enable_preview_moves_slider(bool enable);
 
     void reset_gcode_toolpaths();
     void reset_last_loaded_gcode() { m_last_loaded_gcode = ""; }
-#endif // ENABLE_GCODE_VIEWER
 
     const Mouse3DController& get_mouse3d_controller() const;
     Mouse3DController& get_mouse3d_controller();
 
 	void set_bed_shape() const;
-#if ENABLE_GCODE_VIEWER
     void set_bed_shape(const Pointfs& shape, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom = false) const;
-#endif // ENABLE_GCODE_VIEWER
-    
+
 	const NotificationManager* get_notification_manager() const;
 	NotificationManager* get_notification_manager();
 
@@ -394,9 +371,7 @@ private:
     bool 	 m_tracking_popup_menu = false;
     wxString m_tracking_popup_menu_error_message;
 
-#if ENABLE_GCODE_VIEWER
     wxString m_last_loaded_gcode;
-#endif // ENABLE_GCODE_VIEWER
 
     void suppress_snapshots();
     void allow_snapshots();

From c6e9b48db56c79b9d97ca69742b9a04027d8d684 Mon Sep 17 00:00:00 2001
From: David Kocik <kocikdav@gmail.com>
Date: Thu, 19 Nov 2020 09:41:19 +0100
Subject: [PATCH 053/138] eject debug log

---
 src/slic3r/GUI/RemovableDriveManager.cpp | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp
index 0f6f5255e..740064b1a 100644
--- a/src/slic3r/GUI/RemovableDriveManager.cpp
+++ b/src/slic3r/GUI/RemovableDriveManager.cpp
@@ -81,7 +81,7 @@ void RemovableDriveManager::eject_drive()
 #ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
 	this->update();
 #endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
-
+	BOOST_LOG_TRIVIAL(info) << "Ejecting started"; 
 	tbb::mutex::scoped_lock lock(m_drives_mutex);
 	auto it_drive_data = this->find_last_save_path_drive_data();
 	if (it_drive_data != m_current_drives.end()) {
@@ -90,7 +90,7 @@ void RemovableDriveManager::eject_drive()
 		mpath = mpath.substr(0, mpath.size() - 1);
 		HANDLE handle = CreateFileW(boost::nowide::widen(mpath).c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
 		if (handle == INVALID_HANDLE_VALUE) {
-			std::cerr << "Ejecting " << mpath << " failed " << GetLastError() << " \n";
+			BOOST_LOG_TRIVIAL(error) << "Ejecting " << mpath << " failed (handle == INVALID_HANDLE_VALUE): " << GetLastError();
 			assert(m_callback_evt_handler);
 			if (m_callback_evt_handler)
 				wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::pair<DriveData, bool>(*it_drive_data, false)));
@@ -99,19 +99,22 @@ void RemovableDriveManager::eject_drive()
 		DWORD deviceControlRetVal(0);
 		//these 3 commands should eject device safely but they dont, the device does disappear from file explorer but the "device was safely remove" notification doesnt trigger.
 		//sd cards does  trigger WM_DEVICECHANGE messege, usb drives dont
-		DeviceIoControl(handle, FSCTL_LOCK_VOLUME, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr);
-		DeviceIoControl(handle, FSCTL_DISMOUNT_VOLUME, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr);
+		BOOL e1 = DeviceIoControl(handle, FSCTL_LOCK_VOLUME, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr);
+		BOOST_LOG_TRIVIAL(debug) << "FSCTL_LOCK_VOLUME " << e1 << " ; " << deviceControlRetVal << " ; " << GetLastError();
+		BOOL e2 = DeviceIoControl(handle, FSCTL_DISMOUNT_VOLUME, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr);
+		BOOST_LOG_TRIVIAL(debug) << "FSCTL_DISMOUNT_VOLUME " << e2 << " ; " << deviceControlRetVal << " ; " << GetLastError();
 		// some implemenatations also calls IOCTL_STORAGE_MEDIA_REMOVAL here but it returns error to me
 		BOOL error = DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, nullptr, 0, nullptr, 0, &deviceControlRetVal, nullptr);
 		if (error == 0) {
 			CloseHandle(handle);
-			BOOST_LOG_TRIVIAL(error) << "Ejecting " << mpath << " failed " << deviceControlRetVal << " " << GetLastError() << " \n";
+			BOOST_LOG_TRIVIAL(error) << "Ejecting " << mpath << " failed (IOCTL_STORAGE_EJECT_MEDIA)" << deviceControlRetVal << " " << GetLastError();
 			assert(m_callback_evt_handler);
 			if (m_callback_evt_handler)
 				wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::pair<DriveData, bool>(*it_drive_data, false)));
 			return;
 		}
 		CloseHandle(handle);
+		BOOST_LOG_TRIVIAL(info) << "Ejecting finished";
 		assert(m_callback_evt_handler);
 		if (m_callback_evt_handler) 
 			wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::pair< DriveData, bool >(std::move(*it_drive_data), true)));
@@ -256,6 +259,7 @@ void RemovableDriveManager::eject_drive()
 #ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
 	this->update();
 #endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
+	BOOST_LOG_TRIVIAL(info) << "Ejecting started";
 
 	tbb::mutex::scoped_lock lock(m_drives_mutex);
 	auto it_drive_data = this->find_last_save_path_drive_data();
@@ -290,7 +294,7 @@ void RemovableDriveManager::eject_drive()
 		child.wait();
     	int err = child.exit_code();
     	if (err) {
-    		BOOST_LOG_TRIVIAL(error) << "Ejecting failed";
+    		BOOST_LOG_TRIVIAL(error) << "Ejecting failed. Exit code: " << err;
 			assert(m_callback_evt_handler);
 			if (m_callback_evt_handler)
 				wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::pair<DriveData, bool>(*it_drive_data, false)));

From 5144feb3197e6ee575e617bb7ed6d9cd32c671f6 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Thu, 19 Nov 2020 10:57:24 +0100
Subject: [PATCH 054/138] Estimated printing time per layer for SLAPrint Split
 the time if it's needed

---
 src/libslic3r/SLAPrint.hpp      |  2 ++
 src/libslic3r/SLAPrintSteps.cpp | 27 ++++++++------
 src/slic3r/GUI/DoubleSlider.cpp | 63 ++++++++++++++++++++++++++++++---
 src/slic3r/GUI/DoubleSlider.hpp |  3 +-
 src/slic3r/GUI/GUI_Preview.cpp  | 12 ++++---
 5 files changed, 87 insertions(+), 20 deletions(-)

diff --git a/src/libslic3r/SLAPrint.hpp b/src/libslic3r/SLAPrint.hpp
index a4305e0c3..15292273f 100644
--- a/src/libslic3r/SLAPrint.hpp
+++ b/src/libslic3r/SLAPrint.hpp
@@ -350,6 +350,7 @@ struct SLAPrintStatistics
     size_t                          fast_layers_count;
     double                          total_cost;
     double                          total_weight;
+    std::vector<double>             layers_times;
 
     // Config with the filled in print statistics.
     DynamicConfig           config() const;
@@ -366,6 +367,7 @@ struct SLAPrintStatistics
         fast_layers_count = 0;
         total_cost = 0.;
         total_weight = 0.;
+        layers_times.clear();
     }
 };
 
diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp
index 11c8c6f4e..d8bea62ae 100644
--- a/src/libslic3r/SLAPrintSteps.cpp
+++ b/src/libslic3r/SLAPrintSteps.cpp
@@ -671,6 +671,8 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() {
     double models_volume(0.0);
     
     double estim_time(0.0);
+    std::vector<double> layers_times;
+    layers_times.reserve(printer_input.size());
     
     size_t slow_layers = 0;
     size_t fast_layers = 0;
@@ -688,7 +690,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() {
             
             // write vars
             &mutex, &models_volume, &supports_volume, &estim_time, &slow_layers,
-            &fast_layers, &fade_layer_time](size_t sliced_layer_cnt)
+            &fast_layers, &fade_layer_time, &layers_times](size_t sliced_layer_cnt)
     {
         PrintLayer &layer = m_print->m_printer_input[sliced_layer_cnt];
 
@@ -775,20 +777,21 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() {
             else
                 slow_layers++;
             
-            
             // Calculation of the printing time
-            
+
+            double layer_times = 0.0;
             if (sliced_layer_cnt < 3)
-                estim_time += init_exp_time;
-            else if (fade_layer_time > exp_time)
-            {
+                layer_times += init_exp_time;
+            else if (fade_layer_time > exp_time) {
                 fade_layer_time -= delta_fade_time;
-                estim_time += fade_layer_time;
+                layer_times += fade_layer_time;
             }
             else
-                estim_time += exp_time;
-            
-            estim_time += tilt_time;
+                layer_times += exp_time;
+            layer_times += tilt_time;
+
+            layers_times.push_back(layer_times);
+            estim_time += layer_times;
         }
     };
     
@@ -804,8 +807,10 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() {
     // A layers count o the highest object
     if (printer_input.size() == 0)
         print_statistics.estimated_print_time = std::nan("");
-    else
+    else {
         print_statistics.estimated_print_time = estim_time;
+        print_statistics.layers_times = layers_times;
+    }
     
     print_statistics.fast_layers_count = fast_layers;
     print_statistics.slow_layers_count = slow_layers;
diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 3f988acf1..02fcadba8 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -381,9 +381,20 @@ void Control::SetTicksValues(const Info& custom_gcode_per_print_z)
 }
 
 void Control::SetLayersTimes(const std::vector<float>& layers_times)
+{ 
+    m_layers_times.clear();
+    if (layers_times.empty())
+        return;
+    m_layers_times.resize(layers_times.size(), 0.0);
+    m_layers_times[0] = layers_times[0];
+    for (size_t i = 1; i < layers_times.size(); i++)
+        m_layers_times[i] = m_layers_times[i - 1] + layers_times[i];
+}
+
+void Control::SetLayersTimes(const std::vector<double>& layers_times)
 { 
     m_layers_times = layers_times;
-    for (int i = 1; i < m_layers_times.size(); i++)
+    for (size_t i = 1; i < m_layers_times.size(); i++)
         m_layers_times[i] += m_layers_times[i - 1];
 }
 
@@ -579,7 +590,7 @@ void Control::draw_tick_on_mouse_position(wxDC& dc)
     }
 
     tick = get_value_from_position(m_moving_pos);
-    if (tick >= m_max_value || tick <= m_min_value || tick == m_higher_value || tick == m_lower_value)
+    if (tick > m_max_value || tick < m_min_value || tick == m_higher_value || tick == m_lower_value)
         return;
 
     wxCoord new_pos = get_position_from_value(tick);
@@ -597,6 +608,47 @@ void Control::draw_tick_on_mouse_position(wxDC& dc)
     }
 }
 
+static std::string short_and_splitted_time(const std::string& time)
+{
+    // Parse the dhms time format.
+    int days = 0;
+    int hours = 0;
+    int minutes = 0;
+    int seconds = 0;
+    if (time.find('d') != std::string::npos)
+        ::sscanf(time.c_str(), "%dd %dh %dm %ds", &days, &hours, &minutes, &seconds);
+    else if (time.find('h') != std::string::npos)
+        ::sscanf(time.c_str(), "%dh %dm %ds", &hours, &minutes, &seconds);
+    else if (time.find('m') != std::string::npos)
+        ::sscanf(time.c_str(), "%dm %ds", &minutes, &seconds);
+    else if (time.find('s') != std::string::npos)
+        ::sscanf(time.c_str(), "%ds", &seconds);
+
+    // Format the dhm time.
+    char buffer[64];
+    if (days > 0)
+        ::sprintf(buffer, "%dd%dh\n%dm", days, hours, minutes);
+    else if (hours > 0) {
+        if (hours < 10 && minutes < 10 && seconds < 10)
+            ::sprintf(buffer, "%dh%dm%ds", hours, minutes, seconds);
+        else if (hours > 10 && minutes > 10 && seconds > 10)
+            ::sprintf(buffer, "%dh\n%dm\n%ds", hours, minutes, seconds);
+        else if (minutes < 10 && seconds > 10 || minutes > 10 && seconds < 10)
+            ::sprintf(buffer, "%dh\n%dm%ds", hours, minutes, seconds);
+        else
+            ::sprintf(buffer, "%dh%dm\n%ds", hours, minutes, seconds);
+    }
+    else if (minutes > 0) {
+        if (minutes > 10 && seconds > 10)
+            ::sprintf(buffer, "%dm\n%ds", minutes, seconds);
+        else
+            ::sprintf(buffer, "%dm%ds", minutes, seconds);
+    }
+    else
+        ::sprintf(buffer, "%ds", seconds);
+    return buffer;
+}
+
 wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer*/) const
 {
     const int value = tick;
@@ -613,7 +665,7 @@ wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer
         if (label_type == ltEstimatedTime) {
             if (m_values.size() != m_layers_times.size())
                 return "time";
-            return Slic3r::short_time(get_time_dhms(m_layers_times[value]));
+            return short_and_splitted_time(get_time_dhms(m_layers_times[value]));
         }
         wxString str = m_values.empty() ?
             wxString::Format("%.*f", 2, m_label_koef * value) :
@@ -664,7 +716,10 @@ void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, LabelType l
             text_pos = wxPoint(pos.x - text_width - 1 - m_thumb_size.x, pos.y - 0.5 * text_height + 1);
     }
 
-    dc.DrawText(label, text_pos);
+    if (label_type == ltEstimatedTime)
+        dc.DrawLabel(label, wxRect(text_pos, wxSize(text_width, text_height)), wxALIGN_RIGHT);
+    else
+        dc.DrawText(label, text_pos);
 }
 
 void Control::draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) const
diff --git a/src/slic3r/GUI/DoubleSlider.hpp b/src/slic3r/GUI/DoubleSlider.hpp
index 509f6ce1e..57fa5d0f1 100644
--- a/src/slic3r/GUI/DoubleSlider.hpp
+++ b/src/slic3r/GUI/DoubleSlider.hpp
@@ -225,6 +225,7 @@ public:
     Info    GetTicksValues() const;
     void    SetTicksValues(const Info &custom_gcode_per_print_z);
     void    SetLayersTimes(const std::vector<float>& layers_times);
+    void    SetLayersTimes(const std::vector<double>& layers_times);
 
     void    SetDrawMode(bool is_sla_print, bool is_sequential_print);
 #if ENABLE_GCODE_VIEWER
@@ -402,7 +403,7 @@ private:
 
     std::vector<double> m_values;
     TickCodeInfo        m_ticks;
-    std::vector<float>  m_layers_times;
+    std::vector<double> m_layers_times;
 
     std::vector<std::string>    m_extruder_colors;
 
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index 8091792e0..d33c8f22a 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -657,7 +657,8 @@ void Preview::update_layers_slider(const std::vector<double>& layers_z, bool kee
     // Detect and set manipulation mode for double slider
     update_layers_slider_mode();
 
-    CustomGCode::Info& ticks_info_from_model = wxGetApp().plater()->model().custom_gcode_per_print_z;
+    Plater* plater = wxGetApp().plater();
+    CustomGCode::Info& ticks_info_from_model = plater->model().custom_gcode_per_print_z;
     check_layers_slider_values(ticks_info_from_model.gcodes, layers_z);
 
     m_layers_slider->SetSliderValues(layers_z);
@@ -680,12 +681,15 @@ void Preview::update_layers_slider(const std::vector<double>& layers_z, bool kee
     }
     m_layers_slider->SetSelectionSpan(idx_low, idx_high);
     m_layers_slider->SetTicksValues(ticks_info_from_model);
-    m_layers_slider->SetLayersTimes(m_gcode_result->time_statistics.modes[0].layers_times);
 
-    bool sla_print_technology = wxGetApp().plater()->printer_technology() == ptSLA;
+    bool sla_print_technology = plater->printer_technology() == ptSLA;
     bool sequential_print = wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_bool("complete_objects");
     m_layers_slider->SetDrawMode(sla_print_technology, sequential_print);
-    m_layers_slider->SetExtruderColors(wxGetApp().plater()->get_extruder_colors_from_plater_config());
+    m_layers_slider->SetExtruderColors(plater->get_extruder_colors_from_plater_config());
+    if (sla_print_technology)
+        m_layers_slider->SetLayersTimes(plater->sla_print().print_statistics().layers_times);
+    else
+        m_layers_slider->SetLayersTimes(m_gcode_result->time_statistics.modes[0].layers_times);
 
     m_layers_slider_sizer->Show((size_t)0);
     Layout();

From a0239a75095eaff97cd2260de0363dc9b6f1d72a Mon Sep 17 00:00:00 2001
From: David Kocik <kocikdav@gmail.com>
Date: Fri, 20 Nov 2020 09:42:43 +0100
Subject: [PATCH 055/138] close export finished notification after eject atempt

---
 src/slic3r/GUI/Plater.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 16e55db63..46e1fe2fc 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2044,6 +2044,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
 	    this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this, q](RemovableDriveEjectEvent &evt) {
 		    if (evt.data.second) {
 			    this->show_action_buttons(this->ready_to_slice);
+                notification_manager->close_notification_of_type(NotificationType::ExportFinished);
 			    notification_manager->push_notification(format(_L("Successfully unmounted. The device %s(%s) can now be safely removed from the computer."),evt.data.first.name, evt.data.first.path),
 				                                        NotificationManager::NotificationLevel::RegularNotification, *q->get_current_canvas3D());
 		    } else {

From 096d0c9860c3c54aa19cf6d07ad0187a1bc90f34 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Fri, 20 Nov 2020 09:35:04 +0100
Subject: [PATCH 056/138] Fix arrange objectfunction to avoid last object in
 awkward positions.

fixes #3900
---
 src/libslic3r/Arrange.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp
index 6ae7dd6a2..e61f11517 100644
--- a/src/libslic3r/Arrange.cpp
+++ b/src/libslic3r/Arrange.cpp
@@ -277,10 +277,10 @@ protected:
             if (result.empty())
                 score = 0.50 * dist + 0.50 * density;
             else
-                score = R * 0.60 * dist +
-                        (1.0 - R) * 0.20 * density +
-                        0.20 * alignment_score;
-            
+                // Let the density matter more when fewer objects remain
+                score = 0.50 * dist + (1.0 - R) * 0.20 * density +
+                        0.30 * alignment_score;
+
             break;
         }
         case LAST_BIG_ITEM: {

From d5bdaceff200bab6ba06c0ef5f9109ab03c79732 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Wed, 18 Nov 2020 00:06:34 +0100
Subject: [PATCH 057/138] Right mouse reaction to arrange button

Working arrange settings popup
---
 src/libslic3r/Arrange.cpp          | 34 +++++++++++++---------------
 src/libslic3r/Arrange.hpp          |  2 ++
 src/slic3r/GUI/GLCanvas3D.cpp      | 36 +++++++++++++++++++++++++++++-
 src/slic3r/GUI/GLCanvas3D.hpp      | 12 ++++++++++
 src/slic3r/GUI/Jobs/ArrangeJob.cpp |  8 ++++---
 5 files changed, 69 insertions(+), 23 deletions(-)

diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp
index e61f11517..00656a629 100644
--- a/src/libslic3r/Arrange.cpp
+++ b/src/libslic3r/Arrange.cpp
@@ -83,7 +83,7 @@ const double BIG_ITEM_TRESHOLD = 0.02;
 // Fill in the placer algorithm configuration with values carefully chosen for
 // Slic3r.
 template<class PConf>
-void fill_config(PConf& pcfg) {
+void fill_config(PConf& pcfg, const ArrangeParams &params) {
 
     // Align the arranged pile into the center of the bin
     pcfg.alignment = PConf::Alignment::CENTER;
@@ -93,14 +93,17 @@ void fill_config(PConf& pcfg) {
 
     // TODO cannot use rotations until multiple objects of same geometry can
     // handle different rotations.
-    pcfg.rotations = { 0.0 };
+    if (params.allow_rotations)
+        pcfg.rotations = {0., PI / 2., PI, 3. * PI / 2. };
+    else
+        pcfg.rotations = {0.};
 
     // The accuracy of optimization.
     // Goes from 0.0 to 1.0 and scales performance as well
-    pcfg.accuracy = 0.65f;
+    pcfg.accuracy = params.accuracy;
     
     // Allow parallel execution.
-    pcfg.parallel = true;
+    pcfg.parallel = params.parallel;
 }
 
 // Apply penalty to object function result. This is used only when alignment
@@ -304,15 +307,15 @@ protected:
     
 public:
     AutoArranger(const TBin &                  bin,
-                 Distance                      dist,
+                 const ArrangeParams           &params,
                  std::function<void(unsigned)> progressind,
                  std::function<bool(void)>     stopcond)
-        : m_pck(bin, dist)
+        : m_pck(bin, params.min_obj_distance)
         , m_bin(bin)
         , m_bin_area(sl::area(bin))
         , m_norm(std::sqrt(m_bin_area))
     {
-        fill_config(m_pconf);
+        fill_config(m_pconf, params);
 
         // Set up a callback that is called just before arranging starts
         // This functionality is provided by the Nester class (m_pack).
@@ -349,12 +352,6 @@ public:
         
         m_pck.configure(m_pconf);
     }
-    
-    AutoArranger(const TBin &                  bin,
-                 std::function<void(unsigned)> progressind,
-                 std::function<bool(void)>     stopcond)
-        : AutoArranger{bin, 0 /* no min distance */, progressind, stopcond}
-    {}
      
     template<class It> inline void operator()(It from, It to) {
         m_rtree.clear();
@@ -457,7 +454,7 @@ void _arrange(
         std::vector<Item> &           shapes,
         std::vector<Item> &           excludes,
         const BinT &                  bin,
-        const ArrangeParams &         params,
+        const ArrangeParams           &params,
         std::function<void(unsigned)> progressfn,
         std::function<bool()>         stopfn)
 {
@@ -467,11 +464,10 @@ void _arrange(
     
     auto corrected_bin = bin;
     sl::offset(corrected_bin, md);
-    
-    AutoArranger<BinT> arranger{corrected_bin, progressfn, stopfn};
-    
-    arranger.config().accuracy = params.accuracy;
-    arranger.config().parallel = params.parallel;
+    ArrangeParams mod_params = params;
+    mod_params.min_obj_distance = 0;
+
+    AutoArranger<BinT> arranger{corrected_bin, mod_params, progressfn, stopfn};
     
     auto infl = coord_t(std::ceil(params.min_obj_distance / 2.0));
     for (Item& itm : shapes) itm.inflate(infl);
diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp
index 7630ab3e8..65c3984d5 100644
--- a/src/libslic3r/Arrange.hpp
+++ b/src/libslic3r/Arrange.hpp
@@ -78,6 +78,8 @@ struct ArrangeParams {
     
     /// Allow parallel execution.
     bool parallel = true;
+
+    bool allow_rotations = false;
     
     /// Progress indicator callback called when an object gets packed. 
     /// The unsigned argument is the number of items remaining to pack.
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index cd82878c2..ae08d40d9 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -170,7 +170,7 @@ void GLCanvas3D::LayersEditing::init()
 }
 
 void GLCanvas3D::LayersEditing::set_config(const DynamicPrintConfig* config)
-{ 
+{
     m_config = config;
     delete m_slicing_parameters;
     m_slicing_parameters = nullptr;
@@ -1325,6 +1325,9 @@ void GLCanvas3D::update_instance_printable_state_for_objects(std::vector<size_t>
 
 void GLCanvas3D::set_config(const DynamicPrintConfig* config)
 {
+    if (!m_config)
+        m_arrange_settings.distance = min_object_distance(*config);
+
     m_config = config;
     m_layers_editing.set_config(config);
 }
@@ -3847,6 +3850,30 @@ bool GLCanvas3D::_render_search_list(float pos_x) const
     return action_taken;
 }
 
+bool GLCanvas3D::_render_arrange_popup()
+{
+    ImGuiWrapper *imgui = wxGetApp().imgui();
+
+    float x = 0.5f * (float)get_canvas_size().get_width();
+    imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f);
+
+    imgui->begin(_(L("Arrange options")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
+    ArrangeSettings settings = m_arrange_settings;
+
+    if (imgui->slider_float(_(L("Gap size")), &settings.distance, 0.f, 100.f))
+        m_arrange_settings.distance = settings.distance;
+
+    if (imgui->slider_float(_(L("Accuracy")), &settings.accuracy, 0.f, 1.f))
+        m_arrange_settings.accuracy = settings.accuracy;
+
+    if (imgui->checkbox(_(L("Enable rotations")), settings.enable_rotation))
+        m_arrange_settings.enable_rotation = settings.enable_rotation;
+
+    imgui->end();
+
+    return false;
+}
+
 #define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0
 #if ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
 static void debug_output_thumbnail(const ThumbnailData& thumbnail_data)
@@ -4263,6 +4290,13 @@ bool GLCanvas3D::_init_main_toolbar()
     item.sprite_id = 3;
     item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_ARRANGE)); };
     item.enabling_callback = []()->bool { return wxGetApp().plater()->can_arrange(); };
+    item.right.toggable = true;
+    item.right.render_callback = [this](float left, float right, float, float) {
+        if (m_canvas != nullptr)
+        {
+            _render_arrange_popup();
+        }
+    };
     if (!m_main_toolbar.add_item(item))
         return false;
 
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 0975e59a0..c760dc323 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -381,6 +381,13 @@ public:
         Cross
     };
 
+    struct ArrangeSettings
+    {
+        float distance         = 6.;
+        float accuracy         = 0.65f;
+        bool  enable_rotation  = false;
+    };
+
 private:
     wxGLCanvas* m_canvas;
     wxGLContext* m_context;
@@ -452,6 +459,8 @@ private:
     mutable bool m_tooltip_enabled{ true };
     Slope m_slope;
 
+    ArrangeSettings m_arrange_settings;
+
 public:
     explicit GLCanvas3D(wxGLCanvas* canvas);
     ~GLCanvas3D();
@@ -671,6 +680,8 @@ public:
     void use_slope(bool use) { m_slope.use(use); }
     void set_slope_normal_angle(float angle_in_deg) { m_slope.set_normal_angle(angle_in_deg); }
 
+    const ArrangeSettings& get_arrange_settings() const { return m_arrange_settings; }
+
 private:
     bool _is_shown_on_screen() const;
 
@@ -717,6 +728,7 @@ private:
     void _render_selection_sidebar_hints() const;
     bool _render_undo_redo_stack(const bool is_undo, float pos_x) const;
     bool _render_search_list(float pos_x) const;
+    bool _render_arrange_popup();
     void _render_thumbnail_internal(ThumbnailData& thumbnail_data, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const;
     // render thumbnail using an off-screen framebuffer
     void _render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const;
diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
index 41fd717da..9bb26e096 100644
--- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp
+++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
@@ -147,11 +147,13 @@ void ArrangeJob::prepare()
 void ArrangeJob::process()
 {
     static const auto arrangestr = _(L("Arranging"));
-    
-    double dist = min_object_distance(*m_plater->config());
+
+    GLCanvas3D::ArrangeSettings settings =
+        m_plater->canvas3D()->get_arrange_settings();
     
     arrangement::ArrangeParams params;
-    params.min_obj_distance = scaled(dist);
+    params.min_obj_distance = scaled(settings.distance);
+    params.allow_rotations  = settings.enable_rotation;
     
     auto count = unsigned(m_selected.size() + m_unprintable.size());
     Points bedpts = get_bed_shape(*m_plater->config());

From e17e6b4d0e6974eb560ee8c86dff1a28f91d271a Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Fri, 20 Nov 2020 09:28:09 +0100
Subject: [PATCH 058/138] Add minimum bounding box rotation as starting point

---
 src/libslic3r/Arrange.cpp | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp
index 00656a629..e581f4c0f 100644
--- a/src/libslic3r/Arrange.cpp
+++ b/src/libslic3r/Arrange.cpp
@@ -7,6 +7,7 @@
 #include <libnest2d/optimizers/nlopt/subplex.hpp>
 #include <libnest2d/placers/nfpplacer.hpp>
 #include <libnest2d/selections/firstfit.hpp>
+#include <libnest2d/utils/rotcalipers.hpp>
 
 #include <numeric>
 #include <ClipperUtils.hpp>
@@ -449,6 +450,12 @@ template<class Bin> void remove_large_items(std::vector<Item> &items, Bin &&bin)
             ++it : it = items.erase(it);
 }
 
+template<class S> Radians min_area_boundingbox_rotation(const S &sh)
+{
+    return minAreaBoundingBox<S, TCompute<S>, boost::rational<LargeInt>>(sh)
+        .angleToX();
+}
+
 template<class BinT> // Arrange for arbitrary bin type
 void _arrange(
         std::vector<Item> &           shapes,
@@ -483,6 +490,13 @@ void _arrange(
     for (auto &itm : shapes  ) inp.emplace_back(itm);
     for (auto &itm : excludes) inp.emplace_back(itm);
     
+    // Use the minimum bounding box rotation as a starting point.
+    // TODO: This only works for convex hull. If we ever switch to concave
+    // polygon nesting, a convex hull needs to be calculated.
+    if (params.allow_rotations)
+        for (auto &itm : shapes)
+            itm.rotation(min_area_boundingbox_rotation(itm.rawShape()));
+
     arranger(inp.begin(), inp.end());
     for (Item &itm : inp) itm.inflate(-infl);
 }

From bc3696bd42ff5fe7dbf4589e9b403cdd2af050f8 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Wed, 18 Nov 2020 14:38:46 +0100
Subject: [PATCH 059/138] Save and load arrange settings to app_config

---
 src/slic3r/GUI/GLCanvas3D.cpp | 44 ++++++++++++++++++++++++++---------
 src/slic3r/GUI/GLCanvas3D.hpp |  2 +-
 2 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index ae08d40d9..7bab21982 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1091,6 +1091,25 @@ wxDEFINE_EVENT(EVT_GLCANVAS_RELOAD_FROM_DISK, SimpleEvent);
 
 const double GLCanvas3D::DefaultCameraZoomToBoxMarginFactor = 1.25;
 
+GLCanvas3D::ArrangeSettings load_arrange_settings()
+{
+    GLCanvas3D::ArrangeSettings settings;
+
+    std::string dist_str =
+        wxGetApp().app_config->get("arrange", "min_object_distance");
+
+    std::string en_rot_str =
+        wxGetApp().app_config->get("arrange", "enable_rotation");
+
+    if (!dist_str.empty())
+        settings.distance = std::stof(dist_str);
+
+    if (!en_rot_str.empty())
+        settings.enable_rotation = (en_rot_str == "1" || en_rot_str == "yes");
+
+    return settings;
+}
+
 GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas)
     : m_canvas(canvas)
     , m_context(nullptr)
@@ -1133,6 +1152,8 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas)
 #endif // ENABLE_RETINA_GL
     }
 
+    m_arrange_settings = load_arrange_settings();
+
     m_selection.set_volumes(&m_volumes.volumes);
 }
 
@@ -1325,9 +1346,6 @@ void GLCanvas3D::update_instance_printable_state_for_objects(std::vector<size_t>
 
 void GLCanvas3D::set_config(const DynamicPrintConfig* config)
 {
-    if (!m_config)
-        m_arrange_settings.distance = min_object_distance(*config);
-
     m_config = config;
     m_layers_editing.set_config(config);
 }
@@ -3850,7 +3868,7 @@ bool GLCanvas3D::_render_search_list(float pos_x) const
     return action_taken;
 }
 
-bool GLCanvas3D::_render_arrange_popup()
+void GLCanvas3D:: _render_arrange_popup()
 {
     ImGuiWrapper *imgui = wxGetApp().imgui();
 
@@ -3860,18 +3878,19 @@ bool GLCanvas3D::_render_arrange_popup()
     imgui->begin(_(L("Arrange options")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
     ArrangeSettings settings = m_arrange_settings;
 
-    if (imgui->slider_float(_(L("Gap size")), &settings.distance, 0.f, 100.f))
+    auto &appcfg = wxGetApp().app_config;
+
+    if (imgui->slider_float(_(L("Gap size")), &settings.distance, 0.f, 100.f)) {
         m_arrange_settings.distance = settings.distance;
+        appcfg->set("arrange", "min_object_distance", std::to_string(settings.distance));
+    }
 
-    if (imgui->slider_float(_(L("Accuracy")), &settings.accuracy, 0.f, 1.f))
-        m_arrange_settings.accuracy = settings.accuracy;
-
-    if (imgui->checkbox(_(L("Enable rotations")), settings.enable_rotation))
+    if (imgui->checkbox(_(L("Enable rotations")), settings.enable_rotation)) {
         m_arrange_settings.enable_rotation = settings.enable_rotation;
+        appcfg->set("arrange", "enable_rotation", "1");
+    }
 
     imgui->end();
-
-    return false;
 }
 
 #define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0
@@ -4300,6 +4319,9 @@ bool GLCanvas3D::_init_main_toolbar()
     if (!m_main_toolbar.add_item(item))
         return false;
 
+    item.right.toggable = false;
+    item.right.render_callback = GLToolbarItem::Default_Render_Callback;
+
     if (!m_main_toolbar.add_separator())
         return false;
 
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index c760dc323..7a73f8fe4 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -728,7 +728,7 @@ private:
     void _render_selection_sidebar_hints() const;
     bool _render_undo_redo_stack(const bool is_undo, float pos_x) const;
     bool _render_search_list(float pos_x) const;
-    bool _render_arrange_popup();
+    void _render_arrange_popup();
     void _render_thumbnail_internal(ThumbnailData& thumbnail_data, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const;
     // render thumbnail using an off-screen framebuffer
     void _render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const;

From adf81af6de25fe6a0f4eacb33dc17cfed7ed0670 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Fri, 20 Nov 2020 09:32:18 +0100
Subject: [PATCH 060/138] Prototype feature: fill plater with instances of
 selected object

#fixes #1350
---
 src/libslic3r/Arrange.cpp          |  39 ++++----
 src/slic3r/CMakeLists.txt          |   2 +
 src/slic3r/GUI/Jobs/ArrangeJob.cpp |  34 ++++---
 src/slic3r/GUI/Jobs/ArrangeJob.hpp |  57 ++++++------
 src/slic3r/GUI/Jobs/FillBedJob.cpp | 139 +++++++++++++++++++++++++++++
 src/slic3r/GUI/Jobs/FillBedJob.hpp |  46 ++++++++++
 src/slic3r/GUI/Plater.cpp          |  26 +++++-
 src/slic3r/GUI/Plater.hpp          |   2 +
 8 files changed, 286 insertions(+), 59 deletions(-)
 create mode 100644 src/slic3r/GUI/Jobs/FillBedJob.cpp
 create mode 100644 src/slic3r/GUI/Jobs/FillBedJob.hpp

diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp
index e581f4c0f..e4a5c7b42 100644
--- a/src/libslic3r/Arrange.cpp
+++ b/src/libslic3r/Arrange.cpp
@@ -566,28 +566,35 @@ static void process_arrangeable(const ArrangePolygon &arrpoly,
     outp.back().priority(arrpoly.priority);
 }
 
+template<class Fn> auto call_with_bed(const Points &bed, Fn &&fn)
+{
+    if (bed.empty())
+        return fn(InfiniteBed{});
+    else if (bed.size() == 1)
+        return fn(InfiniteBed{bed.front()});
+    else {
+        auto      bb    = BoundingBox(bed);
+        CircleBed circ  = to_circle(bb.center(), bed);
+        auto      parea = poly_area(bed);
+
+        if ((1.0 - parea / area(bb)) < 1e-3)
+            return fn(bb);
+        else if (!std::isnan(circ.radius()))
+            return fn(circ);
+        else
+            return fn(Polygon(bed));
+    }
+}
+
 template<>
 void arrange(ArrangePolygons &      items,
              const ArrangePolygons &excludes,
              const Points &         bed,
              const ArrangeParams &  params)
 {
-    if (bed.empty())
-        arrange(items, excludes, InfiniteBed{}, params);
-    else if (bed.size() == 1)
-        arrange(items, excludes, InfiniteBed{bed.front()}, params);
-    else {
-        auto      bb    = BoundingBox(bed);
-        CircleBed circ  = to_circle(bb.center(), bed);
-        auto      parea = poly_area(bed);
-        
-        if ((1.0 - parea / area(bb)) < 1e-3)
-            arrange(items, excludes, bb, params);
-        else if (!std::isnan(circ.radius()))
-            arrange(items, excludes, circ, params);
-        else
-            arrange(items, excludes, Polygon(bed), params);   
-    }
+    call_with_bed(bed, [&](const auto &bin) {
+        arrange(items, excludes, bin, params);
+    });
 }
 
 template<class BedT>
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index c44b76970..699135d27 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -162,6 +162,8 @@ set(SLIC3R_GUI_SOURCES
     GUI/Jobs/ArrangeJob.cpp
     GUI/Jobs/RotoptimizeJob.hpp
     GUI/Jobs/RotoptimizeJob.cpp
+    GUI/Jobs/FillBedJob.hpp
+    GUI/Jobs/FillBedJob.cpp
     GUI/Jobs/SLAImportJob.hpp
     GUI/Jobs/SLAImportJob.cpp
     GUI/Jobs/ProgressIndicator.hpp
diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
index 9bb26e096..b8f165c02 100644
--- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp
+++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
@@ -46,7 +46,7 @@ public:
     }
 };
 
-static WipeTower get_wipe_tower(Plater &plater)
+static WipeTower get_wipe_tower(const Plater &plater)
 {
     return WipeTower{plater.canvas3D()->get_wipe_tower_info()};
 }
@@ -68,18 +68,13 @@ void ArrangeJob::clear_input()
     m_unprintable.reserve(cunprint /* for optional wti */);
 }
 
-double ArrangeJob::bed_stride() const {
-    double bedwidth = m_plater->bed_shape_bb().size().x();
-    return scaled<double>((1. + LOGICAL_BED_GAP) * bedwidth);
-}
-
 void ArrangeJob::prepare_all() {
     clear_input();
     
     for (ModelObject *obj: m_plater->model().objects)
         for (ModelInstance *mi : obj->instances) {
             ArrangePolygons & cont = mi->printable ? m_selected : m_unprintable;
-            cont.emplace_back(get_arrange_poly(mi));
+            cont.emplace_back(get_arrange_poly(mi, m_plater));
         }
 
     if (auto wti = get_wipe_tower(*m_plater))
@@ -90,7 +85,7 @@ void ArrangeJob::prepare_selected() {
     clear_input();
     
     Model &model = m_plater->model();
-    double stride = bed_stride();
+    double stride = bed_stride(m_plater);
     
     std::vector<const Selection::InstanceIdxsList *>
             obj_sel(model.objects.size(), nullptr);
@@ -111,7 +106,7 @@ void ArrangeJob::prepare_selected() {
                 inst_sel[size_t(inst_id)] = true;
         
         for (size_t i = 0; i < inst_sel.size(); ++i) {
-            ArrangePolygon &&ap = get_arrange_poly(mo->instances[i]);
+            ArrangePolygon &&ap = get_arrange_poly(mo->instances[i], m_plater);
             
             ArrangePolygons &cont = mo->instances[i]->printable ?
                         (inst_sel[i] ? m_selected :
@@ -123,7 +118,7 @@ void ArrangeJob::prepare_selected() {
     }
     
     if (auto wti = get_wipe_tower(*m_plater)) {
-        ArrangePolygon &&ap = get_arrange_poly(&wti);
+        ArrangePolygon &&ap = get_arrange_poly(&wti, m_plater);
         
         m_plater->get_selection().is_wipe_tower() ?
                     m_selected.emplace_back(std::move(ap)) :
@@ -213,14 +208,25 @@ void ArrangeJob::finalize() {
     Job::finalize();
 }
 
-arrangement::ArrangePolygon get_wipe_tower_arrangepoly(Plater &plater)
+std::optional<arrangement::ArrangePolygon>
+get_wipe_tower_arrangepoly(const Plater &plater)
 {
-    return WipeTower{plater.canvas3D()->get_wipe_tower_info()}.get_arrange_polygon();
+    if (auto wti = get_wipe_tower(plater))
+        return wti.get_arrange_polygon();
+
+    return {};
 }
 
-void apply_wipe_tower_arrangepoly(Plater &plater, const arrangement::ArrangePolygon &ap)
+void apply_wipe_tower_arrangepoly(Plater &                           plater,
+                                  const arrangement::ArrangePolygon &ap)
 {
-    WipeTower{plater.canvas3D()->get_wipe_tower_info()}.apply_arrange_result(ap.translation.cast<double>(), ap.rotation);
+    WipeTower{plater.canvas3D()->get_wipe_tower_info()}
+        .apply_arrange_result(ap.translation.cast<double>(), ap.rotation);
+}
+
+double bed_stride(const Plater *plater) {
+    double bedwidth = plater->bed_shape_bb().size().x();
+    return scaled<double>((1. + LOGICAL_BED_GAP) * bedwidth);
 }
 
 }} // namespace Slic3r::GUI
diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.hpp b/src/slic3r/GUI/Jobs/ArrangeJob.hpp
index bd097af6b..f178711e9 100644
--- a/src/slic3r/GUI/Jobs/ArrangeJob.hpp
+++ b/src/slic3r/GUI/Jobs/ArrangeJob.hpp
@@ -14,35 +14,12 @@ class ArrangeJob : public Job
     
     using ArrangePolygon = arrangement::ArrangePolygon;
     using ArrangePolygons = arrangement::ArrangePolygons;
-    
-    // The gap between logical beds in the x axis expressed in ratio of
-    // the current bed width.
-    static const constexpr double LOGICAL_BED_GAP = 1. / 5.;
-    
+
     ArrangePolygons m_selected, m_unselected, m_unprintable;
     
     // clear m_selected and m_unselected, reserve space for next usage
     void clear_input();
-    
-    // Stride between logical beds
-    double bed_stride() const;
-    
-    // Set up arrange polygon for a ModelInstance and Wipe tower
-    template<class T> ArrangePolygon get_arrange_poly(T *obj) const
-    {
-        ArrangePolygon ap = obj->get_arrange_polygon();
-        ap.priority       = 0;
-        ap.bed_idx        = ap.translation.x() / bed_stride();
-        ap.setter         = [obj, this](const ArrangePolygon &p) {
-            if (p.is_arranged()) {
-                Vec2d t = p.translation.cast<double>();
-                t.x() += p.bed_idx * bed_stride();
-                obj->apply_arrange_result(t, p.rotation);
-            }
-        };
-        return ap;
-    }
-    
+
     // Prepare all objects on the bed regardless of the selection
     void prepare_all();
     
@@ -69,9 +46,37 @@ public:
     void finalize() override;
 };
 
-arrangement::ArrangePolygon get_wipe_tower_arrangepoly(Plater &);
+std::optional<arrangement::ArrangePolygon> get_wipe_tower_arrangepoly(const Plater &);
 void apply_wipe_tower_arrangepoly(Plater &plater, const arrangement::ArrangePolygon &ap);
 
+// The gap between logical beds in the x axis expressed in ratio of
+// the current bed width.
+static const constexpr double LOGICAL_BED_GAP = 1. / 5.;
+
+// Stride between logical beds
+double bed_stride(const Plater *plater);
+
+// Set up arrange polygon for a ModelInstance and Wipe tower
+template<class T>
+arrangement::ArrangePolygon get_arrange_poly(T *obj, const Plater *plater)
+{
+    using ArrangePolygon = arrangement::ArrangePolygon;
+
+    ArrangePolygon ap = obj->get_arrange_polygon();
+    ap.priority       = 0;
+    ap.bed_idx        = ap.translation.x() / bed_stride(plater);
+    ap.setter         = [obj, plater](const ArrangePolygon &p) {
+        if (p.is_arranged()) {
+            Vec2d t = p.translation.cast<double>();
+            t.x() += p.bed_idx * bed_stride(plater);
+            obj->apply_arrange_result(t, p.rotation);
+        }
+    };
+
+    return ap;
+}
+
+
 }} // namespace Slic3r::GUI
 
 #endif // ARRANGEJOB_HPP
diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp
new file mode 100644
index 000000000..8c7b3c418
--- /dev/null
+++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp
@@ -0,0 +1,139 @@
+#include "FillBedJob.hpp"
+
+#include "libslic3r/Model.hpp"
+#include "libslic3r/ClipperUtils.hpp"
+
+#include "slic3r/GUI/Plater.hpp"
+#include "slic3r/GUI/GLCanvas3D.hpp"
+#include "slic3r/GUI/GUI_ObjectList.hpp"
+
+#include <numeric>
+
+namespace Slic3r {
+namespace GUI {
+
+void FillBedJob::prepare()
+{
+    m_selected.clear();
+    m_unselected.clear();
+    m_bedpts.clear();
+
+    m_object_idx = m_plater->get_selected_object_idx();
+    if (m_object_idx == -1)
+        return;
+
+    ModelObject *model_object = m_plater->model().objects[m_object_idx];
+    if (model_object->instances.empty()) return;
+
+    m_selected.reserve(model_object->instances.size());
+    for (ModelInstance *inst : model_object->instances)
+        if (inst->printable) {
+            ArrangePolygon ap = get_arrange_poly(inst, m_plater);
+            ++ap.priority; // need to be included in the result
+            m_selected.emplace_back(ap);
+        }
+
+    if (m_selected.empty()) return;
+
+    m_bedpts = get_bed_shape(*m_plater->config());
+
+    auto &objects = m_plater->model().objects;
+    for (size_t idx = 0; idx < objects.size(); ++idx)
+        if (int(idx) != m_object_idx)
+            for (const ModelInstance *mi : objects[idx]->instances) {
+                m_unselected.emplace_back(mi->get_arrange_polygon());
+                m_unselected.back().bed_idx = 0;
+            }
+
+    if (auto wt = get_wipe_tower_arrangepoly(*m_plater))
+        m_unselected.emplace_back(std::move(*wt));
+
+    double sc = scaled<double>(1.) * scaled(1.);
+
+    ExPolygon poly = m_selected.front().poly;
+    double poly_area = poly.area() / sc;
+    double unsel_area = std::accumulate(m_unselected.begin(),
+                                        m_unselected.end(), 0.,
+                                        [](double s, const auto &ap) {
+                                            return s + ap.poly.area();
+                                        }) / sc;
+
+    double fixed_area = unsel_area + m_selected.size() * poly_area;
+
+    // This is the maximum range, the real number will always be close but less.
+    double bed_area = Polygon{m_bedpts}.area() / sc;
+
+    m_status_range = (bed_area - fixed_area) / poly_area;
+
+    ModelInstance *mi = model_object->instances[0];
+    for (int i = 0; i < m_status_range; ++i) {
+        ArrangePolygon ap;
+        ap.poly = m_selected.front().poly;
+        ap.bed_idx = arrangement::UNARRANGED;
+        ap.setter = [this, mi](const ArrangePolygon &p) {
+            ModelObject *mo = m_plater->model().objects[m_object_idx];
+            ModelInstance *inst = mo->add_instance(*mi);
+            inst->apply_arrange_result(p.translation.cast<double>(), p.rotation);
+        };
+        m_selected.emplace_back(ap);
+    }
+}
+
+void FillBedJob::process()
+{
+    if (m_object_idx == -1 || m_selected.empty()) return;
+
+    GLCanvas3D::ArrangeSettings settings =
+        m_plater->canvas3D()->get_arrange_settings();
+
+    arrangement::ArrangeParams params;
+    params.min_obj_distance = scaled(settings.distance);
+    params.allow_rotations  = settings.enable_rotation;
+
+    params.stopcondition = [this]() { return was_canceled(); };
+
+    params.progressind = [this](unsigned st) {
+        if (st > 0)
+            update_status(int(m_status_range - st), _(L("Filling bed")));
+    };
+
+    arrangement::arrange(m_selected, m_unselected, m_bedpts, params);
+
+    // finalize just here.
+    update_status(m_status_range, was_canceled() ?
+                                      _(L("Bed filling canceled.")) :
+                                      _(L("Bed filling done.")));
+}
+
+void FillBedJob::finalize()
+{
+    if (m_object_idx == -1) return;
+
+    ModelObject *model_object = m_plater->model().objects[m_object_idx];
+    if (model_object->instances.empty()) return;
+
+    size_t inst_cnt = model_object->instances.size();
+
+    for (ArrangePolygon &ap : m_selected) {
+        if (ap.priority != 0 || !(ap.bed_idx == arrangement::UNARRANGED || ap.bed_idx > 0))
+            ap.apply();
+    }
+
+    model_object->ensure_on_bed();
+
+    m_plater->update();
+
+    int added_cnt = std::accumulate(m_selected.begin(), m_selected.end(), 0,
+                                     [](int s, auto &ap) {
+                                         return s + int(ap.priority == 0 && ap.bed_idx == 0);
+                                     });
+
+    // FIXME: somebody explain why this is needed for increase_object_instances
+    if (inst_cnt == 1) added_cnt++;
+
+    if (added_cnt > 0)
+        m_plater->sidebar()
+            .obj_list()->increase_object_instances(m_object_idx, size_t(added_cnt));
+}
+
+}} // namespace Slic3r::GUI
diff --git a/src/slic3r/GUI/Jobs/FillBedJob.hpp b/src/slic3r/GUI/Jobs/FillBedJob.hpp
new file mode 100644
index 000000000..448ae53d4
--- /dev/null
+++ b/src/slic3r/GUI/Jobs/FillBedJob.hpp
@@ -0,0 +1,46 @@
+#ifndef FILLBEDJOB_HPP
+#define FILLBEDJOB_HPP
+
+#include "ArrangeJob.hpp"
+
+namespace Slic3r { namespace GUI {
+
+class Plater;
+
+class FillBedJob : public Job
+{
+    Plater *m_plater;
+    int     m_object_idx = -1;
+
+    using ArrangePolygon  = arrangement::ArrangePolygon;
+    using ArrangePolygons = arrangement::ArrangePolygons;
+
+    ArrangePolygons m_selected;
+    ArrangePolygons m_unselected;
+
+    Points m_bedpts;
+
+    int m_status_range = 0;
+
+protected:
+
+    void prepare() override;
+
+public:
+    FillBedJob(std::shared_ptr<ProgressIndicator> pri, Plater *plater)
+        : Job{std::move(pri)}, m_plater{plater}
+    {}
+
+    int status_range() const override
+    {
+        return m_status_range;
+    }
+
+    void process() override;
+
+    void finalize() override;
+};
+
+}} // namespace Slic3r::GUI
+
+#endif // FILLBEDJOB_HPP
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 46e1fe2fc..4b31f10d7 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -63,6 +63,7 @@
 #include "Mouse3DController.hpp"
 #include "Tab.hpp"
 #include "Jobs/ArrangeJob.hpp"
+#include "Jobs/FillBedJob.hpp"
 #include "Jobs/RotoptimizeJob.hpp"
 #include "Jobs/SLAImportJob.hpp"
 #include "BackgroundSlicingProcess.hpp"
@@ -1573,7 +1574,7 @@ struct Plater::priv
     class Jobs: public ExclusiveJobGroup
     {
         priv *m;
-        size_t m_arrange_id, m_rotoptimize_id, m_sla_import_id;
+        size_t m_arrange_id, m_fill_bed_id, m_rotoptimize_id, m_sla_import_id;
         
         void before_start() override { m->background_process.stop(); }
         
@@ -1581,6 +1582,7 @@ struct Plater::priv
         Jobs(priv *_m) : m(_m)
         {
             m_arrange_id = add_job(std::make_unique<ArrangeJob>(m->statusbar(), m->q));
+            m_fill_bed_id = add_job(std::make_unique<FillBedJob>(m->statusbar(), m->q));
             m_rotoptimize_id = add_job(std::make_unique<RotoptimizeJob>(m->statusbar(), m->q));
             m_sla_import_id = add_job(std::make_unique<SLAImportJob>(m->statusbar(), m->q));
         }
@@ -1590,6 +1592,12 @@ struct Plater::priv
             m->take_snapshot(_(L("Arrange")));
             start(m_arrange_id);
         }
+
+        void fill_bed()
+        {
+            m->take_snapshot(_(L("Fill bed")));
+            start(m_fill_bed_id);
+        }
         
         void optimize_rotation()
         {
@@ -2731,8 +2739,8 @@ void Plater::find_new_position(const ModelInstancePtrs &instances,
                 movable.emplace_back(std::move(arrpoly));
         }
     
-    if (p->view3D->get_canvas3d()->get_wipe_tower_info())
-        fixed.emplace_back(get_wipe_tower_arrangepoly(*this));
+    if (auto wt = get_wipe_tower_arrangepoly(*this))
+        fixed.emplace_back(*wt);
     
     arrangement::arrange(movable, fixed, get_bed_shape(*config()),
                          arrangement::ArrangeParams{min_d});
@@ -3860,6 +3868,8 @@ bool Plater::priv::init_common_menu(wxMenu* menu, const bool is_part/* = false*/
             [this](wxCommandEvent&) { q->decrease_instances();      }, "remove_copies",     nullptr, [this]() { return can_decrease_instances(); }, q);
         wxMenuItem* item_set_number_of_copies = append_menu_item(menu, wxID_ANY, _L("Set number of instances") + dots, _L("Change the number of instances of the selected object"),
             [this](wxCommandEvent&) { q->set_number_of_copies();    }, "number_of_copies",  nullptr, [this]() { return can_increase_instances(); }, q);
+        append_menu_item(menu, wxID_ANY, _L("Fill bed with instances") + dots, _L("Fill the remaining area of bed with instances of the selected object"),
+            [this](wxCommandEvent&) { q->fill_bed_with_instances();    }, "",  nullptr, [this]() { return can_increase_instances(); }, q);
 
 
         items_increase.push_back(item_increase);
@@ -4864,6 +4874,11 @@ void Plater::set_number_of_copies(/*size_t num*/)
         decrease_instances(-diff);
 }
 
+void Plater::fill_bed_with_instances()
+{
+    p->m_ui_jobs.fill_bed();
+}
+
 bool Plater::is_selection_empty() const
 {
     return p->get_selection().is_empty() || p->get_selection().is_wipe_tower();
@@ -5648,6 +5663,11 @@ GLCanvas3D* Plater::canvas3D()
     return p->view3D->get_canvas3d();
 }
 
+const GLCanvas3D* Plater::canvas3D() const
+{
+    return p->view3D->get_canvas3d();
+}
+
 GLCanvas3D* Plater::get_current_canvas3D()
 {
     return p->get_current_canvas3D();
diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp
index 9a286c424..0c1d48bc3 100644
--- a/src/slic3r/GUI/Plater.hpp
+++ b/src/slic3r/GUI/Plater.hpp
@@ -181,6 +181,7 @@ public:
     void increase_instances(size_t num = 1);
     void decrease_instances(size_t num = 1);
     void set_number_of_copies(/*size_t num*/);
+    void fill_bed_with_instances();
     bool is_selection_empty() const;
     void scale_selection_to_fit_print_volume();
     void convert_unit(bool from_imperial_unit);
@@ -245,6 +246,7 @@ public:
     int get_selected_object_idx();
     bool is_single_full_object_selection() const;
     GLCanvas3D* canvas3D();
+    const GLCanvas3D * canvas3D() const;
     GLCanvas3D* get_current_canvas3D();
     BoundingBoxf bed_shape_bb() const;
     

From 148f4fe766cb7cf63972686af600d83804a2e8d3 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 20 Nov 2020 11:50:25 +0100
Subject: [PATCH 061/138] GCode Viewer - Fixed crash when switching to tool
 view with gcode generated by slicers other than PrusaSlicer

---
 src/libslic3r/GCode/GCodeProcessor.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index 4d3e16b47..4785c0898 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -817,6 +817,10 @@ void GCodeProcessor::process_file(const std::string& filename, bool apply_postpr
 
     update_estimated_times_stats();
 
+    // ensure at least one (default) color is defined
+    if (m_result.extruder_colors.empty())
+        m_result.extruder_colors.push_back("#FF8000");
+
     // post-process to add M73 lines into the gcode
     if (apply_postprocess)
         m_time_processor.post_process(filename);

From cf42e9fc6e516c930acd4c809ca1ca9aafd5faba Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 20 Nov 2020 12:01:59 +0100
Subject: [PATCH 062/138] Fixed typo

---
 src/slic3r/GUI/ImGuiWrapper.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp
index 5da0efa6e..c1d121380 100644
--- a/src/slic3r/GUI/ImGuiWrapper.cpp
+++ b/src/slic3r/GUI/ImGuiWrapper.cpp
@@ -23,7 +23,7 @@
 
 #include "libslic3r/libslic3r.h"
 #include "libslic3r/Utils.hpp"
-#include "3DScene.hpp"+
+#include "3DScene.hpp"
 #include "GUI.hpp"
 #include "I18N.hpp"
 #include "Search.hpp"

From 8d1e13fccd5e3be505be5f185f0f91b194e95c10 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Fri, 20 Nov 2020 13:36:58 +0100
Subject: [PATCH 063/138] Anchoring of sparse infills can now be disabled.

---
 src/libslic3r/Fill/Fill.cpp            | 26 ++++++++++++--------------
 src/libslic3r/Fill/Fill3DHoneycomb.cpp |  2 +-
 src/libslic3r/Fill/FillAdaptive.cpp    |  2 +-
 src/libslic3r/Fill/FillBase.cpp        | 16 ++++++++--------
 src/libslic3r/Fill/FillBase.hpp        |  8 ++++----
 src/libslic3r/Fill/FillGyroid.cpp      |  2 +-
 src/libslic3r/Fill/FillHoneycomb.cpp   |  2 +-
 src/libslic3r/Fill/FillLine.cpp        |  2 +-
 src/libslic3r/Fill/FillPlanePath.cpp   |  2 +-
 src/libslic3r/Fill/FillRectilinear.cpp |  4 ++--
 src/libslic3r/PrintConfig.cpp          |  5 +++--
 11 files changed, 35 insertions(+), 36 deletions(-)

diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp
index 33ebf4ca2..90cd5699f 100644
--- a/src/libslic3r/Fill/Fill.cpp
+++ b/src/libslic3r/Fill/Fill.cpp
@@ -33,12 +33,11 @@ struct SurfaceFillParams
 
     // FillParams
     float       	density = 0.f;
-    // Don't connect the fill lines around the inner perimeter.
-    bool        	dont_connect = false;
     // Don't adjust spacing to fill the space evenly.
     bool        	dont_adjust = false;
     // Length of the infill anchor along the perimeter line.
-    float 			anchor_length = std::numeric_limits<float>::max();
+    // 1000mm is roughly the maximum length line that fits into a 32bit coord_t.
+    float 			anchor_length = 1000.f;
 
     // width, height of extrusion, nozzle diameter, is bridge
     // For the output, for fill generator.
@@ -67,7 +66,6 @@ struct SurfaceFillParams
 		RETURN_COMPARE_NON_EQUAL(overlap);
 		RETURN_COMPARE_NON_EQUAL(angle);
 		RETURN_COMPARE_NON_EQUAL(density);
-		RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, dont_connect);
 		RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, dont_adjust);
 		RETURN_COMPARE_NON_EQUAL(anchor_length);
 		RETURN_COMPARE_NON_EQUAL(flow.width);
@@ -86,7 +84,6 @@ struct SurfaceFillParams
 				this->overlap 			== rhs.overlap 			&&
 				this->angle   			== rhs.angle   			&&
 				this->density   		== rhs.density   		&&
-				this->dont_connect  	== rhs.dont_connect 	&&
 				this->dont_adjust   	== rhs.dont_adjust 		&&
 				this->anchor_length		== rhs.anchor_length    &&
 				this->flow 				== rhs.flow 			&&
@@ -154,7 +151,11 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
 		        );
 		        
 		        // Calculate flow spacing for infill pattern generation.
-		        if (! surface.is_solid() && ! is_bridge) {
+		        if (surface.is_solid() || is_bridge) {
+		            params.spacing = params.flow.spacing();
+		            // Don't limit anchor length for solid or bridging infill.
+		            params.anchor_length = 1000.f;
+		        } else {
 		            // it's internal infill, so we can calculate a generic flow spacing 
 		            // for all layers, for avoiding the ugly effect of
 		            // misaligned infill on first layer because of different extrusion width and
@@ -167,12 +168,11 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
 			                -1,     // auto width
 			                *layer.object()
 			            ).spacing();
-		        } else
-		            params.spacing = params.flow.spacing();
-
-		        params.anchor_length = float(region_config.infill_anchor);
-		        if (region_config.infill_anchor.percent)
-		        	params.anchor_length *= 0.01 * params.spacing;
+		            // Anchor a sparse infill to inner perimeters with the following anchor length:
+			        params.anchor_length = float(region_config.infill_anchor);
+			        if (region_config.infill_anchor.percent)
+			        	params.anchor_length *= 0.01 * params.spacing;
+		        }
 
 		        auto it_params = set_surface_params.find(params);
 		        if (it_params == set_surface_params.end())
@@ -543,8 +543,6 @@ void Layer::make_ironing()
     fill.z 					 = this->print_z;
     fill.overlap 			 = 0;
     fill_params.density 	 = 1.;
-//    fill_params.dont_connect = true;
-    fill_params.dont_connect = false;
     fill_params.monotonic    = true;
 
 	for (size_t i = 0; i < by_extruder.size(); ++ i) {
diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
index 69a7f9923..2ddca7fe4 100644
--- a/src/libslic3r/Fill/Fill3DHoneycomb.cpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
@@ -165,7 +165,7 @@ void Fill3DHoneycomb::_fill_surface_single(
     polylines = intersection_pl(polylines, to_polygons(expolygon));
 
     // connect lines if needed
-    if (params.dont_connect || polylines.size() <= 1)
+    if (params.dont_connect() || polylines.size() <= 1)
         append(polylines_out, chain_polylines(std::move(polylines)));
     else
         this->connect_infill(std::move(polylines), expolygon, polylines_out, this->spacing, params);
diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 07c454c80..3b6297626 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -1332,7 +1332,7 @@ void Filler::_fill_surface_single(
     }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
-    if (params.dont_connect || all_polylines_with_hooks.size() <= 1)
+    if (params.dont_connect() || all_polylines_with_hooks.size() <= 1)
         append(polylines_out, chain_polylines(std::move(all_polylines_with_hooks)));
     else
         connect_infill(std::move(all_polylines_with_hooks), expolygon, polylines_out, this->spacing, params);
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index cacc79d52..3cb93e073 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -1067,6 +1067,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const Polygons &boundary_s
 void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params)
 {
 	assert(! infill_ordered.empty());
+    assert(params.anchor_length >= 0.01f);
     const auto anchor_length = float(scale_(params.anchor_length));
 
 #if 0
@@ -1239,7 +1240,6 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
         return std::numeric_limits<size_t>::max();
     };
 
-    const float take_max_length = anchor_length > 0.f ? anchor_length : std::numeric_limits<float>::max();
     const float line_half_width = 0.5f * scale_(spacing);
 
 #if 0
@@ -1276,7 +1276,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
         idx_first = get_and_update_merged_with(idx_first);
         assert(idx_first < idx_second);
         assert(idx_second == merged_with[idx_second]);
-        if (could_connect && (anchor_length == 0.f || length < anchor_length * 2.5)) {
+        if (could_connect && length < anchor_length * 2.5) {
             // Take the complete contour.
             // Connect the two polygons using the boundary contour.
             take(infill_ordered[idx_first], infill_ordered[idx_second], boundary[cp1->contour_idx], cp1, cp2, connection_cost.reversed);
@@ -1285,8 +1285,8 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
             infill_ordered[idx_second].points.clear();
         } else {
             // Try to connect cp1 resp. cp2 with a piece of perimeter line.
-            take_limited(infill_ordered[idx_first],  boundary[cp1->contour_idx], boundary_params[cp1->contour_idx], cp1, cp2, connection_cost.reversed, take_max_length, line_half_width);
-            take_limited(infill_ordered[idx_second], boundary[cp1->contour_idx], boundary_params[cp1->contour_idx], cp2, cp1, ! connection_cost.reversed, take_max_length, line_half_width);
+            take_limited(infill_ordered[idx_first],  boundary[cp1->contour_idx], boundary_params[cp1->contour_idx], cp1, cp2, connection_cost.reversed, anchor_length, line_half_width);
+            take_limited(infill_ordered[idx_second], boundary[cp1->contour_idx], boundary_params[cp1->contour_idx], cp2, cp1, ! connection_cost.reversed, anchor_length, line_half_width);
         }
 	}
 #endif
@@ -1314,7 +1314,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
             if (polyline_idx1 != polyline_idx2) {
                 Polyline &polyline1 = infill_ordered[polyline_idx1];
                 Polyline &polyline2 = infill_ordered[polyline_idx2];
-                if (anchor_length == 0.f || arc.arc_length < anchor_length * 2.5) {
+                if (arc.arc_length < anchor_length * 2.5) {
                     // Not closing a loop, connecting the lines.
                     assert(contour[cp1->point_idx] == polyline1.points.front() || contour[cp1->point_idx] == polyline1.points.back());
                     if (contour[cp1->point_idx] == polyline1.points.front())
@@ -1359,7 +1359,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
             assert(contour[contour_point.point_idx] == polyline.points.front() || contour[contour_point.point_idx] == polyline.points.back());
             bool connected = false;
             for (float l : { std::min(lprev, lnext), std::max(lprev, lnext) }) {
-                if (l == std::numeric_limits<float>::max() || (anchor_length > 0.f && l > anchor_length * 2.5))
+                if (l == std::numeric_limits<float>::max() || l > anchor_length * 2.5)
                     break;
                 // Take the complete contour.
                 bool      reversed      = l == lprev;
@@ -1400,9 +1400,9 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
                 float l = std::max(contour_point.contour_not_taken_length_prev, contour_point.contour_not_taken_length_next);
                 if (l > SCALED_EPSILON) {
                     if (contour_point.contour_not_taken_length_prev > contour_point.contour_not_taken_length_next)
-                        take_limited(polyline, contour, contour_params, &contour_point, contour_point.prev_on_contour, true, take_max_length, line_half_width);
+                        take_limited(polyline, contour, contour_params, &contour_point, contour_point.prev_on_contour, true, anchor_length, line_half_width);
                     else
-                        take_limited(polyline, contour, contour_params, &contour_point, contour_point.next_on_contour, false, take_max_length, line_half_width);
+                        take_limited(polyline, contour, contour_params, &contour_point, contour_point.next_on_contour, false, anchor_length, line_half_width);
                 }
             }
         }
diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index 4f8456bfa..4ebad7a8d 100644
--- a/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
@@ -33,15 +33,15 @@ public:
 struct FillParams
 {
     bool        full_infill() const { return density > 0.9999f; }
+    // Don't connect the fill lines around the inner perimeter.
+    bool        dont_connect() const { return anchor_length < 0.05f; }
 
     // Fill density, fraction in <0, 1>
     float       density 		{ 0.f };
 
     // Length of an infill anchor along the perimeter.
-    float       anchor_length   { std::numeric_limits<float>::max() };
-
-    // Don't connect the fill lines around the inner perimeter.
-    bool        dont_connect 	{ false };
+    // 1000mm is roughly the maximum length line that fits into a 32bit coord_t.
+    float       anchor_length   { 1000.f };
 
     // Don't adjust spacing to fill the space evenly.
     bool        dont_adjust 	{ true };
diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index c70c4439e..5cbfed57c 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -192,7 +192,7 @@ void FillGyroid::_fill_surface_single(
 	if (! polylines.empty()) {
 		// connect lines
 		size_t polylines_out_first_idx = polylines_out.size();
-		if (params.dont_connect)
+		if (params.dont_connect())
         	append(polylines_out, chain_polylines(polylines));
         else
             this->connect_infill(std::move(polylines), expolygon, polylines_out, this->spacing, params);
diff --git a/src/libslic3r/Fill/FillHoneycomb.cpp b/src/libslic3r/Fill/FillHoneycomb.cpp
index 8d80529ec..5e7000088 100644
--- a/src/libslic3r/Fill/FillHoneycomb.cpp
+++ b/src/libslic3r/Fill/FillHoneycomb.cpp
@@ -74,7 +74,7 @@ void FillHoneycomb::_fill_surface_single(
     }
     
     all_polylines = intersection_pl(std::move(all_polylines), to_polygons(expolygon));
-    if (params.dont_connect || all_polylines.size() <= 1)
+    if (params.dont_connect() || all_polylines.size() <= 1)
         append(polylines_out, chain_polylines(std::move(all_polylines)));
     else
         connect_infill(std::move(all_polylines), expolygon, polylines_out, this->spacing, params);
diff --git a/src/libslic3r/Fill/FillLine.cpp b/src/libslic3r/Fill/FillLine.cpp
index 1e6ed5284..1cb9b2244 100644
--- a/src/libslic3r/Fill/FillLine.cpp
+++ b/src/libslic3r/Fill/FillLine.cpp
@@ -76,7 +76,7 @@ void FillLine::_fill_surface_single(
     size_t n_polylines_out_old = polylines_out.size();
 
     // connect lines
-    if (! params.dont_connect && ! polylines.empty()) { // prevent calling leftmost_point() on empty collections
+    if (! params.dont_connect() && ! polylines.empty()) { // prevent calling leftmost_point() on empty collections
         // offset the expolygon by max(min_spacing/2, extra)
         ExPolygon expolygon_off;
         {
diff --git a/src/libslic3r/Fill/FillPlanePath.cpp b/src/libslic3r/Fill/FillPlanePath.cpp
index 0ce992ca3..a7a33b13d 100644
--- a/src/libslic3r/Fill/FillPlanePath.cpp
+++ b/src/libslic3r/Fill/FillPlanePath.cpp
@@ -46,7 +46,7 @@ void FillPlanePath::_fill_surface_single(
 //      intersection(polylines_src, offset((Polygons)expolygon, scale_(0.02)), &polylines);
         polylines = intersection_pl(std::move(polylines), to_polygons(expolygon));
         Polylines chained;
-        if (params.dont_connect || params.density > 0.5 || polylines.size() <= 1)
+        if (params.dont_connect() || params.density > 0.5 || polylines.size() <= 1)
             chained = chain_polylines(std::move(polylines));
         else
             connect_infill(std::move(polylines), expolygon, chained, this->spacing, params);
diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp
index 09bb44201..0a75b6729 100644
--- a/src/libslic3r/Fill/FillRectilinear.cpp
+++ b/src/libslic3r/Fill/FillRectilinear.cpp
@@ -1109,7 +1109,7 @@ static void connect_segment_intersections_by_contours(
 	            }
             }
 
-			if (params.dont_connect) {
+			if (params.dont_connect()) {
 				if (itsct.prev_on_contour_quality == SegmentIntersection::LinkQuality::Valid)
 					itsct.prev_on_contour_quality = SegmentIntersection::LinkQuality::TooLong;
 				if (itsct.next_on_contour_quality == SegmentIntersection::LinkQuality::Valid)
@@ -2820,7 +2820,7 @@ bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillPar
             }
     }
 
-    if (params.dont_connect || fill_lines.size() <= 1) {
+    if (params.dont_connect() || fill_lines.size() <= 1) {
         if (fill_lines.size() > 1)
             fill_lines = chain_polylines(std::move(fill_lines));
         append(polylines_out, std::move(fill_lines));
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index e59e67cff..dc2ae61f8 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -1064,14 +1064,15 @@ void PrintConfigDef::init_fff_params()
     def->enum_values.push_back("5");
     def->enum_values.push_back("10");
     def->enum_values.push_back("1000");
-    def->enum_labels.push_back(L("0 (unprintable)"));
+    def->enum_labels.push_back(L("0 (not anchored)"));
     def->enum_labels.push_back("1 mm");
     def->enum_labels.push_back("2 mm");
     def->enum_labels.push_back("5 mm");
     def->enum_labels.push_back("10 mm");
     def->enum_labels.push_back(L("1000 (unlimited)"));
     def->mode = comAdvanced;
-    def->set_default_value(new ConfigOptionFloatOrPercent(300, true));
+//    def->set_default_value(new ConfigOptionFloatOrPercent(300, true));
+    def->set_default_value(new ConfigOptionFloatOrPercent(1000, false));
 
     def = this->add("infill_extruder", coInt);
     def->label = L("Infill extruder");

From 5330b34d0a4e2d293a3a703387ebaf08c21cb795 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Fri, 20 Nov 2020 14:30:48 +0100
Subject: [PATCH 064/138] Added "Filament -> Spool weight" parameter

---
 src/libslic3r/Preset.cpp      |  2 +-
 src/libslic3r/Print.cpp       |  1 +
 src/libslic3r/PrintConfig.cpp |  7 +++++++
 src/libslic3r/PrintConfig.hpp |  2 ++
 src/slic3r/GUI/Plater.cpp     | 38 ++++++++++++++++++++++++++++++++++-
 src/slic3r/GUI/Tab.cpp        | 13 ++++++++++++
 6 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp
index 1f00db49d..0b13745e1 100644
--- a/src/libslic3r/Preset.cpp
+++ b/src/libslic3r/Preset.cpp
@@ -439,7 +439,7 @@ const std::vector<std::string>& Preset::filament_options()
 {
     static std::vector<std::string> s_opts {
         "filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed",
-        "extrusion_multiplier", "filament_density", "filament_cost", "filament_loading_speed", "filament_loading_speed_start", "filament_load_time",
+        "extrusion_multiplier", "filament_density", "filament_cost", "filament_spool_weight", "filament_loading_speed", "filament_loading_speed_start", "filament_load_time",
         "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves",
         "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_minimal_purge_on_wipe_tower",
         "temperature", "first_layer_temperature", "bed_temperature", "first_layer_bed_temperature", "fan_always_on", "cooling", "min_fan_speed",
diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index 47d48dd40..4e4c90fb2 100644
--- a/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -98,6 +98,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
         "filament_density",
         "filament_notes",
         "filament_cost",
+        "filament_spool_weight",
         "first_layer_acceleration",
         "first_layer_bed_temperature",
         "first_layer_speed",
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index dc2ae61f8..3831b08cb 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -806,6 +806,13 @@ void PrintConfigDef::init_fff_params()
     def->min = 0;
     def->set_default_value(new ConfigOptionFloats { 0. });
 
+    def = this->add("filament_spool_weight", coFloats);
+    def->label = L("Spool weight");
+    def->tooltip = L("Enter weight of the spool without filament. This is only for statistical information.");
+    def->sidetext = L("g");
+    def->min = 0;
+    def->set_default_value(new ConfigOptionFloats { 0. });
+
     def = this->add("filament_settings_id", coStrings);
     def->set_default_value(new ConfigOptionStrings { "" });
     def->cli = ConfigOptionDef::nocli;
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 790e15af6..4f887c7c0 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -683,6 +683,7 @@ public:
     ConfigOptionStrings             filament_type;
     ConfigOptionBools               filament_soluble;
     ConfigOptionFloats              filament_cost;
+    ConfigOptionFloats              filament_spool_weight;
     ConfigOptionFloats              filament_max_volumetric_speed;
     ConfigOptionFloats              filament_loading_speed;
     ConfigOptionFloats              filament_loading_speed_start;
@@ -759,6 +760,7 @@ protected:
         OPT_PTR(filament_type);
         OPT_PTR(filament_soluble);
         OPT_PTR(filament_cost);
+        OPT_PTR(filament_spool_weight);
         OPT_PTR(filament_max_volumetric_speed);
         OPT_PTR(filament_loading_speed);
         OPT_PTR(filament_loading_speed_start);
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 4b31f10d7..763a906f5 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1156,7 +1156,43 @@ void Sidebar::update_sliced_info_sizer()
             new_label = imperial_units ? _L("Used Filament (in³)") : _L("Used Filament (mm³)");
             info_text = wxString::Format("%.2f", imperial_units ? ps.total_extruded_volume * koef : ps.total_extruded_volume);
             p->sliced_info->SetTextAndShow(siFilament_mm3,  info_text,      new_label);
-            p->sliced_info->SetTextAndShow(siFilament_g,    ps.total_weight == 0.0 ? "N/A" : wxString::Format("%.2f", ps.total_weight));
+
+            if (ps.total_weight == 0.0)
+                p->sliced_info->SetTextAndShow(siFilament_g, "N/A");
+            else {
+                new_label = _L("Used Filament (g)");
+                info_text = wxString::Format("%.2f", ps.total_weight);
+
+                const std::vector<std::string>& filament_presets = wxGetApp().preset_bundle->filament_presets;
+                const PresetCollection& filaments = wxGetApp().preset_bundle->filaments;
+
+                if (ps.filament_stats.size() > 1)
+                    new_label += ":";
+
+                for (auto filament : ps.filament_stats) {
+                    const Preset* filament_preset = filaments.find_preset(filament_presets[filament.first], false);
+                    if (filament_preset) {
+                        double filament_weight;
+                        if (ps.filament_stats.size() == 1)
+                            filament_weight = ps.total_weight;
+                        else {
+                            double filament_density = filament_preset->config.opt_float("filament_density", 0);
+                            filament_weight = filament.second * filament_density * 2.4052f * 0.001; // assumes 1.75mm filament diameter;
+
+                            new_label += "\n    - " + format_wxstr(_L("Filament at extruder %1%"), filament.first + 1);
+                            info_text += wxString::Format("\n%.2f", filament_weight);
+                        }
+
+                        double spool_weight = filament_preset->config.opt_float("filament_spool_weight", 0);
+                        if (spool_weight != 0.0) {
+                            new_label += "\n      " + _L("(weight with spool)");
+                            info_text += wxString::Format(" (%.2f)\n", filament_weight + spool_weight);
+                        }
+                    }
+                }
+
+                p->sliced_info->SetTextAndShow(siFilament_g, info_text, new_label);
+            }
 
             new_label = _L("Cost");
             if (is_wipe_tower)
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index 3b2f26668..940b4eeb2 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -1785,6 +1785,19 @@ void TabFilament::build()
         optgroup->append_single_option_line("extrusion_multiplier");
         optgroup->append_single_option_line("filament_density");
         optgroup->append_single_option_line("filament_cost");
+        optgroup->append_single_option_line("filament_spool_weight");
+
+        optgroup->m_on_change = [this, optgroup](t_config_option_key opt_key, boost::any value)
+        {
+            update_dirty();
+            if (opt_key == "filament_spool_weight") {
+                // Change of this option influences for an update of "Sliced Info"
+                wxGetApp().sidebar().update_sliced_info_sizer();
+                wxGetApp().sidebar().Layout();
+            }
+            else
+                on_value_change(opt_key, value);
+        };
 
 //        optgroup = page->new_optgroup(_(L("Temperature")) + wxString(" °C", wxConvUTF8));
         optgroup = page->new_optgroup(L("Temperature"));

From f394d26f83171cb399db986b4d6a9de965338adb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com>
Date: Fri, 20 Nov 2020 15:19:49 +0100
Subject: [PATCH 065/138] Added missing includes to fix build on gcc 9

---
 src/libslic3r/Fill/FillBase.cpp | 1 +
 src/libslic3r/Point.cpp         | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 3cb93e073..7ed928741 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -1,4 +1,5 @@
 #include <stdio.h>
+#include <numeric>
 
 #include "../ClipperUtils.hpp"
 #include "../EdgeGrid.hpp"
diff --git a/src/libslic3r/Point.cpp b/src/libslic3r/Point.cpp
index 555a1cb2d..b16abe7be 100644
--- a/src/libslic3r/Point.cpp
+++ b/src/libslic3r/Point.cpp
@@ -2,6 +2,7 @@
 #include "Line.hpp"
 #include "MultiPoint.hpp"
 #include "Int128.hpp"
+#include "BoundingBox.hpp"
 #include <algorithm>
 
 namespace Slic3r {

From bca000a739b4cd328fdf9c92ac66ad2e9ece54eb Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Fri, 20 Nov 2020 17:21:37 +0100
Subject: [PATCH 066/138] Font of the DoubleSliders is changes to default
 (#5121)

---
 src/slic3r/GUI/DoubleSlider.cpp | 12 +++++-------
 src/slic3r/GUI/GUI_Preview.cpp  |  2 +-
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 02fcadba8..4df91fb78 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -137,14 +137,13 @@ Control::Control( wxWindow *parent,
     m_line_pens = { &DARK_GREY_PEN, &GREY_PEN, &LIGHT_GREY_PEN };
     m_segm_pens = { &DARK_ORANGE_PEN, &ORANGE_PEN, &LIGHT_ORANGE_PEN };
 
-    const wxFont& font = GetFont();
-    m_font = is_osx ? font.Smaller().Smaller() : font.Smaller();
+    m_font = GetFont();
+    this->SetMinSize(get_min_size());
 }
 
 void Control::msw_rescale()
 {
-    const wxFont& font = GUI::wxGetApp().normal_font();
-    m_font = is_osx ? font.Smaller().Smaller() : font.Smaller();
+    m_font = GUI::wxGetApp().normal_font();
 
     m_bmp_thumb_higher.msw_rescale();
     m_bmp_thumb_lower .msw_rescale();
@@ -182,8 +181,7 @@ int Control::GetActiveValue() const
 
 wxSize Control::get_min_size() const
 {
-    const int min_side = GUI::wxGetApp().em_unit() * ( is_horizontal() ? (is_osx ? 8 : 6) : 10 );
-
+    const int min_side = GUI::wxGetApp().em_unit() * ( is_horizontal() ? 5 : 11 );
     return wxSize(min_side, min_side);
 }
 
@@ -713,7 +711,7 @@ void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, LabelType l
             text_pos = wxPoint(xx, pos.y - m_thumb_size.x / 2 - text_height - 1);
         }
         else
-            text_pos = wxPoint(pos.x - text_width - 1 - m_thumb_size.x, pos.y - 0.5 * text_height + 1);
+            text_pos = wxPoint(std::max(2, pos.x - text_width - 1 - m_thumb_size.x), pos.y - 0.5 * text_height + 1);
     }
 
     if (label_type == ltEstimatedTime)
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index d33c8f22a..a3b25fba7 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -280,7 +280,7 @@ bool Preview::init(wxWindow* parent, Model* model)
     wxBoxSizer* right_sizer = new wxBoxSizer(wxVERTICAL);
     right_sizer->Add(m_layers_slider_sizer, 1, wxEXPAND, 0);
 
-    m_moves_slider = new DoubleSlider::Control(m_bottom_toolbar_panel, wxID_ANY, 0, 0, 0, 100, wxDefaultPosition, wxSize(-1, 3 * GetTextExtent("m").y), wxSL_HORIZONTAL);
+    m_moves_slider = new DoubleSlider::Control(m_bottom_toolbar_panel, wxID_ANY, 0, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL);
     m_moves_slider->SetDrawMode(DoubleSlider::dmSequentialGCodeView);
 
     wxBoxSizer* bottom_toolbar_sizer = new wxBoxSizer(wxHORIZONTAL);

From 9f30ea535a84b8dc94925a0c8c980fbf84a0cc49 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Fri, 20 Nov 2020 17:23:35 +0100
Subject: [PATCH 067/138] Windows specific: Fixed layout of fields inside the
 OG_CustomCtrl

---
 src/slic3r/GUI/OG_CustomCtrl.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp
index 30c7e76e4..2ed1ea252 100644
--- a/src/slic3r/GUI/OG_CustomCtrl.cpp
+++ b/src/slic3r/GUI/OG_CustomCtrl.cpp
@@ -174,7 +174,15 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
                     label += ":";
 
                     wxCoord label_w, label_h;
+#ifdef __WXMSW__
+                    // when we use 2 monitors with different DPIs, GetTextExtent() return value for the primary display
+                    // so, use dc.GetMultiLineTextExtent on Windows 
+                    wxPaintDC dc(this);
+                    dc.SetFont(m_font);
+                    dc.GetMultiLineTextExtent(label, &label_w, &label_h);
+#else
                     GetTextExtent(label, &label_w, &label_h, 0, 0, &m_font);
+#endif //__WXMSW__
                     h_pos += label_w + 1 + m_h_gap;
                 }                
                 h_pos += (opt.opt.gui_type == "legend" ? 1 : 3) * blinking_button_width;

From 93aaf660cf9914e3a54c9f44ad3ea7c3192077b5 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Fri, 20 Nov 2020 17:50:10 +0100
Subject: [PATCH 068/138] Fixes for arrange menu

Fixed issues:
- Imgui window is aligned with the arrange toolbar button
- Reset and Arrange buttons added onto the window
- Window closes after clicking the canvas or hitting ESC
- Tooltip extended with instructions for using the arrange menu

Remaining issues:
- Imgui arrange button closes the menu after clicked
- Menu is not in "exclusive or" relationship with other imgui windows.
---
 src/slic3r/GUI/GLCanvas3D.cpp | 49 +++++++++++++++++++++++++++++------
 src/slic3r/GUI/GLCanvas3D.hpp |  3 ++-
 2 files changed, 43 insertions(+), 9 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 7bab21982..34278377b 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2392,7 +2392,7 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
         return;
     }
 
-    if (keyCode == WXK_ESCAPE && (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item()))
+    if (keyCode == WXK_ESCAPE && (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item() || _deactivate_arrange_menu()))
         return;
 
     if (m_gizmos.on_char(evt))
@@ -3083,7 +3083,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
         m_dirty = true;
     }
     else if (evt.LeftDown() || evt.RightDown() || evt.MiddleDown()) {
-        if (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item())
+        if (_deactivate_undo_redo_toolbar_items() || _deactivate_search_toolbar_item() || _deactivate_arrange_menu())
             return;
 
         // If user pressed left or right button we first check whether this happened
@@ -3868,11 +3868,12 @@ bool GLCanvas3D::_render_search_list(float pos_x) const
     return action_taken;
 }
 
-void GLCanvas3D:: _render_arrange_popup()
+bool GLCanvas3D::_render_arrange_menu(float pos_x)
 {
     ImGuiWrapper *imgui = wxGetApp().imgui();
 
-    float x = 0.5f * (float)get_canvas_size().get_width();
+    auto canvas_w = float(get_canvas_size().get_width());
+    const float x = pos_x * float(wxGetApp().plater()->get_camera().get_zoom()) + 0.5f * canvas_w;
     imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f);
 
     imgui->begin(_(L("Arrange options")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
@@ -3880,17 +3881,39 @@ void GLCanvas3D:: _render_arrange_popup()
 
     auto &appcfg = wxGetApp().app_config;
 
+    bool settings_changed = false;
+
     if (imgui->slider_float(_(L("Gap size")), &settings.distance, 0.f, 100.f)) {
         m_arrange_settings.distance = settings.distance;
-        appcfg->set("arrange", "min_object_distance", std::to_string(settings.distance));
+        settings_changed = true;
     }
 
     if (imgui->checkbox(_(L("Enable rotations")), settings.enable_rotation)) {
         m_arrange_settings.enable_rotation = settings.enable_rotation;
-        appcfg->set("arrange", "enable_rotation", "1");
+        settings_changed = true;
+    }
+
+    ImGui::Separator();
+
+    if (imgui->button(_(L("Reset")))) {
+        m_arrange_settings = ArrangeSettings{};
+        settings_changed = true;
+    }
+
+    if (settings_changed) {
+        appcfg->set("arrange", "min_object_distance", std::to_string(m_arrange_settings.distance));
+        appcfg->set("arrange", "enable_rotation", m_arrange_settings.enable_rotation? "1" : "0");
+    }
+
+    ImGui::SameLine();
+
+    if (imgui->button(_(L("Arrange")))) {
+        wxGetApp().plater()->arrange();
     }
 
     imgui->end();
+
+    return settings_changed;
 }
 
 #define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0
@@ -4305,7 +4328,7 @@ bool GLCanvas3D::_init_main_toolbar()
 
     item.name = "arrange";
     item.icon_filename = "arrange.svg";
-    item.tooltip = _utf8(L("Arrange")) + " [A]\n" + _utf8(L("Arrange selection")) + " [Shift+A]";
+    item.tooltip = _utf8(L("Arrange")) + " [A]\n" + _utf8(L("Arrange selection")) + " [Shift+A]\n" + _utf8(L("Click right mouse button to show arrangement options"));
     item.sprite_id = 3;
     item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_ARRANGE)); };
     item.enabling_callback = []()->bool { return wxGetApp().plater()->can_arrange(); };
@@ -4313,7 +4336,7 @@ bool GLCanvas3D::_init_main_toolbar()
     item.right.render_callback = [this](float left, float right, float, float) {
         if (m_canvas != nullptr)
         {
-            _render_arrange_popup();
+            _render_arrange_menu(0.5f * (left + right));
         }
     };
     if (!m_main_toolbar.add_item(item))
@@ -6246,6 +6269,16 @@ bool GLCanvas3D::is_search_pressed() const
     return m_main_toolbar.is_item_pressed("search");
 }
 
+bool GLCanvas3D::_deactivate_arrange_menu()
+{
+    if (m_main_toolbar.is_item_pressed("arrange")) {
+        m_main_toolbar.force_right_action(m_main_toolbar.get_item_id("arrange"), *this);
+        return true;
+    }
+
+    return false;
+}
+
 bool GLCanvas3D::_deactivate_search_toolbar_item()
 {
     if (is_search_pressed())
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 7a73f8fe4..7f44901d1 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -728,7 +728,7 @@ private:
     void _render_selection_sidebar_hints() const;
     bool _render_undo_redo_stack(const bool is_undo, float pos_x) const;
     bool _render_search_list(float pos_x) const;
-    void _render_arrange_popup();
+    bool _render_arrange_menu(float pos_x);
     void _render_thumbnail_internal(ThumbnailData& thumbnail_data, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const;
     // render thumbnail using an off-screen framebuffer
     void _render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool show_bed, bool transparent_background) const;
@@ -780,6 +780,7 @@ private:
     bool _deactivate_search_toolbar_item();
     bool _activate_search_toolbar_item();
     bool _deactivate_collapse_toolbar_items();
+    bool _deactivate_arrange_menu();
 
     float get_overlay_window_width() { return LayersEditing::get_overlay_window_width(); }
 

From b7abe7dfa92b738b50ae223b8a9e8944515852bb Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Fri, 20 Nov 2020 18:46:14 +0100
Subject: [PATCH 069/138] Added "Suppress to open hyperlink in browser"
 parameter in Preferences

---
 src/slic3r/GUI/OG_CustomCtrl.cpp | 23 +++++++++++++++++++----
 src/slic3r/GUI/Preferences.cpp   |  8 ++++++++
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp
index 2ed1ea252..9f7ddf3bb 100644
--- a/src/slic3r/GUI/OG_CustomCtrl.cpp
+++ b/src/slic3r/GUI/OG_CustomCtrl.cpp
@@ -239,9 +239,11 @@ void OG_CustomCtrl::OnMotion(wxMouseEvent& event)
 
     wxString language = wxGetApp().app_config->get("translation_language");
 
+    bool suppress_hyperlinks = get_app_config()->get("suppress_hyperlinks") == "1";
+
     for (CtrlLine& line : ctrl_lines) {
         line.is_focused = is_point_in_rect(pos, line.rect_label);
-        if (line.is_focused) {
+        if (line.is_focused && !suppress_hyperlinks) {
             tooltip = get_url(line.og_line.label_path);
             break;
         }
@@ -472,6 +474,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
 {
     Field* field = ctrl->opt_group->get_field(og_line.get_options().front().opt_id);
 
+    bool suppress_hyperlinks = get_app_config()->get("suppress_hyperlinks") == "1";
     if (draw_just_act_buttons) {
         if (field)
             draw_act_bmps(dc, wxPoint(0, v_pos), field->undo_to_sys_bitmap()->bmp(), field->undo_bitmap()->bmp(), field->blink());
@@ -489,7 +492,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
     bool is_url_string = false;
     if (ctrl->opt_group->label_width != 0 && !label.IsEmpty()) {
         const wxColour* text_clr = (option_set.size() == 1 && field ? field->label_color() : og_line.full_Label_color);
-        is_url_string = !og_line.label_path.IsEmpty();
+        is_url_string = !suppress_hyperlinks && !og_line.label_path.IsEmpty();
         h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label + ":", text_clr, ctrl->opt_group->label_width * ctrl->m_em_unit, is_url_string);
     }
 
@@ -529,7 +532,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
             if (is_url_string)
                 is_url_string = false;
             else if(opt == option_set.front())
-                is_url_string = !og_line.label_path.IsEmpty();
+                is_url_string = !suppress_hyperlinks && !og_line.label_path.IsEmpty();
             h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label, field ? field->label_color() : nullptr, ctrl->opt_group->sublabel_width * ctrl->m_em_unit, is_url_string);
         }
 
@@ -668,7 +671,19 @@ wxCoord OG_CustomCtrl::CtrlLine::draw_act_bmps(wxDC& dc, wxPoint pos, const wxBi
 
 bool OG_CustomCtrl::CtrlLine::launch_browser() const
 {
-    return is_focused && !og_line.label_path.IsEmpty() && wxLaunchDefaultBrowser(get_url(og_line.label_path));
+    if (get_app_config()->get("suppress_hyperlinks").empty()) {
+        wxString preferences_item = _L("Suppress to open hyperlink in browser");
+        wxString msg =
+            _L("PrusaSlicer will remember your action.") + "\n" +
+            _L("You will not be asked about it again on label hovering.") + "\n\n" +
+            format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto changes your choise."), preferences_item) + "\n\n" +
+            _L("Should we suppress to use hyperlinks in PrusaSlicer?");
+
+        wxMessageDialog dialog(nullptr, msg, _L("PrusaSlicer: Don't ask me again"), wxYES | wxNO | wxICON_INFORMATION);
+        get_app_config()->set("suppress_hyperlinks", dialog.ShowModal() == wxID_YES ? "1" : "0");
+    }
+
+    return get_app_config()->get("suppress_hyperlinks") == "0" && is_focused && !og_line.label_path.IsEmpty() && wxLaunchDefaultBrowser(get_url(og_line.label_path));
 }
 
 
diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index aed336b5c..4abe4b84c 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -235,6 +235,14 @@ void PreferencesDialog::build()
 	option = Option(def, "seq_top_layer_only");
 	m_optgroup_gui->append_single_option_line(option);
 
+	def.label = L("Suppress to open hyperlink in browser");
+	def.type = coBool;
+	def.tooltip = L("If enabled, the descriptions of configuration parameters in settings tabs woldn't work as hyperlinks. "
+					"If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks.");
+	def.set_default_value(new ConfigOptionBool{ app_config->get("suppress_hyperlinks") == "1" });
+	option = Option(def, "suppress_hyperlinks");
+	m_optgroup_gui->append_single_option_line(option);
+
 	m_optgroup_gui->activate();
 
 	if (is_editor) {

From 54a5c1da1e7b9bcdf7237fc560cffd514bd56a30 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Fri, 20 Nov 2020 18:46:39 +0100
Subject: [PATCH 070/138] Fixed crash in reworked infill anchoring due to
 numeric issues. Added some more asserts to EdgeGrid.

---
 src/libslic3r/EdgeGrid.hpp      | 24 ++++++++++++++++++++----
 src/libslic3r/Fill/FillBase.cpp | 15 +++++++--------
 2 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/src/libslic3r/EdgeGrid.hpp b/src/libslic3r/EdgeGrid.hpp
index 71d636628..fd13ddc7f 100644
--- a/src/libslic3r/EdgeGrid.hpp
+++ b/src/libslic3r/EdgeGrid.hpp
@@ -84,10 +84,14 @@ public:
 	template<typename VISITOR> void visit_cells_intersecting_line(Slic3r::Point p1, Slic3r::Point p2, VISITOR &visitor) const
 	{
 		// End points of the line segment.
-		p1(0) -= m_bbox.min(0);
-		p1(1) -= m_bbox.min(1);
-		p2(0) -= m_bbox.min(0);
-		p2(1) -= m_bbox.min(1);
+		assert(m_bbox.contains(p1));
+		assert(m_bbox.contains(p2));
+		p1 -= m_bbox.min;
+		p2 -= m_bbox.min;
+		assert(p1.x() >= 0 && p1.x() < m_cols * m_resolution);
+		assert(p1.y() >= 0 && p1.y() < m_rows * m_resolution);
+		assert(p2.x() >= 0 && p2.x() < m_cols * m_resolution);
+		assert(p2.y() >= 0 && p2.y() < m_rows * m_resolution);
 		// Get the cells of the end points.
 		coord_t ix = p1(0) / m_resolution;
 		coord_t iy = p1(1) / m_resolution;
@@ -115,18 +119,22 @@ public:
 						ey -= ex;
 						ex = int64_t(dy) * m_resolution;
 						ix += 1;
+						assert(ix <= ixb);
 					}
 					else if (ex == ey) {
 						ex = int64_t(dy) * m_resolution;
 						ey = int64_t(dx) * m_resolution;
 						ix += 1;
 						iy += 1;
+						assert(ix <= ixb);
+						assert(iy <= iyb);
 					}
 					else {
 						assert(ex > ey);
 						ex -= ey;
 						ey = int64_t(dx) * m_resolution;
 						iy += 1;
+						assert(iy <= iyb);
 					}
 					if (! visitor(iy, ix))
 						return;
@@ -141,11 +149,13 @@ public:
 						ey -= ex;
 						ex = int64_t(dy) * m_resolution;
 						ix += 1;
+						assert(ix <= ixb);
 					}
 					else {
 						ex -= ey;
 						ey = int64_t(dx) * m_resolution;
 						iy -= 1;
+						assert(iy >= iyb);
 					}
 					if (! visitor(iy, ix))
 						return;
@@ -163,12 +173,14 @@ public:
 						ey -= ex;
 						ex = int64_t(dy) * m_resolution;
 						ix -= 1;
+						assert(ix >= ixb);
 					}
 					else {
 						assert(ex >= ey);
 						ex -= ey;
 						ey = int64_t(dx) * m_resolution;
 						iy += 1;
+						assert(iy <= iyb);
 					}
 					if (! visitor(iy, ix))
 						return;
@@ -183,6 +195,7 @@ public:
 						ey -= ex;
 						ex = int64_t(dy) * m_resolution;
 						ix -= 1;
+						assert(ix >= ixb);
 					}
 					else if (ex == ey) {
 						// The lower edge of a grid cell belongs to the cell.
@@ -191,10 +204,12 @@ public:
 						if (dx > 0) {
 							ex = int64_t(dy) * m_resolution;
 							ix -= 1;
+							assert(ix >= ixb);
 						}
 						if (dy > 0) {
 							ey = int64_t(dx) * m_resolution;
 							iy -= 1;
+							assert(iy >= iyb);
 						}
 					}
 					else {
@@ -202,6 +217,7 @@ public:
 						ex -= ey;
 						ey = int64_t(dx) * m_resolution;
 						iy -= 1;
+						assert(iy >= iyb);
 					}
 					if (! visitor(iy, ix))
 						return;
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 7ed928741..4e714b570 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -841,7 +841,7 @@ void mark_boundary_segments_touching_infill(
 
 	EdgeGrid::Grid grid;
     // Make sure that the the grid is big enough for queries against the thick segment.
-	grid.set_bbox(boundary_bbox.inflated(distance_colliding + SCALED_EPSILON));
+	grid.set_bbox(boundary_bbox.inflated(distance_colliding * 1.43));
 	// Inflate the bounding box by a thick line width.
 	grid.create(boundary, std::max(clip_distance, distance_colliding) + scale_(10.));
 
@@ -961,9 +961,6 @@ void mark_boundary_segments_touching_infill(
 #endif // INFILL_DEBUG_OUTPUT
 	} visitor(grid, boundary, boundary_parameters, boundary_intersections, distance_colliding);
 
-	BoundingBoxf bboxf(boundary_bbox.min.cast<double>(), boundary_bbox.max.cast<double>());
-	bboxf.offset(- SCALED_EPSILON);
-
 	for (const Polyline &polyline : infill) {
 #ifdef INFILL_DEBUG_OUTPUT
         ++ iStep;
@@ -1019,12 +1016,14 @@ void mark_boundary_segments_touching_infill(
 				Vec2d vperp = perp(v);
 				Vec2d a = pt1 - v - vperp;
 				Vec2d b = pt2 + v - vperp;
-				if (Geometry::liang_barsky_line_clipping(a, b, bboxf))
-					grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor);
+                assert(grid.bbox().contains(a.cast<coord_t>()));
+                assert(grid.bbox().contains(b.cast<coord_t>()));
+				grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor);
 				a = pt1 - v + vperp;
 				b = pt2 + v + vperp;
-				if (Geometry::liang_barsky_line_clipping(a, b, bboxf))
-					grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor);
+                assert(grid.bbox().contains(a.cast<coord_t>()));
+                assert(grid.bbox().contains(b.cast<coord_t>()));
+                grid.visit_cells_intersecting_line(a.cast<coord_t>(), b.cast<coord_t>(), visitor);
 #endif
 #ifdef INFILL_DEBUG_OUTPUT
 //                export_infill_to_svg(boundary, boundary_parameters, boundary_intersections, infill, distance_colliding * 2, debug_out_path("%s-%03d-%03d-%03d.svg", "FillBase-mark_boundary_segments_touching_infill-step", iRun, iStep, int(point_idx)), { polyline });

From 56c37d5c38d91a9a3b4dc25c20cf0ac6e99e635b Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Fri, 20 Nov 2020 18:58:54 +0100
Subject: [PATCH 071/138] Make monotonic infill default for bottom layers as
 well #4963

---
 src/libslic3r/PrintConfig.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 3831b08cb..f61d2ed9c 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -483,7 +483,7 @@ void PrintConfigDef::init_fff_params()
     def->enum_values = def_top_fill_pattern->enum_values;
     def->enum_labels = def_top_fill_pattern->enum_labels;
     def->aliases = def_top_fill_pattern->aliases;
-    def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipRectilinear));
+    def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipMonotonic));
 
     def = this->add("external_perimeter_extrusion_width", coFloatOrPercent);
     def->label = L("External perimeters");

From a2e763d4caf0ef31571b7040add34b9e570b78d6 Mon Sep 17 00:00:00 2001
From: rtyr <36745189+rtyr@users.noreply.github.com>
Date: Sat, 21 Nov 2020 10:22:57 +0100
Subject: [PATCH 072/138] Bumped up creality bundle version to 0.0.7

---
 resources/profiles/Creality.ini | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini
index e911edb32..c9e433524 100644
--- a/resources/profiles/Creality.ini
+++ b/resources/profiles/Creality.ini
@@ -5,7 +5,7 @@
 name = Creality
 # Configuration version of this file. Config file will only be installed, if the config_version differs.
 # This means, the server may force the PrusaSlicer configuration to be downgraded.
-config_version = 0.0.6
+config_version = 0.0.7
 # Where to get the updates from?
 config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/
 # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%

From 9023f092adec704b40061737ae08fdf434ee9116 Mon Sep 17 00:00:00 2001
From: rtyr <36745189+rtyr@users.noreply.github.com>
Date: Sat, 21 Nov 2020 10:24:54 +0100
Subject: [PATCH 073/138] Creality 0.0.7 - updated start g-code

---
 resources/profiles/Creality.idx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/resources/profiles/Creality.idx b/resources/profiles/Creality.idx
index e3091eccc..e2b41cdda 100644
--- a/resources/profiles/Creality.idx
+++ b/resources/profiles/Creality.idx
@@ -1,4 +1,5 @@
 min_slic3r_version = 2.3.0-alpha2
+0.0.7 Updated start g-code for Creality printers
 0.0.6 Added filament profiles, adjusted temperatures, updated start g-code for some models.
 0.0.5 Added 0.08mm SUPERDETAIL and 0.28mm SUPERDRAFT print profiles. Updated OPTIMAL print profile.
 0.0.4 Added initial CR-10 profile, end g-code improvements.

From 0e6acbc0e29fe41c310d655b257d0a72a8e62fae Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Sat, 21 Nov 2020 10:36:10 +0100
Subject: [PATCH 074/138] Preview - Visualization of wipe mones

---
 src/libslic3r/GCode.cpp                |  8 +++
 src/libslic3r/GCode/GCodeProcessor.cpp | 42 +++++++++++++++
 src/libslic3r/GCode/GCodeProcessor.hpp | 15 ++++++
 src/libslic3r/Technologies.hpp         |  7 +++
 src/slic3r/GUI/GCodeViewer.cpp         | 71 ++++++++++++++++++++++++++
 src/slic3r/GUI/GCodeViewer.hpp         |  9 ++++
 src/slic3r/GUI/GUI_Preview.cpp         |  6 +++
 src/slic3r/GUI/GUI_Preview.hpp         |  3 ++
 8 files changed, 161 insertions(+)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index e592466c7..86a89fd6f 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -256,6 +256,10 @@ namespace Slic3r {
 
             // subdivide the retraction in segments
             if (!wipe_path.empty()) {
+#if ENABLE_SHOW_WIPE_MOVES
+                // add tag for processor
+                gcode += ";" + GCodeProcessor::Wipe_Start_Tag + "\n";
+#endif // ENABLE_SHOW_WIPE_MOVES
                 for (const Line& line : wipe_path.lines()) {
                     double segment_length = line.length();
                     /*  Reduce retraction length a bit to avoid effective retraction speed to be greater than the configured one
@@ -270,6 +274,10 @@ namespace Slic3r {
                         "wipe and retract"
                     );
                 }
+#if ENABLE_SHOW_WIPE_MOVES
+                // add tag for processor
+                gcode += ";" + GCodeProcessor::Wipe_End_Tag + "\n";
+#endif // ENABLE_SHOW_WIPE_MOVES
                 gcodegen.set_last_pos(wipe_path.points.back());
             }
 
diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index 4785c0898..7e12439d7 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -25,6 +25,10 @@ static const float DEFAULT_ACCELERATION = 1500.0f; // Prusa Firmware 1_75mm_MK2
 namespace Slic3r {
 
 const std::string GCodeProcessor::Extrusion_Role_Tag = "TYPE:";
+#if ENABLE_SHOW_WIPE_MOVES
+const std::string GCodeProcessor::Wipe_Start_Tag     = "WIPE_START";
+const std::string GCodeProcessor::Wipe_End_Tag       = "WIPE_END";
+#endif // ENABLE_SHOW_WIPE_MOVES
 const std::string GCodeProcessor::Height_Tag         = "HEIGHT:";
 const std::string GCodeProcessor::Layer_Change_Tag   = "LAYER_CHANGE";
 const std::string GCodeProcessor::Color_Change_Tag   = "COLOR_CHANGE";
@@ -35,6 +39,11 @@ const std::string GCodeProcessor::First_Line_M73_Placeholder_Tag          = "; _
 const std::string GCodeProcessor::Last_Line_M73_Placeholder_Tag           = "; _GP_LAST_LINE_M73_PLACEHOLDER";
 const std::string GCodeProcessor::Estimated_Printing_Time_Placeholder_Tag = "; _GP_ESTIMATED_PRINTING_TIME_PLACEHOLDER";
 
+#if ENABLE_SHOW_WIPE_MOVES
+const float GCodeProcessor::Wipe_Width = 0.05f;
+const float GCodeProcessor::Wipe_Height = 0.05f;
+#endif // ENABLE_SHOW_WIPE_MOVES
+
 #if ENABLE_GCODE_VIEWER_DATA_CHECKING
 const std::string GCodeProcessor::Width_Tag      = "WIDTH:";
 const std::string GCodeProcessor::Mm3_Per_Mm_Tag = "MM3_PER_MM:";
@@ -725,6 +734,9 @@ void GCodeProcessor::reset()
     m_end_position = { 0.0f, 0.0f, 0.0f, 0.0f };
     m_origin = { 0.0f, 0.0f, 0.0f, 0.0f };
     m_cached_position.reset();
+#if ENABLE_SHOW_WIPE_MOVES
+    m_wiping = false;
+#endif // ENABLE_SHOW_WIPE_MOVES
 
     m_feedrate = 0.0f;
     m_width = 0.0f;
@@ -806,6 +818,16 @@ void GCodeProcessor::process_file(const std::string& filename, bool apply_postpr
         process_gcode_line(line);
         });
 
+#if ENABLE_SHOW_WIPE_MOVES
+    // update width/height of wipe moves
+    for (MoveVertex& move : m_result.moves) {
+        if (move.type == EMoveType::Wipe) {
+            move.width = Wipe_Width;
+            move.height = Wipe_Height;
+        }
+    }
+#endif // ENABLE_SHOW_WIPE_MOVES
+
     // process the time blocks
     for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) {
         TimeMachine& machine = m_time_processor.machines[i];
@@ -1031,6 +1053,20 @@ void GCodeProcessor::process_tags(const std::string_view comment)
         return;
     }
 
+#if ENABLE_SHOW_WIPE_MOVES
+    // wipe start tag
+    if (starts_with(comment, Wipe_Start_Tag)) {
+        m_wiping = true;
+        return;
+    }
+
+    // wipe end tag
+    if (starts_with(comment, Wipe_End_Tag)) {
+        m_wiping = false;
+        return;
+    }
+#endif // ENABLE_SHOW_WIPE_MOVES
+
     if ((!m_producers_enabled || m_producer == EProducer::PrusaSlicer) &&
         starts_with(comment, Height_Tag)) {
         // height tag
@@ -1427,7 +1463,13 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
     auto move_type = [this](const AxisCoords& delta_pos) {
         EMoveType type = EMoveType::Noop;
 
+#if ENABLE_SHOW_WIPE_MOVES
+        if (m_wiping)
+            type = EMoveType::Wipe;
+        else if (delta_pos[E] < 0.0f)
+#else
         if (delta_pos[E] < 0.0f)
+#endif // ENABLE_SHOW_WIPE_MOVES
             type = (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f || delta_pos[Z] != 0.0f) ? EMoveType::Travel : EMoveType::Retract;
         else if (delta_pos[E] > 0.0f) {
             if (delta_pos[X] == 0.0f && delta_pos[Y] == 0.0f)
diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp
index ea13d9981..1911c83ad 100644
--- a/src/libslic3r/GCode/GCodeProcessor.hpp
+++ b/src/libslic3r/GCode/GCodeProcessor.hpp
@@ -24,6 +24,9 @@ namespace Slic3r {
         Pause_Print,
         Custom_GCode,
         Travel,
+#if ENABLE_SHOW_WIPE_MOVES
+        Wipe,
+#endif // ENABLE_SHOW_WIPE_MOVES
         Extrude,
         Count
     };
@@ -69,6 +72,10 @@ namespace Slic3r {
     {
     public:
         static const std::string Extrusion_Role_Tag;
+#if ENABLE_SHOW_WIPE_MOVES
+        static const std::string Wipe_Start_Tag;
+        static const std::string Wipe_End_Tag;
+#endif // ENABLE_SHOW_WIPE_MOVES
         static const std::string Height_Tag;
         static const std::string Layer_Change_Tag;
         static const std::string Color_Change_Tag;
@@ -78,6 +85,11 @@ namespace Slic3r {
         static const std::string Last_Line_M73_Placeholder_Tag;
         static const std::string Estimated_Printing_Time_Placeholder_Tag;
 
+#if ENABLE_SHOW_WIPE_MOVES
+        static const float Wipe_Width;
+        static const float Wipe_Height;
+#endif // ENABLE_SHOW_WIPE_MOVES
+
 #if ENABLE_GCODE_VIEWER_DATA_CHECKING
         static const std::string Width_Tag;
         static const std::string Mm3_Per_Mm_Tag;
@@ -390,6 +402,9 @@ namespace Slic3r {
         AxisCoords m_end_position; // mm
         AxisCoords m_origin; // mm
         CachedPosition m_cached_position;
+#if ENABLE_SHOW_WIPE_MOVES
+        bool m_wiping;
+#endif // ENABLE_SHOW_WIPE_MOVES
 
         float m_feedrate; // mm/s
         float m_width; // mm
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 66258fe62..29a3721ff 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -74,4 +74,11 @@
 #define ENABLE_SHOW_OPTION_POINT_LAYERS (1 && ENABLE_GCODE_VIEWER && ENABLE_2_3_0_ALPHA4)
 
 
+//===================
+// 2.3.0.beta1 techs
+//===================
+#define ENABLE_2_3_0_BETA1 1
+
+#define ENABLE_SHOW_WIPE_MOVES (1 && ENABLE_GCODE_VIEWER && ENABLE_2_3_0_BETA1)
+
 #endif // _prusaslicer_technologies_h_
diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index 4be9f5fbd..063169d97 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -272,6 +272,10 @@ const std::vector<GCodeViewer::Color> GCodeViewer::Travel_Colors {{
     { 0.505f, 0.064f, 0.028f }  // Retract
 }};
 
+#if ENABLE_SHOW_WIPE_MOVES
+const GCodeViewer::Color GCodeViewer::Wipe_Color = { 1.0f, 1.0f, 0.0f };
+#endif // ENABLE_SHOW_WIPE_MOVES
+
 const std::vector<GCodeViewer::Color> GCodeViewer::Range_Colors {{
     { 0.043f, 0.173f, 0.478f }, // bluish
     { 0.075f, 0.349f, 0.522f },
@@ -456,6 +460,9 @@ void GCodeViewer::render() const
                 buffer.shader = wxGetApp().is_glsl_version_greater_or_equal_to(1, 20) ? "options_120" : "options_110";
                 break;
             }
+#if ENABLE_SHOW_WIPE_MOVES
+            case EMoveType::Wipe:
+#endif // ENABLE_SHOW_WIPE_MOVES
             case EMoveType::Extrude: {
                 buffer.shader = "gouraud_light";
                 break;
@@ -569,6 +576,9 @@ unsigned int GCodeViewer::get_options_visibility_flags() const
 
     unsigned int flags = 0;
     flags = set_flag(flags, static_cast<unsigned int>(Preview::OptionType::Travel), is_toolpath_move_type_visible(EMoveType::Travel));
+#if ENABLE_SHOW_WIPE_MOVES
+    flags = set_flag(flags, static_cast<unsigned int>(Preview::OptionType::Wipe), is_toolpath_move_type_visible(EMoveType::Wipe));
+#endif // ENABLE_SHOW_WIPE_MOVES
     flags = set_flag(flags, static_cast<unsigned int>(Preview::OptionType::Retractions), is_toolpath_move_type_visible(EMoveType::Retract));
     flags = set_flag(flags, static_cast<unsigned int>(Preview::OptionType::Unretractions), is_toolpath_move_type_visible(EMoveType::Unretract));
     flags = set_flag(flags, static_cast<unsigned int>(Preview::OptionType::ToolChanges), is_toolpath_move_type_visible(EMoveType::Tool_change));
@@ -588,6 +598,9 @@ void GCodeViewer::set_options_visibility_from_flags(unsigned int flags)
     };
 
     set_toolpath_move_type_visible(EMoveType::Travel, is_flag_set(static_cast<unsigned int>(Preview::OptionType::Travel)));
+#if ENABLE_SHOW_WIPE_MOVES
+    set_toolpath_move_type_visible(EMoveType::Wipe, is_flag_set(static_cast<unsigned int>(Preview::OptionType::Wipe)));
+#endif // ENABLE_SHOW_WIPE_MOVES
     set_toolpath_move_type_visible(EMoveType::Retract, is_flag_set(static_cast<unsigned int>(Preview::OptionType::Retractions)));
     set_toolpath_move_type_visible(EMoveType::Unretract, is_flag_set(static_cast<unsigned int>(Preview::OptionType::Unretractions)));
     set_toolpath_move_type_visible(EMoveType::Tool_change, is_flag_set(static_cast<unsigned int>(Preview::OptionType::ToolChanges)));
@@ -925,6 +938,9 @@ void GCodeViewer::init()
             buffer.vertices.format = VBuffer::EFormat::Position;
             break;
         }
+#if ENABLE_SHOW_WIPE_MOVES
+        case EMoveType::Wipe:
+#endif // ENABLE_SHOW_WIPE_MOVES
         case EMoveType::Extrude:
         {
             buffer.render_primitive_type = TBuffer::ERenderPrimitiveType::Triangle;
@@ -1392,6 +1408,14 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
 #endif // ENABLE_SHOW_OPTION_POINT_LAYERS
     }
 
+#if ENABLE_SHOW_WIPE_MOVES
+    // move the wipe toolpaths half height up to render them on proper position
+    std::vector<float>& wipe_vertices = vertices[buffer_id(EMoveType::Wipe)];
+    for (size_t i = 2; i < wipe_vertices.size(); i += 3) {
+        wipe_vertices[i] += 0.5f * GCodeProcessor::Wipe_Height;
+    }
+#endif // ENABLE_SHOW_WIPE_MOVES
+
     log_memory_usage("Loaded G-code generated vertex buffers, ", vertices, indices);
 
     // toolpaths data -> send vertices data to gpu
@@ -1425,7 +1449,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
         buffer.paths.clear();
     }
     // variable used to keep track of the current size (in vertices) of the vertex buffer
+#if ENABLE_SHOW_WIPE_MOVES
+    std::vector<size_t> curr_buffer_vertices_size(m_buffers.size(), 0);
+#else
     size_t curr_buffer_vertices_size = 0;
+#endif // ENABLE_SHOW_WIPE_MOVES
     for (size_t i = 0; i < m_moves_count; ++i) {
         // skip first vertex
         if (i == 0)
@@ -1453,7 +1481,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
         // create another index buffer, and move the current path indices into it
         if (buffer_indices.back().size() >= THRESHOLD - static_cast<size_t>(buffer.indices_per_segment())) {
             buffer_indices.push_back(IndexBuffer());
+#if ENABLE_SHOW_WIPE_MOVES
+            if (buffer.render_primitive_type != TBuffer::ERenderPrimitiveType::Point) {
+#else
             if (curr.type == EMoveType::Extrude || curr.type == EMoveType::Travel) {
+#endif // ENABLE_SHOW_WIPE_MOVES
                 if (!(prev.type != curr.type || !buffer.paths.back().matches(curr))) {
                     Path& last_path = buffer.paths.back();
                     size_t delta_id = last_path.last.i_id - last_path.first.i_id;
@@ -1484,7 +1516,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
             break;
         }
         case TBuffer::ERenderPrimitiveType::Triangle: {
+#if ENABLE_SHOW_WIPE_MOVES
+            add_indices_as_solid(prev, curr, buffer, curr_buffer_vertices_size[id], static_cast<unsigned int>(buffer_indices.size()) - 1, buffer_indices.back(), i);
+#else
             add_indices_as_solid(prev, curr, buffer, curr_buffer_vertices_size, static_cast<unsigned int>(buffer_indices.size()) - 1, buffer_indices.back(), i);
+#endif // ENABLE_SHOW_WIPE_MOVES
             break;
         }
         }
@@ -1529,6 +1565,13 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
     for (size_t i = 0; i < travel_buffer_indices.size(); ++i) {
         m_statistics.travel_segments_count = travel_buffer_indices[i].size() / m_buffers[travel_buffer_id].indices_per_segment();
     }
+#if ENABLE_SHOW_WIPE_MOVES
+    unsigned int wipe_buffer_id = buffer_id(EMoveType::Wipe);
+    const MultiIndexBuffer& wipe_buffer_indices = indices[wipe_buffer_id];
+    for (size_t i = 0; i < wipe_buffer_indices.size(); ++i) {
+        m_statistics.wipe_segments_count = wipe_buffer_indices[i].size() / m_buffers[wipe_buffer_id].indices_per_segment();
+    }
+#endif // ENABLE_SHOW_WIPE_MOVES
     unsigned int extrude_buffer_id = buffer_id(EMoveType::Extrude);
     const MultiIndexBuffer& extrude_buffer_indices = indices[extrude_buffer_id];
     for (size_t i = 0; i < extrude_buffer_indices.size(); ++i) {
@@ -1865,6 +1908,9 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool
 
             break;
         }
+#if ENABLE_SHOW_WIPE_MOVES
+        case EMoveType::Wipe: { color = Wipe_Color; break; }
+#endif // ENABLE_SHOW_WIPE_MOVES
         default: { color = { 0.0f, 0.0f, 0.0f }; break; }
         }
 
@@ -2597,6 +2643,28 @@ void GCodeViewer::render_legend() const
         }
     }
 
+#if ENABLE_SHOW_WIPE_MOVES
+    // wipe paths section
+    if (m_buffers[buffer_id(EMoveType::Wipe)].visible) {
+        switch (m_view_type)
+        {
+        case EViewType::Feedrate:
+        case EViewType::Tool:
+        case EViewType::ColorPrint: { break; }
+        default: {
+            // title
+            ImGui::Spacing();
+            imgui.title(_u8L("Wipe"));
+
+            // items
+            append_item(EItemType::Line, Wipe_Color, _u8L("Wipe"));
+
+            break;
+        }
+        }
+    }
+#endif // ENABLE_SHOW_WIPE_MOVES
+
     auto any_option_available = [this]() {
         auto available = [this](EMoveType type) {
             const TBuffer& buffer = m_buffers[buffer_id(type)];
@@ -2825,6 +2893,9 @@ void GCodeViewer::render_statistics() const
 
     if (ImGui::CollapsingHeader("Other")) {
         add_counter(std::string("Travel segments count:"), m_statistics.travel_segments_count);
+#if ENABLE_SHOW_WIPE_MOVES
+        add_counter(std::string("Wipe segments count:"), m_statistics.wipe_segments_count);
+#endif // ENABLE_SHOW_WIPE_MOVES
         add_counter(std::string("Extrude segments count:"), m_statistics.extrude_segments_count);
         add_counter(std::string("Max vertices in vertex buffer:"), m_statistics.max_vertices_in_vertex_buffer);
         add_counter(std::string("Max indices in index buffer:"), m_statistics.max_indices_in_index_buffer);
diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp
index 639a5b430..1a11b633e 100644
--- a/src/slic3r/GUI/GCodeViewer.hpp
+++ b/src/slic3r/GUI/GCodeViewer.hpp
@@ -24,6 +24,9 @@ class GCodeViewer
     static const std::vector<Color> Extrusion_Role_Colors;
     static const std::vector<Color> Options_Colors;
     static const std::vector<Color> Travel_Colors;
+#if ENABLE_SHOW_WIPE_MOVES
+    static const Color              Wipe_Color;
+#endif // ENABLE_SHOW_WIPE_MOVES
     static const std::vector<Color> Range_Colors;
 
     enum class EOptionsColors : unsigned char
@@ -327,6 +330,9 @@ class GCodeViewer
         long long render_paths_size{ 0 };
         // other
         long long travel_segments_count{ 0 };
+#if ENABLE_SHOW_WIPE_MOVES
+        long long wipe_segments_count{ 0 };
+#endif // ENABLE_SHOW_WIPE_MOVES
         long long extrude_segments_count{ 0 };
         long long max_vertices_in_vertex_buffer{ 0 };
         long long max_indices_in_index_buffer{ 0 };
@@ -361,6 +367,9 @@ class GCodeViewer
 
         void reset_others() {
             travel_segments_count = 0;
+#if ENABLE_SHOW_WIPE_MOVES
+            wipe_segments_count = 0;
+#endif // ENABLE_SHOW_WIPE_MOVES
             extrude_segments_count =  0;
             max_vertices_in_vertex_buffer = 0;
             max_indices_in_index_buffer = 0;
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index d33c8f22a..9b3f708b4 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -262,6 +262,9 @@ bool Preview::init(wxWindow* parent, Model* model)
     m_combochecklist_options->Create(m_bottom_toolbar_panel, wxID_ANY, _L("Options"), wxDefaultPosition, wxDefaultSize, wxCB_READONLY);
     std::string options_items = GUI::into_u8(
         get_option_type_string(OptionType::Travel) + "|0|" +
+#if ENABLE_SHOW_WIPE_MOVES
+        get_option_type_string(OptionType::Wipe) + "|0|" +
+#endif // ENABLE_SHOW_WIPE_MOVES
         get_option_type_string(OptionType::Retractions) + "|0|" +
         get_option_type_string(OptionType::Unretractions) + "|0|" +
         get_option_type_string(OptionType::ToolChanges) + "|0|" +
@@ -971,6 +974,9 @@ wxString Preview::get_option_type_string(OptionType type) const
     switch (type)
     {
     case OptionType::Travel:        { return _L("Travel"); }
+#if ENABLE_SHOW_WIPE_MOVES
+    case OptionType::Wipe:          { return _L("Wipe"); }
+#endif // ENABLE_SHOW_WIPE_MOVES
     case OptionType::Retractions:   { return _L("Retractions"); }
     case OptionType::Unretractions: { return _L("Deretractions"); }
     case OptionType::ToolChanges:   { return _L("Tool changes"); }
diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp
index 76fef117e..daa92d0b2 100644
--- a/src/slic3r/GUI/GUI_Preview.hpp
+++ b/src/slic3r/GUI/GUI_Preview.hpp
@@ -113,6 +113,9 @@ public:
     enum class OptionType : unsigned int
     {
         Travel,
+#if ENABLE_SHOW_WIPE_MOVES
+        Wipe,
+#endif // ENABLE_SHOW_WIPE_MOVES
         Retractions,
         Unretractions,
         ToolChanges,

From ddc9e26f195dd7c79665cad0b0600941e5085098 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Sat, 21 Nov 2020 11:02:07 +0100
Subject: [PATCH 075/138] Follow-up to 80e8b5e985b84a6a50215d383bad96657bae0b12
 Removed the legacy PreviewData.cpp,hpp

---
 src/slic3r/GUI/DoubleSlider.cpp |  5 -----
 xs/src/perlglue.cpp             |  3 ---
 xs/xsp/GCode.xsp                | 32 --------------------------------
 3 files changed, 40 deletions(-)

diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 4df91fb78..4759ec64d 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -1,11 +1,6 @@
 #include "libslic3r/libslic3r.h"
-#if ENABLE_GCODE_VIEWER
 #include "DoubleSlider.hpp"
 #include "libslic3r/GCode.hpp"
-#else
-#include "wxExtensions.hpp"
-#include "libslic3r/GCode/PreviewData.hpp"
-#endif // ENABLE_GCODE_VIEWER
 #include "GUI.hpp"
 #include "GUI_App.hpp"
 #include "Plater.hpp"
diff --git a/xs/src/perlglue.cpp b/xs/src/perlglue.cpp
index 47961c623..be539e108 100644
--- a/xs/src/perlglue.cpp
+++ b/xs/src/perlglue.cpp
@@ -8,15 +8,12 @@ REGISTER_CLASS(ExPolygonCollection, "ExPolygon::Collection");
 REGISTER_CLASS(ExtrusionMultiPath, "ExtrusionMultiPath");
 REGISTER_CLASS(ExtrusionPath, "ExtrusionPath");
 REGISTER_CLASS(ExtrusionLoop, "ExtrusionLoop");
-// there is no ExtrusionLoop::Collection or ExtrusionEntity::Collection
 REGISTER_CLASS(ExtrusionEntityCollection, "ExtrusionPath::Collection");
 REGISTER_CLASS(ExtrusionSimulator, "ExtrusionSimulator");
 REGISTER_CLASS(Filler, "Filler");
 REGISTER_CLASS(Flow, "Flow");
 REGISTER_CLASS(CoolingBuffer, "GCode::CoolingBuffer");
 REGISTER_CLASS(GCode, "GCode");
-//REGISTER_CLASS(GCodePreviewData, "GCode::PreviewData");
-// REGISTER_CLASS(GCodeSender, "GCode::Sender");
 REGISTER_CLASS(Layer, "Layer");
 REGISTER_CLASS(SupportLayer, "Layer::Support");
 REGISTER_CLASS(LayerRegion, "Layer::Region");
diff --git a/xs/xsp/GCode.xsp b/xs/xsp/GCode.xsp
index d1f53f6e8..4545984bb 100644
--- a/xs/xsp/GCode.xsp
+++ b/xs/xsp/GCode.xsp
@@ -25,14 +25,6 @@
                 croak("%s\n", e.what());
             }
         %};
-//    void do_export_w_preview(Print *print, const char *path, GCodePreviewData *preview_data)
-//        %code%{
-//            try {
-//                THIS->do_export(print, path, preview_data);
-//            } catch (std::exception& e) {
-//                croak("%s\n", e.what());
-//            }
-//        %};
 
     Ref<Vec2d> origin()
         %code{% RETVAL = &(THIS->origin()); %};
@@ -58,27 +50,3 @@
     Ref<StaticPrintConfig> config()
         %code{% RETVAL = const_cast<StaticPrintConfig*>(static_cast<const StaticPrintConfig*>(static_cast<const PrintObjectConfig*>(&THIS->config()))); %};
 };
-
-//%name{Slic3r::GCode::PreviewData} class GCodePreviewData {
-//    GCodePreviewData();
-//    ~GCodePreviewData();
-//    void reset();
-//    bool empty() const;
-//    void set_type(int type)
-//        %code%{
-//            if ((0 <= type) && (type < GCodePreviewData::Extrusion::Num_View_Types)) 
-//                THIS->extrusion.view_type = (GCodePreviewData::Extrusion::EViewType)type;
-//        %};
-//    int type() %code%{ RETVAL = (int)THIS->extrusion.view_type; %};
-//    void set_extrusion_flags(int flags)
-//        %code%{ THIS->extrusion.role_flags = (unsigned int)flags; %};
-//    void set_travel_visible(bool visible)
-//        %code%{ THIS->travel.is_visible = visible; %};
-//    void set_retractions_visible(bool visible)
-//        %code%{ THIS->retraction.is_visible = visible; %};
-//    void set_unretractions_visible(bool visible)
-//        %code%{ THIS->unretraction.is_visible = visible; %};
-//    void set_shells_visible(bool visible)
-//        %code%{ THIS->shell.is_visible = visible; %};
-//    void set_extrusion_paths_colors(std::vector<std::string> colors);
-//};

From ce7b843de7bb9158e74fe3344e31e4ea66e9e028 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Sat, 21 Nov 2020 11:30:14 +0100
Subject: [PATCH 076/138] GCode Viewer - Fixed filament label in legend

---
 src/slic3r/GUI/GCodeViewer.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index 4be9f5fbd..5f932a718 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -2675,7 +2675,9 @@ void GCodeViewer::render_legend() const
         }
         if (!m_settings_ids.filament.empty()) {
             for (unsigned char i : m_extruder_ids) {
-                imgui.text(_u8L("Filament") + " " + std::to_string(i + 1) + ":");
+                std::string txt = _u8L("Filament");
+                txt += (m_extruder_ids.size() == 1) ? ":" : " " + std::to_string(i + 1);
+                imgui.text(txt);
                 ImGui::SameLine(offset);
                 imgui.text(m_settings_ids.filament[i]);
             }

From 288dbfd0d8940e399cf45bbb59aac44bbb444041 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Sat, 21 Nov 2020 11:43:48 +0100
Subject: [PATCH 077/138] fixed typo in comment & formatting

---
 src/slic3r/GUI/InstanceCheck.cpp | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/slic3r/GUI/InstanceCheck.cpp b/src/slic3r/GUI/InstanceCheck.cpp
index 8067fc7f3..aaf3ba3c6 100644
--- a/src/slic3r/GUI/InstanceCheck.cpp
+++ b/src/slic3r/GUI/InstanceCheck.cpp
@@ -259,16 +259,15 @@ bool instance_check(int argc, char** argv, bool app_config_single_instance)
 		std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string());
 #else
 		std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0]), ec).string());
-		if(ec.value() > 0) { // canonical was not able to find execitable (can happen with appimage on some systems)
-			ec.clear();
-			// Compose path with boost canonical of folder and filename
-			hashed_path = std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0]).parent_path(), ec).string() + "/" + boost::filesystem::system_complete(argv[0]).filename().string());
-			if(ec.value() > 0) {
-				// Still not valid, process without canonical
-				hashed_path = std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string());
-				
-			}
+	if (ec.value() > 0) { // canonical was not able to find the executable (can happen with appimage on some systems. Does it fail on Fuse file systems?)
+		ec.clear();
+		// Compose path with boost canonical of folder and filename
+		hashed_path = std::hash<std::string>{}(boost::filesystem::canonical(boost::filesystem::system_complete(argv[0]).parent_path(), ec).string() + "/" + boost::filesystem::system_complete(argv[0]).filename().string());
+		if (ec.value() > 0) {
+			// Still not valid, process without canonical
+			hashed_path = std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string());
 		}
+	}
 #endif // win32
 
 	std::string lock_name 	= std::to_string(hashed_path);

From 25ca1fcf77e3356e187a8dd63893f67d7843a0f0 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Sat, 21 Nov 2020 13:16:03 +0100
Subject: [PATCH 078/138] Some minor refactoring / polishing.

---
 src/libslic3r/GCode/GCodeProcessor.cpp | 10 ++++------
 src/libslic3r/PrintConfig.cpp          |  5 ++++-
 src/slic3r/GUI/GLCanvas3D.cpp          |  2 +-
 src/slic3r/GUI/GUI_Preview.cpp         |  2 +-
 4 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index 4785c0898..1b8985d06 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -390,13 +390,11 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename)
     };
 
     // check for temporary lines
-    auto is_temporary_decoration = [](const std::string& gcode_line) {
+    auto is_temporary_decoration = [](const std::string_view gcode_line) {
         // remove trailing '\n'
-        std::string line = gcode_line.substr(0, gcode_line.length() - 1);
-        if (line == ";" + Layer_Change_Tag)
-            return true;
-        else
-            return false;
+        assert(! gcode_line.empty());
+        assert(gcode_line.back() == '\n');
+        return gcode_line.substr(0, gcode_line.length() - 1) == ";" + Layer_Change_Tag;
     };
 
     // Iterators for the normal and silent cached time estimate entry recently processed, used by process_line_G1.
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index f61d2ed9c..0ad48e6dd 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -808,7 +808,10 @@ void PrintConfigDef::init_fff_params()
 
     def = this->add("filament_spool_weight", coFloats);
     def->label = L("Spool weight");
-    def->tooltip = L("Enter weight of the spool without filament. This is only for statistical information.");
+    def->tooltip = L("Enter weight of the empty filament spool. "
+                     "One may weigh a partially consumed filament spool before printing and one may compare the measured weight "
+                     "with the calculated weight of the filament with the spool to find out whether the amount "
+                     "of filament on the spool is sufficient to finish the print.");
     def->sidetext = L("g");
     def->min = 0;
     def->set_default_value(new ConfigOptionFloats { 0. });
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 34278377b..b8e379965 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1091,7 +1091,7 @@ wxDEFINE_EVENT(EVT_GLCANVAS_RELOAD_FROM_DISK, SimpleEvent);
 
 const double GLCanvas3D::DefaultCameraZoomToBoxMarginFactor = 1.25;
 
-GLCanvas3D::ArrangeSettings load_arrange_settings()
+static GLCanvas3D::ArrangeSettings load_arrange_settings()
 {
     GLCanvas3D::ArrangeSettings settings;
 
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index a3b25fba7..000e7ab9c 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -689,7 +689,7 @@ void Preview::update_layers_slider(const std::vector<double>& layers_z, bool kee
     if (sla_print_technology)
         m_layers_slider->SetLayersTimes(plater->sla_print().print_statistics().layers_times);
     else
-        m_layers_slider->SetLayersTimes(m_gcode_result->time_statistics.modes[0].layers_times);
+        m_layers_slider->SetLayersTimes(m_gcode_result->time_statistics.modes.front().layers_times);
 
     m_layers_slider_sizer->Show((size_t)0);
     Layout();

From f0606c2a76da890dea359a9111825bbdb736a799 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Sat, 21 Nov 2020 14:10:10 +0100
Subject: [PATCH 079/138] Merge of
 https://github.com/prusa3d/PrusaSlicer/pull/2856 Add aligned rectilinear
 infill functionality by @m-schubert Implements [Feature Request] Aligned
 rectilinear infill #1938

---
 src/libslic3r/Fill/FillBase.cpp        |  1 +
 src/libslic3r/Fill/FillRectilinear.hpp | 11 +++++++++++
 src/libslic3r/PrintConfig.cpp          |  4 ++++
 src/libslic3r/PrintConfig.hpp          |  3 ++-
 4 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 4e714b570..326c1bd42 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -29,6 +29,7 @@ Fill* Fill::new_from_type(const InfillPattern type)
     case ip3DHoneycomb:         return new Fill3DHoneycomb();
     case ipGyroid:              return new FillGyroid();
     case ipRectilinear:         return new FillRectilinear();
+    case ipAlignedRectilinear:  return new FillAlignedRectilinear();
     case ipMonotonic:           return new FillMonotonic();
     case ipLine:                return new FillLine();
     case ipGrid:                return new FillGrid();
diff --git a/src/libslic3r/Fill/FillRectilinear.hpp b/src/libslic3r/Fill/FillRectilinear.hpp
index 806b29be1..0686fa166 100644
--- a/src/libslic3r/Fill/FillRectilinear.hpp
+++ b/src/libslic3r/Fill/FillRectilinear.hpp
@@ -29,6 +29,17 @@ protected:
     bool fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out);
 };
 
+class FillAlignedRectilinear : public FillRectilinear
+{
+public:
+    Fill* clone() const override { return new FillAlignedRectilinear(*this); };
+    ~FillAlignedRectilinear() override = default;
+
+protected:
+    // Always generate infill at the same angle.
+    virtual float _layer_angle(size_t idx) const { return 0.f; }
+};
+
 class FillMonotonic : public FillRectilinear
 {
 public:
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 0ad48e6dd..5f29c15a8 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -460,12 +460,14 @@ void PrintConfigDef::init_fff_params()
     def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
     def->enum_values.push_back("rectilinear");
     def->enum_values.push_back("monotonic");
+    def->enum_values.push_back("alignedrectilinear");
     def->enum_values.push_back("concentric");
     def->enum_values.push_back("hilbertcurve");
     def->enum_values.push_back("archimedeanchords");
     def->enum_values.push_back("octagramspiral");
     def->enum_labels.push_back(L("Rectilinear"));
     def->enum_labels.push_back(L("Monotonic"));
+    def->enum_labels.push_back(L("Aligned Rectilinear"));
     def->enum_labels.push_back(L("Concentric"));
     def->enum_labels.push_back(L("Hilbert Curve"));
     def->enum_labels.push_back(L("Archimedean Chords"));
@@ -881,6 +883,7 @@ void PrintConfigDef::init_fff_params()
     def->tooltip = L("Fill pattern for general low-density infill.");
     def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
     def->enum_values.push_back("rectilinear");
+    def->enum_values.push_back("alignedrectilinear");
     def->enum_values.push_back("grid");
     def->enum_values.push_back("triangles");
     def->enum_values.push_back("stars");
@@ -896,6 +899,7 @@ void PrintConfigDef::init_fff_params()
     def->enum_values.push_back("adaptivecubic");
     def->enum_values.push_back("supportcubic");
     def->enum_labels.push_back(L("Rectilinear"));
+    def->enum_labels.push_back(L("Aligned Rectilinear"));
     def->enum_labels.push_back(L("Grid"));
     def->enum_labels.push_back(L("Triangles"));
     def->enum_labels.push_back(L("Stars"));
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 4f887c7c0..5ca04a341 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -44,7 +44,7 @@ enum AuthorizationType {
 };
 
 enum InfillPattern : int {
-    ipRectilinear, ipMonotonic, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb,
+    ipRectilinear, ipMonotonic, ipAlignedRectilinear, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb,
     ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipAdaptiveCubic, ipSupportCubic, ipCount,
 };
 
@@ -145,6 +145,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<InfillPattern>::g
     if (keys_map.empty()) {
         keys_map["rectilinear"]         = ipRectilinear;
         keys_map["monotonic"]           = ipMonotonic;
+        keys_map["alignedrectilinear"]  = ipAlignedRectilinear;
         keys_map["grid"]                = ipGrid;
         keys_map["triangles"]           = ipTriangles;
         keys_map["stars"]               = ipStars;

From ee20331ead77ece72cda2df93f8a2e79c2896274 Mon Sep 17 00:00:00 2001
From: rtyr <36745189+rtyr@users.noreply.github.com>
Date: Sat, 21 Nov 2020 15:42:38 +0100
Subject: [PATCH 080/138] 1.2.0-alpha0 added filament spool weight

---
 resources/profiles/PrusaResearch.idx | 284 ++++++++++++++-------------
 resources/profiles/PrusaResearch.ini |  61 +++++-
 2 files changed, 203 insertions(+), 142 deletions(-)

diff --git a/resources/profiles/PrusaResearch.idx b/resources/profiles/PrusaResearch.idx
index c01a9ddea..6f647c910 100644
--- a/resources/profiles/PrusaResearch.idx
+++ b/resources/profiles/PrusaResearch.idx
@@ -1,141 +1,143 @@
-min_slic3r_version = 2.2.0-alpha3
-1.1.10 Updated firmware version.
-1.1.9 Updated K values in filament profiles (linear advance). Added new filament profiles and SLA materials.
-1.1.8 Updated start/end g-code scripts for MK3 family printer profiles (reduced extruder motor current for some print profiles). Added new filament and SLA material profiles.
-1.1.7 Updated end g-code for MMU2 Single printer profiles. Added/updated filament and SLA material profiles.
-1.1.6 Updated firmware version for MK2.5/S and MK3/S.
-1.1.5 Updated MMU1 specific retraction settings for Prusament PC Blend
-1.1.4 Added Prusament PC Blend filament profile.
-1.1.3 Added SLA material and filament profile
-1.1.2 Added renamed_from fields for PETG filaments to indicate that they were renamed from PET.
-1.1.1 Added Verbatim and Fiberlogy PETG filament profiles. Updated auto cooling settings for ABS.
-1.1.1-beta Updated for PrusaSlicer 2.2.0-beta
-1.1.1-alpha4 Extended list of default filaments to be installed, top/bottom_solid_min_thickness defined, infill_acceleration changed etc
-1.1.1-alpha3 Print bed textures are now configurable from the Preset Bundle. Requires PrusaSlicer 2.2.0-alpha3 and newer.
-# The following line (max_slic3r_version) forces the users of PrusaSlicer 2.2.0-alpha3 and newer to update the profiles to 1.1.1-alpha3 and newer,
-# so they will see the print bed.
-max_slic3r_version = 2.2.0-alpha2
-min_slic3r_version = 2.2.0-alpha0
-1.1.1-alpha2 Bumped up config version, so our in house customer will get updated profiles.
-1.1.0 Filament aliases, Creality profiles and other goodies for PrusaSlicer 2.2.0-alpha0
-min_slic3r_version = 2.1.1-beta0
-1.0.10 Updated firmware version for MK2.5/S and MK3/S.
-1.0.9 Updated firmware version for MK2.5/S and MK3/S.
-1.0.8 Various changes in FFF profiles, new filaments/materials added. See changelog.
-1.0.7 Updated layer height limits for MINI
-1.0.6 Added Prusa MINI profiles
-min_slic3r_version = 2.1.0-alpha0
-1.0.5 Added SLA materials
-1.0.4 Updated firmware version and 0.25mm nozzle profiles
-1.0.3 Added filament profiles
-1.0.2 Added SLA materials
-1.0.1 Updated MK3 firmware version check to 3.8.0, new soluble support profiles for 0.6mm nozzle diameter MMU2S printers.
-1.0.0 Updated end G-code for the MMU2 profiles to lift the extruder at the end of print. Wipe tower bridging distance was made smaller for soluble supports.
-1.0.0-beta1 Updated color for the ASA filaments to differ from the other filaments. Single extruder printers now have no extruder color assigned, obects and toolpaths will be colored with the color of the active filament.
-1.0.0-beta0 Printer model checks in start G-codes, ASA filament profiles, limits on min / max SL1 exposition times
-1.0.0-alpha2 Printer model and nozzle diameter check
-1.0.0-alpha1 Added Prusament ASA profile
-1.0.0-alpha0 Filament specific retract for PET and similar copolymers, and for FLEX
-min_slic3r_version = 1.42.0-alpha6
-0.8.9 Updated firmware version for MK2.5/S and MK3/S.
-0.8.8 Updated firmware version for MK2.5/S and MK3/S.
-0.8.7 Updated firmware version
-0.8.6 Updated firmware version for MK2.5/S and MK3/S
-0.8.5 Updated SL1 printer and material settings
-0.8.4 Added Prusament ASA profile
-0.8.3 FW version and SL1 materials update
-0.8.2 FFF and SL1 settings update
-0.8.1 Output settings and SLA materials update
-0.8.0 Updated for the PrusaSlicer 2.0.0 final release
-0.8.0-rc2 Updated firmware versions for MK2.5/S and MK3/S
-0.8.0-rc1 Updated SLA profiles
-0.8.0-rc Updated for the PrusaSlicer 2.0.0-rc release
-0.8.0-beta4 Updated SLA profiles
-0.8.0-beta3 Updated SLA profiles
-0.8.0-beta2 Updated SLA profiles
-0.8.0-beta1 Updated SLA profiles
-0.8.0-beta Updated SLA profiles
-0.8.0-alpha9 Updated SLA and FFF profiles
-0.8.0-alpha8 Updated SLA profiles
-0.8.0-alpha7 Updated SLA profiles
-0.8.0-alpha6 Updated SLA profiles
-min_slic3r_version = 1.42.0-alpha
-0.8.0-alpha Updated SLA profiles
-0.4.0-alpha4 Updated SLA profiles
-0.4.0-alpha3 Update of SLA profiles
-0.4.0-alpha2 First SLA profiles
-min_slic3r_version = 1.41.3-alpha
-0.4.12 Updated firmware version for MK2.5/S and MK3/S.
-0.4.11 Updated firmware version for MK2.5/S and MK3/S.
-0.4.10 Updated firmware version
-0.4.9 Updated firmware version for MK2.5/S and MK3/S
-0.4.8 MK2.5/3/S FW update
-0.4.7 MK2/S/MMU FW update
-0.4.6 Updated firmware versions for MK2.5/S and MK3/S
-0.4.5 Enabled remaining time support for MK2/S/MMU1
-0.4.4 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
-0.4.3 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
-0.4.2 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
-0.4.1 New MK2.5S and MK3S FW versions
-0.4.0 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt 
-min_slic3r_version = 1.41.1
-0.3.11 Updated firmware version for MK2.5/S and MK3/S.
-0.3.10 Updated firmware version
-0.3.9 Updated firmware version for MK2.5/S and MK3/S
-0.3.8 MK2.5/3/S FW update
-0.3.7 MK2/S/MMU FW update
-0.3.6 Updated firmware versions for MK2.5 and MK3
-0.3.5 New MK2.5 and MK3 FW versions
-0.3.4 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt 
-0.3.3 Prusament PETG released
-0.3.2 New MK2.5 and MK3 FW versions
-0.3.1 New MK2.5 and MK3 FW versions
-0.3.0 New MK2.5 and MK3 FW version
-min_slic3r_version = 1.41.0-alpha
-0.2.9 New MK2.5 and MK3 FW versions
-0.2.8 New MK2.5 and MK3 FW version
-min_slic3r_version = 1.41.1
-0.2.7 New MK2.5 and MK3 FW version
-0.2.6 Added MMU2 MK2.5 settings
-min_slic3r_version = 1.41.0-alpha
-0.2.5 Prusament is out - added prusament settings
-0.2.4 Added soluble support profiles for MMU2
-0.2.3 Added materials for MMU2 single mode, edited MK3 xy stealth feedrate limit
-0.2.2 Edited MMU2 Single mode purge line
-0.2.1 Added PET and BVOH settings for MMU2
-0.2.0-beta5 Fixed MMU1 ramming parameters
-0.2.0-beta4 Added filament loading speed at start, increased minimal purge on wipe tower
-0.2.0-beta3 Edited ramming parameters and filament cooling moves for MMU2
-0.2.0-beta2 Edited first layer speed and wipe tower position
-0.2.0-beta Removed limit on the MK3MMU2 height, added legacy M204 S T format to the MK2 profiles
-0.2.0-alpha8 Added filament_load/unload_time for the PLA/ABS MMU2 filament presets.
-0.2.0-alpha7 Vojtech's fix the incorrect *MK3* references
-0.2.0-alpha6 Jindra's way to fix the 0.2.0-alpha5 version
-0.2.0-alpha5 Bumped up firmware versions for MK2.5/MK3 to 3.3.1, disabled priming areas for MK3MMU2
-0.2.0-alpha4 Extended the custom start/end G-codes of the MMU2.0 printers for no priming towers.
-0.2.0-alpha3 Adjusted machine limits for time estimates, added filament density and cost
-0.2.0-alpha2 Renamed the key MK3SMMU to MK3MMU2, added a generic PLA MMU2 material
-0.2.0-alpha1 added initial profiles for the i3 MK3 Multi Material Upgrade 2.0
-0.2.0-alpha moved machine limits from the start G-code to the new print profile parameters
-min_slic3r_version = 1.40.0
-0.1.18 Updated firmware version
-0.1.17 Updated firmware version for MK2.5/S and MK3/S
-0.1.16 MK2.5/3/S FW update
-0.1.15 MK2/S/MMU FW update
-0.1.14 Updated firmware versions for MK2.5 and MK3
-0.1.13 New MK2.5 and MK3 FW versions
-0.1.12 New MK2.5 and MK3 FW versions
-0.1.11 fw version changed to 3.3.1
-0.1.10 MK3 jerk and acceleration update
-0.1.9 edited support extrusion width for 0.25 and 0.6 nozzles
-0.1.8 extrusion width for 0,25, 0.6 and variable layer height fixes
-0.1.7 Fixed errors in 0.25mm and 0.6mm profiles
-0.1.6 Split the MK2.5 profile from the MK2S
-min_slic3r_version = 1.40.0-beta
-0.1.5 fixed printer_variant fields for the i3 MK3 0.25 and 0.6mm nozzles
-0.1.4 edited fw version, added z-raise after print
-min_slic3r_version = 1.40.0-alpha
-0.1.3 Fixed an incorrect position of the max_print_height parameter
-0.1.2 Wipe tower changes
-0.1.1 Minor print speed adjustments
-0.1.0 Initial
+min_slic3r_version = 2.3.0-alpha4
+1.2.0-alpha0 Added filament spool weights
+min_slic3r_version = 2.2.0-alpha3
+1.1.10 Updated firmware version.
+1.1.9 Updated K values in filament profiles (linear advance). Added new filament profiles and SLA materials.
+1.1.8 Updated start/end g-code scripts for MK3 family printer profiles (reduced extruder motor current for some print profiles). Added new filament and SLA material profiles.
+1.1.7 Updated end g-code for MMU2 Single printer profiles. Added/updated filament and SLA material profiles.
+1.1.6 Updated firmware version for MK2.5/S and MK3/S.
+1.1.5 Updated MMU1 specific retraction settings for Prusament PC Blend
+1.1.4 Added Prusament PC Blend filament profile.
+1.1.3 Added SLA material and filament profile
+1.1.2 Added renamed_from fields for PETG filaments to indicate that they were renamed from PET.
+1.1.1 Added Verbatim and Fiberlogy PETG filament profiles. Updated auto cooling settings for ABS.
+1.1.1-beta Updated for PrusaSlicer 2.2.0-beta
+1.1.1-alpha4 Extended list of default filaments to be installed, top/bottom_solid_min_thickness defined, infill_acceleration changed etc
+1.1.1-alpha3 Print bed textures are now configurable from the Preset Bundle. Requires PrusaSlicer 2.2.0-alpha3 and newer.
+# The following line (max_slic3r_version) forces the users of PrusaSlicer 2.2.0-alpha3 and newer to update the profiles to 1.1.1-alpha3 and newer,
+# so they will see the print bed.
+max_slic3r_version = 2.2.0-alpha2
+min_slic3r_version = 2.2.0-alpha0
+1.1.1-alpha2 Bumped up config version, so our in house customer will get updated profiles.
+1.1.0 Filament aliases, Creality profiles and other goodies for PrusaSlicer 2.2.0-alpha0
+min_slic3r_version = 2.1.1-beta0
+1.0.10 Updated firmware version for MK2.5/S and MK3/S.
+1.0.9 Updated firmware version for MK2.5/S and MK3/S.
+1.0.8 Various changes in FFF profiles, new filaments/materials added. See changelog.
+1.0.7 Updated layer height limits for MINI
+1.0.6 Added Prusa MINI profiles
+min_slic3r_version = 2.1.0-alpha0
+1.0.5 Added SLA materials
+1.0.4 Updated firmware version and 0.25mm nozzle profiles
+1.0.3 Added filament profiles
+1.0.2 Added SLA materials
+1.0.1 Updated MK3 firmware version check to 3.8.0, new soluble support profiles for 0.6mm nozzle diameter MMU2S printers.
+1.0.0 Updated end G-code for the MMU2 profiles to lift the extruder at the end of print. Wipe tower bridging distance was made smaller for soluble supports.
+1.0.0-beta1 Updated color for the ASA filaments to differ from the other filaments. Single extruder printers now have no extruder color assigned, obects and toolpaths will be colored with the color of the active filament.
+1.0.0-beta0 Printer model checks in start G-codes, ASA filament profiles, limits on min / max SL1 exposition times
+1.0.0-alpha2 Printer model and nozzle diameter check
+1.0.0-alpha1 Added Prusament ASA profile
+1.0.0-alpha0 Filament specific retract for PET and similar copolymers, and for FLEX
+min_slic3r_version = 1.42.0-alpha6
+0.8.9 Updated firmware version for MK2.5/S and MK3/S.
+0.8.8 Updated firmware version for MK2.5/S and MK3/S.
+0.8.7 Updated firmware version
+0.8.6 Updated firmware version for MK2.5/S and MK3/S
+0.8.5 Updated SL1 printer and material settings
+0.8.4 Added Prusament ASA profile
+0.8.3 FW version and SL1 materials update
+0.8.2 FFF and SL1 settings update
+0.8.1 Output settings and SLA materials update
+0.8.0 Updated for the PrusaSlicer 2.0.0 final release
+0.8.0-rc2 Updated firmware versions for MK2.5/S and MK3/S
+0.8.0-rc1 Updated SLA profiles
+0.8.0-rc Updated for the PrusaSlicer 2.0.0-rc release
+0.8.0-beta4 Updated SLA profiles
+0.8.0-beta3 Updated SLA profiles
+0.8.0-beta2 Updated SLA profiles
+0.8.0-beta1 Updated SLA profiles
+0.8.0-beta Updated SLA profiles
+0.8.0-alpha9 Updated SLA and FFF profiles
+0.8.0-alpha8 Updated SLA profiles
+0.8.0-alpha7 Updated SLA profiles
+0.8.0-alpha6 Updated SLA profiles
+min_slic3r_version = 1.42.0-alpha
+0.8.0-alpha Updated SLA profiles
+0.4.0-alpha4 Updated SLA profiles
+0.4.0-alpha3 Update of SLA profiles
+0.4.0-alpha2 First SLA profiles
+min_slic3r_version = 1.41.3-alpha
+0.4.12 Updated firmware version for MK2.5/S and MK3/S.
+0.4.11 Updated firmware version for MK2.5/S and MK3/S.
+0.4.10 Updated firmware version
+0.4.9 Updated firmware version for MK2.5/S and MK3/S
+0.4.8 MK2.5/3/S FW update
+0.4.7 MK2/S/MMU FW update
+0.4.6 Updated firmware versions for MK2.5/S and MK3/S
+0.4.5 Enabled remaining time support for MK2/S/MMU1
+0.4.4 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
+0.4.3 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
+0.4.2 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
+0.4.1 New MK2.5S and MK3S FW versions
+0.4.0 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt 
+min_slic3r_version = 1.41.1
+0.3.11 Updated firmware version for MK2.5/S and MK3/S.
+0.3.10 Updated firmware version
+0.3.9 Updated firmware version for MK2.5/S and MK3/S
+0.3.8 MK2.5/3/S FW update
+0.3.7 MK2/S/MMU FW update
+0.3.6 Updated firmware versions for MK2.5 and MK3
+0.3.5 New MK2.5 and MK3 FW versions
+0.3.4 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt 
+0.3.3 Prusament PETG released
+0.3.2 New MK2.5 and MK3 FW versions
+0.3.1 New MK2.5 and MK3 FW versions
+0.3.0 New MK2.5 and MK3 FW version
+min_slic3r_version = 1.41.0-alpha
+0.2.9 New MK2.5 and MK3 FW versions
+0.2.8 New MK2.5 and MK3 FW version
+min_slic3r_version = 1.41.1
+0.2.7 New MK2.5 and MK3 FW version
+0.2.6 Added MMU2 MK2.5 settings
+min_slic3r_version = 1.41.0-alpha
+0.2.5 Prusament is out - added prusament settings
+0.2.4 Added soluble support profiles for MMU2
+0.2.3 Added materials for MMU2 single mode, edited MK3 xy stealth feedrate limit
+0.2.2 Edited MMU2 Single mode purge line
+0.2.1 Added PET and BVOH settings for MMU2
+0.2.0-beta5 Fixed MMU1 ramming parameters
+0.2.0-beta4 Added filament loading speed at start, increased minimal purge on wipe tower
+0.2.0-beta3 Edited ramming parameters and filament cooling moves for MMU2
+0.2.0-beta2 Edited first layer speed and wipe tower position
+0.2.0-beta Removed limit on the MK3MMU2 height, added legacy M204 S T format to the MK2 profiles
+0.2.0-alpha8 Added filament_load/unload_time for the PLA/ABS MMU2 filament presets.
+0.2.0-alpha7 Vojtech's fix the incorrect *MK3* references
+0.2.0-alpha6 Jindra's way to fix the 0.2.0-alpha5 version
+0.2.0-alpha5 Bumped up firmware versions for MK2.5/MK3 to 3.3.1, disabled priming areas for MK3MMU2
+0.2.0-alpha4 Extended the custom start/end G-codes of the MMU2.0 printers for no priming towers.
+0.2.0-alpha3 Adjusted machine limits for time estimates, added filament density and cost
+0.2.0-alpha2 Renamed the key MK3SMMU to MK3MMU2, added a generic PLA MMU2 material
+0.2.0-alpha1 added initial profiles for the i3 MK3 Multi Material Upgrade 2.0
+0.2.0-alpha moved machine limits from the start G-code to the new print profile parameters
+min_slic3r_version = 1.40.0
+0.1.18 Updated firmware version
+0.1.17 Updated firmware version for MK2.5/S and MK3/S
+0.1.16 MK2.5/3/S FW update
+0.1.15 MK2/S/MMU FW update
+0.1.14 Updated firmware versions for MK2.5 and MK3
+0.1.13 New MK2.5 and MK3 FW versions
+0.1.12 New MK2.5 and MK3 FW versions
+0.1.11 fw version changed to 3.3.1
+0.1.10 MK3 jerk and acceleration update
+0.1.9 edited support extrusion width for 0.25 and 0.6 nozzles
+0.1.8 extrusion width for 0,25, 0.6 and variable layer height fixes
+0.1.7 Fixed errors in 0.25mm and 0.6mm profiles
+0.1.6 Split the MK2.5 profile from the MK2S
+min_slic3r_version = 1.40.0-beta
+0.1.5 fixed printer_variant fields for the i3 MK3 0.25 and 0.6mm nozzles
+0.1.4 edited fw version, added z-raise after print
+min_slic3r_version = 1.40.0-alpha
+0.1.3 Fixed an incorrect position of the max_print_height parameter
+0.1.2 Wipe tower changes
+0.1.1 Minor print speed adjustments
+0.1.0 Initial
diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini
index 9e353e0fb..fa9e14b22 100644
--- a/resources/profiles/PrusaResearch.ini
+++ b/resources/profiles/PrusaResearch.ini
@@ -5,7 +5,7 @@
 name = Prusa Research
 # Configuration version of this file. Config file will only be installed, if the config_version differs.
 # This means, the server may force the PrusaSlicer configuration to be downgraded.
-config_version = 1.1.10
+config_version = 1.2.0-alpha0
 # Where to get the updates from?
 config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
 changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@@ -1807,12 +1807,14 @@ inherits = *PLA*
 filament_vendor = Fillamentum
 filament_cost = 21.99
 filament_density = 1.24
+filament_spool_weight = 230
 
 [filament:Fillamentum ABS]
 inherits = *ABSC*
 filament_vendor = Fillamentum
 filament_cost = 32.4
 filament_density = 1.04
+filament_spool_weight = 230
 first_layer_temperature = 240
 temperature = 240
 
@@ -1821,6 +1823,7 @@ inherits = *ABS*
 filament_vendor = Fillamentum
 filament_cost = 38.7
 filament_density = 1.07
+filament_spool_weight = 230
 fan_always_on = 1
 cooling = 1
 min_fan_speed = 20
@@ -1836,6 +1839,7 @@ inherits = *ABS*
 filament_vendor = Prusa Polymers
 filament_cost = 35.28
 filament_density = 1.07
+filament_spool_weight = 201
 fan_always_on = 1
 first_layer_temperature = 260
 first_layer_bed_temperature = 105
@@ -1857,6 +1861,7 @@ inherits = *ABS*
 filament_vendor = Prusa Polymers
 filament_cost = 49.99 
 filament_density = 1.22
+filament_spool_weight = 201
 fan_always_on = 0
 first_layer_temperature = 275
 first_layer_bed_temperature = 110
@@ -1883,6 +1888,7 @@ inherits = *ABS*
 filament_vendor = Prusa Polymers
 filament_cost = 49.99
 filament_density = 1.22
+filament_spool_weight = 201
 fan_always_on = 0
 first_layer_temperature = 275
 first_layer_bed_temperature = 105
@@ -1916,6 +1922,7 @@ inherits = *PET*
 filament_vendor = Fillamentum
 filament_cost = 34.99
 filament_density = 1.25
+filament_spool_weight = 230
 filament_type = CPE
 first_layer_bed_temperature = 90
 first_layer_temperature = 275
@@ -1931,6 +1938,7 @@ compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.
 extrusion_multiplier = 1.1
 filament_cost = 68
 filament_density = 1.15
+filament_spool_weight = 230
 filament_colour = #804040
 filament_max_volumetric_speed = 10
 first_layer_temperature = 190
@@ -1969,12 +1977,14 @@ inherits = *ABSC*
 filament_vendor = Hatchbox
 filament_cost = 27.82
 filament_density = 1.04
+filament_spool_weight = 225
 
 [filament:Plasty Mladec ABS]
 inherits = *ABSC*
 filament_vendor = Plasty Mladec
 filament_cost = 27.82
 filament_density = 1.08
+filament_spool_weight = 230
 
 [filament:Verbatim ABS]
 inherits = *ABSC*
@@ -1995,6 +2005,7 @@ inherits = *PET*
 filament_vendor = Plasty Mladec
 filament_cost = 27.82
 filament_density = 1.27
+filament_spool_weight = 230
 
 [filament:Generic PLA]
 inherits = *PLA*
@@ -2039,6 +2050,7 @@ inherits = *FLEX*
 filament_vendor = Fillamentum
 filament_cost = 33.99
 filament_density = 1.20
+filament_spool_weight = 230
 filament_max_volumetric_speed = 1.2
 filament_retract_length = 0
 filament_retract_speed = nil
@@ -2136,6 +2148,7 @@ inherits = *ABSC*
 filament_vendor = Made for Prusa
 filament_cost = 22.99
 filament_density = 1.08
+filament_spool_weight = 230
 
 [filament:*ABS MMU2*]
 inherits = Prusa ABS
@@ -2185,6 +2198,7 @@ inherits = *ABS MMU2*
 filament_vendor = Prusa Polymers
 filament_cost = 35.28
 filament_density = 1.07
+filament_spool_weight = 201
 fan_always_on = 1
 first_layer_temperature = 260
 first_layer_bed_temperature = 105
@@ -2209,6 +2223,7 @@ inherits = *ABS MMU2*
 filament_vendor = Prusa Polymers
 filament_cost = 49.99
 filament_density = 1.22
+filament_spool_weight = 201
 fan_always_on = 0
 fan_below_layer_time = 30
 first_layer_temperature = 265
@@ -2237,17 +2252,20 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
 inherits = *ABS MMU2*
 filament_vendor = Made for Prusa
 filament_cost = 22.99
+filament_spool_weight = 230
 
 [filament:Plasty Mladec ABS @MMU2]
 inherits = *ABS MMU2*
 filament_vendor = Plasty Mladec
 filament_density = 1.08
+filament_spool_weight = 230
 
 [filament:Prusa HIPS]
 inherits = *ABS*
 filament_vendor = Made for Prusa
 filament_cost = 27.3
 filament_density = 1.04
+filament_spool_weight = 230
 bridge_fan_speed = 50
 cooling = 1
 extrusion_multiplier = 1
@@ -2287,6 +2305,7 @@ renamed_from = "Prusa PET"
 filament_vendor = Made for Prusa
 filament_cost = 22.99
 filament_density = 1.27
+filament_spool_weight = 230
 compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:Verbatim PETG]
@@ -2310,6 +2329,7 @@ first_layer_temperature = 240
 temperature = 250
 filament_cost = 29.99
 filament_density = 1.27
+filament_spool_weight = 201
 filament_type = PETG
 compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
@@ -2319,6 +2339,7 @@ renamed_from = "Prusa PET 0.6 nozzle"; "Prusa PETG 0.6 nozzle"
 filament_vendor = Made for Prusa
 filament_cost = 22.99
 filament_density = 1.27
+filament_spool_weight = 230
 
 [filament:Prusament PETG @0.6 nozzle]
 inherits = *PET06*
@@ -2327,6 +2348,7 @@ first_layer_temperature = 240
 temperature = 250
 filament_cost = 29.99
 filament_density = 1.27
+filament_spool_weight = 201
 filament_type = PETG
 
 [filament:Plasty Mladec PETG @0.6 nozzle]
@@ -2336,6 +2358,7 @@ first_layer_temperature = 230
 temperature = 240
 filament_cost = 27.92
 filament_density = 1.27
+filament_spool_weight = 230
 filament_type = PETG
 
 [filament:Devil Design PETG @0.6 nozzle]
@@ -2398,12 +2421,14 @@ filament_vendor = Generic
 [filament:Plasty Mladec PETG @MMU2]
 inherits = *PET MMU2*
 filament_vendor = Plasty Mladec
+filament_spool_weight = 230
 
 [filament:Prusa PETG @MMU2]
 inherits = *PET MMU2*
 renamed_from = "Prusa PET MMU2"; "Prusa PETG MMU2"
 filament_vendor = Made for Prusa
 filament_cost = 22.99
+filament_spool_weight = 230
 
 [filament:Prusament PETG @MMU2]
 inherits = *PET MMU2*
@@ -2411,6 +2436,7 @@ filament_type = PETG
 filament_vendor = Prusa Polymers
 filament_cost = 29.99
 filament_density = 1.27
+filament_spool_weight = 201
 
 [filament:Generic PETG @MMU2 0.6 nozzle]
 inherits = *PET MMU2 06*
@@ -2421,6 +2447,7 @@ filament_vendor = Generic
 inherits = *PET MMU2 06*
 renamed_from = "Prusa PET MMU2 0.6 nozzle"; "Prusa PETG MMU2 0.6 nozzle"
 filament_vendor = Made for Prusa
+filament_spool_weight = 230
 
 [filament:Prusament PETG @MMU2 0.6 nozzle]
 inherits = *PET MMU2 06*
@@ -2428,17 +2455,20 @@ filament_type = PETG
 filament_vendor = Prusa Polymers
 filament_cost = 29.99
 filament_density = 1.27
+filament_spool_weight = 201
 
 [filament:Plasty Mladec PETG @MMU2 0.6 nozzle]
 inherits = *PET MMU2 06*
 filament_type = PETG
 filament_vendor = Plasty Mladec
+filament_spool_weight = 230
 
 [filament:Prusa PLA]
 inherits = *PLA*
 filament_vendor = Made for Prusa
 filament_cost = 20.99
 filament_density = 1.24
+filament_spool_weight = 230
 
 [filament:Fiberlogy PLA]
 inherits = *PLA*
@@ -2451,6 +2481,7 @@ inherits = *PLA*
 filament_vendor = Plasty Mladec
 filament_cost = 25.4
 filament_density = 1.24
+filament_spool_weight = 230
 
 [filament:AmazonBasics PLA]
 inherits = *PLA*
@@ -2463,6 +2494,7 @@ inherits = *PLA*
 filament_vendor = Hatchbox
 filament_cost = 25.4
 filament_density = 1.24
+filament_spool_weight = 225
 
 [filament:Esun PLA]
 inherits = *PLA*
@@ -2494,6 +2526,7 @@ filament_vendor = Prusa Polymers
 temperature = 215
 filament_cost = 24.99
 filament_density = 1.24
+filament_spool_weight = 201
 filament_notes = "Affordable filament for everyday printing in premium quality manufactured in-house by Josef Prusa"
 
 [filament:*PLA MMU2*]
@@ -2520,18 +2553,21 @@ filament_vendor = Generic
 inherits = *PLA MMU2*
 filament_vendor = Made for Prusa
 filament_cost = 20.99
+filament_spool_weight = 230
 
 [filament:Prusament PLA @MMU2]
 inherits = *PLA MMU2*
 filament_vendor = Prusa Polymers
 filament_cost = 24.99
 filament_density = 1.24
+filament_spool_weight = 201
 
 [filament:Fillamentum PLA @MMU2]
 inherits = *PLA MMU2*
 filament_vendor = Fillamentum
 filament_cost = 21.99
 filament_density = 1.24
+filament_spool_weight = 230
 
 [filament:SemiFlex or Flexfill 98A]
 inherits = *FLEX*
@@ -2545,6 +2581,7 @@ inherits = *FLEX*
 filament_vendor = Fillamentum
 filament_cost = 33.99
 filament_density = 1.23
+filament_spool_weight = 230
 filament_max_volumetric_speed = 1.35
 fan_always_on = 1
 cooling = 0
@@ -2579,6 +2616,7 @@ inherits = *common*
 filament_vendor = Fillamentum
 filament_cost = 56.99
 filament_density = 1.01
+filament_spool_weight = 230
 bed_temperature = 90
 bridge_fan_speed = 30
 cooling = 1
@@ -2790,6 +2828,7 @@ inherits = *PETMMU1*
 filament_vendor = Fillamentum
 filament_cost = 34.99
 filament_density = 1.25
+filament_spool_weight = 230
 filament_type = CPE
 first_layer_bed_temperature = 90
 first_layer_temperature = 275
@@ -2819,6 +2858,7 @@ inherits = *PETMMU1*
 filament_vendor = Plasty Mladec
 filament_cost = 27.82
 filament_density = 1.27
+filament_spool_weight = 230
 
 [filament:Verbatim PETG @MMU1]
 inherits = *PETMMU1*
@@ -2838,6 +2878,7 @@ renamed_from = "Prusa PET MMU1"; "Prusa PETG MMU1"
 filament_vendor = Made for Prusa
 filament_cost = 22.99
 filament_density = 1.27
+filament_spool_weight = 230
 
 [filament:Prusament PETG @MMU1]
 inherits = *PETMMU1*
@@ -2846,6 +2887,7 @@ first_layer_temperature = 240
 temperature = 250
 filament_cost = 29.99
 filament_density = 1.27
+filament_spool_weight = 201
 filament_type = PETG
 
 [filament:Taulman T-Glase @MMU1]
@@ -2910,6 +2952,7 @@ inherits = Generic PETG; *PETMINI*
 filament_vendor = Plasty Mladec
 filament_cost = 27.82
 filament_density = 1.27
+filament_spool_weight = 230
 compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
 
 [filament:Verbatim PETG @MINI]
@@ -2979,6 +3022,7 @@ inherits = Generic ABS; *ABSMINI*
 filament_vendor = Hatchbox
 filament_cost = 27.82
 filament_density = 1.08
+filament_spool_weight = 225
 fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
@@ -2993,6 +3037,7 @@ inherits = Generic ABS; *ABSMINI*
 filament_vendor = Plasty Mladec
 filament_cost = 27.82
 filament_density = 1.08
+filament_spool_weight = 230
 fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
@@ -3022,6 +3067,7 @@ filament_vendor = Prusa Polymers
 first_layer_temperature = 240
 temperature = 250
 filament_density = 1.27
+filament_spool_weight = 201
 filament_cost = 29.99
 compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
 
@@ -3044,6 +3090,7 @@ inherits = Prusament PETG; *PETMINI06*
 first_layer_temperature = 240
 temperature = 250
 filament_density = 1.27
+filament_spool_weight = 201
 filament_cost = 29.99
 
 [filament:Generic PETG @0.6 nozzle MINI]
@@ -3063,6 +3110,7 @@ filament_density = 1.23
 [filament:Plasty Mladec PETG @0.6 nozzle MINI]
 inherits = Generic PETG; *PETMINI06*
 filament_vendor = Plasty Mladec
+filament_spool_weight = 230
 
 [filament:Verbatim PETG @0.6 nozzle MINI]
 inherits = Generic PETG; *PETMINI06*
@@ -3090,6 +3138,7 @@ filament_type = ASA
 filament_colour = #FFF2EC
 filament_cost = 35.28
 filament_density = 1.07
+filament_spool_weight = 201
 
 [filament:Fillamentum Flexfill 98A @MINI]
 inherits = SemiFlex or Flexfill 98A; *FLEXMINI*
@@ -3098,6 +3147,7 @@ first_layer_temperature = 240
 temperature = 240
 filament_max_volumetric_speed = 1.35
 filament_cost = 33.99
+filament_spool_weight = 230
 
 [filament:Generic FLEX @MINI]
 inherits = SemiFlex or Flexfill 98A; *FLEXMINI*
@@ -3173,6 +3223,7 @@ filament_retract_lift = 0
 filament_retract_before_travel = 7
 filament_wipe = 0
 filament_density = 1.20
+filament_spool_weight = 230
 filament_cost = 33.95
 bridge_fan_speed = 70
 fan_always_on = 1
@@ -3193,6 +3244,7 @@ temperature = 265
 filament_type = CPE
 filament_cost = 34.99
 filament_density = 1.25
+filament_spool_weight = 230
 
 [filament:ColorFabb nGen @MINI]
 inherits = ColorFabb nGen; *PETMINI*
@@ -3208,6 +3260,7 @@ filament_cost = 28.80
 inherits = Fillamentum ABS; *ABSMINI*
 filament_cost = 32.4
 filament_density = 1.04
+filament_spool_weight = 230
 fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
@@ -3234,6 +3287,7 @@ filament_type = ASA
 filament_colour = #FFF2EC
 filament_cost = 38.7
 filament_density = 1.07
+filament_spool_weight = 230
 
 [filament:Polymaker PC-Max @MINI]
 inherits = Polymaker PC-Max; *ABSMINI*
@@ -3253,6 +3307,7 @@ inherits = *ABSMINI*
 filament_vendor = Prusa Polymers
 filament_cost = 49.99
 filament_density = 1.22
+filament_spool_weight = 201
 fan_always_on = 0
 first_layer_temperature = 275
 first_layer_bed_temperature = 100
@@ -3281,6 +3336,7 @@ inherits = *ABSMINI*
 filament_vendor = Made for Prusa
 filament_cost = 22.99
 filament_density = 1.08
+filament_spool_weight = 230
 fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
@@ -3374,6 +3430,7 @@ renamed_from = "Prusa PET MINI"; "Prusa PETG MINI"
 filament_vendor = Made for Prusa
 filament_cost = 22.99
 filament_density = 1.27
+filament_spool_weight = 230
 compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
 
 [filament:Prusa PETG @0.6 nozzle MINI]
@@ -3382,6 +3439,7 @@ renamed_from = "Prusa PET 0.6 nozzle MINI"; "Prusa PETG 0.6 nozzle MINI"
 filament_vendor = Made for Prusa
 filament_cost = 22.99
 filament_density = 1.27
+filament_spool_weight = 230
 
 [sla_print:*common*]
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_SL1.*/
@@ -3409,6 +3467,7 @@ support_pillar_diameter = 1
 support_pillar_connection_mode = zigzag
 support_pillar_widening_factor = 0
 supports_enable = 1
+support_small_pillar_diameter_percent = 60%
 
 [sla_print:0.025 UltraDetail]
 inherits = *common*

From 7527797a36b68251290c70e69ef2cca998e29bf4 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Sat, 21 Nov 2020 15:59:02 +0100
Subject: [PATCH 081/138] Bumped up version number

---
 version.inc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/version.inc b/version.inc
index 36c15a52d..b34ee729d 100644
--- a/version.inc
+++ b/version.inc
@@ -3,7 +3,7 @@
 
 set(SLIC3R_APP_NAME "PrusaSlicer")
 set(SLIC3R_APP_KEY "PrusaSlicer")
-set(SLIC3R_VERSION "2.3.0-alpha3")
+set(SLIC3R_VERSION "2.3.0-alpha4")
 set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN")
 set(SLIC3R_RC_VERSION "2,3,0,0")
 set(SLIC3R_RC_VERSION_DOTS "2.3.0.0")

From 641d27eef4d1bb8a20d3aee3f4db66401a344fe0 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Sat, 21 Nov 2020 16:05:58 +0100
Subject: [PATCH 082/138] Fixed missing include

---
 src/slic3r/GUI/OG_CustomCtrl.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp
index 9f7ddf3bb..3e455f672 100644
--- a/src/slic3r/GUI/OG_CustomCtrl.cpp
+++ b/src/slic3r/GUI/OG_CustomCtrl.cpp
@@ -8,6 +8,7 @@
 #include <boost/algorithm/string/split.hpp>
 #include "libslic3r/Utils.hpp"
 #include "I18N.hpp"
+#include "format.hpp"
 
 namespace Slic3r { namespace GUI {
 

From 2e0e63fed8f8a8c14f0938480f3f36bb3fa8f057 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Sat, 21 Nov 2020 18:15:20 +0100
Subject: [PATCH 083/138] Tooltips for the parameters labels on Settings tabs
 are back

---
 src/slic3r/GUI/OG_CustomCtrl.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp
index 3e455f672..7da66a565 100644
--- a/src/slic3r/GUI/OG_CustomCtrl.cpp
+++ b/src/slic3r/GUI/OG_CustomCtrl.cpp
@@ -244,8 +244,10 @@ void OG_CustomCtrl::OnMotion(wxMouseEvent& event)
 
     for (CtrlLine& line : ctrl_lines) {
         line.is_focused = is_point_in_rect(pos, line.rect_label);
-        if (line.is_focused && !suppress_hyperlinks) {
-            tooltip = get_url(line.og_line.label_path);
+        if (line.is_focused) {
+            if (!suppress_hyperlinks && !line.og_line.label_path.empty())
+                tooltip = get_url(line.og_line.label_path) +"\n\n";
+            tooltip += line.og_line.label_tooltip;
             break;
         }
 
@@ -610,7 +612,7 @@ wxCoord    OG_CustomCtrl::CtrlLine::draw_text(wxDC& dc, wxPoint pos, const wxStr
         dc.GetMultiLineTextExtent(out_text, &text_width, &text_height);
 
         pos.y = pos.y + lround((height - text_height) / 2);
-        if (width > 0 && is_url)
+        if (width > 0)
             rect_label = wxRect(pos, wxSize(text_width, text_height));
 
         wxColour old_clr = dc.GetTextForeground();

From 3a75b0da7f049edf1145d373f3fa8e5bc85ee96c Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Mon, 23 Nov 2020 09:13:48 +0100
Subject: [PATCH 084/138] Update of the perimeter_acceleration tooltip

---
 src/libslic3r/PrintConfig.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 5f29c15a8..629838a0b 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -1555,8 +1555,7 @@ void PrintConfigDef::init_fff_params()
     def = this->add("perimeter_acceleration", coFloat);
     def->label = L("Perimeters");
     def->tooltip = L("This is the acceleration your printer will use for perimeters. "
-                   "A high value like 9000 usually gives good results if your hardware is up to the job. "
-                   "Set zero to disable acceleration control for perimeters.");
+                     "Set zero to disable acceleration control for perimeters.");
     def->sidetext = L("mm/s²");
     def->mode = comExpert;
     def->set_default_value(new ConfigOptionFloat(0));

From 26befd5fa329c35ec03cfa80b890c2ad9cac1158 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Mon, 23 Nov 2020 13:45:12 +0100
Subject: [PATCH 085/138] #5234 - Disabled pop-up menu on the wipe tower

---
 src/slic3r/GUI/GLCanvas3D.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index b8e379965..2ae852dbd 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -3313,9 +3313,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
             const float factor = m_retina_helper->get_scale_factor();
             logical_pos = logical_pos.cwiseQuotient(Vec2d(factor, factor));
 #endif // ENABLE_RETINA_GL
-            if (!m_mouse.dragging)
+            if (!m_mouse.dragging) {
                 // do not post the event if the user is panning the scene
-                post_event(RBtnEvent(EVT_GLCANVAS_RIGHT_CLICK, { logical_pos, m_hover_volume_idxs.empty() }));
+                // or if right click was done over the wipe tower
+                bool post_right_click_event = m_hover_volume_idxs.empty() || !m_volumes.volumes[get_first_hover_volume_idx()]->is_wipe_tower;
+                if (post_right_click_event)
+                    post_event(RBtnEvent(EVT_GLCANVAS_RIGHT_CLICK, { logical_pos, m_hover_volume_idxs.empty() }));
+            }
         }
 
         mouse_up_cleanup();

From 1d0b947fa87bee5dd5286183e1ba584cf5b7710a Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Mon, 23 Nov 2020 14:30:31 +0100
Subject: [PATCH 086/138] ENABLE_GCODE_VIEWER set as default in:

GCodeViewer hpp/cpp
---
 src/slic3r/GUI/GCodeViewer.cpp | 2 --
 src/slic3r/GUI/GCodeViewer.hpp | 3 ---
 2 files changed, 5 deletions(-)

diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index cee0b655b..4a4a8e90e 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -1,7 +1,6 @@
 #include "libslic3r/libslic3r.h"
 #include "GCodeViewer.hpp"
 
-#if ENABLE_GCODE_VIEWER
 #include "libslic3r/Print.hpp"
 #include "libslic3r/Geometry.hpp"
 #include "libslic3r/Model.hpp"
@@ -2934,4 +2933,3 @@ void GCodeViewer::log_memory_used(const std::string& label, long long additional
 } // namespace GUI
 } // namespace Slic3r
 
-#endif // ENABLE_GCODE_VIEWER
diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp
index 1a11b633e..fff80a224 100644
--- a/src/slic3r/GUI/GCodeViewer.hpp
+++ b/src/slic3r/GUI/GCodeViewer.hpp
@@ -1,7 +1,6 @@
 #ifndef slic3r_GCodeViewer_hpp_
 #define slic3r_GCodeViewer_hpp_
 
-#if ENABLE_GCODE_VIEWER
 #include "3DScene.hpp"
 #include "libslic3r/GCode/GCodeProcessor.hpp"
 #include "GLModel.hpp"
@@ -522,7 +521,5 @@ private:
 } // namespace GUI
 } // namespace Slic3r
 
-#endif // ENABLE_GCODE_VIEWER
-
 #endif // slic3r_GCodeViewer_hpp_
 

From f1acde80241b451bb85ba3604703d3d1fbcf5087 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Mon, 23 Nov 2020 16:05:24 +0100
Subject: [PATCH 087/138] Fix broken wipe tower arrangement

fixes #5207
fixes #5216
---
 src/slic3r/GUI/Jobs/ArrangeJob.cpp | 33 +++++++++++++-----------------
 src/slic3r/GUI/Jobs/ArrangeJob.hpp | 25 +++++++++++++++++-----
 src/slic3r/GUI/Jobs/FillBedJob.cpp |  6 +++---
 3 files changed, 37 insertions(+), 27 deletions(-)

diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
index b8f165c02..7a8c21365 100644
--- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp
+++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
@@ -41,7 +41,8 @@ public:
         ret.poly.contour = std::move(ap);
         ret.translation  = scaled(m_pos);
         ret.rotation     = m_rotation;
-        ret.priority++;
+        ++ret.priority;
+
         return ret;
     }
 };
@@ -74,11 +75,11 @@ void ArrangeJob::prepare_all() {
     for (ModelObject *obj: m_plater->model().objects)
         for (ModelInstance *mi : obj->instances) {
             ArrangePolygons & cont = mi->printable ? m_selected : m_unprintable;
-            cont.emplace_back(get_arrange_poly(mi, m_plater));
+            cont.emplace_back(get_arrange_poly(PtrWrapper{mi}, m_plater));
         }
 
-    if (auto wti = get_wipe_tower(*m_plater))
-        m_selected.emplace_back(wti.get_arrange_polygon());
+    if (auto wti = get_wipe_tower_arrangepoly(*m_plater))
+        m_selected.emplace_back(std::move(*wti));
 }
 
 void ArrangeJob::prepare_selected() {
@@ -106,8 +107,9 @@ void ArrangeJob::prepare_selected() {
                 inst_sel[size_t(inst_id)] = true;
         
         for (size_t i = 0; i < inst_sel.size(); ++i) {
-            ArrangePolygon &&ap = get_arrange_poly(mo->instances[i], m_plater);
-            
+            ArrangePolygon &&ap =
+                get_arrange_poly(PtrWrapper{mo->instances[i]}, m_plater);
+
             ArrangePolygons &cont = mo->instances[i]->printable ?
                         (inst_sel[i] ? m_selected :
                                        m_unselected) :
@@ -118,11 +120,11 @@ void ArrangeJob::prepare_selected() {
     }
     
     if (auto wti = get_wipe_tower(*m_plater)) {
-        ArrangePolygon &&ap = get_arrange_poly(&wti, m_plater);
-        
-        m_plater->get_selection().is_wipe_tower() ?
-                    m_selected.emplace_back(std::move(ap)) :
-                    m_unselected.emplace_back(std::move(ap));
+        ArrangePolygon &&ap = get_arrange_poly(wti, m_plater);
+
+        auto &cont = m_plater->get_selection().is_wipe_tower() ? m_selected :
+                                                                 m_unselected;
+        cont.emplace_back(std::move(ap));
     }
     
     // If the selection was empty arrange everything
@@ -212,18 +214,11 @@ std::optional<arrangement::ArrangePolygon>
 get_wipe_tower_arrangepoly(const Plater &plater)
 {
     if (auto wti = get_wipe_tower(plater))
-        return wti.get_arrange_polygon();
+        return get_arrange_poly(wti, &plater);
 
     return {};
 }
 
-void apply_wipe_tower_arrangepoly(Plater &                           plater,
-                                  const arrangement::ArrangePolygon &ap)
-{
-    WipeTower{plater.canvas3D()->get_wipe_tower_info()}
-        .apply_arrange_result(ap.translation.cast<double>(), ap.rotation);
-}
-
 double bed_stride(const Plater *plater) {
     double bedwidth = plater->bed_shape_bb().size().x();
     return scaled<double>((1. + LOGICAL_BED_GAP) * bedwidth);
diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.hpp b/src/slic3r/GUI/Jobs/ArrangeJob.hpp
index f178711e9..73540c230 100644
--- a/src/slic3r/GUI/Jobs/ArrangeJob.hpp
+++ b/src/slic3r/GUI/Jobs/ArrangeJob.hpp
@@ -47,7 +47,6 @@ public:
 };
 
 std::optional<arrangement::ArrangePolygon> get_wipe_tower_arrangepoly(const Plater &);
-void apply_wipe_tower_arrangepoly(Plater &plater, const arrangement::ArrangePolygon &ap);
 
 // The gap between logical beds in the x axis expressed in ratio of
 // the current bed width.
@@ -56,20 +55,36 @@ static const constexpr double LOGICAL_BED_GAP = 1. / 5.;
 // Stride between logical beds
 double bed_stride(const Plater *plater);
 
+template<class T> struct PtrWrapper
+{
+    T *ptr;
+
+    explicit PtrWrapper(T *p) : ptr{p} {}
+
+    arrangement::ArrangePolygon get_arrange_polygon() const
+    {
+        return ptr->get_arrange_polygon();
+    }
+
+    void apply_arrange_result(const Vec2d &t, double rot)
+    {
+        ptr->apply_arrange_result(t, rot);
+    }
+};
+
 // Set up arrange polygon for a ModelInstance and Wipe tower
 template<class T>
-arrangement::ArrangePolygon get_arrange_poly(T *obj, const Plater *plater)
+arrangement::ArrangePolygon get_arrange_poly(T obj, const Plater *plater)
 {
     using ArrangePolygon = arrangement::ArrangePolygon;
 
-    ArrangePolygon ap = obj->get_arrange_polygon();
-    ap.priority       = 0;
+    ArrangePolygon ap = obj.get_arrange_polygon();
     ap.bed_idx        = ap.translation.x() / bed_stride(plater);
     ap.setter         = [obj, plater](const ArrangePolygon &p) {
         if (p.is_arranged()) {
             Vec2d t = p.translation.cast<double>();
             t.x() += p.bed_idx * bed_stride(plater);
-            obj->apply_arrange_result(t, p.rotation);
+            T{obj}.apply_arrange_result(t, p.rotation);
         }
     };
 
diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp
index 8c7b3c418..060528006 100644
--- a/src/slic3r/GUI/Jobs/FillBedJob.cpp
+++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp
@@ -28,7 +28,7 @@ void FillBedJob::prepare()
     m_selected.reserve(model_object->instances.size());
     for (ModelInstance *inst : model_object->instances)
         if (inst->printable) {
-            ArrangePolygon ap = get_arrange_poly(inst, m_plater);
+            ArrangePolygon ap = get_arrange_poly(PtrWrapper{inst}, m_plater);
             ++ap.priority; // need to be included in the result
             m_selected.emplace_back(ap);
         }
@@ -40,8 +40,8 @@ void FillBedJob::prepare()
     auto &objects = m_plater->model().objects;
     for (size_t idx = 0; idx < objects.size(); ++idx)
         if (int(idx) != m_object_idx)
-            for (const ModelInstance *mi : objects[idx]->instances) {
-                m_unselected.emplace_back(mi->get_arrange_polygon());
+            for (ModelInstance *mi : objects[idx]->instances) {
+                m_unselected.emplace_back(get_arrange_poly(PtrWrapper{mi}, m_plater));
                 m_unselected.back().bed_idx = 0;
             }
 

From 95d65f9f3085bc0c935b1bb3691151f89343f7b2 Mon Sep 17 00:00:00 2001
From: David Kocik <kocikdav@gmail.com>
Date: Mon, 23 Nov 2020 16:42:03 +0100
Subject: [PATCH 088/138] Documentation for NotificationManager

---
 src/slic3r/GUI/NotificationManager.hpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp
index d483173c3..da544391d 100644
--- a/src/slic3r/GUI/NotificationManager.hpp
+++ b/src/slic3r/GUI/NotificationManager.hpp
@@ -150,7 +150,9 @@ private:
 		const int                duration;
 		const std::string        text1;
 		const std::string        hypertext;
-		// Callback for hypertext - returns if notif shall close.
+		// Callback for hypertext - returns true if notification should close after triggering
+		// Usually sends event to UI thread thru wxEvtHandler.
+		// Examples in basic_notifications.
 		std::function<bool(wxEvtHandler*)> callback { nullptr };
 		const std::string        text2;
 	};
@@ -227,7 +229,8 @@ private:
 		void         render_left_sign(ImGuiWrapper& imgui);
 		virtual void render_minimize_button(ImGuiWrapper& imgui,
 			                                const float win_pos_x, const float win_pos_y);
-		// Hypertext action, returns if close notification
+		// Hypertext action, returns true if notification should close.
+		// Action is stored in NotificationData::callback as std::function<bool(wxEvtHandler*)>
 		virtual bool on_text_click();
 
 		const NotificationData m_data;

From 92953acc57971be634a905710e4ac274ef8d1e1b Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Mon, 23 Nov 2020 17:15:22 +0100
Subject: [PATCH 089/138] #5236 - Fixed color not correctly shown after slice

The bug was introduced with 148f4fe766cb7cf63972686af600d83804a2e8d3 which is now replaced by this commit
---
 src/libslic3r/GCode/GCodeProcessor.cpp | 9 ++-------
 src/slic3r/GUI/GCodeViewer.cpp         | 4 ++++
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index e2a3d0fd7..d30ec70b5 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -598,9 +598,6 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
         }
     }
 
-    // ensure at least one (default) color is defined
-    std::string default_color = "#FF8000";
-    m_result.extruder_colors = std::vector<std::string>(1, default_color);
     const ConfigOptionStrings* extruder_colour = config.option<ConfigOptionStrings>("extruder_colour");
     if (extruder_colour != nullptr) {
         // takes colors from config
@@ -615,7 +612,9 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
         }
     }
 
+
     // replace missing values with default
+    std::string default_color = "#FF8000";
     for (size_t i = 0; i < m_result.extruder_colors.size(); ++i) {
         if (m_result.extruder_colors[i].empty())
             m_result.extruder_colors[i] = default_color;
@@ -837,10 +836,6 @@ void GCodeProcessor::process_file(const std::string& filename, bool apply_postpr
 
     update_estimated_times_stats();
 
-    // ensure at least one (default) color is defined
-    if (m_result.extruder_colors.empty())
-        m_result.extruder_colors.push_back("#FF8000");
-
     // post-process to add M73 lines into the gcode
     if (apply_postprocess)
         m_time_processor.post_process(filename);
diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index 4a4a8e90e..7101ee811 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -373,6 +373,10 @@ void GCodeViewer::refresh(const GCodeProcessor::Result& gcode_result, const std:
         // update tool colors
         m_tool_colors = decode_colors(str_tool_colors);
 
+    // ensure at least one (default) color is defined
+    if (m_tool_colors.empty())
+        m_tool_colors.push_back(decode_color("#FF8000"));
+
     // update ranges for coloring / legend
     m_extrusions.reset_ranges();
     for (size_t i = 0; i < m_moves_count; ++i) {

From 79c2bd15750075270378069a18d41b272361bfcc Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Mon, 23 Nov 2020 17:52:08 +0100
Subject: [PATCH 090/138] Fix for gcode-viewer symlink

fixes #5238
---
 src/CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c93d95946..acd8d465c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -249,5 +249,5 @@ else ()
     install(TARGETS PrusaSlicer RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
 
     # Install the symlink for gcodeviewer
-    install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink prusa-slicer prusa-gcodeviewer WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})")
+    install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink prusa-slicer prusa-gcodeviewer WORKING_DIRECTORY \$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})")
 endif ()

From 4736408a460fbf917978185efc28dc1b49a6ed41 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Tue, 24 Nov 2020 09:23:33 +0100
Subject: [PATCH 091/138] Fixed localization on preview's legend button

---
 src/slic3r/GUI/GCodeViewer.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index 7101ee811..166976c3a 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -2783,7 +2783,7 @@ void GCodeViewer::render_legend() const
         ImGui::SameLine();
         imgui.text(short_time(get_time_dhms(time_mode.time)));
 
-        auto show_mode_button = [this, &imgui](const std::string& label, PrintEstimatedTimeStatistics::ETimeMode mode) {
+        auto show_mode_button = [this, &imgui](const wxString& label, PrintEstimatedTimeStatistics::ETimeMode mode) {
             bool show = false;
             for (size_t i = 0; i < m_time_statistics.modes.size(); ++i) {
                 if (i != static_cast<size_t>(mode) &&
@@ -2803,11 +2803,11 @@ void GCodeViewer::render_legend() const
 
         switch (m_time_estimate_mode) {
         case PrintEstimatedTimeStatistics::ETimeMode::Normal: {
-            show_mode_button(_u8L("Show stealth mode"), PrintEstimatedTimeStatistics::ETimeMode::Stealth);
+            show_mode_button(_L("Show stealth mode"), PrintEstimatedTimeStatistics::ETimeMode::Stealth);
             break;
         }
         case PrintEstimatedTimeStatistics::ETimeMode::Stealth: {
-            show_mode_button(_u8L("Show normal mode"), PrintEstimatedTimeStatistics::ETimeMode::Normal);
+            show_mode_button(_L("Show normal mode"), PrintEstimatedTimeStatistics::ETimeMode::Normal);
             break;
         }
         }

From 4b2f9562abbd58ac993d48cbb92cfa5b3793e9e3 Mon Sep 17 00:00:00 2001
From: rtyr <36745189+rtyr@users.noreply.github.com>
Date: Tue, 24 Nov 2020 09:53:50 +0100
Subject: [PATCH 092/138] TriLAB - Added PLA, PETG profiles for 0.8 nozzle,
 update print materials

https://github.com/prusa3d/PrusaSlicer-settings/pull/110
---
 resources/profiles/TriLAB.idx |  11 +-
 resources/profiles/TriLAB.ini | 552 ++++++++++++++++++++++------------
 2 files changed, 370 insertions(+), 193 deletions(-)

diff --git a/resources/profiles/TriLAB.idx b/resources/profiles/TriLAB.idx
index 9281dab13..1cf505da2 100644
--- a/resources/profiles/TriLAB.idx
+++ b/resources/profiles/TriLAB.idx
@@ -1,5 +1,6 @@
-min_slic3r_version = 2.3.0-alpha3
-0.0.3 Added DeltiQ 2, DeltiQ 2 Plus printers, 0.10mm, 0.20mm FLEX print profiles, updated print materials, flexprint extension support
-min_slic3r_version = 2.3.0-alpha0
-0.0.2 Added 0.15mm print profile
-0.0.1 Initial TriLAB bundle
+min_slic3r_version = 2.3.0-alpha3
+0.0.4 Added PLA, PETG profiles for 0.8 nozzle, update print materials
+0.0.3 Added DeltiQ 2, DeltiQ 2 Plus printers, 0.10mm, 0.20mm FLEX print profiles, updated print materials, flexprint extension support
+min_slic3r_version = 2.3.0-alpha0
+0.0.2 Added 0.15mm print profile
+0.0.1 Initial TriLAB bundle
\ No newline at end of file
diff --git a/resources/profiles/TriLAB.ini b/resources/profiles/TriLAB.ini
index 735314ae2..959190e35 100644
--- a/resources/profiles/TriLAB.ini
+++ b/resources/profiles/TriLAB.ini
@@ -6,7 +6,7 @@
 name = TriLAB
 # Configuration version of this file. Config file will only be installed, if the config_version differs.
 # This means, the server may force the PrusaSlicer configuration to be downgraded.
-config_version = 0.0.3
+config_version = 0.0.4
 # Where to get the updates from?
 config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/TriLAB/
 # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@@ -17,21 +17,21 @@ config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/Prus
 
 [printer_model:DQ2]
 name = DeltiQ 2
-variants = 0.4
+variants = 0.4; 0.8
 technology = FFF
 family = DeltiQ 2
 bed_model = dq2_bed.stl
 bed_texture = dq2_bed_texture.svg
-default_materials = DeltiQ PLA; DeltiQ ASA; DeltiQ PET; DeltiQ ABS; DeltiQ CPE
+default_materials = DeltiQ - PLA - Generic; DeltiQ - PETG - Generic; DeltiQ - ABS - Generic; DeltiQ - PLA - ExtraFill (Fillamentum); DeltiQ - PETG (Devil Design); DeltiQ - ABS - ExtraFill (Fillamentum); DeltiQ - ASA - ExtraFill (Fillamentum); DeltiQ - CPE - HG100 (Fillamentum); DeltiQ FP2 - PLA - Generic; DeltiQ FP2 - PETG - Generic; DeltiQ FP2 - ABS - Generic; DeltiQ FP2 - PLA - ExtraFill (Fillamentum); DeltiQ FP2 - PETG (Devil Design); DeltiQ FP2 - ABS - ExtraFill (Fillamentum); DeltiQ FP2 - ASA - ExtraFill (Fillamentum); DeltiQ FP2 - CPE - HG100 (Fillamentum); DeltiQ FP2 - FLEX - Generic; DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum); DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle
 
 [printer_model:DQ2P]
 name = DeltiQ 2 Plus
-variants = 0.4
+variants = 0.4; 0.8
 technology = FFF
 family = DeltiQ 2
 bed_model = dq2_bed.stl
 bed_texture = dq2_bed_texture.svg
-default_materials = DeltiQ PLA; DeltiQ ASA; DeltiQ PET; DeltiQ ABS; DeltiQ CPE
+default_materials = DeltiQ - PLA - Generic; DeltiQ - PETG - Generic; DeltiQ - ABS - Generic; DeltiQ - PLA - ExtraFill (Fillamentum); DeltiQ - PETG (Devil Design); DeltiQ - ABS - ExtraFill (Fillamentum); DeltiQ - ASA - ExtraFill (Fillamentum); DeltiQ - CPE - HG100 (Fillamentum); DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle
 
 [printer_model:DQ2+FP2]
 name = DeltiQ 2 + FlexPrint 2
@@ -40,7 +40,7 @@ technology = FFF
 family = DeltiQ 2
 bed_model = dq2_bed.stl
 bed_texture = dq2_bed_texture.svg
-default_materials = DeltiQ FlexPrint 2 FLEX; DeltiQ FlexPrint 2 FLEX Smartfil; DeltiQ FlexPrint 2 PLA; DeltiQ FlexPrint 2 ASA; DeltiQ FlexPrint 2 PET; DeltiQ FlexPrint 2 ABS; DeltiQ FlexPrint 2 CPE
+default_materials = DeltiQ FP2 - PLA - Generic; DeltiQ FP2 - PETG - Generic; DeltiQ FP2 - ABS - Generic; DeltiQ FP2 - PLA - ExtraFill (Fillamentum); DeltiQ FP2 - PETG (Devil Design); DeltiQ FP2 - ABS - ExtraFill (Fillamentum); DeltiQ FP2 - ASA - ExtraFill (Fillamentum); DeltiQ FP2 - CPE - HG100 (Fillamentum); DeltiQ FP2 - FLEX - Generic; DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum)
 
 [printer_model:DQ2P+FP2]
 name = DeltiQ 2 Plus + FlexPrint 2
@@ -49,7 +49,7 @@ technology = FFF
 family = DeltiQ 2
 bed_model = dq2_bed.stl
 bed_texture = dq2_bed_texture.svg
-default_materials = DeltiQ FlexPrint 2 FLEX; DeltiQ FlexPrint 2 FLEX Smartfil; DeltiQ FlexPrint 2 PLA; DeltiQ FlexPrint 2 ASA; DeltiQ FlexPrint 2 PET; DeltiQ FlexPrint 2 ABS; DeltiQ FlexPrint 2 CPE
+default_materials = DeltiQ FP2 - PLA - Generic; DeltiQ FP2 - PETG - Generic; DeltiQ FP2 - ABS - Generic; DeltiQ FP2 - PLA - ExtraFill (Fillamentum); DeltiQ FP2 - PETG (Devil Design); DeltiQ FP2 - ABS - ExtraFill (Fillamentum); DeltiQ FP2 - ASA - ExtraFill (Fillamentum); DeltiQ FP2 - CPE - HG100 (Fillamentum); DeltiQ FP2 - FLEX - Generic; DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum); DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum)
 
 [printer_model:DQ2+FP]
 name = DeltiQ 2 + FlexPrint
@@ -58,7 +58,7 @@ technology = FFF
 family = DeltiQ 2
 bed_model = dq2_bed.stl
 bed_texture = dq2_bed_texture.svg
-default_materials = DeltiQ FlexPrint FLEX; DeltiQ FlexPrint PLA; DeltiQ FlexPrint ASA; DeltiQ FlexPrint PET; DeltiQ FlexPrint ABS; DeltiQ FlexPrint CPE
+default_materials = DeltiQ FP - PLA - Generic; DeltiQ FP - PETG - Generic; DeltiQ FP - ABS - Generic; DeltiQ FP - PLA - ExtraFill (Fillamentum); DeltiQ FP - PETG (Devil Design); DeltiQ FP - ABS - ExtraFill (Fillamentum); DeltiQ FP - ASA - ExtraFill (Fillamentum); DeltiQ FP - CPE - HG100 (Fillamentum); DeltiQ FP - FLEX - Generic; 
 
 [printer_model:DQ2P+FP]
 name = DeltiQ 2 Plus + FlexPrint
@@ -67,7 +67,7 @@ technology = FFF
 family = DeltiQ 2
 bed_model = dq2_bed.stl
 bed_texture = dq2_bed_texture.svg
-default_materials = DeltiQ FlexPrint FLEX; DeltiQ FlexPrint PLA; DeltiQ FlexPrint ASA; DeltiQ FlexPrint PET; DeltiQ FlexPrint ABS; DeltiQ FlexPrint CPE
+default_materials = DeltiQ FP - PLA - Generic; DeltiQ FP - PETG - Generic; DeltiQ FP - ABS - Generic; DeltiQ FP - PLA - ExtraFill (Fillamentum); DeltiQ FP - PETG (Devil Design); DeltiQ FP - ABS - ExtraFill (Fillamentum); DeltiQ FP - ASA - ExtraFill (Fillamentum); DeltiQ FP - CPE - HG100 (Fillamentum); DeltiQ FP - FLEX - Generic
 
 [printer_model:DQM]
 name = DeltiQ M
@@ -105,7 +105,7 @@ bridge_speed = 30
 brim_width = 0
 clip_multipart_objects = 1
 compatible_printers = 
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and nozzle_diameter[0]==0.4
 complete_objects = 0
 default_acceleration = 2000
 dont_support_bridges = 0
@@ -176,7 +176,7 @@ solid_infill_speed = 60
 spiral_vase = 0
 standby_temperature_delta = -5
 support_material = 0
-support_material_angle = 40
+support_material_angle = 30
 support_material_auto = 1
 support_material_buildplate_only = 0
 support_material_contact_distance = 0.1
@@ -192,7 +192,7 @@ support_material_pattern = rectilinear
 support_material_spacing = 2
 support_material_speed = 50
 support_material_synchronize_layers = 0
-support_material_threshold = 55
+support_material_threshold = 40
 support_material_with_sheath = 0
 support_material_xy_spacing = 0.6
 thin_walls = 0
@@ -254,9 +254,11 @@ thin_walls = 0
 [print:DeltiQ 0.20mm FLEX]
 inherits = DeltiQ 0.20mm Normal
 avoid_crossing_perimeters = 0
-bridge_flow_ratio = 0.90
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*FLEXPRINT.*/
+bridge_flow_ratio = 0.80
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*FLEXPRINT.*/ and nozzle_diameter[0]==0.4
+extra_perimeters = 1
 only_retract_when_crossing_perimeters = 1
+extrusion_width = 0.40
 overhangs = 0
 seam_position = nearest
 thin_walls = 0
@@ -264,23 +266,71 @@ bridge_speed = 20
 external_perimeter_speed = 20
 first_layer_speed = 20
 gap_fill_speed = 25
-infill_speed = 30
+infill_extrusion_width = 0.55
+infill_speed = 40
+infill_overlap = 27%
 perimeter_speed = 25
 small_perimeter_speed = 20
 solid_infill_speed = 30
+solid_infill_extrusion_width = 0.45
 support_material_contact_distance = 0.3
+support_material_speed = 30
 top_solid_infill_speed = 20
 top_fill_pattern = rectilinear
 fill_pattern = grid
 fill_density = 25%
 travel_speed = 200
-max_print_speed = 30
+max_print_speed = 40
 complete_objects = 1
 
+[print:DeltiQ 0.40mm Normal @0.8 nozzle]
+inherits = DeltiQ 0.20mm Normal
+bottom_solid_layers = 3
+bottom_solid_min_thickness = 1.2
+bridge_flow_ratio = 0.90
+bridge_speed = 20
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and nozzle_diameter[0]==0.8
+elefant_foot_compensation = 0.2
+external_perimeter_extrusion_width = 0.80
+external_perimeter_speed = 30
+extrusion_width = 0.80
+first_layer_extrusion_width = 0.80
+first_layer_height = 0.4
+first_layer_speed = 20
+gap_fill_speed = 40
+infill_extrusion_width = 0.9
+infill_overlap = 28%
+infill_speed = 60
+layer_height = 0.4
+max_print_speed = 80
+max_volumetric_speed = 40
+overhangs = 1
+perimeter_extrusion_width = 0.80
+perimeter_speed = 45
+perimeters = 2
+small_perimeter_speed = 20
+solid_infill_extrusion_width = 0.8
+solid_infill_speed = 60
+top_infill_extrusion_width = 0.8
+top_solid_infill_speed = 40
+top_solid_layers = 4
+top_solid_min_thickness = 1.2
+
+[print:DeltiQ 0.40mm Vase @0.8 nozzle]
+inherits = DeltiQ 0.40mm Normal @0.8 nozzle
+bottom_solid_layers = 4
+perimeters = 1
+top_solid_layers = 0
+fill_density = 0
+support_material = 0
+spiral_vase = 1
+ensure_vertical_shell_thickness = 1
+thin_walls = 0
+
 
 [filament:*DeltiQ common*]
 compatible_printers = 
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and !(printer_notes=~/.*FLEXPRINT.*/)
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and !(printer_notes=~/.*FLEXPRINT.*/) and nozzle_diameter[0]==0.4
 disable_fan_first_layers = 3
 extrusion_multiplier = 1
 filament_colour = #FF0000
@@ -294,7 +344,37 @@ filament_toolchange_delay = 0
 start_filament_gcode = "; FILAMENT_START_GCODE"
 end_filament_gcode = "; FILAMENT_END_GCODE"
 
-[filament:DeltiQ PET]
+
+# DeltiQ Filaments #
+
+[filament:DeltiQ - PLA - Generic]
+inherits = *DeltiQ common* 
+bed_temperature = 55
+bridge_fan_speed = 100
+cooling = 1
+fan_always_on = 1
+fan_below_layer_time = 100
+filament_vendor = Fillamentum
+filament_cost = 767
+filament_density = 1.24
+filament_max_volumetric_speed = 8
+filament_retract_before_travel = 2
+filament_retract_before_wipe = 90%
+filament_retract_layer_change = 1
+filament_retract_length = 4.0
+filament_retract_lift = 0.2
+filament_retract_speed = 30
+filament_type = PLA
+filament_wipe = 1
+first_layer_bed_temperature = 55
+first_layer_temperature = 220
+max_fan_speed = 100
+min_fan_speed = 100
+min_print_speed = 10
+slowdown_below_layer_time = 4
+temperature = 215
+
+[filament:DeltiQ - PETG - Generic]
 inherits = *DeltiQ common* 
 bed_temperature = 90
 bridge_fan_speed = 50
@@ -322,34 +402,7 @@ min_print_speed = 10
 slowdown_below_layer_time = 5
 temperature = 245
 
-[filament:DeltiQ PLA]
-inherits = *DeltiQ common* 
-bed_temperature = 55
-bridge_fan_speed = 100
-cooling = 1
-fan_always_on = 1
-fan_below_layer_time = 100
-filament_vendor = Fillamentum
-filament_cost = 767
-filament_density = 1.24
-filament_max_volumetric_speed = 8
-filament_retract_before_travel = 2
-filament_retract_before_wipe = 90%
-filament_retract_layer_change = 1
-filament_retract_length = 4.0
-filament_retract_lift = 0.2
-filament_retract_speed = 30
-filament_type = PLA
-filament_wipe = 1
-first_layer_bed_temperature = 55
-first_layer_temperature = 220
-max_fan_speed = 100
-min_fan_speed = 100
-min_print_speed = 10
-slowdown_below_layer_time = 4
-temperature = 215
-
-[filament:DeltiQ ABS]
+[filament:DeltiQ - ABS - Generic]
 inherits = *DeltiQ common* 
 bed_temperature = 100
 bridge_fan_speed = 25
@@ -376,14 +429,24 @@ min_print_speed = 10
 slowdown_below_layer_time = 15
 temperature = 255
 
-[filament:DeltiQ ASA]
-inherits = DeltiQ ABS 
+[filament:DeltiQ - PLA - ExtraFill (Fillamentum)]
+inherits = DeltiQ - PLA - Generic
+
+[filament:DeltiQ - PETG (Devil Design)]
+inherits = DeltiQ - PETG - Generic
+
+[filament:DeltiQ - ABS - ExtraFill (Fillamentum)]
+inherits = DeltiQ - ABS - Generic
+
+[filament:DeltiQ - ASA - ExtraFill (Fillamentum)]
+inherits = DeltiQ - ABS - Generic
 filament_density = 1.07
 filament_type = ASA
+filament_vendor = Fillamentum
 first_layer_temperature = 265
 temperature = 265
 
-[filament:DeltiQ CPE]
+[filament:DeltiQ - CPE - HG100 (Fillamentum)]
 inherits = *DeltiQ common* 
 bed_temperature = 90
 bridge_fan_speed = 50
@@ -411,41 +474,155 @@ min_print_speed = 10
 slowdown_below_layer_time = 5
 temperature = 260
 
+[filament:DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle]
+inherits = DeltiQ - PLA - ExtraFill (Fillamentum)
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and !(printer_notes=~/.*FLEXPRINT.*/) and nozzle_diameter[0]==0.8
+disable_fan_first_layers = 1
+filament_max_volumetric_speed = 40
+first_layer_temperature = 230
+slowdown_below_layer_time = 8
+temperature = 230
+filament_retract_layer_change = 0
+filament_retract_length = 4.1
+filament_retract_speed = 45
+filament_deretract_speed = 25
 
-[filament:DeltiQ FlexPrint 2 PET]
-inherits = DeltiQ PET 
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/
+[filament:DeltiQ - PETG (Devil Design) @0.8 nozzle]
+inherits = DeltiQ - PETG (Devil Design)
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and !(printer_notes=~/.*FLEXPRINT.*/) and nozzle_diameter[0]==0.8
+filament_max_volumetric_speed = 40
+first_layer_temperature = 240
+slowdown_below_layer_time = 8
+temperature = 240
+filament_retract_layer_change = 0
+filament_retract_length = 4.3
+filament_retract_speed = 45
+filament_deretract_speed = 25
+filament_retract_before_wipe = 80%
+filament_wipe = 1
+
+
+# DeltiQ FlexPrint Filaments #
+
+[filament:DeltiQ FP - PLA - Generic]
+inherits = DeltiQ - PLA - Generic
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/ and nozzle_diameter[0]==0.4
+filament_retract_length = 0.7
+filament_retract_speed = 28
+
+[filament:DeltiQ FP - PETG - Generic]
+inherits = DeltiQ - PETG - Generic
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/ and nozzle_diameter[0]==0.4
+filament_retract_length = 0.7
+filament_retract_speed = 25
+
+[filament:DeltiQ FP - ABS - Generic]
+inherits = DeltiQ - ABS - Generic
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/ and nozzle_diameter[0]==0.4
+filament_retract_length = 0.7
+filament_retract_speed = 25
+
+[filament:DeltiQ FP - FLEX - Generic]
+inherits = *DeltiQ common*
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/ and nozzle_diameter[0]==0.4
+bed_temperature = 50
+bridge_fan_speed = 80
+cooling = 1
+disable_fan_first_layers = 1
+extrusion_multiplier = 1.07
+fan_always_on = 1
+fan_below_layer_time = 20
+filament_vendor = Generic
+filament_cost = 1870
+filament_density = 1.22
+filament_deretract_speed = nil
+filament_max_volumetric_speed = 0.7
+filament_retract_before_travel = 2
+filament_retract_before_wipe = 70%
+filament_retract_layer_change = 0
+filament_retract_length = 2.5
+filament_retract_lift = 0.2
+filament_retract_restart_extra = nil
+filament_retract_speed = 20
+filament_type = FLEX
+filament_wipe = 1
+first_layer_bed_temperature = 50
+first_layer_temperature = 240
+max_fan_speed = 50
+min_fan_speed = 30
+min_print_speed = 5
+slowdown_below_layer_time = 4
+temperature = 240
+
+[filament:DeltiQ FP - PLA - ExtraFill (Fillamentum)]
+inherits = DeltiQ FP - PLA - Generic
+
+[filament:DeltiQ FP - PETG (Devil Design)]
+inherits = DeltiQ FP - PETG - Generic
+
+[filament:DeltiQ FP - ABS - ExtraFill (Fillamentum)]
+inherits = DeltiQ FP - ABS - Generic
+
+[filament:DeltiQ FP - ASA - ExtraFill (Fillamentum)]
+inherits = DeltiQ - ASA - ExtraFill (Fillamentum)
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/ and nozzle_diameter[0]==0.4
+filament_retract_length = 0.7
+filament_retract_speed = 25
+
+[filament:DeltiQ FP - CPE - HG100 (Fillamentum)]
+inherits = DeltiQ - CPE - HG100 (Fillamentum)
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/ and nozzle_diameter[0]==0.4
+filament_retract_length = 0.7
+filament_retract_speed = 25
+filament_deretract_speed = 0
+filament_retract_before_wipe = 0%
+
+
+# DeltiQ FlexPrint 2 Filaments #
+
+[filament:DeltiQ FP2 - PLA - Generic]
+inherits = DeltiQ FP - PLA - Generic
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/ and nozzle_diameter[0]==0.4
+filament_retract_length = 1.2
+filament_retract_speed = 28
+
+[filament:DeltiQ FP2 - PETG - Generic]
+inherits = DeltiQ FP - PETG - Generic
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/ and nozzle_diameter[0]==0.4
 filament_retract_length = 1.4
 filament_retract_speed = 35
 filament_retract_before_wipe = 0%
 
-[filament:DeltiQ FlexPrint 2 PLA]
-inherits = DeltiQ PLA
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/
-filament_retract_length = 1.2
-filament_retract_speed = 28
-
-[filament:DeltiQ FlexPrint 2 ABS]
-inherits = DeltiQ ABS
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/
+[filament:DeltiQ FP2 - ABS - Generic]
+inherits = DeltiQ FP - ABS - Generic
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/ and nozzle_diameter[0]==0.4
 filament_retract_length = 0.8
 filament_retract_speed = 25
 
-[filament:DeltiQ FlexPrint 2 ASA]
-inherits = DeltiQ ASA
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/
+[filament:DeltiQ FP2 - PLA - ExtraFill (Fillamentum)]
+inherits = DeltiQ FP2 - PLA - Generic
 
-[filament:DeltiQ FlexPrint 2 CPE]
-inherits = DeltiQ CPE
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/
+[filament:DeltiQ FP2 - PETG (Devil Design)]
+inherits = DeltiQ FP2 - PETG - Generic
+
+[filament:DeltiQ FP2 - ABS - ExtraFill (Fillamentum)]
+inherits = DeltiQ FP2 - ABS - Generic
+
+[filament:DeltiQ FP2 - ASA - ExtraFill (Fillamentum)]
+inherits = DeltiQ FP - ASA - ExtraFill (Fillamentum)
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/ and nozzle_diameter[0]==0.4
+
+[filament:DeltiQ FP2 - CPE - HG100 (Fillamentum)]
+inherits = DeltiQ FP - CPE - HG100 (Fillamentum)
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/ and nozzle_diameter[0]==0.4
 filament_retract_length = 0.8
 filament_retract_speed = 35
 filament_deretract_speed = 0
 filament_retract_before_wipe = 0%
 
-[filament:DeltiQ FlexPrint 2 FLEX]
-inherits = *DeltiQ common*
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/
+[filament:DeltiQ FP2 - FLEX - Generic]
+inherits = DeltiQ FP - FLEX - Generic
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/ and nozzle_diameter[0]==0.4
 bed_temperature = 50
 bridge_fan_speed = 80
 cooling = 1
@@ -456,12 +633,12 @@ fan_below_layer_time = 20
 filament_vendor = Fillamentum
 filament_cost = 1870
 filament_density = 1.22
-filament_deretract_speed = 0
+filament_deretract_speed = nil
 filament_max_volumetric_speed = 2.9
-filament_retract_before_travel = 1
+filament_retract_before_travel = 2
 filament_retract_before_wipe = 70%
 filament_retract_layer_change = 0
-filament_retract_length = 1.6
+filament_retract_length = 2.5
 filament_retract_lift = 0.2
 filament_retract_restart_extra = nil
 filament_retract_speed = 20
@@ -475,72 +652,52 @@ min_print_speed = 5
 slowdown_below_layer_time = 4
 temperature = 225
 
-[filament:DeltiQ FlexPrint 2 FLEX Smartfil]
-inherits = *DeltiQ common*
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT2.*/
+[filament:DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum)]
+inherits = DeltiQ FP2 - FLEX - Generic
 bed_temperature = 50
 bridge_fan_speed = 80
-cooling = 0
-disable_fan_first_layers = 3
-extrusion_multiplier = 1.07
+cooling = 1
+disable_fan_first_layers = 1
+extrusion_multiplier = 1.10
 fan_always_on = 1
 fan_below_layer_time = 20
-filament_vendor = Smart Materials 3D
-filament_cost = 1209
-filament_density = 1.21
-filament_deretract_speed = 0
-filament_max_volumetric_speed = 2.5
-filament_retract_before_travel = 1
-filament_retract_before_wipe = nil
+filament_vendor = Fillamentum
+filament_cost = 1870
+filament_density = 1.22
+filament_deretract_speed = nil
+filament_max_volumetric_speed = 2.9
+filament_retract_before_travel = 2
+filament_retract_before_wipe = 70%
 filament_retract_layer_change = 0
-filament_retract_length = 1.2
+filament_retract_length = 2.5
 filament_retract_lift = 0.2
 filament_retract_restart_extra = nil
 filament_retract_speed = 20
-filament_type = FLEX
-filament_wipe = 0
+filament_type = TPU92A
+filament_wipe = 1
 first_layer_bed_temperature = 50
-first_layer_temperature = 240
-max_fan_speed = 50
+first_layer_temperature = 230
+max_fan_speed = 70
 min_fan_speed = 50
-min_print_speed = 10
+min_print_speed = 5
 slowdown_below_layer_time = 4
-temperature = 240
+temperature = 230
 
+[filament:DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum)]
+inherits = DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum)
+extrusion_multiplier = 1.10
+filament_cost = 1870
+filament_density = 1.23
+filament_deretract_speed = nil
+filament_max_volumetric_speed = 2.9
+filament_retract_before_wipe = 70%
+filament_retract_length = 2.5
+filament_retract_speed = 20
+filament_type = TPU98A
 
-[filament:DeltiQ FlexPrint PET]
-inherits = DeltiQ PET 
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/
-filament_retract_length = 0.7
-filament_retract_speed = 25
+           
+# DeltiQ Printer #
 
-[filament:DeltiQ FlexPrint PLA]
-inherits = DeltiQ PLA
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/
-filament_retract_length = 0.7
-filament_retract_speed = 28
-
-[filament:DeltiQ FlexPrint ABS]
-inherits = DeltiQ ABS
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/
-filament_retract_length = 0.7
-filament_retract_speed = 25
-
-[filament:DeltiQ FlexPrint ASA]
-inherits = DeltiQ ASA
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/
-filament_retract_length = 0.7
-filament_retract_speed = 25
-
-[filament:DeltiQ FlexPrint CPE]
-inherits = DeltiQ CPE
-compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_FAMILY_DQ.*/ and printer_notes=~/.*FLEXPRINT1.*/
-filament_retract_length = 0.7
-filament_retract_speed = 25
-filament_deretract_speed = 0
-filament_retract_before_wipe = 0%
-
-                     
 [printer:*DeltiQ*]
 inherits = 
 bed_shape = 124.315x13.0661,122.268x25.989,118.882x38.6271,114.193x50.8421,108.253x62.5,101.127x73.4732,92.8931x83.6413,83.6413x92.8931,73.4732x101.127,62.5x108.253,50.8421x114.193,38.6271x118.882,25.989x122.268,13.0661x124.315,3.54096e-014x125,-13.0661x124.315,-25.989x122.268,-38.6271x118.882,-50.8421x114.193,-62.5x108.253,-73.4732x101.127,-83.6413x92.8931,-92.8931x83.6413,-101.127x73.4732,-108.253x62.5,-114.193x50.8421,-118.882x38.6271,-122.268x25.989,-124.315x13.0661,-125x7.08192e-014,-124.315x-13.0661,-122.268x-25.989,-118.882x-38.6271,-114.193x-50.8421,-108.253x-62.5,-101.127x-73.4732,-92.8931x-83.6413,-83.6413x-92.8931,-73.4732x-101.127,-62.5x-108.253,-50.8421x-114.193,-38.6271x-118.882,-25.989x-122.268,-13.0661x-124.315,-2.29621e-014x-125,13.0661x-124.315,25.989x-122.268,38.6271x-118.882,50.8421x-114.193,62.5x-108.253,73.4732x-101.127,83.6413x-92.8931,92.8931x-83.6413,101.127x-73.4732,108.253x-62.5,114.193x-50.8421,118.882x-38.6271,122.268x-25.989,124.315x-13.0661,125x-1.41638e-013
@@ -597,68 +754,6 @@ variable_layer_height = 0
 wipe = 1
 z_offset = 0
 
-[printer:*DeltiQ 2*]
-inherits = *DeltiQ*
-before_layer_gcode = ; BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n
-end_gcode = ; END_GCODE\n\nM140 S0 ; Turn off bed\n\nG28 ; Home\n\nM104 S0 ; Turn off extruder\nM107 ; Turn off fan\n\nG90 ; Absolute positioning\nM220 S100  ; Feedmultiply back to 100percent\n\nM84 S5; Disable motors
-gcode_flavor = reprap
-layer_gcode = ; AFTER_LAYER_CHANGE\n;[layer_z]
-pause_print_gcode = M0
-start_gcode = ; START_GCODE\n\nM220 S100 ; Set feedmultiply back to 100percent\n\nT0 ; Select Titan extruder\n\nG90 ; Absolute positioning\nM83; Relative Extruder\n\nM190 S[first_layer_bed_temperature] ; Set and wait - bed temperature\nM104 S[first_layer_temperature]\n\nG28 ; Home all axes\nG32 ; Probe Z and calculate Z plane\n\nG29 ; Mesh bed probe\n\nG1009 ; Go ARC to purge end\n\nG92 E0 ; Zero extruder
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_TRILAB\nPRINTER_FAMILY_DQ\nPRINTER_MODEL_DQ2
-
-[printer:*DeltiQ 2 FlexPrint*]
-inherits = *DeltiQ 2*
-start_gcode = ; START_GCODE\n\nM220 S100 ; Set feedmultiply back to 100percent\n\nT1 ; Select FlexPrint extruder\n\nG90 ; Absolute positioning\nM83; Relative Extruder\n\nM190 S[first_layer_bed_temperature] ; Set and wait - bed temperature\nM104 S[first_layer_temperature]\n\nG28 ; Home all axes\nG32 ; Probe Z and calculate Z plane\n\nG29 ; Mesh bed probe\n\nG1009 ; Go ARC to purge end\n\nG92 E0 ; Zero extruder
-default_print_profile = DeltiQ 0.20mm FLEX
-default_filament_profile = "DeltiQ FlexPrint 2 FLEX"
-retract_length = 0.7
-retract_speed = 25
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_TRILAB\nPRINTER_FAMILY_DQ\nPRINTER_MODEL_DQ2+FP\nFLEXPRINT1
-
-[printer:*DeltiQ 2 FlexPrint 2*]
-inherits = *DeltiQ 2 FlexPrint*
-default_filament_profile = "DeltiQ FlexPrint 2 FLEX"
-retract_length = 0.8
-retract_speed = 25
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_TRILAB\nPRINTER_FAMILY_DQ\nPRINTER_MODEL_DQ2+FP\nFLEXPRINT2
-
-[printer:DeltiQ 2]
-inherits = *DeltiQ 2*
-printer_model = DQ2
-printer_variant = 0.4
-max_print_height = 320
-
-[printer:DeltiQ 2 Plus]
-inherits = *DeltiQ 2*
-printer_model = DQ2P
-printer_variant = 0.4
-max_print_height = 500
-
-[printer:DeltiQ 2 + FlexPrint 2]
-inherits = *DeltiQ 2 FlexPrint 2*
-printer_model = DQ2+FP2
-printer_variant = 0.4
-max_print_height = 320
-
-[printer:DeltiQ 2 Plus + FlexPrint 2]
-inherits = *DeltiQ 2 FlexPrint 2*
-printer_model = DQ2P+FP2
-printer_variant = 0.4
-max_print_height = 500
-
-[printer:DeltiQ 2 + FlexPrint]
-inherits = *DeltiQ 2 FlexPrint*
-printer_model = DQ2+FP
-printer_variant = 0.4
-max_print_height = 320
-
-[printer:DeltiQ 2 Plus + FlexPrint]
-inherits = *DeltiQ 2 FlexPrint*
-printer_model = DQ2P+FP
-printer_variant = 0.4
-max_print_height = 500
-         
 [printer:DeltiQ L]
 inherits = *DeltiQ*
 printer_model = DQL
@@ -686,7 +781,88 @@ max_print_height = 500
 retract_length = 4.5
 retract_speed = 35
 
+[printer:*DeltiQ 2*]
+inherits = *DeltiQ*
+before_layer_gcode = ; BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n
+end_gcode = ; END_GCODE\n\nM140 S0 ; Turn off bed\n\nG28 ; Home\n\nM104 S0 ; Turn off extruder\nM107 ; Turn off fan\n\nG90 ; Absolute positioning\nM220 S100  ; Feedmultiply back to 100percent\n\nM84 S5; Disable motors
+gcode_flavor = reprap
+layer_gcode = ; AFTER_LAYER_CHANGE\n;[layer_z]
+pause_print_gcode = M0
+start_gcode = ; START_GCODE\n\nM220 S100 ; Set feedmultiply back to 100percent\n\nT0 ; Select Titan extruder\n\nG90 ; Absolute positioning\nM83; Relative Extruder\n\nM190 S[first_layer_bed_temperature] ; Set and wait - bed temperature\nM104 S[first_layer_temperature]\n\nG28 ; Home all axes\nG32 ; Probe Z and calculate Z plane\n\nG29 ; Mesh bed probe\n\nG1009 ; Go ARC to purge end\n\nG92 E0 ; Zero extruder
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_TRILAB\nPRINTER_FAMILY_DQ\nPRINTER_MODEL_DQ2
+
+[printer:DeltiQ 2]
+inherits = *DeltiQ 2*
+printer_model = DQ2
+printer_variant = 0.4
+max_print_height = 320
+
+[printer:DeltiQ 2 - 0.8 nozzle]
+inherits = DeltiQ 2
+printer_variant = 0.8
+max_layer_height = 0.4
+min_layer_height = 0.4
+nozzle_diameter = 0.8
+default_filament_profile = "DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle"
+default_print_profile = DeltiQ 0.40mm Normal @0.8 nozzle
+
+[printer:DeltiQ 2 Plus]
+inherits = *DeltiQ 2*
+printer_model = DQ2P
+printer_variant = 0.4
+max_print_height = 500
+
+[printer:DeltiQ 2 Plus - 0.8 nozzle]
+inherits = DeltiQ 2 Plus 
+printer_variant = 0.8
+max_layer_height = 0.4
+min_layer_height = 0.4
+nozzle_diameter = 0.8
+default_filament_profile = "DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle"
+default_print_profile = DeltiQ 0.40mm Normal @0.8 nozzle
+
+[printer:*DeltiQ 2 FlexPrint*]
+inherits = *DeltiQ 2*
+start_gcode = ; START_GCODE\n\nM220 S100 ; Set feedmultiply back to 100percent\n\nT1 ; Select FlexPrint extruder\n\nG90 ; Absolute positioning\nM83; Relative Extruder\n\nM190 S[first_layer_bed_temperature] ; Set and wait - bed temperature\nM104 S[first_layer_temperature]\n\nG28 ; Home all axes\nG32 ; Probe Z and calculate Z plane\n\nG29 ; Mesh bed probe\n\nG1009 ; Go ARC to purge end\n\nG92 E0 ; Zero extruder
+default_print_profile = DeltiQ 0.20mm FLEX
+default_filament_profile = "DeltiQ FP2 - FLEX - Generic"
+retract_length = 0.7
+retract_speed = 25
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_TRILAB\nPRINTER_FAMILY_DQ\nPRINTER_MODEL_DQ2+FP\nFLEXPRINT1
+
+[printer:DeltiQ 2 + FlexPrint]
+inherits = *DeltiQ 2 FlexPrint*
+printer_model = DQ2+FP
+printer_variant = 0.4
+max_print_height = 320
+
+[printer:DeltiQ 2 Plus + FlexPrint]
+inherits = *DeltiQ 2 FlexPrint*
+printer_model = DQ2P+FP
+printer_variant = 0.4
+max_print_height = 500
+
+[printer:*DeltiQ 2 FlexPrint 2*]
+inherits = *DeltiQ 2 FlexPrint*
+default_filament_profile = "DeltiQ FP2 - FLEX - Generic"
+retract_length = 0.8
+retract_speed = 25
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_TRILAB\nPRINTER_FAMILY_DQ\nPRINTER_MODEL_DQ2+FP\nFLEXPRINT2
+
+[printer:DeltiQ 2 + FlexPrint 2]
+inherits = *DeltiQ 2 FlexPrint 2*
+printer_model = DQ2+FP2
+printer_variant = 0.4
+max_print_height = 320
+
+[printer:DeltiQ 2 Plus + FlexPrint 2]
+inherits = *DeltiQ 2 FlexPrint 2*
+printer_model = DQ2P+FP2
+printer_variant = 0.4
+max_print_height = 500
+
+
 [presets]
 print = DeltiQ 0.20mm Normal
 printer = DeltiQ 2
-filament = DeltiQ PLA
\ No newline at end of file
+filament = DeltiQ - PLA - Generic
\ No newline at end of file

From b2951cb43e739f03e5baf7a03b0eb064b779ad07 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Tue, 24 Nov 2020 10:03:15 +0100
Subject: [PATCH 093/138] Added "Remember my choice" checkbox to the message
 dialog after first clicking on parameter label in Settings tabs

---
 src/slic3r/GUI/OG_CustomCtrl.cpp | 64 +++++++++++++++++++++++++++-----
 src/slic3r/GUI/OG_CustomCtrl.hpp | 14 +++++++
 src/slic3r/GUI/Preferences.cpp   |  6 ++-
 3 files changed, 74 insertions(+), 10 deletions(-)

diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp
index 7da66a565..8469b1a4b 100644
--- a/src/slic3r/GUI/OG_CustomCtrl.cpp
+++ b/src/slic3r/GUI/OG_CustomCtrl.cpp
@@ -674,21 +674,67 @@ wxCoord OG_CustomCtrl::CtrlLine::draw_act_bmps(wxDC& dc, wxPoint pos, const wxBi
 
 bool OG_CustomCtrl::CtrlLine::launch_browser() const
 {
+    if (!is_focused || og_line.label_path.IsEmpty())
+        return false;
+
+    bool launch = true;
+
     if (get_app_config()->get("suppress_hyperlinks").empty()) {
-        wxString preferences_item = _L("Suppress to open hyperlink in browser");
-        wxString msg =
-            _L("PrusaSlicer will remember your action.") + "\n" +
-            _L("You will not be asked about it again on label hovering.") + "\n\n" +
-            format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto changes your choise."), preferences_item) + "\n\n" +
-            _L("Should we suppress to use hyperlinks in PrusaSlicer?");
+        RememberChoiceDialog dialog(nullptr, _L("Should we open this hyperlink in your default browser?"), _L("PrusaSlicer: Open hyperlink"));
+        int answer = dialog.ShowModal();
+        launch = answer == wxID_YES;
 
-        wxMessageDialog dialog(nullptr, msg, _L("PrusaSlicer: Don't ask me again"), wxYES | wxNO | wxICON_INFORMATION);
-        get_app_config()->set("suppress_hyperlinks", dialog.ShowModal() == wxID_YES ? "1" : "0");
+        get_app_config()->set("suppress_hyperlinks", dialog.remember_choice() ? (answer == wxID_NO ? "1" : "0") : "");
     }
+    if (launch)
+        launch = get_app_config()->get("suppress_hyperlinks") != "1";
 
-    return get_app_config()->get("suppress_hyperlinks") == "0" && is_focused && !og_line.label_path.IsEmpty() && wxLaunchDefaultBrowser(get_url(og_line.label_path));
+    return  launch && wxLaunchDefaultBrowser(get_url(og_line.label_path));
 }
 
 
+RememberChoiceDialog::RememberChoiceDialog(wxWindow* parent, const wxString& msg_text, const wxString& caption)
+    : wxDialog(parent, wxID_ANY, caption, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxICON_INFORMATION)
+{
+    this->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
+    this->SetEscapeId(wxID_CLOSE);
+
+    wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL);
+
+    m_remember_choice = new wxCheckBox(this, wxID_ANY, _L("Remember my choice"));
+    m_remember_choice->SetValue(false);
+    m_remember_choice->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& evt)
+        {
+            if (!evt.IsChecked())
+                return;
+            wxString preferences_item = _L("Suppress to open hyperlink in browser");
+            wxString msg =
+                _L("PrusaSlicer will remember your choice.") + "\n\n" +
+                _L("You will not be asked about it again on label hovering.") + "\n\n" +
+                format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto changes your choice."), preferences_item);
+
+            wxMessageDialog dialog(nullptr, msg, _L("PrusaSlicer: Don't ask me again"), wxOK | wxCANCEL | wxICON_INFORMATION);
+            if (dialog.ShowModal() == wxID_CANCEL)
+                m_remember_choice->SetValue(false);
+        });
+
+
+    // Add dialog's buttons
+    wxStdDialogButtonSizer* btns = this->CreateStdDialogButtonSizer(wxYES | wxNO);
+    wxButton* btnYES = static_cast<wxButton*>(this->FindWindowById(wxID_YES, this));
+    wxButton* btnNO = static_cast<wxButton*>(this->FindWindowById(wxID_NO, this));
+    btnYES->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { this->EndModal(wxID_YES); });
+    btnNO->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { this->EndModal(wxID_NO); });
+
+    topSizer->Add(new wxStaticText(this, wxID_ANY, msg_text), 0, wxEXPAND | wxALL, 10);
+    topSizer->Add(m_remember_choice, 0, wxEXPAND | wxALL, 10);
+    topSizer->Add(btns, 0, wxEXPAND | wxALL, 10);
+
+    this->SetSizer(topSizer);
+    topSizer->SetSizeHints(this);
+
+    this->CenterOnScreen();
+}
+
 } // GUI
 } // Slic3r
diff --git a/src/slic3r/GUI/OG_CustomCtrl.hpp b/src/slic3r/GUI/OG_CustomCtrl.hpp
index 722b393f5..798443f39 100644
--- a/src/slic3r/GUI/OG_CustomCtrl.hpp
+++ b/src/slic3r/GUI/OG_CustomCtrl.hpp
@@ -95,6 +95,20 @@ public:
 
 };
 
+//-----------------------------------------------
+//          RememberChoiceDialog
+//-----------------------------------------------
+
+class RememberChoiceDialog : public wxDialog
+{
+    wxCheckBox* m_remember_choice;
+public:
+    RememberChoiceDialog(wxWindow* parent, const wxString& msg_text, const wxString& caption);
+    ~RememberChoiceDialog() {}
+
+    bool remember_choice() const { return m_remember_choice->GetValue(); }
+};
+
 }}
 
 #endif /* slic3r_OG_CustomCtrl_hpp_ */
diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index 4abe4b84c..95e86ff7e 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -204,7 +204,11 @@ void PreferencesDialog::build()
 	m_optgroup_gui = std::make_shared<ConfigOptionsGroup>(this, _L("GUI"));
 	m_optgroup_gui->label_width = 40;
 	m_optgroup_gui->m_on_change = [this](t_config_option_key opt_key, boost::any value) {
-		m_values[opt_key] = boost::any_cast<bool>(value) ? "1" : "0";
+        if (opt_key == "suppress_hyperlinks")
+            m_values[opt_key] = boost::any_cast<bool>(value) ? "1" : "";
+        else
+            m_values[opt_key] = boost::any_cast<bool>(value) ? "1" : "0";
+
 		if (opt_key == "use_custom_toolbar_size") {
 			m_icon_size_sizer->ShowItems(boost::any_cast<bool>(value));
 			this->layout();

From 709404ce3e773f40cf380710b81a1cef10d72b44 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Tue, 24 Nov 2020 11:09:05 +0100
Subject: [PATCH 094/138] Fixed crash in texture compression

---
 src/slic3r/GUI/GLTexture.cpp | 141 ++++++++++++-----------------------
 1 file changed, 49 insertions(+), 92 deletions(-)

diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp
index 6a4d0f9b6..b97d8ae48 100644
--- a/src/slic3r/GUI/GLTexture.cpp
+++ b/src/slic3r/GUI/GLTexture.cpp
@@ -75,11 +75,9 @@ void GLTexture::Compressor::send_compressed_data_to_gpu()
     glsafe(::glBindTexture(GL_TEXTURE_2D, m_texture.m_id));
 	// Querying the atomic m_num_levels_compressed value synchronizes processor caches, so that the dat of m_levels modified by the worker thread are accessible to the calling thread.
 	int num_compressed = (int)m_num_levels_compressed;
-    for (int i = 0; i < num_compressed; ++ i)
-    {
+    for (int i = 0; i < num_compressed; ++ i) {
         Level& level = m_levels[i];
-        if (! level.sent_to_gpu && ! level.compressed_data.empty())
-        {
+        if (! level.sent_to_gpu && ! level.compressed_data.empty()) {
             glsafe(::glCompressedTexSubImage2D(GL_TEXTURE_2D, (GLint)i, 0, 0, (GLsizei)level.w, (GLsizei)level.h, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)level.compressed_data.size(), (const GLvoid*)level.compressed_data.data()));
             glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, i));
             glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (i > 0) ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR));
@@ -102,14 +100,13 @@ void GLTexture::Compressor::compress()
     assert(m_num_levels_compressed == 0);
     assert(m_abort_compressing == false);
 
-    for (Level& level : m_levels)
-    {
+    for (Level& level : m_levels) {
         if (m_abort_compressing)
             break;
 
         // stb_dxt library, despite claiming that the needed size of the destination buffer is equal to (source buffer size)/4,
-        // crashes if doing so, requiring a minimum of 16 bytes and up to a third of the source buffer size, so we set the destination buffer initial size to be half the source buffer size
-        level.compressed_data = std::vector<unsigned char>(std::max((unsigned int)16, level.w * level.h * 2), 0);
+        // crashes if doing so, requiring a minimum of 64 bytes and up to a third of the source buffer size, so we set the destination buffer initial size to be half the source buffer size
+        level.compressed_data = std::vector<unsigned char>(std::max((unsigned int)64, (unsigned int)level.src_data.size() / 2), 0);
         int compressed_size = 0;
         rygCompress(level.compressed_data.data(), level.src_data.data(), level.w, level.h, 1, compressed_size);
         level.compressed_data.resize(compressed_size);
@@ -166,7 +163,7 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
 {
     reset();
 
-    if (filenames.empty() || states.empty() || (sprite_size_px == 0))
+    if (filenames.empty() || states.empty() || sprite_size_px == 0)
         return false;
 
     // every tile needs to have a 1px border around it to avoid artifacts when linear sampling on its edges
@@ -180,8 +177,7 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
     int sprite_stride = sprite_size_px_ex * 4;
     int sprite_bytes = sprite_n_pixels * 4;
 
-    if (n_pixels <= 0)
-    {
+    if (n_pixels <= 0) {
         reset();
         return false;
     }
@@ -193,15 +189,13 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
     std::vector<unsigned char> output_data(sprite_bytes, 0);
 
     NSVGrasterizer* rast = nsvgCreateRasterizer();
-    if (rast == nullptr)
-    {
+    if (rast == nullptr) {
         reset();
         return false;
     }
 
     int sprite_id = -1;
-    for (const std::string& filename : filenames)
-    {
+    for (const std::string& filename : filenames) {
         ++sprite_id;
 
         if (!boost::filesystem::exists(filename))
@@ -221,8 +215,7 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
 
         // makes white only copy of the sprite
         ::memcpy((void*)sprite_white_only_data.data(), (const void*)sprite_data.data(), sprite_bytes);
-        for (int i = 0; i < sprite_n_pixels; ++i)
-        {
+        for (int i = 0; i < sprite_n_pixels; ++i) {
             int offset = i * 4;
             if (sprite_white_only_data.data()[offset] != 0)
                 ::memset((void*)&sprite_white_only_data.data()[offset], 255, 3);
@@ -230,8 +223,7 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
 
         // makes gray only copy of the sprite
         ::memcpy((void*)sprite_gray_only_data.data(), (const void*)sprite_data.data(), sprite_bytes);
-        for (int i = 0; i < sprite_n_pixels; ++i)
-        {
+        for (int i = 0; i < sprite_n_pixels; ++i) {
             int offset = i * 4;
             if (sprite_gray_only_data.data()[offset] != 0)
                 ::memset((void*)&sprite_gray_only_data.data()[offset], 128, 3);
@@ -239,30 +231,26 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
 
         int sprite_offset_px = sprite_id * (int)sprite_size_px_ex * m_width;
         int state_id = -1;
-        for (const std::pair<int, bool>& state : states)
-        {
+        for (const std::pair<int, bool>& state : states) {
             ++state_id;
 
             // select the sprite variant
             std::vector<unsigned char>* src = nullptr;
             switch (state.first)
             {
-            case 1: { src = &sprite_white_only_data; break; }
-            case 2: { src = &sprite_gray_only_data; break; }
+            case 1:  { src = &sprite_white_only_data; break; }
+            case 2:  { src = &sprite_gray_only_data; break; }
             default: { src = &sprite_data; break; }
             }
 
             ::memcpy((void*)output_data.data(), (const void*)src->data(), sprite_bytes);
             // applies background, if needed
-            if (state.second)
-            {
+            if (state.second) {
                 float inv_255 = 1.0f / 255.0f;
                 // offset by 1 to leave the first pixel empty (both in x and y)
-                for (unsigned int r = 1; r <= sprite_size_px; ++r)
-                {
+                for (unsigned int r = 1; r <= sprite_size_px; ++r) {
                     unsigned int offset_r = r * sprite_size_px_ex;
-                    for (unsigned int c = 1; c <= sprite_size_px; ++c)
-                    {
+                    for (unsigned int c = 1; c <= sprite_size_px; ++c) {
                         unsigned int offset = (offset_r + c) * 4;
                         float alpha = (float)output_data.data()[offset + 3] * inv_255;
                         output_data.data()[offset + 0] = (unsigned char)(output_data.data()[offset + 0] * alpha);
@@ -274,8 +262,7 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
             }
 
             int state_offset_px = sprite_offset_px + state_id * sprite_size_px_ex;
-            for (int j = 0; j < (int)sprite_size_px_ex; ++j)
-            {
+            for (int j = 0; j < (int)sprite_size_px_ex; ++j) {
                 ::memcpy((void*)&data.data()[(state_offset_px + j * m_width) * 4], (const void*)&output_data.data()[j * sprite_stride], sprite_stride);
             }
         }
@@ -309,11 +296,9 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
     wxImage output(m_width, m_height);
     output.InitAlpha();
 
-    for (int h = 0; h < m_height; ++h)
-    {
+    for (int h = 0; h < m_height; ++h) {
         int px_h = h * m_width;
-        for (int w = 0; w < m_width; ++w)
-        {
+        for (int w = 0; w < m_width; ++w) {
             int offset = (px_h + w) * 4;
             output.SetRGB(w, h, data.data()[offset + 0], data.data()[offset + 1], data.data()[offset + 2]);
             output.SetAlpha(w, h, data.data()[offset + 3]);
@@ -373,8 +358,7 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
 
     // Load a PNG with an alpha channel.
     wxImage image;
-    if (!image.LoadFile(wxString::FromUTF8(filename.c_str()), wxBITMAP_TYPE_PNG))
-    {
+    if (!image.LoadFile(wxString::FromUTF8(filename.c_str()), wxBITMAP_TYPE_PNG)) {
         reset();
         return false;
     }
@@ -384,20 +368,17 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
 
     bool requires_rescale = false;
 
-    if (compression_enabled && (compression_type == MultiThreaded))
-    {
+    if (compression_enabled && compression_type == MultiThreaded) {
         // the stb_dxt compression library seems to like only texture sizes which are a multiple of 4
         int width_rem = m_width % 4;
         int height_rem = m_height % 4;
 
-        if (width_rem != 0)
-        {
+        if (width_rem != 0) {
             m_width += (4 - width_rem);
             requires_rescale = true;
         }
 
-        if (height_rem != 0)
-        {
+        if (height_rem != 0) {
             m_height += (4 - height_rem);
             requires_rescale = true;
         }
@@ -407,16 +388,14 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
         image = image.ResampleBicubic(m_width, m_height);
 
     int n_pixels = m_width * m_height;
-    if (n_pixels <= 0)
-    {
+    if (n_pixels <= 0) {
         reset();
         return false;
     }
 
     // Get RGB & alpha raw data from wxImage, pack them into an array.
     unsigned char* img_rgb = image.GetData();
-    if (img_rgb == nullptr)
-    {
+    if (img_rgb == nullptr) {
         reset();
         return false;
     }
@@ -424,8 +403,7 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
     unsigned char* img_alpha = image.GetAlpha();
 
     std::vector<unsigned char> data(n_pixels * 4, 0);
-    for (int i = 0; i < n_pixels; ++i)
-    {
+    for (int i = 0; i < n_pixels; ++i) {
         int data_id = i * 4;
         int img_id = i * 3;
         data[data_id + 0] = img_rgb[img_id + 0];
@@ -439,19 +417,16 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
     glsafe(::glGenTextures(1, &m_id));
     glsafe(::glBindTexture(GL_TEXTURE_2D, m_id));
 
-    if (apply_anisotropy)
-    {
+    if (apply_anisotropy) {
         GLfloat max_anisotropy = OpenGLManager::get_gl_info().get_max_anisotropy();
         if (max_anisotropy > 1.0f)
             glsafe(::glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy));
     }
 
-    if (compression_enabled)
-    {
+    if (compression_enabled) {
         if (compression_type == SingleThreaded)
             glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
-        else
-        {
+        else {
             // initializes the texture on GPU 
             glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0));
             // and send the uncompressed data to the compressor
@@ -461,14 +436,12 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
     else
         glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
 
-    if (use_mipmaps)
-    {
+    if (use_mipmaps) {
         // we manually generate mipmaps because glGenerateMipmap() function is not reliable on all graphics cards
         int lod_w = m_width;
         int lod_h = m_height;
         GLint level = 0;
-        while ((lod_w > 1) || (lod_h > 1))
-        {
+        while (lod_w > 1 || lod_h > 1) {
             ++level;
 
             lod_w = std::max(lod_w / 2, 1);
@@ -482,8 +455,7 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
             img_rgb = image.GetData();
             img_alpha = image.GetAlpha();
 
-            for (int i = 0; i < n_pixels; ++i)
-            {
+            for (int i = 0; i < n_pixels; ++i) {
                 int data_id = i * 4;
                 int img_id = i * 3;
                 data[data_id + 0] = img_rgb[img_id + 0];
@@ -492,12 +464,10 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
                 data[data_id + 3] = (img_alpha != nullptr) ? img_alpha[i] : 255;
             }
 
-            if (compression_enabled)
-            {
+            if (compression_enabled) {
                 if (compression_type == SingleThreaded)
                     glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
-                else
-                {
+                else {
                     // initializes the texture on GPU 
                     glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)lod_w, (GLsizei)lod_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0));
                     // and send the uncompressed data to the compressor
@@ -508,14 +478,12 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
                 glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, (GLsizei)lod_w, (GLsizei)lod_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
         }
 
-        if (!compression_enabled)
-        {
+        if (!compression_enabled) {
             glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, level));
             glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR));
         }
     }
-    else
-    {
+    else {
         glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
         glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0));
     }
@@ -526,7 +494,7 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
 
     m_source = filename;
 
-    if (compression_enabled && (compression_type == MultiThreaded))
+    if (compression_enabled && compression_type == MultiThreaded)
         // start asynchronous compression
         m_compressor.start_compressing();
 
@@ -538,8 +506,7 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
     bool compression_enabled = compress && GLEW_EXT_texture_compression_s3tc;
 
     NSVGimage* image = nsvgParseFromFile(filename.c_str(), "px", 96.0f);
-    if (image == nullptr)
-    {
+    if (image == nullptr) {
         reset();
         return false;
     }
@@ -549,8 +516,7 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
     m_width = (int)(scale * image->width);
     m_height = (int)(scale * image->height);
 
-    if (compression_enabled)
-    {
+    if (compression_enabled) {
         // the stb_dxt compression library seems to like only texture sizes which are a multiple of 4
         int width_rem = m_width % 4;
         int height_rem = m_height % 4;
@@ -564,16 +530,14 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
 
     int n_pixels = m_width * m_height;
 
-    if (n_pixels <= 0)
-    {
+    if (n_pixels <= 0) {
         reset();
         nsvgDelete(image);
         return false;
     }
 
     NSVGrasterizer* rast = nsvgCreateRasterizer();
-    if (rast == nullptr)
-    {
+    if (rast == nullptr) {
         nsvgDelete(image);
         reset();
         return false;
@@ -588,15 +552,13 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
     glsafe(::glGenTextures(1, &m_id));
     glsafe(::glBindTexture(GL_TEXTURE_2D, m_id));
 
-    if (apply_anisotropy)
-    {
+    if (apply_anisotropy) {
         GLfloat max_anisotropy = OpenGLManager::get_gl_info().get_max_anisotropy();
         if (max_anisotropy > 1.0f)
             glsafe(::glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy));
     }
 
-    if (compression_enabled)
-    {
+    if (compression_enabled) {
         // initializes the texture on GPU 
         glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0));
         // and send the uncompressed data to the compressor
@@ -605,14 +567,12 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
     else
         glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
 
-    if (use_mipmaps)
-    {
+    if (use_mipmaps) {
         // we manually generate mipmaps because glGenerateMipmap() function is not reliable on all graphics cards
         int lod_w = m_width;
         int lod_h = m_height;
         GLint level = 0;
-        while ((lod_w > 1) || (lod_h > 1))
-        {
+        while (lod_w > 1 || lod_h > 1) {
             ++level;
 
             lod_w = std::max(lod_w / 2, 1);
@@ -622,8 +582,7 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
             data.resize(lod_w * lod_h * 4);
 
             nsvgRasterize(rast, image, 0, 0, scale, data.data(), lod_w, lod_h, lod_w * 4);
-            if (compression_enabled)
-            {
+            if (compression_enabled) {
                 // initializes the texture on GPU 
                 glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)lod_w, (GLsizei)lod_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0));
                 // and send the uncompressed data to the compressor
@@ -633,14 +592,12 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
                 glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, (GLsizei)lod_w, (GLsizei)lod_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
         }
 
-        if (!compression_enabled)
-        {
+        if (!compression_enabled) {
             glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, level));
             glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR));
         }
     }
-    else
-    {
+    else {
         glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
         glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0));
     }

From b2ab5db69b845b1630eb98316b1c508080cfbe81 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Tue, 24 Nov 2020 11:53:52 +0100
Subject: [PATCH 095/138] ENABLE_GCODE_VIEWER set as default in:

DoubleSlider hpp/cpp
---
 src/slic3r/GUI/DoubleSlider.cpp | 156 +-------------------------------
 src/slic3r/GUI/DoubleSlider.hpp |  13 ---
 2 files changed, 4 insertions(+), 165 deletions(-)

diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 4759ec64d..8d28acf8b 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -18,9 +18,6 @@
 #include <wx/bmpcbox.h>
 #include <wx/statline.h>
 #include <wx/dcclient.h>
-#if !ENABLE_GCODE_VIEWER
-#include <wx/numformatter.h>
-#endif // !ENABLE_GCODE_VIEWER
 #include <wx/colordlg.h>
 
 #include <cmath>
@@ -74,13 +71,8 @@ Control::Control( wxWindow *parent,
     if (!is_osx)
         SetDoubleBuffered(true);// SetDoubleBuffered exists on Win and Linux/GTK, but is missing on OSX
 
-#if ENABLE_GCODE_VIEWER
     m_bmp_thumb_higher = (style == wxSL_HORIZONTAL ? ScalableBitmap(this, "thumb_right") : ScalableBitmap(this, "thumb_up"));
     m_bmp_thumb_lower  = (style == wxSL_HORIZONTAL ? ScalableBitmap(this, "thumb_left")  : ScalableBitmap(this, "thumb_down"));
-#else
-    m_bmp_thumb_higher = (style == wxSL_HORIZONTAL ? ScalableBitmap(this, "right_half_circle.png") : ScalableBitmap(this, "thumb_up"));
-    m_bmp_thumb_lower  = (style == wxSL_HORIZONTAL ? ScalableBitmap(this, "left_half_circle.png" ) : ScalableBitmap(this, "thumb_down"));
-#endif // ENABLE_GCODE_VIEWER
     m_thumb_size = m_bmp_thumb_lower.GetBmpSize();
 
     m_bmp_add_tick_on  = ScalableBitmap(this, "colorchange_add");
@@ -314,22 +306,14 @@ double Control::get_double_value(const SelectedSlider& selection)
 Info Control::GetTicksValues() const
 {
     Info custom_gcode_per_print_z;
-#if ENABLE_GCODE_VIEWER
     std::vector<CustomGCode::Item>& values = custom_gcode_per_print_z.gcodes;
-#else
-    std::vector<Item>& values = custom_gcode_per_print_z.gcodes;
-#endif // ENABLE_GCODE_VIEWER
 
     const int val_size = m_values.size();
     if (!m_values.empty())
         for (const TickCode& tick : m_ticks.ticks) {
             if (tick.tick > val_size)
                 break;
-#if ENABLE_GCODE_VIEWER
             values.emplace_back(CustomGCode::Item{ m_values[tick.tick], tick.type, tick.extruder, tick.color, tick.extra });
-#else
-            values.emplace_back(Item{m_values[tick.tick], tick.type, tick.extruder, tick.color, tick.extra});
-#endif // ENABLE_GCODE_VIEWER
         }
 
     if (m_force_mode_apply)
@@ -348,11 +332,7 @@ void Control::SetTicksValues(const Info& custom_gcode_per_print_z)
     const bool was_empty = m_ticks.empty();
 
     m_ticks.ticks.clear();
-#if ENABLE_GCODE_VIEWER
     const std::vector<CustomGCode::Item>& heights = custom_gcode_per_print_z.gcodes;
-#else
-    const std::vector<Item>& heights = custom_gcode_per_print_z.gcodes;
-#endif // ENABLE_GCODE_VIEWER
     for (auto h : heights) {
         auto it = std::lower_bound(m_values.begin(), m_values.end(), h.print_z - epsilon());
 
@@ -442,15 +422,11 @@ void Control::draw_focus_rect()
 
 void Control::render()
 {
-#if ENABLE_GCODE_VIEWER
 #ifdef _WIN32 
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
 #else
     SetBackgroundColour(GetParent()->GetBackgroundColour());
 #endif // _WIN32 
-#else
-    SetBackgroundColour(GetParent()->GetBackgroundColour());
-#endif // ENABLE_GCODE_VIEWER
     draw_focus_rect();
 
     wxPaintDC dc(this);
@@ -494,10 +470,8 @@ void Control::draw_action_icon(wxDC& dc, const wxPoint pt_beg, const wxPoint pt_
 {
     const int tick = m_selection == ssLower ? m_lower_value : m_higher_value;
 
-#if ENABLE_GCODE_VIEWER
     if (!m_enable_action_icon)
         return;
-#endif // ENABLE_GCODE_VIEWER
 
     // suppress add tick on first layer
     if (tick == 0)
@@ -651,7 +625,6 @@ wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer
     if (value >= m_values.size())
         return "ErrVal";
 
-#if ENABLE_GCODE_VIEWER
     if (m_draw_mode == dmSequentialGCodeView)
         return wxString::Format("%d", static_cast<unsigned int>(m_values[value]));
     else {
@@ -668,15 +641,7 @@ wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer
         if (label_type == ltHeightWithLayer)
             return format_wxstr("%1%\n(%2%)", str, m_values.empty() ? value : value + 1);
     }
-#else
-        const wxString str = m_values.empty() ?
-            wxNumberFormatter::ToString(m_label_koef * value, 2, wxNumberFormatter::Style_None) :
-            wxNumberFormatter::ToString(m_values[value], 2, wxNumberFormatter::Style_None);
-        if (label_type == ltHeight)
-            return str;
-        if (label_type == ltHeightWithLayer)
-            return format_wxstr("%1%\n(%2%)", str, m_values.empty() ? value : value + 1);
-#endif // ENABLE_GCODE_VIEWER
+
     return wxEmptyString;
 }
 
@@ -722,32 +687,8 @@ void Control::draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider
 
 void Control::draw_thumb_item(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection)
 {
-#if ENABLE_GCODE_VIEWER
     wxCoord x_draw = pos.x - int(0.5 * m_thumb_size.x);
     wxCoord y_draw = pos.y - int(0.5 * m_thumb_size.y);
-#else
-    wxCoord x_draw, y_draw;
-    if (selection == ssLower) {
-        if (is_horizontal()) {
-            x_draw = pos.x - m_thumb_size.x;
-            y_draw = pos.y - int(0.5*m_thumb_size.y);
-        }
-        else {
-            x_draw = pos.x - int(0.5*m_thumb_size.x);
-            y_draw = pos.y - int(0.5*m_thumb_size.y);
-        }
-    }
-    else {
-        if (is_horizontal()) {
-            x_draw = pos.x;
-            y_draw = pos.y - int(0.5*m_thumb_size.y);
-        }
-        else {
-            x_draw = pos.x - int(0.5*m_thumb_size.x);
-            y_draw = pos.y - int(0.5*m_thumb_size.y);
-        }
-    }
-#endif // ENABLE_GCODE_VIEWER
     dc.DrawBitmap(selection == ssLower ? m_bmp_thumb_lower.bmp() : m_bmp_thumb_higher.bmp(), x_draw, y_draw);
 
     // Update thumb rect
@@ -913,15 +854,11 @@ void Control::draw_colored_band(wxDC& dc)
 
     // don't color a band for MultiExtruder mode
     if (m_ticks.empty() || m_mode == MultiExtruder) {
-#if ENABLE_GCODE_VIEWER
 #ifdef _WIN32 
         draw_band(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW), main_band);
 #else
         draw_band(dc, GetParent()->GetBackgroundColour(), main_band);
 #endif // _WIN32 
-#else
-        draw_band(dc, GetParent()->GetBackgroundColour(), main_band);
-#endif // ENABLE_GCODE_VIEWER
         return;
     }
 
@@ -1065,10 +1002,8 @@ void Control::draw_ruler(wxDC& dc)
 
 void Control::draw_one_layer_icon(wxDC& dc)
 {
-#if ENABLE_GCODE_VIEWER
     if (m_draw_mode == dmSequentialGCodeView)
         return;
-#endif // ENABLE_GCODE_VIEWER
 
     const wxBitmap& icon = m_is_one_layer ?
                      m_focus == fiOneLayerIcon ? m_bmp_one_layer_lock_off.bmp()   : m_bmp_one_layer_lock_on.bmp() :
@@ -1107,26 +1042,21 @@ void Control::draw_revert_icon(wxDC& dc)
 
 void Control::draw_cog_icon(wxDC& dc)
 {
-#if ENABLE_GCODE_VIEWER
     if (m_draw_mode == dmSequentialGCodeView)
         return;
-#endif // ENABLE_GCODE_VIEWER
+
     int width, height;
     get_size(&width, &height);
 
     wxCoord x_draw, y_draw;
-#if ENABLE_GCODE_VIEWER
     if (m_draw_mode == dmSequentialGCodeView) {
         is_horizontal() ? x_draw = width - 2 : x_draw = 0.5 * width - 0.5 * m_cog_icon_dim;
         is_horizontal() ? y_draw = 0.5 * height - 0.5 * m_cog_icon_dim : y_draw = height - 2;
     }
     else {
-#endif // ENABLE_GCODE_VIEWER
         is_horizontal() ? x_draw = width - 2 : x_draw = width - m_cog_icon_dim - 2;
         is_horizontal() ? y_draw = height - m_cog_icon_dim - 2 : y_draw = height - 2;
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
 
     dc.DrawBitmap(m_bmp_cog.bmp(), x_draw, y_draw);
 
@@ -1273,19 +1203,15 @@ wxString Control::get_tooltip(int tick/*=-1*/)
     if (m_focus == fiRevertIcon)
         return _L("Discard all custom changes");
     if (m_focus == fiCogIcon)
-#if ENABLE_GCODE_VIEWER
     {
         if (m_draw_mode == dmSequentialGCodeView)
             return _L("Jump to move") + " (Shift + G)";
         else
-#endif // ENABLE_GCODE_VIEWER
             return m_mode == MultiAsSingle ?
             GUI::from_u8((boost::format(_u8L("Jump to height %s Set ruler mode\n or "
                 "Set extruder sequence for the entire print")) % " (Shift + G)\n").str()) :
             GUI::from_u8((boost::format(_u8L("Jump to height %s or Set ruler mode")) % " (Shift + G)\n").str());
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
     if (m_focus == fiColorBand)
         return m_mode != SingleExtruder ? "" :
                _L("Edit current color - Right click the colored slider segment");
@@ -1619,17 +1545,12 @@ void Control::OnWheel(wxMouseEvent& event)
     if (m_selection == ssLower && !is_lower_thumb_editable())
         m_selection = ssUndef;
 
-#if ENABLE_GCODE_VIEWER
     move_current_thumb((m_draw_mode == dmSequentialGCodeView) ? event.GetWheelRotation() < 0 : event.GetWheelRotation() > 0);
-#else
-    move_current_thumb(event.GetWheelRotation() > 0);
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void Control::OnKeyDown(wxKeyEvent &event)
 {
     const int key = event.GetKeyCode();
-#if ENABLE_GCODE_VIEWER
     if (m_draw_mode != dmSequentialGCodeView && key == WXK_NUMPAD_ADD) {
         // OnChar() is called immediately after OnKeyDown(), which can cause call of add_tick() twice.
         // To avoid this case we should suppress second add_tick() call.
@@ -1644,26 +1565,8 @@ void Control::OnKeyDown(wxKeyEvent &event)
     }
     else if (m_draw_mode != dmSequentialGCodeView && event.GetKeyCode() == WXK_SHIFT)
         UseDefaultColors(false);
-#else
-    if (key == WXK_NUMPAD_ADD) {
-        // OnChar() is called immediately after OnKeyDown(), which can cause call of add_tick() twice.
-        // To avoid this case we should suppress second add_tick() call.
-        m_ticks.suppress_plus(true);
-        add_current_tick(true);
-    }
-    else if (key == 390 || key == WXK_DELETE || key == WXK_BACK) {
-        // OnChar() is called immediately after OnKeyDown(), which can cause call of delete_tick() twice.
-        // To avoid this case we should suppress second delete_tick() call.
-        m_ticks.suppress_minus(true);
-        delete_current_tick();
-    }
-    else if (event.GetKeyCode() == WXK_SHIFT)
-        UseDefaultColors(false);
-#endif // ENABLE_GCODE_VIEWER
     else if (is_horizontal()) {
-#if ENABLE_GCODE_VIEWER
         if (m_is_focused) {
-#endif // ENABLE_GCODE_VIEWER
             if (key == WXK_LEFT || key == WXK_RIGHT)
                 move_current_thumb(key == WXK_LEFT);
             else if (key == WXK_UP || key == WXK_DOWN) {
@@ -1673,14 +1576,10 @@ void Control::OnKeyDown(wxKeyEvent &event)
                     m_selection = ssLower;
                 Refresh();
             }
-#if ENABLE_GCODE_VIEWER
         }
-#endif // ENABLE_GCODE_VIEWER
     }
     else {
-#if ENABLE_GCODE_VIEWER
         if (m_is_focused) {
-#endif // ENABLE_GCODE_VIEWER
             if (key == WXK_LEFT || key == WXK_RIGHT) {
                 if (key == WXK_LEFT)
                     m_selection = ssHigher;
@@ -1690,9 +1589,7 @@ void Control::OnKeyDown(wxKeyEvent &event)
             }
             else if (key == WXK_UP || key == WXK_DOWN)
                 move_current_thumb(key == WXK_UP);
-#if ENABLE_GCODE_VIEWER
         }
-#endif // ENABLE_GCODE_VIEWER
     }
 
     event.Skip(); // !Needed to have EVT_CHAR generated as well
@@ -1713,10 +1610,7 @@ void Control::OnKeyUp(wxKeyEvent &event)
 void Control::OnChar(wxKeyEvent& event)
 {
     const int key = event.GetKeyCode();
-#if ENABLE_GCODE_VIEWER
-    if (m_draw_mode != dmSequentialGCodeView)
-    {
-#endif // ENABLE_GCODE_VIEWER
+    if (m_draw_mode != dmSequentialGCodeView) {
         if (key == '+' && !m_ticks.suppressed_plus()) {
             add_current_tick(true);
             m_ticks.suppress_plus(false);
@@ -1725,15 +1619,9 @@ void Control::OnChar(wxKeyEvent& event)
             delete_current_tick();
             m_ticks.suppress_minus(false);
         }
-#if ENABLE_GCODE_VIEWER
     }
-#endif // ENABLE_GCODE_VIEWER
     if (key == 'G')
-#if ENABLE_GCODE_VIEWER
         jump_to_value();
-#else
-        jump_to_print_z();
-#endif // ENABLE_GCODE_VIEWER
 }
 
 void Control::OnRightDown(wxMouseEvent& event)
@@ -1920,11 +1808,7 @@ void Control::show_cog_icon_context_menu()
     wxMenu menu;
 
     append_menu_item(&menu, wxID_ANY, _L("Jump to height") + " (Shift+G)", "",
-#if ENABLE_GCODE_VIEWER
-                     [this](wxCommandEvent&) { jump_to_value(); }, "", & menu);
-#else
-                     [this](wxCommandEvent&) { jump_to_print_z(); }, "", &menu);
-#endif // ENABLE_GCODE_VIEWER
+                    [this](wxCommandEvent&) { jump_to_value(); }, "", & menu);
 
     wxMenu* ruler_mode_menu = new wxMenu();
     if (ruler_mode_menu) {
@@ -2061,21 +1945,11 @@ static std::string get_pause_print_msg(const std::string& msg_in, double height)
     return into_u8(dlg.GetValue());
 }
 
-#if ENABLE_GCODE_VIEWER
 static double get_value_to_jump(double active_value, double min_z, double max_z, DrawMode mode)
-#else
-static double get_print_z_to_jump(double active_print_z, double min_z, double max_z)
-#endif // ENABLE_GCODE_VIEWER
 {
-#if ENABLE_GCODE_VIEWER
     wxString msg_text = (mode == dmSequentialGCodeView) ? _L("Enter the move you want to jump to") + ":" : _L("Enter the height you want to jump to") + ":";
     wxString msg_header = (mode == dmSequentialGCodeView) ? _L("Jump to move") : _L("Jump to height");
     wxString msg_in = GUI::double_to_string(active_value);
-#else
-    wxString msg_text = _L("Enter the height you want to jump to") + ":";
-    wxString msg_header = _L("Jump to height");
-    wxString msg_in = GUI::double_to_string(active_print_z);
-#endif // ENABLE_GCODE_VIEWER
 
     // get custom gcode
     wxTextEntryDialog dlg(nullptr, msg_text, msg_header, msg_in, wxTextEntryDialogStyle);
@@ -2277,7 +2151,6 @@ void Control::edit_extruder_sequence()
     post_ticks_changed_event(ToolChange);
 }
 
-#if ENABLE_GCODE_VIEWER
 void Control::jump_to_value()
 {
     double value = get_value_to_jump(m_values[m_selection == ssLower ? m_lower_value : m_higher_value],
@@ -2293,23 +2166,6 @@ void Control::jump_to_value()
     else
         SetHigherValue(tick_value);
 }
-#else
-void Control::jump_to_print_z()
-{
-    double print_z = get_print_z_to_jump(m_values[m_selection == ssLower ? m_lower_value : m_higher_value], 
-                                         m_values[m_min_value], m_values[m_max_value]);
-    if (print_z < 0)
-        return;
-
-    auto it = std::lower_bound(m_values.begin(), m_values.end(), print_z - epsilon());
-    int tick_value = it - m_values.begin();
-
-    if (m_selection == ssLower)
-        SetLowerValue(tick_value);
-    else
-        SetHigherValue(tick_value);
-}
-#endif // ENABLE_GCODE_VIEWER
 
 void Control::post_ticks_changed_event(Type type /*= Custom*/)
 {
@@ -2378,11 +2234,7 @@ bool Control::check_ticks_changed_event(Type type)
 std::string TickCodeInfo::get_color_for_tick(TickCode tick, Type type, const int extruder)
 {
     if (mode == SingleExtruder && type == ColorChange && m_use_default_colors) {
-#if ENABLE_GCODE_VIEWER
         const std::vector<std::string>& colors = ColorPrintColors::get();
-#else
-        const std::vector<std::string>& colors = GCodePreviewData::ColorPrintColors();
-#endif // ENABLE_GCODE_VIEWER
         if (ticks.empty())
             return colors[0];
         m_default_color_idx++;
diff --git a/src/slic3r/GUI/DoubleSlider.hpp b/src/slic3r/GUI/DoubleSlider.hpp
index 57fa5d0f1..3eb905923 100644
--- a/src/slic3r/GUI/DoubleSlider.hpp
+++ b/src/slic3r/GUI/DoubleSlider.hpp
@@ -4,9 +4,6 @@
 #include "libslic3r/CustomGCode.hpp"
 #include "wxExtensions.hpp"
 
-#if !ENABLE_GCODE_VIEWER
-#include <wx/wx.h>
-#endif // !ENABLE_GCODE_VIEWER
 #include <wx/window.h>
 #include <wx/control.h>
 #include <wx/dc.h>
@@ -79,9 +76,7 @@ enum DrawMode
     dmRegular,
     dmSlaPrint,
     dmSequentialFffPrint,
-#if ENABLE_GCODE_VIEWER
     dmSequentialGCodeView,
-#endif // ENABLE_GCODE_VIEWER
 };
 
 enum LabelType
@@ -228,9 +223,7 @@ public:
     void    SetLayersTimes(const std::vector<double>& layers_times);
 
     void    SetDrawMode(bool is_sla_print, bool is_sequential_print);
-#if ENABLE_GCODE_VIEWER
     void    SetDrawMode(DrawMode mode) { m_draw_mode = mode; }
-#endif // ENABLE_GCODE_VIEWER
 
     void    SetManipulationMode(Mode mode)  { m_mode = mode; }
     Mode    GetManipulationMode() const     { return m_mode; }
@@ -270,12 +263,8 @@ public:
     void discard_all_thicks();
     void move_current_thumb_to_pos(wxPoint pos);
     void edit_extruder_sequence();
-#if ENABLE_GCODE_VIEWER
     void jump_to_value();
     void enable_action_icon(bool enable) { m_enable_action_icon = enable; }
-#else
-    void jump_to_print_z();
-#endif // ENABLE_GCODE_VIEWER
     void show_add_context_menu();
     void show_edit_context_menu();
     void show_cog_icon_context_menu();
@@ -371,9 +360,7 @@ private:
     bool        m_is_one_layer = false;
     bool        m_is_focused = false;
     bool        m_force_mode_apply = true;
-#if ENABLE_GCODE_VIEWER
     bool        m_enable_action_icon = true;
-#endif // ENABLE_GCODE_VIEWER
 
     DrawMode    m_draw_mode = dmRegular;
 

From 1ce8cddbdabe83e443c0364a8803791838a8e983 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Tue, 24 Nov 2020 12:00:46 +0100
Subject: [PATCH 096/138] Do not show anything in vertical slider if estimated
 times are missing

---
 src/slic3r/GUI/DoubleSlider.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 8d28acf8b..eaf75c254 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -630,7 +630,7 @@ wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer
     else {
         if (label_type == ltEstimatedTime) {
             if (m_values.size() != m_layers_times.size())
-                return "time";
+                return wxEmptyString;
             return short_and_splitted_time(get_time_dhms(m_layers_times[value]));
         }
         wxString str = m_values.empty() ?

From 44fe3b8a005e5b2aca940aef6ef59d4abb3c6663 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Tue, 24 Nov 2020 13:35:43 +0100
Subject: [PATCH 097/138] Tech ENABLE_DRAG_AND_DROP_FIX -> Apply dialog
 implemented with 808c43cb4b05b4e61abe07deee934bf63918bd22 also to drag and
 drop of project files into application executable

---
 src/libslic3r/Technologies.hpp |   7 +
 src/slic3r/GUI/GUI_App.cpp     |   1 -
 src/slic3r/GUI/Plater.cpp      | 225 +++++++++++++++++++++++++++++++--
 src/slic3r/GUI/Plater.hpp      |   4 +
 4 files changed, 223 insertions(+), 14 deletions(-)

diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 66258fe62..42061df71 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -74,4 +74,11 @@
 #define ENABLE_SHOW_OPTION_POINT_LAYERS (1 && ENABLE_GCODE_VIEWER && ENABLE_2_3_0_ALPHA4)
 
 
+//===================
+// 2.3.0.beta1 techs
+//===================
+#define ENABLE_2_3_0_BETA1 1
+
+#define ENABLE_DRAG_AND_DROP_FIX (1 && ENABLE_2_3_0_BETA1)
+
 #endif // _prusaslicer_technologies_h_
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 694cd7103..fa913f6b5 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -542,7 +542,6 @@ static void register_win32_device_notification_event()
     });
 
 	wxWindow::MSWRegisterMessageHandler(WM_COPYDATA, [](wxWindow* win, WXUINT /* nMsg */, WXWPARAM wParam, WXLPARAM lParam) {
-
 		COPYDATASTRUCT* copy_data_structure = { 0 };
 		copy_data_structure = (COPYDATASTRUCT*)lParam;
 		if (copy_data_structure->dwData == 1) {
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 763a906f5..5df1e5e17 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1351,17 +1351,20 @@ std::string& Sidebar::get_search_line()
 class PlaterDropTarget : public wxFileDropTarget
 {
 public:
-    PlaterDropTarget(Plater *plater) : plater(plater) { this->SetDefaultAction(wxDragCopy); }
+    PlaterDropTarget(Plater* plater) : m_plater(plater) { this->SetDefaultAction(wxDragCopy); }
 
     virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &filenames);
 
 private:
-    Plater *plater;
+    Plater* m_plater;
 
+#if !ENABLE_DRAG_AND_DROP_FIX
     static const std::regex pattern_drop;
     static const std::regex pattern_gcode_drop;
+#endif // !ENABLE_DRAG_AND_DROP_FIX
 };
 
+#if !ENABLE_DRAG_AND_DROP_FIX
 const std::regex PlaterDropTarget::pattern_drop(".*[.](stl|obj|amf|3mf|prusa)", std::regex::icase);
 const std::regex PlaterDropTarget::pattern_gcode_drop(".*[.](gcode|g)", std::regex::icase);
 
@@ -1428,16 +1431,22 @@ void ProjectDropDialog::on_dpi_changed(const wxRect& suggested_rect)
     Fit();
     Refresh();
 }
+#endif // !ENABLE_DRAG_AND_DROP_FIX
 
 bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &filenames)
 {
+#if !ENABLE_DRAG_AND_DROP_FIX
     std::vector<fs::path> paths;
+#endif // !ENABLE_DRAG_AND_DROP_FIX
 
 #ifdef WIN32
     // hides the system icon
     this->MSWUpdateDragImageOnLeave();
 #endif // WIN32
 
+#if ENABLE_DRAG_AND_DROP_FIX
+    return (m_plater != nullptr) ? m_plater->load_files(filenames) : false;
+#else
     // gcode viewer section
     if (wxGetApp().is_gcode_viewer()) {
         for (const auto& filename : filenames) {
@@ -1447,12 +1456,12 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi
         }
 
         if (paths.size() > 1) {
-            wxMessageDialog((wxWindow*)plater, _L("You can open only one .gcode file at a time."),
+            wxMessageDialog((wxWindow*)m_plater, _L("You can open only one .gcode file at a time."),
                 wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal();
             return false;
         }
         else if (paths.size() == 1) {
-            plater->load_gcode(from_path(paths.front()));
+            m_plater->load_gcode(from_path(paths.front()));
             return true;
         } 
         return false;
@@ -1477,7 +1486,7 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi
         std::string filename = (*it).filename().string();
         if (boost::algorithm::iends_with(filename, ".3mf") || boost::algorithm::iends_with(filename, ".amf")) {
             LoadType load_type = LoadType::Unknown;
-            if (!plater->model().objects.empty()) {
+            if (!m_plater->model().objects.empty()) {
                 if (wxGetApp().app_config->get("show_drop_project_dialog") == "1") {
                     ProjectDropDialog dlg(filename);
                     if (dlg.ShowModal() == wxID_OK) {
@@ -1498,20 +1507,20 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi
 
             switch (load_type) {
             case LoadType::OpenProject: {
-                plater->load_project(from_path(*it));
+                m_plater->load_project(from_path(*it));
                 break;
             }
             case LoadType::LoadGeometry: {
-                Plater::TakeSnapshot snapshot(plater, _L("Import Object"));
+                Plater::TakeSnapshot snapshot(m_plater, _L("Import Object"));
                 std::vector<fs::path> in_paths;
                 in_paths.emplace_back(*it);
-                plater->load_files(in_paths, true, false);
+                m_plater->load_files(in_paths, true, false);
                 break;
             }
             case LoadType::LoadConfig: {
                 std::vector<fs::path> in_paths;
                 in_paths.emplace_back(*it);
-                plater->load_files(in_paths, false, true);
+                m_plater->load_files(in_paths, false, true);
                 break;
             }
             }
@@ -1537,10 +1546,11 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi
             snapshot_label += wxString::FromUTF8(paths[i].filename().string().c_str());
         }
     }
-    Plater::TakeSnapshot snapshot(plater, snapshot_label);
-    plater->load_files(paths);
+    Plater::TakeSnapshot snapshot(m_plater, snapshot_label);
+    m_plater->load_files(paths);
 
     return true;
+#endif // ENABLE_DRAG_AND_DROP_FIX
 }
 
 // State to manage showing after export notifications and device ejecting
@@ -2113,11 +2123,22 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     // Initialize the Undo / Redo stack with a first snapshot.
     this->take_snapshot(_L("New Project"));
 
-    this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent &evt) { 
+#if ENABLE_DRAG_AND_DROP_FIX
+    this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent& evt) {
+        BOOST_LOG_TRIVIAL(debug) << "received load from other instance event ";
+        wxArrayString input_files;
+        for (size_t i = 0; i < evt.data.size(); ++i) {
+            input_files.push_back(from_u8(evt.data[i].string()));
+        }
+        this->q->load_files(input_files);
+    });
+#else
+    this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent &evt) {
 		BOOST_LOG_TRIVIAL(debug) << "received load from other instance event ";
         this->load_files(evt.data, true, true);
     });
-    this->q->Bind(EVT_INSTANCE_GO_TO_FRONT, [this](InstanceGoToFrontEvent &) { 
+#endif // ENABLE_DRAG_AND_DROP_FIX
+    this->q->Bind(EVT_INSTANCE_GO_TO_FRONT, [this](InstanceGoToFrontEvent &) {
         bring_instance_forward();
     });
 	wxGetApp().other_instance_message_handler()->init(this->q);
@@ -4786,6 +4807,184 @@ std::vector<size_t> Plater::load_files(const std::vector<std::string>& input_fil
     return p->load_files(paths, load_model, load_config, imperial_units);
 }
 
+#if ENABLE_DRAG_AND_DROP_FIX
+enum class LoadType : unsigned char
+{
+    Unknown,
+    OpenProject,
+    LoadGeometry,
+    LoadConfig
+};
+
+class ProjectDropDialog : public DPIDialog
+{
+    wxRadioBox* m_action{ nullptr };
+public:
+    ProjectDropDialog(const std::string& filename);
+
+    int get_action() const { return m_action->GetSelection() + 1; }
+
+protected:
+    void on_dpi_changed(const wxRect& suggested_rect) override;
+};
+
+ProjectDropDialog::ProjectDropDialog(const std::string& filename)
+    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY,
+        from_u8((boost::format(_utf8(L("%s - Drop project file"))) % SLIC3R_APP_NAME).str()), wxDefaultPosition,
+        wxDefaultSize, wxDEFAULT_DIALOG_STYLE)
+{
+    SetFont(wxGetApp().normal_font());
+
+    wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL);
+
+    const wxString choices[] = { _L("Open as project"),
+                                 _L("Import geometry only"),
+                                 _L("Import config only") };
+
+    main_sizer->Add(new wxStaticText(this, wxID_ANY,
+        _L("Select an action to apply to the file") + ": " + from_u8(filename)), 0, wxEXPAND | wxALL, 10);
+    m_action = new wxRadioBox(this, wxID_ANY, _L("Action"), wxDefaultPosition, wxDefaultSize,
+        WXSIZEOF(choices), choices, 0, wxRA_SPECIFY_ROWS);
+    int action = std::clamp(std::stoi(wxGetApp().app_config->get("drop_project_action")),
+        static_cast<int>(LoadType::OpenProject), static_cast<int>(LoadType::LoadConfig)) - 1;
+    m_action->SetSelection(action);
+    main_sizer->Add(m_action, 1, wxEXPAND | wxRIGHT | wxLEFT, 10);
+
+    wxBoxSizer* bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+    wxCheckBox* check = new wxCheckBox(this, wxID_ANY, _L("Don't show again"));
+    check->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& evt) {
+        wxGetApp().app_config->set("show_drop_project_dialog", evt.IsChecked() ? "0" : "1");
+        });
+
+    bottom_sizer->Add(check, 0, wxEXPAND | wxRIGHT, 5);
+    bottom_sizer->Add(CreateStdDialogButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxLEFT, 5);
+    main_sizer->Add(bottom_sizer, 0, wxEXPAND | wxALL, 10);
+
+    SetSizer(main_sizer);
+    main_sizer->SetSizeHints(this);
+}
+
+void ProjectDropDialog::on_dpi_changed(const wxRect& suggested_rect)
+{
+    const int em = em_unit();
+    SetMinSize(wxSize(65 * em, 30 * em));
+    Fit();
+    Refresh();
+}
+
+bool Plater::load_files(const wxArrayString& filenames)
+{
+    const std::regex pattern_drop(".*[.](stl|obj|amf|3mf|prusa)", std::regex::icase);
+    const std::regex pattern_gcode_drop(".*[.](gcode|g)", std::regex::icase);
+
+    std::vector<fs::path> paths;
+
+    // gcode viewer section
+    if (wxGetApp().is_gcode_viewer()) {
+        for (const auto& filename : filenames) {
+            fs::path path(into_path(filename));
+            if (std::regex_match(path.string(), pattern_gcode_drop))
+                paths.push_back(std::move(path));
+        }
+
+        if (paths.size() > 1) {
+            wxMessageDialog((wxWindow*)this, _L("You can open only one .gcode file at a time."),
+                wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal();
+            return false;
+        }
+        else if (paths.size() == 1) {
+            load_gcode(from_path(paths.front()));
+            return true;
+        }
+        return false;
+    }
+
+    // editor section
+    for (const auto& filename : filenames) {
+        fs::path path(into_path(filename));
+        if (std::regex_match(path.string(), pattern_drop))
+            paths.push_back(std::move(path));
+        else if (std::regex_match(path.string(), pattern_gcode_drop))
+            start_new_gcodeviewer(&filename);
+        else
+            return false;
+    }
+    if (paths.empty())
+        // Likely all paths processed were gcodes, for which a G-code viewer instance has hopefully been started.
+        return false;
+
+    // searches for project files
+    for (std::vector<fs::path>::const_reverse_iterator it = paths.rbegin(); it != paths.rend(); ++it) {
+        std::string filename = (*it).filename().string();
+        if (boost::algorithm::iends_with(filename, ".3mf") || boost::algorithm::iends_with(filename, ".amf")) {
+            LoadType load_type = LoadType::Unknown;
+            if (!model().objects.empty()) {
+                if (wxGetApp().app_config->get("show_drop_project_dialog") == "1") {
+                    ProjectDropDialog dlg(filename);
+                    if (dlg.ShowModal() == wxID_OK) {
+                        int choice = dlg.get_action();
+                        load_type = static_cast<LoadType>(choice);
+                        wxGetApp().app_config->set("drop_project_action", std::to_string(choice));
+                    }
+                }
+                else
+                    load_type = static_cast<LoadType>(std::clamp(std::stoi(wxGetApp().app_config->get("drop_project_action")),
+                        static_cast<int>(LoadType::OpenProject), static_cast<int>(LoadType::LoadConfig)));
+            }
+            else
+                load_type = LoadType::OpenProject;
+
+            if (load_type == LoadType::Unknown)
+                return false;
+
+            switch (load_type) {
+            case LoadType::OpenProject: {
+                load_project(from_path(*it));
+                break;
+            }
+            case LoadType::LoadGeometry: {
+                Plater::TakeSnapshot snapshot(this, _L("Import Object"));
+                std::vector<fs::path> in_paths;
+                in_paths.emplace_back(*it);
+                load_files(in_paths, true, false);
+                break;
+            }
+            case LoadType::LoadConfig: {
+                std::vector<fs::path> in_paths;
+                in_paths.emplace_back(*it);
+                load_files(in_paths, false, true);
+                break;
+            }
+            }
+
+            return true;
+        }
+    }
+
+    // other files
+    wxString snapshot_label;
+    assert(!paths.empty());
+    if (paths.size() == 1) {
+        snapshot_label = _L("Load File");
+        snapshot_label += ": ";
+        snapshot_label += wxString::FromUTF8(paths.front().filename().string().c_str());
+    }
+    else {
+        snapshot_label = _L("Load Files");
+        snapshot_label += ": ";
+        snapshot_label += wxString::FromUTF8(paths.front().filename().string().c_str());
+        for (size_t i = 1; i < paths.size(); ++i) {
+            snapshot_label += ", ";
+            snapshot_label += wxString::FromUTF8(paths[i].filename().string().c_str());
+        }
+    }
+    Plater::TakeSnapshot snapshot(this, snapshot_label);
+    load_files(paths);
+
+    return true;
+}
+#endif // ENABLE_DRAG_AND_DROP_FIX
+
 void Plater::update() { p->update(); }
 
 void Plater::stop_jobs() { p->m_ui_jobs.stop_all(); }
diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp
index 0c1d48bc3..971f9c9c1 100644
--- a/src/slic3r/GUI/Plater.hpp
+++ b/src/slic3r/GUI/Plater.hpp
@@ -149,6 +149,10 @@ public:
     std::vector<size_t> load_files(const std::vector<boost::filesystem::path>& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false);
     // To be called when providing a list of files to the GUI slic3r on command line.
     std::vector<size_t> load_files(const std::vector<std::string>& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false);
+#if ENABLE_DRAG_AND_DROP_FIX
+    // to be called on drag and drop
+    bool load_files(const wxArrayString& filenames);
+#endif // ENABLE_DRAG_AND_DROP_FIX
 
     void update();
     void stop_jobs();

From 30693e29e45ddd7028743aed700263e3fbf58ee5 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Tue, 24 Nov 2020 14:41:36 +0100
Subject: [PATCH 098/138] Stop bed filling if enough instances are generated

---
 src/libslic3r/Arrange.cpp          | 8 +++++---
 src/libslic3r/Arrange.hpp          | 3 ++-
 src/slic3r/GUI/Jobs/ArrangeJob.cpp | 4 ++--
 src/slic3r/GUI/Jobs/FillBedJob.cpp | 8 ++++++--
 4 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp
index e4a5c7b42..1036844d7 100644
--- a/src/libslic3r/Arrange.cpp
+++ b/src/libslic3r/Arrange.cpp
@@ -309,7 +309,7 @@ protected:
 public:
     AutoArranger(const TBin &                  bin,
                  const ArrangeParams           &params,
-                 std::function<void(unsigned)> progressind,
+                 std::function<void(unsigned, unsigned /*bins*/)> progressind,
                  std::function<bool(void)>     stopcond)
         : m_pck(bin, params.min_obj_distance)
         , m_bin(bin)
@@ -348,7 +348,9 @@ public:
         
         m_pconf.object_function = get_objfn();
         
-        if (progressind) m_pck.progressIndicator(progressind);
+        if (progressind) m_pck.progressIndicator([this, &progressind](unsigned rem) {
+            progressind(rem, m_pck.lastResult().size() - 1);
+        });
         if (stopcond) m_pck.stopCondition(stopcond);
         
         m_pck.configure(m_pconf);
@@ -462,7 +464,7 @@ void _arrange(
         std::vector<Item> &           excludes,
         const BinT &                  bin,
         const ArrangeParams           &params,
-        std::function<void(unsigned)> progressfn,
+        std::function<void(unsigned, unsigned)> progressfn,
         std::function<bool()>         stopfn)
 {
     // Integer ceiling the min distance from the bed perimeters
diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp
index 65c3984d5..ef992f9a4 100644
--- a/src/libslic3r/Arrange.hpp
+++ b/src/libslic3r/Arrange.hpp
@@ -83,7 +83,8 @@ struct ArrangeParams {
     
     /// Progress indicator callback called when an object gets packed. 
     /// The unsigned argument is the number of items remaining to pack.
-    std::function<void(unsigned)> progressind;
+    /// Second is the current bed idx being filled.
+    std::function<void(unsigned, unsigned /*bed_idx*/)> progressind;
     
     /// A predicate returning true if abort is needed.
     std::function<bool(void)>     stopcondition;
diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
index 7a8c21365..7af0b4703 100644
--- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp
+++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
@@ -158,14 +158,14 @@ void ArrangeJob::process()
     params.stopcondition = [this]() { return was_canceled(); };
     
     try {
-        params.progressind = [this, count](unsigned st) {
+        params.progressind = [this, count](unsigned st, unsigned) {
             st += m_unprintable.size();
             if (st > 0) update_status(int(count - st), arrangestr);
         };
         
         arrangement::arrange(m_selected, m_unselected, bedpts, params);
         
-        params.progressind = [this, count](unsigned st) {
+        params.progressind = [this, count](unsigned st, unsigned) {
             if (st > 0) update_status(int(count - st), arrangestr);
         };
         
diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp
index 060528006..9c959ff16 100644
--- a/src/slic3r/GUI/Jobs/FillBedJob.cpp
+++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp
@@ -90,9 +90,13 @@ void FillBedJob::process()
     params.min_obj_distance = scaled(settings.distance);
     params.allow_rotations  = settings.enable_rotation;
 
-    params.stopcondition = [this]() { return was_canceled(); };
+    unsigned curr_bed = 0;
+    params.stopcondition = [this, &curr_bed]() {
+        return was_canceled() || curr_bed > 0;
+    };
 
-    params.progressind = [this](unsigned st) {
+    params.progressind = [this, &curr_bed](unsigned st, unsigned bed) {
+        curr_bed = bed;
         if (st > 0)
             update_status(int(m_status_range - st), _(L("Filling bed")));
     };

From aa64902cf95216fb621c70caf6ad56e07c133872 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Tue, 24 Nov 2020 14:42:15 +0100
Subject: [PATCH 099/138] Increase arrange accuracy due to errors with large
 number of objects

---
 src/libslic3r/Arrange.hpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp
index ef992f9a4..69511e7ec 100644
--- a/src/libslic3r/Arrange.hpp
+++ b/src/libslic3r/Arrange.hpp
@@ -74,7 +74,7 @@ struct ArrangeParams {
     
     /// The accuracy of optimization.
     /// Goes from 0.0 to 1.0 and scales performance as well
-    float accuracy = 0.65f;
+    float accuracy = 1.f;
     
     /// Allow parallel execution.
     bool parallel = true;

From 250bd689f25fd35ef18bf61c9c597290035e6963 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Tue, 24 Nov 2020 15:04:47 +0100
Subject: [PATCH 100/138] Fix for #5231. Suppress scrolling for the
 PresetComboBoxes when they aren't dropped.

---
 src/slic3r/GUI/PresetComboBoxes.cpp | 15 +++++++++++++++
 src/slic3r/GUI/PresetComboBoxes.hpp |  2 ++
 2 files changed, 17 insertions(+)

diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp
index 5acf71fef..78559b937 100644
--- a/src/slic3r/GUI/PresetComboBoxes.cpp
+++ b/src/slic3r/GUI/PresetComboBoxes.cpp
@@ -103,6 +103,8 @@ PresetComboBox::PresetComboBox(wxWindow* parent, Preset::Type preset_type, const
 
     // parameters for an icon's drawing
     fill_width_height();
+    Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent& evt) { m_suppress_change = false; });
+    Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent& evt) { m_suppress_change = true ; });
 
     Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) {
         // see https://github.com/prusa3d/PrusaSlicer/issues/3889
@@ -147,6 +149,15 @@ bool PresetComboBox::set_printer_technology(PrinterTechnology pt)
     return false;
 }
 
+bool PresetComboBox::check_event_for_suppress_change(wxCommandEvent& evt)
+{
+    if (m_suppress_change) {
+        evt.StopPropagation();
+        SetSelection(m_last_selected);
+    }
+    return m_suppress_change;
+}
+
 void PresetComboBox::invalidate_selection()
 {
     m_last_selected = INT_MAX; // this value means that no one item is selected
@@ -534,6 +545,8 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset
     PresetComboBox(parent, preset_type, wxSize(15 * wxGetApp().em_unit(), -1))
 {
     Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &evt) {
+        if (check_event_for_suppress_change(evt))
+            return;
         auto selected_item = evt.GetSelection();
 
         auto marker = reinterpret_cast<Marker>(this->GetClientData(selected_item));
@@ -871,6 +884,8 @@ TabPresetComboBox::TabPresetComboBox(wxWindow* parent, Preset::Type preset_type)
     PresetComboBox(parent, preset_type, wxSize(35 * wxGetApp().em_unit(), -1))
 {
     Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) {
+        if (check_event_for_suppress_change(evt))
+            return;
         // see https://github.com/prusa3d/PrusaSlicer/issues/3889
         // Under OSX: in case of use of a same names written in different case (like "ENDER" and "Ender")
         // m_presets_choice->GetSelection() will return first item, because search in PopupListCtrl is case-insensitive.
diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp
index 2967ff263..0bd4f036f 100644
--- a/src/slic3r/GUI/PresetComboBoxes.hpp
+++ b/src/slic3r/GUI/PresetComboBoxes.hpp
@@ -86,6 +86,7 @@ protected:
 
     int m_last_selected;
     int m_em_unit;
+    bool m_suppress_change { true };
 
     // parameters for an icon's drawing
     int icon_height;
@@ -98,6 +99,7 @@ protected:
 
     PrinterTechnology printer_technology {ptAny};
 
+    bool check_event_for_suppress_change(wxCommandEvent& evt);
     void invalidate_selection();
     void validate_selection(bool predicate = false);
     void update_selection();

From 10c41290fd3760958904170a3f76d2684ddcc90a Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Tue, 24 Nov 2020 15:12:18 +0100
Subject: [PATCH 101/138] DoubleSlider: Fixed ruler for the short objects

---
 src/slic3r/GUI/DoubleSlider.cpp | 135 +++++++++++++++++---------------
 1 file changed, 73 insertions(+), 62 deletions(-)

diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index eaf75c254..f4838e7b8 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -569,7 +569,7 @@ void Control::draw_tick_on_mouse_position(wxDC& dc)
 
     if (m_extra_style & wxSL_VALUE_LABEL) {
         wxColour old_clr = dc.GetTextForeground();
-        dc.SetTextForeground(LIGHT_GREY_PEN.GetColour());
+        dc.SetTextForeground(GREY_PEN.GetColour());
         draw_tick_text(dc, pos, tick, ltEstimatedTime, false);
         dc.SetTextForeground(old_clr);
     }
@@ -893,6 +893,11 @@ void Control::Ruler::update(wxWindow* win, const std::vector<double>& values, do
     int DPI = GUI::get_dpi_for_window(win);
     int pixels_per_sm = lround((double)(DPI) * 5.0/25.4);
 
+    if (lround(scroll_step) > pixels_per_sm) {
+        long_step = -1.0;
+        return;
+    }
+
     int pow = -2;
     int step = 0;
     auto end_it = count == 1 ? values.end() : values.begin() + lround(values.size() / count);
@@ -907,15 +912,15 @@ void Control::Ruler::update(wxWindow* win, const std::vector<double>& values, do
                 break;
             int tick = val_it - values.begin();
 
-            if (lround(tick * scroll_step) > pixels_per_sm) {
-                step = istep;
+            // find next tick with istep
+            val *= 2;
+            val_it = std::lower_bound(values.begin(), end_it, val - epsilon());
+            // count of short ticks between ticks
+            int short_ticks_cnt = val_it == values.end() ? tick : val_it - values.begin() - tick;
 
-                // find next tick with istep
-                val *= 2;
-                val_it = std::lower_bound(values.begin(), end_it, val - epsilon());
-                // count of short ticks between ticks
-                int short_ticks_cnt = val_it == values.end() ? tick : val_it - values.begin() - tick;
-                // there couldn't be more then 10 short ticks between thicks
+            if (lround(short_ticks_cnt * scroll_step) > pixels_per_sm) {
+                step = istep;
+                // there couldn't be more then 10 short ticks between ticks
                 short_step = 0.1 * short_ticks_cnt;
                 break;
             }
@@ -931,71 +936,77 @@ void Control::Ruler::update(wxWindow* win, const std::vector<double>& values, do
 void Control::draw_ruler(wxDC& dc)
 {
     m_ruler.update(this->GetParent(), m_values, get_scroll_step());
-    if (!m_ruler.is_ok())
-        return;
 
     int height, width;
     get_size(&width, &height);
-    const wxCoord mid = is_horizontal() ? 0.5 * height : 0.5 * width;    
+    const wxCoord mid = is_horizontal() ? 0.5 * height : 0.5 * width; 
 
-    auto draw_short_ticks = [this, mid](wxDC& dc, double& current_tick, int max_tick) {
-        while (current_tick < max_tick) {
-            wxCoord pos = get_position_from_value(lround(current_tick));
-            draw_ticks_pair(dc, pos, mid, 2);
-            current_tick += m_ruler.short_step;
-            if (current_tick > m_max_value)
-                break;
-        }
-    };   
-
-    dc.SetPen(LIGHT_GREY_PEN);
+    dc.SetPen(GREY_PEN);
     wxColour old_clr = dc.GetTextForeground();
-    dc.SetTextForeground(LIGHT_GREY_PEN.GetColour());
+    dc.SetTextForeground(GREY_PEN.GetColour());
 
-    double short_tick;
-    int tick = 0;
-    double value = 0.0;
-    int sequence = 0;
-
-    while (tick <= m_max_value) {
-        value += m_ruler.long_step;
-        if (value > m_values.back() && sequence < m_ruler.count) {
-            value = m_ruler.long_step;
-            for (tick; tick < m_values.size(); tick++)
-                if (m_values[tick] < value)
-                    break;
-            // short ticks from the last tick to the end of current sequence
-            draw_short_ticks(dc, short_tick, tick);
-            sequence++;
+    if (m_ruler.long_step < 0)
+        for (int tick = 1; tick < m_values.size(); tick++) {
+            wxCoord pos = get_position_from_value(tick);
+            draw_ticks_pair(dc, pos, mid, 5);
+            draw_tick_text(dc, wxPoint(mid, pos), tick);
         }
-        short_tick = tick;
+    else {
+        auto draw_short_ticks = [this, mid](wxDC& dc, double& current_tick, int max_tick) {
+            while (current_tick < max_tick) {
+                wxCoord pos = get_position_from_value(lround(current_tick));
+                draw_ticks_pair(dc, pos, mid, 2);
+                current_tick += m_ruler.short_step;
+                if (current_tick > m_max_value)
+                    break;
+            }
+        };
 
-        for (tick; tick < m_values.size(); tick++) {
-            if (m_values[tick] == value)
-                break;
-            if (m_values[tick] > value) {
-                if (tick > 0)
-                    tick--;
+        double short_tick;
+        int tick = 0;
+        double value = 0.0;
+        int sequence = 0;
+
+        while (tick <= m_max_value) {
+            value += m_ruler.long_step;
+            if (value > m_values.back() && sequence < m_ruler.count) {
+                value = m_ruler.long_step;
+                for (tick; tick < m_values.size(); tick++)
+                    if (m_values[tick] < value)
+                        break;
+                // short ticks from the last tick to the end of current sequence
+                draw_short_ticks(dc, short_tick, tick);
+                sequence++;
+            }
+            short_tick = tick;
+
+            for (tick; tick < m_values.size(); tick++) {
+                if (m_values[tick] == value)
+                    break;
+                if (m_values[tick] > value) {
+                    if (tick > 0)
+                        tick--;
+                    break;
+                }
+            }
+            if (tick > m_max_value)
                 break;
+
+            wxCoord pos = get_position_from_value(tick);
+            draw_ticks_pair(dc, pos, mid, 5);
+            draw_tick_text(dc, wxPoint(mid, pos), tick);
+
+            draw_short_ticks(dc, short_tick, tick);
+
+            if (value == m_values.back() && sequence < m_ruler.count) {
+                value = 0.0;
+                sequence++;
+                tick++;
             }
         }
-        if (tick > m_max_value)
-            break;
-
-        wxCoord pos = get_position_from_value(tick);
-        draw_ticks_pair(dc, pos, mid, 5);
-        draw_tick_text(dc, wxPoint(mid, pos), tick);
-
-        draw_short_ticks(dc, short_tick, tick);
-
-        if (value == m_values.back() && sequence < m_ruler.count) {
-            value = 0.0;
-            sequence++;
-            tick++;
-        }
+        // short ticks from the last tick to the end 
+        draw_short_ticks(dc, short_tick, m_max_value);
     }
-    // short ticks from the last tick to the end 
-    draw_short_ticks(dc, short_tick, m_max_value);
 
     dc.SetTextForeground(old_clr);
 }

From d34beab557bb960a4ba6ef257f4fad09a1d47e91 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Tue, 24 Nov 2020 15:36:39 +0100
Subject: [PATCH 102/138] Add "slow" hint to rotations for arrangement

---
 src/slic3r/GUI/GLCanvas3D.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 2ae852dbd..e55c5fa8c 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -3892,7 +3892,7 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x)
         settings_changed = true;
     }
 
-    if (imgui->checkbox(_(L("Enable rotations")), settings.enable_rotation)) {
+    if (imgui->checkbox(_(L("Enable rotations (slow)")), settings.enable_rotation)) {
         m_arrange_settings.enable_rotation = settings.enable_rotation;
         settings_changed = true;
     }

From 62bdc192d87a9a1835e6ff6ff10b5a0893279c98 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Tue, 24 Nov 2020 16:00:46 +0100
Subject: [PATCH 103/138] Fix of [2.3.0-alpha4] Crash - several models cause
 crash when slicing #5208 Fixed some issues in internal anchors of the
 Adaptive Cubic infill. The ugly and dangerous implicit casting operators in
 Line, MultiPoint, Polyline and Polygon were made explicit.

---
 src/libslic3r/ClipperUtils.cpp        |   8 +-
 src/libslic3r/ExPolygon.cpp           |  21 +----
 src/libslic3r/ExtrusionEntity.cpp     |   4 +-
 src/libslic3r/Fill/Fill.cpp           |  20 ++--
 src/libslic3r/Fill/FillAdaptive.cpp   | 128 +++++++++++++++++++-------
 src/libslic3r/Fill/FillBase.cpp       |  83 ++++++++++++-----
 src/libslic3r/Fill/FillBase.hpp       |   5 +-
 src/libslic3r/Fill/FillConcentric.cpp |   2 +-
 src/libslic3r/ModelArrange.cpp        |   2 +-
 src/libslic3r/MotionPlanner.cpp       |   2 +-
 src/libslic3r/MultiPoint.hpp          |   2 -
 src/libslic3r/PerimeterGenerator.cpp  |   4 +-
 src/libslic3r/Polygon.hpp             |   4 +-
 src/libslic3r/Polyline.cpp            |   2 +-
 src/libslic3r/Polyline.hpp            |   4 +-
 src/libslic3r/Preset.cpp              |   2 +-
 src/libslic3r/Print.cpp               |   4 +-
 src/libslic3r/PrintConfig.cpp         |  35 ++++++-
 src/libslic3r/PrintConfig.hpp         |   2 +
 src/libslic3r/PrintObject.cpp         |   1 +
 src/libslic3r/SLA/Pad.cpp             |   2 +-
 src/libslic3r/SupportMaterial.cpp     |   2 +-
 src/slic3r/GUI/2DBed.cpp              |   2 +-
 src/slic3r/GUI/ConfigManipulation.cpp |   5 +-
 src/slic3r/GUI/Tab.cpp                |   1 +
 25 files changed, 237 insertions(+), 110 deletions(-)

diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp
index 16d985e9c..59872ad66 100644
--- a/src/libslic3r/ClipperUtils.cpp
+++ b/src/libslic3r/ClipperUtils.cpp
@@ -1069,7 +1069,7 @@ Polygons variable_offset_inner(const ExPolygon &expoly, const std::vector<std::v
 	ClipperLib::Paths holes;
 	holes.reserve(expoly.holes.size());
 	for (const Polygon& hole : expoly.holes)
-		append(holes, fix_after_outer_offset(mittered_offset_path_scaled(hole, deltas[1 + &hole - expoly.holes.data()], miter_limit), ClipperLib::pftNegative, false));
+		append(holes, fix_after_outer_offset(mittered_offset_path_scaled(hole.points, deltas[1 + &hole - expoly.holes.data()], miter_limit), ClipperLib::pftNegative, false));
 #ifndef NDEBUG	
 	for (auto &c : holes)
 		assert(ClipperLib::Area(c) > 0.);
@@ -1113,7 +1113,7 @@ for (const std::vector<float>& ds : deltas)
 	ClipperLib::Paths holes;
 	holes.reserve(expoly.holes.size());
 	for (const Polygon& hole : expoly.holes)
-		append(holes, fix_after_inner_offset(mittered_offset_path_scaled(hole, deltas[1 + &hole - expoly.holes.data()], miter_limit), ClipperLib::pftPositive, true));
+		append(holes, fix_after_inner_offset(mittered_offset_path_scaled(hole.points, deltas[1 + &hole - expoly.holes.data()], miter_limit), ClipperLib::pftPositive, true));
 #ifndef NDEBUG
 	for (auto &c : holes)
 		assert(ClipperLib::Area(c) > 0.);
@@ -1157,7 +1157,7 @@ for (const std::vector<float>& ds : deltas)
 	ClipperLib::Paths holes;
 	holes.reserve(expoly.holes.size());
 	for (const Polygon& hole : expoly.holes)
-		append(holes, fix_after_inner_offset(mittered_offset_path_scaled(hole, deltas[1 + &hole - expoly.holes.data()], miter_limit), ClipperLib::pftPositive, true));
+		append(holes, fix_after_inner_offset(mittered_offset_path_scaled(hole.points, deltas[1 + &hole - expoly.holes.data()], miter_limit), ClipperLib::pftPositive, true));
 #ifndef NDEBUG
 	for (auto &c : holes)
 		assert(ClipperLib::Area(c) > 0.);
@@ -1205,7 +1205,7 @@ ExPolygons variable_offset_inner_ex(const ExPolygon &expoly, const std::vector<s
 	ClipperLib::Paths holes;
 	holes.reserve(expoly.holes.size());
 	for (const Polygon& hole : expoly.holes)
-		append(holes, fix_after_outer_offset(mittered_offset_path_scaled(hole, deltas[1 + &hole - expoly.holes.data()], miter_limit), ClipperLib::pftNegative, false));
+		append(holes, fix_after_outer_offset(mittered_offset_path_scaled(hole.points, deltas[1 + &hole - expoly.holes.data()], miter_limit), ClipperLib::pftNegative, false));
 #ifndef NDEBUG
 	for (auto &c : holes)
 		assert(ClipperLib::Area(c) > 0.);
diff --git a/src/libslic3r/ExPolygon.cpp b/src/libslic3r/ExPolygon.cpp
index 5bdd5055e..989cfd442 100644
--- a/src/libslic3r/ExPolygon.cpp
+++ b/src/libslic3r/ExPolygon.cpp
@@ -350,23 +350,10 @@ void ExPolygon::get_trapezoids2(Polygons* polygons) const
     // find trapezoids by looping from first to next-to-last coordinate
     for (std::vector<coord_t>::const_iterator x = xx.begin(); x != xx.end()-1; ++x) {
         coord_t next_x = *(x + 1);
-        if (*x == next_x) continue;
-        
-        // build rectangle
-        Polygon poly;
-        poly.points.resize(4);
-        poly[0](0) = *x;
-        poly[0](1) = bb.min(1);
-        poly[1](0) = next_x;
-        poly[1](1) = bb.min(1);
-        poly[2](0) = next_x;
-        poly[2](1) = bb.max(1);
-        poly[3](0) = *x;
-        poly[3](1) = bb.max(1);
-        
-        // intersect with this expolygon
-        // append results to return value
-        polygons_append(*polygons, intersection(poly, to_polygons(*this)));
+        if (*x != next_x)
+            // intersect with rectangle
+            // append results to return value
+            polygons_append(*polygons, intersection({ { { *x, bb.min.y() }, { next_x, bb.min.y() }, { next_x, bb.max.y() }, { *x, bb.max.y() } } }, to_polygons(*this)));
     }
 }
 
diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp
index 6516713ce..390d107f2 100644
--- a/src/libslic3r/ExtrusionEntity.cpp
+++ b/src/libslic3r/ExtrusionEntity.cpp
@@ -14,12 +14,12 @@ namespace Slic3r {
     
 void ExtrusionPath::intersect_expolygons(const ExPolygonCollection &collection, ExtrusionEntityCollection* retval) const
 {
-    this->_inflate_collection(intersection_pl(this->polyline, (Polygons)collection), retval);
+    this->_inflate_collection(intersection_pl((Polylines)polyline, to_polygons(collection.expolygons)), retval);
 }
 
 void ExtrusionPath::subtract_expolygons(const ExPolygonCollection &collection, ExtrusionEntityCollection* retval) const
 {
-    this->_inflate_collection(diff_pl(this->polyline, (Polygons)collection), retval);
+    this->_inflate_collection(diff_pl((Polylines)this->polyline, to_polygons(collection.expolygons)), retval);
 }
 
 void ExtrusionPath::clip_end(double distance)
diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp
index 90cd5699f..6dbfa18fa 100644
--- a/src/libslic3r/Fill/Fill.cpp
+++ b/src/libslic3r/Fill/Fill.cpp
@@ -37,7 +37,8 @@ struct SurfaceFillParams
     bool        	dont_adjust = false;
     // Length of the infill anchor along the perimeter line.
     // 1000mm is roughly the maximum length line that fits into a 32bit coord_t.
-    float 			anchor_length = 1000.f;
+    float 			anchor_length     = 1000.f;
+    float 			anchor_length_max = 1000.f;
 
     // width, height of extrusion, nozzle diameter, is bridge
     // For the output, for fill generator.
@@ -68,6 +69,7 @@ struct SurfaceFillParams
 		RETURN_COMPARE_NON_EQUAL(density);
 		RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, dont_adjust);
 		RETURN_COMPARE_NON_EQUAL(anchor_length);
+		RETURN_COMPARE_NON_EQUAL(anchor_length_max);
 		RETURN_COMPARE_NON_EQUAL(flow.width);
 		RETURN_COMPARE_NON_EQUAL(flow.height);
 		RETURN_COMPARE_NON_EQUAL(flow.nozzle_diameter);
@@ -85,7 +87,8 @@ struct SurfaceFillParams
 				this->angle   			== rhs.angle   			&&
 				this->density   		== rhs.density   		&&
 				this->dont_adjust   	== rhs.dont_adjust 		&&
-				this->anchor_length		== rhs.anchor_length    &&
+				this->anchor_length  	== rhs.anchor_length    &&
+				this->anchor_length_max == rhs.anchor_length_max &&
 				this->flow 				== rhs.flow 			&&
 				this->extrusion_role	== rhs.extrusion_role;
 	}
@@ -171,8 +174,12 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
 		            // Anchor a sparse infill to inner perimeters with the following anchor length:
 			        params.anchor_length = float(region_config.infill_anchor);
 			        if (region_config.infill_anchor.percent)
-			        	params.anchor_length *= 0.01 * params.spacing;
+			        	params.anchor_length = float(params.anchor_length * 0.01 * params.spacing);
+			        params.anchor_length_max = float(region_config.infill_anchor_max);
+			        if (region_config.infill_anchor_max.percent)
+			        	params.anchor_length_max = float(params.anchor_length_max * 0.01 * params.spacing);
 		        }
+		        params.anchor_length = std::min(params.anchor_length, params.anchor_length_max);
 
 		        auto it_params = set_surface_params.find(params);
 		        if (it_params == set_surface_params.end())
@@ -376,9 +383,10 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
 
         // apply half spacing using this flow's own spacing and generate infill
         FillParams params;
-        params.density 		 = float(0.01 * surface_fill.params.density);
-        params.dont_adjust 	 = surface_fill.params.dont_adjust; // false
-        params.anchor_length = surface_fill.params.anchor_length;
+        params.density 		     = float(0.01 * surface_fill.params.density);
+        params.dont_adjust 	     = surface_fill.params.dont_adjust; // false
+        params.anchor_length     = surface_fill.params.anchor_length;
+		params.anchor_length_max = surface_fill.params.anchor_length_max;
 
         for (ExPolygon &expoly : surface_fill.expolygons) {
 			// Spacing is modified by the filler to indicate adjustments. Reset it for each expolygon.
diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index 3b6297626..0865c3693 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -667,9 +667,26 @@ static inline rtree_segment_t mk_rtree_seg(const Line &l) {
 // Create a hook based on hook_line and append it to the begin or end of the polyline in the intersection
 static void add_hook(
     const Intersection &intersection, const double scaled_offset, 
-    const int hook_length, double scaled_trim_distance, 
+    const coordf_t hook_length, double scaled_trim_distance, 
     const rtree_t &rtree, const Lines &lines_src)
 {
+    if (hook_length < SCALED_EPSILON)
+        // Ignore open hooks.
+        return;
+
+#ifndef NDEBUG
+    {
+        const Vec2d  v  = (intersection.closest_line->b - intersection.closest_line->a).cast<double>();
+        const Vec2d  va = (intersection.intersect_point - intersection.closest_line->a).cast<double>();
+        const double l2 = v.squaredNorm();  // avoid a sqrt
+        assert(l2 > 0.);
+        const double t  = va.dot(v) / l2;
+        assert(t > 0. && t < 1.);
+        const double          d  = (t * v - va).norm();
+        assert(d < 1000.);
+    }
+#endif // NDEBUG
+
     // Trim the hook start by the infill line it will connect to.
     Point hook_start;
     bool  intersection_found = intersection.intersect_line->intersection(
@@ -700,7 +717,7 @@ static void add_hook(
         const std::vector<std::pair<rtree_segment_t, size_t>> &hook_intersections,
         bool self_intersection, const std::optional<Line> &self_intersection_line, const Point &self_intersection_point) {
         // No hook is longer than hook_length, there shouldn't be any intersection closer than that.
-        auto max_length = double(hook_length);
+        auto max_length = hook_length;
         auto update_max_length = [&max_length](double d) {
             if (d < max_length)
                 max_length = d;
@@ -757,15 +774,32 @@ static void add_hook(
     }
 }
 
-static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &boundary, const double spacing, const int hook_length)
+#ifndef NDEBUG
+bool validate_intersection_t_joint(const Intersection &intersection)
+{
+    const Vec2d  v = (intersection.closest_line->b - intersection.closest_line->a).cast<double>();
+    const Vec2d  va = (intersection.intersect_point - intersection.closest_line->a).cast<double>();
+    const double l2 = v.squaredNorm();  // avoid a sqrt
+    assert(l2 > 0.);
+    const double t = va.dot(v);
+    assert(t > SCALED_EPSILON && t < l2 - SCALED_EPSILON);
+    const double d = ((t / l2) * v - va).norm();
+    assert(d < 1000.);
+    return true;
+}
+bool validate_intersections(const std::vector<Intersection> &intersections)
+{
+    for (const Intersection& intersection : intersections)
+        assert(validate_intersection_t_joint(intersection));
+    return true;
+}
+#endif // NDEBUG
+
+static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &boundary, const double spacing, const coordf_t hook_length, const coordf_t hook_length_max)
 {
     rtree_t rtree;
     size_t  poly_idx = 0;
 
-    Lines lines_src;
-    lines_src.reserve(lines.size());
-    std::transform(lines.begin(), lines.end(), std::back_inserter(lines_src), [](const Line& l) { return Polyline{ l.a, l.b }; });
-
     // 19% overlap, slightly lower than the allowed overlap in Fill::connect_infill()
     const float scaled_offset           = float(scale_(spacing) * 0.81);
     // 25% overlap
@@ -814,16 +848,19 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                     }
                     return std::make_pair(static_cast<Polyline*>(nullptr), false);
                 };
-                auto collinear_front = collinear_segment(poly.points.front(), poly.points.back(), &poly);
+                auto collinear_front = collinear_segment(poly.points.front(), poly.points.back(),  &poly);
+                auto collinear_back  = collinear_segment(poly.points.back(),  poly.points.front(), &poly);
+                assert(! collinear_front.first || ! collinear_back.first || collinear_front.first != collinear_back.first);
                 if (collinear_front.first) {
                     Polyline &other = *collinear_front.first;
+                    assert(&other != &poly);
                     poly.points.front() = collinear_front.second ? other.points.back() : other.points.front();
                     other.points.clear();
                 }
-                auto collinear_back = collinear_segment(poly.points.back(), poly.points.front(), &poly);
                 if (collinear_back.first) {
-                    Polyline &other = *collinear_front.first;
-                    poly.points.back() = collinear_front.second ? other.points.back() : other.points.front();
+                    Polyline &other = *collinear_back.first;
+                    assert(&other != &poly);
+                    poly.points.back() = collinear_back.second ? other.points.back() : other.points.front();
                     other.points.clear();
                 }
             }
@@ -831,6 +868,12 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
         }
     }
 
+    // Convert input polylines to lines_src after the colinear segments were merged.
+    Lines lines_src;
+    lines_src.reserve(lines.size());
+    std::transform(lines.begin(), lines.end(), std::back_inserter(lines_src), [](const Polyline &pl) { 
+        return pl.empty() ? Line(Point(0, 0), Point(0, 0)) : Line(pl.points.front(), pl.points.back()); });
+
     sort_remove_duplicates(lines_touching_at_endpoints);
 
     std::vector<Intersection> intersections;
@@ -854,23 +897,38 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
             // Find the nearest line from the start point of the line.
             std::optional<size_t> tjoint_front, tjoint_back;
             {
-                auto has_tjoint = [&closest, line_idx, &rtree, &lines](const Point &pt) {
-                    auto filter_itself = [line_idx](const auto &item) { return item.second != line_idx; };
+                auto has_tjoint = [&closest, line_idx, &rtree, &lines, &lines_src](const Point &pt) {
+                    auto filter_t_joint = [line_idx, &lines_src, pt](const auto &item) { 
+                        if (item.second != line_idx) {
+                            // Verify that the point projects onto the line.
+                            const Line  &line = lines_src[item.second];
+                            const Vec2d  v  = (line.b - line.a).cast<double>();
+                            const Vec2d  va = (pt - line.a).cast<double>();
+                            const double l2 = v.squaredNorm();  // avoid a sqrt
+                            if (l2 > 0.) {
+                                const double t = va.dot(v);
+                                return t > SCALED_EPSILON && t < l2 - SCALED_EPSILON;
+                            }
+                        }
+                        return false;
+                    };
                     closest.clear();
-                    rtree.query(bgi::nearest(mk_rtree_point(pt), 1) && bgi::satisfies(filter_itself), std::back_inserter(closest));
-                    const Polyline &pl = lines[closest.front().second];
+                    rtree.query(bgi::nearest(mk_rtree_point(pt), 1) && bgi::satisfies(filter_t_joint), std::back_inserter(closest));
                     std::optional<size_t> out;
-                    if (pl.points.empty()) {
-                        // The closest infill line was already dropped as it was too short.
-                        // Such an infill line should not make a T-joint anyways.
-#if 0 // #ifndef NDEBUG
-                        const auto &seg = closest.front().first;
-                        struct Linef { Vec2d a; Vec2d b; };
-                        Linef l { { bg::get<0, 0>(seg), bg::get<0, 1>(seg) }, { bg::get<1, 0>(seg), bg::get<1, 1>(seg) } };
-                        assert(line_alg::distance_to_squared(l, Vec2d(pt.cast<double>())) > 1000 * 1000);
-#endif // NDEBUG
-                    } else if (((Line)pl).distance_to_squared(pt) <= 1000 * 1000)
-                        out = closest.front().second;
+                    if (! closest.empty()) {
+                        const Polyline &pl = lines[closest.front().second];
+                        if (pl.points.empty()) {
+                            // The closest infill line was already dropped as it was too short.
+                            // Such an infill line should not make a T-joint anyways.
+    #if 0 // #ifndef NDEBUG
+                            const auto &seg = closest.front().first;
+                            struct Linef { Vec2d a; Vec2d b; };
+                            Linef l { { bg::get<0, 0>(seg), bg::get<0, 1>(seg) }, { bg::get<1, 0>(seg), bg::get<1, 1>(seg) } };
+                            assert(line_alg::distance_to_squared(l, Vec2d(pt.cast<double>())) > 1000 * 1000);
+    #endif // NDEBUG
+                        } else if (((Line)pl).distance_to_squared(pt) <= 1000 * 1000)
+                            out = closest.front().second;
+                    }
                     return out;
                 };
                 // Refuse to create a T-joint if the infill lines touch at their ends.
@@ -912,12 +970,16 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                     // A shorter line than spacing could produce a degenerate polyline.
                     line.points.clear();
                 } else if (anchor) {
-                    if (tjoint_front)
+                    if (tjoint_front) {
                         // T-joint of line's front point with the 'closest' line.
                         intersections.emplace_back(lines_src[*tjoint_front], lines_src[line_idx], &line, front_point, true);
-                    if (tjoint_back)
+                        assert(validate_intersection_t_joint(intersections.back()));
+                    }
+                    if (tjoint_back) {
                         // T-joint of line's back point with the 'closest' line.
                         intersections.emplace_back(lines_src[*tjoint_back],  lines_src[line_idx], &line, back_point,  false);
+                        assert(validate_intersection_t_joint(intersections.back()));
+                    }
                 } else {
                     if (tjoint_front)
                         // T joint at the front at a 60 degree angle, the line is very short.
@@ -940,6 +1002,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
                 ++ it;
         }
     }
+    assert(validate_intersections(intersections));
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     static int iRun = 0;
@@ -1106,7 +1169,7 @@ static Polylines connect_lines_using_hooks(Polylines &&lines, const ExPolygon &b
             }
             Points &first_points  = first_i.intersect_pl->points;
             Points &second_points = nearest_i.intersect_pl->points;
-            could_connect &= (nearest_i_point - first_i_point).cast<double>().squaredNorm() <= Slic3r::sqr(3. * hook_length);
+            could_connect &= (nearest_i_point - first_i_point).cast<double>().squaredNorm() <= Slic3r::sqr(hook_length_max);
             if (could_connect) {
                 // Both intersections are so close that their polylines can be connected.
                 // Verify that no other infill line intersects this anchor line.
@@ -1219,7 +1282,7 @@ bool has_no_collinear_lines(const Polylines &polylines)
         const Point* operator()(const LineEnd &pt) const { return &pt.point(); }
     };
     typedef ClosestPointInRadiusLookup<LineEnd, LineEndAccessor> ClosestPointLookupType;
-    ClosestPointLookupType closest_end_point_lookup(1001. * sqrt(2.));
+    ClosestPointLookupType closest_end_point_lookup(coord_t(1001. * sqrt(2.)));
     for (const Polyline& pl : polylines) {
 //        assert(pl.points.size() == 2);
         auto line_start = LineEnd(&pl, true);
@@ -1321,9 +1384,10 @@ void Filler::_fill_surface_single(
     }
 #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
 
-    const auto hook_length = coord_t(std::min(scale_(this->spacing * 5), scale_(params.anchor_length)));
+    const auto hook_length     = coordf_t(std::min<float>(std::numeric_limits<coord_t>::max(), scale_(params.anchor_length)));
+    const auto hook_length_max = coordf_t(std::min<float>(std::numeric_limits<coord_t>::max(), scale_(params.anchor_length_max)));
 
-    Polylines all_polylines_with_hooks = all_polylines.size() > 1 ? connect_lines_using_hooks(std::move(all_polylines), expolygon, this->spacing, hook_length) : std::move(all_polylines);
+    Polylines all_polylines_with_hooks = all_polylines.size() > 1 ? connect_lines_using_hooks(std::move(all_polylines), expolygon, this->spacing, hook_length, hook_length_max) : std::move(all_polylines);
 
 #ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
     {
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 326c1bd42..370b2f85a 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -200,10 +200,10 @@ struct ContourIntersectionPoint {
 
     // Could extrude a complete segment from this to this->prev_on_contour.
     bool                        could_connect_prev() const throw() 
-        { return ! this->consumed && this->prev_on_contour && ! this->prev_on_contour->consumed && ! this->prev_trimmed && ! this->prev_on_contour->next_trimmed; }
+        { return ! this->consumed && this->prev_on_contour != this && ! this->prev_on_contour->consumed && ! this->prev_trimmed && ! this->prev_on_contour->next_trimmed; }
     // Could extrude a complete segment from this to this->next_on_contour.
     bool                        could_connect_next() const throw() 
-        { return ! this->consumed && this->next_on_contour && ! this->next_on_contour->consumed && ! this->next_trimmed && ! this->next_on_contour->prev_trimmed; }
+        { return ! this->consumed && this->next_on_contour != this && ! this->next_on_contour->consumed && ! this->next_trimmed && ! this->next_on_contour->prev_trimmed; }
 };
 
 // Distance from param1 to param2 when going counter-clockwise.
@@ -390,7 +390,12 @@ static void take(Polyline &pl1, const Polyline &pl2, const Points &contour, size
 
 static void take(Polyline &pl1, const Polyline &pl2, const Points &contour, ContourIntersectionPoint *cp_start, ContourIntersectionPoint *cp_end, bool clockwise)
 {
+    assert(cp_start->prev_on_contour != nullptr);
+    assert(cp_start->next_on_contour != nullptr);
+    assert(cp_end  ->prev_on_contour != nullptr);
+    assert(cp_end  ->next_on_contour != nullptr);
     assert(cp_start != cp_end);
+
     take(pl1, pl2, contour, cp_start->point_idx, cp_end->point_idx, clockwise);
 
     // Mark the contour segments in between cp_start and cp_end as consumed.
@@ -410,7 +415,12 @@ static void take_limited(
     ContourIntersectionPoint *cp_start, ContourIntersectionPoint *cp_end, bool clockwise, float take_max_length, float line_half_width)
 {
 #ifndef NDEBUG
-    assert(cp_start != cp_end);
+    // This is a valid case, where a single infill line connect to two different contours (outer contour + hole or two holes).
+//    assert(cp_start != cp_end);
+    assert(cp_start->prev_on_contour != nullptr);
+    assert(cp_start->next_on_contour != nullptr);
+    assert(cp_end  ->prev_on_contour != nullptr);
+    assert(cp_end  ->next_on_contour != nullptr);
     assert(pl1.size() >= 2);
     assert(contour.size() + 1 == params.size());
 #endif /* NDEBUG */
@@ -438,8 +448,18 @@ static void take_limited(
     float length = params.back();
     float length_to_go = take_max_length;
     cp_start->consumed = true;
-    if (clockwise) {
+    if (cp_start == cp_end) {
+        length_to_go = std::max(0.f, std::min(length_to_go, length - line_half_width));
+        length_to_go = std::min(length_to_go, clockwise ? cp_start->contour_not_taken_length_prev : cp_start->contour_not_taken_length_next);
+        cp_start->consume_prev();
+        cp_start->consume_next();
+        if (length_to_go > SCALED_EPSILON)
+            clockwise ?
+                take_cw_limited (pl1, contour, params, cp_start->point_idx, cp_start->point_idx, length_to_go) :
+                take_ccw_limited(pl1, contour, params, cp_start->point_idx, cp_start->point_idx, length_to_go);
+    } else if (clockwise) {
         // Going clockwise from cp_start to cp_end.
+        assert(cp_start != cp_end);
         for (ContourIntersectionPoint *cp = cp_start; cp != cp_end; cp = cp->prev_on_contour) {
             // Length of the segment from cp to cp->prev_on_contour.
             float l = closed_contour_distance_cw(cp->param, cp->prev_on_contour->param, length);
@@ -461,6 +481,7 @@ static void take_limited(
             }
         }
     } else {
+        assert(cp_start != cp_end);
         for (ContourIntersectionPoint *cp = cp_start; cp != cp_end; cp = cp->next_on_contour) {
             float l = closed_contour_distance_ccw(cp->param, cp->next_on_contour->param, length);
             length_to_go = std::min(length_to_go, cp->contour_not_taken_length_next);
@@ -869,6 +890,10 @@ void mark_boundary_segments_touching_infill(
 			for (auto it_contour_and_segment = cell_data_range.first; it_contour_and_segment != cell_data_range.second; ++ it_contour_and_segment) {
 				// End points of the line segment and their vector.
 				auto segment = this->grid.segment(*it_contour_and_segment);
+                std::vector<ContourIntersectionPoint*> &intersections = boundary_intersections[it_contour_and_segment->first];
+                if (intersections.empty())
+                    // There is no infil line touching this contour, thus effort will be saved to calculate overlap with other infill lines.
+                    continue;
 				const Vec2d seg_pt1 = segment.first.cast<double>();
 				const Vec2d seg_pt2 = segment.second.cast<double>();
                 std::pair<double, double> interval;
@@ -892,20 +917,23 @@ void mark_boundary_segments_touching_infill(
                     const float param_overlap1 = param_seg_pt1 + interval.first;
                     const float param_overlap2 = param_seg_pt1 + interval.second;
                     // 2) Find the ContourIntersectionPoints before param_overlap1 and after param_overlap2.
-                    std::vector<ContourIntersectionPoint*> &intersections = boundary_intersections[it_contour_and_segment->first];
                     // Find the span of ContourIntersectionPoints, that is trimmed by the interval (param_overlap1, param_overlap2).
                     ContourIntersectionPoint *ip_low, *ip_high;
-                    {
+                    if (intersections.size() == 1) {
+                        // Only a single infill line touches this contour.
+                        ip_low = ip_high = intersections.front();
+                    } else {
+                        assert(intersections.size() > 1);
                         auto it_low  = Slic3r::lower_bound_by_predicate(intersections.begin(), intersections.end(), [param_overlap1](const ContourIntersectionPoint *l) { return l->param < param_overlap1; });
                         auto it_high = Slic3r::lower_bound_by_predicate(intersections.begin(), intersections.end(), [param_overlap2](const ContourIntersectionPoint *l) { return l->param < param_overlap2; });
                         ip_low  = it_low  == intersections.end() ? intersections.front() : *it_low;
                         ip_high = it_high == intersections.end() ? intersections.front() : *it_high;
                         if (ip_low->param != param_overlap1)
                             ip_low = ip_low->prev_on_contour;
+                        assert(ip_low != ip_high);
+                        // Verify that the interval (param_overlap1, param_overlap2) is inside the interval (ip_low->param, ip_high->param).
+                        assert(cyclic_interval_inside_interval(ip_low->param, ip_high->param, param_overlap1, param_overlap2, contour_length));
                     }
-                    assert(ip_low != ip_high);
-                    // Verify that the interval (param_overlap1, param_overlap2) is inside the interval (ip_low->param, ip_high->param).
-                    assert(cyclic_interval_inside_interval(ip_low->param, ip_high->param, param_overlap1, param_overlap2, contour_length));
                     assert(validate_boundary_intersections(boundary_intersections));
                     // Mark all ContourIntersectionPoints between ip_low and ip_high as consumed.
                     if (ip_low->next_on_contour != ip_high)
@@ -1068,8 +1096,11 @@ void Fill::connect_infill(Polylines &&infill_ordered, const Polygons &boundary_s
 void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Polygon*> &boundary_src, const BoundingBox &bbox, Polylines &polylines_out, const double spacing, const FillParams &params)
 {
 	assert(! infill_ordered.empty());
-    assert(params.anchor_length >= 0.01f);
-    const auto anchor_length = float(scale_(params.anchor_length));
+    assert(params.anchor_length     >= 0.f);
+    assert(params.anchor_length_max >= 0.01f);
+    assert(params.anchor_length_max >= params.anchor_length);
+    const auto anchor_length     = float(scale_(params.anchor_length));
+    const auto anchor_length_max = float(scale_(params.anchor_length_max));
 
 #if 0
     append(polylines_out, infill_ordered);
@@ -1097,7 +1128,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
 					EdgeGrid::Grid::ClosestPointResult cp = grid.closest_point(*pt, SCALED_EPSILON);
 					if (cp.valid()) {
 						// The infill end point shall lie on the contour.
-						assert(cp.distance < 2.);
+						assert(cp.distance <= 3.);
 						intersection_points.emplace_back(cp, (&pl - infill_ordered.data()) * 2 + (pt == &pl.points.front() ? 0 : 1));
 					}
 				}
@@ -1154,7 +1185,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
                     //add new point here
 					contour_dst.emplace_back(pt);
 				}
-                if (pprev != pfirst) {
+                if (pfirst) {
                     pprev->next_on_contour = pfirst;
                     pfirst->prev_on_contour = pprev;
                 }
@@ -1170,10 +1201,15 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
                 ip->param = contour_params[ip->point_idx];
             // and measure distance to the previous and next intersection point.
             const float contour_length = contour_params.back();
-            for (ContourIntersectionPoint *ip : contour_intersection_points) {
-                ip->contour_not_taken_length_prev = closed_contour_distance_ccw(ip->prev_on_contour->param, ip->param, contour_length);
-                ip->contour_not_taken_length_next = closed_contour_distance_ccw(ip->param, ip->next_on_contour->param, contour_length);
-            }
+            for (ContourIntersectionPoint *ip : contour_intersection_points) 
+                if (ip->next_on_contour == ip) {
+                    assert(ip->prev_on_contour == ip);
+                    ip->contour_not_taken_length_prev = ip->contour_not_taken_length_next = contour_length;
+                } else {
+                    assert(ip->prev_on_contour != ip);
+                    ip->contour_not_taken_length_prev = closed_contour_distance_ccw(ip->prev_on_contour->param, ip->param, contour_length);
+                    ip->contour_not_taken_length_next = closed_contour_distance_ccw(ip->param, ip->next_on_contour->param, contour_length);
+                }
 		}
 
 		assert(boundary.size() == boundary_src.size());
@@ -1277,7 +1313,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
         idx_first = get_and_update_merged_with(idx_first);
         assert(idx_first < idx_second);
         assert(idx_second == merged_with[idx_second]);
-        if (could_connect && length < anchor_length * 2.5) {
+        if (could_connect && length < anchor_length_max) {
             // Take the complete contour.
             // Connect the two polygons using the boundary contour.
             take(infill_ordered[idx_first], infill_ordered[idx_second], boundary[cp1->contour_idx], cp1, cp2, connection_cost.reversed);
@@ -1299,10 +1335,11 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
     std::vector<Arc> arches;
     arches.reserve(map_infill_end_point_to_boundary.size());
     for (ContourIntersectionPoint &cp : map_infill_end_point_to_boundary)
-        if (! cp.contour_idx != boundary_idx_unconnected && cp.next_on_contour != &cp && cp.could_connect_next())
+        if (cp.contour_idx != boundary_idx_unconnected && cp.next_on_contour != &cp && cp.could_connect_next())
             arches.push_back({ &cp, path_length_along_contour_ccw(&cp, cp.next_on_contour, boundary_params[cp.contour_idx].back()) });
     std::sort(arches.begin(), arches.end(), [](const auto &l, const auto &r) { return l.arc_length < r.arc_length; });
 
+    //FIXME improve the Traveling Salesman problem with 2-opt and 3-opt local optimization.
     for (Arc &arc : arches)
         if (! arc.intersection->consumed && ! arc.intersection->next_on_contour->consumed) {
             // Indices of the polylines to be connected by a perimeter segment.
@@ -1315,7 +1352,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
             if (polyline_idx1 != polyline_idx2) {
                 Polyline &polyline1 = infill_ordered[polyline_idx1];
                 Polyline &polyline2 = infill_ordered[polyline_idx2];
-                if (arc.arc_length < anchor_length * 2.5) {
+                if (arc.arc_length < anchor_length_max) {
                     // Not closing a loop, connecting the lines.
                     assert(contour[cp1->point_idx] == polyline1.points.front() || contour[cp1->point_idx] == polyline1.points.back());
                     if (contour[cp1->point_idx] == polyline1.points.front())
@@ -1333,7 +1370,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
                         polyline2.points.clear();
                         merged_with[polyline_idx2] = merged_with[polyline_idx1];
                     }
-                } else {
+                } else if (anchor_length > SCALED_EPSILON) {
                     // Move along the perimeter, but don't take the whole arc.
                     take_limited(polyline1, contour, contour_params, cp1, cp2, false, anchor_length, line_half_width);
                     take_limited(polyline2, contour, contour_params, cp2, cp1, true,  anchor_length, line_half_width);
@@ -1360,7 +1397,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
             assert(contour[contour_point.point_idx] == polyline.points.front() || contour[contour_point.point_idx] == polyline.points.back());
             bool connected = false;
             for (float l : { std::min(lprev, lnext), std::max(lprev, lnext) }) {
-                if (l == std::numeric_limits<float>::max() || l > anchor_length * 2.5)
+                if (l == std::numeric_limits<float>::max() || l > anchor_length_max)
                     break;
                 // Take the complete contour.
                 bool      reversed      = l == lprev;
@@ -1392,7 +1429,7 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector<const Po
                 connected = true;
                 break;
             }
-            if (! connected) {
+            if (! connected && anchor_length > SCALED_EPSILON) {
                 // Which to take? One could optimize for:
                 // 1) Shortest path
                 // 2) Hook length
diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index 4ebad7a8d..c09b70bca 100644
--- a/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
@@ -34,14 +34,15 @@ struct FillParams
 {
     bool        full_infill() const { return density > 0.9999f; }
     // Don't connect the fill lines around the inner perimeter.
-    bool        dont_connect() const { return anchor_length < 0.05f; }
+    bool        dont_connect() const { return anchor_length_max < 0.05f; }
 
     // Fill density, fraction in <0, 1>
     float       density 		{ 0.f };
 
     // Length of an infill anchor along the perimeter.
     // 1000mm is roughly the maximum length line that fits into a 32bit coord_t.
-    float       anchor_length   { 1000.f };
+    float       anchor_length       { 1000.f };
+    float       anchor_length_max   { 1000.f };
 
     // Don't adjust spacing to fill the space evenly.
     bool        dont_adjust 	{ true };
diff --git a/src/libslic3r/Fill/FillConcentric.cpp b/src/libslic3r/Fill/FillConcentric.cpp
index 587038178..87bddeb61 100644
--- a/src/libslic3r/Fill/FillConcentric.cpp
+++ b/src/libslic3r/Fill/FillConcentric.cpp
@@ -39,7 +39,7 @@ void FillConcentric::_fill_surface_single(
     size_t iPathFirst = polylines_out.size();
     Point last_pos(0, 0);
     for (const Polygon &loop : loops) {
-        polylines_out.push_back(loop.split_at_index(last_pos.nearest_point_index(loop)));
+        polylines_out.push_back(loop.split_at_index(last_pos.nearest_point_index(loop.points)));
         last_pos = polylines_out.back().last_point();
     }
 
diff --git a/src/libslic3r/ModelArrange.cpp b/src/libslic3r/ModelArrange.cpp
index 230b04de5..fcea7e14e 100644
--- a/src/libslic3r/ModelArrange.cpp
+++ b/src/libslic3r/ModelArrange.cpp
@@ -49,7 +49,7 @@ Slic3r::arrangement::ArrangePolygon get_arrange_poly(const Model &model)
             std::copy(pts.begin(), pts.end(), std::back_inserter(apts));
         }
     
-    apts = Geometry::convex_hull(apts);
+    apts = std::move(Geometry::convex_hull(apts).points);
     return ap;
 }
 
diff --git a/src/libslic3r/MotionPlanner.cpp b/src/libslic3r/MotionPlanner.cpp
index ae50df8f4..a8ce59086 100644
--- a/src/libslic3r/MotionPlanner.cpp
+++ b/src/libslic3r/MotionPlanner.cpp
@@ -264,7 +264,7 @@ Point MotionPlannerEnv::nearest_env_point(const Point &from, const Point &to) co
     for (const ExPolygon &ex : m_env.expolygons) {
         for (const Polygon &hole : ex.holes)
             if (hole.contains(from))
-                pp = hole;
+                pp = hole.points;
         if (! pp.empty())
             break;
     }
diff --git a/src/libslic3r/MultiPoint.hpp b/src/libslic3r/MultiPoint.hpp
index 9ff91b502..fa6dbabb9 100644
--- a/src/libslic3r/MultiPoint.hpp
+++ b/src/libslic3r/MultiPoint.hpp
@@ -17,8 +17,6 @@ class MultiPoint
 public:
     Points points;
     
-    operator Points() const { return this->points; }
-
     MultiPoint() {}
     MultiPoint(const MultiPoint &other) : points(other.points) {}
     MultiPoint(MultiPoint &&other) : points(std::move(other.points)) {}
diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp
index 3cd91dafe..e6261ebd1 100644
--- a/src/libslic3r/PerimeterGenerator.cpp
+++ b/src/libslic3r/PerimeterGenerator.cpp
@@ -158,7 +158,7 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime
             // get non-overhang paths by intersecting this loop with the grown lower slices
             extrusion_paths_append(
                 paths,
-                intersection_pl(loop.polygon, perimeter_generator.lower_slices_polygons()),
+                intersection_pl((Polygons)loop.polygon, perimeter_generator.lower_slices_polygons()),
                 role,
                 is_external ? perimeter_generator.ext_mm3_per_mm()          : perimeter_generator.mm3_per_mm(),
                 is_external ? perimeter_generator.ext_perimeter_flow.width  : perimeter_generator.perimeter_flow.width,
@@ -169,7 +169,7 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime
             // the loop centerline and original lower slices is >= half nozzle diameter
             extrusion_paths_append(
                 paths,
-                diff_pl(loop.polygon, perimeter_generator.lower_slices_polygons()),
+                diff_pl((Polygons)loop.polygon, perimeter_generator.lower_slices_polygons()),
                 erOverhangPerimeter,
                 perimeter_generator.mm3_per_mm_overhang(),
                 perimeter_generator.overhang_flow.width,
diff --git a/src/libslic3r/Polygon.hpp b/src/libslic3r/Polygon.hpp
index 8479a0bd6..b550ae7d7 100644
--- a/src/libslic3r/Polygon.hpp
+++ b/src/libslic3r/Polygon.hpp
@@ -16,8 +16,8 @@ typedef std::vector<Polygon> Polygons;
 class Polygon : public MultiPoint
 {
 public:
-    operator Polygons() const { Polygons pp; pp.push_back(*this); return pp; }
-    operator Polyline() const { return this->split_at_first_point(); }
+    explicit operator Polygons() const { Polygons pp; pp.push_back(*this); return pp; }
+    explicit operator Polyline() const { return this->split_at_first_point(); }
     Point& operator[](Points::size_type idx) { return this->points[idx]; }
     const Point& operator[](Points::size_type idx) const { return this->points[idx]; }
 
diff --git a/src/libslic3r/Polyline.cpp b/src/libslic3r/Polyline.cpp
index d24788c7b..a6be64299 100644
--- a/src/libslic3r/Polyline.cpp
+++ b/src/libslic3r/Polyline.cpp
@@ -200,7 +200,7 @@ BoundingBox get_extents(const Polylines &polylines)
     if (! polylines.empty()) {
         bb = polylines.front().bounding_box();
         for (size_t i = 1; i < polylines.size(); ++ i)
-            bb.merge(polylines[i]);
+            bb.merge(polylines[i].points);
     }
     return bb;
 }
diff --git a/src/libslic3r/Polyline.hpp b/src/libslic3r/Polyline.hpp
index 2a53a13f9..ef1da9afb 100644
--- a/src/libslic3r/Polyline.hpp
+++ b/src/libslic3r/Polyline.hpp
@@ -60,8 +60,8 @@ public:
         }
     }
 
-    operator Polylines() const;
-    operator Line() const;
+    explicit operator Polylines() const;
+    explicit operator Line() const;
     const Point& last_point() const override { return this->points.back(); }
 
     const Point& leftmost_point() const;
diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp
index 0b13745e1..c7e0c5040 100644
--- a/src/libslic3r/Preset.cpp
+++ b/src/libslic3r/Preset.cpp
@@ -427,7 +427,7 @@ const std::vector<std::string>& Preset::print_options()
         "infill_extruder", "solid_infill_extruder", "support_material_extruder", "support_material_interface_extruder",
         "ooze_prevention", "standby_temperature_delta", "interface_shells", "extrusion_width", "first_layer_extrusion_width",
         "perimeter_extrusion_width", "external_perimeter_extrusion_width", "infill_extrusion_width", "solid_infill_extrusion_width",
-        "top_infill_extrusion_width", "support_material_extrusion_width", "infill_overlap", "infill_anchor", "bridge_flow_ratio", "clip_multipart_objects",
+        "top_infill_extrusion_width", "support_material_extrusion_width", "infill_overlap", "infill_anchor", "infill_anchor_max", "bridge_flow_ratio", "clip_multipart_objects",
         "elefant_foot_compensation", "xy_size_compensation", "threads", "resolution", "wipe_tower", "wipe_tower_x", "wipe_tower_y",
         "wipe_tower_width", "wipe_tower_rotation_angle", "wipe_tower_bridging", "single_extruder_multi_material_priming",
         "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits"
diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index 4e4c90fb2..a8d4b2ea0 100644
--- a/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -1220,9 +1220,9 @@ static inline bool sequential_print_horizontal_clearance_valid(const Print &prin
 	        // instance.shift is a position of a centered object, while model object may not be centered.
 	        // Conver the shift from the PrintObject's coordinates into ModelObject's coordinates by removing the centering offset.
 	        convex_hull.translate(instance.shift - print_object->center_offset());
-	        if (! intersection(convex_hulls_other, convex_hull).empty())
+	        if (! intersection(convex_hulls_other, (Polygons)convex_hull).empty())
 	            return false;
-	        polygons_append(convex_hulls_other, convex_hull);
+	        convex_hulls_other.emplace_back(std::move(convex_hull));
 	    }
 	}
 	return true;
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 629838a0b..97b62bf56 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -1064,11 +1064,15 @@ void PrintConfigDef::init_fff_params()
     def->mode = comAdvanced;
     def->set_default_value(new ConfigOptionInt(1));
 
-    def = this->add("infill_anchor", coFloatOrPercent);
+    auto def_infill_anchor_min = def = this->add("infill_anchor", coFloatOrPercent);
     def->label = L("Length of the infill anchor");
     def->category = L("Advanced");
     def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
-                     "If expressed as percentage (example: 15%) it is calculated over infill extrusion width.");
+                     "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. "
+                     "PrusaSlicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
+                     "shorter than infill_anchor_max is found, the infill line is connected to a perimeter segment at just one side "
+                     "and the length of the perimeter segment taken is limited to this parameter, but no longer than anchor_length_max. "
+                     "Set this parameter to zero to disable anchoring perimeters connected to a single infill line.");
     def->sidetext = L("mm or %");
     def->ratio_over = "infill_extrusion_width";
     def->gui_type = "f_enum_open";
@@ -1078,15 +1082,36 @@ void PrintConfigDef::init_fff_params()
     def->enum_values.push_back("5");
     def->enum_values.push_back("10");
     def->enum_values.push_back("1000");
-    def->enum_labels.push_back(L("0 (not anchored)"));
+    def->enum_labels.push_back(L("0 (no open anchors)"));
     def->enum_labels.push_back("1 mm");
     def->enum_labels.push_back("2 mm");
     def->enum_labels.push_back("5 mm");
     def->enum_labels.push_back("10 mm");
     def->enum_labels.push_back(L("1000 (unlimited)"));
     def->mode = comAdvanced;
-//    def->set_default_value(new ConfigOptionFloatOrPercent(300, true));
-    def->set_default_value(new ConfigOptionFloatOrPercent(1000, false));
+    def->set_default_value(new ConfigOptionFloatOrPercent(600, true));
+
+    def = this->add("infill_anchor_max", coFloatOrPercent);
+    def->label = L("Maximum length of the infill anchor");
+    def->category    = def_infill_anchor_min->category;
+    def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
+                     "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. "
+                     "PrusaSlicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
+                     "shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side "
+                     "and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter. "
+                     "Set this parameter to zero to disable anchoring.");
+    def->sidetext    = def_infill_anchor_min->sidetext;
+    def->ratio_over  = def_infill_anchor_min->ratio_over;
+    def->gui_type    = def_infill_anchor_min->gui_type;
+    def->enum_values = def_infill_anchor_min->enum_values;
+    def->enum_labels.push_back(L("0 (not anchored)"));
+    def->enum_labels.push_back("1 mm");
+    def->enum_labels.push_back("2 mm");
+    def->enum_labels.push_back("5 mm");
+    def->enum_labels.push_back("10 mm");
+    def->enum_labels.push_back(L("1000 (unlimited)"));
+    def->mode        = def_infill_anchor_min->mode;
+    def->set_default_value(new ConfigOptionFloatOrPercent(50, false));
 
     def = this->add("infill_extruder", coInt);
     def->label = L("Infill extruder");
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 5ca04a341..aa7b159d0 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -532,6 +532,7 @@ public:
     ConfigOptionEnum<InfillPattern> fill_pattern;
     ConfigOptionFloat               gap_fill_speed;
     ConfigOptionFloatOrPercent      infill_anchor;
+    ConfigOptionFloatOrPercent      infill_anchor_max;
     ConfigOptionInt                 infill_extruder;
     ConfigOptionFloatOrPercent      infill_extrusion_width;
     ConfigOptionInt                 infill_every_layers;
@@ -584,6 +585,7 @@ protected:
         OPT_PTR(fill_pattern);
         OPT_PTR(gap_fill_speed);
         OPT_PTR(infill_anchor);
+        OPT_PTR(infill_anchor_max);
         OPT_PTR(infill_extruder);
         OPT_PTR(infill_extrusion_width);
         OPT_PTR(infill_every_layers);
diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp
index 3937f4fed..c70542a26 100644
--- a/src/libslic3r/PrintObject.cpp
+++ b/src/libslic3r/PrintObject.cpp
@@ -591,6 +591,7 @@ bool PrintObject::invalidate_state_by_config_options(const std::vector<t_config_
             || opt_key == "fill_angle"
             || opt_key == "fill_pattern"
             || opt_key == "infill_anchor"
+            || opt_key == "infill_anchor_max"
             || opt_key == "top_infill_extrusion_width"
             || opt_key == "first_layer_extrusion_width") {
             steps.emplace_back(posInfill);
diff --git a/src/libslic3r/SLA/Pad.cpp b/src/libslic3r/SLA/Pad.cpp
index f2b189cd1..927c32589 100644
--- a/src/libslic3r/SLA/Pad.cpp
+++ b/src/libslic3r/SLA/Pad.cpp
@@ -369,7 +369,7 @@ bool add_cavity(Contour3D &pad, ExPolygon &top_poly, const PadConfig3D &cfg,
 
     if (inner_base.empty() || middle_base.empty()) { logerr(); return false; }
 
-    ExPolygons pdiff = diff_ex(top_poly, middle_base.contour);
+    ExPolygons pdiff = diff_ex((Polygons)top_poly, (Polygons)middle_base.contour);
 
     if (pdiff.size() != 1) { logerr(); return false; }
 
diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp
index a27b85734..0fc4eb024 100644
--- a/src/libslic3r/SupportMaterial.cpp
+++ b/src/libslic3r/SupportMaterial.cpp
@@ -2513,7 +2513,7 @@ void LoopInterfaceProcessor::generate(MyLayerExtruded &top_contact_layer, const
                 Polygon     &contour = (i_contour == 0) ? it_contact_expoly->contour : it_contact_expoly->holes[i_contour - 1];
                 const Point *seg_current_pt = nullptr;
                 coordf_t     seg_current_t  = 0.;
-                if (! intersection_pl(contour.split_at_first_point(), overhang_with_margin).empty()) {
+                if (! intersection_pl((Polylines)contour.split_at_first_point(), overhang_with_margin).empty()) {
                     // The contour is below the overhang at least to some extent.
                     //FIXME ideally one would place the circles below the overhang only.
                     // Walk around the contour and place circles so their centers are not closer than circle_distance from each other.
diff --git a/src/slic3r/GUI/2DBed.cpp b/src/slic3r/GUI/2DBed.cpp
index debd104ef..ea6720356 100644
--- a/src/slic3r/GUI/2DBed.cpp
+++ b/src/slic3r/GUI/2DBed.cpp
@@ -87,7 +87,7 @@ void Bed_2D::repaint(const std::vector<Vec2d>& shape)
 	for (auto y = bb.min(1) - fmod(bb.min(1), step) + step; y < bb.max(1); y += step) {
 		polylines.push_back(Polyline::new_scale({ Vec2d(bb.min(0), y), Vec2d(bb.max(0), y) }));
 	}
-	polylines = intersection_pl(polylines, bed_polygon);
+	polylines = intersection_pl(polylines, (Polygons)bed_polygon);
 
     dc.SetPen(wxPen(wxColour(230, 230, 230), 1, wxPENSTYLE_SOLID));
 	for (auto pl : polylines)
diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp
index 845dc1c0b..899a01369 100644
--- a/src/slic3r/GUI/ConfigManipulation.cpp
+++ b/src/slic3r/GUI/ConfigManipulation.cpp
@@ -237,8 +237,11 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config)
     bool have_infill = config->option<ConfigOptionPercent>("fill_density")->value > 0;
     // infill_extruder uses the same logic as in Print::extruders()
     for (auto el : { "fill_pattern", "infill_every_layers", "infill_only_where_needed",
-                    "solid_infill_every_layers", "solid_infill_below_area", "infill_extruder" })
+                    "solid_infill_every_layers", "solid_infill_below_area", "infill_extruder", "infill_anchor_max" })
         toggle_field(el, have_infill);
+    // Only allow configuration of open anchors if the anchoring is enabled.
+    bool has_infill_anchors = have_infill && config->option<ConfigOptionFloatOrPercent>("infill_anchor_max")->value > 0;
+    toggle_field("infill_anchor", has_infill_anchors);
 
     bool has_spiral_vase         = config->opt_bool("spiral_vase");
     bool has_top_solid_infill 	 = config->opt_int("top_solid_layers") > 0;
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index 940b4eeb2..469a48527 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -1423,6 +1423,7 @@ void TabPrint::build()
         optgroup->append_single_option_line("fill_density", category_path + "fill-density");
         optgroup->append_single_option_line("fill_pattern", category_path + "fill-pattern");
         optgroup->append_single_option_line("infill_anchor", category_path + "fill-pattern");
+        optgroup->append_single_option_line("infill_anchor_max", category_path + "fill-pattern");
         optgroup->append_single_option_line("top_fill_pattern", category_path + "top-fill-pattern");
         optgroup->append_single_option_line("bottom_fill_pattern", category_path + "bottom-fill-pattern");
 

From 2f65bcc83ffe7a36455bf205e3427243540a337a Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Tue, 24 Nov 2020 16:43:37 +0100
Subject: [PATCH 104/138] Performance improvements and cleanup

---
 .../include/libnest2d/placers/nfpplacer.hpp   | 251 +++++-------------
 1 file changed, 69 insertions(+), 182 deletions(-)

diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp
index 6cdaadd25..7b4f36716 100644
--- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp
+++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp
@@ -479,13 +479,18 @@ class _NofitPolyPlacer: public PlacerBoilerplate<_NofitPolyPlacer<RawShape, TBin
 
     using MaxNfpLevel = nfp::MaxNfpLevel<RawShape>;
 
-    // Norming factor for the optimization function
-    const double norm_;
-
 public:
 
     using Pile = nfp::Shapes<RawShape>;
 
+private:
+
+    // Norming factor for the optimization function
+    const double norm_;
+    Pile merged_pile_;
+
+public:
+
     inline explicit _NofitPolyPlacer(const BinType& bin):
         Base(bin),
         norm_(std::sqrt(sl::area(bin)))
@@ -576,6 +581,20 @@ private:
 
     using Shapes = TMultiShape<RawShape>;
 
+    template<nfp::NfpLevel lvl>
+    static Shapes calcnfp(const Shapes &pile, const RawShape &orb)
+    {
+        Shapes ret; ret.reserve(2 * pile.size());
+
+        for (auto &stat : pile) {
+            Shapes subnfp = nfp::noFitPolygon<lvl>(stat, orb);
+            for (auto &nfp : subnfp)
+                ret.emplace_back(subnfp);
+        }
+
+        return nfp::merge(ret);
+    }
+
     Shapes calcnfp(const Item &trsh, Lvl<nfp::NfpLevel::CONVEX_ONLY>)
     {
         using namespace nfp;
@@ -616,135 +635,9 @@ private:
     template<class Level>
     Shapes calcnfp(const Item &trsh, Level)
     { // Function for arbitrary level of nfp implementation
-        using namespace nfp;
 
-        Shapes nfps;
-
-        auto& orb = trsh.transformedShape();
-        bool orbconvex = trsh.isContourConvex();
-
-        for(Item& sh : items_) {
-            nfp::NfpResult<RawShape> subnfp;
-            auto& stat = sh.transformedShape();
-
-            if(sh.isContourConvex() && orbconvex)
-                subnfp = nfp::noFitPolygon<NfpLevel::CONVEX_ONLY>(stat, orb);
-            else if(orbconvex)
-                subnfp = nfp::noFitPolygon<NfpLevel::ONE_CONVEX>(stat, orb);
-            else
-                subnfp = nfp::noFitPolygon<Level::value>(stat, orb);
-
-            correctNfpPosition(subnfp, sh, trsh);
-
-            nfps = nfp::merge(nfps, subnfp.first);
-        }
-
-        return nfps;
-    }
-
-    // Very much experimental
-    void repack(Item& item, PackResult& result) {
-
-        if((sl::area(bin_) - this->filledArea()) >= item.area()) {
-            auto prev_func = config_.object_function;
-
-            unsigned iter = 0;
-            ItemGroup backup_rf = items_;
-            std::vector<Item> backup_cpy;
-            for(Item& itm : items_) backup_cpy.emplace_back(itm);
-
-            auto ofn = [this, &item, &result, &iter, &backup_cpy, &backup_rf]
-                    (double ratio)
-            {
-                auto& bin = bin_;
-                iter++;
-                config_.object_function = [bin, ratio](
-                        nfp::Shapes<RawShape>& pile,
-                        const Item& item,
-                        const ItemGroup& /*remaining*/)
-                {
-                    pile.emplace_back(item.transformedShape());
-                    auto ch = sl::convexHull(pile);
-                    auto pbb = sl::boundingBox(pile);
-                    pile.pop_back();
-
-                    double parea = 0.5*(sl::area(ch) + sl::area(pbb));
-
-                    double pile_area = std::accumulate(
-                                pile.begin(), pile.end(), item.area(),
-                                [](double sum, const RawShape& sh){
-                        return sum + sl::area(sh);
-                    });
-
-                    // The pack ratio -- how much is the convex hull occupied
-                    double pack_rate = (pile_area)/parea;
-
-                    // ratio of waste
-                    double waste = 1.0 - pack_rate;
-
-                    // Score is the square root of waste. This will extend the
-                    // range of good (lower) values and shrink the range of bad
-                    // (larger) values.
-                    auto wscore = std::sqrt(waste);
-
-
-                    auto ibb = item.boundingBox();
-                    auto bbb = sl::boundingBox(bin);
-                    auto c = ibb.center();
-                    double norm = 0.5*pl::distance(bbb.minCorner(),
-                                                   bbb.maxCorner());
-
-                    double dscore = pl::distance(c, pbb.center()) / norm;
-
-                    return ratio*wscore + (1.0 - ratio) * dscore;
-                };
-
-                auto bb = sl::boundingBox(bin);
-                double norm = bb.width() + bb.height();
-
-                auto items = items_;
-                clearItems();
-                auto it = items.begin();
-                while(auto pr = _trypack(*it++)) {
-                    this->accept(pr); if(it == items.end()) break;
-                }
-
-                auto count_diff = items.size() - items_.size();
-                double score = count_diff;
-
-                if(count_diff == 0) {
-                    result = _trypack(item);
-
-                    if(result) {
-                        std::cout << "Success" << std::endl;
-                        score = 0.0;
-                    } else {
-                        score += result.overfit() / norm;
-                    }
-                } else {
-                    result = PackResult();
-                    items_ = backup_rf;
-                    for(unsigned i = 0; i < items_.size(); i++) {
-                        items_[i].get() = backup_cpy[i];
-                    }
-                }
-
-                std::cout << iter << " repack result: " << score << " "
-                          << ratio << " " << count_diff << std::endl;
-
-                return score;
-            };
-
-                opt::StopCriteria stopcr;
-                stopcr.max_iterations = 30;
-                stopcr.stop_score = 1e-20;
-                opt::TOptimizer<opt::Method::L_SUBPLEX> solver(stopcr);
-                solver.optimize_min(ofn, opt::initvals(0.5),
-                                    opt::bound(0.0, 1.0));
-
-            // optimize
-            config_.object_function = prev_func;
-        }
+        // TODO: implement
+        return {};
     }
 
     struct Optimum {
@@ -798,6 +691,50 @@ private:
             Radians final_rot = initial_rot;
             Shapes nfps;
 
+            auto& bin = bin_;
+            double norm = norm_;
+            auto pbb = sl::boundingBox(merged_pile_);
+            auto binbb = sl::boundingBox(bin);
+
+            // This is the kernel part of the object function that is
+            // customizable by the library client
+            std::function<double(const Item&)> _objfunc;
+            if(config_.object_function) _objfunc = config_.object_function;
+            else {
+
+                // Inside check has to be strict if no alignment was enabled
+                std::function<double(const Box&)> ins_check;
+                if(config_.alignment == Config::Alignment::DONT_ALIGN)
+                    ins_check = [&binbb, norm](const Box& fullbb) {
+                        double ret = 0;
+                        if(!sl::isInside(fullbb, binbb))
+                            ret += norm;
+                        return ret;
+                    };
+                else
+                    ins_check = [&bin](const Box& fullbb) {
+                        double miss = overfit(fullbb, bin);
+                        miss = miss > 0? miss : 0;
+                        return std::pow(miss, 2);
+                    };
+
+                _objfunc = [norm, binbb, pbb, ins_check](const Item& item)
+                {
+                    auto ibb = item.boundingBox();
+                    auto fullbb = sl::boundingBox(pbb, ibb);
+
+                    double score = pl::distance(ibb.center(),
+                                                binbb.center());
+                    score /= norm;
+
+                    score += ins_check(fullbb);
+
+                    return score;
+                };
+            }
+
+            Pile merged_pile = merged_pile_;
+
             for(auto rot : config_.rotations) {
 
                 item.translation(initial_tr);
@@ -822,57 +759,6 @@ private:
                     ecache.back().accuracy(config_.accuracy);
                 }
 
-                Shapes pile;
-                pile.reserve(items_.size()+1);
-                // double pile_area = 0;
-                for(Item& mitem : items_) {
-                    pile.emplace_back(mitem.transformedShape());
-                    // pile_area += mitem.area();
-                }
-
-                auto merged_pile = nfp::merge(pile);
-                auto& bin = bin_;
-                double norm = norm_;
-                auto pbb = sl::boundingBox(merged_pile);
-                auto binbb = sl::boundingBox(bin);
-
-                // This is the kernel part of the object function that is
-                // customizable by the library client
-                std::function<double(const Item&)> _objfunc;
-                if(config_.object_function) _objfunc = config_.object_function;
-                else {
-
-                    // Inside check has to be strict if no alignment was enabled
-                    std::function<double(const Box&)> ins_check;
-                    if(config_.alignment == Config::Alignment::DONT_ALIGN)
-                        ins_check = [&binbb, norm](const Box& fullbb) {
-                            double ret = 0;
-                            if(!sl::isInside(fullbb, binbb))
-                                ret += norm;
-                            return ret;
-                        };
-                    else
-                        ins_check = [&bin](const Box& fullbb) {
-                            double miss = overfit(fullbb, bin);
-                            miss = miss > 0? miss : 0;
-                            return std::pow(miss, 2);
-                        };
-
-                    _objfunc = [norm, binbb, pbb, ins_check](const Item& item)
-                    {
-                        auto ibb = item.boundingBox();
-                        auto fullbb = sl::boundingBox(pbb, ibb);
-
-                        double score = pl::distance(ibb.center(),
-                                                    binbb.center());
-                        score /= norm;
-
-                        score += ins_check(fullbb);
-
-                        return score;
-                    };
-                }
-
                 // Our object function for placement
                 auto rawobjfunc = [_objfunc, iv, startpos]
                         (Vertex v, Item& itm)
@@ -1041,6 +927,7 @@ private:
 
             item.translation(final_tr);
             item.rotation(final_rot);
+            merged_pile_ = nfp::merge(merged_pile, item.transformedShape());
         }
 
         if(can_pack) {

From 77f845b0be1e42c3f45c093c023ac1c4682ea4e5 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Tue, 24 Nov 2020 18:44:13 +0100
Subject: [PATCH 105/138] Added a possibility to suppress scrolling for some
 ComboBoxes

---
 src/slic3r/GUI/Field.cpp  | 31 ++++++++++++++++++++++++++++---
 src/slic3r/GUI/Field.hpp  |  7 ++++++-
 src/slic3r/GUI/Plater.cpp |  3 +++
 3 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index a92a98844..a0176ad4a 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -862,7 +862,19 @@ void Choice::BUILD() {
 #endif
 
 // 	temp->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId());
- 	temp->Bind(wxEVT_COMBOBOX, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId());
+    temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true;  });
+    temp->Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent&) { m_is_dropped = false; });
+
+    temp->Bind(wxEVT_COMBOBOX, ([this, temp](wxCommandEvent evt) {
+        if (m_suppress_scroll) {
+            if (!m_is_dropped) {
+                temp->SetSelection(m_last_selected);
+                return;
+            }
+            m_last_selected = evt.GetSelection();
+        }
+        on_change_field();
+    }), temp->GetId());
 
     if (m_is_editable) {
         temp->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) {
@@ -876,8 +888,7 @@ void Choice::BUILD() {
             if (is_defined_input_value<choice_ctrl>(window, m_opt.type)) {
                 if (fabs(old_val - boost::any_cast<double>(get_value())) <= 0.0001)
                     return;
-                else
-                    on_change_field();
+                on_change_field();
             }
             else
                 on_kill_focus();
@@ -887,6 +898,13 @@ void Choice::BUILD() {
 	temp->SetToolTip(get_tooltip_text(temp->GetValue()));
 }
 
+void Choice::suppress_scroll()
+{
+    m_suppress_scroll = true;
+    choice_ctrl* ctrl = dynamic_cast<choice_ctrl*>(window);
+    m_last_selected = ctrl->GetSelection();
+}
+
 void Choice::set_selection()
 {
     /* To prevent earlier control updating under OSX set m_disable_change_event to true
@@ -901,6 +919,7 @@ void Choice::set_selection()
 	case coEnum:{
 		int id_value = m_opt.get_default_value<ConfigOptionEnum<SeamPosition>>()->value; //!!
         field->SetSelection(id_value);
+        if (m_suppress_scroll) m_last_selected = id_value;
 		break;
 	}
 	case coFloat:
@@ -934,6 +953,8 @@ void Choice::set_selection()
 			++idx;
 		}
 		idx == m_opt.enum_values.size() ? field->SetValue(text_value) : field->SetSelection(idx);
+
+        if (m_suppress_scroll && idx < m_opt.enum_values.size()) m_last_selected = idx;
 	}
 }
 
@@ -953,6 +974,7 @@ void Choice::set_value(const std::string& value, bool change_event)  //! Redunda
 	idx == m_opt.enum_values.size() ? 
 		field->SetValue(value) :
 		field->SetSelection(idx);
+	if (m_suppress_scroll && idx < m_opt.enum_values.size()) m_last_selected = idx;
 	
 	m_disable_change_event = false;
 }
@@ -990,6 +1012,7 @@ void Choice::set_value(const boost::any& value, bool change_event)
         }
         else
 			field->SetSelection(idx);
+		if (m_suppress_scroll && idx < m_opt.enum_values.size()) m_last_selected = idx;
 		break;
 	}
 	case coEnum: {
@@ -1020,6 +1043,7 @@ void Choice::set_value(const boost::any& value, bool change_event)
 				val = 0;
 		}
 		field->SetSelection(val);
+		if (m_suppress_scroll) m_last_selected = val;
 		break;
 	}
 	default:
@@ -1179,6 +1203,7 @@ void Choice::msw_rescale()
     idx == m_opt.enum_values.size() ?
         field->SetValue(selection) :
         field->SetSelection(idx);
+    if (m_suppress_scroll && idx < m_opt.enum_values.size()) m_last_selected = idx;
 #else
     auto size = wxSize(def_width_wider() * m_em_unit, wxDefaultCoord);
     if (m_opt.height >= 0) size.SetHeight(m_opt.height * m_em_unit);
diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp
index b4bcf9f33..6cadb607d 100644
--- a/src/slic3r/GUI/Field.hpp
+++ b/src/slic3r/GUI/Field.hpp
@@ -385,7 +385,10 @@ public:
     /* Under OSX: wxBitmapComboBox->GetWindowStyle() returns some weard value, 
      * so let use a flag, which has TRUE value for a control without wxCB_READONLY style
      */
-    bool            m_is_editable { false };
+    bool            m_is_editable     { false };
+    bool            m_is_dropped      { false };
+    bool            m_suppress_scroll { false };
+    int             m_last_selected   { wxNOT_FOUND };
 
 	void			set_selection();
 	void			set_value(const std::string& value, bool change_event = false);
@@ -399,6 +402,8 @@ public:
 	void			enable() override ;//{ dynamic_cast<wxBitmapComboBox*>(window)->Enable(); };
 	void			disable() override;//{ dynamic_cast<wxBitmapComboBox*>(window)->Disable(); };
 	wxWindow*		getWindow() override { return window; }
+
+    void            suppress_scroll();
 };
 
 class ColourPicker : public Field {
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 763a906f5..c2facfc06 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -439,6 +439,9 @@ FreqChangedParams::FreqChangedParams(wxWindow* parent) :
 
     m_og->activate();
 
+    Choice* choice = dynamic_cast<Choice*>(m_og->get_field("support"));
+    choice->suppress_scroll();
+
     // Frequently changed parameters for SLA_technology
     m_og_sla = std::make_shared<ConfigOptionsGroup>(parent, "");
     m_og_sla->hide_labels();

From 5363dcb5bc6898aacf9bff327894f7e1a418dba2 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Tue, 24 Nov 2020 18:44:59 +0100
Subject: [PATCH 106/138] Fix broken arrange from
 2f65bcc83ffe7a36455bf205e3427243540a337a

---
 .../include/libnest2d/placers/nfpplacer.hpp      | 16 +---------------
 1 file changed, 1 insertion(+), 15 deletions(-)

diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp
index 7b4f36716..3554892b3 100644
--- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp
+++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp
@@ -581,20 +581,6 @@ private:
 
     using Shapes = TMultiShape<RawShape>;
 
-    template<nfp::NfpLevel lvl>
-    static Shapes calcnfp(const Shapes &pile, const RawShape &orb)
-    {
-        Shapes ret; ret.reserve(2 * pile.size());
-
-        for (auto &stat : pile) {
-            Shapes subnfp = nfp::noFitPolygon<lvl>(stat, orb);
-            for (auto &nfp : subnfp)
-                ret.emplace_back(subnfp);
-        }
-
-        return nfp::merge(ret);
-    }
-
     Shapes calcnfp(const Item &trsh, Lvl<nfp::NfpLevel::CONVEX_ONLY>)
     {
         using namespace nfp;
@@ -927,11 +913,11 @@ private:
 
             item.translation(final_tr);
             item.rotation(final_rot);
-            merged_pile_ = nfp::merge(merged_pile, item.transformedShape());
         }
 
         if(can_pack) {
             ret = PackResult(item);
+            merged_pile_ = nfp::merge(merged_pile_, item.transformedShape());
         } else {
             ret = PackResult(best_overfit);
         }

From df40f6ba119669a2d527a425d8b2bd7e395ac918 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Wed, 25 Nov 2020 10:31:58 +0100
Subject: [PATCH 107/138] ENABLE_GCODE_VIEWER set as default

---
 src/libslic3r/Technologies.hpp | 36 +++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 29a3721ff..95076733a 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -1,9 +1,9 @@
 #ifndef _prusaslicer_technologies_h_
 #define _prusaslicer_technologies_h_
 
-//============
+//=============
 // debug techs
-//============
+//=============
 
 // Shows camera target in the 3D scene
 #define ENABLE_SHOW_CAMERA_TARGET 0
@@ -23,20 +23,24 @@
 #define DISABLE_INSTANCES_SYNCH 0
 // Use wxDataViewRender instead of wxDataViewCustomRenderer
 #define ENABLE_NONCUSTOM_DATA_VIEW_RENDERING 0
+// Enable G-Code viewer statistics imgui dialog
+#define ENABLE_GCODE_VIEWER_STATISTICS 0
+// Enable G-Code viewer comparison between toolpaths height and width detected from gcode and calculated at gcode generation 
+#define ENABLE_GCODE_VIEWER_DATA_CHECKING 0
 
 
-//================
+//=================
 // 2.2.0.rc1 techs
-//================
+//=================
 #define ENABLE_2_2_0_RC1 1
 
 // Enable hack to remove crash when closing on OSX 10.9.5
 #define ENABLE_HACK_CLOSING_ON_OSX_10_9_5 (1 && ENABLE_2_2_0_RC1)
 
 
-//===================
+//====================
 // 2.3.0.alpha1 techs
-//===================
+//====================
 #define ENABLE_2_3_0_ALPHA1 1
 
 // Enable rendering of objects using environment map
@@ -51,27 +55,22 @@
 // Enable built-in DPI changed event handler of wxWidgets 3.1.3
 #define ENABLE_WX_3_1_3_DPI_CHANGED_EVENT (1 && ENABLE_2_3_0_ALPHA1)
 
-// Enable G-Code viewer
-#define ENABLE_GCODE_VIEWER (1 && ENABLE_2_3_0_ALPHA1)
-#define ENABLE_GCODE_VIEWER_STATISTICS (0 && ENABLE_GCODE_VIEWER)
-#define ENABLE_GCODE_VIEWER_DATA_CHECKING (0 && ENABLE_GCODE_VIEWER)
 
-
-//===================
+//====================
 // 2.3.0.alpha3 techs
-//===================
+//====================
 #define ENABLE_2_3_0_ALPHA3 1
 
 #define ENABLE_CTRL_M_ON_WINDOWS (0 && ENABLE_2_3_0_ALPHA3)
 
 
-//===================
+//====================
 // 2.3.0.alpha4 techs
-//===================
+//====================
 #define ENABLE_2_3_0_ALPHA4 1
 
-#define ENABLE_FIXED_SCREEN_SIZE_POINT_MARKERS (1 && ENABLE_GCODE_VIEWER && ENABLE_2_3_0_ALPHA4)
-#define ENABLE_SHOW_OPTION_POINT_LAYERS (1 && ENABLE_GCODE_VIEWER && ENABLE_2_3_0_ALPHA4)
+#define ENABLE_FIXED_SCREEN_SIZE_POINT_MARKERS (1 && ENABLE_2_3_0_ALPHA4)
+#define ENABLE_SHOW_OPTION_POINT_LAYERS (1 && ENABLE_2_3_0_ALPHA4)
 
 
 //===================
@@ -79,6 +78,7 @@
 //===================
 #define ENABLE_2_3_0_BETA1 1
 
-#define ENABLE_SHOW_WIPE_MOVES (1 && ENABLE_GCODE_VIEWER && ENABLE_2_3_0_BETA1)
+#define ENABLE_SHOW_WIPE_MOVES (1 && ENABLE_2_3_0_BETA1)
+
 
 #endif // _prusaslicer_technologies_h_

From 3d78ae9271f401838d3886716e3b61bbd591cf48 Mon Sep 17 00:00:00 2001
From: David Kocik <kocikdav@gmail.com>
Date: Wed, 25 Nov 2020 12:28:10 +0100
Subject: [PATCH 108/138] Instance check on windows: concider whole window name
 when searching for another instance

---
 src/slic3r/GUI/InstanceCheck.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/InstanceCheck.cpp b/src/slic3r/GUI/InstanceCheck.cpp
index aaf3ba3c6..d4dfa1f35 100644
--- a/src/slic3r/GUI/InstanceCheck.cpp
+++ b/src/slic3r/GUI/InstanceCheck.cpp
@@ -79,7 +79,7 @@ namespace instance_check_internal
 			return true;
 		std::wstring classNameString(className);
 		std::wstring wndTextString(wndText);
-		if (wndTextString.find(L"PrusaSlicer") == 0 && classNameString == L"wxWindowNR") {
+		if (wndTextString.find(L"PrusaSlicer") != std::wstring::npos && classNameString == L"wxWindowNR") {
 			//check if other instances has same instance hash
 			//if not it is not same version(binary) as this version 
 			HANDLE                handle = GetProp(hwnd, L"Instance_Hash_Minor");

From abf5a58336e8b75cb38a351e555c4dd1ec3842b7 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Wed, 25 Nov 2020 12:40:05 +0100
Subject: [PATCH 109/138] Preference dialog centered on the application

---
 src/slic3r/GUI/Preferences.cpp | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)

diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index 95e86ff7e..578c9d397 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -256,8 +256,8 @@ void PreferencesDialog::build()
 		create_settings_mode_widget();
 	}
 
-	if (is_editor) {
 #if ENABLE_ENVIRONMENT_MAP
+	if (is_editor) {
 		m_optgroup_render = std::make_shared<ConfigOptionsGroup>(this, _L("Render"));
 		m_optgroup_render->label_width = 40;
 		m_optgroup_render->m_on_change = [this](t_config_option_key opt_key, boost::any value) {
@@ -272,8 +272,8 @@ void PreferencesDialog::build()
 		m_optgroup_render->append_single_option_line(option);
 
 		m_optgroup_render->activate();
-#endif // ENABLE_ENVIRONMENT_MAP
 	}
+#endif // ENABLE_ENVIRONMENT_MAP
 
 	auto sizer = new wxBoxSizer(wxVERTICAL);
 	sizer->Add(m_optgroup_general->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10);
@@ -293,13 +293,13 @@ void PreferencesDialog::build()
 
 	SetSizer(sizer);
 	sizer->SetSizeHints(this);
+	this->CenterOnParent();
 }
 
 void PreferencesDialog::accept()
 {
-    if (m_values.find("no_defaults") != m_values.end()) {
+    if (m_values.find("no_defaults") != m_values.end())
         warning_catcher(this, wxString::Format(_L("You need to restart %s to make the changes effective."), SLIC3R_APP_NAME));
-	}
 
     auto app_config = get_app_config();
 
@@ -308,9 +308,9 @@ void PreferencesDialog::accept()
 		m_seq_top_layer_only_changed = app_config->get("seq_top_layer_only") != it->second;
 
 	m_settings_layout_changed = false;
-	for (const std::string& key : {"old_settings_layout_mode",
-								   "new_settings_layout_mode",
-								   "dlg_settings_layout_mode" })
+	for (const std::string& key : { "old_settings_layout_mode",
+								    "new_settings_layout_mode",
+								    "dlg_settings_layout_mode" })
 	{
 	    auto it = m_values.find(key);
 	    if (it != m_values.end() && app_config->get(key) != it->second) {
@@ -319,8 +319,7 @@ void PreferencesDialog::accept()
 	    }
 	}
 
-	for (const std::string& key : {"default_action_on_close_application", "default_action_on_select_preset"})
-	{
+	for (const std::string& key : {"default_action_on_close_application", "default_action_on_select_preset"}) {
 	    auto it = m_values.find(key);
 		if (it != m_values.end() && it->second != "none" && app_config->get(key) != "none")
 			m_values.erase(it); // we shouldn't change value, if some of those parameters was selected, and then deselected
@@ -421,9 +420,9 @@ void PreferencesDialog::create_icon_size_slider()
 
 void PreferencesDialog::create_settings_mode_widget()
 {
-	wxString choices[] = {	_L("Old regular layout with the tab bar"),
-							_L("New layout, access via settings button in the top menu"),
-							_L("Settings in non-modal window")		};
+	wxString choices[] = { _L("Old regular layout with the tab bar"),
+						   _L("New layout, access via settings button in the top menu"),
+						   _L("Settings in non-modal window") };
 
 	auto app_config = get_app_config();
 	int selection = app_config->get("old_settings_layout_mode") == "1" ? 0 :
@@ -432,14 +431,13 @@ void PreferencesDialog::create_settings_mode_widget()
 
 	wxWindow* parent = m_optgroup_gui->ctrl_parent();
 
-	m_layout_mode_box = new wxRadioBox(parent, wxID_ANY, _L("Layout Options"), wxDefaultPosition, wxDefaultSize, WXSIZEOF(choices), choices,
-		3, wxRA_SPECIFY_ROWS);
+	m_layout_mode_box = new wxRadioBox(parent, wxID_ANY, _L("Layout Options"), wxDefaultPosition, wxDefaultSize,
+		WXSIZEOF(choices), choices, 3, wxRA_SPECIFY_ROWS);
 	m_layout_mode_box->SetFont(wxGetApp().normal_font());
 	m_layout_mode_box->SetSelection(selection);
 
 	m_layout_mode_box->Bind(wxEVT_RADIOBOX, [this](wxCommandEvent& e) {
 		int selection = e.GetSelection();
-
 		m_values["old_settings_layout_mode"] = boost::any_cast<bool>(selection == 0) ? "1" : "0";
 		m_values["new_settings_layout_mode"] = boost::any_cast<bool>(selection == 1) ? "1" : "0";
 		m_values["dlg_settings_layout_mode"] = boost::any_cast<bool>(selection == 2) ? "1" : "0";
@@ -447,7 +445,6 @@ void PreferencesDialog::create_settings_mode_widget()
 
 	auto sizer = new wxBoxSizer(wxHORIZONTAL);
 	sizer->Add(m_layout_mode_box, 1, wxALIGN_CENTER_VERTICAL);
-
 	m_optgroup_gui->sizer->Add(sizer, 0, wxEXPAND);
 }
 

From 0a932ebfe37af8ded2506dca1d0a6df472b8deef Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Wed, 25 Nov 2020 13:56:57 +0100
Subject: [PATCH 110/138] Enable http digest authentication for CURL

---
 deps/deps-linux.cmake                        |  1 -
 deps/deps-macos.cmake                        |  1 -
 src/slic3r/Utils/Http.cpp                    |  9 +++++
 src/slic3r/Utils/Http.hpp                    |  2 +
 tests/slic3rutils/slic3rutils_tests_main.cpp | 40 +++++++++++++++++++-
 5 files changed, 50 insertions(+), 3 deletions(-)

diff --git a/deps/deps-linux.cmake b/deps/deps-linux.cmake
index ae972327f..420638d2f 100644
--- a/deps/deps-linux.cmake
+++ b/deps/deps-linux.cmake
@@ -80,7 +80,6 @@ ExternalProject_Add(dep_libcurl
         --disable-smb
         --disable-smtp
         --disable-gopher
-        --disable-crypto-auth
         --without-gssapi
         --without-libpsl
         --without-libidn2
diff --git a/deps/deps-macos.cmake b/deps/deps-macos.cmake
index a71a0ebfc..f985cc561 100644
--- a/deps/deps-macos.cmake
+++ b/deps/deps-macos.cmake
@@ -67,7 +67,6 @@ ExternalProject_Add(dep_libcurl
         --disable-smb
         --disable-smtp
         --disable-gopher
-        --disable-crypto-auth
         --without-gssapi
         --without-libpsl
         --without-libidn2
diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp
index 31b23defd..94a8c9a56 100644
--- a/src/slic3r/Utils/Http.cpp
+++ b/src/slic3r/Utils/Http.cpp
@@ -448,6 +448,15 @@ Http& Http::auth_digest(const std::string &user, const std::string &password)
 	return *this;
 }
 
+Http& Http::auth_basic(const std::string &user, const std::string &password)
+{
+    curl_easy_setopt(p->curl, CURLOPT_USERNAME, user.c_str());
+    curl_easy_setopt(p->curl, CURLOPT_PASSWORD, password.c_str());
+    curl_easy_setopt(p->curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
+
+    return *this;
+}
+
 Http& Http::ca_file(const std::string &name)
 {
 	if (p && priv::ca_file_supported(p->curl)) {
diff --git a/src/slic3r/Utils/Http.hpp b/src/slic3r/Utils/Http.hpp
index b629fb328..f34a27fbc 100644
--- a/src/slic3r/Utils/Http.hpp
+++ b/src/slic3r/Utils/Http.hpp
@@ -67,6 +67,8 @@ public:
 	Http& remove_header(std::string name);
 	// Authorization by HTTP digest, based on RFC2617.
 	Http& auth_digest(const std::string &user, const std::string &password);
+    // Basic HTTP authorization
+    Http& auth_basic(const std::string &user, const std::string &password);
 	// Sets a CA certificate file for usage with HTTPS. This is only supported on some backends,
 	// specifically, this is supported with OpenSSL and NOT supported with Windows and OS X native certificate store.
 	// See also ca_file_supported().
diff --git a/tests/slic3rutils/slic3rutils_tests_main.cpp b/tests/slic3rutils/slic3rutils_tests_main.cpp
index b82114976..06989c5ee 100644
--- a/tests/slic3rutils/slic3rutils_tests_main.cpp
+++ b/tests/slic3rutils/slic3rutils_tests_main.cpp
@@ -2,7 +2,7 @@
 
 #include "slic3r/Utils/Http.hpp"
 
-TEST_CASE("Http", "[Http][NotWorking]") {
+TEST_CASE("Check SSL certificates paths", "[Http][NotWorking]") {
     
     Slic3r::Http g = Slic3r::Http::get("https://github.com/");
     
@@ -20,3 +20,41 @@ TEST_CASE("Http", "[Http][NotWorking]") {
     REQUIRE(status == 200);
 }
 
+TEST_CASE("Http digest authentication", "[Http][NotWorking]") {
+    Slic3r::Http g = Slic3r::Http::get("https://jigsaw.w3.org/HTTP/Digest/");
+
+    g.auth_digest("guest", "guest");
+
+    unsigned status = 0;
+    g.on_error([&status](std::string, std::string, unsigned http_status) {
+        status = http_status;
+    });
+
+    g.on_complete([&status](std::string /* body */, unsigned http_status){
+        status = http_status;
+    });
+
+    g.perform_sync();
+
+    REQUIRE(status == 200);
+}
+
+TEST_CASE("Http basic authentication", "[Http][NotWorking]") {
+    Slic3r::Http g = Slic3r::Http::get("https://jigsaw.w3.org/HTTP/Basic/");
+
+    g.auth_basic("guest", "guest");
+
+    unsigned status = 0;
+    g.on_error([&status](std::string, std::string, unsigned http_status) {
+        status = http_status;
+    });
+
+    g.on_complete([&status](std::string /* body */, unsigned http_status){
+        status = http_status;
+    });
+
+    g.perform_sync();
+
+    REQUIRE(status == 200);
+}
+

From e5b3af0e533eaffa575820e57cfda10d597b9666 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Wed, 25 Nov 2020 14:44:07 +0100
Subject: [PATCH 111/138] =?UTF-8?q?Fix=20of=20Monotonic=20infill=20leaves?=
 =?UTF-8?q?=20gaps=20in=20top=20infill=20where=20rectilinear=20does=20not?=
 =?UTF-8?q?=20#5259=20and=20Chyba=20nebo=20vlastnost=20v=C3=BDpln=C4=9B=20?=
 =?UTF-8?q?Monotonic=3F=20#5225?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/libslic3r/Fill/FillBase.cpp        |   8 +-
 src/libslic3r/Fill/FillRectilinear.cpp | 111 ++++++++++++++++++++-----
 2 files changed, 94 insertions(+), 25 deletions(-)

diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 370b2f85a..cd2c1178b 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -910,12 +910,16 @@ void mark_boundary_segments_touching_infill(
                     const std::vector<float> &contour_parameters = boundary_parameters[it_contour_and_segment->first];
                     const float contour_length = contour_parameters.back();
 					const float param_seg_pt1  = contour_parameters[it_contour_and_segment->second];
+                    const float param_seg_pt2  = contour_parameters[it_contour_and_segment->second + 1];
 #ifdef INFILL_DEBUG_OUTPUT
                     this->perimeter_overlaps.push_back({ Point((seg_pt1 + (seg_pt2 - seg_pt1).normalized() * interval.first).cast<coord_t>()),
                                                          Point((seg_pt1 + (seg_pt2 - seg_pt1).normalized() * interval.second).cast<coord_t>()) });
 #endif // INFILL_DEBUG_OUTPUT
-                    const float param_overlap1 = param_seg_pt1 + interval.first;
-                    const float param_overlap2 = param_seg_pt1 + interval.second;
+                    assert(interval.first >= 0.);
+                    assert(interval.second >= 0.);
+                    assert(interval.first <= interval.second);
+                    const auto param_overlap1 = std::min(param_seg_pt2, float(param_seg_pt1 + interval.first));
+                    const auto param_overlap2 = std::min(param_seg_pt2, float(param_seg_pt1 + interval.second));
                     // 2) Find the ContourIntersectionPoints before param_overlap1 and after param_overlap2.
                     // Find the span of ContourIntersectionPoints, that is trimmed by the interval (param_overlap1, param_overlap2).
                     ContourIntersectionPoint *ip_low, *ip_high;
diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp
index 0a75b6729..e3860af46 100644
--- a/src/libslic3r/Fill/FillRectilinear.cpp
+++ b/src/libslic3r/Fill/FillRectilinear.cpp
@@ -19,6 +19,7 @@
 #include "FillRectilinear.hpp"
 
 // #define SLIC3R_DEBUG
+// #define INFILL_DEBUG_OUTPUT
 
 // Make assert active if SLIC3R_DEBUG
 #ifdef SLIC3R_DEBUG
@@ -26,6 +27,10 @@
     #include "SVG.hpp"
 #endif
 
+#if defined(SLIC3R_DEBUG) || defined(INFILL_DEBUG_OUTPUT)
+    #include "SVG.hpp"
+#endif
+
 #include <cassert>
 
 // We want our version of assert.
@@ -1870,6 +1875,60 @@ static std::vector<MonotonicRegion> generate_montonous_regions(std::vector<Segme
     return monotonic_regions;
 }
 
+#ifdef INFILL_DEBUG_OUTPUT
+static void export_monotonous_regions_to_svg(
+    const ExPolygonWithOffset                       &poly_with_offset,
+    const std::vector<SegmentedIntersectionLine>    &segs,
+    const std::vector<MonotonicRegion>              &monotonic_regions,
+    const std::string                               &path)
+{
+    BoundingBox bbox = get_extents(poly_with_offset.polygons_src);
+    bbox.offset(scale_(3.));
+
+    ::Slic3r::SVG svg(path, bbox);
+    svg.draw(poly_with_offset.polygons_src);
+    svg.draw_outline(poly_with_offset.polygons_src, "green");
+    svg.draw_outline(poly_with_offset.polygons_outer, "green");
+    svg.draw_outline(poly_with_offset.polygons_inner, "green");
+
+    // Draw the infill line candidates in red.
+    for (const SegmentedIntersectionLine &sil : segs) {
+        for (size_t i = 0; i + 1 < sil.intersections.size(); ++ i)
+            if (sil.intersections[i].type == SegmentIntersection::INNER_LOW && sil.intersections[i + 1].type == SegmentIntersection::INNER_HIGH) {
+                Line l(Point(sil.pos, sil.intersections[i].pos()), Point(sil.pos, sil.intersections[i + 1].pos()));
+                svg.draw(l, "blue");
+            } else if (sil.intersections[i].type == SegmentIntersection::INNER_HIGH && sil.intersections[i].has_vertical_up()) {
+                std::string color;
+                const SegmentIntersection *it = &sil.intersections[i];
+                switch (it->vertical_up_quality()) {
+                case SegmentIntersection::LinkQuality::Invalid:     color = "red"; break;
+                case SegmentIntersection::LinkQuality::Valid:       color = "blue"; break;
+                case SegmentIntersection::LinkQuality::TooLong:
+                default:                                            color = "yellow"; break;
+                }
+                Polyline polyline;
+                polyline.points.push_back({ sil.pos, it->pos() });
+                emit_perimeter_segment_on_vertical_line(poly_with_offset, segs, &sil - segs.data() , it->iContour, it - sil.intersections.data(), it->vertical_up(), polyline, it->has_left_vertical_up());
+                svg.draw(polyline, color, scale_(0.05));
+            }
+    }
+
+    // Draw the monotonic regions.
+    for (const MonotonicRegion &region : monotonic_regions) {
+        auto draw_boundary_line = [&poly_with_offset, &segs, &svg](const MonotonicRegion::Boundary &boundary) {
+            const SegmentedIntersectionLine &sil = segs[boundary.vline];
+            for (size_t i = boundary.low; i < boundary.high; ++ i)
+                if (sil.intersections[i].type == SegmentIntersection::INNER_LOW && sil.intersections[i + 1].type == SegmentIntersection::INNER_HIGH) {
+                    Line l(Point(sil.pos, sil.intersections[i].pos()), Point(sil.pos, sil.intersections[i + 1].pos()));
+                    svg.draw(l, "red", scale_(0.05));
+                }
+        };
+        draw_boundary_line(region.left);
+        draw_boundary_line(region.right);
+    }
+}
+#endif // INFILL_DEBUG_OUTPUT
+
 // Traverse path, calculate length of the draw for the purpose of optimization.
 // This function is very similar to polylines_from_paths() in the way how it traverses the path, but
 // polylines_from_paths() emits a path, while this function just calculates the path length.
@@ -1928,14 +1987,22 @@ static float montonous_region_path_length(const MonotonicRegion &region, bool di
         	break;
 
         int inext = it->right_horizontal();
-        if (inext != -1 && it->next_on_contour_quality == SegmentIntersection::LinkQuality::Valid) {
+        assert(iright != -1);
+        assert(inext == -1 || inext == iright);
+
+        // Find the end of the next overlapping vertical segment.
+        const SegmentedIntersectionLine &vline_right = segs[i_vline + 1];
+        const SegmentIntersection       *right       = going_up ? 
+            &vertical_run_top(vline_right, vline_right.intersections[iright]) : &vertical_run_bottom(vline_right, vline_right.intersections[iright]);
+        i_intersection = int(right - vline_right.intersections.data());
+
+        if (inext == i_intersection && it->next_on_contour_quality == SegmentIntersection::LinkQuality::Valid) {
         	// Summarize length of the connection line along the perimeter.
         	//FIXME should it be weighted with a lower weight than non-extruding connection line? What weight?
         	// Taking half of the length.
     		total_length += 0.5f * float(measure_perimeter_horizontal_segment_length(poly_with_offset, segs, i_vline, it - vline.intersections.data(), inext));
 			// Don't add distance to the next vertical line start to the total length.
-			no_perimeter   = false;
-            i_intersection = inext;
+			no_perimeter = false;
         } else {
 	        // Finish the current vertical line,
         	going_up ? ++ it : -- it;
@@ -1945,14 +2012,6 @@ static float montonous_region_path_length(const MonotonicRegion &region, bool di
 			last_point = Vec2f(vline.pos, it->pos());
 			// Remember to add distance to the last point.
 			no_perimeter = true;
-			if (inext == -1) {
-				// Find the end of the next overlapping vertical segment.
-		        const SegmentedIntersectionLine &vline_right = segs[i_vline + 1];
-                const SegmentIntersection       *right       = going_up ? 
-                    &vertical_run_top(vline_right, vline_right.intersections[iright]) : &vertical_run_bottom(vline_right, vline_right.intersections[iright]);
-				i_intersection = int(right - vline_right.intersections.data());
-			} else
-	            i_intersection = inext;
         }
 
         ++ i_vline;
@@ -2493,7 +2552,7 @@ static void polylines_from_paths(const std::vector<MonotonicRegionLink> &path, c
 
 	for (const MonotonicRegionLink &path_segment : path) {
 		MonotonicRegion &region = *path_segment.region;
-		bool 			  dir    = path_segment.flipped;
+		bool 		     dir    = path_segment.flipped;
 
         // From the initial point (i_vline, i_intersection), follow a path.
 		int  i_intersection = region.left_intersection_point(dir);
@@ -2579,11 +2638,19 @@ static void polylines_from_paths(const std::vector<MonotonicRegionLink> &path, c
 	        if (i_vline == region.right.vline)
 	        	break;
 
-	        int inext = it->right_horizontal();
-	        if (inext != -1 && it->next_on_contour_quality == SegmentIntersection::LinkQuality::Valid) {
+            int inext = it->right_horizontal();
+            assert(iright != -1);
+            assert(inext == -1 || inext == iright);
+
+            // Find the end of the next overlapping vertical segment.
+            const SegmentedIntersectionLine &vline_right = segs[i_vline + 1];
+            const SegmentIntersection       *right       = going_up ? 
+                &vertical_run_top(vline_right, vline_right.intersections[iright]) : &vertical_run_bottom(vline_right, vline_right.intersections[iright]);
+            i_intersection = int(right - vline_right.intersections.data());
+
+	        if (inext == i_intersection && it->next_on_contour_quality == SegmentIntersection::LinkQuality::Valid) {
 	        	// Emit a horizontal connection contour.
 	            emit_perimeter_prev_next_segment(poly_with_offset, segs, i_vline, it->iContour, it - vline.intersections.data(), inext, *polyline, true);
-	            i_intersection = inext;
 	        } else {
 		        // Finish the current vertical line,
 	        	going_up ? ++ it : -- it;
@@ -2591,14 +2658,6 @@ static void polylines_from_paths(const std::vector<MonotonicRegionLink> &path, c
 		        assert(it->is_high() == going_up);
 	        	polyline->points.back() = Point(vline.pos, it->pos());
 				finish_polyline();
-				if (inext == -1) {
-					// Find the end of the next overlapping vertical segment.
-			        const SegmentedIntersectionLine &vline_right = segs[i_vline + 1];
-                    const SegmentIntersection       *right       = going_up ? 
-                        &vertical_run_top(vline_right, vline_right.intersections[iright]) : &vertical_run_bottom(vline_right, vline_right.intersections[iright]);
-					i_intersection = int(right - vline_right.intersections.data());
-				} else
-		            i_intersection = inext;
 	        }
 
 	        ++ i_vline;
@@ -2717,6 +2776,12 @@ bool FillRectilinear::fill_surface_by_lines(const Surface *surface, const FillPa
         // Insert phony OUTER_HIGH / OUTER_LOW pairs at the position where the contour is pinched.
         pinch_contours_insert_phony_outer_intersections(segs);
 		std::vector<MonotonicRegion> regions = generate_montonous_regions(segs);
+#ifdef INFILL_DEBUG_OUTPUT
+        {
+            static int iRun;
+            export_monotonous_regions_to_svg(poly_with_offset, segs, regions, debug_out_path("%s-%03d.svg", "MontonousRegions-initial", iRun ++));
+        }
+#endif // INFILL_DEBUG_OUTPUT
 		connect_monotonic_regions(regions, poly_with_offset, segs);
         if (! regions.empty()) {
 		    std::mt19937_64 rng;

From 3e54c0b775f94e6f8da79798a6545f38db871ec2 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Wed, 25 Nov 2020 14:55:39 +0100
Subject: [PATCH 112/138] Gyroid infill: Lowered the threshold to drop infill
 line segments.

---
 src/libslic3r/Fill/FillGyroid.cpp | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index 5cbfed57c..5797c47a5 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -182,12 +182,14 @@ void FillGyroid::_fill_surface_single(
 
 	polylines = intersection_pl(polylines, to_polygons(expolygon));
 
-    if (! polylines.empty())
-		// remove too small bits (larger than longer)
+    if (! polylines.empty()) {
+		// Remove very small bits, but be careful to not remove infill lines connecting thin walls!
+        // The infill perimeter lines should be separated by around a single infill line width.
+        const double minlength = scale_(0.8 * this->spacing);
 		polylines.erase(
-			//FIXME what is the small size? Removing tiny extrusions disconnects walls!
-			std::remove_if(polylines.begin(), polylines.end(), [this](const Polyline &pl) { return pl.length() < scale_(this->spacing * 3); }),
+			std::remove_if(polylines.begin(), polylines.end(), [minlength](const Polyline &pl) { return pl.length() < minlength; }),
 			polylines.end());
+    }
 
 	if (! polylines.empty()) {
 		// connect lines

From 9305535039e1b411f777b745265d6f1d100ea95f Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Wed, 25 Nov 2020 19:18:44 +0100
Subject: [PATCH 113/138] OSX and Linux specific: Fixed preset selection

---
 src/slic3r/GUI/Field.cpp            | 18 +++++++++++++-----
 src/slic3r/GUI/PresetComboBoxes.cpp | 11 ++++++++++-
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index a0176ad4a..67bd1c455 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -861,9 +861,15 @@ void Choice::BUILD() {
     temp->SetItemBitmap(0, empty_bmp);
 #endif
 
-// 	temp->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId());
     temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true;  });
-    temp->Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent&) { m_is_dropped = false; });
+    temp->Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent& evt) {
+		// EVT_COMBOBOX_CLOSEUP is called after EVT_COMBOBOX on Windows
+		// so, always set m_suppress_change to "true"
+#ifndef __WXMSW__ 
+		if (m_last_selected == evt.GetSelection())
+#endif //__WXMSW__
+            m_is_dropped = false;
+    });
 
     temp->Bind(wxEVT_COMBOBOX, ([this, temp](wxCommandEvent evt) {
         if (m_suppress_scroll) {
@@ -874,6 +880,7 @@ void Choice::BUILD() {
             m_last_selected = evt.GetSelection();
         }
         on_change_field();
+        m_is_dropped = false;
     }), temp->GetId());
 
     if (m_is_editable) {
@@ -998,13 +1005,14 @@ void Choice::set_value(const boost::any& value, bool change_event)
 		else
 			text_value = boost::any_cast<wxString>(value);
         size_t idx = 0;
-		for (auto el : m_opt.enum_values)
+        const std::vector<std::string>& enums = m_opt.enum_values.empty() ? m_opt.enum_labels : m_opt.enum_values;
+		for (auto el : enums)
 		{
 			if (el == text_value)
 				break;
 			++idx;
 		}
-        if (idx == m_opt.enum_values.size()) {
+        if (idx == enums.size()) {
             // For editable Combobox under OSX is needed to set selection to -1 explicitly,
             // otherwise selection doesn't be changed
             field->SetSelection(-1);
@@ -1012,7 +1020,7 @@ void Choice::set_value(const boost::any& value, bool change_event)
         }
         else
 			field->SetSelection(idx);
-		if (m_suppress_scroll && idx < m_opt.enum_values.size()) m_last_selected = idx;
+		if (m_suppress_scroll && idx < enums.size()) m_last_selected = idx;
 		break;
 	}
 	case coEnum: {
diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp
index 78559b937..c60c84bad 100644
--- a/src/slic3r/GUI/PresetComboBoxes.cpp
+++ b/src/slic3r/GUI/PresetComboBoxes.cpp
@@ -104,7 +104,14 @@ PresetComboBox::PresetComboBox(wxWindow* parent, Preset::Type preset_type, const
     // parameters for an icon's drawing
     fill_width_height();
     Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent& evt) { m_suppress_change = false; });
-    Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent& evt) { m_suppress_change = true ; });
+    Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent& evt) {
+        // EVT_COMBOBOX_CLOSEUP is called after EVT_COMBOBOX on Windows
+        // so, always set m_suppress_change to "true"
+#ifndef __WXMSW__ 
+        if (m_last_selected == evt.GetSelection())
+#endif //__WXMSW__
+            m_suppress_change = true;
+    });
 
     Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) {
         // see https://github.com/prusa3d/PrusaSlicer/issues/3889
@@ -572,6 +579,7 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset
         } else {
             evt.StopPropagation();
         }
+        m_suppress_change = true;
     });
 
     if (m_type == Preset::TYPE_FILAMENT)
@@ -911,6 +919,7 @@ TabPresetComboBox::TabPresetComboBox(wxWindow* parent, Preset::Type preset_type)
         }
 
         evt.StopPropagation();
+        m_suppress_change = true;
     });
 }
 

From 275bc52fdf890756c9b19bf71090dfbf2ab699a2 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Wed, 25 Nov 2020 20:11:53 +0100
Subject: [PATCH 114/138] Suppress scroll for SLA support and pad settings on
 the right panel

---
 src/slic3r/GUI/Plater.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 11c2448b7..05a30584a 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -513,6 +513,10 @@ FreqChangedParams::FreqChangedParams(wxWindow* parent) :
     m_og_sla->append_line(line);
 
     m_og_sla->activate();
+    choice = dynamic_cast<Choice*>(m_og_sla->get_field("support"));
+    choice->suppress_scroll();
+    choice = dynamic_cast<Choice*>(m_og_sla->get_field("pad"));
+    choice->suppress_scroll();
 
     m_sizer = new wxBoxSizer(wxVERTICAL);
     m_sizer->Add(m_og->sizer, 0, wxEXPAND);

From 32c60b070ece10da07a9ed951067a4b81abb9e85 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Wed, 25 Nov 2020 21:18:51 +0100
Subject: [PATCH 115/138] Hot fix for
 https://github.com/prusa3d/PrusaSlicer/commit/9305535039e1b411f777b745265d6f1d100ea95f

---
 src/slic3r/GUI/Field.cpp            | 4 ++--
 src/slic3r/GUI/PresetComboBoxes.cpp | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 67bd1c455..7c7838afa 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -862,11 +862,11 @@ void Choice::BUILD() {
 #endif
 
     temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true;  });
-    temp->Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent& evt) {
+    temp->Bind(wxEVT_COMBOBOX_CLOSEUP,  [this, temp](wxCommandEvent&) {
 		// EVT_COMBOBOX_CLOSEUP is called after EVT_COMBOBOX on Windows
 		// so, always set m_suppress_change to "true"
 #ifndef __WXMSW__ 
-		if (m_last_selected == evt.GetSelection())
+		if (m_last_selected == temp->GetSelection())
 #endif //__WXMSW__
             m_is_dropped = false;
     });
diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp
index c60c84bad..1fbded377 100644
--- a/src/slic3r/GUI/PresetComboBoxes.cpp
+++ b/src/slic3r/GUI/PresetComboBoxes.cpp
@@ -103,12 +103,12 @@ PresetComboBox::PresetComboBox(wxWindow* parent, Preset::Type preset_type, const
 
     // parameters for an icon's drawing
     fill_width_height();
-    Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent& evt) { m_suppress_change = false; });
-    Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent& evt) {
+    Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_suppress_change = false; });
+    Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent&) {
         // EVT_COMBOBOX_CLOSEUP is called after EVT_COMBOBOX on Windows
         // so, always set m_suppress_change to "true"
 #ifndef __WXMSW__ 
-        if (m_last_selected == evt.GetSelection())
+        if (m_last_selected == this->GetSelection())
 #endif //__WXMSW__
             m_suppress_change = true;
     });

From 9bb0848d27d5a5fb714b7ad116001c304f9d4830 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Wed, 25 Nov 2020 22:45:24 +0100
Subject: [PATCH 116/138] PhysicalPrinterDialog: Fixed editing of the SLA
 physical printers

Bug repro:
1. Create sla physical printer.
2. Close dialog.
3. Open dialog to edit printer -> in preset combobox is selected fff printer preset
---
 src/slic3r/GUI/PhysicalPrinterDialog.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp
index b9096ce10..a82161055 100644
--- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp
+++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp
@@ -189,10 +189,10 @@ PhysicalPrinterDialog::PhysicalPrinterDialog(wxWindow* parent, wxString printer_
     }
     else
     {
+        m_printer = *printer;
         const std::set<std::string>& preset_names = printer->get_preset_names();
         for (const std::string& preset_name : preset_names)
             m_presets.emplace_back(new PresetForPrinter(this, preset_name));
-        m_printer = *printer;
     }
 
     if (m_presets.size() == 1)

From 4d483f323f732ceccf6e581e160b962aa49d09f5 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Thu, 26 Nov 2020 08:43:04 +0100
Subject: [PATCH 117/138] GCode Viewer -> Show extimated layer time on the
 vertical slider for gcode produced by PrusaSlicer 2.3.0, Cura, Simplify3D,
 CraftWare, ideaMaker

---
 src/libslic3r/GCode/GCodeProcessor.cpp | 49 +++++++++++++++++++++++---
 src/slic3r/GUI/DoubleSlider.cpp        |  2 +-
 2 files changed, 45 insertions(+), 6 deletions(-)

diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index d30ec70b5..65f0859ae 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -403,7 +403,13 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename)
         // remove trailing '\n'
         assert(! gcode_line.empty());
         assert(gcode_line.back() == '\n');
-        return gcode_line.substr(0, gcode_line.length() - 1) == ";" + Layer_Change_Tag;
+
+        // return true for decorations which are used in processing the gcode but that should not be exported into the final gcode
+        // i.e.:
+        // bool ret = gcode_line.substr(0, gcode_line.length() - 1) == ";" + Layer_Change_Tag;
+        // ...
+        // return ret;
+        return false;
     };
 
     // Iterators for the normal and silent cached time estimate entry recently processed, used by process_line_G1.
@@ -1211,6 +1217,14 @@ bool GCodeProcessor::process_cura_tags(const std::string_view comment)
         return true;
     }
 
+    // layer
+    tag = "LAYER:";
+    pos = comment.find(tag);
+    if (pos != comment.npos) {
+        ++m_layer_id;
+        return true;
+    }
+
     return false;
 }
 
@@ -1295,9 +1309,8 @@ bool GCodeProcessor::process_simplify3d_tags(const std::string_view comment)
         return true;
     }
 
-#if ENABLE_GCODE_VIEWER_DATA_CHECKING
     // geometry
-
+#if ENABLE_GCODE_VIEWER_DATA_CHECKING
     // ; tool
     std::string tag = " tool";
     pos = comment.find(tag);
@@ -1322,6 +1335,19 @@ bool GCodeProcessor::process_simplify3d_tags(const std::string_view comment)
     }
 #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
 
+    // ; layer
+    std::string tag = " layer";
+    pos = comment.find(tag);
+    if (pos == 0) {
+        // skip lines "; layer end"
+        const std::string_view data = comment.substr(pos + tag.length());
+        size_t end_start = data.find("end");
+        if (end_start == data.npos)
+            ++m_layer_id;
+
+        return true;
+    }
+
     return false;
 }
 
@@ -1362,6 +1388,13 @@ bool GCodeProcessor::process_craftware_tags(const std::string_view comment)
         return true;
     }
 
+    // layer
+    pos = comment.find(" Layer #");
+    if (pos == 0) {
+        ++m_layer_id;
+        return true;
+    }
+
     return false;
 }
 
@@ -1393,9 +1426,8 @@ bool GCodeProcessor::process_ideamaker_tags(const std::string_view comment)
         return true;
     }
 
-#if ENABLE_GCODE_VIEWER_DATA_CHECKING
     // geometry
-
+#if ENABLE_GCODE_VIEWER_DATA_CHECKING
     // width
     tag = "WIDTH:";
     pos = comment.find(tag);
@@ -1415,6 +1447,13 @@ bool GCodeProcessor::process_ideamaker_tags(const std::string_view comment)
     }
 #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
 
+    // layer
+    pos = comment.find("LAYER:");
+    if (pos == 0) {
+        ++m_layer_id;
+        return true;
+    }
+
     return false;
 }
 
diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index f4838e7b8..3fb47418d 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -629,7 +629,7 @@ wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer
         return wxString::Format("%d", static_cast<unsigned int>(m_values[value]));
     else {
         if (label_type == ltEstimatedTime) {
-            if (m_values.size() != m_layers_times.size())
+            if (value > m_layers_times.size() - 1)
                 return wxEmptyString;
             return short_and_splitted_time(get_time_dhms(m_layers_times[value]));
         }

From aa6ddfec85975d3ad1ba3de64126d4fc535a472d Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Thu, 26 Nov 2020 09:01:27 +0100
Subject: [PATCH 118/138] Added functions to export raw image data to PNG for
 debugging purposes. Renamed PNGRead.cpp/hpp to PNGReadWrite.cpp,hpp EdgeGrid:
 Resurrected debugging output to PNG.

---
 src/libslic3r/CMakeLists.txt                  |   4 +-
 src/libslic3r/EdgeGrid.cpp                    |  93 +++-----
 src/libslic3r/EdgeGrid.hpp                    |   4 +-
 src/libslic3r/Format/SL1.cpp                  |   2 +-
 src/libslic3r/PNGRead.cpp                     | 100 --------
 src/libslic3r/PNGReadWrite.cpp                | 219 ++++++++++++++++++
 .../{PNGRead.hpp => PNGReadWrite.hpp}         |  12 +
 tests/libslic3r/test_png_io.cpp               |   2 +-
 8 files changed, 273 insertions(+), 163 deletions(-)
 delete mode 100644 src/libslic3r/PNGRead.cpp
 create mode 100644 src/libslic3r/PNGReadWrite.cpp
 rename src/libslic3r/{PNGRead.hpp => PNGReadWrite.hpp} (65%)

diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
index 0cf5af93c..c475c6575 100644
--- a/src/libslic3r/CMakeLists.txt
+++ b/src/libslic3r/CMakeLists.txt
@@ -159,8 +159,8 @@ add_library(libslic3r STATIC
     PrintConfig.hpp
     PrintObject.cpp
     PrintRegion.cpp
-    PNGRead.hpp
-    PNGRead.cpp
+    PNGReadWrite.hpp
+    PNGReadWrite.cpp
     Semver.cpp
     ShortestPath.cpp
     ShortestPath.hpp
diff --git a/src/libslic3r/EdgeGrid.cpp b/src/libslic3r/EdgeGrid.cpp
index fa68092ee..e7307fda4 100644
--- a/src/libslic3r/EdgeGrid.cpp
+++ b/src/libslic3r/EdgeGrid.cpp
@@ -3,16 +3,16 @@
 #include <float.h>
 #include <unordered_map>
 
-#if 0
-// #ifdef SLIC3R_GUI
-#include <wx/image.h>
-#endif /* SLIC3R_GUI */
+#include <png.h>
 
 #include "libslic3r.h"
 #include "ClipperUtils.hpp"
 #include "EdgeGrid.hpp"
 #include "Geometry.hpp"
 #include "SVG.hpp"
+#include "PNGReadWrite.hpp"
+
+// #define EDGE_GRID_DEBUG_OUTPUT
 
 #if 0
 // Enable debugging and assert in this file.
@@ -677,6 +677,11 @@ struct PropagateDanielssonSingleVStep3 {
 
 void EdgeGrid::Grid::calculate_sdf()
 {
+#ifdef EDGE_GRID_DEBUG_OUTPUT
+	static int iRun = 0;
+	++ iRun;
+#endif
+
 	// 1) Initialize a signum and an unsigned vector to a zero iso surface.
 	size_t nrows = m_rows + 1;
 	size_t ncols = m_cols + 1;
@@ -774,19 +779,12 @@ void EdgeGrid::Grid::calculate_sdf()
 		}
 	}
 
-#if 0
-	static int iRun = 0;
-	++ iRun;
-    if (wxImage::FindHandler(wxBITMAP_TYPE_PNG) == nullptr)
-        wxImage::AddHandler(new wxPNGHandler);
-//#ifdef SLIC3R_GUI
+#ifdef EDGE_GRID_DEBUG_OUTPUT
 	{ 
-		wxImage img(ncols, nrows);
-		unsigned char *data = img.GetData();
-		memset(data, 0, ncols * nrows * 3);
-		for (coord_t r = 0; r < nrows; ++r) {
-			for (coord_t c = 0; c < ncols; ++c) {
-				unsigned char *pxl = data + (((nrows - r - 1) * ncols) + c) * 3;
+		std::vector<uint8_t> pixels(ncols * nrows * 3, 0);
+		for (coord_t r = 0; r < nrows; ++ r) {
+			for (coord_t c = 0; c < ncols; ++ c) {
+				uint8_t *pxl = pixels.data() + (((nrows - r - 1) * ncols) + c) * 3;
 				float d = m_signed_distance_field[r * ncols + c];
 				if (d != search_radius) {
 					float s = 255 * d / search_radius;
@@ -802,15 +800,13 @@ void EdgeGrid::Grid::calculate_sdf()
 				}
 			}
 		}
-		img.SaveFile(debug_out_path("unsigned_df-%d.png", iRun), wxBITMAP_TYPE_PNG);
+		png::write_rgb_to_file_scaled(debug_out_path("unsigned_df-%d.png", iRun), ncols, nrows, pixels, 10);
 	}
 	{
-		wxImage img(ncols, nrows);
-		unsigned char *data = img.GetData();
-		memset(data, 0, ncols * nrows * 3);
-		for (coord_t r = 0; r < nrows; ++r) {
-			for (coord_t c = 0; c < ncols; ++c) {
-				unsigned char *pxl = data + (((nrows - r - 1) * ncols) + c) * 3;
+		std::vector<uint8_t> pixels(ncols * nrows * 3, 0);
+		for (coord_t r = 0; r < nrows; ++ r) {
+			for (coord_t c = 0; c < ncols; ++ c) {
+				unsigned char *pxl = pixels.data() + (((nrows - r - 1) * ncols) + c) * 3;
 				float d = m_signed_distance_field[r * ncols + c];
 				if (d != search_radius) {
 					float s = 255 * d / search_radius;
@@ -835,9 +831,9 @@ void EdgeGrid::Grid::calculate_sdf()
 				}
 			}
 		}
-		img.SaveFile(debug_out_path("signed_df-%d.png", iRun), wxBITMAP_TYPE_PNG);
+		png::write_rgb_to_file_scaled(debug_out_path("signed_df-%d.png", iRun), ncols, nrows, pixels, 10);
 	}
-#endif /* SLIC3R_GUI */
+#endif // EDGE_GRID_DEBUG_OUTPUT
 
 	// 2) Propagate the signum.
 	#define PROPAGATE_SIGNUM_SINGLE_STEP(DELTA) do { \
@@ -909,17 +905,14 @@ void EdgeGrid::Grid::calculate_sdf()
 		}
 	}
 
-#if 0
-//#ifdef SLIC3R_GUI
+#ifdef EDGE_GRID_DEBUG_OUTPUT
 	{
-		wxImage img(ncols, nrows);
-		unsigned char *data = img.GetData();
-		memset(data, 0, ncols * nrows * 3);
+		std::vector<uint8_t> pixels(ncols * nrows * 3, 0);
 		float search_radius = float(m_resolution * 5);
 		for (coord_t r = 0; r < nrows; ++r) {
 			for (coord_t c = 0; c < ncols; ++c) {
-				unsigned char *pxl = data + (((nrows - r - 1) * ncols) + c) * 3;
-				unsigned char sign = signs[r * ncols + c];
+				uint8_t *pxl = pixels.data() + (((nrows - r - 1) * ncols) + c) * 3;
+				uint8_t sign = signs[r * ncols + c];
 				switch (sign) {
 				case 0:
 					// Positive, outside of a narrow band.
@@ -960,20 +953,17 @@ void EdgeGrid::Grid::calculate_sdf()
 				}
 			}
 		}
-		img.SaveFile(debug_out_path("signed_df-signs-%d.png", iRun), wxBITMAP_TYPE_PNG);
+		png::write_rgb_to_file_scaled(debug_out_path("signed_df-signs-%d.png", iRun), ncols, nrows, pixels, 10);
 	}
-#endif /* SLIC3R_GUI */
+#endif // EDGE_GRID_DEBUG_OUTPUT
 
-#if 0
-//#ifdef SLIC3R_GUI
+#ifdef EDGE_GRID_DEBUG_OUTPUT
 	{
-		wxImage img(ncols, nrows);
-		unsigned char *data = img.GetData();
-		memset(data, 0, ncols * nrows * 3);
+		std::vector<uint8_t> pixels(ncols * nrows * 3, 0);
 		float search_radius = float(m_resolution * 5);
 		for (coord_t r = 0; r < nrows; ++r) {
 			for (coord_t c = 0; c < ncols; ++c) {
-				unsigned char *pxl = data + (((nrows - r - 1) * ncols) + c) * 3;
+				uint8_t *pxl = pixels.data() + (((nrows - r - 1) * ncols) + c) * 3;
 				float d = m_signed_distance_field[r * ncols + c];
 				float s = 255.f * fabs(d) / search_radius;
 				int is = std::max(0, std::min(255, int(floor(s + 0.5f))));
@@ -989,9 +979,9 @@ void EdgeGrid::Grid::calculate_sdf()
 				}
 			}
 		}
-		img.SaveFile(debug_out_path("signed_df2-%d.png", iRun), wxBITMAP_TYPE_PNG);
+		png::write_rgb_to_file_scaled(debug_out_path("signed_df2-%d.png", iRun), ncols, nrows, pixels, 10);
 	}
-#endif /* SLIC3R_GUI */
+#endif // EDGE_GRID_DEBUG_OUTPUT
 }
 
 float EdgeGrid::Grid::signed_distance_bilinear(const Point &pt) const
@@ -1491,26 +1481,18 @@ bool EdgeGrid::Grid::has_intersecting_edges() const
 	return false;
 }
 
-#if 0
-void EdgeGrid::save_png(const EdgeGrid::Grid &grid, const BoundingBox &bbox, coord_t resolution, const char *path)
+void EdgeGrid::save_png(const EdgeGrid::Grid &grid, const BoundingBox &bbox, coord_t resolution, const char *path, size_t scale)
 {
-    if (wxImage::FindHandler(wxBITMAP_TYPE_PNG) == nullptr)
-        wxImage::AddHandler(new wxPNGHandler);
-
 	unsigned int w = (bbox.max(0) - bbox.min(0) + resolution - 1) / resolution;
 	unsigned int h = (bbox.max(1) - bbox.min(1) + resolution - 1) / resolution;
-	wxImage img(w, h);
-    unsigned char *data = img.GetData();
-    memset(data, 0, w * h * 3);
 
-	static int iRun = 0;
-	++iRun;
-    
+	std::vector<uint8_t> pixels(w * h * 3, 0);
+
     const coord_t search_radius = grid.resolution() * 2;
 	const coord_t display_blend_radius = grid.resolution() * 2;
 	for (coord_t r = 0; r < h; ++r) {
     	for (coord_t c = 0; c < w; ++ c) {
-			unsigned char *pxl = data + (((h - r - 1) * w) + c) * 3;
+			unsigned char *pxl = pixels.data() + (((h - r - 1) * w) + c) * 3;
 			Point pt(c * resolution + bbox.min(0), r * resolution + bbox.min(1));
 			coordf_t min_dist;
 			bool on_segment = true;
@@ -1584,9 +1566,8 @@ void EdgeGrid::save_png(const EdgeGrid::Grid &grid, const BoundingBox &bbox, coo
 		}
     }
 
-    img.SaveFile(path, wxBITMAP_TYPE_PNG);
+	png::write_rgb_to_file_scaled(path, w, h, pixels, scale);
 }
-#endif /* SLIC3R_GUI */
 
 // Find all pairs of intersectiong edges from the set of polygons.
 std::vector<std::pair<EdgeGrid::Grid::ContourEdge, EdgeGrid::Grid::ContourEdge>> intersecting_edges(const Polygons &polygons)
diff --git a/src/libslic3r/EdgeGrid.hpp b/src/libslic3r/EdgeGrid.hpp
index fd13ddc7f..e8a8d4374 100644
--- a/src/libslic3r/EdgeGrid.hpp
+++ b/src/libslic3r/EdgeGrid.hpp
@@ -309,10 +309,8 @@ protected:
 	std::vector<float>							m_signed_distance_field;
 };
 
-#if 0
 // Debugging utility. Save the signed distance field.
-extern void save_png(const Grid &grid, const BoundingBox &bbox, coord_t resolution, const char *path);
-#endif /* SLIC3R_GUI */
+extern void save_png(const Grid &grid, const BoundingBox &bbox, coord_t resolution, const char *path, size_t scale = 1);
 
 } // namespace EdgeGrid
 
diff --git a/src/libslic3r/Format/SL1.cpp b/src/libslic3r/Format/SL1.cpp
index c4a9f5864..f04855182 100644
--- a/src/libslic3r/Format/SL1.cpp
+++ b/src/libslic3r/Format/SL1.cpp
@@ -18,7 +18,7 @@
 #include "libslic3r/PrintConfig.hpp"
 #include "libslic3r/SLA/RasterBase.hpp"
 #include "libslic3r/miniz_extension.hpp"
-#include "libslic3r/PNGRead.hpp"
+#include "libslic3r/PNGReadWrite.hpp"
 
 #include <boost/property_tree/ini_parser.hpp>
 #include <boost/filesystem/path.hpp>
diff --git a/src/libslic3r/PNGRead.cpp b/src/libslic3r/PNGRead.cpp
deleted file mode 100644
index e66143b84..000000000
--- a/src/libslic3r/PNGRead.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-#include "PNGRead.hpp"
-
-#include <memory>
-
-#include <cstdio>
-#include <png.h>
-
-namespace Slic3r { namespace png {
-
-struct PNGDescr {
-    png_struct *png = nullptr; png_info *info = nullptr;
-
-    PNGDescr() = default;
-    PNGDescr(const PNGDescr&) = delete;
-    PNGDescr(PNGDescr&&) = delete;
-    PNGDescr& operator=(const PNGDescr&) = delete;
-    PNGDescr& operator=(PNGDescr&&) = delete;
-
-    ~PNGDescr()
-    {
-        if (png && info) png_destroy_info_struct(png, &info);
-        if (png) png_destroy_read_struct( &png, nullptr, nullptr);
-    }
-};
-
-bool is_png(const ReadBuf &rb)
-{
-    static const constexpr int PNG_SIG_BYTES = 8;
-
-#if PNG_LIBPNG_VER_MINOR <= 2
-    // Earlier libpng versions had png_sig_cmp(png_bytep, ...) which is not
-    // a const pointer. It is not possible to cast away the const qualifier from
-    // the input buffer so... yes... life is challenging...
-    png_byte buf[PNG_SIG_BYTES];
-    auto inbuf = static_cast<const std::uint8_t *>(rb.buf);
-    std::copy(inbuf, inbuf + PNG_SIG_BYTES, buf);
-#else
-    auto buf = static_cast<png_const_bytep>(rb.buf);
-#endif
-
-    return rb.sz >= PNG_SIG_BYTES && !png_sig_cmp(buf, 0, PNG_SIG_BYTES);
-}
-
-// Buffer read callback for libpng. It provides an allocated output buffer and
-// the amount of data it desires to read from the input.
-void png_read_callback(png_struct *png_ptr,
-                       png_bytep   outBytes,
-                       png_size_t  byteCountToRead)
-{
-    // Retrieve our input buffer through the png_ptr
-    auto reader = static_cast<IStream *>(png_get_io_ptr(png_ptr));
-
-    if (!reader || !reader->is_ok()) return;
-
-    reader->read(static_cast<std::uint8_t *>(outBytes), byteCountToRead);
-}
-
-bool decode_png(IStream &in_buf, ImageGreyscale &out_img)
-{
-    static const constexpr int PNG_SIG_BYTES = 8;
-
-    std::vector<png_byte> sig(PNG_SIG_BYTES, 0);
-    in_buf.read(sig.data(), PNG_SIG_BYTES);
-    if (!png_check_sig(sig.data(), PNG_SIG_BYTES))
-        return false;
-
-    PNGDescr dsc;
-    dsc.png = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr,
-                                     nullptr);
-
-    if(!dsc.png) return false;
-
-    dsc.info = png_create_info_struct(dsc.png);
-    if(!dsc.info) return false;
-
-    png_set_read_fn(dsc.png, static_cast<void *>(&in_buf), png_read_callback);
-
-    // Tell that we have already read the first bytes to check the signature
-    png_set_sig_bytes(dsc.png, PNG_SIG_BYTES);
-
-    png_read_info(dsc.png, dsc.info);
-
-    out_img.cols = png_get_image_width(dsc.png, dsc.info);
-    out_img.rows = png_get_image_height(dsc.png, dsc.info);
-    size_t color_type = png_get_color_type(dsc.png, dsc.info);
-    size_t bit_depth  = png_get_bit_depth(dsc.png, dsc.info);
-
-    if (color_type != PNG_COLOR_TYPE_GRAY || bit_depth != 8)
-        return false;
-
-    out_img.buf.resize(out_img.rows * out_img.cols);
-
-    auto readbuf = static_cast<png_bytep>(out_img.buf.data());
-    for (size_t r = 0; r < out_img.rows; ++r)
-        png_read_row(dsc.png, readbuf + r * out_img.cols, nullptr);
-
-    return true;
-}
-
-}} // namespace Slic3r::png
diff --git a/src/libslic3r/PNGReadWrite.cpp b/src/libslic3r/PNGReadWrite.cpp
new file mode 100644
index 000000000..2b7f64f6d
--- /dev/null
+++ b/src/libslic3r/PNGReadWrite.cpp
@@ -0,0 +1,219 @@
+#include "PNGReadWrite.hpp"
+
+#include <memory>
+
+#include <cstdio>
+#include <png.h>
+
+#include <boost/log/trivial.hpp>
+#include <boost/nowide/cstdio.hpp>
+
+namespace Slic3r { namespace png {
+
+struct PNGDescr {
+    png_struct *png = nullptr; png_info *info = nullptr;
+
+    PNGDescr() = default;
+    PNGDescr(const PNGDescr&) = delete;
+    PNGDescr(PNGDescr&&) = delete;
+    PNGDescr& operator=(const PNGDescr&) = delete;
+    PNGDescr& operator=(PNGDescr&&) = delete;
+
+    ~PNGDescr()
+    {
+        if (png && info) png_destroy_info_struct(png, &info);
+        if (png) png_destroy_read_struct( &png, nullptr, nullptr);
+    }
+};
+
+bool is_png(const ReadBuf &rb)
+{
+    static const constexpr int PNG_SIG_BYTES = 8;
+
+#if PNG_LIBPNG_VER_MINOR <= 2
+    // Earlier libpng versions had png_sig_cmp(png_bytep, ...) which is not
+    // a const pointer. It is not possible to cast away the const qualifier from
+    // the input buffer so... yes... life is challenging...
+    png_byte buf[PNG_SIG_BYTES];
+    auto inbuf = static_cast<const std::uint8_t *>(rb.buf);
+    std::copy(inbuf, inbuf + PNG_SIG_BYTES, buf);
+#else
+    auto buf = static_cast<png_const_bytep>(rb.buf);
+#endif
+
+    return rb.sz >= PNG_SIG_BYTES && !png_sig_cmp(buf, 0, PNG_SIG_BYTES);
+}
+
+// Buffer read callback for libpng. It provides an allocated output buffer and
+// the amount of data it desires to read from the input.
+static void png_read_callback(png_struct *png_ptr,
+                              png_bytep   outBytes,
+                              png_size_t  byteCountToRead)
+{
+    // Retrieve our input buffer through the png_ptr
+    auto reader = static_cast<IStream *>(png_get_io_ptr(png_ptr));
+
+    if (!reader || !reader->is_ok()) return;
+
+    reader->read(static_cast<std::uint8_t *>(outBytes), byteCountToRead);
+}
+
+bool decode_png(IStream &in_buf, ImageGreyscale &out_img)
+{
+    static const constexpr int PNG_SIG_BYTES = 8;
+
+    std::vector<png_byte> sig(PNG_SIG_BYTES, 0);
+    in_buf.read(sig.data(), PNG_SIG_BYTES);
+    if (!png_check_sig(sig.data(), PNG_SIG_BYTES))
+        return false;
+
+    PNGDescr dsc;
+    dsc.png = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr,
+                                     nullptr);
+
+    if(!dsc.png) return false;
+
+    dsc.info = png_create_info_struct(dsc.png);
+    if(!dsc.info) return false;
+
+    png_set_read_fn(dsc.png, static_cast<void *>(&in_buf), png_read_callback);
+
+    // Tell that we have already read the first bytes to check the signature
+    png_set_sig_bytes(dsc.png, PNG_SIG_BYTES);
+
+    png_read_info(dsc.png, dsc.info);
+
+    out_img.cols = png_get_image_width(dsc.png, dsc.info);
+    out_img.rows = png_get_image_height(dsc.png, dsc.info);
+    size_t color_type = png_get_color_type(dsc.png, dsc.info);
+    size_t bit_depth  = png_get_bit_depth(dsc.png, dsc.info);
+
+    if (color_type != PNG_COLOR_TYPE_GRAY || bit_depth != 8)
+        return false;
+
+    out_img.buf.resize(out_img.rows * out_img.cols);
+
+    auto readbuf = static_cast<png_bytep>(out_img.buf.data());
+    for (size_t r = 0; r < out_img.rows; ++r)
+        png_read_row(dsc.png, readbuf + r * out_img.cols, nullptr);
+
+    return true;
+}
+
+// Down to earth function to store a packed RGB image to file. Mostly useful for debugging purposes.
+// Based on https://www.lemoda.net/c/write-png/
+bool write_rgb_to_file(const char *file_name_utf8, size_t width, size_t height, const uint8_t *data_rgb)
+{
+    bool result = false;
+
+    FILE *fp = boost::nowide::fopen(file_name_utf8, "wb");
+    if (! fp) {
+        BOOST_LOG_TRIVIAL(error) << "write_png_file: File could not be opened for writing: " << file_name_utf8;
+        goto fopen_failed;
+    }
+
+    png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
+    if (! png_ptr) {
+        BOOST_LOG_TRIVIAL(error) << "write_png_file: png_create_write_struct() failed";
+        goto png_create_write_struct_failed;
+    }
+
+    png_infop info_ptr = png_create_info_struct(png_ptr);
+    if (! info_ptr) {
+        BOOST_LOG_TRIVIAL(error) << "write_png_file: png_create_info_struct() failed";
+        goto png_create_info_struct_failed;
+    }
+
+    // Set up error handling.
+    if (setjmp(png_jmpbuf(png_ptr))) {
+        BOOST_LOG_TRIVIAL(error) << "write_png_file: setjmp() failed";
+        goto png_failure;
+    }
+
+    // Set image attributes.
+    png_set_IHDR(png_ptr,
+        info_ptr,
+        png_uint_32(width),
+        png_uint_32(height),
+        8, // depth
+        PNG_COLOR_TYPE_RGB,
+        PNG_INTERLACE_NONE,
+        PNG_COMPRESSION_TYPE_DEFAULT,
+        PNG_FILTER_TYPE_DEFAULT);
+
+    // Initialize rows of PNG.
+    auto row_pointers = reinterpret_cast<png_byte**>(::png_malloc(png_ptr, height * sizeof(png_byte*)));
+    for (size_t y = 0; y < height; ++ y) {
+        auto row = reinterpret_cast<png_byte*>(::png_malloc(png_ptr, sizeof(uint8_t) * width * 3));
+        row_pointers[y] = row;
+        memcpy(row, data_rgb + width * y * 3, sizeof(uint8_t) * width * 3);
+    }
+
+    // Write the image data to "fp".
+    png_init_io(png_ptr, fp);
+    png_set_rows(png_ptr, info_ptr, row_pointers);
+    png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, nullptr);
+
+    for (size_t y = 0; y < height; ++ y)
+        png_free(png_ptr, row_pointers[y]);
+    png_free(png_ptr, row_pointers);
+    result = true;
+
+png_failure:
+png_create_info_struct_failed:
+    ::png_destroy_write_struct(&png_ptr, &info_ptr);
+png_create_write_struct_failed:
+    ::fclose(fp);
+fopen_failed:
+    return result;
+}
+
+bool write_rgb_to_file(const std::string &file_name_utf8, size_t width, size_t height, const uint8_t *data_rgb)
+{
+    return write_rgb_to_file(file_name_utf8.c_str(), width, height, data_rgb);
+}
+
+bool write_rgb_to_file(const std::string &file_name_utf8, size_t width, size_t height, const std::vector<uint8_t> &data_rgb)
+{
+    assert(width * height * 3 == data_rgb.size());
+    return write_rgb_to_file(file_name_utf8.c_str(), width, height, data_rgb.data());
+}
+
+// Scaled variants are mostly useful for debugging purposes, for example to export images of low resolution distance fileds.
+// Scaling is done by multiplying rows and columns without any smoothing to emphasise the original pixels.
+bool write_rgb_to_file_scaled(const char *file_name_utf8, size_t width, size_t height, const uint8_t *data_rgb, size_t scale)
+{
+    if (scale <= 1)
+        return write_rgb_to_file(file_name_utf8, width, height, data_rgb);
+    else {
+        std::vector<uint8_t> scaled(width * height * 3 * scale * scale);
+        uint8_t *dst = scaled.data();
+        for (size_t r = 0; r < height; ++ r) {
+            for (size_t repr = 0; repr < scale; ++ repr) {
+                const uint8_t *row = data_rgb + width * 3 * r;
+                for (size_t c = 0; c < width; ++ c) {
+                    for (size_t repc = 0; repc < scale; ++ repc) {
+                        *dst ++ = row[0];
+                        *dst ++ = row[1];
+                        *dst ++ = row[2];
+                    }
+                    row += 3;
+                }
+            }
+        }
+        return write_rgb_to_file(file_name_utf8, width * scale, height * scale, scaled.data());
+    }
+}
+
+bool write_rgb_to_file_scaled(const std::string &file_name_utf8, size_t width, size_t height, const uint8_t *data_rgb, size_t scale)
+{
+    return write_rgb_to_file_scaled(file_name_utf8.c_str(), width, height, data_rgb, scale);
+}
+
+bool write_rgb_to_file_scaled(const std::string &file_name_utf8, size_t width, size_t height, const std::vector<uint8_t> &data_rgb, size_t scale)
+{
+    assert(width * height * 3 == data_rgb.size());
+    return write_rgb_to_file_scaled(file_name_utf8.c_str(), width, height, data_rgb.data(), scale);
+}
+
+}} // namespace Slic3r::png
diff --git a/src/libslic3r/PNGRead.hpp b/src/libslic3r/PNGReadWrite.hpp
similarity index 65%
rename from src/libslic3r/PNGRead.hpp
rename to src/libslic3r/PNGReadWrite.hpp
index 082edd569..6be8ed555 100644
--- a/src/libslic3r/PNGRead.hpp
+++ b/src/libslic3r/PNGReadWrite.hpp
@@ -65,6 +65,18 @@ template<class Img> bool decode_png(const ReadBuf &in_buf, Img &out_img)
 
 // TODO: std::istream of FILE* could be similarly adapted in case its needed...
 
+
+
+// Down to earth function to store a packed RGB image to file. Mostly useful for debugging purposes.
+bool write_rgb_to_file(const char *file_name_utf8, size_t width, size_t height, const uint8_t *data_rgb);
+bool write_rgb_to_file(const std::string &file_name_utf8, size_t width, size_t height, const uint8_t *data_rgb);
+bool write_rgb_to_file(const std::string &file_name_utf8, size_t width, size_t height, const std::vector<uint8_t> &data_rgb);
+// Scaled variants are mostly useful for debugging purposes, for example to export images of low resolution distance fileds.
+// Scaling is done by multiplying rows and columns without any smoothing to emphasise the original pixels.
+bool write_rgb_to_file_scaled(const char *file_name_utf8, size_t width, size_t height, const uint8_t *data_rgb, size_t scale);
+bool write_rgb_to_file_scaled(const std::string &file_name_utf8, size_t width, size_t height, const uint8_t *data_rgb, size_t scale);
+bool write_rgb_to_file_scaled(const std::string &file_name_utf8, size_t width, size_t height, const std::vector<uint8_t> &data_rgb, size_t scale);
+
 }}     // namespace Slic3r::png
 
 #endif // PNGREAD_HPP
diff --git a/tests/libslic3r/test_png_io.cpp b/tests/libslic3r/test_png_io.cpp
index 51f94be32..b4fcd6255 100644
--- a/tests/libslic3r/test_png_io.cpp
+++ b/tests/libslic3r/test_png_io.cpp
@@ -3,7 +3,7 @@
 
 #include <numeric>
 
-#include "libslic3r/PNGRead.hpp"
+#include "libslic3r/PNGReadWrite.hpp"
 #include "libslic3r/SLA/AGGRaster.hpp"
 #include "libslic3r/BoundingBox.hpp"
 

From e2b4de455bc564b291ebe8ed4fc987a3b8affa62 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Thu, 26 Nov 2020 10:09:34 +0100
Subject: [PATCH 119/138] Customizable association of .3mf, .stl and .gcode
 files on Windows

---
 src/libslic3r/AppConfig.cpp             |  17 ++
 src/libslic3r/Technologies.hpp          |   1 +
 src/slic3r/GUI/ConfigWizard.cpp         | 200 +++++++++++++++---------
 src/slic3r/GUI/ConfigWizard_private.hpp |  24 +++
 src/slic3r/GUI/GUI_App.cpp              |  54 ++++++-
 src/slic3r/GUI/GUI_App.hpp              |  11 ++
 src/slic3r/GUI/Preferences.cpp          |  96 ++++++++----
 7 files changed, 292 insertions(+), 111 deletions(-)

diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp
index 1f1b1623b..c8d1687e1 100644
--- a/src/libslic3r/AppConfig.cpp
+++ b/src/libslic3r/AppConfig.cpp
@@ -68,6 +68,15 @@ void AppConfig::set_defaults()
         if (get("export_sources_full_pathnames").empty())
             set("export_sources_full_pathnames", "0");
 
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+        if (get("associate_3mf").empty())
+            set("associate_3mf", "0");
+        if (get("associate_stl").empty())
+            set("associate_stl", "0");
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+
         // remove old 'use_legacy_opengl' parameter from this config, if present
         if (!get("use_legacy_opengl").empty())
             erase("", "use_legacy_opengl");
@@ -109,6 +118,14 @@ void AppConfig::set_defaults()
         if (get("use_inches").empty())
             set("use_inches", "0");
     }
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+    else {
+#ifdef _WIN32
+        if (get("associate_gcode").empty())
+            set("associate_gcode", "0");
+#endif // _WIN32
+    }
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
 
     if (get("seq_top_layer_only").empty())
         set("seq_top_layer_only", "1");
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 738fdd7c0..85493d6f1 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -80,6 +80,7 @@
 
 #define ENABLE_SHOW_WIPE_MOVES (1 && ENABLE_2_3_0_BETA1)
 #define ENABLE_DRAG_AND_DROP_FIX (1 && ENABLE_2_3_0_BETA1)
+#define ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN (1 && ENABLE_2_3_0_BETA1)
 
 
 #endif // _prusaslicer_technologies_h_
diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp
index b993fb327..18e89f114 100644
--- a/src/slic3r/GUI/ConfigWizard.cpp
+++ b/src/slic3r/GUI/ConfigWizard.cpp
@@ -238,7 +238,7 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxSt
                 : from_u8(model.name);
 
             if (i == 1) {
-                auto *alt_label = new wxStaticText(variants_panel, wxID_ANY, _(L("Alternate nozzles:")));
+                auto *alt_label = new wxStaticText(variants_panel, wxID_ANY, _L("Alternate nozzles:"));
                 alt_label->SetFont(font_alt_nozzle);
                 variants_sizer->Add(alt_label, 0, wxBOTTOM, 3);
                 is_variants = true;
@@ -302,9 +302,9 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxSt
     if (/*titles.size() > 1*/is_variants) {
         // It only makes sense to add the All / None buttons if there's multiple printers
 
-        auto *sel_all_std = new wxButton(this, wxID_ANY, titles.size() > 1 ? _(L("All standard")) : _(L("Standard")));
-        auto *sel_all = new wxButton(this, wxID_ANY, _(L("All")));
-        auto *sel_none = new wxButton(this, wxID_ANY, _(L("None")));
+        auto *sel_all_std = new wxButton(this, wxID_ANY, titles.size() > 1 ? _L("All standard") : _L("Standard"));
+        auto *sel_all = new wxButton(this, wxID_ANY, _L("All"));
+        auto *sel_none = new wxButton(this, wxID_ANY, _L("None"));
         sel_all_std->Bind(wxEVT_BUTTON, [this](const wxCommandEvent &event) { this->select_all(true, false); });
         sel_all->Bind(wxEVT_BUTTON, [this](const wxCommandEvent &event) { this->select_all(true, true); });
         sel_none->Bind(wxEVT_BUTTON, [this](const wxCommandEvent &event) { this->select_all(false); });
@@ -444,14 +444,14 @@ PageWelcome::PageWelcome(ConfigWizard *parent)
 #else
             _utf8(L("Welcome to the %s Configuration Wizard"))
 #endif
-            ) % SLIC3R_APP_NAME).str()), _(L("Welcome")))
+            ) % SLIC3R_APP_NAME).str()), _L("Welcome"))
     , welcome_text(append_text(from_u8((boost::format(
         _utf8(L("Hello, welcome to %s! This %s helps you with the initial configuration; just a few settings and you will be ready to print.")))
         % SLIC3R_APP_NAME
         % _utf8(ConfigWizard::name())).str())
     ))
     , cbox_reset(append(
-        new wxCheckBox(this, wxID_ANY, _(L("Remove user profiles (a snapshot will be taken beforehand)")))
+        new wxCheckBox(this, wxID_ANY, _L("Remove user profiles (a snapshot will be taken beforehand)"))
     ))
 {
     welcome_text->Hide();
@@ -582,10 +582,10 @@ PageMaterials::PageMaterials(ConfigWizard *parent, Materials *materials, wxStrin
     grid->AddGrowableCol(3, 1);
     grid->AddGrowableRow(1, 1);
 
-	grid->Add(new wxStaticText(this, wxID_ANY, _(L("Printer:"))));
+	grid->Add(new wxStaticText(this, wxID_ANY, _L("Printer:")));
     grid->Add(new wxStaticText(this, wxID_ANY, list1name));
-    grid->Add(new wxStaticText(this, wxID_ANY, _(L("Vendor:"))));
-    grid->Add(new wxStaticText(this, wxID_ANY, _(L("Profile:"))));
+    grid->Add(new wxStaticText(this, wxID_ANY, _L("Vendor:")));
+    grid->Add(new wxStaticText(this, wxID_ANY, _L("Profile:")));
 
 	grid->Add(list_printer, 0, wxEXPAND);
     grid->Add(list_type, 0, wxEXPAND);
@@ -593,8 +593,8 @@ PageMaterials::PageMaterials(ConfigWizard *parent, Materials *materials, wxStrin
     grid->Add(list_profile, 1, wxEXPAND);
 
     auto *btn_sizer = new wxBoxSizer(wxHORIZONTAL);
-    auto *sel_all = new wxButton(this, wxID_ANY, _(L("All")));
-    auto *sel_none = new wxButton(this, wxID_ANY, _(L("None")));
+    auto *sel_all = new wxButton(this, wxID_ANY, _L("All"));
+    auto *sel_none = new wxButton(this, wxID_ANY, _L("None"));
     btn_sizer->Add(sel_all, 0, wxRIGHT, em / 2);
     btn_sizer->Add(sel_none);
 
@@ -657,7 +657,7 @@ void PageMaterials::reload_presets()
 {
     clear();
 
-	list_printer->append(_(L("(All)")), &EMPTY);
+	list_printer->append(_L("(All)"), &EMPTY);
     //list_printer->SetLabelMarkup("<b>bald</b>");
 	for (const Preset* printer : materials->printers) {
 		list_printer->append(printer->name, &printer->name);
@@ -686,10 +686,10 @@ void PageMaterials::set_compatible_printers_html_window(const std::vector<std::s
     const auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue());
     const auto text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
     const auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue());
-    wxString first_line = _(L("Filaments marked with <b>*</b> are <b>not</b> compatible with some installed printers."));
+    wxString first_line = _L("Filaments marked with <b>*</b> are <b>not</b> compatible with some installed printers.");
     wxString text;
     if (all_printers) {
-        wxString second_line = _(L("All installed printers are compatible with the selected filament."));
+        wxString second_line = _L("All installed printers are compatible with the selected filament.");
         text = wxString::Format(
             "<html>"
             "<style>"
@@ -709,7 +709,7 @@ void PageMaterials::set_compatible_printers_html_window(const std::vector<std::s
             , second_line
             );
     } else {
-        wxString second_line = _(L("Only the following installed printers are compatible with the selected filament:"));
+        wxString second_line = _L("Only the following installed printers are compatible with the selected filament:");
         text = wxString::Format(
             "<html>"
             "<style>"
@@ -807,7 +807,7 @@ void PageMaterials::update_lists(int sel_printer, int sel_type, int sel_vendor)
 	if (sel_printers_count != sel_printer_count_prev || (sel_printers_count == 1 && sel_printer_item_prev != sel_printer && sel_printer != -1)) {
         // Refresh type list
 		list_type->Clear();
-		list_type->append(_(L("(All)")), &EMPTY);
+		list_type->append(_L("(All)"), &EMPTY);
 		if (sel_printers_count > 0) {
             // If all is selected with other printers
             // unselect "all" or all printers depending on last value
@@ -868,7 +868,7 @@ void PageMaterials::update_lists(int sel_printer, int sel_type, int sel_vendor)
 		// but the number of vendors is going to be very small this shouldn't be a problem.
 
 		list_vendor->Clear();
-		list_vendor->append(_(L("(All)")), &EMPTY);
+		list_vendor->append(_L("(All)"), &EMPTY);
 		if (sel_printers_count != 0 && sel_type != wxNOT_FOUND) {
 			const std::string& type = list_type->get_data(sel_type);
 			// find printer preset
@@ -1005,7 +1005,7 @@ void PageMaterials::sort_list_data(StringList* list, bool add_All_item, bool mat
     
     list->Clear();
     if (add_All_item)
-        list->append(_(L("(All)")), &EMPTY);
+        list->append(_L("(All)"), &EMPTY);
     for (const auto& item : prusa_profiles)
         list->append(item, &const_cast<std::string&>(item.get()));
     for (const auto& item : other_profiles)
@@ -1095,11 +1095,11 @@ void PageMaterials::on_activate()
 const char *PageCustom::default_profile_name = "My Settings";
 
 PageCustom::PageCustom(ConfigWizard *parent)
-    : ConfigWizardPage(parent, _(L("Custom Printer Setup")), _(L("Custom Printer")))
+    : ConfigWizardPage(parent, _L("Custom Printer Setup"), _L("Custom Printer"))
 {
-    cb_custom = new wxCheckBox(this, wxID_ANY, _(L("Define a custom printer profile")));
+    cb_custom = new wxCheckBox(this, wxID_ANY, _L("Define a custom printer profile"));
     tc_profile_name = new wxTextCtrl(this, wxID_ANY, default_profile_name);
-    auto *label = new wxStaticText(this, wxID_ANY, _(L("Custom profile name:")));
+    auto *label = new wxStaticText(this, wxID_ANY, _L("Custom profile name:"));
 
     tc_profile_name->Enable(false);
     tc_profile_name->Bind(wxEVT_KILL_FOCUS, [this](wxFocusEvent &evt) {
@@ -1124,7 +1124,7 @@ PageCustom::PageCustom(ConfigWizard *parent)
 }
 
 PageUpdate::PageUpdate(ConfigWizard *parent)
-    : ConfigWizardPage(parent, _(L("Automatic updates")), _(L("Updates")))
+    : ConfigWizardPage(parent, _L("Automatic updates"), _L("Updates"))
     , version_check(true)
     , preset_update(true)
 {
@@ -1132,60 +1132,76 @@ PageUpdate::PageUpdate(ConfigWizard *parent)
     auto boldfont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
     boldfont.SetWeight(wxFONTWEIGHT_BOLD);
 
-    auto *box_slic3r = new wxCheckBox(this, wxID_ANY, _(L("Check for application updates")));
+    auto *box_slic3r = new wxCheckBox(this, wxID_ANY, _L("Check for application updates"));
     box_slic3r->SetValue(app_config->get("version_check") == "1");
     append(box_slic3r);
-    append_text(wxString::Format(_(L(
+    append_text(wxString::Format(_L(
         "If enabled, %s checks for new application versions online. When a new version becomes available, "
          "a notification is displayed at the next application startup (never during program usage). "
-         "This is only a notification mechanisms, no automatic installation is done.")), SLIC3R_APP_NAME));
+         "This is only a notification mechanisms, no automatic installation is done."), SLIC3R_APP_NAME));
 
     append_spacer(VERTICAL_SPACING);
 
-    auto *box_presets = new wxCheckBox(this, wxID_ANY, _(L("Update built-in Presets automatically")));
+    auto *box_presets = new wxCheckBox(this, wxID_ANY, _L("Update built-in Presets automatically"));
     box_presets->SetValue(app_config->get("preset_update") == "1");
     append(box_presets);
-    append_text(wxString::Format(_(L(
+    append_text(wxString::Format(_L(
         "If enabled, %s downloads updates of built-in system presets in the background."
         "These updates are downloaded into a separate temporary location."
-        "When a new preset version becomes available it is offered at application startup.")), SLIC3R_APP_NAME));
-    const auto text_bold = _(L("Updates are never applied without user's consent and never overwrite user's customized settings."));
+        "When a new preset version becomes available it is offered at application startup."), SLIC3R_APP_NAME));
+    const auto text_bold = _L("Updates are never applied without user's consent and never overwrite user's customized settings.");
     auto *label_bold = new wxStaticText(this, wxID_ANY, text_bold);
     label_bold->SetFont(boldfont);
     label_bold->Wrap(WRAP_WIDTH);
     append(label_bold);
-    append_text(_(L("Additionally a backup snapshot of the whole configuration is created before an update is applied.")));
+    append_text(_L("Additionally a backup snapshot of the whole configuration is created before an update is applied."));
 
     box_slic3r->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent &event) { this->version_check = event.IsChecked(); });
     box_presets->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent &event) { this->preset_update = event.IsChecked(); });
 }
 
 PageReloadFromDisk::PageReloadFromDisk(ConfigWizard* parent)
-    : ConfigWizardPage(parent, _(L("Reload from disk")), _(L("Reload from disk")))
+    : ConfigWizardPage(parent, _L("Reload from disk"), _L("Reload from disk"))
     , full_pathnames(false)
 {
-    auto* box_pathnames = new wxCheckBox(this, wxID_ANY, _(L("Export full pathnames of models and parts sources into 3mf and amf files")));
+    auto* box_pathnames = new wxCheckBox(this, wxID_ANY, _L("Export full pathnames of models and parts sources into 3mf and amf files"));
     box_pathnames->SetValue(wxGetApp().app_config->get("export_sources_full_pathnames") == "1");
     append(box_pathnames);
-    append_text(_(L(
+    append_text(_L(
         "If enabled, allows the Reload from disk command to automatically find and load the files when invoked.\n"
         "If not enabled, the Reload from disk command will ask to select each file using an open file dialog."
-    )));
+    ));
 
     box_pathnames->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& event) { this->full_pathnames = event.IsChecked(); });
 }
 
-PageMode::PageMode(ConfigWizard *parent)
-    : ConfigWizardPage(parent, _(L("View mode")), _(L("View mode")))
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+PageFilesAssociation::PageFilesAssociation(ConfigWizard* parent)
+    : ConfigWizardPage(parent, _L("Files association"), _L("Files association"))
 {
-    append_text(_(L("PrusaSlicer's user interfaces comes in three variants:\nSimple, Advanced, and Expert.\n"
+    cb_3mf = new wxCheckBox(this, wxID_ANY, _L("Associate .3mf files to PrusaSlicer"));
+    cb_stl = new wxCheckBox(this, wxID_ANY, _L("Associate .stl files to PrusaSlicer"));
+//    cb_gcode = new wxCheckBox(this, wxID_ANY, _L("Associate .gcode files to PrusaSlicer G-code Viewer"));
+
+    append(cb_3mf);
+    append(cb_stl);
+//    append(cb_gcode);
+}
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+
+PageMode::PageMode(ConfigWizard *parent)
+    : ConfigWizardPage(parent, _L("View mode"), _L("View mode"))
+{
+    append_text(_L("PrusaSlicer's user interfaces comes in three variants:\nSimple, Advanced, and Expert.\n"
         "The Simple mode shows only the most frequently used settings relevant for regular 3D printing. "
         "The other two offer progressively more sophisticated fine-tuning, "
-        "they are suitable for advanced and expert users, respectively.")));
+        "they are suitable for advanced and expert users, respectively."));
 
-    radio_simple = new wxRadioButton(this, wxID_ANY, _(L("Simple mode")));
-    radio_advanced = new wxRadioButton(this, wxID_ANY, _(L("Advanced mode")));
-    radio_expert = new wxRadioButton(this, wxID_ANY, _(L("Expert mode")));
+    radio_simple = new wxRadioButton(this, wxID_ANY, _L("Simple mode"));
+    radio_advanced = new wxRadioButton(this, wxID_ANY, _L("Advanced mode"));
+    radio_expert = new wxRadioButton(this, wxID_ANY, _L("Expert mode"));
 
     append(radio_simple);
     append(radio_advanced);
@@ -1226,11 +1242,11 @@ void PageMode::serialize_mode(AppConfig *app_config) const
 }
 
 PageVendors::PageVendors(ConfigWizard *parent)
-    : ConfigWizardPage(parent, _(L("Other Vendors")), _(L("Other Vendors")))
+    : ConfigWizardPage(parent, _L("Other Vendors"), _L("Other Vendors"))
 {
     const AppConfig &appconfig = this->wizard_p()->appconfig_new;
 
-    append_text(wxString::Format(_(L("Pick another vendor supported by %s")), SLIC3R_APP_NAME) + ":");
+    append_text(wxString::Format(_L("Pick another vendor supported by %s"), SLIC3R_APP_NAME) + ":");
 
     auto boldfont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
     boldfont.SetWeight(wxFONTWEIGHT_BOLD);
@@ -1261,11 +1277,11 @@ PageVendors::PageVendors(ConfigWizard *parent)
 }
 
 PageFirmware::PageFirmware(ConfigWizard *parent)
-    : ConfigWizardPage(parent, _(L("Firmware Type")), _(L("Firmware")), 1)
+    : ConfigWizardPage(parent, _L("Firmware Type"), _L("Firmware"), 1)
     , gcode_opt(*print_config_def.get("gcode_flavor"))
     , gcode_picker(nullptr)
 {
-    append_text(_(L("Choose the type of firmware used by your printer.")));
+    append_text(_L("Choose the type of firmware used by your printer."));
     append_text(_(gcode_opt.tooltip));
 
     wxArrayString choices;
@@ -1299,10 +1315,10 @@ void PageFirmware::apply_custom_config(DynamicPrintConfig &config)
 }
 
 PageBedShape::PageBedShape(ConfigWizard *parent)
-    : ConfigWizardPage(parent, _(L("Bed Shape and Size")), _(L("Bed Shape")), 1)
+    : ConfigWizardPage(parent, _L("Bed Shape and Size"), _L("Bed Shape"), 1)
     , shape_panel(new BedShapePanel(this))
 {
-    append_text(_(L("Set the shape of your printer's bed.")));
+    append_text(_L("Set the shape of your printer's bed."));
 
     shape_panel->build_panel(*wizard_p()->custom_config->option<ConfigOptionPoints>("bed_shape"),
         *wizard_p()->custom_config->option<ConfigOptionString>("bed_custom_texture"),
@@ -1322,7 +1338,7 @@ void PageBedShape::apply_custom_config(DynamicPrintConfig &config)
 }
 
 PageDiameters::PageDiameters(ConfigWizard *parent)
-    : ConfigWizardPage(parent, _(L("Filament and Nozzle Diameters")), _(L("Print Diameters")), 1)
+    : ConfigWizardPage(parent, _L("Filament and Nozzle Diameters"), _L("Print Diameters"), 1)
     , spin_nozzle(new wxSpinCtrlDouble(this, wxID_ANY))
     , spin_filam(new wxSpinCtrlDouble(this, wxID_ANY))
 {
@@ -1336,11 +1352,11 @@ PageDiameters::PageDiameters(ConfigWizard *parent)
     auto *default_filam = print_config_def.get("filament_diameter")->get_default_value<ConfigOptionFloats>();
     spin_filam->SetValue(default_filam != nullptr && default_filam->size() > 0 ? default_filam->get_at(0) : 3.0);
 
-    append_text(_(L("Enter the diameter of your printer's hot end nozzle.")));
+    append_text(_L("Enter the diameter of your printer's hot end nozzle."));
 
     auto *sizer_nozzle = new wxFlexGridSizer(3, 5, 5);
-    auto *text_nozzle = new wxStaticText(this, wxID_ANY, _(L("Nozzle Diameter:")));
-    auto *unit_nozzle = new wxStaticText(this, wxID_ANY, _(L("mm")));
+    auto *text_nozzle = new wxStaticText(this, wxID_ANY, _L("Nozzle Diameter:"));
+    auto *unit_nozzle = new wxStaticText(this, wxID_ANY, _L("mm"));
     sizer_nozzle->AddGrowableCol(0, 1);
     sizer_nozzle->Add(text_nozzle, 0, wxALIGN_CENTRE_VERTICAL);
     sizer_nozzle->Add(spin_nozzle);
@@ -1349,12 +1365,12 @@ PageDiameters::PageDiameters(ConfigWizard *parent)
 
     append_spacer(VERTICAL_SPACING);
 
-    append_text(_(L("Enter the diameter of your filament.")));
-    append_text(_(L("Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average.")));
+    append_text(_L("Enter the diameter of your filament."));
+    append_text(_L("Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average."));
 
     auto *sizer_filam = new wxFlexGridSizer(3, 5, 5);
-    auto *text_filam = new wxStaticText(this, wxID_ANY, _(L("Filament Diameter:")));
-    auto *unit_filam = new wxStaticText(this, wxID_ANY, _(L("mm")));
+    auto *text_filam = new wxStaticText(this, wxID_ANY, _L("Filament Diameter:"));
+    auto *unit_filam = new wxStaticText(this, wxID_ANY, _L("mm"));
     sizer_filam->AddGrowableCol(0, 1);
     sizer_filam->Add(text_filam, 0, wxALIGN_CENTRE_VERTICAL);
     sizer_filam->Add(spin_filam);
@@ -1387,7 +1403,7 @@ void PageDiameters::apply_custom_config(DynamicPrintConfig &config)
 }
 
 PageTemperatures::PageTemperatures(ConfigWizard *parent)
-    : ConfigWizardPage(parent, _(L("Nozzle and Bed Temperatures")), _(L("Temperatures")), 1)
+    : ConfigWizardPage(parent, _L("Nozzle and Bed Temperatures"), _L("Temperatures"), 1)
     , spin_extr(new wxSpinCtrlDouble(this, wxID_ANY))
     , spin_bed(new wxSpinCtrlDouble(this, wxID_ANY))
 {
@@ -1403,12 +1419,12 @@ PageTemperatures::PageTemperatures(ConfigWizard *parent)
     auto *default_bed = def_bed.get_default_value<ConfigOptionInts>();
     spin_bed->SetValue(default_bed != nullptr && default_bed->size() > 0 ? default_bed->get_at(0) : 0);
 
-    append_text(_(L("Enter the temperature needed for extruding your filament.")));
-    append_text(_(L("A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS.")));
+    append_text(_L("Enter the temperature needed for extruding your filament."));
+    append_text(_L("A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS."));
 
     auto *sizer_extr = new wxFlexGridSizer(3, 5, 5);
-    auto *text_extr = new wxStaticText(this, wxID_ANY, _(L("Extrusion Temperature:")));
-    auto *unit_extr = new wxStaticText(this, wxID_ANY, _(L("°C")));
+    auto *text_extr = new wxStaticText(this, wxID_ANY, _L("Extrusion Temperature:"));
+    auto *unit_extr = new wxStaticText(this, wxID_ANY, _L("°C"));
     sizer_extr->AddGrowableCol(0, 1);
     sizer_extr->Add(text_extr, 0, wxALIGN_CENTRE_VERTICAL);
     sizer_extr->Add(spin_extr);
@@ -1417,12 +1433,12 @@ PageTemperatures::PageTemperatures(ConfigWizard *parent)
 
     append_spacer(VERTICAL_SPACING);
 
-    append_text(_(L("Enter the bed temperature needed for getting your filament to stick to your heated bed.")));
-    append_text(_(L("A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have no heated bed.")));
+    append_text(_L("Enter the bed temperature needed for getting your filament to stick to your heated bed."));
+    append_text(_L("A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have no heated bed."));
 
     auto *sizer_bed = new wxFlexGridSizer(3, 5, 5);
-    auto *text_bed = new wxStaticText(this, wxID_ANY, _(L("Bed Temperature:")));
-    auto *unit_bed = new wxStaticText(this, wxID_ANY, _(L("°C")));
+    auto *text_bed = new wxStaticText(this, wxID_ANY, _L("Bed Temperature:"));
+    auto *unit_bed = new wxStaticText(this, wxID_ANY, _L("°C"));
     sizer_bed->AddGrowableCol(0, 1);
     sizer_bed->Add(text_bed, 0, wxALIGN_CENTRE_VERTICAL);
     sizer_bed->Add(spin_bed);
@@ -1780,6 +1796,11 @@ void ConfigWizard::priv::load_pages()
 
     index->add_page(page_update);
     index->add_page(page_reload_from_disk);
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+    index->add_page(page_files_association);
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
     index->add_page(page_mode);
 
     index->go_to(former_active);   // Will restore the active item/page if possible
@@ -1876,7 +1897,7 @@ void ConfigWizard::priv::load_vendors()
 
 void ConfigWizard::priv::add_page(ConfigWizardPage *page)
 {
-    const int proportion = (page->shortname == _(L("Filaments"))) || (page->shortname == _(L("SLA Materials"))) ? 1 : 0;
+    const int proportion = (page->shortname == _L("Filaments")) || (page->shortname == _L("SLA Materials")) ? 1 : 0;
     hscroll_sizer->Add(page, proportion, wxEXPAND);
     all_pages.push_back(page);
 }
@@ -1930,12 +1951,12 @@ void ConfigWizard::priv::create_3rdparty_pages()
         PagePrinters* pageSLA = nullptr;
 
         if (is_fff_technology) {
-            pageFFF = new PagePrinters(q, vendor->name + " " +_(L("FFF Technology Printers")), vendor->name+" FFF", *vendor, 1, T_FFF);
+            pageFFF = new PagePrinters(q, vendor->name + " " +_L("FFF Technology Printers"), vendor->name+" FFF", *vendor, 1, T_FFF);
             add_page(pageFFF);
         }
 
         if (is_sla_technology) {
-            pageSLA = new PagePrinters(q, vendor->name + " " + _(L("SLA Technology Printers")), vendor->name+" MSLA", *vendor, 1, T_SLA);
+            pageSLA = new PagePrinters(q, vendor->name + " " + _L("SLA Technology Printers"), vendor->name+" MSLA", *vendor, 1, T_SLA);
             add_page(pageSLA);
         }
 
@@ -2241,7 +2262,7 @@ bool ConfigWizard::priv::check_and_install_missing_materials(Technology technolo
 
     const auto ask_and_select_default_materials = [this](const wxString &message, const std::set<const VendorProfile::PrinterModel*> &printer_models, Technology technology)
     {
-        wxMessageDialog msg(q, message, _(L("Notice")), wxYES_NO);
+        wxMessageDialog msg(q, message, _L("Notice"), wxYES_NO);
         if (msg.ShowModal() == wxID_YES)
             select_default_materials_for_printer_models(technology, printer_models);
     };
@@ -2372,6 +2393,26 @@ void ConfigWizard::priv::apply_config(AppConfig *app_config, PresetBundle *prese
     app_config->set("preset_update", page_update->preset_update ? "1" : "0");
     app_config->set("export_sources_full_pathnames", page_reload_from_disk->full_pathnames ? "1" : "0");
 
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+    app_config->set("associate_3mf", page_files_association->associate_3mf() ? "1" : "0");
+    app_config->set("associate_stl", page_files_association->associate_stl() ? "1" : "0");
+//    app_config->set("associate_gcode", page_files_association->associate_gcode() ? "1" : "0");
+
+    if (wxGetApp().is_editor()) {
+        if (page_files_association->associate_3mf())
+            wxGetApp().associate_3mf_files();
+        if (page_files_association->associate_stl())
+            wxGetApp().associate_stl_files();
+    }
+//    else {
+//        if (page_files_association->associate_gcode())
+//            wxGetApp().associate_gcode_files();
+//    }
+
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+
     page_mode->serialize_mode(app_config);
 
     std::string preferred_model;
@@ -2491,13 +2532,13 @@ ConfigWizard::ConfigWizard(wxWindow *parent)
     topsizer->AddSpacer(INDEX_MARGIN);
     topsizer->Add(p->hscroll, 1, wxEXPAND);
 
-    p->btn_sel_all = new wxButton(this, wxID_ANY, _(L("Select all standard printers")));
+    p->btn_sel_all = new wxButton(this, wxID_ANY, _L("Select all standard printers"));
     p->btnsizer->Add(p->btn_sel_all);
 
-    p->btn_prev = new wxButton(this, wxID_ANY, _(L("< &Back")));
-    p->btn_next = new wxButton(this, wxID_ANY, _(L("&Next >")));
-    p->btn_finish = new wxButton(this, wxID_APPLY, _(L("&Finish")));
-    p->btn_cancel = new wxButton(this, wxID_CANCEL, _(L("Cancel")));   // Note: The label needs to be present, otherwise we get accelerator bugs on Mac
+    p->btn_prev = new wxButton(this, wxID_ANY, _L("< &Back"));
+    p->btn_next = new wxButton(this, wxID_ANY, _L("&Next >"));
+    p->btn_finish = new wxButton(this, wxID_APPLY, _L("&Finish"));
+    p->btn_cancel = new wxButton(this, wxID_CANCEL, _L("Cancel"));   // Note: The label needs to be present, otherwise we get accelerator bugs on Mac
     p->btnsizer->AddStretchSpacer();
     p->btnsizer->Add(p->btn_prev, 0, wxLEFT, BTN_SPACING);
     p->btnsizer->Add(p->btn_next, 0, wxLEFT, BTN_SPACING);
@@ -2510,10 +2551,10 @@ ConfigWizard::ConfigWizard(wxWindow *parent)
 
     p->add_page(p->page_welcome = new PageWelcome(this));
 
-    p->page_fff = new PagePrinters(this, _(L("Prusa FFF Technology Printers")), "Prusa FFF", *vendor_prusa, 0, T_FFF);
+    p->page_fff = new PagePrinters(this, _L("Prusa FFF Technology Printers"), "Prusa FFF", *vendor_prusa, 0, T_FFF);
     p->add_page(p->page_fff);
 
-    p->page_msla = new PagePrinters(this, _(L("Prusa MSLA Technology Printers")), "Prusa MSLA", *vendor_prusa, 0, T_SLA);
+    p->page_msla = new PagePrinters(this, _L("Prusa MSLA Technology Printers"), "Prusa MSLA", *vendor_prusa, 0, T_SLA);
     p->add_page(p->page_msla);
 
 	// Pages for 3rd party vendors
@@ -2528,13 +2569,18 @@ ConfigWizard::ConfigWizard(wxWindow *parent)
     p->update_materials(T_ANY);
 
     p->add_page(p->page_filaments = new PageMaterials(this, &p->filaments,
-        _(L("Filament Profiles Selection")), _(L("Filaments")), _(L("Type:")) ));
+        _L("Filament Profiles Selection"), _L("Filaments"), _L("Type:") ));
     p->add_page(p->page_sla_materials = new PageMaterials(this, &p->sla_materials,
-        _(L("SLA Material Profiles Selection")) + " ", _(L("SLA Materials")), _(L("Type:")) ));
+        _L("SLA Material Profiles Selection") + " ", _L("SLA Materials"), _L("Type:") ));
 
     
     p->add_page(p->page_update   = new PageUpdate(this));
     p->add_page(p->page_reload_from_disk = new PageReloadFromDisk(this));
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+    p->add_page(p->page_files_association = new PageFilesAssociation(this));
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
     p->add_page(p->page_mode     = new PageMode(this));
     p->add_page(p->page_firmware = new PageFirmware(this));
     p->add_page(p->page_bed      = new PageBedShape(this));
diff --git a/src/slic3r/GUI/ConfigWizard_private.hpp b/src/slic3r/GUI/ConfigWizard_private.hpp
index 9fcc9267d..62ec6b18b 100644
--- a/src/slic3r/GUI/ConfigWizard_private.hpp
+++ b/src/slic3r/GUI/ConfigWizard_private.hpp
@@ -392,6 +392,25 @@ struct PageReloadFromDisk : ConfigWizardPage
     PageReloadFromDisk(ConfigWizard* parent);
 };
 
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+struct PageFilesAssociation : ConfigWizardPage
+{
+private:
+    wxCheckBox* cb_3mf{ nullptr };
+    wxCheckBox* cb_stl{ nullptr };
+//    wxCheckBox* cb_gcode;
+
+public:
+    PageFilesAssociation(ConfigWizard* parent);
+
+    bool associate_3mf() const { return cb_3mf->IsChecked(); }
+    bool associate_stl() const { return cb_stl->IsChecked(); }
+//    bool associate_gcode() const { return cb_gcode->IsChecked(); }
+};
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+
 struct PageMode: ConfigWizardPage
 {
     wxRadioButton *radio_simple;
@@ -550,6 +569,11 @@ struct ConfigWizard::priv
     PageCustom       *page_custom = nullptr;
     PageUpdate       *page_update = nullptr;
     PageReloadFromDisk *page_reload_from_disk = nullptr;
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+    PageFilesAssociation* page_files_association = nullptr;
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
     PageMode         *page_mode = nullptr;
     PageVendors      *page_vendors = nullptr;
     Pages3rdparty     pages_3rdparty;
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index fa913f6b5..dc5b5ad6d 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -804,7 +804,14 @@ bool GUI_App::on_init_inner()
 
     if (is_editor()) {
 #ifdef __WXMSW__ 
-        associate_3mf_files();
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+        if (app_config->get("associate_3mf") == "1")
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+            associate_3mf_files();
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+        if (app_config->get("associate_stl") == "1")
+            associate_stl_files();
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
 #endif // __WXMSW__
 
         preset_updater = new PresetUpdater();
@@ -820,7 +827,10 @@ bool GUI_App::on_init_inner()
     }
     else {
 #ifdef __WXMSW__ 
-        associate_gcode_files();
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+        if (app_config->get("associate_gcode") == "1")
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+            associate_gcode_files();
 #endif // __WXMSW__
     }
 
@@ -1577,6 +1587,20 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
                 app_layout_changed = dlg.settings_layout_changed();
                 if (dlg.seq_top_layer_only_changed())
                     this->plater_->refresh_print();
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+                if (is_editor()) {
+                    if (app_config->get("associate_3mf") == "1")
+                        associate_3mf_files();
+                    if (app_config->get("associate_stl") == "1")
+                        associate_stl_files();
+                }
+                else {
+                    if (app_config->get("associate_gcode") == "1")
+                        associate_gcode_files();
+                }
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
             }
             if (app_layout_changed) {
                 // hide full main_sizer for mainFrame
@@ -2112,6 +2136,32 @@ void GUI_App::associate_3mf_files()
         ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nullptr, nullptr);
 }
 
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+void GUI_App::associate_stl_files()
+{
+    wchar_t app_path[MAX_PATH];
+    ::GetModuleFileNameW(nullptr, app_path, sizeof(app_path));
+
+    std::wstring prog_path = L"\"" + std::wstring(app_path) + L"\"";
+    std::wstring prog_id = L"Prusa.Slicer.1";
+    std::wstring prog_desc = L"PrusaSlicer";
+    std::wstring prog_command = prog_path + L" \"%1\"";
+    std::wstring reg_base = L"Software\\Classes";
+    std::wstring reg_extension = reg_base + L"\\.stl";
+    std::wstring reg_prog_id = reg_base + L"\\" + prog_id;
+    std::wstring reg_prog_id_command = reg_prog_id + L"\\Shell\\Open\\Command";
+
+    bool is_new = false;
+    is_new |= set_into_win_registry(HKEY_CURRENT_USER, reg_extension.c_str(), prog_id.c_str());
+    is_new |= set_into_win_registry(HKEY_CURRENT_USER, reg_prog_id.c_str(), prog_desc.c_str());
+    is_new |= set_into_win_registry(HKEY_CURRENT_USER, reg_prog_id_command.c_str(), prog_command.c_str());
+
+    if (is_new)
+        // notify Windows only when any of the values gets changed
+        ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nullptr, nullptr);
+}
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+
 void GUI_App::associate_gcode_files()
 {
     wchar_t app_path[MAX_PATH];
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index fec73b724..44ef4f493 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -274,6 +274,14 @@ public:
     bool is_gl_version_greater_or_equal_to(unsigned int major, unsigned int minor) const { return m_opengl_mgr.get_gl_info().is_version_greater_or_equal_to(major, minor); }
     bool is_glsl_version_greater_or_equal_to(unsigned int major, unsigned int minor) const { return m_opengl_mgr.get_gl_info().is_glsl_version_greater_or_equal_to(major, minor); }
 
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef __WXMSW__
+    void            associate_3mf_files();
+    void            associate_stl_files();
+    void            associate_gcode_files();
+#endif // __WXMSW__
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+
 private:
     bool            on_init_inner();
 	void            init_app_config();
@@ -285,11 +293,14 @@ private:
     bool            config_wizard_startup();
 	void            check_updates(const bool verbose);
 
+#if !ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
 #ifdef __WXMSW__
     void            associate_3mf_files();
     void            associate_gcode_files();
 #endif // __WXMSW__
+#endif // !ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
 };
+
 DECLARE_APP(GUI_App)
 
 } // GUI
diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index 578c9d397..6a1a95b03 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -85,6 +85,25 @@ void PreferencesDialog::build()
 		option = Option(def, "export_sources_full_pathnames");
 		m_optgroup_general->append_single_option_line(option);
 
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+		// Please keep in sync with ConfigWizard
+		def.label = L("Associate .3mf files to PrusaSlicer");
+		def.type = coBool;
+		def.tooltip = L("If enabled, sets PrusaSlicer as default application to open .3mf files.");
+		def.set_default_value(new ConfigOptionBool(app_config->get("associate_3mf") == "1"));
+		option = Option(def, "associate_3mf");
+		m_optgroup_general->append_single_option_line(option);
+
+		def.label = L("Associate .stl files to PrusaSlicer");
+		def.type = coBool;
+		def.tooltip = L("If enabled, sets PrusaSlicer as default application to open .stl files.");
+		def.set_default_value(new ConfigOptionBool(app_config->get("associate_stl") == "1"));
+		option = Option(def, "associate_stl");
+		m_optgroup_general->append_single_option_line(option);
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+
 		// Please keep in sync with ConfigWizard
 		def.label = L("Update built-in Presets automatically");
 		def.type = coBool;
@@ -126,7 +145,44 @@ void PreferencesDialog::build()
 		def.set_default_value(new ConfigOptionBool{ app_config->has("single_instance") ? app_config->get("single_instance") == "1" : false });
 		option = Option(def, "single_instance");
 		m_optgroup_general->append_single_option_line(option);
+
+		/*  // ysFIXME THis part is temporary commented
+			// The using of inches is implemented just for object's size and position
+
+			def.label = L("Use inches instead of millimeters");
+			def.type = coBool;
+			def.tooltip = L("Use inches instead of millimeters for the object's size");
+			def.set_default_value(new ConfigOptionBool{ app_config->get("use_inches") == "1" });
+			option = Option(def, "use_inches");
+			m_optgroup_general->append_single_option_line(option);
+		*/
+
+		def.label = L("Ask for unsaved changes when closing application");
+		def.type = coBool;
+		def.tooltip = L("When closing the application, always ask for unsaved changes");
+		def.set_default_value(new ConfigOptionBool{ app_config->get("default_action_on_close_application") == "none" });
+		option = Option(def, "default_action_on_close_application");
+		m_optgroup_general->append_single_option_line(option);
+
+		def.label = L("Ask for unsaved changes when selecting new preset");
+		def.type = coBool;
+		def.tooltip = L("Always ask for unsaved changes when selecting new preset");
+		def.set_default_value(new ConfigOptionBool{ app_config->get("default_action_on_select_preset") == "none" });
+		option = Option(def, "default_action_on_select_preset");
+		m_optgroup_general->append_single_option_line(option);
 	}
+#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
+#ifdef _WIN32
+	else {
+		def.label = L("Associate .gcode files to PrusaSlicer G-code Viewer");
+		def.type = coBool;
+		def.tooltip = L("If enabled, sets PrusaSlicer G-code Viewer as default application to open .gcode files.");
+		def.set_default_value(new ConfigOptionBool(app_config->get("associate_gcode") == "1"));
+		option = Option(def, "associate_gcode");
+		m_optgroup_general->append_single_option_line(option);
+	}
+#endif // _WIN32
+#endif // ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
 
 #if __APPLE__
 	def.label = L("Use Retina resolution for the 3D scene");
@@ -137,30 +193,6 @@ void PreferencesDialog::build()
 	option = Option (def, "use_retina_opengl");
 	m_optgroup_general->append_single_option_line(option);
 #endif
-/*  // ysFIXME THis part is temporary commented
-    // The using of inches is implemented just for object's size and position
-    
-	def.label = L("Use inches instead of millimeters");
-	def.type = coBool;
-	def.tooltip = L("Use inches instead of millimeters for the object's size");
-	def.set_default_value(new ConfigOptionBool{ app_config->get("use_inches") == "1" });
-	option = Option(def, "use_inches");
-	m_optgroup_general->append_single_option_line(option);
-*/
-
-	def.label = L("Ask for unsaved changes when closing application");
-	def.type = coBool;
-	def.tooltip = L("When closing the application, always ask for unsaved changes");
-	def.set_default_value(new ConfigOptionBool{ app_config->get("default_action_on_close_application") == "none" });
-	option = Option(def, "default_action_on_close_application");
-	m_optgroup_general->append_single_option_line(option);
-
-	def.label = L("Ask for unsaved changes when selecting new preset");
-	def.type = coBool;
-	def.tooltip = L("Always ask for unsaved changes when selecting new preset");
-	def.set_default_value(new ConfigOptionBool{ app_config->get("default_action_on_select_preset") == "none" });
-	option = Option(def, "default_action_on_select_preset");
-	m_optgroup_general->append_single_option_line(option);
 
     // Show/Hide splash screen
 	def.label = L("Show splash screen");
@@ -229,6 +261,14 @@ void PreferencesDialog::build()
 		def.set_default_value(new ConfigOptionBool{ app_config->get("use_custom_toolbar_size") == "1" });
 		option = Option(def, "use_custom_toolbar_size");
 		m_optgroup_gui->append_single_option_line(option);
+
+		def.label = L("Suppress to open hyperlink in browser");
+		def.type = coBool;
+		def.tooltip = L("If enabled, the descriptions of configuration parameters in settings tabs woldn't work as hyperlinks. "
+			"If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks.");
+		def.set_default_value(new ConfigOptionBool{ app_config->get("suppress_hyperlinks") == "1" });
+		option = Option(def, "suppress_hyperlinks");
+		m_optgroup_gui->append_single_option_line(option);
 	}
 
 	def.label = L("Sequential slider applied only to top layer");
@@ -239,14 +279,6 @@ void PreferencesDialog::build()
 	option = Option(def, "seq_top_layer_only");
 	m_optgroup_gui->append_single_option_line(option);
 
-	def.label = L("Suppress to open hyperlink in browser");
-	def.type = coBool;
-	def.tooltip = L("If enabled, the descriptions of configuration parameters in settings tabs woldn't work as hyperlinks. "
-					"If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks.");
-	def.set_default_value(new ConfigOptionBool{ app_config->get("suppress_hyperlinks") == "1" });
-	option = Option(def, "suppress_hyperlinks");
-	m_optgroup_gui->append_single_option_line(option);
-
 	m_optgroup_gui->activate();
 
 	if (is_editor) {

From 2314a9e8c7f3a55ba18aa74720f6a8c8f36fdaeb Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Thu, 26 Nov 2020 10:54:06 +0100
Subject: [PATCH 120/138] Fixing compilation issues on conforming compilers

---
 src/libslic3r/PNGReadWrite.cpp | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/libslic3r/PNGReadWrite.cpp b/src/libslic3r/PNGReadWrite.cpp
index 2b7f64f6d..1e8a7de53 100644
--- a/src/libslic3r/PNGReadWrite.cpp
+++ b/src/libslic3r/PNGReadWrite.cpp
@@ -104,21 +104,26 @@ bool decode_png(IStream &in_buf, ImageGreyscale &out_img)
 // Based on https://www.lemoda.net/c/write-png/
 bool write_rgb_to_file(const char *file_name_utf8, size_t width, size_t height, const uint8_t *data_rgb)
 {
-    bool result = false;
+    bool         result       = false;
 
-    FILE *fp = boost::nowide::fopen(file_name_utf8, "wb");
+    // Forward declaration due to the gotos.
+    png_structp  png_ptr      = nullptr;
+    png_infop    info_ptr     = nullptr;
+    png_byte   **row_pointers = nullptr;
+ 
+    FILE        *fp = boost::nowide::fopen(file_name_utf8, "wb");
     if (! fp) {
         BOOST_LOG_TRIVIAL(error) << "write_png_file: File could not be opened for writing: " << file_name_utf8;
         goto fopen_failed;
     }
 
-    png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
+    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
     if (! png_ptr) {
         BOOST_LOG_TRIVIAL(error) << "write_png_file: png_create_write_struct() failed";
         goto png_create_write_struct_failed;
     }
 
-    png_infop info_ptr = png_create_info_struct(png_ptr);
+    info_ptr = png_create_info_struct(png_ptr);
     if (! info_ptr) {
         BOOST_LOG_TRIVIAL(error) << "write_png_file: png_create_info_struct() failed";
         goto png_create_info_struct_failed;
@@ -142,7 +147,7 @@ bool write_rgb_to_file(const char *file_name_utf8, size_t width, size_t height,
         PNG_FILTER_TYPE_DEFAULT);
 
     // Initialize rows of PNG.
-    auto row_pointers = reinterpret_cast<png_byte**>(::png_malloc(png_ptr, height * sizeof(png_byte*)));
+    row_pointers = reinterpret_cast<png_byte**>(::png_malloc(png_ptr, height * sizeof(png_byte*)));
     for (size_t y = 0; y < height; ++ y) {
         auto row = reinterpret_cast<png_byte*>(::png_malloc(png_ptr, sizeof(uint8_t) * width * 3));
         row_pointers[y] = row;
@@ -157,6 +162,7 @@ bool write_rgb_to_file(const char *file_name_utf8, size_t width, size_t height,
     for (size_t y = 0; y < height; ++ y)
         png_free(png_ptr, row_pointers[y]);
     png_free(png_ptr, row_pointers);
+
     result = true;
 
 png_failure:

From 10fb75edf072f20604857896c279645ee9890858 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Thu, 26 Nov 2020 11:00:24 +0100
Subject: [PATCH 121/138] Enabled tech ENABLE_CTRL_M_ON_WINDOWS -> Added
 customizable support for legacy CTRL+M settings dialog on Windows in
 preference dialog

---
 src/libslic3r/AppConfig.cpp          | 17 ++++++++++++-----
 src/libslic3r/Technologies.hpp       |  2 +-
 src/slic3r/GUI/GLCanvas3D.cpp        | 22 ++++++++++++++--------
 src/slic3r/GUI/KBShortcutsDialog.cpp |  4 ++++
 src/slic3r/GUI/Mouse3DController.cpp |  8 ++++----
 src/slic3r/GUI/Mouse3DController.hpp |  4 ++--
 src/slic3r/GUI/Preferences.cpp       | 11 +++++++++++
 7 files changed, 48 insertions(+), 20 deletions(-)

diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp
index c8d1687e1..7c9403382 100644
--- a/src/libslic3r/AppConfig.cpp
+++ b/src/libslic3r/AppConfig.cpp
@@ -117,6 +117,12 @@ void AppConfig::set_defaults()
 
         if (get("use_inches").empty())
             set("use_inches", "0");
+
+        if (get("default_action_on_close_application").empty())
+            set("default_action_on_close_application", "none"); // , "discard" or "save" 
+
+        if (get("default_action_on_select_preset").empty())
+            set("default_action_on_select_preset", "none");     // , "transfer", "discard" or "save" 
     }
 #if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN
     else {
@@ -142,11 +148,12 @@ void AppConfig::set_defaults()
     if (get("show_splash_screen").empty())
         set("show_splash_screen", "1");
 
-    if (get("default_action_on_close_application").empty())
-        set("default_action_on_close_application", "none"); // , "discard" or "save" 
-
-    if (get("default_action_on_select_preset").empty())
-        set("default_action_on_select_preset", "none");     // , "transfer", "discard" or "save" 
+#if ENABLE_CTRL_M_ON_WINDOWS
+#ifdef _WIN32
+    if (get("use_legacy_3DConnexion").empty())
+        set("use_legacy_3DConnexion", "0");
+#endif // _WIN32
+#endif // ENABLE_CTRL_M_ON_WINDOWS
 
     // Remove legacy window positions/sizes
     erase("", "main_frame_maximized");
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 85493d6f1..3e9db414a 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -61,7 +61,7 @@
 //====================
 #define ENABLE_2_3_0_ALPHA3 1
 
-#define ENABLE_CTRL_M_ON_WINDOWS (0 && ENABLE_2_3_0_ALPHA3)
+#define ENABLE_CTRL_M_ON_WINDOWS (1 && ENABLE_2_3_0_ALPHA3)
 
 
 //====================
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index e55c5fa8c..a8221ce69 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2434,9 +2434,15 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
 #if ENABLE_CTRL_M_ON_WINDOWS
         case WXK_CONTROL_M:
         {
-            Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller();
-            controller.show_settings_dialog(!controller.is_settings_dialog_shown());
-            m_dirty = true;
+#ifdef _WIN32
+            if (wxGetApp().app_config->get("use_legacy_3DConnexion") == "1") {
+#endif //_WIN32
+                Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller();
+                controller.show_settings_dialog(!controller.is_settings_dialog_shown());
+                m_dirty = true;
+#ifdef _WIN32
+            }
+#endif //_WIN32
             break;
         }
 #else
@@ -3880,26 +3886,26 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x)
     const float x = pos_x * float(wxGetApp().plater()->get_camera().get_zoom()) + 0.5f * canvas_w;
     imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f);
 
-    imgui->begin(_(L("Arrange options")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
+    imgui->begin(_L("Arrange options"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
     ArrangeSettings settings = m_arrange_settings;
 
     auto &appcfg = wxGetApp().app_config;
 
     bool settings_changed = false;
 
-    if (imgui->slider_float(_(L("Gap size")), &settings.distance, 0.f, 100.f)) {
+    if (imgui->slider_float(_L("Gap size"), &settings.distance, 0.f, 100.f)) {
         m_arrange_settings.distance = settings.distance;
         settings_changed = true;
     }
 
-    if (imgui->checkbox(_(L("Enable rotations (slow)")), settings.enable_rotation)) {
+    if (imgui->checkbox(_L("Enable rotations (slow)"), settings.enable_rotation)) {
         m_arrange_settings.enable_rotation = settings.enable_rotation;
         settings_changed = true;
     }
 
     ImGui::Separator();
 
-    if (imgui->button(_(L("Reset")))) {
+    if (imgui->button(_L("Reset"))) {
         m_arrange_settings = ArrangeSettings{};
         settings_changed = true;
     }
@@ -3911,7 +3917,7 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x)
 
     ImGui::SameLine();
 
-    if (imgui->button(_(L("Arrange")))) {
+    if (imgui->button(_L("Arrange"))) {
         wxGetApp().plater()->arrange();
     }
 
diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp
index 62fb1cec9..608cc7a48 100644
--- a/src/slic3r/GUI/KBShortcutsDialog.cpp
+++ b/src/slic3r/GUI/KBShortcutsDialog.cpp
@@ -171,7 +171,11 @@ void KBShortcutsDialog::fill_shortcuts()
             { "Tab", L("Switch between Editor/Preview") },
             { "Shift+Tab", L("Collapse/Expand the sidebar") },
 #if ENABLE_CTRL_M_ON_WINDOWS
+#ifdef _WIN32
+            { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog, if enabled") },
+#else
             { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog") },
+#endif // _WIN32
 #else
 #if defined(__linux__) || defined(__APPLE__)
             { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog") },
diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp
index 44ccb8b3e..24da199db 100644
--- a/src/slic3r/GUI/Mouse3DController.cpp
+++ b/src/slic3r/GUI/Mouse3DController.cpp
@@ -99,7 +99,7 @@ void Mouse3DController::State::append_button(unsigned int id, size_t /* input_qu
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 #if ENABLE_CTRL_M_ON_WINDOWS
 static std::string format_device_string(int vid, int pid)
 {
@@ -319,7 +319,7 @@ bool Mouse3DController::State::process_mouse_wheel()
     m_mouse_wheel_counter = 0;
     return true;
 }
-#endif // WIN32
+#endif // _WIN32
 
 bool Mouse3DController::State::apply(const Mouse3DController::Params &params, Camera& camera)
 {
@@ -700,10 +700,10 @@ void Mouse3DController::shutdown()
 	}
 
 #if ENABLE_CTRL_M_ON_WINDOWS
-#ifdef WIN32
+#ifdef _WIN32
     if (!m_device_str.empty())
         m_params_by_device[m_device_str] = m_params_ui;
-#endif // WIN32
+#endif // _WIN32
 #endif // ENABLE_CTRL_M_ON_WINDOWS
 }
 
diff --git a/src/slic3r/GUI/Mouse3DController.hpp b/src/slic3r/GUI/Mouse3DController.hpp
index 559e0874f..d99cbad1e 100644
--- a/src/slic3r/GUI/Mouse3DController.hpp
+++ b/src/slic3r/GUI/Mouse3DController.hpp
@@ -189,7 +189,7 @@ public:
     bool handle_input(const DataPacketAxis& packet);
 #endif // __APPLE__
 
-#ifdef WIN32
+#ifdef _WIN32
 	bool handle_raw_input_win32(const unsigned char *data, const int packet_lenght);
 
     // Called by Win32 HID enumeration callback.
@@ -202,7 +202,7 @@ public:
     // if the application does not register at the driver. This is a workaround to ignore these superfluous
     // mouse wheel events.
     bool process_mouse_wheel() { return m_state.process_mouse_wheel(); }
-#endif // WIN32
+#endif // _WIN32
 
     // Apply the received 3DConnexion mouse events to the camera. Called from the UI rendering thread.
     bool apply(Camera& camera);
diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index 6a1a95b03..a2d65d2d1 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -202,6 +202,17 @@ void PreferencesDialog::build()
 	option = Option(def, "show_splash_screen");
 	m_optgroup_general->append_single_option_line(option);
 
+#if ENABLE_CTRL_M_ON_WINDOWS
+#ifdef _WIN32
+	def.label = L("Enable support for legacy 3DConnexion devices");
+	def.type = coBool;
+	def.tooltip = L("If enabled, the legacy 3DConnexion devices settings dialog is available by pressing CTRL+M");
+	def.set_default_value(new ConfigOptionBool{ app_config->get("use_legacy_3DConnexion") == "1" });
+	option = Option(def, "use_legacy_3DConnexion");
+	m_optgroup_general->append_single_option_line(option);
+#endif // _WIN32
+#endif // ENABLE_CTRL_M_ON_WINDOWS
+
 	m_optgroup_general->activate();
 
 	m_optgroup_camera = std::make_shared<ConfigOptionsGroup>(this, _L("Camera"));

From d9be78d4cb1188073c2b3502c573154961ef24f2 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Thu, 26 Nov 2020 13:37:08 +0100
Subject: [PATCH 122/138] Fixed bug introduced with
 4d483f323f732ceccf6e581e160b962aa49d09f5

---
 src/slic3r/GUI/DoubleSlider.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp
index 3fb47418d..34660927a 100644
--- a/src/slic3r/GUI/DoubleSlider.cpp
+++ b/src/slic3r/GUI/DoubleSlider.cpp
@@ -629,9 +629,7 @@ wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer
         return wxString::Format("%d", static_cast<unsigned int>(m_values[value]));
     else {
         if (label_type == ltEstimatedTime) {
-            if (value > m_layers_times.size() - 1)
-                return wxEmptyString;
-            return short_and_splitted_time(get_time_dhms(m_layers_times[value]));
+            return (value < m_layers_times.size()) ? short_and_splitted_time(get_time_dhms(m_layers_times[value])) : "";
         }
         wxString str = m_values.empty() ?
             wxString::Format("%.*f", 2, m_label_koef * value) :

From 7f22ce63f65e2af48631eaed0ec1c396a373ea76 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Thu, 26 Nov 2020 13:45:30 +0100
Subject: [PATCH 123/138] Refactoring: 1. Use C++ style cast instead of C style
 2. Deleted unused code from Search

---
 src/slic3r/GUI/AboutDialog.cpp            |  6 +-
 src/slic3r/GUI/ConfigSnapshotDialog.cpp   |  3 +-
 src/slic3r/GUI/ExtraRenderers.cpp         |  2 +-
 src/slic3r/GUI/ExtruderSequenceDialog.cpp |  3 +-
 src/slic3r/GUI/Field.hpp                  | 49 ++----------
 src/slic3r/GUI/GUI_App.cpp                |  2 +-
 src/slic3r/GUI/KBShortcutsDialog.cpp      |  2 +-
 src/slic3r/GUI/ObjectDataViewModel.cpp    | 90 +++++++++++------------
 src/slic3r/GUI/ObjectDataViewModel.hpp    | 27 ++++---
 src/slic3r/GUI/OptionsGroup.cpp           |  7 +-
 src/slic3r/GUI/OptionsGroup.hpp           | 17 +----
 src/slic3r/GUI/Plater.cpp                 | 12 +--
 src/slic3r/GUI/PresetComboBoxes.cpp       |  2 +-
 src/slic3r/GUI/PresetComboBoxes.hpp       |  4 +-
 src/slic3r/GUI/Search.cpp                 | 75 -------------------
 src/slic3r/GUI/Search.hpp                 | 44 ++---------
 src/slic3r/GUI/SysInfoDialog.cpp          |  3 +-
 src/slic3r/GUI/UnsavedChangesDialog.cpp   | 18 ++---
 18 files changed, 110 insertions(+), 256 deletions(-)

diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp
index 6e3f8ecc8..dca77aa24 100644
--- a/src/slic3r/GUI/AboutDialog.cpp
+++ b/src/slic3r/GUI/AboutDialog.cpp
@@ -4,7 +4,7 @@
 #include "libslic3r/Utils.hpp"
 #include "GUI.hpp"
 #include "GUI_App.hpp"
-
+#include "MainFrame.hpp"
 
 namespace Slic3r { 
 namespace GUI {
@@ -37,7 +37,7 @@ void AboutDialogLogo::onRepaint(wxEvent &event)
 // CopyrightsDialog
 // -----------------------------------------
 CopyrightsDialog::CopyrightsDialog()
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, from_u8((boost::format("%1% - %2%")
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, from_u8((boost::format("%1% - %2%")
         % (wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME)
         % _utf8(L("Portions copyright"))).str()),
         wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
@@ -201,7 +201,7 @@ void CopyrightsDialog::onCloseDialog(wxEvent &)
 }
 
 AboutDialog::AboutDialog()
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, from_u8((boost::format(_utf8(L("About %s"))) % (wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME)).str()), wxDefaultPosition,
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, from_u8((boost::format(_utf8(L("About %s"))) % (wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME)).str()), wxDefaultPosition,
         wxDefaultSize, /*wxCAPTION*/wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
     SetFont(wxGetApp().normal_font());
diff --git a/src/slic3r/GUI/ConfigSnapshotDialog.cpp b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
index fb171a177..487604b1c 100644
--- a/src/slic3r/GUI/ConfigSnapshotDialog.cpp
+++ b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
@@ -6,6 +6,7 @@
 #include "libslic3r/Utils.hpp"
 #include "libslic3r/Time.hpp"
 #include "GUI_App.hpp"
+#include "MainFrame.hpp"
 #include "wxExtensions.hpp"
 
 namespace Slic3r { 
@@ -109,7 +110,7 @@ static wxString generate_html_page(const Config::SnapshotDB &snapshot_db, const
 }
 
 ConfigSnapshotDialog::ConfigSnapshotDialog(const Config::SnapshotDB &snapshot_db, const wxString &on_snapshot)
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, _(L("Configuration Snapshots")), wxDefaultPosition,
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, _(L("Configuration Snapshots")), wxDefaultPosition,
                wxSize(45 * wxGetApp().em_unit(), 40 * wxGetApp().em_unit()), 
                wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMAXIMIZE_BOX)
 {
diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp
index 2915d498c..27e2c1224 100644
--- a/src/slic3r/GUI/ExtraRenderers.cpp
+++ b/src/slic3r/GUI/ExtraRenderers.cpp
@@ -316,7 +316,7 @@ wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelR
 
 bool BitmapChoiceRenderer::GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value)
 {
-    wxBitmapComboBox* c = (wxBitmapComboBox*)ctrl;
+    wxBitmapComboBox* c = static_cast<wxBitmapComboBox*>(ctrl);
     int selection = c->GetSelection();
     if (selection < 0)
         return false;
diff --git a/src/slic3r/GUI/ExtruderSequenceDialog.cpp b/src/slic3r/GUI/ExtruderSequenceDialog.cpp
index d009648c2..e505f1470 100644
--- a/src/slic3r/GUI/ExtruderSequenceDialog.cpp
+++ b/src/slic3r/GUI/ExtruderSequenceDialog.cpp
@@ -14,13 +14,14 @@
 #include "GUI_App.hpp"
 #include "I18N.hpp"
 #include "OptionsGroup.hpp"
+#include "MainFrame.hpp"
 
 
 namespace Slic3r {
 namespace GUI {
 
 ExtruderSequenceDialog::ExtruderSequenceDialog(const DoubleSlider::ExtrudersSequence& sequence)
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _(L("Set extruder sequence")),
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _(L("Set extruder sequence")),
         wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER),
     m_sequence(sequence)
 {
diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp
index 6cadb607d..9a15542de 100644
--- a/src/slic3r/GUI/Field.hpp
+++ b/src/slic3r/GUI/Field.hpp
@@ -38,39 +38,6 @@ using t_back_to_init = std::function<void(const std::string&)>;
 
 wxString double_to_string(double const value, const int max_precision = 4);
 
-class RevertButton : public ScalableButton
-{
-    bool hidden = false; // never show button if it's hidden ones
-public:
-// 	RevertButton() {} 
-// 	RevertButton(wxWindow* parent, wxWindowID id, const wxString& label = wxEmptyString,
-// 		const wxPoint& pos = wxDefaultPosition,
-// 		const wxSize& size = wxDefaultSize, long style = 0,
-// 		const wxValidator& validator = wxDefaultValidator,
-// 		const wxString& name = wxTextCtrlNameStr)
-// 	{
-// 		this->Create(parent, id, label, pos, size, style, validator, name);
-// 	}
-    RevertButton(
-        wxWindow *parent,
-        const std::string& icon_name = ""
-        ) :
-        ScalableButton(parent, wxID_ANY, icon_name) {}
-
-	// overridden from wxWindow base class
-	virtual bool
-		AcceptsFocusFromKeyboard() const { return false; }
-
-    void set_as_hidden() {
-        Hide();
-        hidden = true;
-	}
-
-    virtual bool Show(bool show = true) override {
-        return wxButton::Show(hidden ? false : show);
-	}
-};
-
 class Field {
 protected:
     // factory function to defer and enforce creation of derived type. 
@@ -283,14 +250,14 @@ public:
     void propagate_value();
     wxWindow* window {nullptr};
 
-    virtual void	set_value(const std::string& value, bool change_event = false) {
+    void	set_value(const std::string& value, bool change_event = false) {
 		m_disable_change_event = !change_event;
         dynamic_cast<wxTextCtrl*>(window)->SetValue(wxString(value));
 		m_disable_change_event = false;
     }
-	virtual void	set_value(const boost::any& value, bool change_event = false) override;
-    virtual void    set_last_meaningful_value() override;
-    virtual void	set_na_value() override;
+	void	set_value(const boost::any& value, bool change_event = false) override;
+    void    set_last_meaningful_value() override;
+    void	set_na_value() override;
 
 	boost::any&		get_value() override;
 
@@ -392,7 +359,7 @@ public:
 
 	void			set_selection();
 	void			set_value(const std::string& value, bool change_event = false);
-	void			set_value(const boost::any& value, bool change_event = false);
+	void			set_value(const boost::any& value, bool change_event = false) override;
 	void			set_values(const std::vector<std::string> &values);
 	void			set_values(const wxArrayString &values);
 	boost::any&		get_value() override;
@@ -448,7 +415,7 @@ public:
     // Propagate value from field to the OptionGroupe and Config after kill_focus/ENTER
     void            propagate_value(wxTextCtrl* win);
 	void			set_value(const Vec2d& value, bool change_event = false);
-	void			set_value(const boost::any& value, bool change_event = false);
+	void			set_value(const boost::any& value, bool change_event = false) override;
 	boost::any&		get_value() override;
 
     void            msw_rescale() override;
@@ -478,7 +445,7 @@ public:
 		dynamic_cast<wxStaticText*>(window)->SetLabel(wxString::FromUTF8(value.data()));
 		m_disable_change_event = false;
 	}
-	void			set_value(const boost::any& value, bool change_event = false) {
+	void			set_value(const boost::any& value, bool change_event = false) override {
 		m_disable_change_event = !change_event;
 		dynamic_cast<wxStaticText*>(window)->SetLabel(boost::any_cast<wxString>(value));
 		m_disable_change_event = false;
@@ -509,7 +476,7 @@ public:
 	void			BUILD()  override;
 
 	void			set_value(const int value, bool change_event = false);
-	void			set_value(const boost::any& value, bool change_event = false);
+	void			set_value(const boost::any& value, bool change_event = false) override;
 	boost::any&		get_value() override;
 
 	void			enable() override {
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index dc5b5ad6d..cebd4482e 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -86,7 +86,7 @@ class SplashScreen : public wxSplashScreen
 {
 public:
     SplashScreen(const wxBitmap& bitmap, long splashStyle, int milliseconds, wxPoint pos = wxDefaultPosition)
-        : wxSplashScreen(bitmap, splashStyle, milliseconds, (wxWindow*)wxGetApp().mainframe, wxID_ANY, wxDefaultPosition, wxDefaultSize, 
+        : wxSplashScreen(bitmap, splashStyle, milliseconds, static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, wxDefaultPosition, wxDefaultSize,
 #ifdef __APPLE__
             wxSIMPLE_BORDER | wxFRAME_NO_TASKBAR | wxSTAY_ON_TOP
 #else
diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp
index 608cc7a48..53ae8f66c 100644
--- a/src/slic3r/GUI/KBShortcutsDialog.cpp
+++ b/src/slic3r/GUI/KBShortcutsDialog.cpp
@@ -31,7 +31,7 @@ namespace Slic3r {
 namespace GUI {
 
 KBShortcutsDialog::KBShortcutsDialog()
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, wxString(wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME) + " - " + _L("Keyboard Shortcuts"),
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, wxString(wxGetApp().is_editor() ? SLIC3R_APP_NAME : GCODEVIEWER_APP_NAME) + " - " + _L("Keyboard Shortcuts"),
     wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp
index 569dbf9a2..ef65f5974 100644
--- a/src/slic3r/GUI/ObjectDataViewModel.cpp
+++ b/src/slic3r/GUI/ObjectDataViewModel.cpp
@@ -285,7 +285,7 @@ wxDataViewItem ObjectDataViewModel::AddVolumeChild( const wxDataViewItem &parent
                                                     const int extruder/* = 0*/,
                                                     const bool create_frst_child/* = true*/)
 {
-	ObjectDataViewModelNode *root = (ObjectDataViewModelNode*)parent_item.GetID();
+	ObjectDataViewModelNode *root = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
 	if (!root) return wxDataViewItem(0);
 
     wxString extruder_str = extruder == 0 ? _(L("default")) : wxString::Format("%d", extruder);
@@ -331,7 +331,7 @@ wxDataViewItem ObjectDataViewModel::AddVolumeChild( const wxDataViewItem &parent
 
 wxDataViewItem ObjectDataViewModel::AddSettingsChild(const wxDataViewItem &parent_item)
 {
-    ObjectDataViewModelNode *root = (ObjectDataViewModelNode*)parent_item.GetID();
+    ObjectDataViewModelNode *root = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
     if (!root) return wxDataViewItem(0);
 
     const auto node = new ObjectDataViewModelNode(root, itSettings);
@@ -370,7 +370,7 @@ static bool append_root_node(ObjectDataViewModelNode *parent_node,
 
 wxDataViewItem ObjectDataViewModel::AddRoot(const wxDataViewItem &parent_item, ItemType root_type)
 {
-    ObjectDataViewModelNode *parent_node = (ObjectDataViewModelNode*)parent_item.GetID();
+    ObjectDataViewModelNode *parent_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
     if (!parent_node) return wxDataViewItem(0);
 
     // get InstanceRoot node
@@ -408,7 +408,7 @@ wxDataViewItem ObjectDataViewModel::AddInstanceChild(const wxDataViewItem& paren
     const wxDataViewItem inst_root_item = AddInstanceRoot(parent_item);
     if (!inst_root_item) return wxDataViewItem(0);
 
-    ObjectDataViewModelNode* inst_root_node = (ObjectDataViewModelNode*)inst_root_item.GetID();
+    ObjectDataViewModelNode* inst_root_node = static_cast<ObjectDataViewModelNode*>(inst_root_item.GetID());
 
     // Add instance nodes
     ObjectDataViewModelNode *instance_node = nullptr;    
@@ -437,7 +437,7 @@ void ObjectDataViewModel::UpdateObjectPrintable(wxDataViewItem parent_item)
     if (!inst_root_item) 
         return;
 
-    ObjectDataViewModelNode* inst_root_node = (ObjectDataViewModelNode*)inst_root_item.GetID();
+    ObjectDataViewModelNode* inst_root_node = static_cast<ObjectDataViewModelNode*>(inst_root_item.GetID());
 
     const size_t child_cnt = inst_root_node->GetChildren().Count();
     PrintIndicator obj_pi = piUnprintable;
@@ -447,7 +447,7 @@ void ObjectDataViewModel::UpdateObjectPrintable(wxDataViewItem parent_item)
             break;
         }
     // and set printable state for object_node to piUndef
-    ObjectDataViewModelNode* obj_node = (ObjectDataViewModelNode*)parent_item.GetID();
+    ObjectDataViewModelNode* obj_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
     obj_node->set_printable_icon(obj_pi);
     ItemChanged(parent_item);
 }
@@ -459,10 +459,10 @@ void ObjectDataViewModel::UpdateInstancesPrintable(wxDataViewItem parent_item)
     if (!inst_root_item) 
         return;
 
-    ObjectDataViewModelNode* obj_node = (ObjectDataViewModelNode*)parent_item.GetID();
+    ObjectDataViewModelNode* obj_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
     const PrintIndicator obj_pi = obj_node->IsPrintable();
 
-    ObjectDataViewModelNode* inst_root_node = (ObjectDataViewModelNode*)inst_root_item.GetID();
+    ObjectDataViewModelNode* inst_root_node = static_cast<ObjectDataViewModelNode*>(inst_root_item.GetID());
     const size_t child_cnt = inst_root_node->GetChildren().Count();
 
     for (size_t i=0; i < child_cnt; i++)
@@ -476,7 +476,7 @@ void ObjectDataViewModel::UpdateInstancesPrintable(wxDataViewItem parent_item)
 
 bool ObjectDataViewModel::IsPrintable(const wxDataViewItem& item) const
 {
-    ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     if (!node)
         return false;
 
@@ -493,7 +493,7 @@ wxDataViewItem ObjectDataViewModel::AddLayersChild(const wxDataViewItem &parent_
                                                    const int extruder/* = 0*/, 
                                                    const int index /* = -1*/)
 {
-    ObjectDataViewModelNode *parent_node = (ObjectDataViewModelNode*)parent_item.GetID();
+    ObjectDataViewModelNode *parent_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
     if (!parent_node) return wxDataViewItem(0);
 
     wxString extruder_str = extruder == 0 ? _(L("default")) : wxString::Format("%d", extruder);
@@ -530,7 +530,7 @@ wxDataViewItem ObjectDataViewModel::AddLayersChild(const wxDataViewItem &parent_
 wxDataViewItem ObjectDataViewModel::Delete(const wxDataViewItem &item)
 {
 	auto ret_item = wxDataViewItem(0);
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	if (!node)      // happens if item.IsOk()==false
 		return ret_item;
 
@@ -701,7 +701,7 @@ wxDataViewItem ObjectDataViewModel::Delete(const wxDataViewItem &item)
 wxDataViewItem ObjectDataViewModel::DeleteLastInstance(const wxDataViewItem &parent_item, size_t num)
 {
     auto ret_item = wxDataViewItem(0);
-    ObjectDataViewModelNode *parent_node = (ObjectDataViewModelNode*)parent_item.GetID();
+    ObjectDataViewModelNode *parent_node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
     if (!parent_node) return ret_item;
 
     const int inst_root_id = get_root_idx(parent_node, itInstanceRoot);
@@ -755,7 +755,7 @@ void ObjectDataViewModel::DeleteAll()
 
 void ObjectDataViewModel::DeleteChildren(wxDataViewItem& parent)
 {
-    ObjectDataViewModelNode *root = (ObjectDataViewModelNode*)parent.GetID();
+    ObjectDataViewModelNode *root = static_cast<ObjectDataViewModelNode*>(parent.GetID());
     if (!root)      // happens if item.IsOk()==false
         return;
 
@@ -787,7 +787,7 @@ void ObjectDataViewModel::DeleteChildren(wxDataViewItem& parent)
 
 void ObjectDataViewModel::DeleteVolumeChildren(wxDataViewItem& parent)
 {
-    ObjectDataViewModelNode *root = (ObjectDataViewModelNode*)parent.GetID();
+    ObjectDataViewModelNode *root = static_cast<ObjectDataViewModelNode*>(parent.GetID());
     if (!root)      // happens if item.IsOk()==false
         return;
 
@@ -821,7 +821,7 @@ void ObjectDataViewModel::DeleteVolumeChildren(wxDataViewItem& parent)
 
 void ObjectDataViewModel::DeleteSettings(const wxDataViewItem& parent)
 {
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)parent.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(parent.GetID());
     if (!node) return;
 
     // if volume has a "settings"item, than delete it before volume deleting
@@ -880,7 +880,7 @@ wxDataViewItem ObjectDataViewModel::GetItemById(const int obj_idx, const int sub
     if (!item)
         return wxDataViewItem(0);
 
-    auto parent = (ObjectDataViewModelNode*)item.GetID();
+    auto parent = static_cast<ObjectDataViewModelNode*>(item.GetID());
     for (size_t i = 0; i < parent->GetChildCount(); i++)
         if (parent->GetNthChild(i)->m_idx == sub_obj_idx)
             return wxDataViewItem(parent->GetNthChild(i));
@@ -909,7 +909,7 @@ wxDataViewItem ObjectDataViewModel::GetItemByLayerRange(const int obj_idx, const
     if (!item)
         return wxDataViewItem(0);
 
-    auto parent = (ObjectDataViewModelNode*)item.GetID();
+    auto parent = static_cast<ObjectDataViewModelNode*>(item.GetID());
     for (size_t i = 0; i < parent->GetChildCount(); i++)
         if (parent->GetNthChild(i)->m_layer_range == layer_range)
             return wxDataViewItem(parent->GetNthChild(i));
@@ -931,7 +931,7 @@ int ObjectDataViewModel::GetIdByItem(const wxDataViewItem& item) const
 	if(!item.IsOk())
         return -1;
 
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	auto it = find(m_objects.begin(), m_objects.end(), node);
 	if (it == m_objects.end())
 		return -1;
@@ -943,7 +943,7 @@ int ObjectDataViewModel::GetIdByItemAndType(const wxDataViewItem& item, const It
 {
 	wxASSERT(item.IsOk());
 
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	if (!node || node->m_type != type)
 		return -1;
 	return node->GetIdx();
@@ -973,7 +973,7 @@ t_layer_height_range ObjectDataViewModel::GetLayerRangeByItem(const wxDataViewIt
 {
     wxASSERT(item.IsOk());
 
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     if (!node || node->m_type != itLayer)
         return { 0.0f, 0.0f };
     return node->GetLayerRange();
@@ -1029,7 +1029,7 @@ void ObjectDataViewModel::GetItemInfo(const wxDataViewItem& item, ItemType& type
     wxASSERT(item.IsOk());
     type = itUndef;
 
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     if (!node || 
         node->GetIdx() <-1 || 
         ( node->GetIdx() == -1 && 
@@ -1098,7 +1098,7 @@ bool ObjectDataViewModel::InvalidItem(const wxDataViewItem& item)
     if (!item)
         return true;
 
-    ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     if (!node || node->invalid()) 
         return true;
 
@@ -1107,7 +1107,7 @@ bool ObjectDataViewModel::InvalidItem(const wxDataViewItem& item)
 
 wxString ObjectDataViewModel::GetName(const wxDataViewItem &item) const
 {
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	if (!node)      // happens if item.IsOk()==false
 		return wxEmptyString;
 
@@ -1116,13 +1116,13 @@ wxString ObjectDataViewModel::GetName(const wxDataViewItem &item) const
 
 wxBitmap& ObjectDataViewModel::GetBitmap(const wxDataViewItem &item) const
 {
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     return node->m_bmp;
 }
 
 wxString ObjectDataViewModel::GetExtruder(const wxDataViewItem& item) const
 {
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	if (!node)      // happens if item.IsOk()==false
 		return wxEmptyString;
 
@@ -1131,7 +1131,7 @@ wxString ObjectDataViewModel::GetExtruder(const wxDataViewItem& item) const
 
 int ObjectDataViewModel::GetExtruderNumber(const wxDataViewItem& item) const
 {
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	if (!node)      // happens if item.IsOk()==false
 		return 0;
 
@@ -1142,7 +1142,7 @@ void ObjectDataViewModel::GetValue(wxVariant &variant, const wxDataViewItem &ite
 {
 	wxASSERT(item.IsOk());
 
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	switch (col)
 	{
 	case colPrint:
@@ -1166,7 +1166,7 @@ bool ObjectDataViewModel::SetValue(const wxVariant &variant, const wxDataViewIte
 {
 	wxASSERT(item.IsOk());
 
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	return node->SetValue(variant, col);
 }
 
@@ -1196,7 +1196,7 @@ void ObjectDataViewModel::SetExtruder(const wxString& extruder, wxDataViewItem i
 
 void ObjectDataViewModel::AddAllChildren(const wxDataViewItem& parent)
 {
-    ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)parent.GetID();
+    ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(parent.GetID());
     if (!node || node->GetChildCount() == 0)
         return;
 
@@ -1222,7 +1222,7 @@ wxDataViewItem ObjectDataViewModel::ReorganizeChildren( const int current_volume
     if (current_volume_id == new_volume_id)
         return ret_item;
     wxASSERT(parent.IsOk());
-    ObjectDataViewModelNode *node_parent = (ObjectDataViewModelNode*)parent.GetID();
+    ObjectDataViewModelNode *node_parent = static_cast<ObjectDataViewModelNode*>(parent.GetID());
     if (!node_parent)      // happens if item.IsOk()==false
         return ret_item;
 
@@ -1270,7 +1270,7 @@ wxDataViewItem ObjectDataViewModel::ReorganizeObjects(  const int current_id, co
 bool ObjectDataViewModel::IsEnabled(const wxDataViewItem &item, unsigned int col) const
 {
     wxASSERT(item.IsOk());
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 
     // disable extruder selection for the non "itObject|itVolume" item
     return !(col == colExtruder && node->m_extruder.IsEmpty());
@@ -1282,7 +1282,7 @@ wxDataViewItem ObjectDataViewModel::GetParent(const wxDataViewItem &item) const
 	if (!item.IsOk())
 		return wxDataViewItem(0);
 
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	assert(node != nullptr && node->valid());
 
 	// objects nodes has no parent too
@@ -1298,7 +1298,7 @@ wxDataViewItem ObjectDataViewModel::GetTopParent(const wxDataViewItem &item) con
 	if (!item.IsOk())
 		return wxDataViewItem(0);
 
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     if (node->m_type == itObject)
         return item;
 
@@ -1315,13 +1315,13 @@ bool ObjectDataViewModel::IsContainer(const wxDataViewItem &item) const
 	if (!item.IsOk())
 		return true;
 
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 	return node->IsContainer();
 }
 
 unsigned int ObjectDataViewModel::GetChildren(const wxDataViewItem &parent, wxDataViewItemArray &array) const
 {
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)parent.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(parent.GetID());
 	if (!node)
 	{
 		for (auto object : m_objects)
@@ -1346,7 +1346,7 @@ unsigned int ObjectDataViewModel::GetChildren(const wxDataViewItem &parent, wxDa
 
 void ObjectDataViewModel::GetAllChildren(const wxDataViewItem &parent, wxDataViewItemArray &array) const
 {
-	ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)parent.GetID();
+	ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(parent.GetID());
 	if (!node) {
 		for (auto object : m_objects)
 			array.Add(wxDataViewItem((void*)object));
@@ -1374,7 +1374,7 @@ ItemType ObjectDataViewModel::GetItemType(const wxDataViewItem &item) const
 {
     if (!item.IsOk())
         return itUndef;
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     return node->m_type < 0 ? itUndef : node->m_type;
 }
 
@@ -1383,7 +1383,7 @@ wxDataViewItem ObjectDataViewModel::GetItemByType(const wxDataViewItem &parent_i
     if (!parent_item.IsOk())
         return wxDataViewItem(0);
 
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)parent_item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(parent_item.GetID());
     if (node->GetChildCount() == 0)
         return wxDataViewItem(0);
 
@@ -1414,7 +1414,7 @@ bool ObjectDataViewModel::IsSettingsItem(const wxDataViewItem &item) const
 {
     if (!item.IsOk())
         return false;
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     return node->m_type == itSettings;
 }
 
@@ -1422,7 +1422,7 @@ void ObjectDataViewModel::UpdateSettingsDigest(const wxDataViewItem &item,
                                                     const std::vector<std::string>& categories)
 {
     if (!item.IsOk()) return;
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     if (!node->update_settings_digest(categories))
         return;
     ItemChanged(item);
@@ -1433,7 +1433,7 @@ void ObjectDataViewModel::SetVolumeType(const wxDataViewItem &item, const Slic3r
     if (!item.IsOk() || GetItemType(item) != itVolume) 
         return;
 
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     node->SetBitmap(*m_volume_bmps[int(type)]);
     ItemChanged(item);
 }
@@ -1451,7 +1451,7 @@ wxDataViewItem ObjectDataViewModel::SetPrintableState(
         item =  subobj_type&itInstance ? GetItemByInstanceId(obj_idx, subobj_idx) :
                 GetItemByVolumeId(obj_idx, subobj_idx);
 
-    ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(item.GetID());
     if (!node)
         return wxDataViewItem(0);
     node->set_printable_icon(printable);
@@ -1467,7 +1467,7 @@ wxDataViewItem ObjectDataViewModel::SetObjectPrintableState(
     PrintIndicator  printable,
     wxDataViewItem  obj_item)
 {
-    ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)obj_item.GetID();
+    ObjectDataViewModelNode* node = static_cast<ObjectDataViewModelNode*>(obj_item.GetID());
     if (!node)
         return wxDataViewItem(0);
     node->set_printable_icon(printable);
@@ -1488,7 +1488,7 @@ void ObjectDataViewModel::Rescale()
         if (!item.IsOk())
             continue;
 
-        ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+        ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
         node->msw_rescale();
 
         switch (node->m_type)
@@ -1537,7 +1537,7 @@ void ObjectDataViewModel::DeleteWarningIcon(const wxDataViewItem& item, const bo
     if (!item.IsOk())
         return;
 
-    ObjectDataViewModelNode *node = (ObjectDataViewModelNode*)item.GetID();
+    ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode*>(item.GetID());
 
     if (!node->GetBitmap().IsOk() || !(node->GetType() & (itVolume | itObject)))
         return;
diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp
index 807f1347a..17ad2047f 100644
--- a/src/slic3r/GUI/ObjectDataViewModel.hpp
+++ b/src/slic3r/GUI/ObjectDataViewModel.hpp
@@ -300,15 +300,15 @@ public:
 
     // helper methods to change the model
 
-    virtual unsigned int    GetColumnCount() const override { return 3;}
-    virtual wxString        GetColumnType(unsigned int col) const override{ return wxT("string"); }
+    unsigned int    GetColumnCount() const override { return 3;}
+    wxString        GetColumnType(unsigned int col) const override{ return wxT("string"); }
 
-    virtual void GetValue(  wxVariant &variant,
-                            const wxDataViewItem &item,
-                            unsigned int col) const override;
-    virtual bool SetValue(  const wxVariant &variant,
-                            const wxDataViewItem &item,
-                            unsigned int col) override;
+    void GetValue(  wxVariant &variant,
+                    const wxDataViewItem &item,
+                    unsigned int col) const override;
+    bool SetValue(  const wxVariant &variant,
+                    const wxDataViewItem &item,
+                    unsigned int col) override;
     bool SetValue(  const wxVariant &variant,
                     const int item_idx,
                     unsigned int col);
@@ -322,18 +322,17 @@ public:
                                         const wxDataViewItem &parent);
     wxDataViewItem  ReorganizeObjects( int current_id, int new_id);
 
-    virtual bool    IsEnabled(const wxDataViewItem &item, unsigned int col) const override;
+    bool    IsEnabled(const wxDataViewItem &item, unsigned int col) const override;
 
-    virtual wxDataViewItem  GetParent(const wxDataViewItem &item) const override;
+    wxDataViewItem  GetParent(const wxDataViewItem &item) const override;
     // get object item
     wxDataViewItem          GetTopParent(const wxDataViewItem &item) const;
-    virtual bool            IsContainer(const wxDataViewItem &item) const override;
-    virtual unsigned int    GetChildren(const wxDataViewItem &parent,
-                                        wxDataViewItemArray &array) const override;
+    bool            IsContainer(const wxDataViewItem &item) const override;
+    unsigned int    GetChildren(const wxDataViewItem &parent, wxDataViewItemArray &array) const override;
     void GetAllChildren(const wxDataViewItem &parent,wxDataViewItemArray &array) const;
     // Is the container just a header or an item with all columns
     // In our case it is an item with all columns
-    virtual bool    HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override {	return true; }
+    bool    HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override {	return true; }
 
     ItemType        GetItemType(const wxDataViewItem &item) const ;
     wxDataViewItem  GetItemByType(  const wxDataViewItem &parent_item,
diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp
index dee250fa7..9da291984 100644
--- a/src/slic3r/GUI/OptionsGroup.cpp
+++ b/src/slic3r/GUI/OptionsGroup.cpp
@@ -111,6 +111,11 @@ OptionsGroup::OptionsGroup(	wxWindow* _parent, const wxString& title,
 {
 }
 
+wxWindow* OptionsGroup::ctrl_parent() const
+{
+	return this->custom_ctrl && m_use_custom_ctrl_as_parent ? static_cast<wxWindow*>(this->custom_ctrl) : (this->stb ? static_cast<wxWindow*>(this->stb) : this->parent());
+}
+
 bool OptionsGroup::is_legend_line()
 {
 	if (m_lines.size() == 1) {
@@ -209,7 +214,7 @@ void OptionsGroup::activate_line(Line& line)
 	bool is_legend_line = option_set.front().opt.gui_type == "legend";
 
     if (!custom_ctrl && m_use_custom_ctrl) {
-        custom_ctrl = new OG_CustomCtrl(is_legend_line ? this->parent() : (wxWindow*)this->stb, this);
+        custom_ctrl = new OG_CustomCtrl(is_legend_line ? this->parent() : static_cast<wxWindow*>(this->stb), this);
 		if (is_legend_line)
 			sizer->Add(custom_ctrl, 0, wxEXPAND | wxLEFT, wxOSX ? 0 : 10);
 		else
diff --git a/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp
index 5a18332cd..48e4ba0e9 100644
--- a/src/slic3r/GUI/OptionsGroup.hpp
+++ b/src/slic3r/GUI/OptionsGroup.hpp
@@ -115,22 +115,9 @@ public:
     /// Returns a copy of the pointer of the parent wxWindow.
     /// Accessor function is because users are not allowed to change the parent
     /// but defining it as const means a lot of const_casts to deal with wx functions.
-    inline wxWindow* parent() const { 
-#if 0//#ifdef __WXGTK__
-		return m_panel;
-#else
-		return m_parent;
-#endif /* __WXGTK__ */
-    }
-#if 0//#ifdef __WXGTK__
-    wxWindow* get_parent() const {
-        return m_parent;
-    }
-#endif /* __WXGTK__ */
+    inline wxWindow* parent() const { return m_parent; }
 
-    wxWindow* ctrl_parent() const {
-    	return this->custom_ctrl && m_use_custom_ctrl_as_parent ? (wxWindow*)this->custom_ctrl : (this->stb ? (wxWindow*)this->stb : this->parent());
-    }
+    wxWindow*   ctrl_parent() const;
 
 	void		append_line(const Line& line);
 	// create controls for the option group
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 05a30584a..edd6b72af 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1396,7 +1396,7 @@ protected:
 };
 
 ProjectDropDialog::ProjectDropDialog(const std::string& filename)
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY,
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY,
         from_u8((boost::format(_utf8(L("%s - Drop project file"))) % SLIC3R_APP_NAME).str()), wxDefaultPosition,
         wxDefaultSize, wxDEFAULT_DIALOG_STYLE)
 {
@@ -1463,7 +1463,7 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &fi
         }
 
         if (paths.size() > 1) {
-            wxMessageDialog((wxWindow*)m_plater, _L("You can open only one .gcode file at a time."),
+            wxMessageDialog(static_cast<wxWindow*>(m_plater), _L("You can open only one .gcode file at a time."),
                 wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal();
             return false;
         }
@@ -2070,7 +2070,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     q->SetDropTarget(new PlaterDropTarget(q));   // if my understanding is right, wxWindow takes the owenership
     q->Layout();
 
-    set_current_panel(wxGetApp().is_editor() ? (wxPanel*)view3D : (wxPanel*)preview);
+    set_current_panel(wxGetApp().is_editor() ? static_cast<wxPanel*>(view3D) : static_cast<wxPanel*>(preview));
     if (wxGetApp().is_gcode_viewer())
         preview->hide_layers_slider();
 
@@ -4836,7 +4836,7 @@ protected:
 };
 
 ProjectDropDialog::ProjectDropDialog(const std::string& filename)
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY,
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY,
         from_u8((boost::format(_utf8(L("%s - Drop project file"))) % SLIC3R_APP_NAME).str()), wxDefaultPosition,
         wxDefaultSize, wxDEFAULT_DIALOG_STYLE)
 {
@@ -4895,7 +4895,7 @@ bool Plater::load_files(const wxArrayString& filenames)
         }
 
         if (paths.size() > 1) {
-            wxMessageDialog((wxWindow*)this, _L("You can open only one .gcode file at a time."),
+            wxMessageDialog(static_cast<wxWindow*>(this), _L("You can open only one .gcode file at a time."),
                 wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal();
             return false;
         }
@@ -5021,7 +5021,7 @@ void Plater::remove(size_t obj_idx) { p->remove(obj_idx); }
 void Plater::reset() { p->reset(); }
 void Plater::reset_with_confirm()
 {
-    if (wxMessageDialog((wxWindow*)this, _L("All objects will be removed, continue?"), wxString(SLIC3R_APP_NAME) + " - " + _L("Delete all"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE).ShowModal() == wxID_YES)
+    if (wxMessageDialog(static_cast<wxWindow*>(this), _L("All objects will be removed, continue?"), wxString(SLIC3R_APP_NAME) + " - " + _L("Delete all"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE).ShowModal() == wxID_YES)
         reset();
 }
 
diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp
index 1fbded377..60cc2c620 100644
--- a/src/slic3r/GUI/PresetComboBoxes.cpp
+++ b/src/slic3r/GUI/PresetComboBoxes.cpp
@@ -519,7 +519,7 @@ void PresetComboBox::OnDrawItem(wxDC& dc,
     int item,
     int flags) const
 {
-    const wxBitmap& bmp = *(wxBitmap*)m_bitmaps[item];
+    const wxBitmap& bmp = *(static_cast<wxBitmap*>(m_bitmaps[item]));
     if (bmp.IsOk())
     {
         // we should use scaled! size values of bitmap
diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp
index 0bd4f036f..a76d7d18b 100644
--- a/src/slic3r/GUI/PresetComboBoxes.hpp
+++ b/src/slic3r/GUI/PresetComboBoxes.hpp
@@ -131,8 +131,8 @@ protected:
      * For this purpose control drawing methods and
      * control size calculation methods (virtual) are overridden.
      **/
-    virtual bool OnAddBitmap(const wxBitmap& bitmap) override;
-    virtual void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const override;
+    bool OnAddBitmap(const wxBitmap& bitmap) override;
+    void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const override;
 #endif
 
 private:
diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp
index 6be8f11bf..2dfa0dec1 100644
--- a/src/slic3r/GUI/Search.cpp
+++ b/src/slic3r/GUI/Search.cpp
@@ -335,81 +335,6 @@ void OptionsSearcher::add_key(const std::string& opt_key, const wxString& group,
 }
 
 
-//------------------------------------------
-//          SearchComboPopup
-//------------------------------------------
-
-
-void SearchComboPopup::Init()
-{
-    this->Bind(wxEVT_MOTION,    &SearchComboPopup::OnMouseMove,     this);
-    this->Bind(wxEVT_LEFT_UP,   &SearchComboPopup::OnMouseClick,    this);
-    this->Bind(wxEVT_KEY_DOWN,  &SearchComboPopup::OnKeyDown,       this);
-}
-
-bool SearchComboPopup::Create(wxWindow* parent)
-{
-    return wxListBox::Create(parent, 1, wxPoint(0, 0), wxDefaultSize);
-}
-
-void SearchComboPopup::SetStringValue(const wxString& s)
-{
-    int n = wxListBox::FindString(s);
-    if (n >= 0 && n < int(wxListBox::GetCount()))
-        wxListBox::Select(n);
-
-    // save a combo control's string
-    m_input_string = s;
-}
-
-void SearchComboPopup::ProcessSelection(int selection) 
-{
-    wxCommandEvent event(wxEVT_LISTBOX, GetId());
-    event.SetInt(selection);
-    event.SetEventObject(this);
-    ProcessEvent(event);
-
-    Dismiss();
-}
-
-void SearchComboPopup::OnMouseMove(wxMouseEvent& event)
-{
-    wxPoint pt = wxGetMousePosition() - this->GetScreenPosition();
-    int selection = this->HitTest(pt);
-    wxListBox::Select(selection);
-}
-
-void SearchComboPopup::OnMouseClick(wxMouseEvent&)
-{
-    int selection = wxListBox::GetSelection();
-    SetSelection(wxNOT_FOUND);
-    ProcessSelection(selection);
-}
-
-void SearchComboPopup::OnKeyDown(wxKeyEvent& event)
-{
-    int key = event.GetKeyCode();
-
-    // change selected item in the list
-    if (key == WXK_UP || key == WXK_DOWN)
-    {
-        int selection = wxListBox::GetSelection();
-
-        if (key == WXK_UP && selection > 0)
-            selection--;
-        if (key == WXK_DOWN && selection < int(wxListBox::GetCount() - 1))
-            selection++;
-
-        wxListBox::Select(selection);
-    }
-    // send wxEVT_LISTBOX event if "Enter" was pushed
-    else if (key == WXK_NUMPAD_ENTER || key == WXK_RETURN)
-        ProcessSelection(wxListBox::GetSelection());
-    else
-        event.Skip(); // !Needed to have EVT_CHAR generated as well
-}
-
-
 //------------------------------------------
 //          SearchDialog
 //------------------------------------------
diff --git a/src/slic3r/GUI/Search.hpp b/src/slic3r/GUI/Search.hpp
index a57e0d015..f8c9dffa6 100644
--- a/src/slic3r/GUI/Search.hpp
+++ b/src/slic3r/GUI/Search.hpp
@@ -131,38 +131,6 @@ public:
 };
 
 
-class SearchComboPopup : public wxListBox, public wxComboPopup
-{
-public:
-    // Initialize member variables
-    void Init();
-
-    // Create popup control
-    virtual bool Create(wxWindow* parent);
-    // Return pointer to the created control
-    virtual wxWindow* GetControl() { return this; }
-
-    // Translate string into a list selection
-    virtual void SetStringValue(const wxString& s);
-    // Get list selection as a string
-    virtual wxString GetStringValue() const {
-        // we shouldn't change a combo control's string
-        return m_input_string;
-    }
-
-    void ProcessSelection(int selection);
-
-    // Do mouse hot-tracking (which is typical in list popups)
-    void OnMouseMove(wxMouseEvent& event);
-    // On mouse left up, set the value and close the popup
-    void OnMouseClick(wxMouseEvent& WXUNUSED(event));
-    // process Up/Down arrows and Enter press
-    void OnKeyDown(wxKeyEvent& event);
-
-protected:
-    wxString m_input_string;
-};
-
 //------------------------------------------
 //          SearchDialog
 //------------------------------------------
@@ -204,7 +172,7 @@ public:
 
 protected:
     void on_dpi_changed(const wxRect& suggested_rect) override;
-    virtual void on_sys_color_changed() override;
+    void on_sys_color_changed() override;
 };
 
 
@@ -234,11 +202,11 @@ public:
 
     // implementation of base class virtuals to define model
 
-    virtual unsigned int GetColumnCount() const override { return colMax; }
-    virtual wxString GetColumnType(unsigned int col) const override;
-    virtual void GetValueByRow(wxVariant& variant, unsigned int row, unsigned int col) const override;
-    virtual bool GetAttrByRow(unsigned int row, unsigned int col, wxDataViewItemAttr& attr) const override { return true; }
-    virtual bool SetValueByRow(const wxVariant& variant, unsigned int row, unsigned int col) override { return false; }
+    unsigned int GetColumnCount() const override { return colMax; }
+    wxString GetColumnType(unsigned int col) const override;
+    void GetValueByRow(wxVariant& variant, unsigned int row, unsigned int col) const override;
+    bool GetAttrByRow(unsigned int row, unsigned int col, wxDataViewItemAttr& attr) const override { return true; }
+    bool SetValueByRow(const wxVariant& variant, unsigned int row, unsigned int col) override { return false; }
 };
 
 
diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp
index d112a295b..8d9572b47 100644
--- a/src/slic3r/GUI/SysInfoDialog.cpp
+++ b/src/slic3r/GUI/SysInfoDialog.cpp
@@ -12,6 +12,7 @@
 #include <wx/clipbrd.h>
 #include <wx/platinfo.h>
 #include "GUI_App.hpp"
+#include "MainFrame.hpp"
 #include "wxExtensions.hpp"
 
 #ifdef _WIN32
@@ -78,7 +79,7 @@ std::string get_mem_info(bool format_as_html)
 }
 
 SysInfoDialog::SysInfoDialog()
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, (wxGetApp().is_editor() ? wxString(SLIC3R_APP_NAME) : wxString(GCODEVIEWER_APP_NAME)) + " - " + _L("System Information"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, (wxGetApp().is_editor() ? wxString(SLIC3R_APP_NAME) : wxString(GCODEVIEWER_APP_NAME)) + " - " + _L("System Information"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
 	wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
 	SetBackgroundColour(bgr_clr);
diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp
index fd2682b28..149564fca 100644
--- a/src/slic3r/GUI/UnsavedChangesDialog.cpp
+++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp
@@ -327,7 +327,7 @@ static void update_parents(ModelNode* node)
 void UnsavedChangesModel::UpdateItemEnabling(wxDataViewItem item)
 {
     assert(item.IsOk());
-    ModelNode* node = (ModelNode*)item.GetID();
+    ModelNode* node = static_cast<ModelNode*>(item.GetID());
     node->UpdateEnabling();
 
     update_children(node);
@@ -337,7 +337,7 @@ void UnsavedChangesModel::UpdateItemEnabling(wxDataViewItem item)
 bool UnsavedChangesModel::IsEnabledItem(const wxDataViewItem& item)
 {
     assert(item.IsOk());
-    ModelNode* node = (ModelNode*)item.GetID();
+    ModelNode* node = static_cast<ModelNode*>(item.GetID());
     return node->IsToggled();
 }
 
@@ -345,7 +345,7 @@ void UnsavedChangesModel::GetValue(wxVariant& variant, const wxDataViewItem& ite
 {
     assert(item.IsOk());
 
-    ModelNode* node = (ModelNode*)item.GetID();
+    ModelNode* node = static_cast<ModelNode*>(item.GetID());
     switch (col)
     {
     case colToggle:
@@ -382,7 +382,7 @@ bool UnsavedChangesModel::SetValue(const wxVariant& variant, const wxDataViewIte
 {
     assert(item.IsOk());
 
-    ModelNode* node = (ModelNode*)item.GetID();
+    ModelNode* node = static_cast<ModelNode*>(item.GetID());
     switch (col)
     {
     case colToggle:
@@ -440,7 +440,7 @@ bool UnsavedChangesModel::IsEnabled(const wxDataViewItem& item, unsigned int col
         return true;
 
     // disable unchecked nodes
-    return ((ModelNode*)item.GetID())->IsToggled();
+    return (static_cast<ModelNode*>(item.GetID()))->IsToggled();
 }
 
 wxDataViewItem UnsavedChangesModel::GetParent(const wxDataViewItem& item) const
@@ -449,7 +449,7 @@ wxDataViewItem UnsavedChangesModel::GetParent(const wxDataViewItem& item) const
     if (!item.IsOk())
         return wxDataViewItem(nullptr);
 
-    ModelNode* node = (ModelNode*)item.GetID();
+    ModelNode* node = static_cast<ModelNode*>(item.GetID());
 
     // "MyMusic" also has no parent
     if (node->IsRoot())
@@ -464,7 +464,7 @@ bool UnsavedChangesModel::IsContainer(const wxDataViewItem& item) const
     if (!item.IsOk())
         return true;
 
-    ModelNode* node = (ModelNode*)item.GetID();
+    ModelNode* node = static_cast<ModelNode*>(item.GetID());
     return node->IsContainer();
 }
 
@@ -522,7 +522,7 @@ void UnsavedChangesModel::Rescale()
 //------------------------------------------
 
 UnsavedChangesDialog::UnsavedChangesDialog(const wxString& header)
-    : DPIDialog((wxWindow*)wxGetApp().mainframe , wxID_ANY, _L("PrusaSlicer is closing: Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, _L("PrusaSlicer is closing: Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
     m_app_config_key = "default_action_on_close_application";
 
@@ -539,7 +539,7 @@ UnsavedChangesDialog::UnsavedChangesDialog(const wxString& header)
 }
 
 UnsavedChangesDialog::UnsavedChangesDialog(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset)
-    : DPIDialog((wxWindow*)wxGetApp().mainframe, wxID_ANY, _L("Switching Presets: Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+    : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, _L("Switching Presets: Unsaved Changes"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
     m_app_config_key = "default_action_on_select_preset";
 

From dfbf4cbab2a61ef4258087f58e8b29fed2df42b6 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Thu, 26 Nov 2020 13:58:21 +0100
Subject: [PATCH 124/138] Fix bed filling with more existing instances than
 needed

---
 src/libnest2d/include/libnest2d/nester.hpp    |  8 ++++++
 .../include/libnest2d/selections/firstfit.hpp |  5 ++--
 .../selections/selection_boilerplate.hpp      |  3 +++
 src/libslic3r/Arrange.cpp                     | 25 ++++++++++++++++---
 src/libslic3r/Arrange.hpp                     |  5 ++--
 src/slic3r/GUI/Jobs/ArrangeJob.cpp            |  4 +--
 src/slic3r/GUI/Jobs/FillBedJob.cpp            | 15 ++++++-----
 7 files changed, 49 insertions(+), 16 deletions(-)

diff --git a/src/libnest2d/include/libnest2d/nester.hpp b/src/libnest2d/include/libnest2d/nester.hpp
index 2f207d526..59477b4f1 100644
--- a/src/libnest2d/include/libnest2d/nester.hpp
+++ b/src/libnest2d/include/libnest2d/nester.hpp
@@ -741,6 +741,10 @@ public:
         return impl_.getResult();
     }
 
+    inline int lastPackedBinId() const {
+        return impl_.lastPackedBinId();
+    }
+
     void clear() { impl_.clear(); }
 };
 
@@ -862,6 +866,10 @@ public:
     {
         return selector_.getResult();
     }
+
+    inline int lastPackedBinId() const {
+        return selector_.lastPackedBinId();
+    }
 };
 
 }
diff --git a/src/libnest2d/include/libnest2d/selections/firstfit.hpp b/src/libnest2d/include/libnest2d/selections/firstfit.hpp
index 373e8b618..e50fd7009 100644
--- a/src/libnest2d/include/libnest2d/selections/firstfit.hpp
+++ b/src/libnest2d/include/libnest2d/selections/firstfit.hpp
@@ -71,8 +71,9 @@ public:
         std::sort(store_.begin(), store_.end(), sortfunc);
 
         auto total = last-first;
-        auto makeProgress = [this, &total](Placer& placer, size_t idx) {
-            packed_bins_[idx] = placer.getItems();
+        auto makeProgress = [this, &total](Placer& placer, size_t bin_idx) {
+            packed_bins_[bin_idx] = placer.getItems();
+            this->last_packed_bin_id_ = int(bin_idx);
             this->progress_(static_cast<unsigned>(--total));
         };
 
diff --git a/src/libnest2d/include/libnest2d/selections/selection_boilerplate.hpp b/src/libnest2d/include/libnest2d/selections/selection_boilerplate.hpp
index e96378296..431159641 100644
--- a/src/libnest2d/include/libnest2d/selections/selection_boilerplate.hpp
+++ b/src/libnest2d/include/libnest2d/selections/selection_boilerplate.hpp
@@ -18,6 +18,8 @@ public:
         return packed_bins_;
     }
 
+    inline int lastPackedBinId() const { return last_packed_bin_id_; }
+
     inline void progressIndicator(ProgressFunction fn) { progress_ = fn; }
 
     inline void stopCondition(StopCondition cond) { stopcond_ = cond; }
@@ -54,6 +56,7 @@ protected:
     PackGroup packed_bins_;
     ProgressFunction progress_ = [](unsigned){};
     StopCondition stopcond_ = [](){ return false; };
+    int last_packed_bin_id_ = -1;
 };
 
 }
diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp
index 1036844d7..705e213e3 100644
--- a/src/libslic3r/Arrange.cpp
+++ b/src/libslic3r/Arrange.cpp
@@ -309,7 +309,7 @@ protected:
 public:
     AutoArranger(const TBin &                  bin,
                  const ArrangeParams           &params,
-                 std::function<void(unsigned, unsigned /*bins*/)> progressind,
+                 std::function<void(unsigned)> progressind,
                  std::function<bool(void)>     stopcond)
         : m_pck(bin, params.min_obj_distance)
         , m_bin(bin)
@@ -347,10 +347,27 @@ public:
         };
         
         m_pconf.object_function = get_objfn();
+
+        auto on_packed = params.on_packed;
         
-        if (progressind) m_pck.progressIndicator([this, &progressind](unsigned rem) {
-            progressind(rem, m_pck.lastResult().size() - 1);
+        if (progressind || on_packed)
+            m_pck.progressIndicator([this, progressind, on_packed](unsigned rem) {
+
+            if (progressind)
+                progressind(rem);
+
+            if (on_packed) {
+                int last_bed = m_pck.lastPackedBinId();
+                if (last_bed >= 0) {
+                    Item &last_packed = m_pck.lastResult()[last_bed].back();
+                    ArrangePolygon ap;
+                    ap.bed_idx = last_packed.binId();
+                    ap.priority = last_packed.priority();
+                    on_packed(ap);
+                }
+            }
         });
+
         if (stopcond) m_pck.stopCondition(stopcond);
         
         m_pck.configure(m_pconf);
@@ -464,7 +481,7 @@ void _arrange(
         std::vector<Item> &           excludes,
         const BinT &                  bin,
         const ArrangeParams           &params,
-        std::function<void(unsigned, unsigned)> progressfn,
+        std::function<void(unsigned)> progressfn,
         std::function<bool()>         stopfn)
 {
     // Integer ceiling the min distance from the bed perimeters
diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp
index 69511e7ec..ec46da8d3 100644
--- a/src/libslic3r/Arrange.hpp
+++ b/src/libslic3r/Arrange.hpp
@@ -83,8 +83,9 @@ struct ArrangeParams {
     
     /// Progress indicator callback called when an object gets packed. 
     /// The unsigned argument is the number of items remaining to pack.
-    /// Second is the current bed idx being filled.
-    std::function<void(unsigned, unsigned /*bed_idx*/)> progressind;
+    std::function<void(unsigned)> progressind;
+
+    std::function<void(const ArrangePolygon &)> on_packed;
     
     /// A predicate returning true if abort is needed.
     std::function<bool(void)>     stopcondition;
diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
index 7af0b4703..7a8c21365 100644
--- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp
+++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
@@ -158,14 +158,14 @@ void ArrangeJob::process()
     params.stopcondition = [this]() { return was_canceled(); };
     
     try {
-        params.progressind = [this, count](unsigned st, unsigned) {
+        params.progressind = [this, count](unsigned st) {
             st += m_unprintable.size();
             if (st > 0) update_status(int(count - st), arrangestr);
         };
         
         arrangement::arrange(m_selected, m_unselected, bedpts, params);
         
-        params.progressind = [this, count](unsigned st, unsigned) {
+        params.progressind = [this, count](unsigned st) {
             if (st > 0) update_status(int(count - st), arrangestr);
         };
         
diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp
index 9c959ff16..dc91ca9e3 100644
--- a/src/slic3r/GUI/Jobs/FillBedJob.cpp
+++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp
@@ -90,17 +90,20 @@ void FillBedJob::process()
     params.min_obj_distance = scaled(settings.distance);
     params.allow_rotations  = settings.enable_rotation;
 
-    unsigned curr_bed = 0;
-    params.stopcondition = [this, &curr_bed]() {
-        return was_canceled() || curr_bed > 0;
+    bool do_stop = false;
+    params.stopcondition = [this, &do_stop]() {
+        return was_canceled() || do_stop;
     };
 
-    params.progressind = [this, &curr_bed](unsigned st, unsigned bed) {
-        curr_bed = bed;
+    params.progressind = [this](unsigned st) {
         if (st > 0)
             update_status(int(m_status_range - st), _(L("Filling bed")));
     };
 
+    params.on_packed = [&do_stop] (const ArrangePolygon &ap) {
+        do_stop = ap.bed_idx > 0 && ap.priority == 0;
+    };
+
     arrangement::arrange(m_selected, m_unselected, m_bedpts, params);
 
     // finalize just here.
@@ -119,7 +122,7 @@ void FillBedJob::finalize()
     size_t inst_cnt = model_object->instances.size();
 
     for (ArrangePolygon &ap : m_selected) {
-        if (ap.priority != 0 || !(ap.bed_idx == arrangement::UNARRANGED || ap.bed_idx > 0))
+        if (ap.bed_idx != arrangement::UNARRANGED && (ap.priority != 0 || ap.bed_idx == 0))
             ap.apply();
     }
 

From 00a67ba0043eea72d4579b5e0f29c3edd6f4eced Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Thu, 26 Nov 2020 16:07:07 +0100
Subject: [PATCH 125/138] GCode Viewer -> Parse gcode produced by KISSSlicer

---
 src/libslic3r/GCode/GCodeProcessor.cpp | 113 ++++++++++++++++++++++++-
 src/libslic3r/GCode/GCodeProcessor.hpp |   4 +-
 2 files changed, 115 insertions(+), 2 deletions(-)

diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index 65f0859ae..0735b789f 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -501,7 +501,8 @@ const std::vector<std::pair<GCodeProcessor::EProducer, std::string>> GCodeProces
     { EProducer::Cura,        "Cura_SteamEngine" },
     { EProducer::Simplify3D,  "Simplify3D" },
     { EProducer::CraftWare,   "CraftWare" },
-    { EProducer::ideaMaker,   "ideaMaker" }
+    { EProducer::ideaMaker,   "ideaMaker" },
+    { EProducer::KissSlicer,  "KISSlicer" }
 };
 
 unsigned int GCodeProcessor::s_result_id = 0;
@@ -1143,11 +1144,14 @@ bool GCodeProcessor::process_producers_tags(const std::string_view comment)
 {
     switch (m_producer)
     {
+    case EProducer::Slic3rPE:
+    case EProducer::Slic3r: 
     case EProducer::PrusaSlicer: { return process_prusaslicer_tags(comment); }
     case EProducer::Cura:        { return process_cura_tags(comment); }
     case EProducer::Simplify3D:  { return process_simplify3d_tags(comment); }
     case EProducer::CraftWare:   { return process_craftware_tags(comment); }
     case EProducer::ideaMaker:   { return process_ideamaker_tags(comment); }
+    case EProducer::KissSlicer:  { return process_kissslicer_tags(comment); }
     default:                     { return false; }
     }
 }
@@ -1457,6 +1461,113 @@ bool GCodeProcessor::process_ideamaker_tags(const std::string_view comment)
     return false;
 }
 
+bool GCodeProcessor::process_kissslicer_tags(const std::string_view comment)
+{
+    // extrusion roles
+
+    // ; 'Raft Path'
+    size_t pos = comment.find(" 'Raft Path'");
+    if (pos == 0) {
+        m_extrusion_role = erSkirt;
+        return true;
+    }
+
+    // ; 'Support Interface Path'
+    pos = comment.find(" 'Support Interface Path'");
+    if (pos == 0) {
+        m_extrusion_role = erSupportMaterialInterface;
+        return true;
+    }
+
+    // ; 'Travel/Ironing Path'
+    pos = comment.find(" 'Travel/Ironing Path'");
+    if (pos == 0) {
+        m_extrusion_role = erIroning;
+        return true;
+    }
+
+    // ; 'Support (may Stack) Path'
+    pos = comment.find(" 'Support (may Stack) Path'");
+    if (pos == 0) {
+        m_extrusion_role = erSupportMaterial;
+        return true;
+    }
+
+    // ; 'Perimeter Path'
+    pos = comment.find(" 'Perimeter Path'");
+    if (pos == 0) {
+        m_extrusion_role = erExternalPerimeter;
+        return true;
+    }
+
+    // ; 'Pillar Path'
+    pos = comment.find(" 'Pillar Path'");
+    if (pos == 0) {
+        m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        return true;
+    }
+
+    // ; 'Destring/Wipe/Jump Path'
+    pos = comment.find(" 'Destring/Wipe/Jump Path'");
+    if (pos == 0) {
+        m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        return true;
+    }
+
+    // ; 'Prime Pillar Path'
+    pos = comment.find(" 'Prime Pillar Path'");
+    if (pos == 0) {
+        m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        return true;
+    }
+
+    // ; 'Loop Path'
+    pos = comment.find(" 'Loop Path'");
+    if (pos == 0) {
+        m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        return true;
+    }
+
+    // ; 'Crown Path'
+    pos = comment.find(" 'Crown Path'");
+    if (pos == 0) {
+        m_extrusion_role = erNone; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        return true;
+    }
+
+    // ; 'Solid Path'
+    pos = comment.find(" 'Solid Path'");
+    if (pos == 0) {
+        m_extrusion_role = erNone;
+        return true;
+    }
+
+    // ; 'Stacked Sparse Infill Path'
+    pos = comment.find(" 'Stacked Sparse Infill Path'");
+    if (pos == 0) {
+        m_extrusion_role = erInternalInfill;
+        return true;
+    }
+
+    // ; 'Sparse Infill Path'
+    pos = comment.find(" 'Sparse Infill Path'");
+    if (pos == 0) {
+        m_extrusion_role = erSolidInfill;
+        return true;
+    }
+
+    // geometry
+
+    // layer
+    pos = comment.find(" BEGIN_LAYER_");
+    if (pos == 0) {
+        ++m_layer_id;
+        return true;
+    }
+
+    return false;
+}
+
 bool GCodeProcessor::detect_producer(const std::string_view comment)
 {
     for (const auto& [id, search_string] : Producers) {
diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp
index 1911c83ad..657052703 100644
--- a/src/libslic3r/GCode/GCodeProcessor.hpp
+++ b/src/libslic3r/GCode/GCodeProcessor.hpp
@@ -429,7 +429,8 @@ namespace Slic3r {
             Cura,
             Simplify3D,
             CraftWare,
-            ideaMaker
+            ideaMaker,
+            KissSlicer
         };
 
         static const std::vector<std::pair<GCodeProcessor::EProducer, std::string>> Producers;
@@ -486,6 +487,7 @@ namespace Slic3r {
         bool process_simplify3d_tags(const std::string_view comment);
         bool process_craftware_tags(const std::string_view comment);
         bool process_ideamaker_tags(const std::string_view comment);
+        bool process_kissslicer_tags(const std::string_view comment);
 
         bool detect_producer(const std::string_view comment);
 

From cbe0b4f0f13a622825145a639fbadffc5218f636 Mon Sep 17 00:00:00 2001
From: David Kocik <kocikdav@gmail.com>
Date: Thu, 26 Nov 2020 17:15:26 +0100
Subject: [PATCH 126/138] Change log level of boost::filesystem::permisions
 error code message. Now it shouldnt bother like in #5254

---
 src/libslic3r/utils.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp
index d5555f27a..67bf73514 100644
--- a/src/libslic3r/utils.cpp
+++ b/src/libslic3r/utils.cpp
@@ -432,7 +432,7 @@ CopyFileResult copy_file_inner(const std::string& from, const std::string& to, s
 	boost::system::error_code ec;
 	boost::filesystem::permissions(target, perms, ec);
 	if (ec)
-		BOOST_LOG_TRIVIAL(error) << "boost::filesystem::permisions before copy error message (this could be irrelevant message based on file system): " << ec.message();
+		BOOST_LOG_TRIVIAL(debug) << "boost::filesystem::permisions before copy error message (this could be irrelevant message based on file system): " << ec.message();
 	ec.clear();
 	boost::filesystem::copy_file(source, target, boost::filesystem::copy_option::overwrite_if_exists, ec);
 	if (ec) {
@@ -442,7 +442,7 @@ CopyFileResult copy_file_inner(const std::string& from, const std::string& to, s
 	ec.clear();
 	boost::filesystem::permissions(target, perms, ec);
 	if (ec)
-		BOOST_LOG_TRIVIAL(error) << "boost::filesystem::permisions after copy error message (this could be irrelevant message based on file system): " << ec.message();
+		BOOST_LOG_TRIVIAL(debug) << "boost::filesystem::permisions after copy error message (this could be irrelevant message based on file system): " << ec.message();
 	return SUCCESS;
 }
 

From 184e4f77cd5a980b1c3d079a02de6b91c5f7365c Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Fri, 27 Nov 2020 09:35:32 +0100
Subject: [PATCH 127/138] Bring PrusaSlicer to top when drag and dropping a
 project file on its executable

---
 src/slic3r/GUI/Plater.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index edd6b72af..c82c7f2e7 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2137,6 +2137,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
         for (size_t i = 0; i < evt.data.size(); ++i) {
             input_files.push_back(from_u8(evt.data[i].string()));
         }
+        wxGetApp().mainframe->Raise();
         this->q->load_files(input_files);
     });
 #else

From 22f93a34a8c3ac36e17d271cb65eeb975af6cd60 Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Mon, 9 Nov 2020 08:16:55 +0100
Subject: [PATCH 128/138] Fix horrible complexity of custom seam lookup (#5067)

- polygons are offset individually
- custom areas are kept separately for each PrintObject
- AABB tree is used to get logN lookup complexity
---
 src/libslic3r/AABBTreeIndirect.hpp |  30 +++++
 src/libslic3r/GCode/SeamPlacer.cpp | 169 ++++++++++++++++++++++-------
 src/libslic3r/GCode/SeamPlacer.hpp |  37 +++++--
 src/libslic3r/PrintObject.cpp      |   1 -
 4 files changed, 183 insertions(+), 54 deletions(-)

diff --git a/src/libslic3r/AABBTreeIndirect.hpp b/src/libslic3r/AABBTreeIndirect.hpp
index 964133faa..19fbf1378 100644
--- a/src/libslic3r/AABBTreeIndirect.hpp
+++ b/src/libslic3r/AABBTreeIndirect.hpp
@@ -726,6 +726,36 @@ inline bool is_any_triangle_in_radius(
     return hit_point.allFinite();
 }
 
+
+// Traverse the tree and return the index of an entity whose bounding box
+// contains a given point. Returns size_t(-1) when the point is outside.
+template<typename TreeType, typename VectorType>
+size_t get_candidate_idx(const TreeType& tree, const VectorType& v)
+{
+    if (tree.empty() || ! tree.node(0).bbox.contains(v))
+        return size_t(-1);
+
+    size_t node_idx = 0;
+    while (true) {
+        decltype(tree.node(node_idx)) node = tree.node(node_idx);
+        static_assert(std::is_reference<decltype(node)>::value,
+                      "Nodes shall be addressed by reference.");
+        assert(node.is_valid());
+        assert(node.bbox.contains(v));
+
+        if (! node.is_leaf()) {
+            if (tree.left_child(node_idx).bbox.contains(v))
+                node_idx = tree.left_child_idx(node_idx);
+            else if (tree.right_child(node_idx).bbox.contains(v))
+                node_idx = tree.right_child_idx(node_idx);
+            else
+                return size_t(-1);
+        } else
+            return node.idx;
+    }
+}
+
+
 } // namespace AABBTreeIndirect
 } // namespace Slic3r
 
diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp
index db31f8f67..ff01621b8 100644
--- a/src/libslic3r/GCode/SeamPlacer.cpp
+++ b/src/libslic3r/GCode/SeamPlacer.cpp
@@ -191,19 +191,93 @@ void SeamPlacer::init(const Print& print)
 {
     m_enforcers.clear();
     m_blockers.clear();
-    //m_last_seam_position.clear();
     m_seam_history.clear();
+    m_po_list.clear();
 
-   for (const PrintObject* po : print.objects()) {
-       po->project_and_append_custom_facets(true, EnforcerBlockerType::ENFORCER, m_enforcers);
-       po->project_and_append_custom_facets(true, EnforcerBlockerType::BLOCKER, m_blockers);
-   }
-   const std::vector<double>& nozzle_dmrs = print.config().nozzle_diameter.values;
-   float max_nozzle_dmr = *std::max_element(nozzle_dmrs.begin(), nozzle_dmrs.end());
-   for (ExPolygons& explgs : m_enforcers)
-       explgs = Slic3r::offset_ex(explgs, scale_(max_nozzle_dmr));
-   for (ExPolygons& explgs : m_blockers)
-       explgs = Slic3r::offset_ex(explgs, scale_(max_nozzle_dmr));
+    const std::vector<double>& nozzle_dmrs = print.config().nozzle_diameter.values;
+    float max_nozzle_dmr = *std::max_element(nozzle_dmrs.begin(), nozzle_dmrs.end());
+
+
+    std::vector<ExPolygons> temp_enf;
+    std::vector<ExPolygons> temp_blk;
+
+    for (const PrintObject* po : print.objects()) {
+        temp_enf.clear();
+        temp_blk.clear();
+        po->project_and_append_custom_facets(true, EnforcerBlockerType::ENFORCER, temp_enf);
+        po->project_and_append_custom_facets(true, EnforcerBlockerType::BLOCKER, temp_blk);
+
+        // Offset the triangles out slightly.
+        for (auto* custom_per_object : {&temp_enf, &temp_blk})
+            for (ExPolygons& explgs : *custom_per_object)
+                explgs = Slic3r::offset_ex(explgs, scale_(max_nozzle_dmr));
+
+//     FIXME: Offsetting should be done somehow cheaper, but following does not work
+//        for (auto* custom_per_object : {&temp_enf, &temp_blk}) {
+//            for (ExPolygons& plgs : *custom_per_object) {
+//                for (ExPolygon& plg : plgs) {
+//                    auto out = Slic3r::offset_ex(plg, scale_(max_nozzle_dmr));
+//                    plg = out.empty() ? ExPolygon() : out.front();
+//                    assert(out.empty() || out.size() == 1);
+//                }
+//            }
+//        }
+
+
+
+        // Remember this PrintObject and initialize a store of enforcers and blockers for it.
+        m_po_list.push_back(po);
+        size_t po_idx = m_po_list.size() - 1;
+        m_enforcers.emplace_back(std::vector<CustomTrianglesPerLayer>(temp_enf.size()));
+        m_blockers.emplace_back(std::vector<CustomTrianglesPerLayer>(temp_blk.size()));
+
+        // A helper class to store data to build the AABB tree from.
+        class CustomTriangleRef {
+        public:
+            CustomTriangleRef(size_t idx,
+                              Point&& centroid,
+                              BoundingBox&& bb)
+                : m_idx{idx}, m_centroid{centroid},
+                  m_bbox{AlignedBoxType(bb.min, bb.max)}
+            {}
+            size_t idx() const              { return m_idx;      }
+            const Point& centroid() const   { return m_centroid; }
+            const TreeType::BoundingBox& bbox() const { return m_bbox; }
+
+        private:
+            size_t m_idx;
+            Point m_centroid;
+            AlignedBoxType m_bbox;
+        };
+
+        // A lambda to extract the ExPolygons and save them into the member AABB tree.
+        // Will be called for enforcers and blockers separately.
+        auto add_custom = [](std::vector<ExPolygons>& src, std::vector<CustomTrianglesPerLayer>& dest) {
+            // Go layer by layer, and append all the ExPolygons into the AABB tree.
+            size_t layer_idx = 0;
+            for (ExPolygons& expolys_on_layer : src) {
+                CustomTrianglesPerLayer& layer_data = dest[layer_idx];
+                std::vector<CustomTriangleRef> triangles_data;
+                layer_data.polys.reserve(expolys_on_layer.size());
+                triangles_data.reserve(expolys_on_layer.size());
+
+                for (ExPolygon& expoly : expolys_on_layer) {
+                    if (expoly.empty())
+                        continue;
+                    layer_data.polys.emplace_back(std::move(expoly));
+                    triangles_data.emplace_back(layer_data.polys.size() - 1,
+                                                layer_data.polys.back().centroid(),
+                                                layer_data.polys.back().bounding_box());
+                }
+                // All polygons are saved, build the AABB tree for them.
+                layer_data.tree.build(std::move(triangles_data));
+                ++layer_idx;
+            }
+        };
+
+        add_custom(temp_enf, m_enforcers.at(po_idx));
+        add_custom(temp_blk, m_blockers.at(po_idx));
+    }
 }
 
 
@@ -216,7 +290,9 @@ Point SeamPlacer::get_seam(const size_t layer_idx, const SeamPosition seam_posit
     BoundingBox polygon_bb = polygon.bounding_box();
     const coord_t  nozzle_r   = coord_t(scale_(0.5 * nozzle_dmr) + 0.5);
 
-    if (this->is_custom_seam_on_layer(layer_idx)) {
+    size_t po_idx = std::find(m_po_list.begin(), m_po_list.end(), po) - m_po_list.begin();
+
+    if (this->is_custom_seam_on_layer(layer_idx, po_idx)) {
         // Seam enf/blockers can begin and end in between the original vertices.
         // Let add extra points in between and update the leghths.
         polygon.densify(MINIMAL_POLYGON_SIDE);
@@ -229,11 +305,10 @@ Point SeamPlacer::get_seam(const size_t layer_idx, const SeamPosition seam_posit
         if (seam_position == spAligned) {
             // Seam is aligned to the seam at the preceding layer.
             if (po != nullptr) {
-                std::optional<Point> pos = m_seam_history.get_last_seam(po, layer_idx, polygon_bb);
+                std::optional<Point> pos = m_seam_history.get_last_seam(m_po_list[po_idx], layer_idx, polygon_bb);
                 if (pos.has_value()) {
-                    //last_pos = m_last_seam_position[po];
                     last_pos = *pos;
-                    last_pos_weight = is_custom_enforcer_on_layer(layer_idx) ? 0.f : 1.f;
+                    last_pos_weight = is_custom_enforcer_on_layer(layer_idx, po_idx) ? 0.f : 1.f;
                 }
             }
         }
@@ -313,12 +388,12 @@ Point SeamPlacer::get_seam(const size_t layer_idx, const SeamPosition seam_posit
 
         // Custom seam. Huge (negative) constant penalty is applied inside
         // blockers (enforcers) to rule out points that should not win.
-        this->apply_custom_seam(polygon, penalties, lengths, layer_idx, seam_position);
+        this->apply_custom_seam(polygon, po_idx, penalties, lengths, layer_idx, seam_position);
 
         // Find a point with a minimum penalty.
         size_t idx_min = std::min_element(penalties.begin(), penalties.end()) - penalties.begin();
 
-        if (seam_position != spAligned || ! is_custom_enforcer_on_layer(layer_idx)) {
+        if (seam_position != spAligned || ! is_custom_enforcer_on_layer(layer_idx, po_idx)) {
             // Very likely the weight of idx_min is very close to the weight of last_pos_proj_idx.
             // In that case use last_pos_proj_idx instead.
             float penalty_aligned  = penalties[last_pos_proj_idx];
@@ -368,15 +443,15 @@ Point SeamPlacer::get_seam(const size_t layer_idx, const SeamPosition seam_posit
             // The other loops will get a seam close to the random point chosen
             // on the innermost contour.
             //FIXME This works correctly for inner contours first only.
-            last_pos = this->get_random_seam(layer_idx, polygon);
+            last_pos = this->get_random_seam(layer_idx, polygon, po_idx);
         }
-        if (loop.role() == erExternalPerimeter && is_custom_seam_on_layer(layer_idx)) {
+        if (loop.role() == erExternalPerimeter && is_custom_seam_on_layer(layer_idx, po_idx)) {
             // There is a possibility that the loop will be influenced by custom
             // seam enforcer/blocker. In this case do not inherit the seam
             // from internal loops (which may conflict with the custom selection
             // and generate another random one.
             bool saw_custom = false;
-            Point candidate = this->get_random_seam(layer_idx, polygon, &saw_custom);
+            Point candidate = this->get_random_seam(layer_idx, polygon, po_idx, &saw_custom);
             if (saw_custom)
                 last_pos = candidate;
         }
@@ -385,7 +460,7 @@ Point SeamPlacer::get_seam(const size_t layer_idx, const SeamPosition seam_posit
 }
 
 
-Point SeamPlacer::get_random_seam(size_t layer_idx, const Polygon& polygon,
+Point SeamPlacer::get_random_seam(size_t layer_idx, const Polygon& polygon, size_t po_idx,
                                   bool* saw_custom) const
 {
     // Parametrize the polygon by its length.
@@ -394,7 +469,7 @@ Point SeamPlacer::get_random_seam(size_t layer_idx, const Polygon& polygon,
     // Which of the points are inside enforcers/blockers?
     std::vector<size_t> enforcers_idxs;
     std::vector<size_t> blockers_idxs;
-    this->get_enforcers_and_blockers(layer_idx, polygon, enforcers_idxs, blockers_idxs);
+    this->get_enforcers_and_blockers(layer_idx, polygon, po_idx, enforcers_idxs, blockers_idxs);
 
     bool has_enforcers = ! enforcers_idxs.empty();
     bool has_blockers = ! blockers_idxs.empty();
@@ -444,32 +519,44 @@ Point SeamPlacer::get_random_seam(size_t layer_idx, const Polygon& polygon,
 
 void SeamPlacer::get_enforcers_and_blockers(size_t layer_id,
                              const Polygon& polygon,
+                             size_t po_idx,
                              std::vector<size_t>& enforcers_idxs,
                              std::vector<size_t>& blockers_idxs) const
 {
     enforcers_idxs.clear();
     blockers_idxs.clear();
 
-    // FIXME: This is quadratic and it should be improved, maybe by building
-    // an AABB tree (or at least utilize bounding boxes).
-    for (size_t i=0; i<polygon.points.size(); ++i) {
+    auto is_inside = [](const Point& pt,
+                        const CustomTrianglesPerLayer& custom_data) -> bool {
+        assert(! custom_data.polys.empty());
+        // Now ask the AABB tree which polygon we should check and check it.
+        size_t candidate = AABBTreeIndirect::get_candidate_idx(custom_data.tree, pt);
+        if (candidate != size_t(-1)
+         && custom_data.polys[candidate].contains(pt))
+            return true;
+        return false;
+    };
 
-        if (! m_enforcers.empty()) {
-            assert(layer_id < m_enforcers.size());
-            for (const ExPolygon& explg : m_enforcers[layer_id]) {
-                if (explg.contains(polygon.points[i]))
-                    enforcers_idxs.push_back(i);
-            }
-        }
-
-        if (! m_blockers.empty()) {
-            assert(layer_id < m_blockers.size());
-            for (const ExPolygon& explg : m_blockers[layer_id]) {
-                if (explg.contains(polygon.points[i]))
-                    blockers_idxs.push_back(i);
+    if (! m_enforcers[po_idx].empty()) {
+        const CustomTrianglesPerLayer& enforcers = m_enforcers[po_idx][layer_id];
+        if (! enforcers.polys.empty()) {
+            for (size_t i=0; i<polygon.points.size(); ++i) {
+                if (is_inside(polygon.points[i], enforcers))
+                    enforcers_idxs.emplace_back(i);
             }
         }
     }
+
+    if (! m_blockers[po_idx].empty()) {
+        const CustomTrianglesPerLayer& blockers = m_blockers[po_idx][layer_id];
+        if (! blockers.polys.empty()) {
+            for (size_t i=0; i<polygon.points.size(); ++i) {
+                if (is_inside(polygon.points[i], blockers))
+                    blockers_idxs.emplace_back(i);
+            }
+        }
+    }
+
 }
 
 
@@ -543,17 +630,17 @@ static std::vector<size_t> find_enforcer_centers(const Polygon& polygon,
 
 
 
-void SeamPlacer::apply_custom_seam(const Polygon& polygon,
+void SeamPlacer::apply_custom_seam(const Polygon& polygon, size_t po_idx,
                                    std::vector<float>& penalties,
                                    const std::vector<float>& lengths,
                                    int layer_id, SeamPosition seam_position) const
 {
-    if (! is_custom_seam_on_layer(layer_id))
+    if (! is_custom_seam_on_layer(layer_id, po_idx))
         return;
 
     std::vector<size_t> enforcers_idxs;
     std::vector<size_t> blockers_idxs;
-    this->get_enforcers_and_blockers(layer_id, polygon, enforcers_idxs, blockers_idxs);
+    this->get_enforcers_and_blockers(layer_id, polygon, po_idx, enforcers_idxs, blockers_idxs);
 
     for (size_t i : enforcers_idxs) {
         assert(i < penalties.size());
diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp
index e603b7d57..28ab91313 100644
--- a/src/libslic3r/GCode/SeamPlacer.hpp
+++ b/src/libslic3r/GCode/SeamPlacer.hpp
@@ -3,9 +3,10 @@
 
 #include <optional>
 
-#include "libslic3r/ExPolygon.hpp"
+#include "libslic3r/Polygon.hpp"
 #include "libslic3r/PrintConfig.hpp"
 #include "libslic3r/BoundingBox.hpp"
+#include "libslic3r/AABBTreeIndirect.hpp"
 
 namespace Slic3r {
 
@@ -44,9 +45,20 @@ public:
                    coordf_t nozzle_diameter, const PrintObject* po,
                    bool was_clockwise, const EdgeGrid::Grid* lower_layer_edge_grid);
 
+    using TreeType = AABBTreeIndirect::Tree<2, coord_t>;
+    using AlignedBoxType = Eigen::AlignedBox<TreeType::CoordType, TreeType::NumDimensions>;
+
 private:
-    std::vector<ExPolygons> m_enforcers;
-    std::vector<ExPolygons> m_blockers;
+
+    struct CustomTrianglesPerLayer {
+        Polygons polys;
+        TreeType tree;
+    };
+
+
+    std::vector<std::vector<CustomTrianglesPerLayer>> m_enforcers;
+    std::vector<std::vector<CustomTrianglesPerLayer>> m_blockers;
+    std::vector<const PrintObject*> m_po_list;
 
     //std::map<const PrintObject*, Point>  m_last_seam_position;
     SeamHistory  m_seam_history;
@@ -54,32 +66,33 @@ private:
     // Get indices of points inside enforcers and blockers.
     void get_enforcers_and_blockers(size_t layer_id,
                                     const Polygon& polygon,
+                                    size_t po_id,
                                     std::vector<size_t>& enforcers_idxs,
                                     std::vector<size_t>& blockers_idxs) const;
 
     // Apply penalties to points inside enforcers/blockers.
-    void apply_custom_seam(const Polygon& polygon,
+    void apply_custom_seam(const Polygon& polygon, size_t po_id,
                            std::vector<float>& penalties,
                            const std::vector<float>& lengths,
                            int layer_id, SeamPosition seam_position) const;
 
     // Return random point of a polygon. The distribution will be uniform
     // along the contour and account for enforcers and blockers.
-    Point get_random_seam(size_t layer_idx, const Polygon& polygon,
+    Point get_random_seam(size_t layer_idx, const Polygon& polygon, size_t po_id,
                           bool* saw_custom = nullptr) const;
 
     // Is there any enforcer/blocker on this layer?
-    bool is_custom_seam_on_layer(size_t layer_id) const {
-        return is_custom_enforcer_on_layer(layer_id)
-            || is_custom_blocker_on_layer(layer_id);
+    bool is_custom_seam_on_layer(size_t layer_id, size_t po_idx) const {
+        return is_custom_enforcer_on_layer(layer_id, po_idx)
+            || is_custom_blocker_on_layer(layer_id, po_idx);
     }
 
-    bool is_custom_enforcer_on_layer(size_t layer_id) const {
-        return (! m_enforcers.empty() && ! m_enforcers[layer_id].empty());
+    bool is_custom_enforcer_on_layer(size_t layer_id, size_t po_idx) const {
+        return (! m_enforcers.at(po_idx).empty() && ! m_enforcers.at(po_idx)[layer_id].polys.empty());
     }
 
-    bool is_custom_blocker_on_layer(size_t layer_id) const {
-        return (! m_blockers.empty() && ! m_blockers[layer_id].empty());
+    bool is_custom_blocker_on_layer(size_t layer_id, size_t po_idx) const {
+        return (! m_blockers.at(po_idx).empty() && ! m_blockers.at(po_idx)[layer_id].polys.empty());
     }
 };
 
diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp
index c70542a26..51b3128ba 100644
--- a/src/libslic3r/PrintObject.cpp
+++ b/src/libslic3r/PrintObject.cpp
@@ -11,7 +11,6 @@
 #include "Slicing.hpp"
 #include "Tesselate.hpp"
 #include "Utils.hpp"
-#include "AABBTreeIndirect.hpp"
 #include "Fill/FillAdaptive.hpp"
 #include "Format/STL.hpp"
 

From f485f66b2a87a480586f6213709e50fbed441b4c Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Wed, 25 Nov 2020 13:13:37 +0100
Subject: [PATCH 129/138] Seam - fix indexing of layers (#5112, #5014)

---
 src/libslic3r/GCode.cpp            |  2 +-
 src/libslic3r/GCode/SeamPlacer.cpp | 22 +++++++++++++++++++++-
 src/libslic3r/GCode/SeamPlacer.hpp |  8 +++++++-
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 86a89fd6f..ba391ab63 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -2343,7 +2343,7 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou
         const EdgeGrid::Grid* edge_grid_ptr = (lower_layer_edge_grid && *lower_layer_edge_grid)
                                                 ? lower_layer_edge_grid->get()
                                                 : nullptr;
-        Point seam = m_seam_placer.get_seam(m_layer->id(), seam_position, loop,
+        Point seam = m_seam_placer.get_seam(*m_layer, seam_position, loop,
                          last_pos, EXTRUDER_CONFIG(nozzle_diameter),
                          (m_layer == NULL ? nullptr : m_layer->object()),
                          was_clockwise, edge_grid_ptr);
diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp
index ff01621b8..243b633fc 100644
--- a/src/libslic3r/GCode/SeamPlacer.cpp
+++ b/src/libslic3r/GCode/SeamPlacer.cpp
@@ -6,6 +6,7 @@
 #include "libslic3r/EdgeGrid.hpp"
 #include "libslic3r/ClipperUtils.hpp"
 #include "libslic3r/SVG.hpp"
+#include "libslic3r/Layer.hpp"
 
 namespace Slic3r {
 
@@ -282,7 +283,7 @@ void SeamPlacer::init(const Print& print)
 
 
 
-Point SeamPlacer::get_seam(const size_t layer_idx, const SeamPosition seam_position,
+Point SeamPlacer::get_seam(const Layer& layer, const SeamPosition seam_position,
                const ExtrusionLoop& loop, Point last_pos, coordf_t nozzle_dmr,
                const PrintObject* po, bool was_clockwise, const EdgeGrid::Grid* lower_layer_edge_grid)
 {
@@ -292,6 +293,25 @@ Point SeamPlacer::get_seam(const size_t layer_idx, const SeamPosition seam_posit
 
     size_t po_idx = std::find(m_po_list.begin(), m_po_list.end(), po) - m_po_list.begin();
 
+    // Find current layer in respective PrintObject. Cache the result so the
+    // lookup is only done once per layer, not for each loop.
+    const Layer* layer_po = nullptr;
+    if (po == m_last_po && layer.print_z == m_last_print_z)
+        layer_po = m_last_layer_po;
+    else {
+        layer_po = po->get_layer_at_printz(layer.print_z);
+        m_last_po = po;
+        m_last_print_z = layer.print_z;
+        m_last_layer_po = layer_po;
+    }
+    if (! layer_po)
+        return last_pos;
+
+    // Index of this layer in the respective PrintObject.
+    size_t layer_idx = layer_po->id() - po->layers().front()->id(); // raft layers
+
+    assert(layer_idx < po->layer_count());
+
     if (this->is_custom_seam_on_layer(layer_idx, po_idx)) {
         // Seam enf/blockers can begin and end in between the original vertices.
         // Let add extra points in between and update the leghths.
diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp
index 28ab91313..759e1592e 100644
--- a/src/libslic3r/GCode/SeamPlacer.hpp
+++ b/src/libslic3r/GCode/SeamPlacer.hpp
@@ -13,6 +13,7 @@ namespace Slic3r {
 class PrintObject;
 class ExtrusionLoop;
 class Print;
+class Layer;
 namespace EdgeGrid { class Grid; }
 
 
@@ -40,7 +41,7 @@ class SeamPlacer {
 public:
     void init(const Print& print);
 
-    Point get_seam(const size_t layer_idx, const SeamPosition seam_position,
+    Point get_seam(const Layer& layer, const SeamPosition seam_position,
                    const ExtrusionLoop& loop, Point last_pos,
                    coordf_t nozzle_diameter, const PrintObject* po,
                    bool was_clockwise, const EdgeGrid::Grid* lower_layer_edge_grid);
@@ -55,6 +56,11 @@ private:
         TreeType tree;
     };
 
+    // Just a cache to save some lookups.
+    const Layer* m_last_layer_po = nullptr;
+    coordf_t m_last_print_z = -1.;
+    const PrintObject* m_last_po = nullptr;
+
 
     std::vector<std::vector<CustomTrianglesPerLayer>> m_enforcers;
     std::vector<std::vector<CustomTrianglesPerLayer>> m_blockers;

From ca09bf0805740739fd9d1ea4ebab99f2a0ff8afc Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Fri, 27 Nov 2020 11:32:35 +0100
Subject: [PATCH 130/138] Fix random seam for single contour islands (#5003)
 and for external_perimeters_first

---
 src/libslic3r/GCode/SeamPlacer.cpp | 48 ++++++++++++++++++++----------
 src/libslic3r/GCode/SeamPlacer.hpp |  1 +
 2 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp
index 243b633fc..1dc1c002d 100644
--- a/src/libslic3r/GCode/SeamPlacer.cpp
+++ b/src/libslic3r/GCode/SeamPlacer.cpp
@@ -458,22 +458,38 @@ Point SeamPlacer::get_seam(const Layer& layer, const SeamPosition seam_position,
         return polygon.points[idx_min];
 
     } else { // spRandom
-        if (loop.loop_role() == elrContourInternalPerimeter && loop.role() != erExternalPerimeter) {
-            // This loop does not contain any other loop. Set a random position.
-            // The other loops will get a seam close to the random point chosen
-            // on the innermost contour.
-            //FIXME This works correctly for inner contours first only.
-            last_pos = this->get_random_seam(layer_idx, polygon, po_idx);
-        }
-        if (loop.role() == erExternalPerimeter && is_custom_seam_on_layer(layer_idx, po_idx)) {
-            // There is a possibility that the loop will be influenced by custom
-            // seam enforcer/blocker. In this case do not inherit the seam
-            // from internal loops (which may conflict with the custom selection
-            // and generate another random one.
-            bool saw_custom = false;
-            Point candidate = this->get_random_seam(layer_idx, polygon, po_idx, &saw_custom);
-            if (saw_custom)
-                last_pos = candidate;
+        if (po->print()->default_region_config().external_perimeters_first) {
+            if (loop.role() == erExternalPerimeter)
+                last_pos = this->get_random_seam(layer_idx, polygon, po_idx);
+            else {
+                // Internal perimeters will just use last_pos.
+            }
+        } else {
+            if (loop.loop_role() == elrContourInternalPerimeter && loop.role() != erExternalPerimeter) {
+                // This loop does not contain any other loop. Set a random position.
+                // The other loops will get a seam close to the random point chosen
+                // on the innermost contour.
+                last_pos = this->get_random_seam(layer_idx, polygon, po_idx);
+                m_last_loop_was_external = false;
+            }
+            if (loop.role() == erExternalPerimeter) {
+                if (m_last_loop_was_external) {
+                    // There was no internal perimeter before this one.
+                    last_pos = this->get_random_seam(layer_idx, polygon, po_idx);
+                } else {
+                    if (is_custom_seam_on_layer(layer_idx, po_idx)) {
+                        // There is a possibility that the loop will be influenced by custom
+                        // seam enforcer/blocker. In this case do not inherit the seam
+                        // from internal loops (which may conflict with the custom selection
+                        // and generate another random one.
+                        bool saw_custom = false;
+                        Point candidate = this->get_random_seam(layer_idx, polygon, po_idx, &saw_custom);
+                        if (saw_custom)
+                            last_pos = candidate;
+                    }
+                }
+                m_last_loop_was_external = true;
+            }
         }
         return last_pos;
     }
diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp
index 759e1592e..0bae7af5a 100644
--- a/src/libslic3r/GCode/SeamPlacer.hpp
+++ b/src/libslic3r/GCode/SeamPlacer.hpp
@@ -61,6 +61,7 @@ private:
     coordf_t m_last_print_z = -1.;
     const PrintObject* m_last_po = nullptr;
 
+    bool m_last_loop_was_external = true;
 
     std::vector<std::vector<CustomTrianglesPerLayer>> m_enforcers;
     std::vector<std::vector<CustomTrianglesPerLayer>> m_blockers;

From a650801b80a4fad1030662f3de38135c966ce465 Mon Sep 17 00:00:00 2001
From: David Kocik <kocikdav@gmail.com>
Date: Fri, 27 Nov 2020 12:51:49 +0100
Subject: [PATCH 131/138] call correct load_files at MacOpenFiles

---
 src/slic3r/GUI/GUI_App.cpp | 11 ++++++++++-
 src/slic3r/GUI/Plater.cpp  |  4 ++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index cebd4482e..8a033610f 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -1771,8 +1771,17 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames)
         if (!non_gcode_files.empty()) 
             start_new_slicer(non_gcode_files, true);
     } else {
-        if (! files.empty())
+        if (! files.empty()) {
+#if ENABLE_DRAG_AND_DROP_FIX
+            wxArrayString input_files;
+            for (size_t i = 0; i < non_gcode_files.size(); ++i) {
+                input_files.push_back(non_gcode_files[i]);
+            }
+            this->plater()->load_files(input_files);
+#else
             this->plater()->load_files(files, true, true);
+#endif     
+        }
         for (const wxString &filename : gcode_files)
             start_new_gcodeviewer(&filename);
     }
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index c82c7f2e7..f1edb711d 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2132,7 +2132,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
 
 #if ENABLE_DRAG_AND_DROP_FIX
     this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent& evt) {
-        BOOST_LOG_TRIVIAL(debug) << "received load from other instance event ";
+        BOOST_LOG_TRIVIAL(error) << "received load from other instance event (1)";
         wxArrayString input_files;
         for (size_t i = 0; i < evt.data.size(); ++i) {
             input_files.push_back(from_u8(evt.data[i].string()));
@@ -2142,7 +2142,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     });
 #else
     this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent &evt) {
-		BOOST_LOG_TRIVIAL(debug) << "received load from other instance event ";
+		BOOST_LOG_TRIVIAL(error) << "received load from other instance event (2)";
         this->load_files(evt.data, true, true);
     });
 #endif // ENABLE_DRAG_AND_DROP_FIX

From b71c001845f8158260b15818a5c30d8f917b1780 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Fri, 27 Nov 2020 22:41:23 +0100
Subject: [PATCH 132/138] Fixed suppress scrolling for preset comboboxes and
 some comboboxes on right panel on all platforms

---
 src/slic3r/GUI/Field.cpp            | 38 +++++++----------------------
 src/slic3r/GUI/PresetComboBoxes.cpp | 31 ++++++-----------------
 src/slic3r/GUI/PresetComboBoxes.hpp |  1 -
 3 files changed, 17 insertions(+), 53 deletions(-)

diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 7c7838afa..4ef39fad5 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -861,27 +861,16 @@ void Choice::BUILD() {
     temp->SetItemBitmap(0, empty_bmp);
 #endif
 
-    temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true;  });
-    temp->Bind(wxEVT_COMBOBOX_CLOSEUP,  [this, temp](wxCommandEvent&) {
-		// EVT_COMBOBOX_CLOSEUP is called after EVT_COMBOBOX on Windows
-		// so, always set m_suppress_change to "true"
-#ifndef __WXMSW__ 
-		if (m_last_selected == temp->GetSelection())
-#endif //__WXMSW__
-            m_is_dropped = false;
-    });
+    temp->Bind(wxEVT_MOUSEWHEEL, [this](wxMouseEvent& e) {
+        if (m_suppress_scroll && !m_is_dropped)
+            e.StopPropagation();
+        else
+            e.Skip();
+        });
+    temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true; });
+    temp->Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent&) { m_is_dropped = false; });
 
-    temp->Bind(wxEVT_COMBOBOX, ([this, temp](wxCommandEvent evt) {
-        if (m_suppress_scroll) {
-            if (!m_is_dropped) {
-                temp->SetSelection(m_last_selected);
-                return;
-            }
-            m_last_selected = evt.GetSelection();
-        }
-        on_change_field();
-        m_is_dropped = false;
-    }), temp->GetId());
+    temp->Bind(wxEVT_COMBOBOX, ([this, temp](wxCommandEvent) { on_change_field(); }), temp->GetId());
 
     if (m_is_editable) {
         temp->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) {
@@ -908,8 +897,6 @@ void Choice::BUILD() {
 void Choice::suppress_scroll()
 {
     m_suppress_scroll = true;
-    choice_ctrl* ctrl = dynamic_cast<choice_ctrl*>(window);
-    m_last_selected = ctrl->GetSelection();
 }
 
 void Choice::set_selection()
@@ -926,7 +913,6 @@ void Choice::set_selection()
 	case coEnum:{
 		int id_value = m_opt.get_default_value<ConfigOptionEnum<SeamPosition>>()->value; //!!
         field->SetSelection(id_value);
-        if (m_suppress_scroll) m_last_selected = id_value;
 		break;
 	}
 	case coFloat:
@@ -960,8 +946,6 @@ void Choice::set_selection()
 			++idx;
 		}
 		idx == m_opt.enum_values.size() ? field->SetValue(text_value) : field->SetSelection(idx);
-
-        if (m_suppress_scroll && idx < m_opt.enum_values.size()) m_last_selected = idx;
 	}
 }
 
@@ -981,7 +965,6 @@ void Choice::set_value(const std::string& value, bool change_event)  //! Redunda
 	idx == m_opt.enum_values.size() ? 
 		field->SetValue(value) :
 		field->SetSelection(idx);
-	if (m_suppress_scroll && idx < m_opt.enum_values.size()) m_last_selected = idx;
 	
 	m_disable_change_event = false;
 }
@@ -1020,7 +1003,6 @@ void Choice::set_value(const boost::any& value, bool change_event)
         }
         else
 			field->SetSelection(idx);
-		if (m_suppress_scroll && idx < enums.size()) m_last_selected = idx;
 		break;
 	}
 	case coEnum: {
@@ -1051,7 +1033,6 @@ void Choice::set_value(const boost::any& value, bool change_event)
 				val = 0;
 		}
 		field->SetSelection(val);
-		if (m_suppress_scroll) m_last_selected = val;
 		break;
 	}
 	default:
@@ -1211,7 +1192,6 @@ void Choice::msw_rescale()
     idx == m_opt.enum_values.size() ?
         field->SetValue(selection) :
         field->SetSelection(idx);
-    if (m_suppress_scroll && idx < m_opt.enum_values.size()) m_last_selected = idx;
 #else
     auto size = wxSize(def_width_wider() * m_em_unit, wxDefaultCoord);
     if (m_opt.height >= 0) size.SetHeight(m_opt.height * m_em_unit);
diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp
index 60cc2c620..2ef7b3e1f 100644
--- a/src/slic3r/GUI/PresetComboBoxes.cpp
+++ b/src/slic3r/GUI/PresetComboBoxes.cpp
@@ -103,15 +103,15 @@ PresetComboBox::PresetComboBox(wxWindow* parent, Preset::Type preset_type, const
 
     // parameters for an icon's drawing
     fill_width_height();
-    Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_suppress_change = false; });
-    Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent&) {
-        // EVT_COMBOBOX_CLOSEUP is called after EVT_COMBOBOX on Windows
-        // so, always set m_suppress_change to "true"
-#ifndef __WXMSW__ 
-        if (m_last_selected == this->GetSelection())
-#endif //__WXMSW__
-            m_suppress_change = true;
+
+    Bind(wxEVT_MOUSEWHEEL, [this](wxMouseEvent& e) {
+        if (m_suppress_change)
+            e.StopPropagation();
+        else
+            e.Skip();
     });
+    Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_suppress_change = false; });
+    Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent&) { m_suppress_change = true;  });
 
     Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) {
         // see https://github.com/prusa3d/PrusaSlicer/issues/3889
@@ -156,15 +156,6 @@ bool PresetComboBox::set_printer_technology(PrinterTechnology pt)
     return false;
 }
 
-bool PresetComboBox::check_event_for_suppress_change(wxCommandEvent& evt)
-{
-    if (m_suppress_change) {
-        evt.StopPropagation();
-        SetSelection(m_last_selected);
-    }
-    return m_suppress_change;
-}
-
 void PresetComboBox::invalidate_selection()
 {
     m_last_selected = INT_MAX; // this value means that no one item is selected
@@ -552,8 +543,6 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset
     PresetComboBox(parent, preset_type, wxSize(15 * wxGetApp().em_unit(), -1))
 {
     Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &evt) {
-        if (check_event_for_suppress_change(evt))
-            return;
         auto selected_item = evt.GetSelection();
 
         auto marker = reinterpret_cast<Marker>(this->GetClientData(selected_item));
@@ -579,7 +568,6 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset
         } else {
             evt.StopPropagation();
         }
-        m_suppress_change = true;
     });
 
     if (m_type == Preset::TYPE_FILAMENT)
@@ -892,8 +880,6 @@ TabPresetComboBox::TabPresetComboBox(wxWindow* parent, Preset::Type preset_type)
     PresetComboBox(parent, preset_type, wxSize(35 * wxGetApp().em_unit(), -1))
 {
     Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) {
-        if (check_event_for_suppress_change(evt))
-            return;
         // see https://github.com/prusa3d/PrusaSlicer/issues/3889
         // Under OSX: in case of use of a same names written in different case (like "ENDER" and "Ender")
         // m_presets_choice->GetSelection() will return first item, because search in PopupListCtrl is case-insensitive.
@@ -919,7 +905,6 @@ TabPresetComboBox::TabPresetComboBox(wxWindow* parent, Preset::Type preset_type)
         }
 
         evt.StopPropagation();
-        m_suppress_change = true;
     });
 }
 
diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp
index a76d7d18b..d3cc6277d 100644
--- a/src/slic3r/GUI/PresetComboBoxes.hpp
+++ b/src/slic3r/GUI/PresetComboBoxes.hpp
@@ -99,7 +99,6 @@ protected:
 
     PrinterTechnology printer_technology {ptAny};
 
-    bool check_event_for_suppress_change(wxCommandEvent& evt);
     void invalidate_selection();
     void validate_selection(bool predicate = false);
     void update_selection();

From 7ab1fcaa5cf94eab51697f2e32e9af37b358d75a Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Sat, 28 Nov 2020 01:17:01 +0100
Subject: [PATCH 133/138] Fixed update after editing for "infill_ancor" and
 "infill_ancor_max" parameters. * Update value only if it is changed * Show
 info dialog (suggestion to change mm to %) only when parameter value is
 bigger than 100

---
 src/slic3r/GUI/Field.cpp | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 4ef39fad5..e5ba38432 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -262,6 +262,11 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
             double val = 0.;
 			// Replace the first occurence of comma in decimal number.
 			str.Replace(",", ".", false);
+
+            // remove space and "mm" substring, if any exists
+            str.Replace(" ", "", true);
+            str.Replace("m", "", true);
+
             if (!str.ToCDouble(&val))
             {
                 if (!check_value) {
@@ -280,13 +285,15 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
                     break;
                 }
 
+                bool infill_anchors = m_opt.opt_key == "infill_anchor" || m_opt.opt_key == "infill_anchor_max";
+
                 const std::string sidetext = m_opt.sidetext.rfind("mm/s") != std::string::npos ? "mm/s" : "mm";
                 const wxString stVal = double_to_string(val, 2);
                 const wxString msg_text = from_u8((boost::format(_utf8(L("Do you mean %s%% instead of %s %s?\n"
                     "Select YES if you want to change this value to %s%%, \n"
                     "or NO if you are sure that %s %s is a correct value."))) % stVal % stVal % sidetext % stVal % stVal % sidetext).str());
                 wxMessageDialog dialog(m_parent, msg_text, _(L("Parameter validation")) + ": " + m_opt_id , wxICON_WARNING | wxYES | wxNO);
-                if (dialog.ShowModal() == wxID_YES) {
+                if ((!infill_anchors || val > 100) && dialog.ShowModal() == wxID_YES) {
                     set_value(from_u8((boost::format("%s%%") % stVal).str()), false/*true*/);
                     str += "%%";
                 }
@@ -870,20 +877,27 @@ void Choice::BUILD() {
     temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true; });
     temp->Bind(wxEVT_COMBOBOX_CLOSEUP,  [this](wxCommandEvent&) { m_is_dropped = false; });
 
-    temp->Bind(wxEVT_COMBOBOX, ([this, temp](wxCommandEvent) { on_change_field(); }), temp->GetId());
+    temp->Bind(wxEVT_COMBOBOX,          [this](wxCommandEvent&) { on_change_field(); }, temp->GetId());
 
     if (m_is_editable) {
         temp->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) {
             e.Skip();
-            if (m_opt.type == coStrings || m_opt.type == coFloatOrPercent) {
+            if (m_opt.type == coStrings) {
                 on_change_field();
                 return;
             }
 
-            double old_val = !m_value.empty() ? boost::any_cast<double>(m_value) : -99999;
             if (is_defined_input_value<choice_ctrl>(window, m_opt.type)) {
-                if (fabs(old_val - boost::any_cast<double>(get_value())) <= 0.0001)
-                    return;
+                if (m_opt.type == coFloatOrPercent) {
+                    std::string old_val = !m_value.empty() ? boost::any_cast<std::string>(m_value) : "";
+                    if (old_val == boost::any_cast<std::string>(get_value()))
+                        return;
+                }
+                else {
+                    double old_val = !m_value.empty() ? boost::any_cast<double>(m_value) : -99999;
+                    if (fabs(old_val - boost::any_cast<double>(get_value())) <= 0.0001)
+                        return;
+                }
                 on_change_field();
             }
             else

From 6d27b0f5d0d16e23ad23a490832554da2056c830 Mon Sep 17 00:00:00 2001
From: rtyr <36745189+rtyr@users.noreply.github.com>
Date: Sat, 28 Nov 2020 10:35:59 +0100
Subject: [PATCH 134/138] 1.2.0-beta0

---
 resources/profiles/PrusaResearch.idx | 290 +++++++++++----------
 resources/profiles/PrusaResearch.ini | 374 +++++++++++++++++++++++----
 2 files changed, 465 insertions(+), 199 deletions(-)

diff --git a/resources/profiles/PrusaResearch.idx b/resources/profiles/PrusaResearch.idx
index 6f647c910..45308ffa5 100644
--- a/resources/profiles/PrusaResearch.idx
+++ b/resources/profiles/PrusaResearch.idx
@@ -1,143 +1,147 @@
-min_slic3r_version = 2.3.0-alpha4
-1.2.0-alpha0 Added filament spool weights
-min_slic3r_version = 2.2.0-alpha3
-1.1.10 Updated firmware version.
-1.1.9 Updated K values in filament profiles (linear advance). Added new filament profiles and SLA materials.
-1.1.8 Updated start/end g-code scripts for MK3 family printer profiles (reduced extruder motor current for some print profiles). Added new filament and SLA material profiles.
-1.1.7 Updated end g-code for MMU2 Single printer profiles. Added/updated filament and SLA material profiles.
-1.1.6 Updated firmware version for MK2.5/S and MK3/S.
-1.1.5 Updated MMU1 specific retraction settings for Prusament PC Blend
-1.1.4 Added Prusament PC Blend filament profile.
-1.1.3 Added SLA material and filament profile
-1.1.2 Added renamed_from fields for PETG filaments to indicate that they were renamed from PET.
-1.1.1 Added Verbatim and Fiberlogy PETG filament profiles. Updated auto cooling settings for ABS.
-1.1.1-beta Updated for PrusaSlicer 2.2.0-beta
-1.1.1-alpha4 Extended list of default filaments to be installed, top/bottom_solid_min_thickness defined, infill_acceleration changed etc
-1.1.1-alpha3 Print bed textures are now configurable from the Preset Bundle. Requires PrusaSlicer 2.2.0-alpha3 and newer.
-# The following line (max_slic3r_version) forces the users of PrusaSlicer 2.2.0-alpha3 and newer to update the profiles to 1.1.1-alpha3 and newer,
-# so they will see the print bed.
-max_slic3r_version = 2.2.0-alpha2
-min_slic3r_version = 2.2.0-alpha0
-1.1.1-alpha2 Bumped up config version, so our in house customer will get updated profiles.
-1.1.0 Filament aliases, Creality profiles and other goodies for PrusaSlicer 2.2.0-alpha0
-min_slic3r_version = 2.1.1-beta0
-1.0.10 Updated firmware version for MK2.5/S and MK3/S.
-1.0.9 Updated firmware version for MK2.5/S and MK3/S.
-1.0.8 Various changes in FFF profiles, new filaments/materials added. See changelog.
-1.0.7 Updated layer height limits for MINI
-1.0.6 Added Prusa MINI profiles
-min_slic3r_version = 2.1.0-alpha0
-1.0.5 Added SLA materials
-1.0.4 Updated firmware version and 0.25mm nozzle profiles
-1.0.3 Added filament profiles
-1.0.2 Added SLA materials
-1.0.1 Updated MK3 firmware version check to 3.8.0, new soluble support profiles for 0.6mm nozzle diameter MMU2S printers.
-1.0.0 Updated end G-code for the MMU2 profiles to lift the extruder at the end of print. Wipe tower bridging distance was made smaller for soluble supports.
-1.0.0-beta1 Updated color for the ASA filaments to differ from the other filaments. Single extruder printers now have no extruder color assigned, obects and toolpaths will be colored with the color of the active filament.
-1.0.0-beta0 Printer model checks in start G-codes, ASA filament profiles, limits on min / max SL1 exposition times
-1.0.0-alpha2 Printer model and nozzle diameter check
-1.0.0-alpha1 Added Prusament ASA profile
-1.0.0-alpha0 Filament specific retract for PET and similar copolymers, and for FLEX
-min_slic3r_version = 1.42.0-alpha6
-0.8.9 Updated firmware version for MK2.5/S and MK3/S.
-0.8.8 Updated firmware version for MK2.5/S and MK3/S.
-0.8.7 Updated firmware version
-0.8.6 Updated firmware version for MK2.5/S and MK3/S
-0.8.5 Updated SL1 printer and material settings
-0.8.4 Added Prusament ASA profile
-0.8.3 FW version and SL1 materials update
-0.8.2 FFF and SL1 settings update
-0.8.1 Output settings and SLA materials update
-0.8.0 Updated for the PrusaSlicer 2.0.0 final release
-0.8.0-rc2 Updated firmware versions for MK2.5/S and MK3/S
-0.8.0-rc1 Updated SLA profiles
-0.8.0-rc Updated for the PrusaSlicer 2.0.0-rc release
-0.8.0-beta4 Updated SLA profiles
-0.8.0-beta3 Updated SLA profiles
-0.8.0-beta2 Updated SLA profiles
-0.8.0-beta1 Updated SLA profiles
-0.8.0-beta Updated SLA profiles
-0.8.0-alpha9 Updated SLA and FFF profiles
-0.8.0-alpha8 Updated SLA profiles
-0.8.0-alpha7 Updated SLA profiles
-0.8.0-alpha6 Updated SLA profiles
-min_slic3r_version = 1.42.0-alpha
-0.8.0-alpha Updated SLA profiles
-0.4.0-alpha4 Updated SLA profiles
-0.4.0-alpha3 Update of SLA profiles
-0.4.0-alpha2 First SLA profiles
-min_slic3r_version = 1.41.3-alpha
-0.4.12 Updated firmware version for MK2.5/S and MK3/S.
-0.4.11 Updated firmware version for MK2.5/S and MK3/S.
-0.4.10 Updated firmware version
-0.4.9 Updated firmware version for MK2.5/S and MK3/S
-0.4.8 MK2.5/3/S FW update
-0.4.7 MK2/S/MMU FW update
-0.4.6 Updated firmware versions for MK2.5/S and MK3/S
-0.4.5 Enabled remaining time support for MK2/S/MMU1
-0.4.4 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
-0.4.3 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
-0.4.2 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
-0.4.1 New MK2.5S and MK3S FW versions
-0.4.0 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt 
-min_slic3r_version = 1.41.1
-0.3.11 Updated firmware version for MK2.5/S and MK3/S.
-0.3.10 Updated firmware version
-0.3.9 Updated firmware version for MK2.5/S and MK3/S
-0.3.8 MK2.5/3/S FW update
-0.3.7 MK2/S/MMU FW update
-0.3.6 Updated firmware versions for MK2.5 and MK3
-0.3.5 New MK2.5 and MK3 FW versions
-0.3.4 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt 
-0.3.3 Prusament PETG released
-0.3.2 New MK2.5 and MK3 FW versions
-0.3.1 New MK2.5 and MK3 FW versions
-0.3.0 New MK2.5 and MK3 FW version
-min_slic3r_version = 1.41.0-alpha
-0.2.9 New MK2.5 and MK3 FW versions
-0.2.8 New MK2.5 and MK3 FW version
-min_slic3r_version = 1.41.1
-0.2.7 New MK2.5 and MK3 FW version
-0.2.6 Added MMU2 MK2.5 settings
-min_slic3r_version = 1.41.0-alpha
-0.2.5 Prusament is out - added prusament settings
-0.2.4 Added soluble support profiles for MMU2
-0.2.3 Added materials for MMU2 single mode, edited MK3 xy stealth feedrate limit
-0.2.2 Edited MMU2 Single mode purge line
-0.2.1 Added PET and BVOH settings for MMU2
-0.2.0-beta5 Fixed MMU1 ramming parameters
-0.2.0-beta4 Added filament loading speed at start, increased minimal purge on wipe tower
-0.2.0-beta3 Edited ramming parameters and filament cooling moves for MMU2
-0.2.0-beta2 Edited first layer speed and wipe tower position
-0.2.0-beta Removed limit on the MK3MMU2 height, added legacy M204 S T format to the MK2 profiles
-0.2.0-alpha8 Added filament_load/unload_time for the PLA/ABS MMU2 filament presets.
-0.2.0-alpha7 Vojtech's fix the incorrect *MK3* references
-0.2.0-alpha6 Jindra's way to fix the 0.2.0-alpha5 version
-0.2.0-alpha5 Bumped up firmware versions for MK2.5/MK3 to 3.3.1, disabled priming areas for MK3MMU2
-0.2.0-alpha4 Extended the custom start/end G-codes of the MMU2.0 printers for no priming towers.
-0.2.0-alpha3 Adjusted machine limits for time estimates, added filament density and cost
-0.2.0-alpha2 Renamed the key MK3SMMU to MK3MMU2, added a generic PLA MMU2 material
-0.2.0-alpha1 added initial profiles for the i3 MK3 Multi Material Upgrade 2.0
-0.2.0-alpha moved machine limits from the start G-code to the new print profile parameters
-min_slic3r_version = 1.40.0
-0.1.18 Updated firmware version
-0.1.17 Updated firmware version for MK2.5/S and MK3/S
-0.1.16 MK2.5/3/S FW update
-0.1.15 MK2/S/MMU FW update
-0.1.14 Updated firmware versions for MK2.5 and MK3
-0.1.13 New MK2.5 and MK3 FW versions
-0.1.12 New MK2.5 and MK3 FW versions
-0.1.11 fw version changed to 3.3.1
-0.1.10 MK3 jerk and acceleration update
-0.1.9 edited support extrusion width for 0.25 and 0.6 nozzles
-0.1.8 extrusion width for 0,25, 0.6 and variable layer height fixes
-0.1.7 Fixed errors in 0.25mm and 0.6mm profiles
-0.1.6 Split the MK2.5 profile from the MK2S
-min_slic3r_version = 1.40.0-beta
-0.1.5 fixed printer_variant fields for the i3 MK3 0.25 and 0.6mm nozzles
-0.1.4 edited fw version, added z-raise after print
-min_slic3r_version = 1.40.0-alpha
-0.1.3 Fixed an incorrect position of the max_print_height parameter
-0.1.2 Wipe tower changes
-0.1.1 Minor print speed adjustments
-0.1.0 Initial
+min_slic3r_version = 2.3.0-beta0
+1.2.0-beta0 Adjusted infill anchor limits. Added filament spool weights. 
+min_slic3r_version = 2.3.0-alpha4
+1.2.0-alpha1 Renamed MK3S and MINI printer profiles. Updated end g-code (MINI). Added new SLA materials and filament profiles.
+1.2.0-alpha0 Added filament spool weights
+min_slic3r_version = 2.2.0-alpha3
+1.1.11 Renamed MK3S and MINI printer profiles. Updated end g-code (MINI). Added new SLA materials and filament profiles.
+1.1.10 Updated firmware version.
+1.1.9 Updated K values in filament profiles (linear advance). Added new filament profiles and SLA materials.
+1.1.8 Updated start/end g-code scripts for MK3 family printer profiles (reduced extruder motor current for some print profiles). Added new filament and SLA material profiles.
+1.1.7 Updated end g-code for MMU2 Single printer profiles. Added/updated filament and SLA material profiles.
+1.1.6 Updated firmware version for MK2.5/S and MK3/S.
+1.1.5 Updated MMU1 specific retraction settings for Prusament PC Blend
+1.1.4 Added Prusament PC Blend filament profile.
+1.1.3 Added SLA material and filament profile
+1.1.2 Added renamed_from fields for PETG filaments to indicate that they were renamed from PET.
+1.1.1 Added Verbatim and Fiberlogy PETG filament profiles. Updated auto cooling settings for ABS.
+1.1.1-beta Updated for PrusaSlicer 2.2.0-beta
+1.1.1-alpha4 Extended list of default filaments to be installed, top/bottom_solid_min_thickness defined, infill_acceleration changed etc
+1.1.1-alpha3 Print bed textures are now configurable from the Preset Bundle. Requires PrusaSlicer 2.2.0-alpha3 and newer.
+# The following line (max_slic3r_version) forces the users of PrusaSlicer 2.2.0-alpha3 and newer to update the profiles to 1.1.1-alpha3 and newer,
+# so they will see the print bed.
+max_slic3r_version = 2.2.0-alpha2
+min_slic3r_version = 2.2.0-alpha0
+1.1.1-alpha2 Bumped up config version, so our in house customer will get updated profiles.
+1.1.0 Filament aliases, Creality profiles and other goodies for PrusaSlicer 2.2.0-alpha0
+min_slic3r_version = 2.1.1-beta0
+1.0.10 Updated firmware version for MK2.5/S and MK3/S.
+1.0.9 Updated firmware version for MK2.5/S and MK3/S.
+1.0.8 Various changes in FFF profiles, new filaments/materials added. See changelog.
+1.0.7 Updated layer height limits for MINI
+1.0.6 Added Prusa MINI profiles
+min_slic3r_version = 2.1.0-alpha0
+1.0.5 Added SLA materials
+1.0.4 Updated firmware version and 0.25mm nozzle profiles
+1.0.3 Added filament profiles
+1.0.2 Added SLA materials
+1.0.1 Updated MK3 firmware version check to 3.8.0, new soluble support profiles for 0.6mm nozzle diameter MMU2S printers.
+1.0.0 Updated end G-code for the MMU2 profiles to lift the extruder at the end of print. Wipe tower bridging distance was made smaller for soluble supports.
+1.0.0-beta1 Updated color for the ASA filaments to differ from the other filaments. Single extruder printers now have no extruder color assigned, obects and toolpaths will be colored with the color of the active filament.
+1.0.0-beta0 Printer model checks in start G-codes, ASA filament profiles, limits on min / max SL1 exposition times
+1.0.0-alpha2 Printer model and nozzle diameter check
+1.0.0-alpha1 Added Prusament ASA profile
+1.0.0-alpha0 Filament specific retract for PET and similar copolymers, and for FLEX
+min_slic3r_version = 1.42.0-alpha6
+0.8.9 Updated firmware version for MK2.5/S and MK3/S.
+0.8.8 Updated firmware version for MK2.5/S and MK3/S.
+0.8.7 Updated firmware version
+0.8.6 Updated firmware version for MK2.5/S and MK3/S
+0.8.5 Updated SL1 printer and material settings
+0.8.4 Added Prusament ASA profile
+0.8.3 FW version and SL1 materials update
+0.8.2 FFF and SL1 settings update
+0.8.1 Output settings and SLA materials update
+0.8.0 Updated for the PrusaSlicer 2.0.0 final release
+0.8.0-rc2 Updated firmware versions for MK2.5/S and MK3/S
+0.8.0-rc1 Updated SLA profiles
+0.8.0-rc Updated for the PrusaSlicer 2.0.0-rc release
+0.8.0-beta4 Updated SLA profiles
+0.8.0-beta3 Updated SLA profiles
+0.8.0-beta2 Updated SLA profiles
+0.8.0-beta1 Updated SLA profiles
+0.8.0-beta Updated SLA profiles
+0.8.0-alpha9 Updated SLA and FFF profiles
+0.8.0-alpha8 Updated SLA profiles
+0.8.0-alpha7 Updated SLA profiles
+0.8.0-alpha6 Updated SLA profiles
+min_slic3r_version = 1.42.0-alpha
+0.8.0-alpha Updated SLA profiles
+0.4.0-alpha4 Updated SLA profiles
+0.4.0-alpha3 Update of SLA profiles
+0.4.0-alpha2 First SLA profiles
+min_slic3r_version = 1.41.3-alpha
+0.4.12 Updated firmware version for MK2.5/S and MK3/S.
+0.4.11 Updated firmware version for MK2.5/S and MK3/S.
+0.4.10 Updated firmware version
+0.4.9 Updated firmware version for MK2.5/S and MK3/S
+0.4.8 MK2.5/3/S FW update
+0.4.7 MK2/S/MMU FW update
+0.4.6 Updated firmware versions for MK2.5/S and MK3/S
+0.4.5 Enabled remaining time support for MK2/S/MMU1
+0.4.4 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
+0.4.3 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
+0.4.2 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt
+0.4.1 New MK2.5S and MK3S FW versions
+0.4.0 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt 
+min_slic3r_version = 1.41.1
+0.3.11 Updated firmware version for MK2.5/S and MK3/S.
+0.3.10 Updated firmware version
+0.3.9 Updated firmware version for MK2.5/S and MK3/S
+0.3.8 MK2.5/3/S FW update
+0.3.7 MK2/S/MMU FW update
+0.3.6 Updated firmware versions for MK2.5 and MK3
+0.3.5 New MK2.5 and MK3 FW versions
+0.3.4 Changelog: https://github.com/prusa3d/Slic3r-settings/blob/master/live/PrusaResearch/changelog.txt 
+0.3.3 Prusament PETG released
+0.3.2 New MK2.5 and MK3 FW versions
+0.3.1 New MK2.5 and MK3 FW versions
+0.3.0 New MK2.5 and MK3 FW version
+min_slic3r_version = 1.41.0-alpha
+0.2.9 New MK2.5 and MK3 FW versions
+0.2.8 New MK2.5 and MK3 FW version
+min_slic3r_version = 1.41.1
+0.2.7 New MK2.5 and MK3 FW version
+0.2.6 Added MMU2 MK2.5 settings
+min_slic3r_version = 1.41.0-alpha
+0.2.5 Prusament is out - added prusament settings
+0.2.4 Added soluble support profiles for MMU2
+0.2.3 Added materials for MMU2 single mode, edited MK3 xy stealth feedrate limit
+0.2.2 Edited MMU2 Single mode purge line
+0.2.1 Added PET and BVOH settings for MMU2
+0.2.0-beta5 Fixed MMU1 ramming parameters
+0.2.0-beta4 Added filament loading speed at start, increased minimal purge on wipe tower
+0.2.0-beta3 Edited ramming parameters and filament cooling moves for MMU2
+0.2.0-beta2 Edited first layer speed and wipe tower position
+0.2.0-beta Removed limit on the MK3MMU2 height, added legacy M204 S T format to the MK2 profiles
+0.2.0-alpha8 Added filament_load/unload_time for the PLA/ABS MMU2 filament presets.
+0.2.0-alpha7 Vojtech's fix the incorrect *MK3* references
+0.2.0-alpha6 Jindra's way to fix the 0.2.0-alpha5 version
+0.2.0-alpha5 Bumped up firmware versions for MK2.5/MK3 to 3.3.1, disabled priming areas for MK3MMU2
+0.2.0-alpha4 Extended the custom start/end G-codes of the MMU2.0 printers for no priming towers.
+0.2.0-alpha3 Adjusted machine limits for time estimates, added filament density and cost
+0.2.0-alpha2 Renamed the key MK3SMMU to MK3MMU2, added a generic PLA MMU2 material
+0.2.0-alpha1 added initial profiles for the i3 MK3 Multi Material Upgrade 2.0
+0.2.0-alpha moved machine limits from the start G-code to the new print profile parameters
+min_slic3r_version = 1.40.0
+0.1.18 Updated firmware version
+0.1.17 Updated firmware version for MK2.5/S and MK3/S
+0.1.16 MK2.5/3/S FW update
+0.1.15 MK2/S/MMU FW update
+0.1.14 Updated firmware versions for MK2.5 and MK3
+0.1.13 New MK2.5 and MK3 FW versions
+0.1.12 New MK2.5 and MK3 FW versions
+0.1.11 fw version changed to 3.3.1
+0.1.10 MK3 jerk and acceleration update
+0.1.9 edited support extrusion width for 0.25 and 0.6 nozzles
+0.1.8 extrusion width for 0,25, 0.6 and variable layer height fixes
+0.1.7 Fixed errors in 0.25mm and 0.6mm profiles
+0.1.6 Split the MK2.5 profile from the MK2S
+min_slic3r_version = 1.40.0-beta
+0.1.5 fixed printer_variant fields for the i3 MK3 0.25 and 0.6mm nozzles
+0.1.4 edited fw version, added z-raise after print
+min_slic3r_version = 1.40.0-alpha
+0.1.3 Fixed an incorrect position of the max_print_height parameter
+0.1.2 Wipe tower changes
+0.1.1 Minor print speed adjustments
+0.1.0 Initial
diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini
index fa9e14b22..074723438 100644
--- a/resources/profiles/PrusaResearch.ini
+++ b/resources/profiles/PrusaResearch.ini
@@ -5,7 +5,7 @@
 name = Prusa Research
 # Configuration version of this file. Config file will only be installed, if the config_version differs.
 # This means, the server may force the PrusaSlicer configuration to be downgraded.
-config_version = 1.2.0-alpha0
+config_version = 1.2.0-beta0
 # Where to get the updates from?
 config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
 changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@@ -18,7 +18,7 @@ changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
 
 
 [printer_model:MINI]
-name = Original Prusa MINI
+name = Original Prusa MINI && MINI+
 variants = 0.4; 0.25; 0.6
 technology = FFF
 family = MINI
@@ -27,7 +27,7 @@ bed_texture = mini.svg
 default_materials = Generic PLA; Generic ABS @MINI; Generic PETG @MINI; Prusament PLA; Prusament PETG @MINI; Prusament ASA @MINI; Prusament PC Blend @MINI
 
 [printer_model:MK3S]
-name = Original Prusa i3 MK3S
+name = Original Prusa i3 MK3S && MK3S+
 variants = 0.4; 0.25; 0.6
 technology = FFF
 family = MK3
@@ -45,7 +45,7 @@ bed_texture = mk3.svg
 default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend
 
 [printer_model:MK3SMMU2S]
-name = Original Prusa i3 MK3S MMU2S
+name = Original Prusa i3 MK3S && MK3S+ MMU2S
 variants = 0.4; 0.25; 0.6
 technology = FFF
 family = MK3
@@ -228,6 +228,8 @@ wipe_tower_y = 140
 xy_size_compensation = 0
 top_solid_min_thickness = 0.6
 bottom_solid_min_thickness = 0.5
+infill_anchor = 2.5
+infill_anchor_max = 12
 
 [print:*MK3*]
 fill_pattern = grid
@@ -356,6 +358,7 @@ support_material_extrusion_width = 0.55
 support_material_contact_distance = 0.15
 support_material_xy_spacing = 80%
 output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
+infill_anchor_max = 15
 
 [print:*0.6nozzleMK3*]
 external_perimeter_extrusion_width = 0.65
@@ -371,6 +374,7 @@ bridge_speed = 25
 support_material_contact_distance = 0.15
 support_material_xy_spacing = 80%
 output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
+infill_anchor_max = 15
 
 [print:*0.6nozzleMINI*]
 external_perimeter_extrusion_width = 0.65
@@ -395,6 +399,7 @@ first_layer_acceleration = 1000
 default_acceleration = 1250
 support_material_speed = 40
 output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
+infill_anchor_max = 15
 
 [print:*soluble_support*]
 overhangs = 1
@@ -1433,7 +1438,7 @@ filament_notes = ""
 filament_settings_id = ""
 filament_soluble = 0
 min_print_speed = 15
-slowdown_below_layer_time = 20
+slowdown_below_layer_time = 15
 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif} ; Filament gcode"
 
 [filament:*PLA*]
@@ -1517,6 +1522,7 @@ filament_retract_lift = nil
 filament_retract_before_travel = 3
 filament_wipe = 0
 filament_max_volumetric_speed = 10
+slowdown_below_layer_time = 20
 compatible_printers_condition = printer_model=="MINI"
 start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.6}0.12{else}0.2{endif} ; Filament gcode"
 
@@ -1617,6 +1623,7 @@ compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.
 extrusion_multiplier = 1.2
 filament_cost = 49.99
 filament_density = 3.9
+filament_spool_weight = 236
 filament_colour = #804040
 filament_max_volumetric_speed = 9
 
@@ -1627,6 +1634,7 @@ compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.
 extrusion_multiplier = 1.2
 filament_cost = 49.99
 filament_density = 3.13
+filament_spool_weight = 236
 filament_colour = #808080
 filament_max_volumetric_speed = 8
 
@@ -1637,6 +1645,7 @@ compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.
 extrusion_multiplier = 1.2
 filament_cost = 72.89
 filament_density = 3.9
+filament_spool_weight = 236
 filament_colour = #82603E
 filament_max_volumetric_speed = 9
 
@@ -1651,6 +1660,7 @@ fan_always_on = 0
 fan_below_layer_time = 10
 filament_cost = 65.66
 filament_density = 1.18
+filament_spool_weight = 236
 first_layer_bed_temperature = 105
 first_layer_temperature = 270
 max_fan_speed = 20
@@ -1663,6 +1673,7 @@ inherits = *PLA*
 filament_vendor = ColorFabb
 filament_cost = 52.46
 filament_density = 1.24
+filament_spool_weight = 236
 
 [filament:ColorFabb woodFill]
 inherits = *PLA*
@@ -1671,6 +1682,7 @@ compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.
 extrusion_multiplier = 1.1
 filament_cost = 38.99
 filament_density = 1.15
+filament_spool_weight = 236
 filament_colour = #dfc287
 filament_max_volumetric_speed = 9
 first_layer_temperature = 200
@@ -1685,6 +1697,7 @@ compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.
 extrusion_multiplier = 1.1
 filament_cost = 38.99
 filament_density = 1.18
+filament_spool_weight = 236
 filament_colour = #634d33
 filament_max_volumetric_speed = 6
 first_layer_temperature = 220
@@ -1697,6 +1710,7 @@ inherits = *PET*
 filament_vendor = ColorFabb
 filament_cost = 38.99
 filament_density = 1.27
+filament_spool_weight = 236
 first_layer_bed_temperature = 90
 first_layer_temperature = 260
 temperature = 270
@@ -1707,6 +1721,7 @@ filament_vendor = ColorFabb
 extrusion_multiplier = 1.05
 filament_cost = 49.99
 filament_density = 1.35
+filament_spool_weight = 236
 filament_colour = #804040
 filament_max_volumetric_speed = 2
 first_layer_bed_temperature = 90
@@ -1715,12 +1730,14 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and no
 temperature = 260
 filament_retract_length = nil
 filament_retract_lift = 0.4
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:ColorFabb nGen]
 inherits = *PET*
 filament_vendor = ColorFabb
 filament_cost = 52.46
 filament_density = 1.2
+filament_spool_weight = 236
 bridge_fan_speed = 40
 fan_always_on = 0
 fan_below_layer_time = 10
@@ -1734,6 +1751,7 @@ inherits = *FLEX*
 filament_vendor = ColorFabb
 filament_cost = 58.30
 filament_density = 1
+filament_spool_weight = 236
 bed_temperature = 85
 bridge_fan_speed = 40
 cooling = 1
@@ -1764,6 +1782,7 @@ temperature = 240
 filament_retract_length = nil
 filament_retract_lift = 0.3
 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.6}0.04{else}0.06{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K15{else}M900 K30{endif} ; Filament gcode LA 1.0"
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:Kimya ABS Carbon]
 inherits = *ABSC*
@@ -1774,16 +1793,12 @@ filament_colour = #804040
 filament_max_volumetric_speed = 6
 first_layer_temperature = 260
 temperature = 260
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:Kimya ABS Kevlar]
-inherits = *ABSC*
+inherits = Kimya ABS Carbon
 filament_vendor = Kimya
-filament_cost = 140.4
 filament_density = 1.037
-filament_colour = #804040
-filament_max_volumetric_speed = 6
-first_layer_temperature = 260
-temperature = 260
 
 [filament:E3D Edge]
 inherits = *PET*
@@ -1971,13 +1986,14 @@ inherits = *ABSC*
 filament_vendor = Esun
 filament_cost = 27.82
 filament_density = 1.04
+filament_spool_weight = 265
 
 [filament:Hatchbox ABS]
 inherits = *ABSC*
 filament_vendor = Hatchbox
 filament_cost = 27.82
 filament_density = 1.04
-filament_spool_weight = 225
+filament_spool_weight = 245
 
 [filament:Plasty Mladec ABS]
 inherits = *ABSC*
@@ -1991,6 +2007,7 @@ inherits = *ABSC*
 filament_vendor = Verbatim
 filament_cost = 25.87
 filament_density = 1.05
+filament_spool_weight = 235
 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.6}0.03{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{else}M900 K20{endif} ; Filament gcode LA 1.0"
 
 [filament:Generic PETG]
@@ -2018,12 +2035,14 @@ inherits = *PLA*
 filament_vendor = Devil Design
 filament_cost = 20.99
 filament_density = 1.24
+filament_spool_weight = 250
 
 [filament:Devil Design PETG]
 inherits = *PET*
 filament_vendor = Devil Design
 filament_cost = 20.99
 filament_density = 1.23
+filament_spool_weight = 250
 first_layer_temperature = 230
 first_layer_bed_temperature = 85
 temperature = 230
@@ -2313,6 +2332,7 @@ inherits = *PET*
 filament_vendor = Verbatim
 filament_cost = 27.90
 filament_density = 1.27
+filament_spool_weight = 235
 compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:Fiberlogy PETG]
@@ -2370,6 +2390,7 @@ temperature = 230
 bed_temperature = 90
 filament_cost = 20.99
 filament_density = 1.23
+filament_spool_weight = 250
 filament_type = PETG
 
 [filament:Verbatim PETG @0.6 nozzle]
@@ -2379,6 +2400,7 @@ first_layer_temperature = 230
 temperature = 240
 filament_cost = 27.90
 filament_density = 1.27
+filament_spool_weight = 235
 filament_type = PETG
 
 [filament:Fiberlogy PETG @0.6 nozzle]
@@ -2489,18 +2511,26 @@ filament_vendor = AmazonBasics
 filament_cost = 25.4
 filament_density = 1.24
 
+[filament:Overture PLA]
+inherits = *PLA*
+filament_vendor = Overture
+filament_cost = 22
+filament_density = 1.24
+filament_spool_weight = 235
+
 [filament:Hatchbox PLA]
 inherits = *PLA*
 filament_vendor = Hatchbox
 filament_cost = 25.4
 filament_density = 1.24
-filament_spool_weight = 225
+filament_spool_weight = 245
 
 [filament:Esun PLA]
 inherits = *PLA*
 filament_vendor = Esun
 filament_cost = 25.4
 filament_density = 1.24
+filament_spool_weight = 265
 
 [filament:Das Filament PLA]
 inherits = *PLA*
@@ -2636,6 +2666,75 @@ min_fan_speed = 0
 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.6}0.05{else}0.1{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K28{else}M900 K48{endif} ; Filament gcode LA 1.0"
 temperature = 250
 
+[filament:Fiberthree F3 PA Pure Pro]
+inherits = *common*
+filament_vendor = Fiberthree
+filament_cost = 165.98
+filament_density = 1.2
+bed_temperature = 70
+first_layer_bed_temperature = 75
+first_layer_temperature = 270
+temperature = 270
+bridge_fan_speed = 30
+cooling = 1
+disable_fan_first_layers = 3
+fan_always_on = 1
+fan_below_layer_time = 20
+min_print_speed = 15
+slowdown_below_layer_time = 10
+filament_colour = #DEE0E6
+filament_max_volumetric_speed = 5
+filament_soluble = 0
+filament_type = NYLON
+max_fan_speed = 20
+min_fan_speed = 20
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K15{else}M900 K30{endif} ; Filament gcode LA 1.0"
+filament_retract_length = 2
+filament_retract_speed = 40
+filament_retract_lift = nil
+filament_retract_before_travel = 1.5
+filament_wipe = 0
+compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
+
+[filament:Fiberthree F3 PA-CF Pro]
+inherits = *common*
+filament_vendor = Fiberthree
+filament_cost = 171.98
+filament_density = 1.25
+bed_temperature = 70
+first_layer_bed_temperature = 75
+first_layer_temperature = 275
+temperature = 275
+bridge_fan_speed = 30
+cooling = 1
+disable_fan_first_layers = 3
+fan_always_on = 0
+fan_below_layer_time = 20
+min_print_speed = 15
+slowdown_below_layer_time = 10
+filament_colour = #DEE0E6
+filament_max_volumetric_speed = 5
+filament_soluble = 0
+filament_type = NYLON
+max_fan_speed = 0
+min_fan_speed = 0
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K15{else}M900 K30{endif} ; Filament gcode LA 1.0"
+filament_retract_length = 2
+filament_retract_speed = 40
+filament_retract_lift = nil
+filament_retract_before_travel = 1.5
+filament_wipe = 0
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
+
+[filament:Fiberthree F3 PA-GF Pro]
+inherits = Fiberthree F3 PA-CF Pro
+filament_vendor = Fiberthree
+filament_cost = 169.98
+filament_density = 1.27
+fan_always_on = 1
+max_fan_speed = 15
+min_fan_speed = 15
+
 [filament:Taulman T-Glase]
 inherits = *PET*
 filament_vendor = Taulman
@@ -2655,12 +2754,14 @@ inherits = *PLA*
 filament_vendor = Verbatim
 filament_cost = 42.99
 filament_density = 1.24
+filament_spool_weight = 235
 
 [filament:Verbatim BVOH]
 inherits = *common*
 filament_vendor = Verbatim
 filament_cost = 79.99
 filament_density = 1.23
+filament_spool_weight = 235
 bed_temperature = 60
 bridge_fan_speed = 100
 cooling = 0
@@ -2742,6 +2843,7 @@ inherits = *common*
 filament_vendor = Verbatim
 filament_cost = 72
 filament_density = 0.89
+filament_spool_weight = 235
 bed_temperature = 100
 bridge_fan_speed = 100
 cooling = 1
@@ -2772,6 +2874,7 @@ fan_always_on = 0
 fan_below_layer_time = 10
 filament_cost = 58.66
 filament_density = 1.18
+filament_spool_weight = 236
 first_layer_bed_temperature = 105
 first_layer_temperature = 270
 max_fan_speed = 20
@@ -2785,6 +2888,7 @@ filament_vendor = ColorFabb
 filament_type = PETG
 filament_cost = 38.99
 filament_density = 1.27
+filament_spool_weight = 236
 first_layer_bed_temperature = 90
 first_layer_temperature = 260
 temperature = 270
@@ -2792,10 +2896,11 @@ temperature = 270
 [filament:ColorFabb XT-CF20 @MMU1]
 inherits = *PETMMU1*
 filament_vendor = ColorFabb
-compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model=="MK2SMM"
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MK2SMM"
 extrusion_multiplier = 1.05
 filament_cost = 49.99
 filament_density = 1.35
+filament_spool_weight = 236
 filament_colour = #804040
 filament_max_volumetric_speed = 2
 first_layer_bed_temperature = 90
@@ -2808,6 +2913,7 @@ inherits = *PETMMU1*
 filament_vendor = ColorFabb
 filament_cost = 21.2
 filament_density = 1.2
+filament_spool_weight = 236
 bridge_fan_speed = 40
 fan_always_on = 0
 fan_below_layer_time = 10
@@ -2848,6 +2954,7 @@ inherits = *PETMMU1*
 filament_vendor = Devil Design
 filament_cost = 20.99
 filament_density = 1.23
+filament_spool_weight = 250
 first_layer_temperature = 230
 first_layer_bed_temperature = 85
 temperature = 230
@@ -2865,6 +2972,7 @@ inherits = *PETMMU1*
 filament_vendor = Verbatim
 filament_cost = 27.90
 filament_density = 1.27
+filament_spool_weight = 235
 
 [filament:Fiberlogy PETG @MMU1]
 inherits = *PETMMU1*
@@ -2904,6 +3012,65 @@ max_fan_speed = 5
 min_fan_speed = 0
 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode"
 
+[filament:Fiberthree F3 PA Pure Pro @MMU1]
+inherits = *common*
+filament_vendor = Fiberthree
+filament_cost = 165.98
+filament_density = 1.2
+bed_temperature = 70
+first_layer_bed_temperature = 75
+first_layer_temperature = 270
+temperature = 270
+bridge_fan_speed = 30
+cooling = 1
+disable_fan_first_layers = 3
+fan_always_on = 1
+fan_below_layer_time = 20
+min_print_speed = 15
+slowdown_below_layer_time = 10
+filament_colour = #DEE0E6
+filament_max_volumetric_speed = 4
+filament_soluble = 0
+filament_type = NYLON
+max_fan_speed = 20
+min_fan_speed = 20
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K15{else}M900 K30{endif} ; Filament gcode LA 1.0"
+compatible_printers_condition = printer_model=="MK2SMM"
+
+[filament:Fiberthree F3 PA-CF Pro @MMU1]
+inherits = *common*
+filament_vendor = Fiberthree
+filament_cost = 171.98
+filament_density = 1.25
+bed_temperature = 70
+first_layer_bed_temperature = 75
+first_layer_temperature = 275
+temperature = 275
+bridge_fan_speed = 30
+cooling = 1
+disable_fan_first_layers = 3
+fan_always_on = 0
+fan_below_layer_time = 20
+min_print_speed = 15
+slowdown_below_layer_time = 10
+filament_colour = #DEE0E6
+filament_max_volumetric_speed = 4
+filament_soluble = 0
+filament_type = NYLON
+max_fan_speed = 0
+min_fan_speed = 0
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K15{else}M900 K30{endif} ; Filament gcode LA 1.0"
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MK2SMM"
+
+[filament:Fiberthree F3 PA-GF Pro @MMU1]
+inherits = Fiberthree F3 PA-CF Pro @MMU1
+filament_vendor = Fiberthree
+filament_cost = 169.98
+filament_density = 1.27
+fan_always_on = 1
+max_fan_speed = 15
+min_fan_speed = 15
+
 [filament:SemiFlex or Flexfill 98A @MMU1]
 inherits = *FLEX*
 filament_vendor = Generic
@@ -2941,6 +3108,7 @@ inherits = Generic PETG; *PETMINI*
 filament_vendor = Devil Design
 filament_cost = 20.99
 filament_density = 1.23
+filament_spool_weight = 250
 first_layer_temperature = 230
 first_layer_bed_temperature = 85
 temperature = 230
@@ -2960,6 +3128,7 @@ inherits = Generic PETG; *PETMINI*
 filament_vendor = Verbatim
 filament_cost = 27.90
 filament_density = 1.27
+filament_spool_weight = 235
 compatible_printers_condition = printer_model=="MINI" and nozzle_diameter[0]!=0.6
 
 [filament:Fiberlogy PETG @MINI]
@@ -2978,11 +3147,69 @@ fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
 max_fan_speed = 15
-slowdown_below_layer_time = 20
 disable_fan_first_layers = 4
 fan_below_layer_time = 30
 bridge_fan_speed = 25
 
+[filament:Fiberthree F3 PA Pure Pro @MINI]
+inherits = *common*
+filament_vendor = Fiberthree
+filament_cost = 165.98
+filament_density = 1.2
+bed_temperature = 70
+first_layer_bed_temperature = 75
+first_layer_temperature = 270
+temperature = 270
+bridge_fan_speed = 30
+cooling = 1
+disable_fan_first_layers = 3
+fan_always_on = 1
+fan_below_layer_time = 20
+min_print_speed = 15
+slowdown_below_layer_time = 10
+filament_colour = #DEE0E6
+filament_max_volumetric_speed = 4
+filament_soluble = 0
+filament_type = NYLON
+max_fan_speed = 20
+min_fan_speed = 20
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K15{else}M900 K30{endif} ; Filament gcode LA 1.0"
+compatible_printers_condition = printer_model=="MINI"
+
+[filament:Fiberthree F3 PA-CF Pro @MINI]
+inherits = *common*
+filament_vendor = Fiberthree
+filament_cost = 171.98
+filament_density = 1.25
+bed_temperature = 70
+first_layer_bed_temperature = 75
+first_layer_temperature = 275
+temperature = 275
+bridge_fan_speed = 30
+cooling = 1
+disable_fan_first_layers = 3
+fan_always_on = 0
+fan_below_layer_time = 20
+min_print_speed = 15
+slowdown_below_layer_time = 10
+filament_colour = #DEE0E6
+filament_max_volumetric_speed = 4
+filament_soluble = 0
+filament_type = NYLON
+max_fan_speed = 0
+min_fan_speed = 0
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K15{else}M900 K30{endif} ; Filament gcode LA 1.0"
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MINI"
+
+[filament:Fiberthree F3 PA-GF Pro @MINI]
+inherits = Fiberthree F3 PA-CF Pro @MINI
+filament_vendor = Fiberthree
+filament_cost = 169.98
+filament_density = 1.27
+fan_always_on = 1
+max_fan_speed = 15
+min_fan_speed = 15
+
 [filament:Kimya ABS Carbon @MINI]
 inherits = *ABSMINI*
 filament_vendor = Kimya
@@ -2992,27 +3219,23 @@ filament_colour = #804040
 filament_max_volumetric_speed = 6
 first_layer_temperature = 260
 temperature = 260
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MINI"
 
 [filament:Kimya ABS Kevlar @MINI]
-inherits = *ABSMINI*
+inherits = Kimya ABS Carbon @MINI
 filament_vendor = Kimya
-filament_cost = 140.4
 filament_density = 1.037
-filament_colour = #804040
-filament_max_volumetric_speed = 6
-first_layer_temperature = 260
-temperature = 260
 
 [filament:Esun ABS @MINI]
 inherits = Generic ABS; *ABSMINI*
 filament_vendor = Esun
 filament_cost = 27.82
 filament_density = 1.08
+filament_spool_weight = 265
 fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
 max_fan_speed = 15
-slowdown_below_layer_time = 20
 disable_fan_first_layers = 4
 fan_below_layer_time = 30
 bridge_fan_speed = 25
@@ -3022,12 +3245,11 @@ inherits = Generic ABS; *ABSMINI*
 filament_vendor = Hatchbox
 filament_cost = 27.82
 filament_density = 1.08
-filament_spool_weight = 225
+filament_spool_weight = 245
 fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
 max_fan_speed = 15
-slowdown_below_layer_time = 20
 disable_fan_first_layers = 4
 fan_below_layer_time = 30
 bridge_fan_speed = 25
@@ -3042,7 +3264,6 @@ fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
 max_fan_speed = 15
-slowdown_below_layer_time = 20
 disable_fan_first_layers = 4
 fan_below_layer_time = 30
 bridge_fan_speed = 25
@@ -3052,11 +3273,11 @@ inherits = Generic ABS; *ABSMINI*
 filament_vendor = Verbatim
 filament_cost = 25.87
 filament_density = 1.05
+filament_spool_weight = 235
 fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
 max_fan_speed = 15
-slowdown_below_layer_time = 20
 disable_fan_first_layers = 4
 fan_below_layer_time = 30
 bridge_fan_speed = 25
@@ -3084,6 +3305,7 @@ first_layer_temperature = 240
 temperature = 240
 filament_retract_length = nil
 filament_retract_lift = 0.3
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MINI"
 
 [filament:Prusament PETG @0.6 nozzle MINI]
 inherits = Prusament PETG; *PETMINI06*
@@ -3106,6 +3328,7 @@ temperature = 230
 bed_temperature = 90
 filament_cost = 20.99
 filament_density = 1.23
+filament_spool_weight = 250
 
 [filament:Plasty Mladec PETG @0.6 nozzle MINI]
 inherits = Generic PETG; *PETMINI06*
@@ -3115,6 +3338,7 @@ filament_spool_weight = 230
 [filament:Verbatim PETG @0.6 nozzle MINI]
 inherits = Generic PETG; *PETMINI06*
 filament_vendor = Verbatim
+filament_spool_weight = 235
 
 [filament:Fiberlogy PETG @0.6 nozzle MINI]
 inherits = Generic PETG; *PETMINI06*
@@ -3250,6 +3474,7 @@ filament_spool_weight = 230
 inherits = ColorFabb nGen; *PETMINI*
 filament_cost = 52.46
 filament_density = 1.2
+filament_spool_weight = 236
 
 [filament:E3D PC-ABS @MINI]
 inherits = E3D PC-ABS; *ABSMINI*
@@ -3265,7 +3490,6 @@ fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
 max_fan_speed = 15
-slowdown_below_layer_time = 20
 disable_fan_first_layers = 4
 fan_below_layer_time = 30
 bridge_fan_speed = 25
@@ -3318,7 +3542,6 @@ min_fan_speed = 20
 max_fan_speed = 20
 bridge_fan_speed = 30
 min_print_speed = 15
-slowdown_below_layer_time = 20
 disable_fan_first_layers = 4
 fan_below_layer_time = 30
 filament_type = PC
@@ -3341,7 +3564,6 @@ fan_always_on = 0
 cooling = 1
 min_fan_speed = 15
 max_fan_speed = 15
-slowdown_below_layer_time = 20
 disable_fan_first_layers = 4
 fan_below_layer_time = 30
 bridge_fan_speed = 25
@@ -3375,6 +3597,7 @@ fan_always_on = 0
 fan_below_layer_time = 10
 filament_cost = 58.66
 filament_density = 1.18
+filament_spool_weight = 236
 first_layer_bed_temperature = 100
 first_layer_temperature = 270
 max_fan_speed = 20
@@ -3387,6 +3610,7 @@ filament_vendor = ColorFabb
 filament_type = PETG
 filament_cost = 38.99
 filament_density = 1.27
+filament_spool_weight = 236
 first_layer_bed_temperature = 90
 first_layer_temperature = 260
 temperature = 270
@@ -3394,10 +3618,11 @@ temperature = 270
 [filament:ColorFabb XT-CF20 @MINI]
 inherits = *PETMINI*
 filament_vendor = ColorFabb
-compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model=="MINI"
+compatible_printers_condition = nozzle_diameter[0]>=0.4 and printer_model=="MINI"
 extrusion_multiplier = 1.05
 filament_cost = 49.99
 filament_density = 1.35
+filament_spool_weight = 236
 filament_colour = #804040
 filament_max_volumetric_speed = 2
 first_layer_bed_temperature = 90
@@ -3825,6 +4050,27 @@ initial_exposure_time = 35
 material_type = Tough
 material_vendor = Made for Prusa
 
+[sla_material:Prusa Rich Black Tough @0.025]
+inherits = *common 0.025*
+exposure_time = 5
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Made for Prusa
+
+[sla_material:Prusa Deep Blue Transparent Tough @0.025]
+inherits = *common 0.025*
+exposure_time = 5
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Made for Prusa
+
+[sla_material:Prusa Yellow Jewelry Casting @0.025]
+inherits = *common 0.025*
+exposure_time = 8
+initial_exposure_time = 45
+material_type = Casting
+material_vendor = Made for Prusa
+
 [sla_material:Siraya Tech Simple Clear @0.025]
 inherits = *common 0.025*
 exposure_time = 8
@@ -4582,6 +4828,20 @@ initial_exposure_time = 35
 material_type = Tough
 material_vendor = Made for Prusa
 
+[sla_material:Prusa Rich Black Tough @0.05]
+inherits = *common 0.05*
+exposure_time = 8
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Made for Prusa
+
+[sla_material:Prusa Deep Blue Transparent Tough @0.05]
+inherits = *common 0.05*
+exposure_time = 8
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Made for Prusa
+
 ########### Materials 0.035
 
 [sla_material:Prusa Orange Tough @0.035]
@@ -5106,18 +5366,21 @@ min_layer_height = 0.15
 printer_variant = 0.6
 default_print_profile = 0.30mm QUALITY @0.6 nozzle MK3
 
-[printer:Original Prusa i3 MK3S]
+[printer:Original Prusa i3 MK3S & MK3S+]
 inherits = Original Prusa i3 MK3
+renamed_from = "Original Prusa i3 MK3S"
 printer_model = MK3S
 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
 
-[printer:Original Prusa i3 MK3S 0.25 nozzle]
+[printer:Original Prusa i3 MK3S & MK3S+ 0.25 nozzle]
 inherits = Original Prusa i3 MK3 0.25 nozzle
+renamed_from = "Original Prusa i3 MK3S 0.25 nozzle"
 printer_model = MK3S
 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E8.0 F700.0 ; intro line\nG1 X100.0 E12.5 F700.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
 
-[printer:Original Prusa i3 MK3S 0.6 nozzle]
+[printer:Original Prusa i3 MK3S & MK3S+ 0.6 nozzle]
 inherits = Original Prusa i3 MK3 0.6 nozzle
+renamed_from = "Original Prusa i3 MK3S 0.6 nozzle"
 printer_model = MK3S
 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
 
@@ -5184,15 +5447,17 @@ extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
 end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors\n
 
-[printer:Original Prusa i3 MK3S MMU2S Single]
+[printer:Original Prusa i3 MK3S & MK3S+ MMU2S Single]
 inherits = *mm2s*
+renamed_from = "Original Prusa i3 MK3S MMU2S Single"
 single_extruder_multi_material = 0
 default_filament_profile = Prusament PLA
 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif}
 end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+10, max_print_height)}{endif} F720 ; Move print head up\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM702 C\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors
 
-[printer:Original Prusa i3 MK3S MMU2S Single 0.6 nozzle]
-inherits = Original Prusa i3 MK3S MMU2S Single
+[printer:Original Prusa i3 MK3S & MK3S+ MMU2S Single 0.6 nozzle]
+inherits = Original Prusa i3 MK3S & MK3S+ MMU2S Single
+renamed_from = "Original Prusa i3 MK3S MMU2S Single 0.6 nozzle"
 single_extruder_multi_material = 0
 nozzle_diameter = 0.6
 max_layer_height = 0.40
@@ -5201,8 +5466,9 @@ printer_variant = 0.6
 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0
 default_print_profile = 0.30mm QUALITY @0.6 nozzle MK3
 
-[printer:Original Prusa i3 MK3S MMU2S Single 0.25 nozzle]
-inherits = Original Prusa i3 MK3S MMU2S Single
+[printer:Original Prusa i3 MK3S & MK3S+ MMU2S Single 0.25 nozzle]
+inherits = Original Prusa i3 MK3S & MK3S+ MMU2S Single
+renamed_from = "Original Prusa i3 MK3S MMU2S Single 0.25 nozzle"
 single_extruder_multi_material = 0
 nozzle_diameter = 0.25
 max_layer_height = 0.15
@@ -5212,8 +5478,9 @@ retract_lift = 0.15
 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.9.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n\n; Don't change E value below. Excessive value can damage the printer.\n{if print_settings_id=~/.*@0.25 nozzle MK3.*/}M907 E430 ; set extruder motor current{endif}
 default_print_profile = 0.10mm DETAIL @0.25 nozzle MK3
 
-[printer:Original Prusa i3 MK3S MMU2S]
+[printer:Original Prusa i3 MK3S & MK3S+ MMU2S]
 inherits = *mm2s*
+renamed_from = "Original Prusa i3 MK3S MMU2S"
 machine_max_acceleration_e = 8000,8000
 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
 extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
@@ -5222,8 +5489,9 @@ end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG
 
 ## 0.6mm nozzle MMU2/S printer profiles
 
-[printer:Original Prusa i3 MK3S MMU2S 0.6 nozzle]
-inherits = Original Prusa i3 MK3S MMU2S
+[printer:Original Prusa i3 MK3S & MK3S+ MMU2S 0.6 nozzle]
+inherits = Original Prusa i3 MK3S & MK3S+ MMU2S
+renamed_from = "Original Prusa i3 MK3S MMU2S 0.6 nozzle"
 nozzle_diameter = 0.6,0.6,0.6,0.6,0.6
 max_layer_height = 0.40
 min_layer_height = 0.15
@@ -5242,8 +5510,9 @@ default_print_profile = 0.30mm QUALITY @0.6 nozzle MK3
 
 ## MINI
 
-[printer:Original Prusa MINI]
+[printer:Original Prusa MINI & MINI+]
 inherits = *common*
+renamed_from = "Original Prusa MINI"
 printer_model = MINI
 printer_technology = FFF
 printer_variant = 0.4
@@ -5286,12 +5555,13 @@ retract_layer_change = 0
 silent_mode = 0
 remaining_times = 1
 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0.0\nG1 Y-2.0 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110.0 E8.0 F900\nG1 X40.0 E10.0 F700\nG92 E0.0\n\nM221 S95 ; set flow
-end_gcode = G1 E-1 F2100 ; retract\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+2, max_print_height)}{endif} F720 ; Move print head up\nG1 X178 Y180 F4200 ; park print head\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} F720 ; Move print head further up\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors
+end_gcode = G1 E-1 F2100 ; retract\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+2, max_print_height)}{endif} F720 ; Move print head up\nG1 X178 Y178 F4200 ; park print head\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} F720 ; Move print head further up\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors
 printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n
 extruder_colour = 
 
-[printer:Original Prusa MINI 0.25 nozzle]
-inherits = Original Prusa MINI
+[printer:Original Prusa MINI & MINI+ 0.25 nozzle]
+inherits = Original Prusa MINI & MINI+
+renamed_from = "Original Prusa MINI 0.25 nozzle"
 printer_variant = 0.25
 nozzle_diameter = 0.25
 max_layer_height = 0.15
@@ -5299,26 +5569,18 @@ min_layer_height = 0.05
 default_print_profile = 0.10mm DETAIL @0.25 nozzle MINI
 retract_length = 3
 retract_lift = 0.15
-retract_speed = 70
-deretract_speed = 40
-wipe = 1
-retract_before_wipe = 70%
 retract_before_travel = 1
 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0.0\nG1 Y-2.0 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110.0 E8.0 F600\nG1 X40.0 E10.0 F400\nG92 E0.0\n\nM221 S95 ; set flow
 
-[printer:Original Prusa MINI 0.6 nozzle]
-inherits = Original Prusa MINI
+[printer:Original Prusa MINI & MINI+ 0.6 nozzle]
+inherits = Original Prusa MINI & MINI+
+renamed_from = "Original Prusa MINI 0.6 nozzle"
 printer_variant = 0.6
 nozzle_diameter = 0.6
 max_layer_height = 0.40
 min_layer_height = 0.15
 default_print_profile = 0.30mm QUALITY @0.6 nozzle MINI
 retract_length = 3.5
-retract_lift = 0.2
-retract_speed = 70
-deretract_speed = 40
-wipe = 1
-retract_before_wipe = 70%
 retract_before_travel = 1.5
 
 [printer:Original Prusa SL1]

From 6beb49325550cd83c2b20a81fa4e18fe0174f48c Mon Sep 17 00:00:00 2001
From: David Kocik <kocikdav@gmail.com>
Date: Sat, 28 Nov 2020 10:56:31 +0100
Subject: [PATCH 135/138] Logging level at LoadFromOtherInstanceEvent

---
 src/slic3r/GUI/Plater.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index f1edb711d..6709800ff 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2132,7 +2132,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
 
 #if ENABLE_DRAG_AND_DROP_FIX
     this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent& evt) {
-        BOOST_LOG_TRIVIAL(error) << "received load from other instance event (1)";
+        BOOST_LOG_TRIVIAL(trace) << "Received load from other instance event.";
         wxArrayString input_files;
         for (size_t i = 0; i < evt.data.size(); ++i) {
             input_files.push_back(from_u8(evt.data[i].string()));
@@ -2142,7 +2142,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     });
 #else
     this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent &evt) {
-		BOOST_LOG_TRIVIAL(error) << "received load from other instance event (2)";
+		BOOST_LOG_TRIVIAL(trace) << "Received load from other instance event.";
         this->load_files(evt.data, true, true);
     });
 #endif // ENABLE_DRAG_AND_DROP_FIX

From 3dd6d7e878c42acca6f5e910191885c3b6c72a8c Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Sat, 28 Nov 2020 11:13:46 +0100
Subject: [PATCH 136/138] Escaping of ampersands in label texts (otherwise the
 ampersand is processed as a hotkey prefix and not displayed at all). Solves
 visualization of the new profile names containing ampersands (Original Prusa
 Mini & Mini+) Also the text was not correcly converted from UTF8.

---
 src/slic3r/GUI/Tab.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index 469a48527..b95488112 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -1279,7 +1279,9 @@ void Tab::update_preset_description_line()
     } else if (parent == nullptr) {
         description_line = _(L("Current preset is inherited from the default preset."));
     } else {
-        description_line = _(L("Current preset is inherited from")) + ":\n\t" + parent->name;
+        std::string name = parent->name;
+        boost::replace_all(name, "&", "&&");
+        description_line = _(L("Current preset is inherited from")) + ":\n\t" + from_u8(name);
     }
 
     if (preset.is_default || preset.is_system)

From 30d7ef2cf911c89e36aa373794952fb947929cac Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Sat, 28 Nov 2020 11:14:53 +0100
Subject: [PATCH 137/138] Bumped up version number to beta1. Changed the
 location of PrusaSlicer profiles from PrusaSlicer-alpha to PrusaSlicer-beta.

---
 src/slic3r/GUI/GUI_App.cpp | 4 ++--
 version.inc                | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 8a033610f..7a8b78664 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -663,8 +663,8 @@ bool GUI_App::init_opengl()
 void GUI_App::init_app_config()
 {
 	// Profiles for the alpha are stored into the PrusaSlicer-alpha directory to not mix with the current release.
-	SetAppName(SLIC3R_APP_KEY);
-	SetAppName(SLIC3R_APP_KEY "-alpha");
+//	SetAppName(SLIC3R_APP_KEY);
+	SetAppName(SLIC3R_APP_KEY "-beta");
 //	SetAppDisplayName(SLIC3R_APP_NAME);
 
 	// Set the Slic3r data directory at the Slic3r XS module.
diff --git a/version.inc b/version.inc
index b34ee729d..156cdc6a4 100644
--- a/version.inc
+++ b/version.inc
@@ -3,7 +3,7 @@
 
 set(SLIC3R_APP_NAME "PrusaSlicer")
 set(SLIC3R_APP_KEY "PrusaSlicer")
-set(SLIC3R_VERSION "2.3.0-alpha4")
+set(SLIC3R_VERSION "2.3.0-beta1")
 set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN")
 set(SLIC3R_RC_VERSION "2,3,0,0")
 set(SLIC3R_RC_VERSION_DOTS "2.3.0.0")

From 3f999acef867441ea35d31a9875c91ddbcc90d3f Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Sat, 28 Nov 2020 20:51:57 +0100
Subject: [PATCH 138/138] Added a missing include (gcc 8.4)

---
 src/slic3r/GUI/Tab.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index b95488112..45af589ef 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -27,6 +27,7 @@
 #include <wx/filedlg.h>
 
 #include <boost/algorithm/string/predicate.hpp>
+#include <boost/algorithm/string/replace.hpp>
 #include "wxExtensions.hpp"
 #include "PresetComboBoxes.hpp"
 #include <wx/wupdlock.h>